123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283 |
- #include "include.h"
- #include "func.h"
- #include "func_usbdev.h"
- #if HLW_UI
- #include "hlw_func.h"
- #endif // HLW_UI
- #if FUNC_USBDEV_EN
- f_ude_t f_ude;
- uint8_t usb_det_ver_sel = USB_DET_VER_SEL;
- uint8_t usb_user_cfg_dev_en = USB_USER_CFG_DEV_EN;
- uint8_t uac_ver_sel = UAC_VER_SEL;
- uint8_t cfg_desc_cfg_type = CFG_DESC_CFG_TYPE;
- uint8_t cfg_usb_maxpower = CFG_USB_MAXPOWER;
- uint8_t cfg_get_conf_len = CFG_GET_CONF_LEN;
- uint8_t usb_driver_max_en = USB_DRIVER_MAX_EN;
- uint8_t udm_vol_default_sel = UDM_VOL_DEFAULT_SEL;
- uint8_t uda_balance_vol_en = UDA_BALANCE_VOL_EN;
- uint8_t uda_balance_id_sel = UDA_BALANCE_ID_SEL;
- uint8_t usb_spk_spl_en = USB_SPK_SPL_EN;
- uint8_t usb_spk_bits_en = USB_SPK_BITS_EN;
- uint8_t usb_spk_sync_mode_en= USB_SPK_SYNC_MODE_EN;
- #if UDE_MIC_EN
- uint8_t usb_mic_dch_en = USB_MIC_DCH_EN;
- uint8_t usb_mic_spl_en = USB_MIC_SPL_EN;
- uint8_t usb_mic_bits_en = USB_MIC_BITS_EN;
- #endif
- AT(.usbdev.com)
- bool uda_is_bypass(void)
- {
- return f_ude.uda_bypass;
- }
- AT(.text.func.usbdev)
- void func_usbdev_mp3_res_play(u32 addr, u32 len)
- {
- if (len == 0) {
- return;
- }
- dac_fade_out();
- dac_fade_wait();
- f_ude.uda_bypass = true;
- delay_5ms(2);
- mp3_res_play(addr, len);
- dac_spr_set(DAC_OUT_SPR);
- f_ude.uda_bypass = false;
- dac_fade_in();
- }
- AT(.text.func.usbdev)
- void ude_mic_start(u8 spr)
- {
- #if USB_MIC_NR_EN
- uda_nr_alg_init();
- #endif
- set_mic_disframe(1000);
- sys_cb.ude_mic_spr = spr;
- audio_path_init(AUDIO_PATH_USBMIC);
- audio_path_start(AUDIO_PATH_USBMIC);
- }
- AT(.text.func.usbdev)
- void ude_mic_stop(void)
- {
- audio_path_exit(AUDIO_PATH_USBMIC);
- #if USB_MIC_NR_EN
- uda_nr_alg_exit();
- #endif
- }
- u8 ude_get_sys_volume(void)
- {
- return sys_cb.db_level;
- }
- u8 ude_get_sys_vol_max(void)
- {
- return VOL_MAX;
- }
- AT(.usbdev.com)
- void ude_set_sys_volume(u8 vol)
- {
- if (sys_cb.db_level != vol) {
- sys_cb.db_level = vol;
- msg_enqueue(EVT_UDE_SET_VOL);
- }
- }
- //usb左右声道均衡
- void uda_set_balance_vol(u8 vol_l, u8 vol_r)
- {
- #if UDA_BALANCE_VOL_EN
- u16 dvol_l = dac_dvol_tbl_db[60 - vol_l];
- u16 dvol_r = dac_dvol_tbl_db[60 - vol_r];
- dac_balance_set(dvol_l, dvol_r);
- #endif
- }
- #if UDE_STORAGE_EN
- AT(.text.func.usbdev)
- void ude_sdcard_switch(u8 dev)
- {
- // printf("%s, %d, %d\n", __func__, f_ude.cur_dev, dev);
- if (f_ude.cur_dev != dev) {
- ude_sd_remove();
- f_ude.cur_dev = dev;
- fsdisk_callback_init(f_ude.cur_dev);
- f_ude.dev_change = 1;
- } else {
- sd0_init();
- }
- }
- AT(.text.func.usbdev)
- void ude_sdcard_change_process(void)
- {
- static u8 cnt_s = 0;
- if (f_ude.dev_change) {
- cnt_s++;
- if (cnt_s >= 5) {
- f_ude.dev_change = 0;
- sd0_init();
- }
- } else {
- cnt_s = 0;
- }
- }
- #endif // UDE_STORAGE_EN
- AT(.text.func.usbdev)
- void func_usbdev_process(void)
- {
- func_process();
- usb_device_process();
- f_ude.rw_sta = sd0_get_rw_sta();
- }
- static void func_usbdev_enter(void)
- {
- usb_cfg_init();
- sys_cb.db_level = bsp_dac_get_gain_level(sys_cb.vol);
- f_ude.vol = sys_cb.vol; //restore system volume
- #if HLW_UI
- ude_set_sys_volume(bsp_dac_get_gain_level(VOL_MAX));
- #endif // HLW_UI
- if (!dev_is_online(DEV_USBPC)) {
- func_cb.sta = FUNC_NULL;
- return;
- }
- func_cb.mp3_res_play = func_usbdev_mp3_res_play;
- f_ude.cur_dev = DEV_SDCARD;
- f_ude.dev_change = 0;
- func_usbdev_enter_display();
- #if !HLW_UI
- led_idle();
- #endif // HLW_UI
- cfg_get_conf_len = CFG_GET_CONF_LEN;
- udm_vol_default_sel = UDM_VOL_DEFAULT_SEL & 0x3;
- #if WARNING_FUNC_USBDEV
- mp3_res_play(RES_BUF_PC_MODE_MP3, RES_LEN_PC_MODE_MP3);
- #endif // WARNING_FUNC_USBDEV
- #if UDE_SPEAKER_EN
- adpll_spr_set(DAC_OUT_96K);
- dac_spr_set(DAC_OUT_96K); //samplerate 96K
- DACDIGCON0 |= BIT(6); //Src0 Sample Rate Synchronization Enable
- dac_fade_in();
- aubuf0_dma_init();
- #endif // UDE_SPEAKER_EN
- #if UDE_MIC_EN
- #if USB_MIC_NR_EN
- src_var_init();
- #endif
- #endif
- #if UDE_STORAGE_EN
- if (dev_is_online(DEV_SDCARD) || dev_is_online(DEV_SDCARD1)) {
- if (dev_is_online(DEV_SDCARD)) {
- f_ude.cur_dev = DEV_SDCARD;
- } else if (dev_is_online(DEV_SDCARD1)) {
- f_ude.cur_dev = DEV_SDCARD1;
- }
- fsdisk_callback_init(f_ude.cur_dev);
- fs_mount();
- }
- #endif // UDE_STORAGE_EN
- #if !USB_BC_EN
- usb_bc_init(0);
- #endif
- if(!UDA_BALANCE_ID_SEL && (0 == UDE_MIC_EN)){
- uda_balance_vol_en = 0;//关闭3节耳机左右声道均衡功能
- }
- usb_device_enter(UDE_ENUM_TYPE);
- #if HLW_UI
- led_init();
- hlw_func_charge_init_handle();
- hlw_func_charge_electric_init();
- hlw_func_ntc_var_init();
- hlw_cb.charge_qian30s_flag = true;
- hlw_cb.charge_qian30s_count = 0;
- hlw_cb.charging_flag = true;
- hlw_cb.exit_charge_count = 0;
- vusb4s_reset_en();
- if(sys_cb.anc_user_mode != 0)
- {
- bsp_anc_set_mode(sys_cb.anc_user_mode);
- }
- printf("%s", __func__);
- #endif // HLW_UI
- }
- static void func_usbdev_exit(void)
- {
- #if HLW_UI
- hlw_func_charge_electric_control_handle(0);
- hlw_func_charge_enable_handle(0);
- #endif
- usb_device_exit();
- func_usbdev_exit_display();
- #if UDE_MIC_EN
- ude_mic_stop();
- #endif
- #if UDE_SPEAKER_EN
- DACDIGCON0 &= ~BIT(6);
- adpll_spr_set(DAC_OUT_SPR);
- sys_cb.vol = f_ude.vol; //recover system volume
- bsp_change_volume(sys_cb.vol);
- dac_fade_out();
- #endif // UDE_SPEAKER_EN
- #if UDE_STORAGE_EN
- if (dev_is_online(DEV_SDCARD) || dev_is_online(DEV_SDCARD1)) {
- sd0_stop(1);
- #if I2C_MUX_SD_EN
- sd0_go_idle_state();
- #endif
- }
- #endif // UDE_STORAGE_EN
- func_cb.last = FUNC_USBDEV;
- }
- AT(.text.func.usbdev)
- void func_usbdev(void)
- {
- printf("%s\n", __func__);
- func_usbdev_enter();
- while (func_cb.sta == FUNC_USBDEV) {
- func_usbdev_process();
- func_usbdev_message(msg_dequeue());
- func_usbdev_display();
- }
- func_usbdev_exit();
- }
- #else
- AT(.text.func.usbdev)
- void ude_mic_start(u8 spr){}
- AT(.text.func.usbdev)
- void ude_mic_stop(void){}
- AT(.usbdev.com)
- u8 ude_get_sys_volume(void){return 0;}
- AT(.usbdev.com)
- u8 ude_get_sys_vol_level(void){return 0;}
- AT(.usbdev.com)
- void ude_set_sys_volume(u8 vol){}
- #endif // FUNC_USBDEV_EN
|