added debugging

Fork of BLE_nRF8001 by RedBearLab

Committer:
jn80842
Date:
Mon Nov 10 01:24:23 2014 +0000
Revision:
2:7805a5595aab
Parent:
0:075ea2812998
just added debugging

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RedBearLab 0:075ea2812998 1 /* Copyright (c) 2014, Nordic Semiconductor ASA
RedBearLab 0:075ea2812998 2 *
RedBearLab 0:075ea2812998 3 * Permission is hereby granted, free of charge, to any person obtaining a copy
RedBearLab 0:075ea2812998 4 * of this software and associated documentation files (the "Software"), to deal
RedBearLab 0:075ea2812998 5 * in the Software without restriction, including without limitation the rights
RedBearLab 0:075ea2812998 6 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
RedBearLab 0:075ea2812998 7 * copies of the Software, and to permit persons to whom the Software is
RedBearLab 0:075ea2812998 8 * furnished to do so, subject to the following conditions:
RedBearLab 0:075ea2812998 9 *
RedBearLab 0:075ea2812998 10 * The above copyright notice and this permission notice shall be included in all
RedBearLab 0:075ea2812998 11 * copies or substantial portions of the Software.
RedBearLab 0:075ea2812998 12 *
RedBearLab 0:075ea2812998 13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
RedBearLab 0:075ea2812998 14 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
RedBearLab 0:075ea2812998 15 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
RedBearLab 0:075ea2812998 16 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
RedBearLab 0:075ea2812998 17 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
RedBearLab 0:075ea2812998 18 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
RedBearLab 0:075ea2812998 19 * SOFTWARE.
RedBearLab 0:075ea2812998 20 */
RedBearLab 0:075ea2812998 21
RedBearLab 0:075ea2812998 22 /**
RedBearLab 0:075ea2812998 23 * @file
RedBearLab 0:075ea2812998 24 *
RedBearLab 0:075ea2812998 25 * @ingroup group_acilib
RedBearLab 0:075ea2812998 26 *
RedBearLab 0:075ea2812998 27 * @brief Implementation of the acilib module.
RedBearLab 0:075ea2812998 28 */
RedBearLab 0:075ea2812998 29
RedBearLab 0:075ea2812998 30
RedBearLab 0:075ea2812998 31 #include "hal_platform.h"
RedBearLab 0:075ea2812998 32 #include "aci.h"
RedBearLab 0:075ea2812998 33 #include "aci_cmds.h"
RedBearLab 0:075ea2812998 34 #include "aci_evts.h"
RedBearLab 0:075ea2812998 35 #include "acilib.h"
RedBearLab 0:075ea2812998 36 #include "aci_protocol_defines.h"
RedBearLab 0:075ea2812998 37 #include "acilib_defs.h"
RedBearLab 0:075ea2812998 38 #include "acilib_if.h"
RedBearLab 0:075ea2812998 39 #include "acilib_types.h"
RedBearLab 0:075ea2812998 40
RedBearLab 0:075ea2812998 41
RedBearLab 0:075ea2812998 42 void acil_encode_cmd_set_test_mode(uint8_t *buffer, aci_cmd_params_test_t *p_aci_cmd_params_test)
RedBearLab 0:075ea2812998 43 {
RedBearLab 0:075ea2812998 44 *(buffer + OFFSET_ACI_CMD_T_LEN) = 2;
RedBearLab 0:075ea2812998 45 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_TEST;
RedBearLab 0:075ea2812998 46 *(buffer + OFFSET_ACI_CMD_T_TEST + OFFSET_ACI_CMD_PARAMS_TEST_T_TEST_MODE_CHANGE) = p_aci_cmd_params_test->test_mode_change;
RedBearLab 0:075ea2812998 47 }
RedBearLab 0:075ea2812998 48
RedBearLab 0:075ea2812998 49 void acil_encode_cmd_sleep(uint8_t *buffer)
RedBearLab 0:075ea2812998 50 {
RedBearLab 0:075ea2812998 51 *(buffer + OFFSET_ACI_CMD_T_LEN) = 1;
RedBearLab 0:075ea2812998 52 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_SLEEP;
RedBearLab 0:075ea2812998 53 }
RedBearLab 0:075ea2812998 54
RedBearLab 0:075ea2812998 55 void acil_encode_cmd_get_device_version(uint8_t *buffer)
RedBearLab 0:075ea2812998 56 {
RedBearLab 0:075ea2812998 57 *(buffer + OFFSET_ACI_CMD_T_LEN) = 1;
RedBearLab 0:075ea2812998 58 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_GET_DEVICE_VERSION;
RedBearLab 0:075ea2812998 59 }
RedBearLab 0:075ea2812998 60
RedBearLab 0:075ea2812998 61 void acil_encode_cmd_set_local_data(uint8_t *buffer, aci_cmd_params_set_local_data_t *p_aci_cmd_params_set_local_data, uint8_t data_size)
RedBearLab 0:075ea2812998 62 {
RedBearLab 0:075ea2812998 63 *(buffer + OFFSET_ACI_CMD_T_LEN) = MSG_SET_LOCAL_DATA_BASE_LEN + data_size;
RedBearLab 0:075ea2812998 64 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_SET_LOCAL_DATA;
RedBearLab 0:075ea2812998 65 *(buffer + OFFSET_ACI_CMD_T_SET_LOCAL_DATA + OFFSET_ACI_CMD_PARAMS_SEND_DATA_T_TX_DATA + OFFSET_ACI_TX_DATA_T_PIPE_NUMBER) = p_aci_cmd_params_set_local_data->tx_data.pipe_number;
RedBearLab 0:075ea2812998 66 memcpy(buffer + OFFSET_ACI_CMD_T_SET_LOCAL_DATA + OFFSET_ACI_CMD_PARAMS_SEND_DATA_T_TX_DATA + OFFSET_ACI_TX_DATA_T_ACI_DATA, &(p_aci_cmd_params_set_local_data->tx_data.aci_data[0]), data_size);
RedBearLab 0:075ea2812998 67 }
RedBearLab 0:075ea2812998 68
RedBearLab 0:075ea2812998 69 void acil_encode_cmd_connect(uint8_t *buffer, aci_cmd_params_connect_t *p_aci_cmd_params_connect)
RedBearLab 0:075ea2812998 70 {
RedBearLab 0:075ea2812998 71 *(buffer + OFFSET_ACI_CMD_T_LEN) = MSG_CONNECT_LEN;
RedBearLab 0:075ea2812998 72 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_CONNECT;
RedBearLab 0:075ea2812998 73 *(buffer + OFFSET_ACI_CMD_T_CONNECT + OFFSET_ACI_CMD_PARAMS_CONNECT_T_TIMEOUT_MSB) = (uint8_t)(p_aci_cmd_params_connect->timeout >> 8);
RedBearLab 0:075ea2812998 74 *(buffer + OFFSET_ACI_CMD_T_CONNECT + OFFSET_ACI_CMD_PARAMS_CONNECT_T_TIMEOUT_LSB) = (uint8_t)(p_aci_cmd_params_connect->timeout);
RedBearLab 0:075ea2812998 75 *(buffer + OFFSET_ACI_CMD_T_CONNECT + OFFSET_ACI_CMD_PARAMS_CONNECT_T_ADV_INTERVAL_MSB) = (uint8_t)(p_aci_cmd_params_connect->adv_interval >> 8);
RedBearLab 0:075ea2812998 76 *(buffer + OFFSET_ACI_CMD_T_CONNECT + OFFSET_ACI_CMD_PARAMS_CONNECT_T_ADV_INTERVAL_LSB) = (uint8_t)(p_aci_cmd_params_connect->adv_interval);
RedBearLab 0:075ea2812998 77 }
RedBearLab 0:075ea2812998 78
RedBearLab 0:075ea2812998 79 void acil_encode_cmd_bond(uint8_t *buffer, aci_cmd_params_bond_t *p_aci_cmd_params_bond)
RedBearLab 0:075ea2812998 80 {
RedBearLab 0:075ea2812998 81 *(buffer + OFFSET_ACI_CMD_T_LEN) = MSG_BOND_LEN;
RedBearLab 0:075ea2812998 82 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_BOND;
RedBearLab 0:075ea2812998 83 *(buffer + OFFSET_ACI_CMD_T_BOND + OFFSET_ACI_CMD_PARAMS_BOND_T_TIMEOUT_MSB) = (uint8_t)(p_aci_cmd_params_bond->timeout >> 8);
RedBearLab 0:075ea2812998 84 *(buffer + OFFSET_ACI_CMD_T_BOND + OFFSET_ACI_CMD_PARAMS_BOND_T_TIMEOUT_LSB) = (uint8_t)(p_aci_cmd_params_bond->timeout);
RedBearLab 0:075ea2812998 85 *(buffer + OFFSET_ACI_CMD_T_BOND + OFFSET_ACI_CMD_PARAMS_BOND_T_ADV_INTERVAL_MSB) = (uint8_t)(p_aci_cmd_params_bond->adv_interval >> 8);
RedBearLab 0:075ea2812998 86 *(buffer + OFFSET_ACI_CMD_T_BOND + OFFSET_ACI_CMD_PARAMS_BOND_T_ADV_INTERVAL_LSB) = (uint8_t)(p_aci_cmd_params_bond->adv_interval);
RedBearLab 0:075ea2812998 87 }
RedBearLab 0:075ea2812998 88
RedBearLab 0:075ea2812998 89 void acil_encode_cmd_disconnect(uint8_t *buffer, aci_cmd_params_disconnect_t *p_aci_cmd_params_disconnect)
RedBearLab 0:075ea2812998 90 {
RedBearLab 0:075ea2812998 91 *(buffer + OFFSET_ACI_CMD_T_LEN) = MSG_DISCONNECT_LEN;
RedBearLab 0:075ea2812998 92 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_DISCONNECT;
RedBearLab 0:075ea2812998 93 *(buffer + OFFSET_ACI_CMD_T_DISCONNECT + OFFSET_ACI_CMD_PARAMS_DISCONNECT_T_REASON) = (uint8_t)(p_aci_cmd_params_disconnect->reason);
RedBearLab 0:075ea2812998 94 }
RedBearLab 0:075ea2812998 95
RedBearLab 0:075ea2812998 96 void acil_encode_baseband_reset(uint8_t *buffer)
RedBearLab 0:075ea2812998 97 {
RedBearLab 0:075ea2812998 98 *(buffer + OFFSET_ACI_CMD_T_LEN) = MSG_BASEBAND_RESET_LEN;
RedBearLab 0:075ea2812998 99 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_RADIO_RESET;
RedBearLab 0:075ea2812998 100 }
RedBearLab 0:075ea2812998 101
RedBearLab 0:075ea2812998 102 void acil_encode_direct_connect(uint8_t *buffer)
RedBearLab 0:075ea2812998 103 {
RedBearLab 0:075ea2812998 104 *(buffer + OFFSET_ACI_CMD_T_LEN) = MSG_DIRECT_CONNECT_LEN;
RedBearLab 0:075ea2812998 105 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_CONNECT_DIRECT;
RedBearLab 0:075ea2812998 106 }
RedBearLab 0:075ea2812998 107
RedBearLab 0:075ea2812998 108 void acil_encode_cmd_wakeup(uint8_t *buffer)
RedBearLab 0:075ea2812998 109 {
RedBearLab 0:075ea2812998 110 *(buffer + OFFSET_ACI_CMD_T_LEN) = MSG_WAKEUP_LEN;
RedBearLab 0:075ea2812998 111 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_WAKEUP;
RedBearLab 0:075ea2812998 112 }
RedBearLab 0:075ea2812998 113
RedBearLab 0:075ea2812998 114 void acil_encode_cmd_set_radio_tx_power(uint8_t *buffer, aci_cmd_params_set_tx_power_t *p_aci_cmd_params_set_tx_power)
RedBearLab 0:075ea2812998 115 {
RedBearLab 0:075ea2812998 116 *(buffer + OFFSET_ACI_CMD_T_LEN) = MSG_SET_RADIO_TX_POWER_LEN;
RedBearLab 0:075ea2812998 117 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_SET_TX_POWER;
RedBearLab 0:075ea2812998 118 *(buffer + OFFSET_ACI_CMD_T_SET_TX_POWER + OFFSET_ACI_CMD_PARAMS_SET_TX_POWER_T_DEVICE_POWER) = (uint8_t)p_aci_cmd_params_set_tx_power->device_power;
RedBearLab 0:075ea2812998 119 }
RedBearLab 0:075ea2812998 120
RedBearLab 0:075ea2812998 121 void acil_encode_cmd_get_address(uint8_t *buffer)
RedBearLab 0:075ea2812998 122 {
RedBearLab 0:075ea2812998 123 *(buffer + OFFSET_ACI_CMD_T_LEN) = MSG_GET_DEVICE_ADDR_LEN;
RedBearLab 0:075ea2812998 124 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_GET_DEVICE_ADDRESS;
RedBearLab 0:075ea2812998 125 }
RedBearLab 0:075ea2812998 126
RedBearLab 0:075ea2812998 127 void acil_encode_cmd_send_data(uint8_t *buffer, aci_cmd_params_send_data_t *p_aci_cmd_params_send_data_t, uint8_t data_size)
RedBearLab 0:075ea2812998 128 {
RedBearLab 0:075ea2812998 129 *(buffer + OFFSET_ACI_CMD_T_LEN) = MSG_SEND_DATA_BASE_LEN + data_size;
RedBearLab 0:075ea2812998 130 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_SEND_DATA;
RedBearLab 0:075ea2812998 131 *(buffer + OFFSET_ACI_CMD_T_SEND_DATA + OFFSET_ACI_CMD_PARAMS_SEND_DATA_T_TX_DATA + OFFSET_ACI_TX_DATA_T_PIPE_NUMBER) = p_aci_cmd_params_send_data_t->tx_data.pipe_number;
RedBearLab 0:075ea2812998 132 memcpy((buffer + OFFSET_ACI_CMD_T_SEND_DATA + OFFSET_ACI_CMD_PARAMS_SEND_DATA_T_TX_DATA + OFFSET_ACI_TX_DATA_T_ACI_DATA), &(p_aci_cmd_params_send_data_t->tx_data.aci_data[0]), data_size);
RedBearLab 0:075ea2812998 133 }
RedBearLab 0:075ea2812998 134
RedBearLab 0:075ea2812998 135 void acil_encode_cmd_request_data(uint8_t *buffer, aci_cmd_params_request_data_t *p_aci_cmd_params_request_data)
RedBearLab 0:075ea2812998 136 {
RedBearLab 0:075ea2812998 137 *(buffer + OFFSET_ACI_CMD_T_LEN) = MSG_DATA_REQUEST_LEN;
RedBearLab 0:075ea2812998 138 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_REQUEST_DATA;
RedBearLab 0:075ea2812998 139 *(buffer + OFFSET_ACI_CMD_T_REQUEST_DATA + OFFSET_ACI_CMD_PARAMS_REQUEST_DATA_T_PIPE_NUMBER) = p_aci_cmd_params_request_data->pipe_number;
RedBearLab 0:075ea2812998 140 }
RedBearLab 0:075ea2812998 141
RedBearLab 0:075ea2812998 142 void acil_encode_cmd_open_remote_pipe(uint8_t *buffer, aci_cmd_params_open_remote_pipe_t *p_aci_cmd_params_open_remote_pipe)
RedBearLab 0:075ea2812998 143 {
RedBearLab 0:075ea2812998 144 *(buffer + OFFSET_ACI_CMD_T_LEN) = MSG_OPEN_REMOTE_PIPE_LEN;
RedBearLab 0:075ea2812998 145 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_OPEN_REMOTE_PIPE;
RedBearLab 0:075ea2812998 146 *(buffer + OFFSET_ACI_CMD_T_OPEN_REMOTE_PIPE + OFFSET_ACI_CMD_PARAMS_OPEN_REMOTE_PIPE_T_PIPE_NUMBER) = p_aci_cmd_params_open_remote_pipe->pipe_number;
RedBearLab 0:075ea2812998 147 }
RedBearLab 0:075ea2812998 148
RedBearLab 0:075ea2812998 149 void acil_encode_cmd_close_remote_pipe(uint8_t *buffer, aci_cmd_params_close_remote_pipe_t *p_aci_cmd_params_close_remote_pipe)
RedBearLab 0:075ea2812998 150 {
RedBearLab 0:075ea2812998 151 *(buffer + OFFSET_ACI_CMD_T_LEN) = MSG_CLOSE_REMOTE_PIPE_LEN;
RedBearLab 0:075ea2812998 152 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_CLOSE_REMOTE_PIPE;
RedBearLab 0:075ea2812998 153 *(buffer + OFFSET_ACI_CMD_T_CLOSE_REMOTE_PIPE + OFFSET_ACI_CMD_PARAMS_CLOSE_REMOTE_PIPE_T_PIPE_NUMBER) = p_aci_cmd_params_close_remote_pipe->pipe_number;
RedBearLab 0:075ea2812998 154 }
RedBearLab 0:075ea2812998 155
RedBearLab 0:075ea2812998 156 void acil_encode_cmd_echo_msg(uint8_t *buffer, aci_cmd_params_echo_t *p_cmd_params_echo, uint8_t msg_size)
RedBearLab 0:075ea2812998 157 {
RedBearLab 0:075ea2812998 158 *(buffer + OFFSET_ACI_CMD_T_LEN) = MSG_ECHO_MSG_CMD_BASE_LEN + msg_size;
RedBearLab 0:075ea2812998 159 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_ECHO;
RedBearLab 0:075ea2812998 160 memcpy((buffer + OFFSET_ACI_CMD_T_ECHO + OFFSET_ACI_CMD_PARAMS_ECHO_T_ECHO_DATA), &(p_cmd_params_echo->echo_data[0]), msg_size);
RedBearLab 0:075ea2812998 161 }
RedBearLab 0:075ea2812998 162
RedBearLab 0:075ea2812998 163 void acil_encode_cmd_battery_level(uint8_t *buffer)
RedBearLab 0:075ea2812998 164 {
RedBearLab 0:075ea2812998 165 *(buffer + OFFSET_ACI_CMD_T_LEN) = 1;
RedBearLab 0:075ea2812998 166 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_GET_BATTERY_LEVEL;
RedBearLab 0:075ea2812998 167 }
RedBearLab 0:075ea2812998 168
RedBearLab 0:075ea2812998 169 void acil_encode_cmd_temparature(uint8_t *buffer)
RedBearLab 0:075ea2812998 170 {
RedBearLab 0:075ea2812998 171 *(buffer + OFFSET_ACI_CMD_T_LEN) = 1;
RedBearLab 0:075ea2812998 172 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_GET_TEMPERATURE;
RedBearLab 0:075ea2812998 173 }
RedBearLab 0:075ea2812998 174
RedBearLab 0:075ea2812998 175 void acil_encode_cmd_read_dynamic_data(uint8_t *buffer)
RedBearLab 0:075ea2812998 176 {
RedBearLab 0:075ea2812998 177 *(buffer + OFFSET_ACI_CMD_T_LEN) = 1;
RedBearLab 0:075ea2812998 178 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_READ_DYNAMIC_DATA;
RedBearLab 0:075ea2812998 179 }
RedBearLab 0:075ea2812998 180
RedBearLab 0:075ea2812998 181 void acil_encode_cmd_write_dynamic_data(uint8_t *buffer, uint8_t seq_no, uint8_t* dynamic_data, uint8_t dynamic_data_size)
RedBearLab 0:075ea2812998 182 {
RedBearLab 0:075ea2812998 183 *(buffer + OFFSET_ACI_CMD_T_LEN) = MSG_WRITE_DYNAMIC_DATA_BASE_LEN + dynamic_data_size;
RedBearLab 0:075ea2812998 184 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_WRITE_DYNAMIC_DATA;
RedBearLab 0:075ea2812998 185 *(buffer + OFFSET_ACI_CMD_T_WRITE_DYNAMIC_DATA + OFFSET_ACI_CMD_PARAMS_WRITE_DYNAMIC_DATA_T_SEQ_NO) = seq_no;
RedBearLab 0:075ea2812998 186 memcpy((buffer + OFFSET_ACI_CMD_T_WRITE_DYNAMIC_DATA + OFFSET_ACI_CMD_PARAMS_WRITE_DYNAMIC_DATA_T_DYNAMIC_DATA), dynamic_data, dynamic_data_size);
RedBearLab 0:075ea2812998 187 }
RedBearLab 0:075ea2812998 188
RedBearLab 0:075ea2812998 189 void acil_encode_cmd_change_timing_req(uint8_t *buffer, aci_cmd_params_change_timing_t *p_aci_cmd_params_change_timing)
RedBearLab 0:075ea2812998 190 {
RedBearLab 0:075ea2812998 191 *(buffer + OFFSET_ACI_CMD_T_LEN) = MSG_CHANGE_TIMING_LEN;
RedBearLab 0:075ea2812998 192 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_CHANGE_TIMING;
RedBearLab 0:075ea2812998 193 *(buffer + OFFSET_ACI_CMD_T_CHANGE_TIMING + OFFSET_ACI_CMD_PARAMS_CHANGE_TIMING_T_CONN_PARAMS + OFFSET_ACI_LL_CONN_PARAMS_T_MIN_CONN_INTERVAL_MSB) = (uint8_t)(p_aci_cmd_params_change_timing->conn_params.min_conn_interval >> 8);
RedBearLab 0:075ea2812998 194 *(buffer + OFFSET_ACI_CMD_T_CHANGE_TIMING + OFFSET_ACI_CMD_PARAMS_CHANGE_TIMING_T_CONN_PARAMS + OFFSET_ACI_LL_CONN_PARAMS_T_MIN_CONN_INTERVAL_LSB) = (uint8_t)(p_aci_cmd_params_change_timing->conn_params.min_conn_interval);
RedBearLab 0:075ea2812998 195 *(buffer + OFFSET_ACI_CMD_T_CHANGE_TIMING + OFFSET_ACI_CMD_PARAMS_CHANGE_TIMING_T_CONN_PARAMS + OFFSET_ACI_LL_CONN_PARAMS_T_MAX_CONN_INTERVAL_MSB) = (uint8_t)(p_aci_cmd_params_change_timing->conn_params.max_conn_interval >> 8);
RedBearLab 0:075ea2812998 196 *(buffer + OFFSET_ACI_CMD_T_CHANGE_TIMING + OFFSET_ACI_CMD_PARAMS_CHANGE_TIMING_T_CONN_PARAMS + OFFSET_ACI_LL_CONN_PARAMS_T_MAX_CONN_INTERVAL_LSB) = (uint8_t)(p_aci_cmd_params_change_timing->conn_params.max_conn_interval);
RedBearLab 0:075ea2812998 197 *(buffer + OFFSET_ACI_CMD_T_CHANGE_TIMING + OFFSET_ACI_CMD_PARAMS_CHANGE_TIMING_T_CONN_PARAMS + OFFSET_ACI_LL_CONN_PARAMS_T_SLAVE_LATENCY_MSB ) = (uint8_t)(p_aci_cmd_params_change_timing->conn_params.slave_latency >> 8);
RedBearLab 0:075ea2812998 198 *(buffer + OFFSET_ACI_CMD_T_CHANGE_TIMING + OFFSET_ACI_CMD_PARAMS_CHANGE_TIMING_T_CONN_PARAMS + OFFSET_ACI_LL_CONN_PARAMS_T_SLAVE_LATENCY_LSB ) = (uint8_t)(p_aci_cmd_params_change_timing->conn_params.slave_latency);
RedBearLab 0:075ea2812998 199 *(buffer + OFFSET_ACI_CMD_T_CHANGE_TIMING + OFFSET_ACI_CMD_PARAMS_CHANGE_TIMING_T_CONN_PARAMS + OFFSET_ACI_LL_CONN_PARAMS_T_TIMEOUT_MULT_MSB ) = (uint8_t)(p_aci_cmd_params_change_timing->conn_params.timeout_mult >> 8);
RedBearLab 0:075ea2812998 200 *(buffer + OFFSET_ACI_CMD_T_CHANGE_TIMING + OFFSET_ACI_CMD_PARAMS_CHANGE_TIMING_T_CONN_PARAMS + OFFSET_ACI_LL_CONN_PARAMS_T_TIMEOUT_MULT_LSB ) = (uint8_t)(p_aci_cmd_params_change_timing->conn_params.timeout_mult);
RedBearLab 0:075ea2812998 201 }
RedBearLab 0:075ea2812998 202
RedBearLab 0:075ea2812998 203 void acil_encode_cmd_set_app_latency(uint8_t *buffer, aci_cmd_params_set_app_latency_t *p_aci_cmd_params_set_app_latency)
RedBearLab 0:075ea2812998 204 {
RedBearLab 0:075ea2812998 205 *(buffer + OFFSET_ACI_CMD_T_LEN) = MSG_SET_APP_LATENCY_LEN;
RedBearLab 0:075ea2812998 206 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_SET_APP_LATENCY;
RedBearLab 0:075ea2812998 207 *(buffer + OFFSET_ACI_CMD_T_SET_APP_LATENCY + OFFSET_ACI_CMD_PARAMS_SET_APP_LATENCY_T_MODE) = (uint8_t)( p_aci_cmd_params_set_app_latency->mode);
RedBearLab 0:075ea2812998 208 *(buffer + OFFSET_ACI_CMD_T_SET_APP_LATENCY + OFFSET_ACI_CMD_PARAMS_SET_APP_LATENCY_T_LATENCY_MSB) = (uint8_t)( p_aci_cmd_params_set_app_latency->latency>>8);
RedBearLab 0:075ea2812998 209 *(buffer + OFFSET_ACI_CMD_T_SET_APP_LATENCY + OFFSET_ACI_CMD_PARAMS_SET_APP_LATENCY_T_LATENCY_LSB) = (uint8_t)( p_aci_cmd_params_set_app_latency->latency);
RedBearLab 0:075ea2812998 210 }
RedBearLab 0:075ea2812998 211
RedBearLab 0:075ea2812998 212 void acil_encode_cmd_change_timing_req_GAP_PPCP(uint8_t *buffer)
RedBearLab 0:075ea2812998 213 {
RedBearLab 0:075ea2812998 214 *(buffer + OFFSET_ACI_CMD_T_LEN) = MSG_CHANGE_TIMING_LEN_GAP_PPCP;
RedBearLab 0:075ea2812998 215 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_CHANGE_TIMING;
RedBearLab 0:075ea2812998 216 }
RedBearLab 0:075ea2812998 217
RedBearLab 0:075ea2812998 218
RedBearLab 0:075ea2812998 219 void acil_encode_cmd_setup(uint8_t *buffer, aci_cmd_params_setup_t *p_aci_cmd_params_setup, uint8_t setup_data_size)
RedBearLab 0:075ea2812998 220 {
RedBearLab 0:075ea2812998 221 *(buffer + OFFSET_ACI_CMD_T_LEN) = setup_data_size + MSG_SETUP_CMD_BASE_LEN;
RedBearLab 0:075ea2812998 222 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_SETUP;
RedBearLab 0:075ea2812998 223 memcpy((buffer + OFFSET_ACI_CMD_T_SETUP), &(p_aci_cmd_params_setup->setup_data[0]), setup_data_size);
RedBearLab 0:075ea2812998 224 }
RedBearLab 0:075ea2812998 225
RedBearLab 0:075ea2812998 226 void acil_encode_cmd_dtm_cmd(uint8_t *buffer, aci_cmd_params_dtm_cmd_t *p_aci_cmd_params_dtm_cmd)
RedBearLab 0:075ea2812998 227 {
RedBearLab 0:075ea2812998 228 *(buffer + OFFSET_ACI_CMD_T_LEN) = MSG_DTM_CMD;
RedBearLab 0:075ea2812998 229 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_DTM_CMD;
RedBearLab 0:075ea2812998 230 *(buffer + OFFSET_ACI_CMD_T_DTM_CMD) = p_aci_cmd_params_dtm_cmd->cmd_msb;
RedBearLab 0:075ea2812998 231 *(buffer + OFFSET_ACI_CMD_T_DTM_CMD + 1) = p_aci_cmd_params_dtm_cmd->cmd_lsb;
RedBearLab 0:075ea2812998 232 }
RedBearLab 0:075ea2812998 233
RedBearLab 0:075ea2812998 234 void acil_encode_cmd_send_data_ack(uint8_t *buffer, const uint8_t pipe_number )
RedBearLab 0:075ea2812998 235 {
RedBearLab 0:075ea2812998 236 *(buffer + OFFSET_ACI_CMD_T_LEN) = MSG_ACK_LEN;
RedBearLab 0:075ea2812998 237 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_SEND_DATA_ACK;
RedBearLab 0:075ea2812998 238 *(buffer + OFFSET_ACI_CMD_T_SEND_DATA_ACK + OFFSET_ACI_CMD_PARAMS_SEND_DATA_ACK_T_PIPE_NUMBER) = pipe_number;
RedBearLab 0:075ea2812998 239 }
RedBearLab 0:075ea2812998 240
RedBearLab 0:075ea2812998 241 void acil_encode_cmd_send_data_nack(uint8_t *buffer, const uint8_t pipe_number, const uint8_t err_code )
RedBearLab 0:075ea2812998 242 {
RedBearLab 0:075ea2812998 243 *(buffer + OFFSET_ACI_CMD_T_LEN) = MSG_NACK_LEN;
RedBearLab 0:075ea2812998 244 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_SEND_DATA_NACK;
RedBearLab 0:075ea2812998 245 *(buffer + OFFSET_ACI_CMD_T_SEND_DATA_NACK + OFFSET_ACI_CMD_PARAMS_SEND_DATA_NACK_T_PIPE_NUMBER) = pipe_number;
RedBearLab 0:075ea2812998 246 *(buffer + OFFSET_ACI_CMD_T_SEND_DATA_NACK + OFFSET_ACI_CMD_PARAMS_SEND_DATA_NACK_T_ERROR_CODE) = err_code;
RedBearLab 0:075ea2812998 247 }
RedBearLab 0:075ea2812998 248
RedBearLab 0:075ea2812998 249 void acil_encode_cmd_bond_security_request(uint8_t *buffer)
RedBearLab 0:075ea2812998 250 {
RedBearLab 0:075ea2812998 251 *(buffer + OFFSET_ACI_CMD_T_LEN) = 1;
RedBearLab 0:075ea2812998 252 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_BOND_SECURITY_REQUEST;
RedBearLab 0:075ea2812998 253 }
RedBearLab 0:075ea2812998 254
RedBearLab 0:075ea2812998 255 void acil_encode_cmd_broadcast(uint8_t *buffer, aci_cmd_params_broadcast_t * p_aci_cmd_params_broadcast)
RedBearLab 0:075ea2812998 256 {
RedBearLab 0:075ea2812998 257 *(buffer + OFFSET_ACI_CMD_T_LEN) = MSG_BROADCAST_LEN;
RedBearLab 0:075ea2812998 258 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_BROADCAST;
RedBearLab 0:075ea2812998 259 *(buffer + OFFSET_ACI_CMD_T_BROADCAST + OFFSET_ACI_CMD_PARAMS_BROADCAST_T_TIMEOUT_LSB) = (p_aci_cmd_params_broadcast->timeout & 0xff);
RedBearLab 0:075ea2812998 260 *(buffer + OFFSET_ACI_CMD_T_BROADCAST + OFFSET_ACI_CMD_PARAMS_BROADCAST_T_TIMEOUT_MSB) = (uint8_t)(p_aci_cmd_params_broadcast->timeout >> 8);
RedBearLab 0:075ea2812998 261 *(buffer + OFFSET_ACI_CMD_T_BROADCAST + OFFSET_ACI_CMD_PARAMS_BROADCAST_T_ADV_INTERVAL_LSB) = (p_aci_cmd_params_broadcast->adv_interval & 0xff);
RedBearLab 0:075ea2812998 262 *(buffer + OFFSET_ACI_CMD_T_BROADCAST + OFFSET_ACI_CMD_PARAMS_BROADCAST_T_ADV_INTERVAL_MSB) = (uint8_t)(p_aci_cmd_params_broadcast->adv_interval >> 8);
RedBearLab 0:075ea2812998 263 }
RedBearLab 0:075ea2812998 264
RedBearLab 0:075ea2812998 265 void acil_encode_cmd_open_adv_pipes(uint8_t *buffer, aci_cmd_params_open_adv_pipe_t * p_aci_cmd_params_open_adv_pipe)
RedBearLab 0:075ea2812998 266 {
RedBearLab 0:075ea2812998 267 *(buffer + OFFSET_ACI_CMD_T_LEN) = MSG_OPEN_ADV_PIPES_LEN;
RedBearLab 0:075ea2812998 268 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_OPEN_ADV_PIPE;
RedBearLab 0:075ea2812998 269 memcpy(buffer + OFFSET_ACI_CMD_T_OPEN_ADV_PIPE + OFFSET_ACI_CMD_PARAMS_OPEN_ADV_PIPE_T_PIPES, p_aci_cmd_params_open_adv_pipe->pipes, 8);
RedBearLab 0:075ea2812998 270 }
RedBearLab 0:075ea2812998 271
RedBearLab 0:075ea2812998 272
RedBearLab 0:075ea2812998 273 void acil_encode_cmd_set_key(uint8_t *buffer, aci_cmd_params_set_key_t *p_aci_cmd_params_set_key)
RedBearLab 0:075ea2812998 274 {
RedBearLab 0:075ea2812998 275 /*
RedBearLab 0:075ea2812998 276 The length of the key is computed based on the type of key transaction.
RedBearLab 0:075ea2812998 277 - Key Reject
RedBearLab 0:075ea2812998 278 - Key type is passkey
RedBearLab 0:075ea2812998 279 */
RedBearLab 0:075ea2812998 280 uint8_t len;
RedBearLab 0:075ea2812998 281
RedBearLab 0:075ea2812998 282 switch (p_aci_cmd_params_set_key->key_type)
RedBearLab 0:075ea2812998 283 {
RedBearLab 0:075ea2812998 284 case ACI_KEY_TYPE_INVALID:
RedBearLab 0:075ea2812998 285 len = MSG_SET_KEY_REJECT_LEN;
RedBearLab 0:075ea2812998 286 break;
RedBearLab 0:075ea2812998 287 case ACI_KEY_TYPE_PASSKEY:
RedBearLab 0:075ea2812998 288 len = MSG_SET_KEY_PASSKEY_LEN;
RedBearLab 0:075ea2812998 289 break;
RedBearLab 0:075ea2812998 290 default:
RedBearLab 0:075ea2812998 291 len=0;
RedBearLab 0:075ea2812998 292 break;
RedBearLab 0:075ea2812998 293 }
RedBearLab 0:075ea2812998 294 *(buffer + OFFSET_ACI_CMD_T_LEN) = len;
RedBearLab 0:075ea2812998 295 *(buffer + OFFSET_ACI_CMD_T_CMD_OPCODE) = ACI_CMD_SET_KEY;
RedBearLab 0:075ea2812998 296 *(buffer + OFFSET_ACI_CMD_T_SET_KEY + OFFSET_ACI_CMD_PARAMS_SET_KEY_T_KEY_TYPE) = p_aci_cmd_params_set_key->key_type;
RedBearLab 0:075ea2812998 297 memcpy((buffer + OFFSET_ACI_CMD_T_SET_KEY + OFFSET_ACI_CMD_PARAMS_SET_KEY_T_PASSKEY), (uint8_t * )&(p_aci_cmd_params_set_key->key), len-2);//Reducing 2 for the opcode byte and type
RedBearLab 0:075ea2812998 298 }
RedBearLab 0:075ea2812998 299
RedBearLab 0:075ea2812998 300 bool acil_encode_cmd(uint8_t *buffer, aci_cmd_t *p_aci_cmd)
RedBearLab 0:075ea2812998 301 {
RedBearLab 0:075ea2812998 302 bool ret_val = false;
RedBearLab 0:075ea2812998 303
RedBearLab 0:075ea2812998 304 switch(p_aci_cmd->cmd_opcode)
RedBearLab 0:075ea2812998 305 {
RedBearLab 0:075ea2812998 306 case ACI_CMD_TEST:
RedBearLab 0:075ea2812998 307 acil_encode_cmd_set_test_mode(buffer, &(p_aci_cmd->params.test));
RedBearLab 0:075ea2812998 308 break;
RedBearLab 0:075ea2812998 309 case ACI_CMD_SLEEP:
RedBearLab 0:075ea2812998 310 acil_encode_cmd_sleep(buffer);
RedBearLab 0:075ea2812998 311 break;
RedBearLab 0:075ea2812998 312 case ACI_CMD_GET_DEVICE_VERSION:
RedBearLab 0:075ea2812998 313 acil_encode_cmd_get_device_version(buffer);
RedBearLab 0:075ea2812998 314 break;
RedBearLab 0:075ea2812998 315 case ACI_CMD_WAKEUP:
RedBearLab 0:075ea2812998 316 acil_encode_cmd_wakeup(buffer);
RedBearLab 0:075ea2812998 317 break;
RedBearLab 0:075ea2812998 318 case ACI_CMD_ECHO:
RedBearLab 0:075ea2812998 319 acil_encode_cmd_echo_msg(buffer, &(p_aci_cmd->params.echo), (p_aci_cmd->len - MSG_ECHO_MSG_CMD_BASE_LEN));
RedBearLab 0:075ea2812998 320 break;
RedBearLab 0:075ea2812998 321 case ACI_CMD_GET_BATTERY_LEVEL:
RedBearLab 0:075ea2812998 322 acil_encode_cmd_battery_level(buffer);
RedBearLab 0:075ea2812998 323 break;
RedBearLab 0:075ea2812998 324 case ACI_CMD_GET_TEMPERATURE:
RedBearLab 0:075ea2812998 325 acil_encode_cmd_temparature(buffer);
RedBearLab 0:075ea2812998 326 break;
RedBearLab 0:075ea2812998 327 case ACI_CMD_GET_DEVICE_ADDRESS:
RedBearLab 0:075ea2812998 328 acil_encode_cmd_get_address(buffer);
RedBearLab 0:075ea2812998 329 break;
RedBearLab 0:075ea2812998 330 case ACI_CMD_SET_TX_POWER:
RedBearLab 0:075ea2812998 331 acil_encode_cmd_set_radio_tx_power(buffer, &(p_aci_cmd->params.set_tx_power));
RedBearLab 0:075ea2812998 332 break;
RedBearLab 0:075ea2812998 333 case ACI_CMD_CONNECT:
RedBearLab 0:075ea2812998 334 acil_encode_cmd_connect(buffer, &(p_aci_cmd->params.connect));
RedBearLab 0:075ea2812998 335 break;
RedBearLab 0:075ea2812998 336 case ACI_CMD_BOND:
RedBearLab 0:075ea2812998 337 acil_encode_cmd_bond(buffer, &(p_aci_cmd->params.bond));
RedBearLab 0:075ea2812998 338 break;
RedBearLab 0:075ea2812998 339 case ACI_CMD_DISCONNECT:
RedBearLab 0:075ea2812998 340 acil_encode_cmd_disconnect(buffer, &(p_aci_cmd->params.disconnect));
RedBearLab 0:075ea2812998 341 break;
RedBearLab 0:075ea2812998 342 case ACI_CMD_RADIO_RESET:
RedBearLab 0:075ea2812998 343 acil_encode_baseband_reset(buffer);
RedBearLab 0:075ea2812998 344 break;
RedBearLab 0:075ea2812998 345 case ACI_CMD_CHANGE_TIMING:
RedBearLab 0:075ea2812998 346 acil_encode_cmd_change_timing_req(buffer, &(p_aci_cmd->params.change_timing));
RedBearLab 0:075ea2812998 347 break;
RedBearLab 0:075ea2812998 348 case ACI_CMD_SETUP:
RedBearLab 0:075ea2812998 349 acil_encode_cmd_setup(buffer, &(p_aci_cmd->params.setup), (p_aci_cmd->len - MSG_SETUP_CMD_BASE_LEN));
RedBearLab 0:075ea2812998 350 break;
RedBearLab 0:075ea2812998 351 case ACI_CMD_DTM_CMD:
RedBearLab 0:075ea2812998 352 acil_encode_cmd_dtm_cmd(buffer, &(p_aci_cmd->params.dtm_cmd));
RedBearLab 0:075ea2812998 353 break;
RedBearLab 0:075ea2812998 354 case ACI_CMD_READ_DYNAMIC_DATA:
RedBearLab 0:075ea2812998 355 acil_encode_cmd_read_dynamic_data(buffer);
RedBearLab 0:075ea2812998 356 break;
RedBearLab 0:075ea2812998 357 case ACI_CMD_WRITE_DYNAMIC_DATA:
RedBearLab 0:075ea2812998 358 acil_encode_cmd_write_dynamic_data(buffer, p_aci_cmd->params.write_dynamic_data.seq_no, &(p_aci_cmd->params.write_dynamic_data.dynamic_data[0]), (p_aci_cmd->len - MSG_WRITE_DYNAMIC_DATA_BASE_LEN));
RedBearLab 0:075ea2812998 359 break;
RedBearLab 0:075ea2812998 360 case ACI_CMD_OPEN_REMOTE_PIPE:
RedBearLab 0:075ea2812998 361 acil_encode_cmd_open_remote_pipe(buffer, &(p_aci_cmd->params.open_remote_pipe));
RedBearLab 0:075ea2812998 362 break;
RedBearLab 0:075ea2812998 363 case ACI_CMD_SEND_DATA:
RedBearLab 0:075ea2812998 364 acil_encode_cmd_send_data(buffer, &(p_aci_cmd->params.send_data), (p_aci_cmd->len - MSG_SEND_DATA_BASE_LEN));
RedBearLab 0:075ea2812998 365 break;
RedBearLab 0:075ea2812998 366 case ACI_CMD_SEND_DATA_ACK:
RedBearLab 0:075ea2812998 367 acil_encode_cmd_send_data_ack(buffer, p_aci_cmd->params.send_data_ack.pipe_number );
RedBearLab 0:075ea2812998 368 break;
RedBearLab 0:075ea2812998 369 case ACI_CMD_REQUEST_DATA:
RedBearLab 0:075ea2812998 370 acil_encode_cmd_request_data(buffer, &(p_aci_cmd->params.request_data));
RedBearLab 0:075ea2812998 371 break;
RedBearLab 0:075ea2812998 372 case ACI_CMD_SET_LOCAL_DATA:
RedBearLab 0:075ea2812998 373 acil_encode_cmd_set_local_data(buffer, (aci_cmd_params_set_local_data_t *)(&(p_aci_cmd->params.send_data)), (p_aci_cmd->len - MSG_SET_LOCAL_DATA_BASE_LEN));
RedBearLab 0:075ea2812998 374 break;
RedBearLab 0:075ea2812998 375 case ACI_CMD_BOND_SECURITY_REQUEST:
RedBearLab 0:075ea2812998 376 acil_encode_cmd_bond_security_request(buffer);
RedBearLab 0:075ea2812998 377 break;
RedBearLab 0:075ea2812998 378 default:
RedBearLab 0:075ea2812998 379 break;
RedBearLab 0:075ea2812998 380 }
RedBearLab 0:075ea2812998 381 return ret_val;
RedBearLab 0:075ea2812998 382 }
RedBearLab 0:075ea2812998 383
RedBearLab 0:075ea2812998 384 void acil_decode_evt_command_response(uint8_t *buffer_in, aci_evt_params_cmd_rsp_t *p_evt_params_cmd_rsp)
RedBearLab 0:075ea2812998 385 {
RedBearLab 0:075ea2812998 386 aci_evt_cmd_rsp_params_get_device_version_t *p_device_version;
RedBearLab 0:075ea2812998 387 aci_evt_cmd_rsp_params_get_device_address_t *p_device_address;
RedBearLab 0:075ea2812998 388 aci_evt_cmd_rsp_params_get_temperature_t *p_temperature;
RedBearLab 0:075ea2812998 389 aci_evt_cmd_rsp_params_get_battery_level_t *p_batt_lvl;
RedBearLab 0:075ea2812998 390 aci_evt_cmd_rsp_read_dynamic_data_t *p_read_dyn_data;
RedBearLab 0:075ea2812998 391 aci_evt_cmd_rsp_params_dtm_cmd_t *p_dtm_evt;
RedBearLab 0:075ea2812998 392
RedBearLab 0:075ea2812998 393 p_evt_params_cmd_rsp->cmd_opcode = (aci_cmd_opcode_t)*(buffer_in + OFFSET_ACI_EVT_T_CMD_RSP + OFFSET_ACI_EVT_PARAMS_CMD_RSP_T_CMD_OPCODE);
RedBearLab 0:075ea2812998 394 p_evt_params_cmd_rsp->cmd_status = (aci_status_code_t)*(buffer_in + OFFSET_ACI_EVT_T_CMD_RSP + OFFSET_ACI_EVT_PARAMS_CMD_RSP_T_CMD_STATUS);
RedBearLab 0:075ea2812998 395
RedBearLab 0:075ea2812998 396 switch (p_evt_params_cmd_rsp->cmd_opcode)
RedBearLab 0:075ea2812998 397 {
RedBearLab 0:075ea2812998 398 case ACI_CMD_GET_DEVICE_VERSION:
RedBearLab 0:075ea2812998 399 p_device_version = &(p_evt_params_cmd_rsp->params.get_device_version);
RedBearLab 0:075ea2812998 400 p_device_version->configuration_id = (uint16_t)*(buffer_in + OFFSET_ACI_EVT_T_CMD_RSP + OFFSET_ACI_EVT_PARAMS_CMD_RSP_T_GET_DEVICE_VERSION + OFFSET_ACI_EVT_CMD_RSP_PARAMS_GET_DEVICE_VERSION_T_CONFIGURATION_ID_LSB);
RedBearLab 0:075ea2812998 401 p_device_version->configuration_id |= (uint16_t)*(buffer_in + OFFSET_ACI_EVT_T_CMD_RSP + OFFSET_ACI_EVT_PARAMS_CMD_RSP_T_GET_DEVICE_VERSION + OFFSET_ACI_EVT_CMD_RSP_PARAMS_GET_DEVICE_VERSION_T_CONFIGURATION_ID_MSB) << 8;
RedBearLab 0:075ea2812998 402 p_device_version->aci_version = *(buffer_in + OFFSET_ACI_EVT_T_CMD_RSP + OFFSET_ACI_EVT_PARAMS_CMD_RSP_T_GET_DEVICE_VERSION + OFFSET_ACI_EVT_CMD_RSP_PARAMS_GET_DEVICE_VERSION_T_ACI_VERSION);
RedBearLab 0:075ea2812998 403 p_device_version->setup_format = *(buffer_in + OFFSET_ACI_EVT_T_CMD_RSP + OFFSET_ACI_EVT_PARAMS_CMD_RSP_T_GET_DEVICE_VERSION + OFFSET_ACI_EVT_CMD_RSP_PARAMS_GET_DEVICE_VERSION_T_SETUP_FORMAT);
RedBearLab 0:075ea2812998 404 p_device_version->setup_id = (uint32_t)*(buffer_in + OFFSET_ACI_EVT_T_CMD_RSP + OFFSET_ACI_EVT_PARAMS_CMD_RSP_T_GET_DEVICE_VERSION + OFFSET_ACI_EVT_CMD_RSP_PARAMS_GET_DEVICE_VERSION_T_SETUP_ID_LSB0);
RedBearLab 0:075ea2812998 405 p_device_version->setup_id |= (uint32_t)*(buffer_in + OFFSET_ACI_EVT_T_CMD_RSP + OFFSET_ACI_EVT_PARAMS_CMD_RSP_T_GET_DEVICE_VERSION + OFFSET_ACI_EVT_CMD_RSP_PARAMS_GET_DEVICE_VERSION_T_SETUP_ID_LSB1) << 8;
RedBearLab 0:075ea2812998 406 p_device_version->setup_id |= (uint32_t)*(buffer_in + OFFSET_ACI_EVT_T_CMD_RSP + OFFSET_ACI_EVT_PARAMS_CMD_RSP_T_GET_DEVICE_VERSION + OFFSET_ACI_EVT_CMD_RSP_PARAMS_GET_DEVICE_VERSION_T_SETUP_ID_MSB0) << 16;
RedBearLab 0:075ea2812998 407 p_device_version->setup_id |= (uint32_t)*(buffer_in + OFFSET_ACI_EVT_T_CMD_RSP + OFFSET_ACI_EVT_PARAMS_CMD_RSP_T_GET_DEVICE_VERSION + OFFSET_ACI_EVT_CMD_RSP_PARAMS_GET_DEVICE_VERSION_T_SETUP_ID_MSB1) << 24;
RedBearLab 0:075ea2812998 408 p_device_version->setup_status = *(buffer_in + OFFSET_ACI_EVT_T_CMD_RSP + OFFSET_ACI_EVT_PARAMS_CMD_RSP_T_GET_DEVICE_VERSION + OFFSET_ACI_EVT_CMD_RSP_PARAMS_GET_DEVICE_VERSION_T_SETUP_STATUS);
RedBearLab 0:075ea2812998 409 break;
RedBearLab 0:075ea2812998 410
RedBearLab 0:075ea2812998 411 case ACI_CMD_GET_DEVICE_ADDRESS:
RedBearLab 0:075ea2812998 412 p_device_address = &(p_evt_params_cmd_rsp->params.get_device_address);
RedBearLab 0:075ea2812998 413 memcpy((uint8_t *)(p_device_address->bd_addr_own), (buffer_in + OFFSET_ACI_EVT_T_CMD_RSP+OFFSET_ACI_EVT_PARAMS_CMD_RSP_T_GET_DEVICE_ADDRESS+OFFSET_ACI_EVT_CMD_RSP_PARAMS_GET_DEVICE_ADDRESS_T_BD_ADDR_OWN), BTLE_DEVICE_ADDRESS_SIZE);
RedBearLab 0:075ea2812998 414 p_device_address->bd_addr_type = (aci_bd_addr_type_t) *(buffer_in + OFFSET_ACI_EVT_T_CMD_RSP+OFFSET_ACI_EVT_PARAMS_CMD_RSP_T_GET_DEVICE_ADDRESS+OFFSET_ACI_EVT_CMD_RSP_PARAMS_GET_DEVICE_ADDRESS_T_BD_ADDR_TYPE);
RedBearLab 0:075ea2812998 415 break;
RedBearLab 0:075ea2812998 416
RedBearLab 0:075ea2812998 417 case ACI_CMD_GET_TEMPERATURE:
RedBearLab 0:075ea2812998 418 p_temperature = &(p_evt_params_cmd_rsp->params.get_temperature);
RedBearLab 0:075ea2812998 419 p_temperature->temperature_value = (int16_t)*(buffer_in + OFFSET_ACI_EVT_T_CMD_RSP + OFFSET_ACI_EVT_PARAMS_CMD_RSP_T_GET_TEMPERATURE + OFFSET_ACI_EVT_CMD_RSP_PARAMS_GET_TEMPERATURE_T_TEMPERATURE_VALUE_LSB);
RedBearLab 0:075ea2812998 420 p_temperature->temperature_value |= (int16_t)*(buffer_in + OFFSET_ACI_EVT_T_CMD_RSP + OFFSET_ACI_EVT_PARAMS_CMD_RSP_T_GET_TEMPERATURE + OFFSET_ACI_EVT_CMD_RSP_PARAMS_GET_TEMPERATURE_T_TEMPERATURE_VALUE_MSB) << 8;
RedBearLab 0:075ea2812998 421 break;
RedBearLab 0:075ea2812998 422
RedBearLab 0:075ea2812998 423 case ACI_CMD_GET_BATTERY_LEVEL:
RedBearLab 0:075ea2812998 424 p_batt_lvl = &(p_evt_params_cmd_rsp->params.get_battery_level);
RedBearLab 0:075ea2812998 425 p_batt_lvl->battery_level = (int16_t)*(buffer_in + OFFSET_ACI_EVT_T_CMD_RSP + OFFSET_ACI_EVT_PARAMS_CMD_RSP_T_GET_BATTERY_LEVEL + OFFSET_ACI_EVT_CMD_RSP_PARAMS_GET_BATTERY_LEVEL_T_BATTERY_LEVEL_LSB);
RedBearLab 0:075ea2812998 426 p_batt_lvl->battery_level |= (int16_t)*(buffer_in + OFFSET_ACI_EVT_T_CMD_RSP + OFFSET_ACI_EVT_PARAMS_CMD_RSP_T_GET_BATTERY_LEVEL + OFFSET_ACI_EVT_CMD_RSP_PARAMS_GET_BATTERY_LEVEL_T_BATTERY_LEVEL_MSB) << 8;
RedBearLab 0:075ea2812998 427 break;
RedBearLab 0:075ea2812998 428
RedBearLab 0:075ea2812998 429 case ACI_CMD_READ_DYNAMIC_DATA:
RedBearLab 0:075ea2812998 430 p_read_dyn_data = &(p_evt_params_cmd_rsp->params.read_dynamic_data);
RedBearLab 0:075ea2812998 431 p_read_dyn_data->seq_no = (uint8_t)*(buffer_in + OFFSET_ACI_EVT_T_CMD_RSP + OFFSET_ACI_EVT_PARAMS_CMD_RSP_T_READ_DYNAMIC_DATA + OFFSET_ACI_EVT_CMD_RSP_READ_DYNAMIC_DATA_T_SEQ_NO);
RedBearLab 0:075ea2812998 432 memcpy((uint8_t *)(p_read_dyn_data->dynamic_data), (buffer_in + OFFSET_ACI_EVT_T_CMD_RSP + OFFSET_ACI_EVT_PARAMS_CMD_RSP_T_READ_DYNAMIC_DATA + OFFSET_ACI_CMD_PARAMS_WRITE_DYNAMIC_DATA_T_DYNAMIC_DATA), ACIL_DECODE_EVT_GET_LENGTH(buffer_in) - 3); // 3 bytes subtracted account for EventCode, CommandOpCode and Status bytes.
RedBearLab 0:075ea2812998 433 // Now that the p_read_dyn_data->dynamic_data will be pointing to memory location with enough space to accommodate upto 27 bytes of dynamic data received. This is because of the padding element in aci_evt_params_cmd_rsp_t
RedBearLab 0:075ea2812998 434 break;
RedBearLab 0:075ea2812998 435
RedBearLab 0:075ea2812998 436 case ACI_CMD_DTM_CMD:
RedBearLab 0:075ea2812998 437 p_dtm_evt = &(p_evt_params_cmd_rsp->params.dtm_cmd);
RedBearLab 0:075ea2812998 438 p_dtm_evt->evt_msb = (uint8_t)*(buffer_in + OFFSET_ACI_EVT_T_CMD_RSP + OFFSET_ACI_EVT_PARAMS_CMD_RSP_T_DTM_CMD + OFFSET_ACI_EVT_CMD_RSP_PARAMS_DTM_CMD_T_EVT_MSB);
RedBearLab 0:075ea2812998 439 p_dtm_evt->evt_lsb = (uint8_t)*(buffer_in + OFFSET_ACI_EVT_T_CMD_RSP + OFFSET_ACI_EVT_PARAMS_CMD_RSP_T_DTM_CMD + OFFSET_ACI_EVT_CMD_RSP_PARAMS_DTM_CMD_T_EVT_LSB);
RedBearLab 0:075ea2812998 440 break;
RedBearLab 0:075ea2812998 441 }
RedBearLab 0:075ea2812998 442 }
RedBearLab 0:075ea2812998 443
RedBearLab 0:075ea2812998 444 void acil_decode_evt_device_started(uint8_t *buffer_in, aci_evt_params_device_started_t *p_evt_params_device_started)
RedBearLab 0:075ea2812998 445 {
RedBearLab 0:075ea2812998 446 p_evt_params_device_started->device_mode = (aci_device_operation_mode_t) *(buffer_in + OFFSET_ACI_EVT_T_DEVICE_STARTED+OFFSET_ACI_EVT_PARAMS_DEVICE_STARTED_T_DEVICE_MODE);
RedBearLab 0:075ea2812998 447 p_evt_params_device_started->hw_error = (aci_hw_error_t) *(buffer_in + OFFSET_ACI_EVT_T_DEVICE_STARTED+OFFSET_ACI_EVT_PARAMS_DEVICE_STARTED_T_HW_ERROR);
RedBearLab 0:075ea2812998 448 p_evt_params_device_started->credit_available = *(buffer_in + OFFSET_ACI_EVT_T_DEVICE_STARTED+OFFSET_ACI_EVT_PARAMS_DEVICE_STARTED_T_CREDIT_AVAILABLE);
RedBearLab 0:075ea2812998 449 }
RedBearLab 0:075ea2812998 450
RedBearLab 0:075ea2812998 451 void acil_decode_evt_pipe_status(uint8_t *buffer_in, aci_evt_params_pipe_status_t *p_aci_evt_params_pipe_status)
RedBearLab 0:075ea2812998 452 {
RedBearLab 0:075ea2812998 453 memcpy((uint8_t *)p_aci_evt_params_pipe_status->pipes_open_bitmap, (buffer_in + OFFSET_ACI_EVT_T_PIPE_STATUS + OFFSET_ACI_EVT_PARAMS_PIPE_STATUS_T_PIPES_OPEN_BITMAP), 8);
RedBearLab 0:075ea2812998 454 memcpy((uint8_t *)p_aci_evt_params_pipe_status->pipes_closed_bitmap, (buffer_in + OFFSET_ACI_EVT_T_PIPE_STATUS + OFFSET_ACI_EVT_PARAMS_PIPE_STATUS_T_PIPES_CLOSED_BITMAP), 8);
RedBearLab 0:075ea2812998 455 }
RedBearLab 0:075ea2812998 456
RedBearLab 0:075ea2812998 457 void acil_decode_evt_disconnected(uint8_t *buffer_in, aci_evt_params_disconnected_t *p_aci_evt_params_disconnected)
RedBearLab 0:075ea2812998 458 {
RedBearLab 0:075ea2812998 459 p_aci_evt_params_disconnected->aci_status = (aci_status_code_t)*(buffer_in + OFFSET_ACI_EVT_T_DISCONNECTED + OFFSET_ACI_EVT_PARAMS_DISCONNECTED_T_ACI_STATUS);
RedBearLab 0:075ea2812998 460 p_aci_evt_params_disconnected->btle_status = *(buffer_in + OFFSET_ACI_EVT_T_DISCONNECTED + OFFSET_ACI_EVT_PARAMS_DISCONNECTED_T_BTLE_STATUS);
RedBearLab 0:075ea2812998 461 }
RedBearLab 0:075ea2812998 462
RedBearLab 0:075ea2812998 463 void acil_decode_evt_bond_status(uint8_t *buffer_in, aci_evt_params_bond_status_t *p_aci_evt_params_bond_status)
RedBearLab 0:075ea2812998 464 {
RedBearLab 0:075ea2812998 465 p_aci_evt_params_bond_status->status_code = (aci_bond_status_code_t)*(buffer_in + OFFSET_ACI_EVT_T_BOND_STATUS + OFFSET_ACI_EVT_PARAMS_BOND_STATUS_T_STATUS_CODE);
RedBearLab 0:075ea2812998 466 p_aci_evt_params_bond_status->status_source = (aci_bond_status_source_t)*(buffer_in + OFFSET_ACI_EVT_T_BOND_STATUS + OFFSET_ACI_EVT_PARAMS_BOND_STATUS_T_STATUS_SOURCE);
RedBearLab 0:075ea2812998 467 p_aci_evt_params_bond_status->secmode1_bitmap = *(buffer_in + OFFSET_ACI_EVT_T_BOND_STATUS + OFFSET_ACI_EVT_PARAMS_BOND_STATUS_T_SECMODE1_BITMAP);
RedBearLab 0:075ea2812998 468 p_aci_evt_params_bond_status->secmode2_bitmap = *(buffer_in + OFFSET_ACI_EVT_T_BOND_STATUS + OFFSET_ACI_EVT_PARAMS_BOND_STATUS_T_SECMODE2_BITMAP);
RedBearLab 0:075ea2812998 469 p_aci_evt_params_bond_status->keys_exchanged_slave = *(buffer_in + OFFSET_ACI_EVT_T_BOND_STATUS + OFFSET_ACI_EVT_PARAMS_BOND_STATUS_T_KEYS_EXCHANGED_SLAVE);
RedBearLab 0:075ea2812998 470 p_aci_evt_params_bond_status->keys_exchanged_master = *(buffer_in + OFFSET_ACI_EVT_T_BOND_STATUS + OFFSET_ACI_EVT_PARAMS_BOND_STATUS_T_KEYS_EXCHANGED_MASTER);
RedBearLab 0:075ea2812998 471 }
RedBearLab 0:075ea2812998 472
RedBearLab 0:075ea2812998 473 uint8_t acil_decode_evt_data_received(uint8_t *buffer_in, aci_evt_params_data_received_t *p_evt_params_data_received)
RedBearLab 0:075ea2812998 474 {
RedBearLab 0:075ea2812998 475 uint8_t size = *( buffer_in + OFFSET_ACI_EVT_T_LEN) - (OFFSET_ACI_EVT_T_DATA_RECEIVED + OFFSET_ACI_RX_DATA_T_ACI_DATA) + 1 ;
RedBearLab 0:075ea2812998 476 p_evt_params_data_received->rx_data.pipe_number = *(buffer_in + OFFSET_ACI_EVT_T_DATA_RECEIVED + OFFSET_ACI_RX_DATA_T_PIPE_NUMBER);
RedBearLab 0:075ea2812998 477 memcpy((uint8_t *)p_evt_params_data_received->rx_data.aci_data, (buffer_in + OFFSET_ACI_EVT_T_DATA_RECEIVED + OFFSET_ACI_RX_DATA_T_ACI_DATA), size);
RedBearLab 0:075ea2812998 478 return size;
RedBearLab 0:075ea2812998 479 }
RedBearLab 0:075ea2812998 480
RedBearLab 0:075ea2812998 481 void acil_decode_evt_data_ack(uint8_t *buffer_in, aci_evt_params_data_ack_t *p_evt_params_data_ack)
RedBearLab 0:075ea2812998 482 {
RedBearLab 0:075ea2812998 483 p_evt_params_data_ack->pipe_number = *(buffer_in + OFFSET_ACI_EVT_T_DATA_ACK + OFFSET_ACI_EVT_PARAMS_DATA_ACK_T_PIPE_NUMBER);
RedBearLab 0:075ea2812998 484 }
RedBearLab 0:075ea2812998 485
RedBearLab 0:075ea2812998 486 uint8_t acil_decode_evt_hw_error(uint8_t *buffer_in, aci_evt_params_hw_error_t *p_aci_evt_params_hw_error)
RedBearLab 0:075ea2812998 487 {
RedBearLab 0:075ea2812998 488 uint8_t size = *(buffer_in + OFFSET_ACI_EVT_T_LEN) - (OFFSET_ACI_EVT_T_HW_ERROR + OFFSET_ACI_EVT_PARAMS_HW_ERROR_T_FILE_NAME) + 1;
RedBearLab 0:075ea2812998 489 p_aci_evt_params_hw_error->line_num = (uint16_t)(*(buffer_in + OFFSET_ACI_EVT_T_HW_ERROR + OFFSET_ACI_EVT_PARAMS_HW_ERROR_T_LINE_NUM_MSB)) << 8;
RedBearLab 0:075ea2812998 490 p_aci_evt_params_hw_error->line_num |= (uint16_t)*(buffer_in + OFFSET_ACI_EVT_T_HW_ERROR + OFFSET_ACI_EVT_PARAMS_HW_ERROR_T_LINE_NUM_LSB);
RedBearLab 0:075ea2812998 491 memcpy((uint8_t *)p_aci_evt_params_hw_error->file_name, (buffer_in + OFFSET_ACI_EVT_T_HW_ERROR + OFFSET_ACI_EVT_PARAMS_HW_ERROR_T_FILE_NAME), size);
RedBearLab 0:075ea2812998 492 return size;
RedBearLab 0:075ea2812998 493 }
RedBearLab 0:075ea2812998 494
RedBearLab 0:075ea2812998 495 void acil_decode_evt_credit(uint8_t *buffer_in, aci_evt_params_data_credit_t *p_evt_params_data_credit)
RedBearLab 0:075ea2812998 496 {
RedBearLab 0:075ea2812998 497 p_evt_params_data_credit->credit = *(buffer_in + OFFSET_ACI_EVT_T_DATA_CREDIT + OFFSET_ACI_EVT_PARAMS_DATA_CREDIT_T_CREDIT);
RedBearLab 0:075ea2812998 498 }
RedBearLab 0:075ea2812998 499
RedBearLab 0:075ea2812998 500 void acil_decode_evt_connected(uint8_t *buffer_in, aci_evt_params_connected_t *p_aci_evt_params_connected)
RedBearLab 0:075ea2812998 501 {
RedBearLab 0:075ea2812998 502 p_aci_evt_params_connected->dev_addr_type = (aci_bd_addr_type_t)*(buffer_in + OFFSET_ACI_EVT_T_CONNECTED + OFFSET_ACI_EVT_PARAMS_CONNECTED_T_DEV_ADDR_TYPE);
RedBearLab 0:075ea2812998 503 memcpy(&(p_aci_evt_params_connected->dev_addr[0]), (buffer_in + OFFSET_ACI_EVT_T_CONNECTED + OFFSET_ACI_EVT_PARAMS_CONNECTED_T_DEV_ADDR), BTLE_DEVICE_ADDRESS_SIZE);
RedBearLab 0:075ea2812998 504 p_aci_evt_params_connected->conn_rf_interval = (uint16_t)*(buffer_in + OFFSET_ACI_EVT_T_CONNECTED + OFFSET_ACI_EVT_PARAMS_CONNECTED_T_CONN_RF_INTERVAL_MSB) << 8;
RedBearLab 0:075ea2812998 505 p_aci_evt_params_connected->conn_rf_interval |= (uint16_t)*(buffer_in + OFFSET_ACI_EVT_T_CONNECTED + OFFSET_ACI_EVT_PARAMS_CONNECTED_T_CONN_RF_INTERVAL_LSB);
RedBearLab 0:075ea2812998 506 p_aci_evt_params_connected->conn_slave_rf_latency = (uint16_t)*(buffer_in + OFFSET_ACI_EVT_T_CONNECTED + OFFSET_ACI_EVT_PARAMS_CONNECTED_T_CONN_SLAVE_RF_LATENCY_MSB) << 8;
RedBearLab 0:075ea2812998 507 p_aci_evt_params_connected->conn_slave_rf_latency |= (uint16_t)*(buffer_in + OFFSET_ACI_EVT_T_CONNECTED + OFFSET_ACI_EVT_PARAMS_CONNECTED_T_CONN_SLAVE_RF_LATENCY_LSB);
RedBearLab 0:075ea2812998 508 p_aci_evt_params_connected->conn_rf_timeout = (uint16_t)*(buffer_in + OFFSET_ACI_EVT_T_CONNECTED + OFFSET_ACI_EVT_PARAMS_CONNECTED_T_CONN_RF_TIMEOUT_MSB) << 8;
RedBearLab 0:075ea2812998 509 p_aci_evt_params_connected->conn_rf_timeout |= (uint16_t)*(buffer_in + OFFSET_ACI_EVT_T_CONNECTED + OFFSET_ACI_EVT_PARAMS_CONNECTED_T_CONN_RF_TIMEOUT_LSB);
RedBearLab 0:075ea2812998 510 p_aci_evt_params_connected->master_clock_accuracy = (aci_clock_accuracy_t)*(buffer_in + OFFSET_ACI_EVT_T_CONNECTED + OFFSET_ACI_EVT_PARAMS_CONNECTED_T_MASTER_CLOCK_ACCURACY);
RedBearLab 0:075ea2812998 511
RedBearLab 0:075ea2812998 512 }
RedBearLab 0:075ea2812998 513
RedBearLab 0:075ea2812998 514 void acil_decode_evt_timing(uint8_t *buffer_in, aci_evt_params_timing_t *p_evt_params_timing)
RedBearLab 0:075ea2812998 515 {
RedBearLab 0:075ea2812998 516 p_evt_params_timing->conn_rf_interval = *(buffer_in + OFFSET_ACI_EVT_T_TIMING + OFFSET_ACI_EVT_PARAMS_TIMING_T_CONN_RF_INTERVAL_MSB) << 8;
RedBearLab 0:075ea2812998 517 p_evt_params_timing->conn_rf_interval |= (uint16_t)*(buffer_in + OFFSET_ACI_EVT_T_TIMING + OFFSET_ACI_EVT_PARAMS_TIMING_T_CONN_RF_INTERVAL_LSB);
RedBearLab 0:075ea2812998 518 p_evt_params_timing->conn_slave_rf_latency = (uint16_t)*(buffer_in + OFFSET_ACI_EVT_T_TIMING + OFFSET_ACI_EVT_PARAMS_TIMING_T_CONN_SLAVE_RF_LATENCY_MSB) << 8;
RedBearLab 0:075ea2812998 519 p_evt_params_timing->conn_slave_rf_latency |= (uint16_t)*(buffer_in + OFFSET_ACI_EVT_T_TIMING + OFFSET_ACI_EVT_PARAMS_TIMING_T_CONN_SLAVE_RF_LATENCY_LSB);
RedBearLab 0:075ea2812998 520 p_evt_params_timing->conn_rf_timeout = (uint16_t)*(buffer_in + OFFSET_ACI_EVT_T_TIMING + OFFSET_ACI_EVT_PARAMS_TIMING_T_CONN_RF_TIMEOUT_MSB) << 8;
RedBearLab 0:075ea2812998 521 p_evt_params_timing->conn_rf_timeout |= *(buffer_in + OFFSET_ACI_EVT_T_TIMING + OFFSET_ACI_EVT_PARAMS_TIMING_T_CONN_RF_TIMEOUT_LSB);
RedBearLab 0:075ea2812998 522 }
RedBearLab 0:075ea2812998 523
RedBearLab 0:075ea2812998 524 void acil_decode_evt_pipe_error(uint8_t *buffer_in, aci_evt_params_pipe_error_t *p_evt_params_pipe_error)
RedBearLab 0:075ea2812998 525 {
RedBearLab 0:075ea2812998 526 //volatile uint8_t size = *(buffer_in + OFFSET_ACI_EVT_T_LEN) - (OFFSET_ACI_EVT_T_PIPE_ERROR + OFFSET_ACI_EVT_PARAMS_PIPE_ERROR_T_ERROR_DATA) + 1;
RedBearLab 0:075ea2812998 527 p_evt_params_pipe_error->pipe_number = *(buffer_in + OFFSET_ACI_EVT_T_PIPE_ERROR + OFFSET_ACI_EVT_PARAMS_PIPE_ERROR_T_PIPE_NUMBER);
RedBearLab 0:075ea2812998 528 p_evt_params_pipe_error->error_code = *(buffer_in + OFFSET_ACI_EVT_T_PIPE_ERROR + OFFSET_ACI_EVT_PARAMS_PIPE_ERROR_T_ERROR_CODE);
RedBearLab 0:075ea2812998 529 p_evt_params_pipe_error->params.error_data.content[0] = *(buffer_in + OFFSET_ACI_EVT_T_PIPE_ERROR + OFFSET_ACI_EVT_PARAMS_PIPE_ERROR_T_ERROR_DATA + OFFSET_ERROR_DATA_T_CONTENT);
RedBearLab 0:075ea2812998 530 }
RedBearLab 0:075ea2812998 531
RedBearLab 0:075ea2812998 532 void acil_decode_evt_key_request(uint8_t *buffer_in, aci_evt_params_key_request_t *p_evt_params_key_request)
RedBearLab 0:075ea2812998 533 {
RedBearLab 0:075ea2812998 534 p_evt_params_key_request->key_type = (aci_key_type_t)*(buffer_in + OFFSET_ACI_EVT_T_KEY_REQUEST + OFFSET_ACI_EVT_PARAMS_KEY_REQUEST_T_KEY_TYPE);
RedBearLab 0:075ea2812998 535 }
RedBearLab 0:075ea2812998 536
RedBearLab 0:075ea2812998 537 uint8_t acil_decode_evt_echo(uint8_t *buffer_in, aci_evt_params_echo_t *aci_evt_params_echo)
RedBearLab 0:075ea2812998 538 {
RedBearLab 0:075ea2812998 539 uint8_t size = *(buffer_in + OFFSET_ACI_EVT_T_LEN) - 1;
RedBearLab 0:075ea2812998 540 memcpy(&aci_evt_params_echo->echo_data[0], (buffer_in + OFFSET_ACI_EVT_T_EVT_OPCODE + 1), size);
RedBearLab 0:075ea2812998 541 return size;
RedBearLab 0:075ea2812998 542 }
RedBearLab 0:075ea2812998 543
RedBearLab 0:075ea2812998 544 void acil_decode_evt_display_passkey(uint8_t *buffer_in, aci_evt_params_display_passkey_t *p_aci_evt_params_display_passkey)
RedBearLab 0:075ea2812998 545 {
RedBearLab 0:075ea2812998 546 p_aci_evt_params_display_passkey->passkey[0] = *(buffer_in + OFFSET_ACI_EVT_T_DISPLAY_PASSKEY + OFFSET_ACI_EVT_PARAMS_DISPLAY_PASSKEY_T_PASSKEY + 0);
RedBearLab 0:075ea2812998 547 p_aci_evt_params_display_passkey->passkey[1] = *(buffer_in + OFFSET_ACI_EVT_T_DISPLAY_PASSKEY + OFFSET_ACI_EVT_PARAMS_DISPLAY_PASSKEY_T_PASSKEY + 1);
RedBearLab 0:075ea2812998 548 p_aci_evt_params_display_passkey->passkey[2] = *(buffer_in + OFFSET_ACI_EVT_T_DISPLAY_PASSKEY + OFFSET_ACI_EVT_PARAMS_DISPLAY_PASSKEY_T_PASSKEY + 2);
RedBearLab 0:075ea2812998 549 p_aci_evt_params_display_passkey->passkey[3] = *(buffer_in + OFFSET_ACI_EVT_T_DISPLAY_PASSKEY + OFFSET_ACI_EVT_PARAMS_DISPLAY_PASSKEY_T_PASSKEY + 3);
RedBearLab 0:075ea2812998 550 p_aci_evt_params_display_passkey->passkey[4] = *(buffer_in + OFFSET_ACI_EVT_T_DISPLAY_PASSKEY + OFFSET_ACI_EVT_PARAMS_DISPLAY_PASSKEY_T_PASSKEY + 4);
RedBearLab 0:075ea2812998 551 p_aci_evt_params_display_passkey->passkey[5] = *(buffer_in + OFFSET_ACI_EVT_T_DISPLAY_PASSKEY + OFFSET_ACI_EVT_PARAMS_DISPLAY_PASSKEY_T_PASSKEY + 5);
RedBearLab 0:075ea2812998 552 }
RedBearLab 0:075ea2812998 553
RedBearLab 0:075ea2812998 554 bool acil_decode_evt(uint8_t *buffer_in, aci_evt_t *p_aci_evt)
RedBearLab 0:075ea2812998 555 {
RedBearLab 0:075ea2812998 556 bool ret_val = true;
RedBearLab 0:075ea2812998 557
RedBearLab 0:075ea2812998 558 p_aci_evt->len = ACIL_DECODE_EVT_GET_LENGTH(buffer_in);
RedBearLab 0:075ea2812998 559 p_aci_evt->evt_opcode = (aci_evt_opcode_t)ACIL_DECODE_EVT_GET_OPCODE(buffer_in);
RedBearLab 0:075ea2812998 560
RedBearLab 0:075ea2812998 561 switch(p_aci_evt->evt_opcode)
RedBearLab 0:075ea2812998 562 {
RedBearLab 0:075ea2812998 563 case ACI_EVT_DEVICE_STARTED:
RedBearLab 0:075ea2812998 564 acil_decode_evt_device_started(buffer_in, &(p_aci_evt->params.device_started));
RedBearLab 0:075ea2812998 565 break;
RedBearLab 0:075ea2812998 566 case ACI_EVT_HW_ERROR:
RedBearLab 0:075ea2812998 567 acil_decode_evt_hw_error(buffer_in, &(p_aci_evt->params.hw_error));
RedBearLab 0:075ea2812998 568 break;
RedBearLab 0:075ea2812998 569 case ACI_EVT_CMD_RSP:
RedBearLab 0:075ea2812998 570 acil_decode_evt_command_response(buffer_in, &(p_aci_evt->params.cmd_rsp));
RedBearLab 0:075ea2812998 571 break;
RedBearLab 0:075ea2812998 572 case ACI_EVT_DATA_CREDIT:
RedBearLab 0:075ea2812998 573 acil_decode_evt_credit(buffer_in, &(p_aci_evt->params.data_credit));
RedBearLab 0:075ea2812998 574 break;
RedBearLab 0:075ea2812998 575 case ACI_EVT_CONNECTED:
RedBearLab 0:075ea2812998 576 acil_decode_evt_connected(buffer_in, &(p_aci_evt->params.connected));
RedBearLab 0:075ea2812998 577 break;
RedBearLab 0:075ea2812998 578 case ACI_EVT_PIPE_STATUS:
RedBearLab 0:075ea2812998 579 acil_decode_evt_pipe_status(buffer_in, &(p_aci_evt->params.pipe_status));
RedBearLab 0:075ea2812998 580 break;
RedBearLab 0:075ea2812998 581 case ACI_EVT_DISCONNECTED:
RedBearLab 0:075ea2812998 582 acil_decode_evt_disconnected(buffer_in, &(p_aci_evt->params.disconnected));
RedBearLab 0:075ea2812998 583 break;
RedBearLab 0:075ea2812998 584 case ACI_EVT_BOND_STATUS:
RedBearLab 0:075ea2812998 585 acil_decode_evt_bond_status(buffer_in, &(p_aci_evt->params.bond_status));
RedBearLab 0:075ea2812998 586 break;
RedBearLab 0:075ea2812998 587 case ACI_EVT_TIMING:
RedBearLab 0:075ea2812998 588 acil_decode_evt_timing(buffer_in, &(p_aci_evt->params.timing));
RedBearLab 0:075ea2812998 589 break;
RedBearLab 0:075ea2812998 590 case ACI_EVT_DATA_ACK:
RedBearLab 0:075ea2812998 591 acil_decode_evt_data_ack(buffer_in, &(p_aci_evt->params.data_ack));
RedBearLab 0:075ea2812998 592 break;
RedBearLab 0:075ea2812998 593 case ACI_EVT_DATA_RECEIVED:
RedBearLab 0:075ea2812998 594 acil_decode_evt_data_received(buffer_in, &(p_aci_evt->params.data_received));
RedBearLab 0:075ea2812998 595 break;
RedBearLab 0:075ea2812998 596 case ACI_EVT_PIPE_ERROR:
RedBearLab 0:075ea2812998 597 acil_decode_evt_pipe_error(buffer_in, &(p_aci_evt->params.pipe_error));
RedBearLab 0:075ea2812998 598 break;
RedBearLab 0:075ea2812998 599 case ACI_EVT_KEY_REQUEST:
RedBearLab 0:075ea2812998 600 acil_decode_evt_key_request(buffer_in, &(p_aci_evt->params.key_request));
RedBearLab 0:075ea2812998 601 break;
RedBearLab 0:075ea2812998 602 case ACI_EVT_DISPLAY_PASSKEY:
RedBearLab 0:075ea2812998 603 acil_decode_evt_display_passkey(buffer_in, &(p_aci_evt->params.display_passkey));
RedBearLab 0:075ea2812998 604 break;
RedBearLab 0:075ea2812998 605 default:
RedBearLab 0:075ea2812998 606 ret_val = false;
RedBearLab 0:075ea2812998 607 break;
RedBearLab 0:075ea2812998 608 }
RedBearLab 0:075ea2812998 609 return ret_val;
RedBearLab 0:075ea2812998 610 }