[ English | 简体中文 ]
蓝牙 Channel Sounding API
openvela 蓝牙 Channel Sounding(CS)接口,用于蓝牙设备间的距离测量和定位功能。CS 基于蓝牙 5.4 规范引入的信道探测技术,支持厘米级精度的测距。
头文件:#include <bt_cs.h>
openvela 实现说明
- 测距方法:支持自动选择(AUTO)、RSSI 和 CS 三种测距方法
- 角色模型:支持发起方(Initiator)和反射方(Reflector)两种角色
- RAS 特性:支持实时测距数据、丢失数据段恢复、中止操作和数据过滤
- 回调通知:通过回调函数异步返回测距启动、停止和结果事件
- 配置依赖:测试接口需启用
CONFIG_BT_CS_RAS_TEST
回调管理
bt_cs_register_callbacks
void* bt_cs_register_callbacks(bt_instance_t* ins, const cs_callbacks_t* callbacks);
注册 CS 事件回调函数。注册成功后,当距离测量启动、停止或产生结果时,系统会通过回调函数通知应用。
参数:
ins蓝牙客户端实例。callbacksCS 事件回调函数集合,参见cs_callbacks_t。
返回值:
成功时返回回调 cookie(非 NULL),用于后续注销;失败时返回 NULL。
bt_cs_unregister_callbacks
bool bt_cs_unregister_callbacks(bt_instance_t* ins, void* cookie);
注销已注册的 CS 事件回调函数。
参数:
ins蓝牙客户端实例。cookie注册回调时返回的 cookie。
返回值:
成功时返回 true,失败时返回 false。
距离测量
bt_cs_start_distance_measurement
bt_status_t bt_cs_start_distance_measurement(bt_instance_t* ins, const bt_distance_measurement_params_t* params);
启动距离测量。调用前需先通过 bt_cs_register_callbacks 注册回调函数,测量结果将通过 cs_distance_measure_result_cb 回调返回。
参数:
ins蓝牙客户端实例。params距离测量参数,参见bt_distance_measurement_params_t。
返回值:
成功时返回 BT_STATUS_SUCCESS,失败时返回错误码。
bt_cs_stop_distance_measurement
bt_status_t bt_cs_stop_distance_measurement(bt_instance_t* ins, bt_address_t* addr, uint8_t method, bool timeout);
停止距离测量。
参数:
ins蓝牙客户端实例。addr远端设备地址。method测距方法(AUTO/RSSI/CS)。timeout是否因超时而停止。
返回值:
成功时返回 BT_STATUS_SUCCESS,失败时返回错误码。
能力查询
bt_get_cs_max_supported_security_level
bt_status_t bt_get_cs_max_supported_security_level(bt_instance_t* ins, bt_address_t* addr);
获取远端设备支持的最大 CS 安全等级。
参数:
ins蓝牙客户端实例。addr远端设备地址。
返回值:
成功时返回 BT_STATUS_SUCCESS,失败时返回错误码。
配置管理
bt_cs_set_config
bt_status_t bt_cs_set_config(bt_instance_t* ins, bt_address_t* addr, const bt_cs_set_params_t* params);
设置 CS 配置参数,包括 RAS 特性、角色、天线选择和最大发射功率。
参数:
ins蓝牙客户端实例。addr远端设备地址。paramsCS 配置参数,参见bt_cs_set_params_t。
返回值:
成功时返回 BT_STATUS_SUCCESS,失败时返回错误码。
数据结构
bt_distance_measurement_params_t
距离测量参数结构体。
| 字段 | 类型 | 说明 |
|---|---|---|
addr |
bt_address_t |
远端设备地址 |
method |
uint8_t |
测距方法(0=AUTO, 1=RSSI, 2=CS) |
role |
uint8_t |
角色(发起方/反射方) |
interval_ms |
uint16_t |
测量间隔(毫秒) |
duration_ms |
uint16_t |
测量持续时间(毫秒) |
submode |
uint8_t |
CS 子模式 |
max_steps |
uint8_t |
最大步数 |
mode0_steps |
uint8_t |
Mode 0 步数 |
rtt_type |
uint8_t |
RTT 类型 |
sync_phy |
uint8_t |
同步 PHY |
channel_map |
uint8_t |
信道映射 |
antenna_paths_mask |
uint8_t |
天线路径掩码 |
vendor_specific |
uint8_t |
厂商自定义参数 |
debug_flags |
uint8_t |
调试标志 |
bt_distance_measurement_result_t
距离测量结果结构体。
| 字段 | 类型 | 说明 |
|---|---|---|
centimeter |
uint8_t |
距离(厘米) |
error_centimeter |
uint8_t |
距离误差(厘米) |
azimuth_angle |
uint8_t |
方位角 |
error_azimuthAngle |
uint8_t |
方位角误差 |
altitude_angle |
uint8_t |
仰角 |
error_altitudeAngle |
uint8_t |
仰角误差 |
elapsed_realtime_nanos |
long |
经过的实时时间(纳秒) |
confidence_level |
uint8_t |
置信度 |
delay_spread_meters |
double |
延迟扩展(米) |
detected_attack_level |
uint8_t |
检测到的攻击等级 |
velocity_meters_persecond |
double |
速度(米/秒) |
method |
uint8_t |
使用的测距方法 |
bt_cs_set_params_t
CS 配置参数结构体。
| 字段 | 类型 | 说明 |
|---|---|---|
ras_feature |
uint32_t |
RAS 特性位(见下方宏定义) |
role |
uint8_t |
CS 角色位(Bit 0: 发起方, Bit 1: 反射方) |
cs_sync_antenna_selection |
uint8_t |
CS_SYNC 天线选择 |
max_tx_power |
int8_t |
最大发射功率(dBm,范围 -127 到 20) |
cs_callbacks_t
CS 事件回调函数集合。
| 字段 | 类型 | 说明 |
|---|---|---|
size |
size_t |
结构体大小 |
cs_distance_measure_started_cb |
函数指针 | 距离测量启动回调 |
cs_distance_measure_stopped_cb |
函数指针 | 距离测量停止回调 |
cs_distance_measure_result_cb |
函数指针 | 距离测量结果回调 |
宏定义
RAS 特性位
| 宏 | 值 | 说明 |
|---|---|---|
BT_CS_RAS_REAL_TIME_RANGING_DATA |
0x01 | 实时测距数据 |
BT_CS_RAS_RETRIEVE_LOST_DATA_SEGMENTS |
0x02 | 恢复丢失的测距数据段 |
BT_CS_RAS_ABORT_OPERATION |
0x04 | 中止操作 |
BT_CS_RAS_FILTER_RANGING_DATA |
0x08 | 过滤测距数据 |
天线选择
| 宏 | 值 | 说明 |
|---|---|---|
BT_CS_ANTENNA_SEL_1 |
0x01 | 使用天线 1 |
BT_CS_ANTENNA_SEL_2 |
0x02 | 使用天线 2 |
BT_CS_ANTENNA_SEL_3 |
0x03 | 使用天线 3 |
BT_CS_ANTENNA_SEL_4 |
0x04 | 使用天线 4 |
BT_CS_ANTENNA_SEL_SINGLE_REPEATE |
0xFD | 天线标识符单次重复顺序 |
BT_CS_ANTENNA_SEL_DOUBLE_REPEATE |
0xFE | 天线标识符双次重复顺序 |
BT_CS_ANTENNA_SEL_NO_RECOMMEND |
0xFF | 主机无推荐 |
openvela 扩展接口。