func_usbdev.c 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. #include "include.h"
  2. #include "func.h"
  3. #include "func_usbdev.h"
  4. #if HLW_UI
  5. #include "hlw_func.h"
  6. #endif // HLW_UI
  7. #if FUNC_USBDEV_EN
  8. f_ude_t f_ude;
  9. uint8_t usb_det_ver_sel = USB_DET_VER_SEL;
  10. uint8_t usb_user_cfg_dev_en = USB_USER_CFG_DEV_EN;
  11. uint8_t uac_ver_sel = UAC_VER_SEL;
  12. uint8_t cfg_desc_cfg_type = CFG_DESC_CFG_TYPE;
  13. uint8_t cfg_usb_maxpower = CFG_USB_MAXPOWER;
  14. uint8_t cfg_get_conf_len = CFG_GET_CONF_LEN;
  15. uint8_t usb_driver_max_en = USB_DRIVER_MAX_EN;
  16. uint8_t udm_vol_default_sel = UDM_VOL_DEFAULT_SEL;
  17. uint8_t uda_balance_vol_en = UDA_BALANCE_VOL_EN;
  18. uint8_t uda_balance_id_sel = UDA_BALANCE_ID_SEL;
  19. uint8_t usb_spk_spl_en = USB_SPK_SPL_EN;
  20. uint8_t usb_spk_bits_en = USB_SPK_BITS_EN;
  21. uint8_t usb_spk_sync_mode_en= USB_SPK_SYNC_MODE_EN;
  22. #if UDE_MIC_EN
  23. uint8_t usb_mic_dch_en = USB_MIC_DCH_EN;
  24. uint8_t usb_mic_spl_en = USB_MIC_SPL_EN;
  25. uint8_t usb_mic_bits_en = USB_MIC_BITS_EN;
  26. #endif
  27. AT(.usbdev.com)
  28. bool uda_is_bypass(void)
  29. {
  30. return f_ude.uda_bypass;
  31. }
  32. AT(.text.func.usbdev)
  33. void func_usbdev_mp3_res_play(u32 addr, u32 len)
  34. {
  35. if (len == 0) {
  36. return;
  37. }
  38. dac_fade_out();
  39. dac_fade_wait();
  40. f_ude.uda_bypass = true;
  41. delay_5ms(2);
  42. mp3_res_play(addr, len);
  43. dac_spr_set(DAC_OUT_SPR);
  44. f_ude.uda_bypass = false;
  45. dac_fade_in();
  46. }
  47. AT(.text.func.usbdev)
  48. void ude_mic_start(u8 spr)
  49. {
  50. #if USB_MIC_NR_EN
  51. uda_nr_alg_init();
  52. #endif
  53. set_mic_disframe(1000);
  54. sys_cb.ude_mic_spr = spr;
  55. audio_path_init(AUDIO_PATH_USBMIC);
  56. audio_path_start(AUDIO_PATH_USBMIC);
  57. }
  58. AT(.text.func.usbdev)
  59. void ude_mic_stop(void)
  60. {
  61. audio_path_exit(AUDIO_PATH_USBMIC);
  62. #if USB_MIC_NR_EN
  63. uda_nr_alg_exit();
  64. #endif
  65. }
  66. u8 ude_get_sys_volume(void)
  67. {
  68. return sys_cb.db_level;
  69. }
  70. u8 ude_get_sys_vol_max(void)
  71. {
  72. return VOL_MAX;
  73. }
  74. AT(.usbdev.com)
  75. void ude_set_sys_volume(u8 vol)
  76. {
  77. if (sys_cb.db_level != vol) {
  78. sys_cb.db_level = vol;
  79. msg_enqueue(EVT_UDE_SET_VOL);
  80. }
  81. }
  82. //usb左右声道均衡
  83. void uda_set_balance_vol(u8 vol_l, u8 vol_r)
  84. {
  85. #if UDA_BALANCE_VOL_EN
  86. u16 dvol_l = dac_dvol_tbl_db[60 - vol_l];
  87. u16 dvol_r = dac_dvol_tbl_db[60 - vol_r];
  88. dac_balance_set(dvol_l, dvol_r);
  89. #endif
  90. }
  91. #if UDE_STORAGE_EN
  92. AT(.text.func.usbdev)
  93. void ude_sdcard_switch(u8 dev)
  94. {
  95. // printf("%s, %d, %d\n", __func__, f_ude.cur_dev, dev);
  96. if (f_ude.cur_dev != dev) {
  97. ude_sd_remove();
  98. f_ude.cur_dev = dev;
  99. fsdisk_callback_init(f_ude.cur_dev);
  100. f_ude.dev_change = 1;
  101. } else {
  102. sd0_init();
  103. }
  104. }
  105. AT(.text.func.usbdev)
  106. void ude_sdcard_change_process(void)
  107. {
  108. static u8 cnt_s = 0;
  109. if (f_ude.dev_change) {
  110. cnt_s++;
  111. if (cnt_s >= 5) {
  112. f_ude.dev_change = 0;
  113. sd0_init();
  114. }
  115. } else {
  116. cnt_s = 0;
  117. }
  118. }
  119. #endif // UDE_STORAGE_EN
  120. AT(.text.func.usbdev)
  121. void func_usbdev_process(void)
  122. {
  123. func_process();
  124. usb_device_process();
  125. f_ude.rw_sta = sd0_get_rw_sta();
  126. }
  127. static void func_usbdev_enter(void)
  128. {
  129. usb_cfg_init();
  130. sys_cb.db_level = bsp_dac_get_gain_level(sys_cb.vol);
  131. f_ude.vol = sys_cb.vol; //restore system volume
  132. #if HLW_UI
  133. ude_set_sys_volume(bsp_dac_get_gain_level(VOL_MAX));
  134. #endif // HLW_UI
  135. if (!dev_is_online(DEV_USBPC)) {
  136. func_cb.sta = FUNC_NULL;
  137. return;
  138. }
  139. func_cb.mp3_res_play = func_usbdev_mp3_res_play;
  140. f_ude.cur_dev = DEV_SDCARD;
  141. f_ude.dev_change = 0;
  142. func_usbdev_enter_display();
  143. #if !HLW_UI
  144. led_idle();
  145. #endif // HLW_UI
  146. cfg_get_conf_len = CFG_GET_CONF_LEN;
  147. udm_vol_default_sel = UDM_VOL_DEFAULT_SEL & 0x3;
  148. #if WARNING_FUNC_USBDEV
  149. mp3_res_play(RES_BUF_PC_MODE_MP3, RES_LEN_PC_MODE_MP3);
  150. #endif // WARNING_FUNC_USBDEV
  151. #if UDE_SPEAKER_EN
  152. adpll_spr_set(DAC_OUT_96K);
  153. dac_spr_set(DAC_OUT_96K); //samplerate 96K
  154. DACDIGCON0 |= BIT(6); //Src0 Sample Rate Synchronization Enable
  155. dac_fade_in();
  156. aubuf0_dma_init();
  157. #endif // UDE_SPEAKER_EN
  158. #if UDE_MIC_EN
  159. #if USB_MIC_NR_EN
  160. src_var_init();
  161. #endif
  162. #endif
  163. #if UDE_STORAGE_EN
  164. if (dev_is_online(DEV_SDCARD) || dev_is_online(DEV_SDCARD1)) {
  165. if (dev_is_online(DEV_SDCARD)) {
  166. f_ude.cur_dev = DEV_SDCARD;
  167. } else if (dev_is_online(DEV_SDCARD1)) {
  168. f_ude.cur_dev = DEV_SDCARD1;
  169. }
  170. fsdisk_callback_init(f_ude.cur_dev);
  171. fs_mount();
  172. }
  173. #endif // UDE_STORAGE_EN
  174. #if !USB_BC_EN
  175. usb_bc_init(0);
  176. #endif
  177. if(!UDA_BALANCE_ID_SEL && (0 == UDE_MIC_EN)){
  178. uda_balance_vol_en = 0;//关闭3节耳机左右声道均衡功能
  179. }
  180. usb_device_enter(UDE_ENUM_TYPE);
  181. #if HLW_UI
  182. led_init();
  183. hlw_func_charge_init_handle();
  184. hlw_func_charge_electric_init();
  185. hlw_func_ntc_var_init();
  186. hlw_cb.charge_qian30s_flag = true;
  187. hlw_cb.charge_qian30s_count = 0;
  188. hlw_cb.charging_flag = true;
  189. hlw_cb.exit_charge_count = 0;
  190. vusb4s_reset_en();
  191. if(sys_cb.anc_user_mode != 0)
  192. {
  193. bsp_anc_set_mode(sys_cb.anc_user_mode);
  194. }
  195. printf("%s", __func__);
  196. #endif // HLW_UI
  197. }
  198. static void func_usbdev_exit(void)
  199. {
  200. #if HLW_UI
  201. hlw_func_charge_electric_control_handle(0);
  202. hlw_func_charge_enable_handle(0);
  203. #endif
  204. usb_device_exit();
  205. func_usbdev_exit_display();
  206. #if UDE_MIC_EN
  207. ude_mic_stop();
  208. #endif
  209. #if UDE_SPEAKER_EN
  210. DACDIGCON0 &= ~BIT(6);
  211. adpll_spr_set(DAC_OUT_SPR);
  212. sys_cb.vol = f_ude.vol; //recover system volume
  213. bsp_change_volume(sys_cb.vol);
  214. dac_fade_out();
  215. #endif // UDE_SPEAKER_EN
  216. #if UDE_STORAGE_EN
  217. if (dev_is_online(DEV_SDCARD) || dev_is_online(DEV_SDCARD1)) {
  218. sd0_stop(1);
  219. #if I2C_MUX_SD_EN
  220. sd0_go_idle_state();
  221. #endif
  222. }
  223. #endif // UDE_STORAGE_EN
  224. func_cb.last = FUNC_USBDEV;
  225. }
  226. AT(.text.func.usbdev)
  227. void func_usbdev(void)
  228. {
  229. printf("%s\n", __func__);
  230. func_usbdev_enter();
  231. while (func_cb.sta == FUNC_USBDEV) {
  232. func_usbdev_process();
  233. func_usbdev_message(msg_dequeue());
  234. func_usbdev_display();
  235. }
  236. func_usbdev_exit();
  237. }
  238. #else
  239. AT(.text.func.usbdev)
  240. void ude_mic_start(u8 spr){}
  241. AT(.text.func.usbdev)
  242. void ude_mic_stop(void){}
  243. AT(.usbdev.com)
  244. u8 ude_get_sys_volume(void){return 0;}
  245. AT(.usbdev.com)
  246. u8 ude_get_sys_vol_level(void){return 0;}
  247. AT(.usbdev.com)
  248. void ude_set_sys_volume(u8 vol){}
  249. #endif // FUNC_USBDEV_EN