中科藍(lán)訊SDK TWS 組隊(duì)和藍(lán)牙配對(duì)過(guò)程分析
中科藍(lán)訊SDK TWS 組隊(duì)和藍(lán)牙配對(duì)過(guò)程分析
哈嘍,大家好。在對(duì)中科藍(lán)訊 SDK 的二次開(kāi)發(fā)過(guò)程中,我們時(shí)常需要對(duì) TWS 組隊(duì)和藍(lán)牙配對(duì)功能進(jìn)行修改,或在此過(guò)程中添加功能。下面我將從兩個(gè)大方面對(duì)此進(jìn)行分享。第一,將分析 TWS 組隊(duì)和藍(lán)牙配對(duì)過(guò)程,旨在先對(duì) SDK 中的TWS 組隊(duì)和藍(lán)牙配對(duì)有所了解,方便下一步的進(jìn)行;第二,將列舉此過(guò)程兩個(gè)功能的修改或添加。
一、TWS 組隊(duì)和藍(lán)牙配對(duì)過(guò)程燈效分析
B)打印信息輸出 IO 更改為PA7:
C)配置工具配置準(zhǔn)備:

2、TWS 組隊(duì)和藍(lán)牙配對(duì)燈效函數(shù)func_bt_disp_status() 函數(shù)將顯示 TWS 組隊(duì)和藍(lán)牙配對(duì)各個(gè)階段的燈效,每個(gè)階段的燈效通過(guò)該函數(shù) switch 語(yǔ)句中的對(duì)應(yīng) case 下的燈效函數(shù)進(jìn)行顯示,又分主副耳燈效。
3、TWS 組隊(duì)和藍(lán)牙配對(duì)過(guò)程在左右耳機(jī)都新下程序的情況下,首次上電左右耳機(jī)首先顯示開(kāi)機(jī)燈效,然后進(jìn)入 case BT_STA_SCANNING(func_bt_disp_status() 函數(shù)中的 case 語(yǔ)句)調(diào)用 led_bt_scan() 函數(shù),TWS 未組隊(duì)和藍(lán)牙未配對(duì)燈效,亮300ms滅450ms,藍(lán)紅交替閃:
雙擊 USER_DEF 鍵將進(jìn)行 TWS 組隊(duì):
注意,此時(shí)耳機(jī)的藍(lán)牙模塊亦同時(shí)打開(kāi),即 TWS 組隊(duì)與藍(lán)牙配對(duì)是同時(shí)進(jìn)行的。當(dāng) TWS 組隊(duì)完成,藍(lán)牙未配對(duì),主耳(雙擊按鍵一方,最終將調(diào)用函數(shù) bt_tws_search_slave(15000) ,然后被判定為主耳)進(jìn)入 case BT_STA_IDLE 調(diào)用 led_bt_idle() 函數(shù),亮300ms滅450ms,藍(lán)紅交替閃;并播放 TWS 組隊(duì)提示音。副耳進(jìn)入 case BT_STA_CONNECTED 調(diào)用 led_bt_connected() 函數(shù),藍(lán)燈亮100ms, 滅5S:

當(dāng) TWS 組隊(duì)完成,且藍(lán)牙配對(duì)完成,主副耳都進(jìn)入 case BT_STA_CONNECTED 調(diào)用 led_bt_connected() 函數(shù),藍(lán)燈亮100ms, 滅5S。
二、TWS 組隊(duì)和藍(lán)牙配對(duì)過(guò)程功能修改1、TWS 組隊(duì)完成主副耳紅藍(lán)燈亮一秒后,副耳熄滅,主耳 100ms 閃爍A)自定義紅藍(lán)燈亮 1s 和 100ms 閃爍結(jié)構(gòu)體(配置工具中沒(méi)有的燈效):
第一個(gè) 0x06 將以 0110 0000 倒序來(lái)控制紅燈亮滅(0:滅,1:亮);第二個(gè) 0x06 將以0110 0000 倒序來(lái)控制藍(lán)燈亮滅;10 指兩個(gè)二進(jìn)制位間的時(shí)間是 10*50ms;255 指兩個(gè)字節(jié)間的時(shí)間間隔是無(wú)限長(zhǎng),它的時(shí)間單位同樣是 50ms。SDK已定義的燈效可通過(guò)配置工具來(lái)修改,如下開(kāi)機(jī)狀態(tài)配置 LED:
t1 是指兩顆 LED 之間閃爍的間隔(上圖即為 10*50ms);每 8 顆 LED 可以看做是一個(gè)周期,寫(xiě)成代碼即對(duì)應(yīng) 8 個(gè)二進(jìn)制位;t2 是指兩個(gè)周期之間的間隔(上圖即為 0*50ms)。上圖紅燈全部熄滅,對(duì)應(yīng)二進(jìn)制數(shù):0000 0000,若寫(xiě)成燈效結(jié)構(gòu)體須倒序,倒序后值沒(méi)有變化;藍(lán)燈燈效對(duì)應(yīng)二進(jìn)制數(shù):1010 1010,但若寫(xiě)成燈效結(jié)構(gòu)體須先倒序?yàn)椋?101 0101 ,因此,上圖若寫(xiě)成燈效結(jié)構(gòu)體其各個(gè)成員值為:{0x00,0x55,10,0}。B)新建使主副耳燈效同步的燈效函數(shù):


bt_tws_is_slave() 用于判斷是否是副耳。C)增加 100ms 隊(duì)列消息:


D)燈效實(shí)現(xiàn):
bt_tws_is_connected() 函數(shù)用于判斷 TWS 組隊(duì)是否完成;tws_connected 是全局變量,做自加是避免兩次進(jìn)入 case BT_STA_IDLE 重復(fù)跑燈效函數(shù),并作為主耳 100ms 紅藍(lán)燈交替閃爍的標(biāo)記位;delay_5ms(200) 保證紅藍(lán)燈亮一秒而不被覆蓋。
bt_nor_is_connected() 函數(shù)用于判斷藍(lán)牙配對(duì)是否完成,此處為防止副耳在完成 TWS 組隊(duì)但未完成藍(lán)牙配對(duì)的情況下跑此燈效。
在 100ms 隊(duì)列消息中使主耳 100ms 紅藍(lán)燈交替閃爍,副耳保持熄燈狀態(tài)。
藍(lán)牙斷開(kāi)將進(jìn)入 case BT_NOTICE_DISCONNECT,令 tws_connected = 1 可使耳機(jī)進(jìn)入主耳 100ms 紅藍(lán)燈交替閃爍副耳熄滅的藍(lán)牙配對(duì)燈效。
- 先進(jìn)行 TWS 組隊(duì)再進(jìn)行藍(lán)牙配對(duì)
B)藍(lán)牙初始化完成后設(shè)置不可被發(fā)現(xiàn):
bt_set_scan() 函數(shù)的參數(shù)為 0x00 時(shí),可以設(shè)置耳機(jī)藍(lán)牙不被發(fā)現(xiàn)。C)進(jìn)入 FUNC_ BT 前獲取當(dāng)前時(shí)鐘:
在 sys_cb 中增加變量 tws_connect_start 用以記錄時(shí)間;
雙擊按鍵開(kāi)始 TWS 組隊(duì),則記錄下開(kāi)始組隊(duì)的時(shí)刻;
D)msg_bt.c 文件里面判斷計(jì)時(shí)是否到 10S,到5S 后設(shè)置回連或者可被手機(jī)發(fā)現(xiàn):
tick_check_expire() 函數(shù)用于判斷記錄的組隊(duì)時(shí)刻開(kāi)始到現(xiàn)在是否有 10s;bt_nor_get_link_info(NULL) 判斷是否有藍(lán)牙配對(duì)信息;bt_set_scan() 函數(shù)的參數(shù)為 0x03 時(shí),耳機(jī)藍(lán)牙可被發(fā)現(xiàn)、可被連接。
E)如 10s 內(nèi) TWS 配上對(duì)設(shè)置可被發(fā)現(xiàn)或者回連手機(jī):
內(nèi)容介紹到這里,歡迎大家批評(píng)指正。對(duì)于其他的組隊(duì)以及配對(duì)的功能,可以借鑒上面幾個(gè)點(diǎn)去延伸,如果大家還有什么其他的問(wèn)題或者功能想要詢(xún)問(wèn),亦可以在評(píng)論區(qū)中提出,可以共同探討,一起進(jìn)步。
延伸閱讀
共同關(guān)鍵字:中科藍(lán)訊 SDK中科藍(lán)訊 SDK 開(kāi)發(fā)環(huán)境安裝及 Downloader 配置
中科藍(lán)訊 SDK 開(kāi)發(fā)——工程淺析
中科藍(lán)訊 SDK 開(kāi)發(fā)——耳機(jī)充電配置
中科藍(lán)訊 SDK TWS 組隊(duì)和藍(lán)牙配對(duì)過(guò)程分析
中科藍(lán)訊 SDK 開(kāi)發(fā)——TWS 左右聲道分配
1、中科藍(lán)訊藍(lán)皮書(shū)
2、BT8922D DataSheet.pdf