一、什么是特征值
特征值就是BLE协议栈向外提供的一个数据接口,蓝牙之间的数据传输终落实在特征值上。在BLE协议栈的GATT层中封装了若干服务(service),而在每一个服务中又有若干特征值(characters),特征值可以是任意类型的数据。蓝牙之间的数据传输靠协议栈提供的write和read函数,而这两个函数就是在操作特征值
二、UUID
UUID就是通用唯一识别码。在蓝牙协议栈中可能会有多个服务,每个服务会有多个特征值,而这些服务或者特征值都有一个唯一的ID,这样就可以区分了。这个UUID是其他设备设置蓝牙服务和特征值的唯一方法。
三、增加特征值
在BLE协议栈中,GATT层定义了特征值和服务。下面就以SimpleBLEPeripheral为例,增加一个特征值。在simpleGATTprofile.c中,已经有定义好的特征值,参考已有的特征值就可以顺利添加自己的特征值
1)修改头文件simpleGATTprofile.h
头文件中定义了特征值的UUID,以及长度和默认值
//特征值UUID
#define SIMPLEPROFILE_CHAR5_UUID 0xFFF5
//特征值长度
#define SIMPLEPROFILE_CHAR5_LEN 5
2)添加特征值相关变量
包括特征值的读写权限、变量名、展现给用户的名字
//特征值初始化
// 特征值属性,读或者写
static uint8 simpleProfileChar6Props = GATT_PROP_READ | GATT_PROP_WRITE;
// 值,可以向其写入数据,也可以读出数据。这里是一个字符数组
static uint8 simpleProfileChar6[SIMPLEPROFILE_CHAR6_LEN] = {0};
// 用户描述,展现给用户的名字
static uint8 simpleProfileChar6UserDesp[17] = "Characteristic 6\0";
//提取uuid,uuid定义在头文件中
CONST uint8 simpleProfilechar5UUID[ATT_BT_UUID_SIZE] =
{
LO_UINT16(SIMPLEPROFILE_CHAR5_UUID), HI_UINT16(SIMPLEPROFILE_CHAR5_UUID)
};
3)将特征值加入属性表
特征值由服务统一管理,所有的特征值都会在一个服务的属性表中呈现出来,每增加一个特征值,它的相关变量就要在添加到属性表中
//特征值初始化
static gattAttribute_t simpleProfileAttrTbl[SERVAPP_NUM_ATTR_SUPPORTED] =
{
<