GAP层协议浅析

overview

为什么这篇博文GAP协议不加一个ble修饰?因为这个协议太重要了,有必要从蓝牙整体面详细整理一下相关东西。

记得之前一个前辈,新人培训时,用到了三个词总结什么是GAP?
发现连接安全” 太深刻。

引用core spec一张图,无论br/edr何时还是ble 都绕不开GAP协议。
全球蓝牙设备都需遵守GAP协议,才能够正常被发现和连接。
GAP层协议浅析

Role

BR/EDR

  • 在传统蓝牙中,主要分为两种角色,initiator(发起连接的一端) 和acceptor(接受连接的一段)。
  • 需要注意的是,同一个设备既可以作为initiator,也可以作为acceptor,这种角色并不是固定的,只是针对一次连接过程中的角色定义。
  • 同一个设备,同一时间,可以接受连接,也可以发起连接。

BLE

  • 在ble中,GAP定义了四种角色:广播者 broadcast;监听者observer;外围设备peripheral;*设备central。
  • 连接过程仅有两个设备参与,这四种角色也并不是每个设备一个角色。可以成对来看,broadcast-observer,peripheral-central。针对同一次连接的不同时期。在扫描阶段,顾名思义,广播者发送广播,监听者扫描监听周围设备的广播。
  • 举例说明,蓝牙鼠标与电脑连接,这个过程中,mouse 发送adv,所以是broadcast;pc 进入scan mode 所以是observer;pc 主动发起的连接,作为master,也是central; 鼠标接受连接,并且提供自己定义的service,是slave ,也是peripheral。
  • 同传统蓝牙一样,根据设备的使用环境,可以自定义实现相关的profile,并不是所有设备都需要实现四种角色。如鼠标,就不需要实现observer 角色,它没有显示能力,也发现不了对端设备的名字,所以无法主动发起连接。
  • 也有很多多协议的复杂设备,例如我们使用的手机,四种角色都需要实现

用户接口

主要是蓝牙设备呈现给用户的一些参数

蓝牙地址

  • BD_ADDR,规定是一个48bit大小,主要分为public 和random 。 SIG对蓝牙地址的各个位段都有详细规定。
  • random address 又可以分为 static address和 private address private address
    可以分为 non-resolvable 和resolvable
  • 后续会另起一篇,详细介绍bt address及RPA

设备名

  • 蓝牙设备理论上最长可达248字节(UTF-8),但是在ui层次一般被限制在62个字符以内。
  • 另外需要注意的是,可能对端设备对名字长度有限制,只会显示前20个字节
  • 一般在adv 中会携带device name 信息,br/edr中会remote name request 拿到对端设备名字, ble
    中一般会通过ATT 读到对端设备名字的characteristic

**

  • passkey应用在smp或者传统配对过程中,可能会呈现给用户,这个需要视设备IO能力而定
  • 在smp过程中,passkey是一个6位整数,范围是000000-999999
  • 在legacy pairing过程中,PIN有不同的级别
  • ble 主要是smp

设备类型

class of device (COD)

图标

广播码