3、通用属性协议(GATT)
GATT是用Attribute Protocol(属性协议)定义的一个Service(服务)框架。框架定义了Service及其的Characteristics的格式和规范。规范定义了包含add(发现)、read(读)、write(写)、notify(通知)、indicate(指示)的characteristics。
为实现配置文件(Profile)的设备定义了两种角色:客户端(Client)、服务器(Server)。simpleBlePeripheral工程就是将BLE配置为Server角色。
3.1、规范(Profile)
Profile可以理解为一种规范,官方SIG将规范分为两类:标准蓝牙规范(公有服务),非标准蓝牙规范(私有服务)。
3.2、服务(Service)
服务可以理解为一个功能模块,例如,电量服务、系统信息服务,在需要使用时添加对应的服务即可。每个服务里面按照规范格式,包含一个或多个characteristic特征值。每个具体的特征值就是最终与客户端(例如,手机APP)通信的目标。
3.3、通用唯一标识符(UUID)
UUID用来标识服务里的service和characteristic,UUID按长度分为16bit和128bit两种。在与客户端通讯过程中,客户端会通过UUID来识别与之对应的数据通道(handle)。
4、私有服务的修改
现在结合代码讲解BLE私有服务。
开发者在学习和修改私有服务的过程中,推荐按照以下顺序一步步修改,可以避免遗漏。
(1)UUID定义
此部分为定义的Service UUID和Characteristic UUID。修改只需要修改对应的宏定义即可。
// Simple GATT Profile Service UUID: 0xFFF0
CONST uint8 simpleProfileServUUID[ATT_BT_UUID_SIZE] =
{
LO_UINT16(SIMPLEPROFILE_SERV_UUID), HI_UINT16(SIMPLEPROFILE_SERV_UUID)
};
// Characteristic 1 UUID: 0xFFF3
CONST uint8 simpleProfilechar1UUID[ATT_BT_UUID_SIZE] =
{
LO_UINT16(SIMPLEPROFILE_CHAR1_UUID), HI_UINT16(SIMPLEPROFILE_CHAR1_UUID)
};
// Characteristic 2 UUID: 0xFFF4
CONST uint8 simpleProfilechar2UUID[ATT_BT_UUID_SIZE] =
{
LO_UINT16(SIMPLEPROFILE_CHAR2_UUID), HI_UINT16(SIMPLEPROFILE_CHAR2_UUID)
};
(2)服务属性定义
修改时需要注意每一条characteristic的属性(properties)的修改,如果属性里面包含notify属性,则需要多一条GCC配置。
// Simple Profile Service attribute
static CONST gattAttrType_t simpleProfileService = { ATT_BT_UUID_SIZE, simp