added debugging
Fork of BLE_nRF8001 by
Diff: BLE_nRF8001/utility/aci_cmds.h
- Revision:
- 0:075ea2812998
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/BLE_nRF8001/utility/aci_cmds.h Fri Oct 17 22:40:32 2014 +0800 @@ -0,0 +1,434 @@ +/* Copyright (c) 2014, Nordic Semiconductor ASA + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/** + * @file + * + * @ingroup aci + * + * @brief Definitions for the ACI (Application Control Interface) commands + * @remarks + * + */ + +#ifndef ACI_CMDS_H__ +#define ACI_CMDS_H__ + +#include "aci.h" + +/** + * @enum aci_cmd_opcode_t + * @brief ACI command opcodes + */ +typedef enum +{ + /** + * Enter test mode + */ + ACI_CMD_TEST = 0x01, + /** + * Echo (loopback) test command + */ + ACI_CMD_ECHO = 0x02, + /** + * Send a BTLE DTM command to the radio + */ + ACI_CMD_DTM_CMD = 0x03, + /** + * Put the device to sleep + */ + ACI_CMD_SLEEP = 0x04, + /** + * Wakeup the device from deep sleep + */ + ACI_CMD_WAKEUP = 0x05, + /** + * Replace the contents of the internal database with + * user provided data + */ + ACI_CMD_SETUP = 0x06, + /** + * Read the portions of memory required to be restored after a power cycle + */ + ACI_CMD_READ_DYNAMIC_DATA = 0x07, + /** + * Write back the data retrieved using ACI_CMD_READ_DYNAMIC_DATA + */ + ACI_CMD_WRITE_DYNAMIC_DATA = 0x08, + /** + * Retrieve the device's version information + */ + ACI_CMD_GET_DEVICE_VERSION = 0x09, + /** + * Request the Bluetooth address and its type + */ + ACI_CMD_GET_DEVICE_ADDRESS = 0x0A, + /** + * Request the battery level measured by nRF8001 + */ + ACI_CMD_GET_BATTERY_LEVEL = 0x0B, + /** + * Request the temperature value measured by nRF8001 + */ + ACI_CMD_GET_TEMPERATURE = 0x0C, + /** + * Write to the local Attribute Database + */ + ACI_CMD_SET_LOCAL_DATA = 0x0D, + /** + * Reset the baseband and radio and go back to idle + */ + ACI_CMD_RADIO_RESET = 0x0E, + /** + * Start advertising and wait for a master connection + */ + ACI_CMD_CONNECT = 0x0F, + /** + * Start advertising and wait for a master connection + */ + ACI_CMD_BOND = 0x10, + /** + * Start advertising and wait for a master connection + */ + ACI_CMD_DISCONNECT = 0x11, + /** + * Throttles the Radio transmit power + */ + ACI_CMD_SET_TX_POWER = 0x12, + /** + * Trigger a connection parameter update + */ + ACI_CMD_CHANGE_TIMING = 0x13, + /** + * Open a remote pipe for data reception + */ + ACI_CMD_OPEN_REMOTE_PIPE = 0x14, + /** + * Transmit data over an open pipe + */ + ACI_CMD_SEND_DATA = 0x15, + /** + * Send an acknowledgment of received data + */ + ACI_CMD_SEND_DATA_ACK = 0x16, + /** + * Request data over an open pipe + */ + ACI_CMD_REQUEST_DATA = 0x17, + /** + * NACK a data reception + */ + ACI_CMD_SEND_DATA_NACK = 0x18, + /** + * Set application latency + */ + ACI_CMD_SET_APP_LATENCY = 0x19, + /** + * Set a security key + */ + ACI_CMD_SET_KEY = 0x1A, + /** + * Open Advertising Pipes + */ + ACI_CMD_OPEN_ADV_PIPE = 0x1B, + /** + * Start non-connectable advertising + */ + ACI_CMD_BROADCAST = 0x1C, + /** + * Start a security request in bonding mode + */ + ACI_CMD_BOND_SECURITY_REQUEST = 0x1D, + /** + * Start Directed advertising towards a Bonded Peer + */ + ACI_CMD_CONNECT_DIRECT = 0x1E, + /** + * Close a previously opened remote pipe + */ + ACI_CMD_CLOSE_REMOTE_PIPE = 0x1F, + /** + * Invalid ACI command opcode + */ + ACI_CMD_INVALID = 0xFF + +} _aci_packed_ aci_cmd_opcode_t; + +ACI_ASSERT_SIZE(aci_cmd_opcode_t, 1); + +/** + * @struct aci_cmd_params_test_t + * @brief Structure for the ACI_CMD_TEST ACI command parameters + */ +typedef struct +{ + aci_test_mode_change_t test_mode_change; /**< enum aci_test_mode_change_t */ +} _aci_packed_ aci_cmd_params_test_t; + +ACI_ASSERT_SIZE(aci_cmd_params_test_t, 1); + +/** + * @struct aci_cmd_params_echo_t + * @brief Structure for the ACI_CMD_ECHO ACI command parameters + */ +typedef struct +{ + uint8_t echo_data[ACI_ECHO_DATA_MAX_LEN]; +} _aci_packed_ aci_cmd_params_echo_t; + +ACI_ASSERT_SIZE(aci_cmd_params_echo_t, ACI_ECHO_DATA_MAX_LEN); + +/** + * @struct aci_cmd_params_dtm_cmd_t + * @brief Structure for the ACI_CMD_DTM_CMD ACI command parameters + */ +typedef struct +{ + uint8_t cmd_msb; + uint8_t cmd_lsb; +} _aci_packed_ aci_cmd_params_dtm_cmd_t; + +/** + * @struct aci_cmd_params_setup_t + * @brief Structure for the ACI_CMD_SETUP ACI command parameters + */ +typedef struct +{ + uint8_t setup_data[1]; +} _aci_packed_ aci_cmd_params_setup_t; + +ACI_ASSERT_SIZE(aci_cmd_params_setup_t, 1); + +/** + * @struct aci_cmd_params_write_dynamic_data_t + * @brief Structure for the ACI_CMD_WRITE_DYNAMIC_DATA ACI command parameters + * @note Dynamic data chunk size in this command is defined to go up to ACI_PACKET_MAX_LEN - 3 + */ +typedef struct +{ + uint8_t seq_no; + uint8_t dynamic_data[1]; +} _aci_packed_ aci_cmd_params_write_dynamic_data_t; + +/** + * @define aci_cmd_params_set_local_data_t + * @brief Structure for the ACI_CMD_SET_LOCAL_DATA ACI command parameters + */ +typedef struct +{ + aci_tx_data_t tx_data; +} _aci_packed_ aci_cmd_params_set_local_data_t; + +/** + * @struct aci_cmd_params_connect_t + * @brief Structure for the ACI_CMD_CONNECT ACI command parameters + */ +typedef struct +{ + uint16_t timeout; /**< 0x0000 (no timeout) to 0x3FFF */ + uint16_t adv_interval; /**< 16 bits of advertising interval for general discovery */ +} _aci_packed_ aci_cmd_params_connect_t; + +ACI_ASSERT_SIZE(aci_cmd_params_connect_t, 4); + +/** + * @define aci_cmd_params_bond_t + * @brief Structure for the ACI_CMD_BOND ACI command parameters + */ +typedef struct +{ + uint16_t timeout; /**< 0x0000 (no timeout) to 0x3FFF */ + uint16_t adv_interval; /**< 16 bits of advertising interval for general discovery */ +} _aci_packed_ aci_cmd_params_bond_t; + +ACI_ASSERT_SIZE(aci_cmd_params_bond_t, 4); + +/** + * @struct aci_cmd_params_disconnect_t + * @brief Structure for the ACI_CMD_DISCONNECT ACI command parameters + */ +typedef struct +{ + aci_disconnect_reason_t reason; /**< enum aci_disconnect_reason_t */ +} _aci_packed_ aci_cmd_params_disconnect_t; + +ACI_ASSERT_SIZE(aci_cmd_params_disconnect_t, 1); + +/** + * @struct aci_cmd_params_set_tx_power_t + * @brief Structure for the ACI_CMD_SET_TX_POWER ACI command parameters + */ +typedef struct +{ + aci_device_output_power_t device_power; /**< enum aci_device_output_power_t */ +} _aci_packed_ aci_cmd_params_set_tx_power_t; + +ACI_ASSERT_SIZE(aci_cmd_params_set_tx_power_t, 1); +/** + * @struct aci_cmd_params_change_timing_t + * @brief Structure for the ACI_CMD_CHANGE_TIMING ACI command parameters + */ +typedef struct +{ + aci_ll_conn_params_t conn_params; +} _aci_packed_ aci_cmd_params_change_timing_t; + +ACI_ASSERT_SIZE(aci_cmd_params_change_timing_t, 8); + +/** + * @struct aci_cmd_params_open_remote_pipe_t + * @brief Structure for the ACI_CMD_OPEN_REMOTE_PIPE ACI command parameters + */ +typedef struct +{ + uint8_t pipe_number; +} _aci_packed_ aci_cmd_params_open_remote_pipe_t; + +/** + * @struct aci_cmd_params_send_data_t + * @brief Structure for the ACI_CMD_SEND_DATA ACI command parameters + */ +typedef struct +{ + aci_tx_data_t tx_data; +} _aci_packed_ aci_cmd_params_send_data_t; + +/** + * @define aci_cmd_params_send_data_ack_t + * @brief Structure for the ACI_CMD_SEND_DATA_ACK ACI command parameters + */ +typedef struct +{ + uint8_t pipe_number; +} _aci_packed_ aci_cmd_params_send_data_ack_t; + +/** + * @struct aci_cmd_params_send_data_t + * @brief Structure for the ACI_CMD_SEND_DATA ACI command parameters + */ +typedef struct +{ + uint8_t pipe_number; +} _aci_packed_ aci_cmd_params_request_data_t; + +/** + * @define aci_cmd_params_send_data_nack_t + * @brief Structure for the ACI_CMD_SEND_DATA_NACK ACI command parameters + */ +typedef struct +{ + uint8_t pipe_number; + uint8_t error_code; +} _aci_packed_ aci_cmd_params_send_data_nack_t; + +ACI_ASSERT_SIZE(aci_cmd_params_send_data_nack_t, 2); + +/** + * @define aci_cmd_params_set_app_latency_t + * @brief Structure for the ACI_CMD_SET_APP_LATENCY ACI command parameters + */ +typedef struct +{ + aci_app_latency_mode_t mode; + uint16_t latency; +} _aci_packed_ aci_cmd_params_set_app_latency_t; + +ACI_ASSERT_SIZE(aci_cmd_params_set_app_latency_t, 3); +/** + * @define aci_cmd_params_set_key_t + * @brief Structure for the ACI_CMD_SET_KEY ACI command parameters + */ +typedef struct +{ + aci_key_type_t key_type; + union + { + uint8_t passkey[6]; + uint8_t oob_key[16]; + } key; +} _aci_packed_ aci_cmd_params_set_key_t; + +ACI_ASSERT_SIZE(aci_cmd_params_set_key_t, 17); +/** + * @define aci_cmd_params_open_adv_pipe_t + * @brief Structure for the ACI_CMD_OPEN_ADV_PIPE ACI command parameters + */ +typedef struct +{ + uint8_t pipes[8]; +} _aci_packed_ aci_cmd_params_open_adv_pipe_t; + +/** + * @define aci_cmd_params_broadcast_t + * @brief Structure for the ACI_CMD_BROADCAST ACI command parameters + */ +typedef struct +{ + uint16_t timeout; /**< 0x0000 (no timeout) to 0x3FFF */ + uint16_t adv_interval; /**< 16 bits of advertising interval for general discovery */ +} _aci_packed_ aci_cmd_params_broadcast_t; + +/** + * @struct aci_cmd_params_close_remote_pipe_t + * @brief Structure for the ACI_CMD_CLOSE_REMOTE_PIPE ACI command parameters + */ +typedef struct +{ + uint8_t pipe_number; +} _aci_packed_ aci_cmd_params_close_remote_pipe_t; + +/** + * @struct aci_cmd_t + * @brief Encapsulates a generic ACI command + */ +typedef struct +{ + uint8_t len; /**< Length of the ACI command */ + aci_cmd_opcode_t cmd_opcode; /**< enum aci_cmd_opcode_t -> Opcode of the ACI command */ + union + { + aci_cmd_params_test_t test; + aci_cmd_params_echo_t echo; + aci_cmd_params_dtm_cmd_t dtm_cmd; + aci_cmd_params_setup_t setup; + aci_cmd_params_write_dynamic_data_t write_dynamic_data; + aci_cmd_params_set_local_data_t set_local_data; + aci_cmd_params_connect_t connect; + aci_cmd_params_bond_t bond; + aci_cmd_params_disconnect_t disconnect; + aci_cmd_params_set_tx_power_t set_tx_power; + aci_cmd_params_change_timing_t change_timing; + aci_cmd_params_open_remote_pipe_t open_remote_pipe; + aci_cmd_params_send_data_t send_data; + aci_cmd_params_send_data_ack_t send_data_ack; + aci_cmd_params_request_data_t request_data; + aci_cmd_params_send_data_nack_t send_data_nack; + aci_cmd_params_set_app_latency_t set_app_latency; + aci_cmd_params_set_key_t set_key; + aci_cmd_params_open_adv_pipe_t open_adv_pipe; + aci_cmd_params_broadcast_t broadcast; + aci_cmd_params_close_remote_pipe_t close_remote_pipe; + + } params; +} _aci_packed_ aci_cmd_t; + +#endif // ACI_CMDS_H__ +