FiRa标准——蓝牙OOB规范(二)

接上一篇文章,FiRa标准——蓝牙OOB技术规范(一)_UWB码农Luo的博客-CSDN博客,对FiRa标准中,蓝牙设备的发现流程进行描述。

其中,CP为FiRa Bluetooth Connector Primary, 主连接器的简称;

CS为FiRa Bluetooth Connector Secondary,辅助连接器的简称。

1、蓝牙设备发现

基于蓝牙GAP和GATT角色,有以下一些示例需要考虑:

  • FiRa设备具有匹配的单个蓝牙GAP角色(GAP广播者/外设角色,或GAP扫描/Central 角色)
  • FiRa设备具有单个蓝牙GAP广播/外设角色,vs FiRa设备具有两个蓝牙GAP角色。
  • FiRa设备具有单个蓝牙GAP扫描器/Central角色,vs FiRa设备具有两个蓝牙GAP角色。
  • 所有FiRa设备都具有两个蓝牙GAP角色(广播者/外设角色,或扫描器/Central 角色)

关于蓝牙CSR的角色:广播者(Advertiser)、扫描者(Scanner)、从设备(Slave)、主设备(Master)、发起者(Initiator)。

由于几种情况有一定的相似性,重点对第一种情况和第4种情况进行了描述。

1.1 设备发现情形一

1.1.1 CPR Advertiser行为

广播方,支持SCAN_REQ/SCAN_RSP流程(对主动扫描的响应)。

应使用扩展广播通道/PDUs,如果实现上支持。

Advertiser应公开在蓝牙核心规范补充V10中定义的CP UUID。

Advertiser可以在“Service Data”中公开附加参数,AD type。

FiRa标准——蓝牙OOB规范(二)_第1张图片

FiRa标准——蓝牙OOB规范(二)_第2张图片

FiRa标准——蓝牙OOB规范(二)_第3张图片

部分实现可参考:

typedef struct {
	uint8_t length;
    uint8_t type;
    uint16_t uuid;
}cp_adv_srv_t;

typedef struct {
    uint8_t type : 4u;
    uint8_t len : 4u;
}fira_spec_t;

//uwb 指示数据
typedef struct {
    fira_spec_t fira_spec;  /* 统一封装 */
    uint8_t cap_bitmask;
    uint8_t rssi_threshold;
}uwb_indication_data_t;

//子序列数据,长度根据uwb_indication_t.fira_spec_len决定。
uwb_indict_sq_idx = sizeof(cp_adv_srv_t) + sizeof(uwb_indication_data_t);

typedef struct {
    uint8_t fira_spec_type : 4u;
    uint8_t fira_spec_len : 4u;
    uint16_t vendor_id;
}vendor_spec_data_t;

vendor_spec_index = uwb_indict_sq_idx + uwb_indication_t.fira_spec_len 
    + sizeof(vendor_spec_data_t);

//UWB regulatory 监管信息
typedef struct {
    uint8_t fira_spec_type : 4u;
    uint8_t fira_spec_len : 4u;
    uint8_t src_inf : 4u;
    uint8_t reserved : 3u;
    uint8_t outdoor_permit : 1u;
    uint16_t country_code;
    uint32_t timestamp;
    uint16_t regul_info;
}uwb_regul_info_t;

#define UWB_REGUL_1ST_CHAN_MASK  0xF000  /* bit 15-12, 1st channel */
#define UWB_REGUL_CHAN_NUM_MASK  0x0E00  /* bit 11-9,  channel numbers */
#define UWB_REGUL_OUT_INDOOR_MASK 0x0100 /* bit 8, outdoor/indoor */
#define UWB_REGUL_POWER_LIMIT_MASK 0x00FF 

typedef struct {
    uint8_t fira_spec_type : 4u;
    uint8_t fira_spec_len : 4u;
}fira_profile_support_info_t;

/* 或封装为枚举类型,enum, 增加reserved段 */
#define FIRA_SPEC_TYPE_UWB_INDICATION   0x01
#define FIRA_SPEC_TYPE_VENDOR_SPEC      0x02
#define FIRA_SPEC_TYPE_UWB_REGUL        0x03
#define FIRA_SPEC_TYPE_PROFILE_SUPPORT  0x04

1.1.2 CSR Scanner行为

Scanner应支持主动扫描流程(通过SCAN_RSP/SCAN_REQ方法)。

如果可能,Scanner应支持扩展广播信道/PDUs。

Scanner负责实际设备的发现流程,因为其可以检测广播者,此外还应建立蓝牙连接的初始化(在蓝牙链路层作为Master),基本算法如下:

  1. 扫描者等待检测广播者(接收ADV_IND包);
  2. 扫描者应执行主动扫描,收集附加数据。(SCAN_REQ/SCAN_RSP包)
  3. 广播者通过公开UUID,指示CP(Connector Primary,主连接器)的存在。
    1. 扫描者搜寻UWB Indication data,若检测到,扫描者获取接收包的RSSI值,若该值高于或等于设定的蓝牙RSSI门限指示,则作为蓝牙GAP Central设备初始化连接。否则,继续执行发现算法。
    2. 若“UWB Indication data”没有提供,扫描者可以根据供应商的内部策略初始化连接(基于RSSI门限)或继续设备发现算法。
  1. 在广播者没有指示主连接器(CP)存在的情况下,扫描者可以根据供应商的内部策略初始化连接,或继续设备发现算法。

case 2/case 3默认按照case 1来执行。

1.2 设备发现case 4

1.2.1 主连接器(CP)广播者行为

在该配置中,CPR设备的广播者/外设角色行为与case 1中描述的完全相同,除了“UWB指示数据”字段中的蓝牙GAP角色指示放置到FiRa “Service Data”AD类型对象中。

1.2.2 CS广播者行为

广播者应支持SCAN_REQ/SCAN_RSP流程(应答主动扫描)。

广播者应使用扩展广播信道/PDUs,如果在实现中支持。

广播者应公开在蓝牙核心规范供应(Bluetooth Core Specification Supplement v10)CS UUID。

相关“Service Data”AD type结构体定义如表5所示。(基本与CP UUID的AD type相似)

FiRa标准——蓝牙OOB规范(二)_第4张图片

接下来同样包括以下几个字段,基本与CP UUID一致:

字段名

大小(bits)

UWB indication data

24

Vendor specific data

变长

UWB regulatory information

变长

FiRa Profile Support Information

变长

1.2.3 CP扫描者行为

Scanner应支持主动扫描流程(通过SCAN_RSP/SCAN_REQ方法)。在蓝牙中,当广播者收到Scanner的SCAN_RSP/SCAN_REQ之后,可以广播应答。

如果可能,Scanner应支持扩展广播信道/PDUs。

Scanner负责实际的设备发现流程,因为其可以检测广播者,并负责建立蓝牙连接的初始化(在蓝牙链路层作为Master,即Central角色)。在双模情况下,CP端(Connector Primary,主连接器)的算法如下:

  1. 扫描者等待检测广播者(接收ADV_IND包);
  2. 扫描者应执行主动扫描,获取附加数据。(SCAN_REQ/SCAN_RSP包)
  3. 在双模情况下,广播者通过公开UUID,指示CS(Connector Client)的存在
    1. 扫描者在CS UUID的“Service Data”AD type对象中搜寻UWB Indication data,若检测到,扫描者获取来自特定广播者的接收包的RSSI值,若该值高于或等于设定的蓝牙RSSI门限指示,则作为蓝牙GAP Central设备初始化连接。否则,继续执行发现算法。——即信号强度要满足门限,才启动连接。
    2. 若“UWB Indication data”没有提供,扫描者可以根据供应商的内部策略初始化连接(如基于任意RSSI阈值)或可以继续从头执行设备发现算法。
  1. 在广播者没有指示CS存在的情况下,扫描者可以根据供应商的内部策略初始化连接,或继续执行设备发现算法。

CP侧的扫描者可以在连接CS之后停止广播。如果决定使用GAP Central角色进行实际数据交换,也可以拒绝/中止来自CS侧的任何传入/正在进行的连接。

1.2.4 CS扫描者行为

CS设备的操作与示例1的设备发现一致,仅一个例外:如若来自CP的广播对象中,“UWB指示数据”字段中指示双重GAP角色支持(BIT0,设置为0b1),则应限制连接到此类设备。相反,可以继续发现过程,以便发起与另一个设备的连接。

如果CS扫描者检测到这样的CP广播者,则可以增加广播频率或信号强度,以便从CP侧触发蓝牙连接。

补充信息:

GAP,Generic Access Profile,保证不同的蓝牙产品可以互相发现对方并建立连接。GAP定义了蓝牙设备如何发现和建立与其他设备的安全/不安全连接。

在BLE下,GAP Role有四种:

  • Broadcaster : 发送advertising events的设备(有Transmitter, 可能有Receiver)
  • Observer : 接收advertising events的设备(可能有Transmitter, 有Receiver)
  • Peripheral : 物理链路上接受连接的设备, 在LL层Connection State为Slave(有Transmitter和Receiver)
  • Central : 物理链路上发起连接的设备, 在LL层Connection State为Master(有Transmitter和Receiver)

你可能感兴趣的:(UWB技术,物联网,智能硬件,信息与通信,c++)