123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289 |
- #include "include.h"
- #include "bsp_dac.h"
- uint16_t cfg_pcm_out_format = 0;
- uint8_t cfg_dac_out_spr = 0;
- const u8 *dac_dvol_table;
- //数字音量DB音量表
- AT(.rodata.dac)
- const u16 dac_dvol_tbl_db[61] = {
- DIG_N0DB, DIG_N1DB, DIG_N2DB, DIG_N3DB, DIG_N4DB, DIG_N5DB, DIG_N6DB, DIG_N7DB,
- DIG_N8DB, DIG_N9DB, DIG_N10DB, DIG_N11DB, DIG_N12DB, DIG_N13DB, DIG_N14DB, DIG_N15DB,
- DIG_N16DB, DIG_N17DB, DIG_N18DB, DIG_N19DB, DIG_N20DB, DIG_N21DB, DIG_N22DB, DIG_N23DB,
- DIG_N24DB, DIG_N25DB, DIG_N26DB, DIG_N27DB, DIG_N28DB, DIG_N29DB, DIG_N30DB, DIG_N31DB,
- DIG_N32DB, DIG_N33DB, DIG_N34DB, DIG_N35DB, DIG_N36DB, DIG_N37DB, DIG_N38DB, DIG_N39DB,
- DIG_N40DB, DIG_N41DB, DIG_N42DB, DIG_N43DB, DIG_N44DB, DIG_N45DB, DIG_N46DB, DIG_N47DB,
- DIG_N48DB, DIG_N49DB, DIG_N50DB, DIG_N51DB, DIG_N52DB, DIG_N53DB, DIG_N54DB, DIG_N55DB,
- DIG_N56DB, DIG_N57DB, DIG_N58DB, DIG_N59DB, DIG_N60DB,
- };
- #if !BT_MUSIC_EFFECT_ABT_EN
- AT(.rodata.dac) const
- #endif
- u8 dac_dvol_tbl_16[16 + 1] = {
- 60, 43, 32, 26, 24, 22, 20, 18, 16,
- 14, 12, 10, 8, 6, 4, 2, 0,
- };
- #if !BT_MUSIC_EFFECT_ABT_EN
- AT(.rodata.dac) const
- #endif
- u8 dac_dvol_tbl_32[32 + 1] = {
- 60, 50, 43, 38, 35, 30, 28, 26,
- 24, 23, 22, 21, 20, 19, 18, 17,
- 16, 15, 14, 13, 12, 11, 10, 9,
- 8, 7, 6, 5, 4, 3, 2, 1, 0,
- };
- #if DAC_DNC_EN
- bool dac_dnc_is_en(void)
- {
- return DAC_DNC_EN;
- }
- #endif
- AT(.com_text.dac.dnc)
- bool dnc_tone_is_control(void)
- {
- return bsp_res_is_playing();
- }
- AT(.text.bsp.dac)
- u32 bsp_dac_get_gain_level(u8 vol)
- {
- u32 level;
- if (vol > VOL_MAX) {
- vol = VOL_MAX;
- }
- level = dac_dvol_table[vol];
- return 60 - level;
- }
- AT(.text.bsp.dac)
- void bsp_change_volume_db(u8 level)
- {
- s32 db_num;
- db_num = 60 - level;
- if (db_num > 60) {
- db_num = 60;
- }
- if (db_num < 0) {
- db_num = 0;
- }
- #if BT_MUSIC_EFFECT_DBB_EN
- if (music_effect_get_state_real(MUSIC_EFFECT_DBB)) {
- music_dbb_audio_set_vol_do(db_num);
- return;
- }
- #endif // BT_MUSIC_EFFECT_DBB_EN
- #if BT_MUSIC_EFFECT_DYEQ_EN
- if (music_effect_get_state_real(MUSIC_EFFECT_DYEQ)) {
- music_dyeq_audio_set_vol_do(db_num);
- return;
- }
- #endif // BT_MUSIC_EFFECT_DYEQ_EN
- #if BT_MUSIC_EFFECT_XDRC_EN
- if (music_effect_get_state_real(MUSIC_EFFECT_XDRC)) {
- music_xdrc_audio_set_vol_do(db_num);
- return;
- }
- #endif // BT_MUSIC_EFFECT_XDRC_EN
- #if ANC_ALG_DYVOL_FF_LOCAL_VOL_EN
- bsp_anc_alg_dyvol_gain_cal(dac_dvol_tbl_db[db_num]);
- #else
- dac_vol_set(dac_dvol_tbl_db[db_num]);
- #endif // ANC_ALG_DYVOL_FF_LOCAL_VOL_EN
- }
- AT(.text.vol.convert)
- u16 bsp_volume_convert(u8 vol)
- {
- u16 vol_set = 0;
- u8 level = 0;
- if (vol <= VOL_MAX) {
- level = dac_dvol_table[vol] + sys_cb.gain_offset;
- if (level > 60) {
- level = 60;
- }
- vol_set = dac_dvol_tbl_db[level];
- }
- return vol_set;
- }
- AT(.com_text.dac_volume)
- void bsp_change_volume(u8 vol)
- {
- u8 level = 0;
- if (vol <= VOL_MAX) {
- level = dac_dvol_table[vol] + sys_cb.gain_offset;
- if (level > 60) {
- level = 60;
- }
- #if BT_MUSIC_EFFECT_DBB_EN
- if (music_effect_get_state_real(MUSIC_EFFECT_DBB)) {
- music_dbb_audio_set_vol_do(level);
- return;
- }
- #endif // BT_MUSIC_EFFECT_DBB_EN
- #if BT_MUSIC_EFFECT_DYEQ_EN
- if (music_effect_get_state_real(MUSIC_EFFECT_DYEQ)) {
- music_dyeq_audio_set_vol_do(level);
- return;
- }
- #endif // BT_MUSIC_EFFECT_DYEQ_EN
- #if BT_MUSIC_EFFECT_XDRC_EN
- if (music_effect_get_state_real(MUSIC_EFFECT_XDRC)) {
- music_xdrc_audio_set_vol_do(level);
- return;
- }
- #endif // BT_MUSIC_EFFECT_XDRC_EN
- #if ANC_ALG_DYVOL_FF_LOCAL_VOL_EN
- bsp_anc_alg_dyvol_gain_cal(dac_dvol_tbl_db[level]);
- #else
- dac_vol_set(dac_dvol_tbl_db[level]);
- #endif // ANC_ALG_DYVOL_FF_LOCAL_VOL_EN
- }
- }
- AT(.text.bsp.dac)
- bool bsp_set_volume(u8 vol)
- {
- if (!bsp_res_is_vol_busy()) { //未播放提示音,修改音量
- bsp_change_volume(vol);
- }
- if (vol == sys_cb.vol) {
- gui_box_show_vol();
- return false;
- }
- if (vol <= VOL_MAX) {
- sys_cb.vol = vol;
- gui_box_show_vol();
- sys_cb.cm_times = 0;
- sys_cb.cm_vol_change = 1;
- }
- printf("vol: %d\n", sys_cb.vol);
- return true;
- }
- AT(.text.bsp.dac)
- u8 bsp_volume_inc(u8 vol)
- {
- vol++;
- if(vol > VOL_MAX)
- vol = VOL_MAX;
- return vol;
- }
- AT(.text.bsp.dac)
- u8 bsp_volume_dec(u8 vol)
- {
- if(vol > 0)
- vol--;
- return vol;
- }
- //vcmbuf及差分
- AT(.text.bsp.dac)
- bool bsp_dac_off_for_bt_conn(void)
- {
- if ((DAC_OFF_FOR_BT_CONN_EN) && (DAC_CH_SEL >= DAC_VCMBUF_MONO)) {
- return true;
- }
- return false;
- }
- AT(.text.bsp.dac)
- void dac_set_anl_offset(u8 bt_call_flag)
- {
- if (bt_call_flag) {
- sys_cb.gain_offset = BT_CALL_MAX_GAIN;
- } else {
- sys_cb.gain_offset = DAC_MAX_GAIN;
- }
- }
- AT(.text.bsp.dac)
- void dac_set_vol_table(u8 vol_max)
- {
- if (vol_max == 16) {
- dac_dvol_table = dac_dvol_tbl_16;
- } else {
- dac_dvol_table = dac_dvol_tbl_32;
- }
- dac_set_anl_offset(0);
- }
- //开机控制DAC电容放电等待时间
- AT(.text.dac.pull)
- void dac_pull_down_delay(void)
- {
- delay_5ms(DAC_PULL_DOWN_DELAY);
- }
- AT(.com_text.dac.mute)
- void dac_set_mute_callback(u8 mute_flag)
- {
- #if LOUDSPEAKER_MUTE_EN
- if (mute_flag) {
- bsp_loudspeaker_mute();
- } else {
- if (!sys_cb.mute) {
- bsp_loudspeaker_unmute();
- //DAC延时淡入,防止UNMUTE时间太短导致喇叭声音不全的问题
- dac_unmute_set_delay(LOUDSPEAKER_UNMUTE_DELAY);
- }
- }
- #endif
- }
- AT(.text.bsp.dac)
- void dac_init(void)
- {
- cfg_dac_out_spr = DAC_OUT_SPR;
- //#if FUNC_USBDEV_EN
- // cfg_pcm_out_format = PCM_OUT_24BITS; //打开usb device默认用24bit dac
- //#else
- cfg_pcm_out_format = (DAC_24BITS_EN * PCM_OUT_24BITS) /*| PCM_OUT_MONO*/;
- //#endif
- dac_set_vol_table(xcfg_cb.vol_max);
- printf("[%s] vol_max:%d, offset: %d\n", __func__, xcfg_cb.vol_max, sys_cb.gain_offset);
- dac_aubuf_init();
- dac_power_on();
- dac_ang_gain_set(ANL_N0DB);
- plugin_music_eq();
- #if DAC_EQ_AFTER_VOL_EN
- music_eq_set_after_vol();
- #endif // DAC_EQ_AFTER_VOL_EN
- #if DAC_DRC_EN
- music_set_drc_by_res(RES_BUF_EQ_DAC_DRC, RES_LEN_EQ_DAC_DRC);
- #endif
- #if DAC_DNC_EN
- dac_dnc_init();
- dac_dnc_start();
- #endif
- }
- #if BT_MUSIC_EFFECT_ABT_EN
- AT(.text.bsp.dac.vol)
- void bsp_set_dac_dvol_tbl(u8* buf)
- {
- if (buf[2]) {
- memcpy(dac_dvol_tbl_32, &buf[3], 33);
- } else {
- memcpy(dac_dvol_tbl_16, &buf[3], 17);
- }
- bsp_set_volume(sys_cb.vol);
- }
- #endif // BT_MUSIC_EFFECT_ABT_EN
|