GATT协议学习笔记

BLE协议栈,GATT协议学习笔记
摘要由CSDN通过智能技术生成

目录

前言

一、Server Configuration

1.1 Exchange MTU

二、PRIMARY SERVICE DISCOVERY

2.1 Discover All Primary Services

2.2 Discover Primary Services By Service UUID

三、RELATIONSHIP DISCOVERY

3.1 Find Included Services

四、CHARACTERISTIC DISCOVERY

4.1 Discover All Characteristics of a Service

4.2 Discover Characteristics by UUID

五、CHARACTERISTIC DESCRIPTOR DISCOVERY

5.1 Discover All Characteristic Descriptors

六、CHARACTERISTIC VALUE READ

6.1 Read Characteristic Value

6.2 Read Using Characteristic UUID

6.3 Read Long Characteristic Values

6.4  Read Multiple Characteristic Values

 七、CHARACTERISTIC VALUE WRITE

7.1 Write Characteristic Value

7.2 Write Long Characteristic Values 

7.3 Write Without Response

八、CHARACTERISTIC VALUE NOTIFICATION

8.1 Notifications

九、CHARACTERISTIC VALUE INDICATIONS

9.1 Indications

十、CHARACTERISTIC DESCRIPTORS

10.1 Read Characteristic Descriptors

10.2 Read Long Characteristic Descriptors

10.3 Write Characteristic Descriptors

10.4 Write Long Characteristic Descriptors

总结


前言

GATT 定义了以下几种功能

(1)Server Configuration

(2)Primary Service Discovery

(3)Relationship Discovery

(4)Characteristic Discovery

(5)Characteristic Descriptor Discovery

(6)Reading a Characteristic Value

(7)Writing a Characteristic Value

(8)Notification of a Characteristic Value

(9)Indication of a Characteristic Value

(10)Characteristic Descriptor

这10项Feature,通过“Procedure”(规程)来实现,而Procedure要通过ATT层的Request、Response等等操作来传输数据。

一、Server Configuration

Server Configuration (配置服务),配置服务里只有一项,那就是Exchange Mtu

1.1 Exchange MTU

MTU: 最大传输单元(MAXIMUM TRANSMISSION UNIT), 通常就是指能够传输的最大数据量。 通过交换彼此MTU的大小来确定最终以多大的数据量进行数据传输,以彼此之间的最小值为最终MTU。主从双方约定每次在做数据传输时不超过这个最终MTU,ATT_MTU的默认大小是23字节,如果不修改MTU大小的,那么一包数据最多发送23个字节。 蓝牙5.0支持最大MTU为512个字节。

MTU Exchange分为Exchange MTU Request和Exchange MTU Response。以蓝牙官方文档为例,A要求MTU为150byte,它将这个请求发给B,B收到这个请求后,和自身支持的MTU对比,因为自身支持的MTU大小是100byte,所以它会返回一个响应给A, A得到这个100byte的响应后,和自身的150byte做个对比,取最小的100byte为最终的MTU值。    

 

 

二、PRIMARY SERVICE DISCOVERY

Client 使用此过程来发现Server上的主服务,使用Discover All Primary Services 或Discover Primary Services By Service UUID 子过程发现Server 公开的Primary服务,可以发现所有Primary服务或者通过UUID 发现某个特定Primary服务。待Client 发现主要服务后,可以通过Find Included Services 过程发现该主要服务所包含的其它服务。

有两个子过程可用于主服务发现:发现所有主服务和通过服务UUID发现主服务。

2.1 Discover All Primary Services

此子过程用于发现服务器上的所有主服务。

GATT是如何发现服务的呢?GATT协议是基于ATT协议,Client由APP层发送一个发现服务的request,APP层将这个request往下发送至GATT层,GATT收到后再往下ATT层发送,包含有APP层给的start handle 、end handle等,ATT的命令就是Read By Group Type Request,Client将请求发送至对端Server,对端Server的ATT收到请求后,寻找所需要的所有服务,找完所有的服务后,通过Read By Group Type Response响应,发送到Client的ATT层,ATT层再往上汇报,最终反馈给APP层,用户就可以得到所需要的所有服务。

当收到ATT_ERROR_RSP且错误代码设置为属性或“Read By Group Type Response”中的结束组句柄为0xFFFF时,此子过程将完成。

如果在发现服务器上的所有主服务之前找到了所需的主服务,则允许提前结束子过程。

2.2 Discover Primary Services By Service UUID

当只知道服务UUID时,客户端将此子过程用于发现服务器上的特定主服务。特定的主服务可能在服务器上存在多次。正在发现的主服务由服务UUID标识。

跟Discover All Primary Services发现流程一样,只不过基于ATT的命令有所不同,Discover Primary Services By Service UUID是用Find By Type Value Request,属性值设置为16位蓝牙UUID或128位UUID一起使用。start handle设置为0x0001,end handle设置为0xFFFF。Client将请求发送至对端Server,对端Server的ATT收到请求后,Find By Type Value Request,寻找所有的服务,再和所需要的UUID进行对比,符合UUID的服务,通过Find By Type Value Response响应,发送到Client的ATT层,ATT层再往上汇报,最终反馈给APP层,用户就可以得到所需要UUID的服务。

如果返回正在搜索的服务UUID的属性handle范围,而结束发现handle不是0xFFFF,则可以再次发出Find By Type Value Request。并将start handle设置为大于FIND_BY_TYPE_VALUE_RSP PDU中的最后一个属性句柄范围+1。比如Server响应的handle是0x0200到0x0214,那么下一次的Client的start handle就是0x0215,end handle 是0xFFFF。

如果在发现服务器上支持的指定服务UUID的所有主服务之前找到了所需的主服务,则允许提前结束子过程。

三、RELATIONSHIP DISCOVERY

该功能呢包含一个子功能:查找包含的服务项。

3.1 Find Included Services

发现包含服务,主要服务是0x2800,次要服务是0x2801,包含服务是0x2802,client使用这个功能搜索一个service和其他services的关系。

app层发送disc_included_svc请求命令, 参数设置,start handle为0x0001,end handle为0xFFFF,属性类型UUID为0x2802,该命令下达至GATT层,client发送ATT的Read By Type Request,包含所设参数,server端收到请求后,对该请求处理,同样使用find valve by uuid 查找0x2802的服务,再将找到服务的handle、len、value发送给client端,server发送Read By Type Response或Error Response,如果Error Code为Attribute Not Found,则表示发现完成。client的ATT层收到server的响应后,会将结果上报给APP层,用户就能得到想要的结果。

四、

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值