BLE4.0教程二 藍牙協議之服務與特徵值分析

1.關於服務與特徵值的簡述 數組

以前說到藍牙的鏈接過程,那藍牙鏈接以後具體是如何傳數據的呢。這裏作一下簡要說明。 spa

藍牙4.0是以參數來進行數據傳輸的,即服務端定好一個參數,客戶端能夠對這個參數進行讀,寫,通知等操做,這個東西咱們稱之爲特徵值(characteristic blog

但一個參數不夠咱們用,好比咱們這個特徵值是電量的值,另外一個特徵值是設備讀取的溫度值。 索引

那這時候會有多個特徵值,而且咱們還會對它們分類,分出來的類咱們稱之爲服務(service)。 ip

一個設備能夠有多個服務,每個服務能夠包含多個特徵值。爲了方便操做,每一個特徵值都有他的屬性,例如長度(size,權限(permission),值(value,描述(descriptor),以下圖。 it

 

2.ATTGATT io

咱們剛纔介紹服務與特徵值,那具體咱們是怎麼去實現的呢. table

藍牙4.0版本推出了低功耗規範,引入了兩個核心協議:ATT(Attribute Protocol)GATT(Generic Attribute Protocol).這兩個協議主要目標是BLE,可是也能夠運行在傳統藍牙上(BR/EDR)。 service

ATT主要是規定了"屬性"的定義,GATT則是將這些"屬性"包裝成咱們上面所講的服務、特徵值等。 權限

 

 

 

 

 

那咱們是怎麼搭建起來咱們的服務的呢?
大概能夠概述爲,由一個個屬性搭建起來的東西。以下圖,每個屬性就會告訴使用者說,我是什麼,我帶有什麼,你能對我作什麼,即描述,值,權限

序號

描述

權限

屬性1

我是 服務A的開頭

只讀

服務號0001

屬性2

我是 特徵值1的開頭

只讀

特徵值1的值放在屬性3裏

特徵值1的值類型

特徵值1的值權限

屬性3

我是 特徵值1的值

/

0

屬性4

我是 特徵值1的特殊操做

讀寫

關閉

屬性5

我是 特徵值2的開頭

只讀

屬性6

我是 特徵值2的值

/

屬性7

我是 特徵值2的特殊操做

讀寫

屬性8

我是 服務B的開頭

只讀

服務號0002

 

上圖是一個簡單的表述,真正的屬性表以下圖。

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: 其實上面那張屬性表,在程序裏只是一個數組而已,因此Handle這個值其實咱們是不須要專門去存的,他只是一個索引而已。

Type:屬性的類型,也即UUID ,藍牙標準組織已經對UUID進行了分類。

    如上表中,服務的Type就是0X2800,因此每到一個服務,就會有一個Type類型爲0x2800的屬性出現。

    而特徵值Declaration 的Type就是0x2803。至於特徵值Value的Type能夠是用戶自定義的。

Permission:屬性的訪問權限,通常有ReadWrite notifications indications

Value:屬性的值 最長可達512字節

相關文章
相關標籤/搜索