func_speaker.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #include "include.h"
  2. #include "func.h"
  3. #include "func_speaker.h"
  4. #if FUNC_SPEAKER_EN
  5. func_speaker_t f_spk;
  6. AT(.text.bsp.speaker)
  7. void func_speaker_stop(void)
  8. {
  9. dac_fade_out();
  10. dac_fade_wait(); //等待淡出完成
  11. audio_path_exit(AUDIO_PATH_SPEAKER);
  12. }
  13. AT(.text.bsp.speaker)
  14. void func_speaker_start(void)
  15. {
  16. dac_fade_wait(); //等待淡出完成
  17. audio_path_init(AUDIO_PATH_SPEAKER);
  18. audio_path_start(AUDIO_PATH_SPEAKER);
  19. dac_fade_in();
  20. }
  21. AT(.text.bsp.speaker)
  22. void func_speaker_pause_play(void)
  23. {
  24. if (f_spk.pause) {
  25. led_music_play();
  26. func_speaker_start();
  27. } else {
  28. led_idle();
  29. func_speaker_stop();
  30. }
  31. f_spk.pause ^= 1;
  32. }
  33. AT(.text.bsp.speaker)
  34. void func_speaker_mp3_res_play(u32 addr, u32 len)
  35. {
  36. if (len == 0) {
  37. return;
  38. }
  39. if (!f_spk.pause) {
  40. func_speaker_stop();
  41. mp3_res_play(addr, len);
  42. func_speaker_start();
  43. } else {
  44. mp3_res_play(addr, len);
  45. }
  46. }
  47. AT(.text.bsp.speaker)
  48. void func_speaker_setvol_callback(u8 dir)
  49. {
  50. if (f_spk.pause) {
  51. func_speaker_pause_play();
  52. }
  53. }
  54. AT(.com_text.func.speaker)
  55. void speaker_sdadc_process(u8 *ptr, u32 samples, int ch_mode)
  56. {
  57. sdadc_pcm_2_dac(ptr, samples, ch_mode);
  58. }
  59. AT(.text.func.speaker)
  60. void func_speaker_process(void)
  61. {
  62. func_process();
  63. }
  64. static void func_speaker_enter(void)
  65. {
  66. memset(&f_spk, 0, sizeof(f_spk));
  67. func_cb.mp3_res_play = func_speaker_mp3_res_play;
  68. func_cb.set_vol_callback = func_speaker_setvol_callback;
  69. func_speaker_enter_display();
  70. led_music_play();
  71. #if WARNING_FUNC_SPEAKER
  72. mp3_res_play(RES_BUF_SPK_MODE_MP3, RES_LEN_SPK_MODE_MP3);
  73. #endif // WARNING_FUNC_SPEAKER
  74. func_speaker_start();
  75. }
  76. static void func_speaker_exit(void)
  77. {
  78. func_speaker_exit_display();
  79. led_idle();
  80. func_speaker_stop();
  81. func_cb.last = FUNC_SPEAKER;
  82. }
  83. AT(.text.func.speaker)
  84. void func_speaker(void)
  85. {
  86. printf("%s\n", __func__);
  87. func_speaker_enter();
  88. while (func_cb.sta == FUNC_SPEAKER) {
  89. func_speaker_process();
  90. func_speaker_message(msg_dequeue());
  91. func_speaker_display();
  92. }
  93. func_speaker_exit();
  94. }
  95. #endif // FUNC_SPEAKER_EN