白话BLE技术 第四篇 GAP

GAP提供了一个框架,任何遵守这个框架的BLE设备都可以发现彼此,发送数据,建立安全链接,以及执行操作。因此,理解GAP是很重要的事情。

在GAP中,每个设备可以执行一个或者多个角色。每个角色都有固定你的要求。并且有模式,模式是一个设备的状态,不同模式之间的转换,可以由用户来触发,也可以自动发生。这个模式的切换,对应到程序中就是状态机,详细的代码分析,会在之后的章节中说明。在GAP中还有过程的概念,一个过程是一系列的动作。在GAP中,也会执行安全管理的协议。我们会一一分析这些概念。

角色

GAP中定义了四种角色

广播者 广播者会定期发送广播包,发送的数据是所有观察者都可以接收到的。

观察者 观察者监听广播包中的数据。

中心者 中心者对应链接层的master,中心者可以建立起多个连接,BLE协议是非对称的,所以中心者的计算能力要远大于外围者的计算能力。手机通常是中心者,因为手机有强大的CPU资源和内存资源。这样手机可以维护对多个设备的连接。中心者监听数据包并且发起对指定设备的连接。

外围者 外围者对应链路层的slave,这个角色使用广播包来让中心者发现者自己,之后再建立连接。通常外围者的计算能力比较弱小。

一个设备可以执行一个或者多个角色。需要注意的是GATT中的CS架构和GAP中的角色不同。

举个栗子,一个体重计和一个手机使用BLE连接。体重计上的GAP角色是外围设备,但是它扮演了GATT的服务器,并且向手机发送数据。当体重计需要更新自己的时间的时候,它就会向手机发送请求,这个时候体重计扮演的就是GATT的客户端。服务器和客户端关注的是谁提供数据,谁接收数据。谁提供数据,谁就是服务器。谁接收数据,谁就是客户端。但是GAP的角色是保持固定的,不会变化。体重计就是外围设备,不会变化。而手机始终都是中心设备。

广播和观察

广播可以发送数据给一个或者多个设备,也就是观察者。需要注意的是,广播者不知道数据是否送达给所有的观察者,也不确定观察者是否都收到了。广播的数据没有任何的确认或者回应。观察者监听所有的潜在的发送者,这个过程也是没有任何保证的。

广播者发出的包包含了真实合法的数据,每个广播包包含了31个字节的数据,当然,这是经过了各种层处理以后的大小,真实的数据量要远小于31个字节。如果数据量很大的情况下,可以分拆成多个包发送。由于扫描者要接收到广播包以后才会发出响应,所以最重要的数据都是要放在广播包中,而不是在扫描响应的保重。广播者可以发送带有ADV_NONCONN_IND或者ADV_SCAN_IND标识的广播包。

  • ADV_NONCONN_IND也就是说不可以连接,不可以被扫描的非定向的广播包
  • ADV_SCAN_IND表示不可以连接,但是可以被扫描到的非定向的广播包

广播包可以很容易被创建,并且广播出去。外围设备在建立连接以后,就停止发送信息给其他中心设备,直到连接断开。

苹果的iBeacon使用了广播模式来发送一个广播包,允许任何进入范围的设备检测到iBeacon,而不需要任何访问权限。iBeacon节点不会关心有多少设备在监听它,它只是保持不断的发送数据广播包到固定的范围里。

发现

一个设备的发现能力是指怎么发送广播显示自己的存在,并且使用这些信息可以做什么事情。不止是扫描和广播的能力,同时还要看携带的数据。发现通常是指检测存在和获取附近其他设备的基本信息。简单来说,发现就是列出一个列表用来显示周围的设备,而用户可以从这个列表上选择一个设备进行连接。

你可能感兴趣的:(蓝牙源码分析)