#ifndef _API_SDADC_H
#define _API_SDADC_H

/* [Warming] please use new api "thread_aupcm_callback_register" and "thread_aupcm_msg_post */
/* In the new api, you should use custom msg instead of following msg */
#define SDADC_DONE_TYPEDEF      uint8_t
#define SDADC_ALL_DONE          0
#define SDADC_HALF_DONE         1

typedef enum {
    MIC_ANALOG_CFG_NOT_RC   = 0,
    MIC_ANALOG_CFG_NOT_R,
    MIC_ANALOG_CFG_NORMAL,
    MIC_ANALOG_CFG_DIRECT,
} MIC_ADC_CFG;

/* [Warming] please use new api "thread_aupcm_callback_register" and "thread_aupcm_msg_post */
typedef void (*sdadc_done_callback)(SDADC_DONE_TYPEDEF msg);

/**
  * @brief  Set the sdadc sampling completion callback function
            This callback function will be called after sdadc_done_proc_kick is executed
  * @param  func:callback function
  */
/* [WARMING] please use new api thread_aupcm_callback_register */
void sdadc_done_callback_set(sdadc_done_callback func);

/**
  * @brief  Triggers the adpcm thread to handle the sdadc callback function, which will be set by sdadc_done_callback_set.
            This function is usually called inside the sdadc interrupt function
  * @param  type:SDADC_ALL_DONE or SDADC_HALF_DONE
  */
/* [WARMING] please use new api thread_aupcm_msg_post */
void sdadc_done_proc_kick(SDADC_DONE_TYPEDEF msg);

void mic_adc_init(MIC_ADC_CFG mic_type);

void mic_adc_deinit(void);

/**
  * @brief  Enable and set the bias voltage of the mic pin, mic_bias pin only map to PB1.
            Before use, you need to set the PB1 pin to analog output, turn off the pull up and down
            This function must be called after sdadc_init
  * @param  level: [0,7], bias voltage = 1.8V + level * 0.2V
  * @param  res: [8,4,2,1], res = 8k, 4k, 2k, 1k
  */
void mic_bias_open(u8 level, u8 res);

void mic_bias_close(void);

/**
  * @brief  Enable and set the bias voltage of the mic pin, mic_bias pin only map to PB1.
            Before use, you need to set the PB1 pin to analog output, turn off the pull up and down
            This function must be called after sdadc_init
  * @param  level: [0,7], bias voltage = 1.8V + level * 0.2V
  */
void mic_bias_level_set(u8 level);

/**
  * @brief  Set mic analog gain
  * @param  level: [0,7], analog gain = -6dB + level * 6dB
  */
void mic_analog_gain_set(u8 level);

#endif //_API_SDADC_H
