谷动谷力

 找回密码
 立即注册
查看: 2447|回复: 0
打印 上一主题 下一主题
收起左侧

中科蓝讯 SDK TWS 组队和蓝牙配对过程分析

[复制链接]
跳转到指定楼层
楼主
发表于 2022-12-12 23:23:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
中科蓝讯 SDK TWS 组队和蓝牙配对过程分析

哈喽,大家好。
在对中科蓝讯 SDK 的二次开发过程中,我们时常需要对 TWS 组队和蓝牙配对功能进行修改,或在此过程中添加功能。下面我将从两个大方面对此进行分享。第一,将分析 TWS 组队和蓝牙配对过程,旨在先对 SDK 中的TWS 组队和蓝牙配对有所了解,方便下一步的进行;第二,将列举此过程两个功能的修改或添加。
一、TWS 组队和蓝牙配对过程灯效分析
1、准备工作
A)接线准备:
B)打印信息输出 IO 更改为PA7:
C)配置工具配置准备:


2、TWS 组队和蓝牙配对灯效函数
func_bt_disp_status() 函数将显示 TWS 组队和蓝牙配对各个阶段的灯效,每个阶段的灯效通过该函数 switch 语句中的对应 case 下的灯效函数进行显示,又分主副耳灯效。
3、TWS 组队和蓝牙配对过程
在左右耳机都新下程序的情况下,首次上电左右耳机首先显示开机灯效,然后进入 case BT_STA_SCANNING(func_bt_disp_status() 函数中的 case 语句)调用 led_bt_scan() 函数,TWS 未组队和蓝牙未配对灯效,亮300ms灭450ms,蓝红交替闪:
双击 USER_DEF 键将进行 TWS 组队:
注意,此时耳机的蓝牙模块亦同时打开,即 TWS 组队与蓝牙配对是同时进行的。
当 TWS 组队完成,蓝牙未配对,主耳(双击按键一方,最终将调用函数 bt_tws_search_slave(15000) ,然后被判定为主耳)进入 case BT_STA_IDLE 调用 led_bt_idle() 函数,亮300ms灭450ms,蓝红交替闪;并播放 TWS 组队提示音。副耳进入 case BT_STA_CONNECTED 调用 led_bt_connected() 函数,蓝灯亮100ms, 灭5S:

当 TWS 组队完成,且蓝牙配对完成,主副耳都进入 case BT_STA_CONNECTED 调用 led_bt_connected() 函数,蓝灯亮100ms, 灭5S。

二、TWS 组队和蓝牙配对过程功能修改
1、TWS 组队完成主副耳红蓝灯亮一秒后,副耳熄灭,主耳 100ms 闪烁
A)自定义红蓝灯亮 1s 和 100ms 闪烁结构体(配置工具中没有的灯效):
第一个 0x06 将以 0110 0000 倒序来控制红灯亮灭(0:灭,1:亮);第二个 0x06 将以0110 0000 倒序来控制蓝灯亮灭;10 指两个二进制位间的时间是 10*50ms;255 指两个字节间的时间间隔是无限长,它的时间单位同样是 50ms。
SDK已定义的灯效可通过配置工具来修改,如下开机状态配置 LED:
t1 是指两颗 LED 之间闪烁的间隔(上图即为 10*50ms);每 8 颗 LED 可以看做是一个周期,写成代码即对应 8 个二进制位;t2 是指两个周期之间的间隔(上图即为 0*50ms)。上图红灯全部熄灭,对应二进制数:0000 0000,若写成灯效结构体须倒序,倒序后值没有变化;蓝灯灯效对应二进制数:1010 1010,但若写成灯效结构体须先倒序为:0101 0101 ,因此,上图若写成灯效结构体其各个成员值为:{0x00,0x55,10,0}。
B)新建使主副耳灯效同步的灯效函数:


延伸阅读
共同关键字:中科蓝讯 SDK
中科蓝讯 SDK 开发环境安装及 Downloader 配置
中科蓝讯 SDK 开发——工程浅析
中科蓝讯 SDK 开发——耳机充电配置
中科蓝讯 SDK TWS 组队和蓝牙配对过程分析
中科蓝讯 SDK 开发——TWS 左右声道分配



led_set_sta_choice(const void *cfg,int cnt) 函数是自定义函数,其中,cfg 是灯效结构体指针;cnt 为真,主副耳的灯效将同步,为假,则不同步。
bt_tws_is_slave() 用于判断是否是副耳。
C)增加 100ms 队列消息:


D)灯效实现:
bt_tws_is_connected() 函数用于判断 TWS 组队是否完成;
tws_connected 是全局变量,做自加是避免两次进入 case BT_STA_IDLE 重复跑灯效函数,并作为主耳 100ms 红蓝灯交替闪烁的标记位;
delay_5ms(200) 保证红蓝灯亮一秒而不被覆盖。
bt_nor_is_connected() 函数用于判断蓝牙配对是否完成,此处为防止副耳在完成 TWS 组队但未完成蓝牙配对的情况下跑此灯效。
在 100ms 队列消息中使主耳 100ms 红蓝灯交替闪烁,副耳保持熄灯状态。
蓝牙断开将进入 case BT_NOTICE_DISCONNECT,令 tws_connected = 1 可使耳机进入主耳 100ms 红蓝灯交替闪烁副耳熄灭的蓝牙配对灯效。
  • 先进行 TWS 组队再进行蓝牙配对
A)设置上电回连手机次数为 0 次:
B)蓝牙初始化完成后设置不可被发现:
bt_set_scan() 函数的参数为 0x00 时,可以设置耳机蓝牙不被发现。
C)进入 FUNC_ BT 前获取当前时钟:
在 sys_cb 中增加变量 tws_connect_start 用以记录时间;
双击按键开始 TWS 组队,则记录下开始组队的时刻;
D)msg_bt.c 文件里面判断计时是否到 10S,到5S 后设置回连或者可被手机发现:
tick_check_expire() 函数用于判断记录的组队时刻开始到现在是否有 10s;bt_nor_get_link_info(NULL) 判断是否有蓝牙配对信息;bt_set_scan() 函数的参数为 0x03 时,耳机蓝牙可被发现、可被连接。
E)如 10s 内 TWS 配上对设置可被发现或者回连手机:
内容介绍到这里,欢迎大家批评指正。对于其他的组队以及配对的功能,可以借鉴上面几个点去延伸,如果大家还有什么其他的问题或者功能想要询问,亦可以在评论区中提出,可以共同探讨,一起进步。

参考文档:
1、中科蓝讯蓝皮书
2、BT8922D DataSheet.pdf


+10
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-11-24 15:42 , Processed in 0.254510 second(s), 44 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表