a2dp.c 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #include "include.h"
  2. #include "api.h"
  3. #define TRACE_EN 0
  4. #if TRACE_EN
  5. #define TRACE(...) printf(__VA_ARGS__)
  6. #define TRACE_R(...) print_r(__VA_ARGS__)
  7. #else
  8. #define TRACE(...)
  9. #define TRACE_R(...)
  10. #endif // TRACE_EN
  11. //下列是可重定义库中的变量
  12. //const uint8_t cfg_bt_a2dp_media_discard = 7; //播放音乐过程中,唤出语音助手后恢复音乐时,部分手机有一点杂音,需要丢几帧音乐数据
  13. const uint8_t cfg_a2dp_sbc_max_bitpool = 39; //设置SBC格式最大码率,默认值为53,可选值24~53(建议不低于39)
  14. //const uint32_t cfg_a2dp_aac_max_bitrate = 128000; //设置AAC格式最大码率,默认值为0(不限制),可选值128000, 192000, 256000,
  15. uint16_t cfg_bt_music_normal_latency = 180; //设置蓝牙普通模式延迟,默认值280ms,可选值100~450
  16. uint16_t cfg_bt_music_low_latency = 60; //设置蓝牙游戏模式延迟,默认值60ms,可选值60~100
  17. #if BT_A2DP_LHDC_AUDIO_EN || BT_A2DP_LDAC_AUDIO_EN
  18. const u32 sbc_inbuf_size = 0x10000;
  19. #endif
  20. #if !BT_A2DP_RECON_EN
  21. void a2dp_recon_hook(void)
  22. {
  23. }
  24. #endif
  25. //将系统音量转换为a2dp_vol
  26. uint8_t a2dp_vol_reverse(uint vol)
  27. {
  28. uint a2dp_vol = (vol * 1280L /VOL_MAX) /10;
  29. //32段音量时,同步手机音量由98%->100%调整为97%->100%(98%->100%有时会出现同步不了的情况:耳机音量32了,但手机音量97%)
  30. if(VOL_MAX==32 && a2dp_vol==0x7C) {
  31. a2dp_vol=0x7B;
  32. }
  33. if(a2dp_vol > 0x7f) {
  34. a2dp_vol = 0x7f;
  35. }
  36. return a2dp_vol;
  37. }
  38. //将a2dp_vol转换为系统音量级数
  39. uint8_t a2dp_vol_conver(uint8_t a2dp_vol)
  40. {
  41. uint8_t vol_unit = (1280L / VOL_MAX) / 10;
  42. if (a2dp_vol > 0 && a2dp_vol < vol_unit) {
  43. a2dp_vol = vol_unit;
  44. } else if(a2dp_vol >= 127) {
  45. return VOL_MAX;
  46. }
  47. return (a2dp_vol + 1) * VOL_MAX / 128;
  48. }
  49. //将系统音量级数转换为a2dp_vol
  50. uint a2dp_get_vol(void)
  51. {
  52. return a2dp_vol_reverse(sys_cb.vol);
  53. }
  54. //获取初次连接时蓝牙音量的回调函数
  55. uint8_t a2dp_vol_get_init_cb(uint8_t vol_feat)
  56. {
  57. if(vol_feat & BIT(0)) { //支持音量同步
  58. return a2dp_get_vol();
  59. }
  60. return 0x7f;
  61. }
  62. //按键调节音量的回调函数
  63. uint8_t a2dp_vol_adj_cb(uint8_t a2dp_vol, bool up_flag)
  64. {
  65. uint8_t vol_set = a2dp_vol_conver(a2dp_vol);
  66. if(up_flag) {
  67. vol_set = bsp_volume_inc(vol_set);
  68. } else {
  69. vol_set = bsp_volume_dec(vol_set);
  70. }
  71. TRACE("adj_vol: %d(%x)\n", sys_cb.vol, a2dp_vol);
  72. return a2dp_vol_reverse(vol_set);
  73. }
  74. AT(.com_text.a2dp)
  75. void a2dp_tws_sync_close(void)
  76. {
  77. if (!sbc_is_bypass() && !bsp_res_is_playing()) {
  78. msg_enqueue(EVT_A2DP_SYNC_CLOSE);
  79. }
  80. }