中科蓝讯的SDK里面貌似没有关于左右耳的标志位或者变量,但是又有客户希望在不改动硬件的时候区分左右耳,这个时候需要自己定义一个变量来完全这个区分。
1.在bsp_piano.h声明一个全局变量
extern u8 get_tws_chanl;
2.在bsp_warning_play定义为0
u8 get_tws_chanl=0;
3.在程序执行到播报提示音的时候,左右声道是不一样的,这个时候可以区分左右耳,
右耳:get_tws_chanl=1; 左耳: get_tws_chanl=2;
case T_WARNING_RIGHT_CH:
sbcplay_cb.buf = (u8 *)RES_BUF_RIGHT_CH_SBC;
sbcplay_cb.len = RES_LEN_RIGHT_CH_SBC;
printf("T_WARNING_RIGHT_CH\n");
get_tws_chanl=1;
break;
case T_WARNING_LEFT_CH:
sbcplay_cb.buf = (u8 *)RES_BUF_LEFT_CH_SBC;
sbcplay_cb.len = RES_LEN_LEFT_CH_SBC;
printf("T_WARNING_LEFT_CH\n");
get_tws_chanl=2;
break;
4.以左/右耳长按加/减音量为例
case KH_PLAY_PWR_USER_DEF:
printf("get_tws_chanl=%d\n",get_tws_chanl);
if(get_tws_chanl == 1)//右声道
{ //case KH_VOL_DOWN:
printf("tws_left_channel\n");
bsp_set_volume(bsp_volume_dec(sys_cb.vol));
if (func_cb.set_vol_callback) {
func_cb.set_vol_callback(0);
}
if ((BT_HID_VOL_CTRL_EN) && (!bt_is_testmode())&&(bt_is_ios_device())) {
bt_hid_consumer(HID_KEY_VOL_DOWN);
} else {
bsp_bt_vol_change();
}
//bsp_bt_vol_change();
#if WARNING_MIN_VOLUME
if (sys_cb.vol == 0) {
minvol_tone_play();
msg_queue_clear();
}
#endif // WARNING_MIN_VOLUME
}
if(get_tws_chanl == 2) //左声道
{
printf("get_tws_chanl == 2\n");
bsp_set_volume(bsp_volume_inc(sys_cb.vol));
if (func_cb.set_vol_callback) {
func_cb.set_vol_callback(1);
}
// bsp_bt_vol_change();
if ((BT_HID_VOL_CTRL_EN) && (!bt_is_testmode())&&(bt_is_ios_device())) {
bt_hid_consumer(HID_KEY_VOL_UP);
} else {
bsp_bt_vol_change();
}
#if WARNING_MAX_VOLUME
if (sys_cb.vol == VOL_MAX) {
sys_warning_play(T_WARNING_MAX_VOL, PIANO_MAX_VOL);
msg_queue_clear();
}
#endif // WARNING_MAX_VOLUME
}
更新 20191226
76A有个标志位可以判断左右耳
static void func_bt_tws_set_channel(void)
{
u8 left_channel = func_bt_tws_get_channel();
if (left_channel != 2) {
dac_mono_init(0, left_channel);
} else {
dac_mono_init(1, 0);
}
}