|
928 | 928 | ble_ll_cs_hci_set_proc_params(const uint8_t *cmdbuf, uint8_t cmdlen,
|
929 | 929 | uint8_t *rspbuf, uint8_t *rsplen)
|
930 | 930 | {
|
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; |
932 | 982 | }
|
933 | 983 |
|
934 | 984 | int
|
|
0 commit comments