前言
现在为止也开发了许多杰理TWS蓝牙耳机、音响项目 SDK的案子,在调试案子时不断的向前辈们学习到了很多关于蓝牙音响、蓝牙TWS耳机专业的知识。想在这里做一个学习汇总,方便各位同行和对杰理芯片SDK感兴趣的小伙伴们学习;
本章详细讲解杰理SDK开发TWS耳机「双击 + 长按」组合按键清除配对功能实现教程
1、功能概述
因为耳机做了TWS锁配功能,所以客户要求做一个TWS耳机「双击 + 长按」组合按键清除配对功能实现教程;该功能通过组合按键(双击 + 长按)实现 TWS 配对信息的快速清除,用于产线或售后场景下重新组对两只耳机。核心思路:
- 双击时置位一个"组合按键待命标志"
double_long_flag,并启动一个5 秒超时定时器。 - 在 5 秒窗口内如果紧接着收到长按(KEY_EVENT_LONG),则判定组合按键触发。
- 触发后调用
bt_tws_remove_pairs_and_reconnect():- 清除 TWS 配对记录、恢复本地 MAC 地址、清空声道/连接 AA;
- 把状态标记回未配对
BT_TWS_UNPAIRED; - 以"自动配对码"重新主动搜索对耳,进入组队模式,同时保持可发现可连接。
整个功能用宏TCFG_TWS_DOUBLE_CLICK_CLEAR_PAIRING包裹,方便裁剪。
2、实现功能代码
创建组合按键双击长按标志位和清除标志位函数
#if TCFG_TWS_DOUBLE_CLICK_CLEAR_PAIRING static u8 double_long_flag = 0; //李永奉在此处定义双击加长按功能检测标志位 static u16 double_long_timer_id = 0; //李永奉在此处定义定时任务ID号接收变量 //李永奉在此处定义双击加长按功能检测标志位定时时间到清除标志位功能函数 static void double_long_timeout_handler(void *priv) { double_long_flag = 0; //计算时间到时,将标志位清除 double_long_timer_id = 0; //定时器ID号接收变量清0 } #endif触摸按键双击消息处符合蓝牙无连接并且TWS未组队条件下进行双击标志位置1,开启定时器;
else if(!get_tws_sibling_connect_state()){ #if TCFG_TWS_DOUBLE_CLICK_CLEAR_PAIRING double_long_flag = 1; //蓝牙无连接时&TWS无配对下,双击将标志位置1 if (double_long_timer_id) { //启动定时器前先删除定时器,防止旧的定时器在定时 sys_timeout_del(double_long_timer_id); double_long_timer_id = 0; } double_long_timer_id = sys_timeout_add(NULL,double_long_timeout_handler,5000); //启动定时器开始计时 break; #endif }触摸按键长按2秒消息处符合蓝牙无连接并且TWS未组队条件下执行灯效跳转白灯快闪,TWS清除配对功能和进入TWS组队模式;
else if(double_long_flag == 1 && (!get_tws_sibling_connect_state())) { #if TCFG_TWS_DOUBLE_CLICK_CLEAR_PAIRING ui_update_status(STATUS_BT_TWS_DOUBLE_CLICK_CLEAR_PAIRING); double_long_flag = 0; //双击标志位清空 sys_timeout_del(double_long_timer_id); //删除定时任务 double_long_timer_id = 0; //定时器ID清空 bt_tws_remove_pairs_and_reconnect(); //清除TWS配对记录并重新进入TWS自动配对+可发现可连接状态 break; #endif }实现TWS清除配对记录和进入TWS组队模式功能函数
#if TCFG_TWS_DOUBLE_CLICK_CLEAR_PAIRING /* * 双击+长按清除TWS配对信息后, 重新进入TWS自动配对和可发现可连接状态 * 与开机未配对流程保持一致: 标记未配对状态, 使用自动配对码主动搜索对耳 */ void bt_tws_remove_pairs_and_reconnect() { bt_tws_remove_pairs(); //清除TWS配对信息, 恢复本地MAC地址, 打开可发现可连接 gtws.state = BT_TWS_UNPAIRED; //标记为未配对状态 #if CONFIG_TWS_PAIR_MODE == CONFIG_TWS_PAIR_BY_AUTO #ifdef CONFIG_NEW_BREDR_ENABLE tws_api_set_quick_connect_addr(tws_set_auto_pair_code()); #else tws_auto_pair_enable = 1; tws_le_acc_generation_init(); #endif bt_tws_connect_sibling(6); //主动搜索对耳, 两个耳机自动完成TWS配对 #else bt_tws_connect_and_connectable_switch(); #endif } #endif功能实现完毕,小伙伴可直接复杂代码去验证呦!
制作不易!喜欢的小伙伴给个小赞赞!喜欢我的小伙伴点个关注!有不懂的地方和需要的资源随时问我哟!