Skip to content

Commit fcafb89

Browse files
committed
nimble/ll: Add LE CS Set Procedure Parameters command
1 parent addc7d1 commit fcafb89

File tree

3 files changed

+74
-1
lines changed

3 files changed

+74
-1
lines changed

nimble/controller/src/ble_ll_cs.c

+51-1
Original file line numberDiff line numberDiff line change
@@ -928,7 +928,57 @@ int
928928
ble_ll_cs_hci_set_proc_params(const uint8_t *cmdbuf, uint8_t cmdlen,
929929
uint8_t *rspbuf, uint8_t *rsplen)
930930
{
931-
return BLE_ERR_UNSUPPORTED;
931+
const struct ble_hci_le_cs_set_proc_params_cp *cmd = (const void *)cmdbuf;
932+
struct ble_hci_le_cs_set_proc_params_rp *rsp = (void *)rspbuf;
933+
struct ble_ll_conn_sm *connsm;
934+
struct ble_ll_cs_config *conf;
935+
struct ble_ll_cs_pref_proc_params *params;
936+
937+
if (cmdlen != sizeof(*cmd) || cmd->config_id >= BLE_LL_CS_CONFIG_MAX_NUM) {
938+
return BLE_ERR_INV_HCI_CMD_PARMS;
939+
}
940+
941+
/* If no connection handle exit with error */
942+
connsm = ble_ll_conn_find_by_handle(le16toh(cmd->conn_handle));
943+
if (!connsm) {
944+
return BLE_ERR_UNK_CONN_ID;
945+
}
946+
947+
conf = &connsm->cssm->config[cmd->config_id];
948+
949+
/* If CS configuration with Config_ID does not exists */
950+
if (!conf->config_enabled) {
951+
return BLE_ERR_INV_HCI_CMD_PARMS;
952+
}
953+
954+
/* If CS measurement is enabled exit with error */
955+
if (connsm->cssm->measurement_enabled) {
956+
return BLE_ERR_CMD_DISALLOWED;
957+
}
958+
959+
if (g_ble_ll_cs_chan_count < 15) {
960+
return BLE_ERR_INSUFFICIENT_CHAN;
961+
}
962+
963+
params = &conf->pref_proc_params;
964+
params->max_procedure_len = htole16(cmd->max_procedure_len);
965+
params->min_procedure_interval = htole16(cmd->min_procedure_interval);
966+
params->max_procedure_interval = htole16(cmd->max_procedure_interval);
967+
params->max_procedure_count = htole16(cmd->max_procedure_count);
968+
params->min_subevent_len = get_le24(cmd->min_subevent_len);
969+
params->max_subevent_len = get_le24(cmd->max_subevent_len);
970+
params->aci = cmd->tone_antenna_config_selection;
971+
params->phy = cmd->phy;
972+
params->tx_power_delta = cmd->tx_power_delta;
973+
params->preferred_peer_antenna = cmd->preferred_peer_antenna;
974+
params->snr_control_initiator = cmd->snr_control_initiator;
975+
params->snr_control_reflector = cmd->snr_control_reflector;
976+
params->params_ready = 1;
977+
978+
rsp->conn_handle = cmd->conn_handle;
979+
*rsplen = sizeof(*rsp);
980+
981+
return BLE_ERR_SUCCESS;
932982
}
933983

934984
int

nimble/controller/src/ble_ll_cs_priv.h

+20
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,22 @@ struct ble_ll_cs_supp_cap {
5555
uint8_t tx_snr_capablity;
5656
};
5757

58+
struct ble_ll_cs_pref_proc_params {
59+
uint16_t max_procedure_len;
60+
uint16_t min_procedure_interval;
61+
uint16_t max_procedure_interval;
62+
uint16_t max_procedure_count;
63+
uint32_t min_subevent_len;
64+
uint32_t max_subevent_len;
65+
uint8_t aci;
66+
uint8_t phy;
67+
uint8_t tx_power_delta;
68+
uint8_t preferred_peer_antenna;
69+
uint8_t snr_control_initiator;
70+
uint8_t snr_control_reflector;
71+
uint8_t params_ready;
72+
};
73+
5874
struct ble_ll_cs_config {
5975
bool config_enabled;
6076
/* The role to use in CS procedure
@@ -88,6 +104,8 @@ struct ble_ll_cs_config {
88104
uint8_t t_ip2;
89105
uint8_t t_fcs;
90106
uint8_t t_pm;
107+
/* CS procedure parameters preferred by our Host */
108+
struct ble_ll_cs_pref_proc_params pref_proc_params;
91109
};
92110

93111
struct ble_ll_cs_sm {
@@ -110,6 +128,8 @@ struct ble_ll_cs_sm {
110128

111129
/* DRBG context, initialized onece per LE Connection */
112130
struct ble_ll_cs_drbg_ctx drbg_ctx;
131+
132+
uint8_t measurement_enabled;
113133
};
114134

115135
#ifdef __cplusplus

nimble/include/nimble/ble.h

+3
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,9 @@ enum ble_error_codes
264264
BLE_ERR_LIMIT_REACHED = 0x43,
265265
BLE_ERR_OPERATION_CANCELLED = 0x44,
266266
BLE_ERR_PACKET_TOO_LONG = 0x45,
267+
BLE_ERR_TOO_LATE = 0x46,
268+
BLE_ERR_TOO_EARLY = 0x47,
269+
BLE_ERR_INSUFFICIENT_CHAN = 0x48,
267270
BLE_ERR_MAX = 0xff
268271
};
269272

0 commit comments

Comments
 (0)