uint32_t ble_opt_get_req_dec(uint8_t const * const p_buf, uint16_t packet_len, uint32_t * const p_opt_id, ble_opt_t **const pp_opt ) { uint32_t index = 0; uint32_t err_code; SER_ASSERT_NOT_NULL(p_buf); SER_ASSERT_NOT_NULL(p_opt_id); SER_ASSERT_NOT_NULL(pp_opt); SER_ASSERT_NOT_NULL(*pp_opt); SER_ASSERT_LENGTH_EQ(SER_CMD_HEADER_SIZE + 4 + 1, packet_len); SER_ASSERT(p_buf[index] == SD_BLE_OPT_GET, NRF_ERROR_INVALID_PARAM); index++; err_code = uint32_t_dec(p_buf, packet_len, &index, p_opt_id); SER_ASSERT(err_code == NRF_SUCCESS, err_code); SER_ASSERT(((*p_opt_id == BLE_GAP_OPT_LOCAL_CONN_LATENCY) || (*p_opt_id == BLE_GAP_OPT_PASSKEY) || (*p_opt_id == BLE_GAP_OPT_PRIVACY)), NRF_ERROR_INVALID_PARAM); if (p_buf[index++] == SER_FIELD_NOT_PRESENT) { *pp_opt = NULL; } SER_ASSERT_LENGTH_EQ(index, packet_len); return NRF_SUCCESS; }
uint32_t temp_get_rsp_dec(uint8_t const * const p_buf, uint32_t packet_len, uint32_t * const p_result_code, int32_t * const p_temp) { SER_ASSERT_NOT_NULL(p_buf); SER_ASSERT_NOT_NULL(p_result_code); SER_ASSERT_NOT_NULL(p_temp); uint32_t index = 0; uint32_t err_code = NRF_SUCCESS; err_code = ser_ble_cmd_rsp_result_code_dec(p_buf, &index, packet_len, SD_TEMP_GET, p_result_code); SER_ASSERT(err_code == NRF_SUCCESS, err_code); if (*p_result_code != NRF_SUCCESS) { return NRF_SUCCESS; } err_code = uint32_t_dec(p_buf, packet_len, &index, p_temp); SER_ASSERT(err_code == NRF_SUCCESS, err_code); SER_ASSERT_LENGTH_EQ(index, packet_len); return err_code; }
uint32_t ANT_ENABLE_dec(uint8_t const * const p_buf, uint32_t buf_len, uint32_t * const p_index, void * const p_void_enable_params) { SER_ASSERT_NOT_NULL(p_buf); SER_ASSERT_NOT_NULL(p_index); SER_ASSERT_NOT_NULL(p_void_enable_params); ANT_ENABLE * p_enable_params = (ANT_ENABLE *)p_void_enable_params; uint32_t err_code = NRF_SUCCESS; err_code = uint8_t_dec(p_buf, buf_len, p_index, &p_enable_params->ucTotalNumberOfChannels); SER_ASSERT(err_code == NRF_SUCCESS, err_code); err_code = uint8_t_dec(p_buf, buf_len, p_index, &p_enable_params->ucNumberOfEncryptedChannels); SER_ASSERT(err_code == NRF_SUCCESS, err_code); err_code = uint16_t_dec(p_buf, buf_len, p_index, &p_enable_params->usNumberOfEvents); SER_ASSERT(err_code == NRF_SUCCESS, err_code); err_code = uint32_t_dec(p_buf, buf_len, p_index, &p_enable_params->pucMemoryBlockStartLocation); SER_ASSERT(err_code == NRF_SUCCESS, err_code); err_code = uint16_t_dec(p_buf, buf_len, p_index, &p_enable_params->usMemoryBlockByteSize); SER_ASSERT(err_code == NRF_SUCCESS, err_code); return err_code; }
uint32_t ble_opt_get_rsp_dec(uint8_t const * const p_buf, uint32_t packet_len, uint32_t * const p_opt_id, ble_opt_t * const p_opt, uint32_t * const p_result_code) { uint32_t index = 0; SER_ASSERT_NOT_NULL(p_buf); SER_ASSERT_NOT_NULL(p_opt_id); SER_ASSERT_NOT_NULL(p_opt); SER_ASSERT_NOT_NULL(p_result_code); uint32_t err_code = ser_ble_cmd_rsp_result_code_dec(p_buf, &index, packet_len, SD_BLE_OPT_GET, p_result_code); if (err_code != NRF_SUCCESS) { return err_code; } if (*p_result_code != NRF_SUCCESS) { SER_ASSERT_LENGTH_EQ(index, packet_len); return NRF_SUCCESS; } (void) uint32_t_dec(p_buf, packet_len, &index, p_opt_id); SER_ASSERT(((*p_opt_id == BLE_GAP_OPT_LOCAL_CONN_LATENCY) || (*p_opt_id == BLE_GAP_OPT_PASSKEY) || (*p_opt_id == BLE_GAP_OPT_PRIVACY)), NRF_ERROR_INVALID_PARAM); switch (*p_opt_id) { case BLE_GAP_OPT_LOCAL_CONN_LATENCY: err_code = ble_gap_opt_local_conn_latency_t_dec( p_buf, packet_len, &index, (void *)&(p_opt->gap.local_conn_latency)); break; case BLE_GAP_OPT_PASSKEY: err_code = ble_gap_opt_passkey_t_dec( p_buf, packet_len, &index, (void *)&(p_opt->gap.passkey) ); break; case BLE_GAP_OPT_PRIVACY: err_code = ble_gap_opt_privacy_t_dec( p_buf, packet_len, &index, (void *)&(p_opt->gap.privacy) ); break; } if (err_code != NRF_SUCCESS) { return err_code; } SER_ASSERT_LENGTH_EQ(index, packet_len); return err_code; }
uint32_t ble_opt_set_req_dec(uint8_t const * const p_buf, uint16_t packet_len, uint32_t * const p_opt_id, ble_opt_t **const pp_opt ) { uint32_t index = 0; uint32_t err_code; SER_ASSERT_NOT_NULL(p_buf); SER_ASSERT_NOT_NULL(p_opt_id); SER_ASSERT_NOT_NULL(pp_opt); SER_ASSERT_NOT_NULL(*pp_opt); SER_ASSERT_LENGTH_LEQ(SER_CMD_HEADER_SIZE + 4 + 1, packet_len); SER_ASSERT(p_buf[index] == SD_BLE_OPT_SET, NRF_ERROR_INVALID_PARAM); index++; err_code = uint32_t_dec(p_buf, packet_len, &index, p_opt_id); SER_ASSERT(err_code == NRF_SUCCESS, err_code); SER_ASSERT(((*p_opt_id == BLE_GAP_OPT_LOCAL_CONN_LATENCY) || (*p_opt_id == BLE_GAP_OPT_PASSKEY) || (*p_opt_id == BLE_GAP_OPT_PRIVACY)), NRF_ERROR_INVALID_PARAM); if (p_buf[index++] == SER_FIELD_NOT_PRESENT) { *pp_opt = NULL; } else { switch(*p_opt_id) { case BLE_GAP_OPT_LOCAL_CONN_LATENCY: err_code = ble_gap_opt_local_conn_latency_t_dec(p_buf, packet_len, &index, &((*pp_opt)->gap.local_conn_latency)); break; case BLE_GAP_OPT_PASSKEY: err_code = ble_gap_opt_passkey_t_dec(p_buf, packet_len, &index, &((*pp_opt)->gap.passkey)); break; case BLE_GAP_OPT_PRIVACY: err_code = ble_gap_opt_privacy_t_dec(p_buf, packet_len, &index, &((*pp_opt)->gap.privacy)); break; } } SER_ASSERT_LENGTH_EQ(index, packet_len); return err_code; }
uint32_t ble_enable_params_t_dec(uint8_t const * const p_buf, uint32_t buf_len, uint32_t * const p_index, void * const p_data) { uint32_t err_code = NRF_SUCCESS; ble_enable_params_t * p_enable_params = (ble_enable_params_t *) p_data; SER_ASSERT_LENGTH_LEQ(1, buf_len - *p_index); p_enable_params->gatts_enable_params.service_changed = p_buf[(*p_index)++]; err_code = uint32_t_dec(p_buf, buf_len, p_index, &(p_enable_params->gatts_enable_params.attr_tab_size)); SER_ASSERT(err_code == NRF_SUCCESS, err_code); return NRF_SUCCESS; }
uint32_t ble_gatts_enable_params_t_dec(uint8_t const * const p_buf, uint32_t buf_len, uint32_t * const p_index, void * const p_void_struct) { ble_gatts_enable_params_t * p_enable_params = (ble_gatts_enable_params_t *)p_void_struct; uint32_t err_code = NRF_SUCCESS; uint8_t temp8 = 0; err_code = uint8_t_dec(p_buf, buf_len, p_index, (void *) &temp8); SER_ASSERT(err_code == NRF_SUCCESS, err_code); p_enable_params->service_changed = temp8 & 0x01; err_code = uint32_t_dec(p_buf, buf_len, p_index, (void *) &(p_enable_params->attr_tab_size)); SER_ASSERT(err_code == NRF_SUCCESS, err_code); return err_code; }
uint32_t ble_opt_set_req_dec(uint8_t const * const p_buf, uint16_t packet_len, uint32_t * const p_opt_id, ble_opt_t **const pp_opt ) { uint32_t index = 0; uint32_t err_code; SER_ASSERT_NOT_NULL(p_buf); SER_ASSERT_NOT_NULL(p_opt_id); SER_ASSERT_NOT_NULL(pp_opt); SER_ASSERT_NOT_NULL(*pp_opt); SER_ASSERT_LENGTH_LEQ(SER_CMD_HEADER_SIZE + 4 + 1, packet_len); SER_ASSERT(p_buf[index] == SD_BLE_OPT_SET, NRF_ERROR_INVALID_PARAM); index++; err_code = uint32_t_dec(p_buf, packet_len, &index, p_opt_id); SER_ASSERT(err_code == NRF_SUCCESS, err_code); SER_ASSERT(((*p_opt_id == BLE_COMMON_OPT_CONN_BW) || (*p_opt_id == BLE_GAP_OPT_CH_MAP) || (*p_opt_id == BLE_GAP_OPT_LOCAL_CONN_LATENCY) || (*p_opt_id == BLE_GAP_OPT_PASSKEY) || (*p_opt_id == BLE_GAP_OPT_PRIVACY) || (*p_opt_id == BLE_GAP_OPT_SCAN_REQ_REPORT) || (*p_opt_id == BLE_GAP_OPT_COMPAT_MODE)), NRF_ERROR_INVALID_PARAM); if (p_buf[index++] == SER_FIELD_NOT_PRESENT) { *pp_opt = NULL; } else { switch(*p_opt_id) { case BLE_COMMON_OPT_CONN_BW: err_code = ble_common_opt_conn_bw_t_dec(p_buf, packet_len, &index, &((*pp_opt)->common_opt.conn_bw)); SER_ASSERT(err_code == NRF_SUCCESS, err_code); break; case BLE_GAP_OPT_CH_MAP: err_code = ble_gap_opt_ch_map_t_dec(p_buf, packet_len, &index, &((*pp_opt)->gap_opt.ch_map)); SER_ASSERT(err_code == NRF_SUCCESS, err_code); break; case BLE_GAP_OPT_LOCAL_CONN_LATENCY: err_code = ble_gap_opt_local_conn_latency_t_dec(p_buf, packet_len, &index, &((*pp_opt)->gap_opt.local_conn_latency)); SER_ASSERT(err_code == NRF_SUCCESS, err_code); break; case BLE_GAP_OPT_PASSKEY: err_code = ble_gap_opt_passkey_t_dec(p_buf, packet_len, &index, &((*pp_opt)->gap_opt.passkey)); SER_ASSERT(err_code == NRF_SUCCESS, err_code); break; case BLE_GAP_OPT_PRIVACY: err_code = ble_gap_opt_privacy_t_dec(p_buf, packet_len, &index, &((*pp_opt)->gap_opt.privacy)); SER_ASSERT(err_code == NRF_SUCCESS, err_code); break; case BLE_GAP_OPT_SCAN_REQ_REPORT: err_code = ble_gap_opt_scan_req_report_t_dec(p_buf, packet_len, &index, &((*pp_opt)->gap_opt.scan_req_report)); SER_ASSERT(err_code == NRF_SUCCESS, err_code); break; case BLE_GAP_OPT_COMPAT_MODE: err_code = ble_gap_opt_compat_mode_t_dec(p_buf, packet_len, &index, &((*pp_opt)->gap_opt.compat_mode)); SER_ASSERT(err_code == NRF_SUCCESS, err_code); break; } } SER_ASSERT_LENGTH_EQ(index, packet_len); return err_code; }
uint32_t ble_opt_get_rsp_dec(uint8_t const * const p_buf, uint32_t packet_len, uint32_t * const p_opt_id, ble_opt_t * const p_opt, uint32_t * const p_result_code) { uint32_t index = 0; SER_ASSERT_NOT_NULL(p_buf); SER_ASSERT_NOT_NULL(p_opt_id); SER_ASSERT_NOT_NULL(p_opt); SER_ASSERT_NOT_NULL(p_result_code); uint32_t err_code = ser_ble_cmd_rsp_result_code_dec(p_buf, &index, packet_len, SD_BLE_OPT_GET, p_result_code); if (err_code != NRF_SUCCESS) { return err_code; } if (*p_result_code != NRF_SUCCESS) { SER_ASSERT_LENGTH_EQ(index, packet_len); return NRF_SUCCESS; } (void) uint32_t_dec(p_buf, packet_len, &index, p_opt_id); SER_ASSERT(((*p_opt_id == BLE_COMMON_OPT_RADIO_CPU_MUTEX) || (*p_opt_id == BLE_GAP_OPT_CH_MAP) || (*p_opt_id == BLE_GAP_OPT_LOCAL_CONN_LATENCY) || (*p_opt_id == BLE_GAP_OPT_PASSKEY) || (*p_opt_id == BLE_GAP_OPT_PRIVACY) || (*p_opt_id == BLE_GAP_OPT_SCAN_REQ_REPORT) || (*p_opt_id == BLE_GAP_OPT_COMPAT_MODE)), NRF_ERROR_INVALID_PARAM); switch (*p_opt_id) { case BLE_COMMON_OPT_RADIO_CPU_MUTEX: err_code = ble_common_opt_radio_cpu_mutex_t_dec( p_buf, packet_len, &index, (void *)&(p_opt->common_opt.radio_cpu_mutex)); break; case BLE_GAP_OPT_CH_MAP: err_code = ble_gap_opt_ch_map_t_dec( p_buf, packet_len, &index, (void *)&(p_opt->gap_opt.ch_map)); break; case BLE_GAP_OPT_LOCAL_CONN_LATENCY: err_code = ble_gap_opt_local_conn_latency_t_dec( p_buf, packet_len, &index, (void *)&(p_opt->gap_opt.local_conn_latency)); break; case BLE_GAP_OPT_PASSKEY: err_code = ble_gap_opt_passkey_t_dec( p_buf, packet_len, &index, (void *)&(p_opt->gap_opt.passkey)); break; case BLE_GAP_OPT_PRIVACY: err_code = ble_gap_opt_privacy_t_dec( p_buf, packet_len, &index, (void *)&(p_opt->gap_opt.privacy)); break; case BLE_GAP_OPT_SCAN_REQ_REPORT: err_code = ble_gap_opt_scan_req_report_t_dec( p_buf, packet_len, &index, (void *)&(p_opt->gap_opt.scan_req_report)); break; case BLE_GAP_OPT_COMPAT_MODE: err_code = ble_gap_opt_compat_mode_t_dec( p_buf, packet_len, &index, (void *)&(p_opt->gap_opt.compat_mode)); break; } if (err_code != NRF_SUCCESS) { return err_code; } SER_ASSERT_LENGTH_EQ(index, packet_len); return err_code; }