前言
现在为止也开发了许多杰理和中科蓝讯蓝牙芯片的TWS蓝牙耳机、音响项目 SDK 的案子,在调试案子时不断的向前辈们学习到了很多关于蓝牙音响、蓝牙TWS耳机专业的知识。想在这里做一个学习汇总,方便各位同行和对中科蓝汛芯片SDK感兴趣的小伙伴们学习;
本章详细讲解BT897X、BT891X、AB573X、AB572X 系列SDK实现通过左右耳实现一个按键控制两个功能代码
步骤一:创建TWS声道分配选择模式进行获取左右耳函数u8 lyf_get_ear_side(void)

#if LYF_USER_ONE_KEY_L_R_EN
//获取本机耳别: 1=左耳, 0=右耳, 0xff=身份未知
//支持全部三种左右区分方案:
// mode 9/10/11: GPIO检测/固定左/固定右 —— 蓝牙初始化时已确定, 单耳也有效
// mode 1/2: 主从动态分配 —— 组队后(first_role)才确定
// mode 0等: 未配置左右区分
u8 lyf_get_ear_side(void)
{
#if BT_TWS_EN
u8 mode = xcfg_cb.bt_tws_lr_mode;
if (xcfg_cb.bt_tws_en) {
if (mode > 8 && bt_tws_is_connected()) { //9:GPIO接地检测 10:固定左 11:固定右
tws_lr_xcfg_sel(); //幂等: 初始化已检测; 此处兜底防未初始化
return sys_cb.tws_left_channel ? 1 : 0;
}
if ((mode == 1 || mode == 2) && bt_tws_is_connected()) {
return sys_cb.tws_left_channel ? 1 : 0; //主从动态: 组队后确定
}
}
#endif
return 0xff;
}
#endif //LYF_USER_ONE_KEY_L_R_EN
函数声明

注意:这里无论什么TWS声道分配选择模式下我都添加了TWS连接判断,这意味着获取左右耳状态必须要在对耳在TWS连接下才会执行;
以后要根据实际项目UI功能表是否添加TWS连接判断。UI要求单耳情况执行默认功能,那么就添加TWS连接判断 ;UI要求单耳情况执行左耳右耳时功能,那么就添加TWS连接判断
情况1:if (mode > 8 && bt_tws_is_connected())添加TWS连接判断时,单耳情况执行代码将进入func_bt_message_do函数执行对应默认功能; 情况2:if (mode > 8 )不添加TWS连接判断时,单耳情况执行代码将进入lyf_lr_msg_remap函数执行对应左耳、右耳功能;
步骤二、 创建一个按键区分左右耳执行不同功能核心处理函数 lyf_lr_msg_remap

#if LYF_USER_ONE_KEY_L_R_EN
//一个按键区分左右耳: 按键消息重映射(左耳/右耳执行不同功能)
//单耳(0xff)不映射, 保持默认功能; 映射目标为SDK标准消息, 复用下方原有case处理
static u16 lyf_lr_msg_remap(u16 msg)
{
u8 side = lyf_get_ear_side();
#ifdef LYF_USER_LOG_KEY_EN
printf("[LYF_LR_KEY]-side:%d, in_msg:%x\\n", side, msg);
#endif
if (side == 0xff) {
return msg; //单耳/未组队: 走默认功能
}
switch (msg) {
case MSG_LYF_USER_LONG: //长按: 左耳=上一曲, 右耳=下一曲
return (side == 1) ? MSG_MUSIC_PREV : MSG_MUSIC_NEXT;
default:
return msg;
}
}
#endif //LYF_USER_ONE_KEY_L_R_EN
代码分析: 情况1:TWS未组队单耳情况,将直接return;除非是步骤1中if (mode > 8 && bt_tws_is_connected())不添加TWS连接判断时,虽然是单耳TWS未组队情况下但是依旧会进入到switch选择中处理对应功能; 情况2:TWS组队情况,将直接进入到switch选择中处理对应功能,没有匹配到需要处理的消息功能将消息返回到func_bt_message_do函数继续匹配执行;
步骤三、在消息处理函数中处理消息void func_bt_message_do(u16 msg)

制作不易!喜欢的小伙伴给个小赞赞!喜欢我的小伙伴点个关注!有不懂的地方和需要的资源随时问我哟!




