@@ -1151,7 +1151,61 @@ int
1151
1151
ble_ll_cs_hci_set_proc_params (const uint8_t * cmdbuf , uint8_t cmdlen ,
1152
1152
uint8_t * rspbuf , uint8_t * rsplen )
1153
1153
{
1154
- return BLE_ERR_UNSUPPORTED ;
1154
+ const struct ble_hci_le_cs_set_proc_params_cp * cmd = (const void * )cmdbuf ;
1155
+ struct ble_hci_le_cs_set_proc_params_rp * rsp = (void * )rspbuf ;
1156
+ struct ble_ll_conn_sm * connsm ;
1157
+ struct ble_ll_cs_config * conf ;
1158
+ struct ble_ll_cs_pref_proc_params * params ;
1159
+
1160
+ if (cmdlen != sizeof (* cmd )) {
1161
+ return BLE_ERR_INV_HCI_CMD_PARMS ;
1162
+ }
1163
+
1164
+ /* If no connection handle exit with error */
1165
+ connsm = ble_ll_conn_find_by_handle (le16toh (cmd -> conn_handle ));
1166
+ if (!connsm ) {
1167
+ return BLE_ERR_UNK_CONN_ID ;
1168
+ }
1169
+
1170
+ if (cmd -> config_id >= ARRAY_SIZE (connsm -> cssm -> config )) {
1171
+ return BLE_ERR_INV_HCI_CMD_PARMS ;
1172
+ }
1173
+
1174
+ conf = & connsm -> cssm -> config [cmd -> config_id ];
1175
+
1176
+ /* If CS configuration with Config_ID does not exists */
1177
+ if (!conf -> config_enabled ) {
1178
+ return BLE_ERR_INV_HCI_CMD_PARMS ;
1179
+ }
1180
+
1181
+ /* If CS measurement is enabled exit with error */
1182
+ if (connsm -> cssm -> measurement_enabled ) {
1183
+ return BLE_ERR_CMD_DISALLOWED ;
1184
+ }
1185
+
1186
+ if (g_ble_ll_cs_chan_count < 15 ) {
1187
+ return BLE_ERR_INSUFFICIENT_CHAN ;
1188
+ }
1189
+
1190
+ params = & conf -> pref_proc_params ;
1191
+ params -> max_procedure_len = htole16 (cmd -> max_procedure_len );
1192
+ params -> min_procedure_interval = htole16 (cmd -> min_procedure_interval );
1193
+ params -> max_procedure_interval = htole16 (cmd -> max_procedure_interval );
1194
+ params -> max_procedure_count = htole16 (cmd -> max_procedure_count );
1195
+ params -> min_subevent_len = get_le24 (cmd -> min_subevent_len );
1196
+ params -> max_subevent_len = get_le24 (cmd -> max_subevent_len );
1197
+ params -> aci = cmd -> tone_antenna_config_selection ;
1198
+ params -> phy = cmd -> phy ;
1199
+ params -> tx_power_delta = cmd -> tx_power_delta ;
1200
+ params -> preferred_peer_antenna = cmd -> preferred_peer_antenna ;
1201
+ params -> snr_control_initiator = cmd -> snr_control_initiator & 0x0F ;
1202
+ params -> snr_control_reflector = cmd -> snr_control_reflector & 0x0F ;
1203
+ params -> params_ready = 1 ;
1204
+
1205
+ rsp -> conn_handle = cmd -> conn_handle ;
1206
+ * rsplen = sizeof (* rsp );
1207
+
1208
+ return BLE_ERR_SUCCESS ;
1155
1209
}
1156
1210
1157
1211
int
0 commit comments