Android 藍(lán)牙廣播數(shù)據(jù)包分析

Android 4.0以后開(kāi)始引入ble(低功耗藍(lán)牙)省骂,但是5.0之前的版本只支持手機(jī)做為中央設(shè)備(Central ),手機(jī)不能設(shè)置外設(shè)模式最住,
谷歌從5.0后才加入钞澳,而手機(jī)作為外設(shè)時(shí)需要發(fā)送廣播,中央設(shè)備掃描到才能進(jìn)行連接温学。那作為外設(shè)的設(shè)備其廣播數(shù)據(jù)是怎么樣構(gòu)成的略贮?
藍(lán)牙的廣播包有兩種: 廣播包 (Advertising Data)和 響應(yīng)包 (Scan Response)甚疟,其中廣播包是每個(gè)設(shè)備必須廣播的仗岖,而響應(yīng)包是可選的。
每個(gè)包都是 31 字節(jié)览妖,數(shù)據(jù)包中分為有效數(shù)據(jù)(significant)和無(wú)效數(shù)據(jù)(non-significant)兩部分轧拄。

  1. 有效數(shù)據(jù)部分 :包含若干個(gè)廣播數(shù)據(jù)單元,稱為 AD Structure 讽膏。AD Structure 的組成是:第一個(gè)字節(jié)是長(zhǎng)度值 Len 檩电,表示接下來(lái)的 Len 個(gè)字節(jié)是數(shù)據(jù)部分。數(shù)據(jù)部分的第一個(gè)字節(jié)表示數(shù)據(jù)的類型 AD Type 府树,剩下的 Len - 1 個(gè)字節(jié)是真正的數(shù)據(jù) AD data 俐末。其中 AD type 非常關(guān)鍵,決定了 AD Data 的數(shù)據(jù)代表的是什么和怎么解析奄侠。無(wú)效數(shù)據(jù)部分 :因?yàn)閺V播包的長(zhǎng)度必須是 31 個(gè) byte卓箫,如果有效數(shù)據(jù)部 分不到 31 自己,剩下的就用 0 補(bǔ)全垄潮。這部分的數(shù)據(jù)是無(wú)效的烹卒,解釋的時(shí)候,忽略即可弯洗。在 Android 中旅急,系統(tǒng)會(huì)把這兩個(gè)數(shù)據(jù)拼接在一起,返回一個(gè) 62 字節(jié)的數(shù)組牡整。
20161122143946_794.jpg

下面就用一個(gè)具體的廣播來(lái)說(shuō)明下:

QQ截圖20170801134726.png

第一個(gè) 字節(jié)代表廣播數(shù)據(jù)單元的長(zhǎng)度 藐吮,02 轉(zhuǎn)為10進(jìn)制就是 2代表其數(shù)據(jù)長(zhǎng)度為2 , 而數(shù)據(jù)單元的第一個(gè)字節(jié)代表類型 。
01 代表 代表物理連接功能為普通發(fā)現(xiàn)模式 06代表其數(shù)據(jù)類容
緊接著下一個(gè)數(shù)據(jù)單元:0B代表數(shù)據(jù)長(zhǎng)度為11 炎码,數(shù)據(jù)類型為 02 即Serviceuuid代表是非完整的16bit uuid, 所以緊接著的后10位就是其uuid盟迟。接下來(lái)就是下一個(gè)數(shù)據(jù)單元 首位是13轉(zhuǎn)為二進(jìn)制就是19,其長(zhǎng)度就是19潦闲,類型就是09 攒菠,代表設(shè)備名稱,30-》字符0歉闰,65代表字符e辖众,61代表字符a,73代表字符s,79代表字符y和敬,4E代表N,65代表e凹炸,57代表W,44代表D昼弟,43代表C啤它,53代表S ,00 代表字符null舱痘,01代表字符soh(SOH是序始字符(Start Of Header),它表示標(biāo)題的開(kāi)始)变骡,56代表V ,31代表字符1芭逝,2E代表字符.塌碌,30代表字符0,44代表D所有其設(shè)備名稱就是0easyNewDCS V1.0D旬盯。接下來(lái)的一個(gè)數(shù)據(jù)單元長(zhǎng)度是5台妆,廣播類型12 連接間隔范圍,有四個(gè)字節(jié)胖翰,接下來(lái)數(shù)據(jù)長(zhǎng)度是02接剩,類型是0A代表信號(hào)強(qiáng)度 剩余都是00000都是補(bǔ)位的無(wú)效數(shù)據(jù)。

下面附帶 16進(jìn)制和10進(jìn)制轉(zhuǎn)換表和對(duì)應(yīng)的字符串萨咳。

QQ截圖20170801142956.png

而廣播數(shù)據(jù)類型 有以下這些:
(1)Flags: TYPE = 0x01懊缺。這個(gè)數(shù)據(jù)用來(lái)標(biāo)識(shí)設(shè)備 LE 物理連接的功能。DATA 是 0 到多個(gè)字節(jié)的 Flag 值某弦,每個(gè) bit 上用 0 或者 1 來(lái)表示是否為 True桐汤。如果有任何一個(gè) bit 不為 0,并且廣播包是可連接的靶壮,就必須包含此數(shù)據(jù)怔毛。各 bit 的定義如下: bit 0: LE 有限發(fā)現(xiàn)模式 bit 1: LE 普通發(fā)現(xiàn)模式 bit 2: 不支持 BR/EDR bit 3: 對(duì) Same Device Capable(Controller) 同時(shí)支持 BLE 和 BR/EDR bit 4: 對(duì) Same Device Capable(Host) 同時(shí)支持 BLE 和 BR/EDR bit 5..7: 預(yù)留
(2)Service UUID: 廣播數(shù)據(jù)中一般都會(huì)把設(shè)備支持的 GATT Service 廣播出來(lái),用來(lái)告訴外面本設(shè)備所支持的 Service腾降。有三種類型的 UUID:16 bit, 32bit, 128 bit拣度。廣播中,每種類型類型有有兩個(gè)類別:完整和非完整的。這樣就共有 6 種 AD Type抗果。
非完整的 16 bit UUID 列表: TYPE = 0x02;
完整的 16 bit UUID 列表: TYPE = 0x03;
非完整的 32 bit UUID 列表: TYPE = 0x04;
完整的 32 bit UUID 列表: TYPE = 0x05;
非完整的 128 bit UUID 列表: TYPE = 0x06;
完整的 128 bit UUID 列表: TYPE = 0x07;
(3) Local Name: 設(shè)備名字筋帖,DATA 是名字的字符串。 Local Name 可以是設(shè)備的全名冤馏,也可以是設(shè)備名字的縮寫日麸,其中縮寫必須是全名的前面的若干字符。 設(shè)備全名: TYPE = 0x08 設(shè)備簡(jiǎn)稱: TYPE = 0x09
(4)TX Power Level: TYPE = 0x0A逮光,表示設(shè)備發(fā)送廣播包的信號(hào)強(qiáng)度代箭。DATA 部分是一個(gè)字節(jié),表示 -127 到 + 127 dBm涕刚。
(5) 帶外安全管理(Security Manager Out of Band):TYPE = 0x11嗡综。DATA 也是 Flag,每個(gè) bit 表示一個(gè)功能: bit 0: OOB Flag杜漠,0 表示沒(méi)有 OOB 數(shù)據(jù)极景,1 表示有 bit 1: 支持 LE bit 2: 對(duì) Same Device Capable(Host) 同時(shí)支持 BLE 和 BR/EDR bit 3: 地址類型,0 表示公開(kāi)地址驾茴,1 表示隨機(jī)地址 盼樟。
(6)外設(shè)(Slave)連接間隔范圍:TYPE = 0x12。數(shù)據(jù)中定義了 Slave 最大和最小連接間隔沟涨,數(shù)據(jù)包含 4 個(gè)字節(jié):
前 2 字節(jié):定義最小連接間隔恤批,取值范圍:0x0006 ~ 0x0C80异吻,而 0xFFFF 表示未定義裹赴; 后 2 字節(jié):定義最大連接間隔,同上诀浪,不過(guò)需要保證最大連接間隔大于或者等于最小連接間隔棋返。
(7) 服務(wù)搜尋:外圍設(shè)備可以要請(qǐng)中心設(shè)備提供相應(yīng)的 Service。其數(shù)據(jù)定義和前面的 Service UUID 類似:
16 bit UUID 列表: TYPE = 0x14
32 bit UUID 列表: TYPE = 0x??
128 bit UUID 列表: TYPE = 0x15
(8) Service Data: Service 對(duì)應(yīng)的數(shù)據(jù)雷猪。
16 bit UUID Service: TYPE = 0x16, 前 2 字節(jié)是 UUID睛竣,后面是 Service 的數(shù)據(jù);
32 bit UUID Service: TYPE = 0x??, 前 4 字節(jié)是 UUID求摇,后面是 Service 的數(shù)據(jù)射沟;
128 bit UUID Service: TYPE = 0x??, 前 16 字節(jié)是 UUID,后面是 Service 的數(shù)據(jù)与境;
(9) 公開(kāi)目標(biāo)地址:TYPE = 0x17验夯,表示希望這個(gè)廣播包被指定的目標(biāo)設(shè)備處理,此設(shè)備綁定了公開(kāi)地址摔刁,DATA 是目標(biāo)地址列表挥转,每個(gè)地址 6 字節(jié)。
(10) 隨機(jī)目標(biāo)地址:TYPE = 0x18,定義和前一個(gè)類似绑谣,表示希望這個(gè)廣播包被指定的目標(biāo)設(shè)備處理党窜,此設(shè)備綁定了隨機(jī)地址,DATA 是目標(biāo)地址列表借宵,每個(gè)地址 6 字節(jié)幌衣。
(11) Appearance:TYPE = 0x19,DATA 是表示了設(shè)備的外觀壤玫。
(12) 廠商自定義數(shù)據(jù): TYPE = 0xFF泼掠,廠商自定義的數(shù)據(jù)中,前兩個(gè)字節(jié)表示廠商 ID垦细,剩下的是廠商自己按照需求添加择镇,里面的數(shù)據(jù)內(nèi)容自己定義。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末括改,一起剝皮案震驚了整個(gè)濱河市腻豌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嘱能,老刑警劉巖吝梅,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異惹骂,居然都是意外死亡苏携,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門对粪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)右冻,“玉大人,你說(shuō)我怎么就攤上這事著拭∩磁ぃ” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵儡遮,是天一觀的道長(zhǎng)乳蛾。 經(jīng)常有香客問(wèn)我,道長(zhǎng)鄙币,這世上最難降的妖魔是什么肃叶? 我笑而不...
    開(kāi)封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮十嘿,結(jié)果婚禮上因惭,老公的妹妹穿的比我還像新娘。我一直安慰自己详幽,他們只是感情好筛欢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布浸锨。 她就那樣靜靜地躺著,像睡著了一般版姑。 火紅的嫁衣襯著肌膚如雪柱搜。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天剥险,我揣著相機(jī)與錄音聪蘸,去河邊找鬼。 笑死表制,一個(gè)胖子當(dāng)著我的面吹牛健爬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播么介,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼娜遵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了壤短?” 一聲冷哼從身側(cè)響起设拟,我...
    開(kāi)封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎久脯,沒(méi)想到半個(gè)月后纳胧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡帘撰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年跑慕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摧找。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡核行,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出慰于,到底是詐尸還是另有隱情钮科,我是刑警寧澤唤衫,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布婆赠,位于F島的核電站,受9級(jí)特大地震影響佳励,放射性物質(zhì)發(fā)生泄漏休里。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一赃承、第九天 我趴在偏房一處隱蔽的房頂上張望妙黍。 院中可真熱鬧,春花似錦瞧剖、人聲如沸拭嫁。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)做粤。三九已至浇借,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間怕品,已是汗流浹背妇垢。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肉康,地道東北人闯估。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像吼和,于是被迫代替她去往敵國(guó)和親涨薪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 前言: 本文主要描述Android BLE的一些基礎(chǔ)知識(shí)及相關(guān)操作流程炫乓,不牽扯具體的業(yè)務(wù)實(shí)現(xiàn)尤辱,其中提供了針對(duì)廣播包...
    幻影宇寰閱讀 5,334評(píng)論 6 19
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 10,960評(píng)論 6 13
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)厢岂,斷路器光督,智...
    卡卡羅2017閱讀 134,652評(píng)論 18 139
  • 簡(jiǎn)介 用簡(jiǎn)單的話來(lái)定義tcpdump,就是:dump the traffic on a network塔粒,根據(jù)使用者...
    保川閱讀 5,956評(píng)論 1 13
  • 今天接完老媽的電話结借,心情突然就變得很差,這種現(xiàn)象已經(jīng)持續(xù)有幾年了卒茬。相信大齡剩男剩女們應(yīng)該知道為什么船老,父母的催...
    野林閱讀 223評(píng)論 0 0