注:(本文基于我自己定义的一个服务TEMProfile,但适用其他服务)
1.特征值是什么
一个蓝牙协议栈中,包含了多个服务,一个服务里又包含了多个特征值,每个特征值都有其相关的一些信息。
我们与蓝牙进行通信的时候,就是通过读写这些特征值,来获得数据。
2.特征值的属性
一个特征值里面基本需要的变量是——
1.UUID码
2.权限属性 :基本就是 可读、可写、可通知这些了。(通知是表示允许数据主动发送)
3.内容
4.描述:这个特征值的名称
3.属性表
一个服务里,所有的特征值中的每个变量都有相应的属性,所有的属性都放在一个数组中,这个数组称之为属性表。
一个变量的属性表包含四个内容,
1.type 2.permission 3.handle 4.pValue
属性表其实就是定义了一个 gattAttribute_t类型的数组。
需要注意的是,属性表中,除了特征值的属性,第一个还要添加服务的属性
1 //TEMProfile Service
2 {3 {ATT_BT_UUID_SIZE,primaryServiceUUID}, //type
4 GATT_PERMIT_READ, //permissions
5 0, //handle
6 (uint8*)&TEMProfileService //pValue
7 },
4.增添一个新的特征值
(1)Define出配置属性的数值,用以填写配置属性。
1 //Profile Parameters
2 #define TEMPROFILE_CHAR1 0
3 #define TEMPROFILE_CHAR2 1
4
5 //Simple Profile Service UUID
6 #define TEMPROFILE_SERV_UUID 0xFF00
7
8 //Key Pressed UUID
9 #define TEMPROFILE_CHAR1_UUID 0xFF01
10 #define TEMPROFILE_CHAR2_UUID 0xFF02
11
12 //Simple Keys Profile Services bit fields
13 #define TEMPROFILE_SERVICE 0x00000001
14
15 //Length of Characteristic 2 in bytes
16 #define TEMPROFILE_CHAR2_LEN 12
其中UUID号有特定的范围,应避免与其他服务UUID冲突。
这里增添了两个特征值,特征值2是数组型的,所以需要定义一个长度TEMPROFILE_CHAR2_LEN。
(2)定义每个特征值的属性变量(以特征值2为例)
1 static uint8 TEMProfileChar2Prop =GATT_PROP