蓝牙协议服务与特征值
本文摘自BLE4.0教程二 藍(lán)牙協(xié)議之服務(wù)與特征值分析 - Asam - 博客園 https://www.cnblogs.com/asam/p/8676369.html,僅用于自己學(xué)習(xí)查看,如果各位博客想看更詳細(xì)的內(nèi)容,可以打開(kāi)原博主的博客了解,這篇文章寫(xiě)得很好的。
1.關(guān)于服務(wù)與特征值的簡(jiǎn)述
之前說(shuō)到藍(lán)牙的連接過(guò)程,那藍(lán)牙連接之后具體是如何傳數(shù)據(jù)的呢。這里做一下簡(jiǎn)要說(shuō)明。
藍(lán)牙4.0是以參數(shù)來(lái)進(jìn)行數(shù)據(jù)傳輸?shù)模捶?wù)端定好一個(gè)參數(shù),客戶端可以對(duì)這個(gè)參數(shù)進(jìn)行讀,寫(xiě),通知等操作,這個(gè)東西我們稱之為特征值(characteristic),
但一個(gè)參數(shù)不夠我們用,比如我們這個(gè)特征值是電量的值,另一個(gè)特征值是設(shè)備讀取的溫度值。
那這時(shí)候會(huì)有多個(gè)特征值,并且我們還會(huì)對(duì)它們分類,分出來(lái)的類我們稱之為服務(wù)(service)。
一個(gè)設(shè)備可以有多個(gè)服務(wù),每一個(gè)服務(wù)可以包含多個(gè)特征值。為了方便操作,每個(gè)特征值都有他的屬性,例如長(zhǎng)度(size),權(quán)限(permission),值(value),描述(descriptor),如下圖。
2.ATT與GATT
我們剛才介紹服務(wù)與特征值,那具體我們是怎么去實(shí)現(xiàn)的呢.
藍(lán)牙4.0版本推出了低功耗規(guī)范,引入了兩個(gè)核心協(xié)議:ATT(Attribute Protocol)和GATT(Generic Attribute Protocol).這兩個(gè)協(xié)議主要目標(biāo)是BLE,但是也可以運(yùn)行在傳統(tǒng)藍(lán)牙上(BR/EDR)。
ATT主要是規(guī)定了"屬性"的定義,GATT則是將這些"屬性"包裝成我們上面所講的服務(wù)、特征值等。
那我們是怎么搭建起來(lái)我們的服務(wù)的呢?
大概可以概述為,由一個(gè)個(gè)屬性搭建起來(lái)的東西。如下圖,每一個(gè)屬性就會(huì)告訴使用者說(shuō),我是什么,我?guī)в惺裁矗隳軐?duì)我做什么,即描述,值,權(quán)限
|
序號(hào) |
描述 |
權(quán)限 |
值 |
|
屬性1 |
我是 服務(wù)A的開(kāi)頭 |
只讀 |
服務(wù)號(hào)0001 |
|
屬性2 |
我是 特征值1的開(kāi)頭 |
只讀 |
特征值1的值放在屬性3里 特征值1的值類型 特征值1的值權(quán)限 |
|
屬性3 |
我是 特征值1的值 |
/ |
0 |
|
屬性4 |
我是 特征值1的特殊操作 |
讀寫(xiě) |
關(guān)閉 |
|
屬性5 |
我是 特征值2的開(kāi)頭 |
只讀 |
… |
|
屬性6 |
我是 特征值2的值 |
/ |
… |
|
屬性7 |
我是 特征值2的特殊操作 |
讀寫(xiě) |
… |
|
屬性8 |
我是 服務(wù)B的開(kāi)頭 |
只讀 |
服務(wù)號(hào)0002 |
上圖是一個(gè)簡(jiǎn)單的表述,真正的屬性表如下圖。
|
Handle |
Type |
Permission |
Value |
|
… |
… |
… |
… |
|
39 |
0x2800 (GATT Primary Service UUID) |
Read |
E0:FF(2 bytes) (0xFFE0 = simple keys service custom UUID) |
|
40 |
0x2803 (GATT Characteristic Declaration UUID) |
Read |
10:29:00:E1:FF(5 byte) (0xFFE1 = Simple keys value custom UUID) (0x0029 = handle 41) (0x10 = characteristic properties :notify only) |
|
41 |
0xFFE1 (simple keys state) |
(none) |
00(1 byte) (value indicates states of keys) |
|
42 |
0x2902 (GATT Client Characteristic Configuration UUID) |
Read and Write |
00:00(2 byte) (value indicates whether notifications or indications are enabled) |
|
43 |
0x2800 (GATT Primary Service UUID) |
Read |
A1:DD(2 byte) (0xDDA1 = Other Service custom UUID) |
屬性的定義是這樣的
|
Handle |
Type |
Permission |
Value |
Handle:其實(shí)上面那張屬性表,在程序里只是一個(gè)數(shù)組而已,所以Handle這個(gè)值其實(shí)我們是不需要專門(mén)去存的,他只是一個(gè)索引而已。
Type:屬性的類型,也即UUID ,藍(lán)牙標(biāo)準(zhǔn)組織已經(jīng)對(duì)UUID進(jìn)行了分類。
如上表中,服務(wù)的Type就是0X2800,所以每到一個(gè)服務(wù),就會(huì)有一個(gè)Type類型為0x2800的屬性出現(xiàn)。
而特征值Declaration 的Type就是0x2803。至于特征值Value的Type可以是用戶自定義的。
Permission:屬性的訪問(wèn)權(quán)限,一般有Read、Write、notifications、indications
Value:屬性的值最長(zhǎng)可達(dá)512字節(jié)
總結(jié)
以上是生活随笔為你收集整理的蓝牙协议服务与特征值的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 判断对象的变量是否存在,isset和pr
- 下一篇: java实现二进制的加法