"); //-->
简述
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/
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。