80 lines
2.3 KiB
C
80 lines
2.3 KiB
C
#include "include.h"
|
|
|
|
void bt_aec_process(u8 *ptr, u32 samples, int ch_mode);
|
|
void bt_adc_process(u8 *ptr, u32 samples, int ch_mode);
|
|
void bt_alc_process(u8 *ptr, u32 samples, int ch_mode);
|
|
void speaker_sdadc_process(u8 *ptr, u32 samples, int ch_mode);
|
|
void usbmic_sdadc_process(u8 *ptr, u32 samples, int ch_mode);
|
|
|
|
#if UDE_MIC_EN
|
|
#define usbmic_sdadc_callback usbmic_sdadc_process
|
|
#else
|
|
#define usbmic_sdadc_callback sdadc_dummy
|
|
#endif // UDE_MIC_EN
|
|
|
|
#if BT_ALC_EN
|
|
#define bt_sdadc_callback bt_alc_process
|
|
#else
|
|
#define bt_sdadc_callback bt_sco_process
|
|
#endif
|
|
|
|
|
|
//MIC analog gain: 0~13(共14级), step 3DB (3db ~ +42db)
|
|
//adadc digital gain: 0~63, step 0.5 DB, 保存在gain的低6bit
|
|
const sdadc_cfg_t rec_cfg_tbl[] = {
|
|
/* 通道, 采样率, 增益, 通路控制, 保留, 样点数, 回调函数*/
|
|
{CH_MIC_PF0, SPR_16000, (12 << 6), ADC2DAC_EN, 0, 240, sdadc_dummy}, /* SPEAKER */
|
|
{CH_MIC_PF0, SPR_8000, (12 << 6), ADC2DAC_EN, 0, 240, bt_sdadc_callback}, /* BTMIC */
|
|
{CH_MIC_PF0, SPR_48000, (12 << 6), ADC2DAC_EN, 0, 128, usbmic_sdadc_callback}, /* USBMIC */
|
|
};
|
|
|
|
void audio_path_init(u8 path_idx)
|
|
{
|
|
sdadc_cfg_t cfg;
|
|
memcpy(&cfg, &rec_cfg_tbl[path_idx], sizeof(sdadc_cfg_t));
|
|
|
|
if (path_idx == AUDIO_PATH_BTMIC) {
|
|
|
|
#if BT_AEC_EN
|
|
if (xcfg_cb.bt_aec_en) {
|
|
cfg.callback = bt_aec_process;
|
|
} else
|
|
#endif
|
|
#if BT_ALC_EN
|
|
if (xcfg_cb.bt_alc_en) {
|
|
cfg.callback = bt_alc_process;
|
|
} else
|
|
#endif
|
|
{
|
|
cfg.callback = bt_adc_process;
|
|
}
|
|
if (bt_sco_is_msbc()) {
|
|
cfg.sample_rate = SPR_16000;
|
|
}
|
|
cfg.gain = ((u16)BT_ANL_GAIN << 6) | BT_DIG_GAIN;
|
|
}
|
|
sdadc_init(&cfg);
|
|
}
|
|
|
|
void audio_path_start(u8 path_idx)
|
|
{
|
|
sdadc_cfg_t cfg;
|
|
memcpy(&cfg, &rec_cfg_tbl[path_idx], sizeof(sdadc_cfg_t));
|
|
sdadc_start(cfg.channel);
|
|
}
|
|
|
|
void audio_path_exit(u8 path_idx)
|
|
{
|
|
sdadc_cfg_t cfg;
|
|
memcpy(&cfg, &rec_cfg_tbl[path_idx], sizeof(sdadc_cfg_t));
|
|
sdadc_exit(cfg.channel);
|
|
adpll_spr_set(DAC_OUT_SPR);
|
|
}
|
|
|
|
u8 get_mic_dig_gain(void)
|
|
{
|
|
return BT_DIG_GAIN;
|
|
}
|
|
|
|
|