新闻  |   论坛  |   博客  |   在线研讨会
[BLE--GAP]GAP Service及其使用
电子禅石 | 2021-05-27 12:34:43    阅读:8315   发布文章

简述

GAP本身是一个Profile,并不是Protocol,其作用是定义了如何来使用蓝牙的Host的各层的Protocol。GAP中有一个GAP Service,是用来表明设备的基本信息的,只要作为GATT Server,就需要实现这个GAP Service。


GAP Service

先看一张图,对GAP Service有个整体了解:

这里写图片描述

从此图可看到,BR/EDR可以选择实现GAP Service的Device Name和Appearance属性。对于BLE而言,是分角色进行对待的,Broadcaster和Observer不需要GAP Service。对于Peripheral和Central角色,则可能会需要实现其中部分或全部实现:


Peripheral

Device Name和Appearance必须要实现,Peripheral Preferred Connection Parameters是可选的,而Central Address Resolution则要看Link Layer Privacy是否支持。


Central

Device Name和Appearance必须要实现,Peripheral Preferred Connection Parameters不需要,因为是针对peripheral的,而Central Address Resolution则要看Link Layer Privacy是否支持。


多GAP Role模式下

对于支持多GAP Role的:GAP Service必须支持所有Role的需求,即为所有Role需求的总和。而当操作于不支持某些Characteristic的Role下时,设备也必须继续暴露出其所支持的所有GAP Service的Characteristics。


Characteristic介绍

GAP Service的4个Characteristic的介绍。


Device Name

这里写图片描述

虽然这里规定Device Name长度可以到248字节,但一般不会需要那么长的名字,一般会建议最长到达40字节就好了。


Appearance

这里写图片描述

Appearance即表明这是个什么设备,如鼠标?键盘?等等,用2个字节可以表示很多种类的,某个代码对应某个具体的Appearance表示,这个需要参考SIG的Assigned Numbers,上面有列表的。另外,Device Name和Appearance都是表示本地设备属性的,因此只会有一份实例。对于多GAP Role的状况,应当还是只会维护一份Device Name和Appearance,不然一个设备有多个名字和多个Appearance,就不好表示了。


Peripheral Preferred Connection Parameters(PPCP)

这里写图片描述

主要是表明Peripheral设备这边比较偏好的一个连接参数,包括:

- Minimum connection interval

- Maximum connection interval

- Slave Latency

- Connection Supervision timeout multiplier

关于连接参数的介绍涉及的地方很多了,这里不再赘述。其实最关注的还是在哪使用这个参数?如何使用呢?我的想法是,这个是供Central来获知的。不过有点略为奇怪,Central在链路建立时是通过CONN_REQ来设置好连接参数的,而此时两者并未建立连接,因此Central此时并不同通过ATT_Read来获取Peripheral上的这个PPCP,难道是建立连接后Central有需要知道这个PPCP的必要?因为Peripheral也有直接更新连接参数的过程的啊,这样看来具体应用估计也不是必要吧。


Central Address Resolution

这个看来是BT 4.2添加的新特性了。因为在BT 4.2中,为了提高BT的安全性(原来SMP的方式是可以破解的),加入了Random Address的内容。这里的Central Address Resolution就是用来表明暴露GAP Service的这个Central设备,是否支持Resolvable Private Address(RPA)的。

Peripheral设备通过读对方Central设备的GAP Service的Central Address Resolution,就能知道其是否支持RPA了,如果其支持,那Peripheral就可以在自己的Directed Advertisement中使用RPA了。如果不支持,那还是只能使用public地址了。

关于蓝牙的public地址,private地址,请参考设备蓝牙地址这篇文章。

来看下Central Address Resolution的内容:

这里写图片描述


一份实例

最后补充下,上面的GAP Service,对于一个设备而言,应当是只有一份实例的,即不管是多GAP Role设备还是就只支持一个GAP Role,都只需要维护一份GAP Service,而该Service中的Characteristics都只有一份实例的。


原文链接:https://blog.csdn.net/suxiang198/article/details/48521335/


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
属于自己的技术积累分享,成为嵌入式系统研发高手。
推荐文章
最近访客