[ English | 简体中文 ]
Bluetooth Channel Sounding API
The openvela Bluetooth Channel Sounding (CS) interface provides distance measurement and positioning capabilities between Bluetooth devices. Based on the channel sounding technology introduced in the Bluetooth 5.4 specification, it supports centimeter-level ranging accuracy.
Header file: #include <bt_cs.h>
openvela Implementation Notes
- Ranging methods: Supports automatic selection (AUTO), RSSI, and CS ranging methods
- Role model: Supports Initiator and Reflector roles
- RAS features: Supports real-time ranging data, lost data segment retrieval, abort operation, and data filtering
- Callback notifications: Ranging start, stop, and result events are delivered asynchronously via callbacks
- Configuration dependency: Test interface requires
CONFIG_BT_CS_RAS_TEST
Callback Management
bt_cs_register_callbacks
void* bt_cs_register_callbacks(bt_instance_t* ins, const cs_callbacks_t* callbacks);
Register CS event callback functions. After successful registration, the system notifies the application via callbacks when distance measurement starts, stops, or produces results.
Parameters:
insBluetooth client instance.callbacksCS event callback function set, seecs_callbacks_t.
Returns:
On success, returns a callback cookie (non-NULL) for later unregistration; on failure, returns NULL.
bt_cs_unregister_callbacks
bool bt_cs_unregister_callbacks(bt_instance_t* ins, void* cookie);
Unregister previously registered CS event callback functions.
Parameters:
insBluetooth client instance.cookieCookie returned during callback registration.
Returns:
Returns true on success, false on failure.
Distance Measurement
bt_cs_start_distance_measurement
bt_status_t bt_cs_start_distance_measurement(bt_instance_t* ins, const bt_distance_measurement_params_t* params);
Start distance measurement. Callbacks must be registered via bt_cs_register_callbacks before calling this function. Measurement results are delivered through the cs_distance_measure_result_cb callback.
Parameters:
insBluetooth client instance.paramsDistance measurement parameters, seebt_distance_measurement_params_t.
Returns:
Returns BT_STATUS_SUCCESS on success, or an error code on failure.
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);
Stop distance measurement.
Parameters:
insBluetooth client instance.addrRemote device address.methodRanging method (AUTO/RSSI/CS).timeoutWhether stopping due to timeout.
Returns:
Returns BT_STATUS_SUCCESS on success, or an error code on failure.
Capability Query
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);
Get the maximum CS security level supported by the remote device.
Parameters:
insBluetooth client instance.addrRemote device address.
Returns:
Returns BT_STATUS_SUCCESS on success, or an error code on failure.
Configuration Management
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);
Set CS configuration parameters, including RAS features, role, antenna selection, and maximum transmit power.
Parameters:
insBluetooth client instance.addrRemote device address.paramsCS configuration parameters, seebt_cs_set_params_t.
Returns:
Returns BT_STATUS_SUCCESS on success, or an error code on failure.
Data Structures
bt_distance_measurement_params_t
Distance measurement parameters structure.
| Field | Type | Description |
|---|---|---|
addr |
bt_address_t |
Remote device address |
method |
uint8_t |
Ranging method (0=AUTO, 1=RSSI, 2=CS) |
role |
uint8_t |
Role (initiator/reflector) |
interval_ms |
uint16_t |
Measurement interval (milliseconds) |
duration_ms |
uint16_t |
Measurement duration (milliseconds) |
submode |
uint8_t |
CS submode |
max_steps |
uint8_t |
Maximum steps |
mode0_steps |
uint8_t |
Mode 0 steps |
rtt_type |
uint8_t |
RTT type |
sync_phy |
uint8_t |
Sync PHY |
channel_map |
uint8_t |
Channel map |
antenna_paths_mask |
uint8_t |
Antenna paths mask |
vendor_specific |
uint8_t |
Vendor-specific parameter |
debug_flags |
uint8_t |
Debug flags |
bt_distance_measurement_result_t
Distance measurement result structure.
| Field | Type | Description |
|---|---|---|
centimeter |
uint8_t |
Distance (centimeters) |
error_centimeter |
uint8_t |
Distance error (centimeters) |
azimuth_angle |
uint8_t |
Azimuth angle |
error_azimuthAngle |
uint8_t |
Azimuth angle error |
altitude_angle |
uint8_t |
Altitude angle |
error_altitudeAngle |
uint8_t |
Altitude angle error |
elapsed_realtime_nanos |
long |
Elapsed realtime (nanoseconds) |
confidence_level |
uint8_t |
Confidence level |
delay_spread_meters |
double |
Delay spread (meters) |
detected_attack_level |
uint8_t |
Detected attack level |
velocity_meters_persecond |
double |
Velocity (meters/second) |
method |
uint8_t |
Ranging method used |
bt_cs_set_params_t
CS configuration parameters structure.
| Field | Type | Description |
|---|---|---|
ras_feature |
uint32_t |
RAS feature bits (see macro definitions below) |
role |
uint8_t |
CS role bits (Bit 0: initiator, Bit 1: reflector) |
cs_sync_antenna_selection |
uint8_t |
CS_SYNC antenna selection |
max_tx_power |
int8_t |
Maximum TX power (dBm, range -127 to 20) |
cs_callbacks_t
CS event callback function set.
| Field | Type | Description |
|---|---|---|
size |
size_t |
Structure size |
cs_distance_measure_started_cb |
Function pointer | Distance measurement started callback |
cs_distance_measure_stopped_cb |
Function pointer | Distance measurement stopped callback |
cs_distance_measure_result_cb |
Function pointer | Distance measurement result callback |
Macro Definitions
RAS Feature Bits
| Macro | Value | Description |
|---|---|---|
BT_CS_RAS_REAL_TIME_RANGING_DATA |
0x01 | Real-time ranging data |
BT_CS_RAS_RETRIEVE_LOST_DATA_SEGMENTS |
0x02 | Retrieve lost ranging data segments |
BT_CS_RAS_ABORT_OPERATION |
0x04 | Abort operation |
BT_CS_RAS_FILTER_RANGING_DATA |
0x08 | Filter ranging data |
Antenna Selection
| Macro | Value | Description |
|---|---|---|
BT_CS_ANTENNA_SEL_1 |
0x01 | Use antenna identifier 1 |
BT_CS_ANTENNA_SEL_2 |
0x02 | Use antenna identifier 2 |
BT_CS_ANTENNA_SEL_3 |
0x03 | Use antenna identifier 3 |
BT_CS_ANTENNA_SEL_4 |
0x04 | Use antenna identifier 4 |
BT_CS_ANTENNA_SEL_SINGLE_REPEATE |
0xFD | Antenna identifiers in single repetitive order |
BT_CS_ANTENNA_SEL_DOUBLE_REPEATE |
0xFE | Antenna identifiers in double repetitive order |
BT_CS_ANTENNA_SEL_NO_RECOMMEND |
0xFF | Host has no recommendation |
openvela extension interface.