Android之Bluetooth通信-BLE特征碼

Bt特征碼

    private static final UUID SERVICE_UUID                  = UUID.fromString("0000a601-0000-1000-8000-00805f9b34fb");
    private static final UUID WRITE_UUID                    = UUID.fromString("0000a611-0000-1000-8000-00805f9b34fb");
    private static final UUID READ_UUID                     = UUID.fromString("0000a621-0000-1000-8000-00805f9b34fb");

消息協(xié)議
通信協(xié)議消息格式分為起始標(biāo)志位、消息頭、消息體、校驗(yàn)位、結(jié)束標(biāo)志位五部分。

header 1 header 2 header3
row 1 col 1 row 1 col 2
row 2 col 1 row 2 col 2
1)  起始標(biāo)志位:標(biāo)志整個(gè)協(xié)議數(shù)據(jù)的開始。本協(xié)議規(guī)定使用0xFD作為協(xié)議起始標(biāo)志位;
2)  消息頭:消息頭固定4個(gè)字節(jié),包括應(yīng)答碼、消息類型、消息體長度;
3)  消息體:實(shí)際傳輸?shù)挠行?nèi)容;
4)  校驗(yàn)位:為了校驗(yàn)數(shù)據(jù)完整性和有效性,校驗(yàn)單元不包括起始標(biāo)志位,僅校驗(yàn)消息頭和消息體,本協(xié)議規(guī)定校驗(yàn)單元使用CRC16;(代碼見附錄)
5)  結(jié)束標(biāo)志位:標(biāo)志整個(gè)協(xié)議數(shù)據(jù)的結(jié)束。本協(xié)議規(guī)定使用0xFD作為協(xié)議結(jié)束標(biāo)志位。
6)  控制數(shù)據(jù)包中除了起始標(biāo)志位和結(jié)束標(biāo)志位外,凡是出現(xiàn)0xFD必須進(jìn)行轉(zhuǎn)義,0xFD轉(zhuǎn)義為0x5DF7,0x5D轉(zhuǎn)義為0x5DE7。
備注:使用起始標(biāo)志位和結(jié)束標(biāo)志位的原因。
    網(wǎng)絡(luò)傳輸過程中,可能因?yàn)槟承┮蛩氐挠绊懀瑓f(xié)議數(shù)據(jù)間可能會(huì)出現(xiàn),連包,分包。為了方便處理連包或者分包數(shù)據(jù),本協(xié)議使用起始標(biāo)志和結(jié)束標(biāo)志來處理這些異?,F(xiàn)象,確保每一幀(每一包)數(shù)據(jù)均能正常發(fā)送到服務(wù)器并且被正確解析,同時(shí)保證數(shù)據(jù)的完整性。
    轉(zhuǎn)義:從起始標(biāo)志位到結(jié)束標(biāo)識(shí)位之間的所有數(shù)據(jù)均需要做轉(zhuǎn)義處理,以保證任何有效數(shù)據(jù)包僅起始標(biāo)志位和結(jié)束標(biāo)識(shí)位為0XFD。具體轉(zhuǎn)義方法:
    所有0XFD ->  0x5D  0XF7;
    所有0X5D ->  0x5D  0XE7;
    轉(zhuǎn)義順序:發(fā)送:先校驗(yàn)后轉(zhuǎn)義。(向外發(fā))
              接收:先轉(zhuǎn)義后校驗(yàn)。(接收數(shù)據(jù))

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容