uint32_t ble_gatts_service_add_rsp_enc(uint32_t return_code, uint8_t * const p_buf, uint32_t * const p_buf_len, uint16_t const * const p_handle) { SER_ASSERT_NOT_NULL(p_buf); SER_ASSERT_NOT_NULL(p_buf_len); uint32_t buf_len = *p_buf_len; uint32_t index = 0; uint32_t err_code; err_code = op_status_enc(SD_BLE_GATTS_SERVICE_ADD, return_code, p_buf, p_buf_len, &index); SER_ASSERT(err_code == NRF_SUCCESS, err_code); if (return_code != NRF_SUCCESS) { return NRF_SUCCESS; //this seems silly but it is not } SER_ASSERT_NOT_NULL(p_handle); err_code = uint16_t_enc(p_handle, p_buf, buf_len, &index); SER_ASSERT(err_code == NRF_SUCCESS, err_code); *p_buf_len = index; //update change made by op_status_enc return err_code; }
uint32_t ant_crypto_channel_enable_rsp_enc(uint32_t return_code, uint8_t * const p_buf, uint32_t * const p_buf_len) { uint32_t index = 0; return op_status_enc(SVC_ANT_CRYPTO_CHANNEL_ENABLE, return_code, p_buf, p_buf_len, &index); }
uint32_t ant_crypto_info_set_rsp_enc(uint32_t return_code, uint8_t * const p_buf, uint32_t * const p_buf_len) { uint32_t index = 0; return op_status_enc(SVC_ANT_CRYPTO_INFO_SET, return_code, p_buf, p_buf_len, &index); }
uint32_t ant_channel_close_rsp_enc(uint32_t return_code, uint8_t * const p_buf, uint32_t * const p_buf_len) { uint32_t index = 0; return op_status_enc(SVC_ANT_CHANNEL_CLOSE, return_code, p_buf, p_buf_len, &index); }
uint32_t ant_channel_open_with_offset_rsp_enc(uint32_t return_code, uint8_t * const p_buf, uint32_t * const p_buf_len) { uint32_t index = 0; return op_status_enc(SVC_ANT_CHANNEL_OPEN, return_code, p_buf, p_buf_len, &index); }
uint32_t ant_channel_low_priority_rx_search_timeout_set_rsp_enc(uint32_t return_code, uint8_t * const p_buf, uint32_t * const p_buf_len) { uint32_t index = 0; return op_status_enc(SVC_ANT_CHANNEL_LOW_PRIO_RX_SEARCH_TIMEOUT_SET, return_code, p_buf, p_buf_len, &index); }
uint32_t ble_gattc_char_values_read_rsp_enc(uint32_t return_code, uint8_t * const p_buf, uint32_t * const p_buf_len) { uint32_t index = 0; return op_status_enc(SD_BLE_GATTC_CHAR_VALUES_READ, return_code, p_buf, p_buf_len, &index); }
uint32_t ble_gap_address_set_rsp_enc(uint32_t return_code, uint8_t * const p_buf, uint32_t * const p_buf_len) { uint32_t index = 0; return op_status_enc(SD_BLE_GAP_ADDRESS_SET, return_code, p_buf, p_buf_len, &index); }
uint32_t ble_enable_rsp_enc(uint32_t return_code, uint8_t * const p_buf, uint32_t * const p_buf_len) { uint32_t index = 0; return op_status_enc(SD_BLE_ENABLE, return_code, p_buf, p_buf_len, &index); }
uint32_t ant_broadcast_message_tx_rsp_enc(uint32_t return_code, uint8_t * const p_buf, uint32_t * const p_buf_len) { uint32_t index = 0; return op_status_enc(SVC_ANT_TX_BROADCAST_MESSAGE, return_code, p_buf, p_buf_len, &index); }
uint32_t op_status_cond_uint16_enc(uint8_t op_code, uint32_t return_code, uint16_t value, uint8_t * const p_buff, uint32_t * const p_buff_len, uint32_t * const p_index) { uint32_t status_code; uint32_t init_buff_len = *p_buff_len; status_code = op_status_enc(op_code, return_code, p_buff, p_buff_len, p_index); SER_ASSERT(status_code == NRF_SUCCESS, status_code); if (return_code == NRF_SUCCESS) //Add 16bit value when return_code is a success { *p_buff_len = init_buff_len; //restore original value - it has been modified by op_status_enc status_code = uint16_t_enc(&value, p_buff, *p_buff_len, p_index); *p_buff_len = *p_index; SER_ASSERT(status_code == NRF_SUCCESS, status_code); } return status_code; }
uint32_t ser_conn_command_process(uint8_t * p_command, uint16_t command_len) { SER_ASSERT_NOT_NULL(p_command); SER_ASSERT_LENGTH_LEQ(SER_OP_CODE_SIZE, command_len); uint32_t err_code = NRF_SUCCESS; uint8_t * p_tx_buf = NULL; uint32_t tx_buf_len = 0; uint8_t opcode = p_command[SER_CMD_OP_CODE_POS]; uint32_t index = 0; /* Allocate a memory buffer from HAL Transport layer for transmitting the Command Response. * Loop until a buffer is available. */ do { err_code = ser_hal_transport_tx_pkt_alloc(&p_tx_buf, (uint16_t *)&tx_buf_len); } while (NRF_ERROR_NO_MEM == err_code); if (NRF_SUCCESS == err_code) { /* Create a new response packet. */ p_tx_buf[SER_PKT_TYPE_POS] = SER_PKT_TYPE_RESP; tx_buf_len -= SER_PKT_TYPE_SIZE; /* Decode a request, pass a memory for a response command (opcode + data) and encode it. */ err_code = conn_mw_handler (p_command, command_len, &p_tx_buf[SER_PKT_OP_CODE_POS], &tx_buf_len); /* Command decoder not found. */ if (NRF_ERROR_NOT_SUPPORTED == err_code) { APP_ERROR_CHECK(SER_WARNING_CODE); err_code = op_status_enc (opcode, NRF_ERROR_NOT_SUPPORTED, &p_tx_buf[SER_PKT_OP_CODE_POS], &tx_buf_len, &index); if (NRF_SUCCESS == err_code) { tx_buf_len += SER_PKT_TYPE_SIZE; err_code = ser_hal_transport_tx_pkt_send(p_tx_buf, (uint16_t)tx_buf_len); /* TX buffer is going to be freed automatically in the HAL Transport layer. */ if (NRF_SUCCESS != err_code) { err_code = NRF_ERROR_INTERNAL; } } else { err_code = NRF_ERROR_INTERNAL; } } else if (NRF_SUCCESS == err_code) /* Send a response. */ { tx_buf_len += SER_PKT_TYPE_SIZE; err_code = ser_hal_transport_tx_pkt_send(p_tx_buf, (uint16_t)tx_buf_len); /* TX buffer is going to be freed automatically in the HAL Transport layer. */ if (NRF_SUCCESS != err_code) { err_code = NRF_ERROR_INTERNAL; } } else { err_code = NRF_ERROR_INTERNAL; } } else { err_code = NRF_ERROR_INTERNAL; } return err_code; }