1 简介
通过ATT层可以读写对端设备的属性,但是属性之间有什么联系、各个属性怎么组合起来提供服务,由上层GATT负责。
读写对端设备的属性,就是ATT的关键词。
2 uuid
uuid 通用唯一识别码缩写,他是128位的,但是我们一般定义 uuid 都是 16位或者32位
即把32位UUID的低96位去掉,就得到32位的UUID;如果32位UUID的高16位全是0,那么它的低16位就是“16位的UUID”:
3 属性
作用提供读写功能
4 ATT 层与 L2CAP 层的关系
5 ATT同时写多属性的方法
Queued writes:排队写入属性值请求分为两个阶段:第一阶段是准备写入请求,也即Client 通过ATT_PREPARE_WRITE_REQ 指令将要写入的一个或多个属性值发送到Server,并通过ATT_PREPARE_WRITE_RSP 指令确认Server 接收到的属性值无误;第二阶段是执行写入请求,也即Client 通过ATT_EXECUTE_WRITE_REQ 指令将之前发送给Server 并经确认无误的属性值立即写入到对应的属性中。比如前面介绍的Write Long Characteristic Values 或Characteristic Value Reliable Writes 过程;
6 GATT架构设计
蓝牙设备被称为 Server
一个Server可以含有1个或多个Service
一个Service可以包含其他Service,
一个Service含有1个或多个Characteristic(特性),
一个Characteristic含有性质(Property)、Value;还可以含有Desciptor(描述)。
7 GATT service的定义
一个Service定义,从它的“声明”开始,到下一个Service的声明结束;或一直持续到最大的handle值。
所谓“声明”也就是一个属性,这个属性的type为0x2800或0x2801,表示这是一个首要服务(Primary Service)或次要服务(Secondary Service)。
它的value用来表示“这是什么服务”,即value为某个服务的UUID。
Permissions表示该声明即这个ATT属性是只读的,无需验证、无需授权。从这里可以知道,蓝牙设备能提供什么服务是公开的,它无法隐瞒,别的设备都可以来查询该设备提供什么服务。
8 GATT的功能
GATT层定义了11项Feature,即它可以做哪些事:
- Server Configuration
- Primary Service Discovery
- Relationship Discovery
- Characteristic Discovery
- Characteristic Descriptor Discovery
- Reading a Characteristic Value
- Writing a Characteristic Value
- Notification of a Characteristic Value
- Indication of a Characteristic Value
- Reading a Characteristic Descriptor
- Writing a Characteristic Descriptor