最近在做BES2600 TWS耳机的项目, 需要进行TWS配对连接. 在BES2600 SDK中, 常用的TWS配对方式有搜索配对的方式、调试写入的方式、底座写入的方式或多种方式共存的TWS配对方式. 本篇文章介绍并演示了BES2600 SDK中几种常见的TWS配对方式
搜索配对的方式
TWS搜索配对的方式就是TWS SEARCH PAIR的方式, 常用于早期耳机与底座没有通信, 只能通过耳机上的按键让副耳进行蓝牙广播, 主耳用蓝牙搜索的方式连接配对TWS. 这种方式多用于比较低成本, 耳机与底座之间没有通信的设计中
使用SEARCH UI的配对方式, 需要打开SEARCH UI相关的宏定义使能SEARCH UI相关的功能, 这里在target.mk中使能
使能了SEARCH UI功能之后, SDK默认的流程开机调用app_ibrt_enter_limited_mode()进入TWS配对模式, 左右两边都进入TWS配对模式
app_ibrt_enter_limited_mode()接口用于进入TWS配对的模式, 进入TWS配对模式后, 在log中可以看到accessmode为19, 即为BTIF_BAM_LIMITED_ACCESSIBLE(0x13)
然后加入UI按键来使主耳搜索副耳进行TWS配对, 调用app_start_tws_searching_direactly()接口来搜索副耳
搜索到设备就会收到BTEVENT_INQUIRY_RESULT的事件, 进入到app_bt_inquiry_call_back() 回调函数中. 这里要注意的是, 默认的SDK逻辑要TWS配对成功还需要满足以下条件
第一是搜索到的蓝牙地址和本机地址的前3个字节需要相同
第二是TWS蓝牙名要相同, 满足了这两个条件才会TWS配对成功, 主耳停止搜索配对
配对成功后之后的开机主耳会默认设置成右耳, 播放时候输出右声道; 副耳会被设置成左耳, 播放输出左声道, 具体可在app_ibrt_search_ui_load_config()中修改相应的配置
调试测试的配对方式
SDK中默认有带调试的方式进行TWS配对, 也就是开发人员为了图方便, 调试测试用的TWS配对方式, 在开机app_ibrt_init()初始化的时候, 会进入app_ibrt_raw_ui_test_config_load()加载一些TWS配置选项, 进入app_ibrt_raw_ui_test_load_from_bt_pair_list() 加载测试的TWS配对信息, 如下图这里可以填入测试TWS的配对信息, 分别填入的是主耳的地址, 右边是副耳的地址. 烧录的时候烧录任意一组地址即可完成调试测试使用的TWS配对(这里地址与烧录时候地址顺序倒序)
地址按上面的烧录之后, 重新开机, 发送开盖命令, 即可进入TWS连接, 根据宏开关来决定主耳为左耳还是右耳, 播放的时候走左声道还是右声道
写入记录的配对方式
还有一种TWS配对的方式, 也是目前最常用的TWS配对方式. 目前的TWS耳机设计基本上都有机盒通信的功能, 在TWS没有配对连接的时候, 耳机可以将本机的蓝牙地址告诉给底座, 底座将蓝牙地址告诉给另一只耳机, 来完成两只耳机之间蓝牙地址的交换保存并进行TWS配对. 使用底座来给耳机左右交换地址配对的方式就是用的这种直接写入记录的配对方式.
首先 左右两边烧录的蓝牙地址需要是不一样的, 代码运行过程中可以通过SDK中的factory_section_get_bt_address() 接口来获取烧录在工厂区中的本机地址
获取到本机蓝牙地址之后通过机盒通信, 底座将蓝牙地址发送给另一只耳机(此命令应该左右耳都需要进行), 另一只耳机接收到对耳的蓝牙地址后, 直接调用nv_record_update_ibrt_info()接口来更新写入记录nv_record FLASH里面记录的ibrt mode和ibrt addr, 保存配对的对耳地址即可完成FLASH记录信息的更新
如果用了直接写入的方式, 这里可以在target.mk文件中使能FREE_TWS_PAIRING_ENABLE的宏, 来去掉SDK默认调试TWS配对方式
这里需要注意的是ibrt主耳副耳的配置和左右声道的配置方式, 这里SDK config_load的接口中默认使用地址最低字节来判断左右耳, 这里还可以修改为用蓝牙名或使用IO口来判断左右耳