added debugging
Fork of BLE_nRF8001 by
BLE_nRF8001/utility/acilib.cpp@2:7805a5595aab, 2014-11-10 (annotated)
- 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?
User | Revision | Line number | New 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 | } |