廣播內容的自定義是藍牙BLE開發的基本技能,用戶最多可以設置31字節。可是用戶定義是必需要遵循BLE協議的。另外,ibeacon應用和一些特定的應用要利用廣播來傳遞數據,並且不一樣時間段的廣播內容還會改變,如ibeacon的major/minor和電量顯示等待。本文即闡述藍牙的廣播數據格式和動態改變。微信
參考文檔:bluetooth specification version 4.0, p1735-p17383d
1、廣播數據格式blog
總共31字節,由一個或者多個廣播結構單元組成,每一個單元由長度Length、廣播內容類型AD Type、廣播數據AD Data組成;長度爲AD Type加上AD Data的長度,不包括長度自身所佔字節。接口
2、常見廣播內容類型AD Type事件
1.flagci
AD Type是0x1,表明廣播模式。LElimited Discoverable(AD data是0x0)是有限時間廣播,而General Discoverable(AD data是0x1)是無限廣播,直到被主動中止廣播。開發
2. Manufacture specific data文檔
AD Type是0xff,表明廠商數據,自定義的數據能夠寫到這裏。不少第三方場景應用都是利用這個字段來進一步定義應用協議格式,如微信的airsync協議和ibeacon協議。it
3. serviceio
表明服務的UUID,通常用16bit的UUID。如微信airsync協議的ServiceUUID是0xFEE7。
4. TX POWER LEVEL
發射功率,主機根據它和RSSI就能夠計算主機到從機的距離,ibeacon室內定位便是利用這點。
5. local name
設備名稱
常見的廣播內容類型就是上面五種,其餘的不常見就不講了。
3、廣播動態改變
動態改變其實跟各個藍牙單芯片的sdk事件處理機制有關,可是對於CC254一、DA14580和nrf52832等平臺來講,他們的處理基本是同樣的:
1)要想改變廣播內容,必須先中止廣播,再進行廣播內容更新,而後從新廣播生效。
2)必需要等到底層BLE協議棧徹底中止廣播後,發送確認信息給應用層以後,才能改變廣播內容並從新廣播。
以DA14580來舉例,其在一直廣播過程當中,在須要改變廣播內容時,要先向GAPM(廣播屬於GAP層管理)發送GAPM_CANCEL_CMD取消廣播,底層處理完會受到一個GAPM_CMP_EVT完成的事件,在該事件處理中修改廣播內容,並從新發送GAPM_START_ADVERTISE_CMD命令開始廣播。
4、廣播TIMEOUT
對於DA14580來講,其默認是一直廣播下去的,直到被取消或者轉到鏈接狀態。若是但願只廣播必定時間就進入睡眠,則須要定義一個timer。
對於nrf52832來講,其接口內置一個定時器,能夠設置無線廣播,也能夠設置一個時間,時間到了就會收到一個TIMEOUT事件。