1 | /* Copyright (c) 2014, Nordic Semiconductor ASA
|
---|
2 | *
|
---|
3 | * Permission is hereby granted, free of charge, to any person obtaining a copy
|
---|
4 | * of this software and associated documentation files (the "Software"), to deal
|
---|
5 | * in the Software without restriction, including without limitation the rights
|
---|
6 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
---|
7 | * copies of the Software, and to permit persons to whom the Software is
|
---|
8 | * furnished to do so, subject to the following conditions:
|
---|
9 | *
|
---|
10 | * The above copyright notice and this permission notice shall be included in all
|
---|
11 | * copies or substantial portions of the Software.
|
---|
12 | *
|
---|
13 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
---|
14 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
---|
15 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
---|
16 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
---|
17 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
---|
18 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
---|
19 | * SOFTWARE.
|
---|
20 | */
|
---|
21 |
|
---|
22 | /**
|
---|
23 | * @file
|
---|
24 | *
|
---|
25 | * @ingroup aci
|
---|
26 | *
|
---|
27 | * @brief Definitions for the ACI (Application Control Interface) events
|
---|
28 | */
|
---|
29 |
|
---|
30 | #ifndef ACI_EVTS_H__
|
---|
31 | #define ACI_EVTS_H__
|
---|
32 |
|
---|
33 | #include "aci.h"
|
---|
34 |
|
---|
35 | /**
|
---|
36 | * @enum aci_evt_opcode_t
|
---|
37 | * @brief ACI event opcodes
|
---|
38 | */
|
---|
39 | typedef enum
|
---|
40 | {
|
---|
41 | /**
|
---|
42 | * Invalid event code
|
---|
43 | */
|
---|
44 | ACI_EVT_INVALID = 0x00,
|
---|
45 | /**
|
---|
46 | * Sent every time the device starts
|
---|
47 | */
|
---|
48 | ACI_EVT_DEVICE_STARTED = 0x81,
|
---|
49 | /**
|
---|
50 | * Mirrors the ACI_CMD_ECHO
|
---|
51 | */
|
---|
52 | ACI_EVT_ECHO = 0x82,
|
---|
53 | /**
|
---|
54 | * Asynchronous hardware error event
|
---|
55 | */
|
---|
56 | ACI_EVT_HW_ERROR = 0x83,
|
---|
57 | /**
|
---|
58 | * Event opcode used as a event response for all commands
|
---|
59 | */
|
---|
60 | ACI_EVT_CMD_RSP = 0x84,
|
---|
61 | /**
|
---|
62 | * Link connected
|
---|
63 | */
|
---|
64 | ACI_EVT_CONNECTED = 0x85,
|
---|
65 | /**
|
---|
66 | * Link disconnected
|
---|
67 | */
|
---|
68 | ACI_EVT_DISCONNECTED = 0x86,
|
---|
69 | /**
|
---|
70 | * Bond completion result
|
---|
71 | */
|
---|
72 | ACI_EVT_BOND_STATUS = 0x87,
|
---|
73 | /**
|
---|
74 | * Pipe bitmap for available pipes
|
---|
75 | */
|
---|
76 | ACI_EVT_PIPE_STATUS = 0x88,
|
---|
77 | /**
|
---|
78 | * Sent to the application when the radio enters a connected state
|
---|
79 | * or when the timing of the radio connection changes
|
---|
80 | */
|
---|
81 | ACI_EVT_TIMING = 0x89,
|
---|
82 | /**
|
---|
83 | * Notification to the application that transmit credits are
|
---|
84 | * available
|
---|
85 | */
|
---|
86 | ACI_EVT_DATA_CREDIT = 0x8A,
|
---|
87 | /**
|
---|
88 | * Data acknowledgement event
|
---|
89 | */
|
---|
90 | ACI_EVT_DATA_ACK = 0x8B,
|
---|
91 | /**
|
---|
92 | * Data received notification event
|
---|
93 | */
|
---|
94 | ACI_EVT_DATA_RECEIVED = 0x8C,
|
---|
95 | /**
|
---|
96 | * Error notification event
|
---|
97 | */
|
---|
98 | ACI_EVT_PIPE_ERROR = 0x8D,
|
---|
99 | /**
|
---|
100 | * Display Passkey Event
|
---|
101 | */
|
---|
102 | ACI_EVT_DISPLAY_PASSKEY = 0x8E,
|
---|
103 | /**
|
---|
104 | * Security Key request
|
---|
105 | */
|
---|
106 | ACI_EVT_KEY_REQUEST = 0x8F
|
---|
107 |
|
---|
108 | } _aci_packed_ aci_evt_opcode_t;
|
---|
109 |
|
---|
110 | ACI_ASSERT_SIZE(aci_evt_opcode_t, 1);
|
---|
111 |
|
---|
112 | /**
|
---|
113 | * @struct aci_evt_params_device_started_t
|
---|
114 | * @brief Structure for the ACI_EVT_DEVICE_STARTED event return parameters
|
---|
115 | */
|
---|
116 | typedef struct
|
---|
117 | {
|
---|
118 | aci_device_operation_mode_t device_mode; /**< Mode in which the device is being started */
|
---|
119 | aci_hw_error_t hw_error; /**< Hardware Error if available for the start */
|
---|
120 | uint8_t credit_available; /**< Flow control credit available for this specific FW build */
|
---|
121 | } _aci_packed_ aci_evt_params_device_started_t;
|
---|
122 |
|
---|
123 | ACI_ASSERT_SIZE(aci_evt_params_device_started_t, 3);
|
---|
124 |
|
---|
125 | /**
|
---|
126 | * @struct aci_evt_params_hw_error_t
|
---|
127 | * @brief Structure for the ACI_EVT_HW_ERROR event return parameters
|
---|
128 | */
|
---|
129 | typedef struct
|
---|
130 | {
|
---|
131 | uint16_t line_num;
|
---|
132 | uint8_t file_name[20];
|
---|
133 | } _aci_packed_ aci_evt_params_hw_error_t;
|
---|
134 |
|
---|
135 | ACI_ASSERT_SIZE(aci_evt_params_hw_error_t, 22);
|
---|
136 |
|
---|
137 | /**
|
---|
138 | * @struct aci_evt_cmd_rsp_params_dtm_cmd_t
|
---|
139 | * @brief Structure for the ACI_EVT_CMD_RSP event with opcode=ACI_CMD_DTM_CMD event return parameters
|
---|
140 | */
|
---|
141 | typedef struct
|
---|
142 | {
|
---|
143 | uint8_t evt_msb;
|
---|
144 | uint8_t evt_lsb;
|
---|
145 | } _aci_packed_ aci_evt_cmd_rsp_params_dtm_cmd_t;
|
---|
146 |
|
---|
147 | /**
|
---|
148 | * @struct aci_evt_cmd_rsp_read_dynamic_data_t
|
---|
149 | * @brief Structure for the ACI_EVT_CMD_RSP event with opcode=ACI_CMD_READ_DYNAMIC_DATA event return parameters
|
---|
150 | * @note Dynamic data chunk size in this event is defined to go up to ACI_PACKET_MAX_LEN - 5
|
---|
151 | */
|
---|
152 | typedef struct
|
---|
153 | {
|
---|
154 | uint8_t seq_no;
|
---|
155 | uint8_t dynamic_data[1];
|
---|
156 | } _aci_packed_ aci_evt_cmd_rsp_read_dynamic_data_t;
|
---|
157 |
|
---|
158 | /**
|
---|
159 | * @struct aci_evt_cmd_rsp_params_get_device_version_t
|
---|
160 | * @brief Structure for the ACI_EVT_CMD_RSP event with opcode=ACI_CMD_GET_DEVICE_VERSION event return parameters
|
---|
161 | */
|
---|
162 | typedef struct
|
---|
163 | {
|
---|
164 | uint16_t configuration_id;
|
---|
165 | uint8_t aci_version;
|
---|
166 | uint8_t setup_format;
|
---|
167 | uint32_t setup_id;
|
---|
168 | uint8_t setup_status;
|
---|
169 | } _aci_packed_ aci_evt_cmd_rsp_params_get_device_version_t;
|
---|
170 |
|
---|
171 | ACI_ASSERT_SIZE(aci_evt_cmd_rsp_params_get_device_version_t, 9);
|
---|
172 |
|
---|
173 | /**
|
---|
174 | * @struct aci_evt_cmd_rsp_params_get_device_address_t
|
---|
175 | * @brief Structure for the ACI_EVT_CMD_RSP event with opcode=ACI_CMD_GET_DEVICE_ADDRESS event return parameters
|
---|
176 | */
|
---|
177 | typedef struct
|
---|
178 | {
|
---|
179 | uint8_t bd_addr_own[BTLE_DEVICE_ADDRESS_SIZE];
|
---|
180 | aci_bd_addr_type_t bd_addr_type;
|
---|
181 | } _aci_packed_ aci_evt_cmd_rsp_params_get_device_address_t;
|
---|
182 |
|
---|
183 | ACI_ASSERT_SIZE(aci_evt_cmd_rsp_params_get_device_address_t, BTLE_DEVICE_ADDRESS_SIZE + 1);
|
---|
184 |
|
---|
185 | /**
|
---|
186 | * @struct aci_evt_cmd_rsp_params_get_battery_level_t
|
---|
187 | * @brief Structure for the ACI_EVT_CMD_RSP event with opcode=ACI_CMD_GET_BATTERY_LEVEL event return parameters
|
---|
188 | */
|
---|
189 | typedef struct
|
---|
190 | {
|
---|
191 | uint16_t battery_level;
|
---|
192 | } _aci_packed_ aci_evt_cmd_rsp_params_get_battery_level_t;
|
---|
193 |
|
---|
194 | /**
|
---|
195 | * @struct aci_evt_cmd_rsp_params_get_temperature_t
|
---|
196 | * @brief Structure for the ACI_EVT_CMD_RSP event with opcode=ACI_CMD_GET_TEMPERATURE event return parameters
|
---|
197 | */
|
---|
198 | typedef struct
|
---|
199 | {
|
---|
200 | int16_t temperature_value;
|
---|
201 | } _aci_packed_ aci_evt_cmd_rsp_params_get_temperature_t;
|
---|
202 |
|
---|
203 | /**
|
---|
204 | * @struct aci_evt_params_cmd_rsp_t
|
---|
205 | * @brief Structure for the ACI_EVT_CMD_RSP event return parameters
|
---|
206 | */
|
---|
207 | typedef struct
|
---|
208 | {
|
---|
209 | aci_cmd_opcode_t cmd_opcode; /**< Command opcode for which the event response is being sent */
|
---|
210 | aci_status_code_t cmd_status; /**< Status of the command that was sent. Used in the context of the command. */
|
---|
211 | union
|
---|
212 | {
|
---|
213 | aci_evt_cmd_rsp_params_dtm_cmd_t dtm_cmd;
|
---|
214 | aci_evt_cmd_rsp_read_dynamic_data_t read_dynamic_data;
|
---|
215 | aci_evt_cmd_rsp_params_get_device_version_t get_device_version;
|
---|
216 | aci_evt_cmd_rsp_params_get_device_address_t get_device_address;
|
---|
217 | aci_evt_cmd_rsp_params_get_battery_level_t get_battery_level;
|
---|
218 | aci_evt_cmd_rsp_params_get_temperature_t get_temperature;
|
---|
219 | uint8_t padding[29];
|
---|
220 | } params;
|
---|
221 | } _aci_packed_ aci_evt_params_cmd_rsp_t;
|
---|
222 |
|
---|
223 | ACI_ASSERT_SIZE(aci_evt_params_cmd_rsp_t, 31);
|
---|
224 |
|
---|
225 | /**
|
---|
226 | * @struct aci_evt_params_connected_t
|
---|
227 | * @brief Structure for the ACI_EVT_CONNECTED event return parameters
|
---|
228 | */
|
---|
229 | typedef struct
|
---|
230 | {
|
---|
231 | aci_bd_addr_type_t dev_addr_type;
|
---|
232 | uint8_t dev_addr[BTLE_DEVICE_ADDRESS_SIZE];
|
---|
233 | uint16_t conn_rf_interval; /**< rf_interval = conn_rf_interval * 1.25 ms Range:0x0006 to 0x0C80 */
|
---|
234 | uint16_t conn_slave_rf_latency; /**< Number of RF events the slave can skip */
|
---|
235 | uint16_t conn_rf_timeout; /**< Timeout as a multiple of 10ms i.e timeout = conn_rf_timeout * 10ms Range: 0x000A to 0x0C80 */
|
---|
236 | aci_clock_accuracy_t master_clock_accuracy; /**< Clock accuracy of Bluetooth master: Enumerated list of values from 500 ppm to 20 ppm */
|
---|
237 | } _aci_packed_ aci_evt_params_connected_t;
|
---|
238 |
|
---|
239 | ACI_ASSERT_SIZE(aci_evt_params_connected_t, 14);
|
---|
240 |
|
---|
241 | /**
|
---|
242 | * @struct aci_evt_params_disconnected_t
|
---|
243 | * @brief Structure for the ACI_EVT_DISCONNECTED event return parameters
|
---|
244 | */
|
---|
245 | typedef struct
|
---|
246 | {
|
---|
247 | aci_status_code_t aci_status;
|
---|
248 | uint8_t btle_status;
|
---|
249 | } _aci_packed_ aci_evt_params_disconnected_t;
|
---|
250 |
|
---|
251 | ACI_ASSERT_SIZE(aci_evt_params_disconnected_t, 2);
|
---|
252 |
|
---|
253 | /**
|
---|
254 | * @struct aci_evt_params_bond_status_t
|
---|
255 | * @brief Structure for the ACI_EVT_BOND_STATUS event return parameters
|
---|
256 | */
|
---|
257 | typedef struct
|
---|
258 | {
|
---|
259 | aci_bond_status_code_t status_code;
|
---|
260 | aci_bond_status_source_t status_source;
|
---|
261 | uint8_t secmode1_bitmap;
|
---|
262 | uint8_t secmode2_bitmap;
|
---|
263 | uint8_t keys_exchanged_slave;
|
---|
264 | uint8_t keys_exchanged_master;
|
---|
265 | } _aci_packed_ aci_evt_params_bond_status_t;
|
---|
266 |
|
---|
267 | ACI_ASSERT_SIZE(aci_evt_params_bond_status_t, 6);
|
---|
268 |
|
---|
269 | /**
|
---|
270 | * @struct aci_evt_params_pipe_status_t
|
---|
271 | * @brief Structure for the ACI_EVT_PIPE_STATUS event return parameters
|
---|
272 | */
|
---|
273 | typedef struct
|
---|
274 | {
|
---|
275 | uint8_t pipes_open_bitmap[8];
|
---|
276 | uint8_t pipes_closed_bitmap[8];
|
---|
277 | } _aci_packed_ aci_evt_params_pipe_status_t;
|
---|
278 |
|
---|
279 | ACI_ASSERT_SIZE(aci_evt_params_pipe_status_t, 16);
|
---|
280 |
|
---|
281 | /**
|
---|
282 | * @struct aci_evt_params_timing_t
|
---|
283 | * @brief Structure for the ACI_EVT_TIMING event return parameters
|
---|
284 | */
|
---|
285 | typedef struct
|
---|
286 | {
|
---|
287 | uint16_t conn_rf_interval; /**< rf_interval = conn_rf_interval * 1.25 ms Range:0x0006 to 0x0C80 */
|
---|
288 | uint16_t conn_slave_rf_latency; /**< Number of RF events the slave can skip */
|
---|
289 | uint16_t conn_rf_timeout; /**< Timeout as a multiple of 10ms i.e timeout = conn_rf_timeout * 10ms Range: 0x000A to 0x0C80 */
|
---|
290 | } _aci_packed_ aci_evt_params_timing_t;
|
---|
291 |
|
---|
292 | ACI_ASSERT_SIZE(aci_evt_params_timing_t, 6);
|
---|
293 |
|
---|
294 | /**
|
---|
295 | * @struct aci_evt_params_data_credit_t
|
---|
296 | * @brief Structure for the ACI_EVT_DATA_CREDIT event return parameters
|
---|
297 | */
|
---|
298 | typedef struct
|
---|
299 | {
|
---|
300 | uint8_t credit;
|
---|
301 | } _aci_packed_ aci_evt_params_data_credit_t;
|
---|
302 |
|
---|
303 | /**
|
---|
304 | * @struct aci_evt_params_data_ack_t
|
---|
305 | * @brief Structure for the ACI_EVT_DATA_ACK event return parameters
|
---|
306 | */
|
---|
307 | typedef struct
|
---|
308 | {
|
---|
309 | uint8_t pipe_number;
|
---|
310 | } _aci_packed_ aci_evt_params_data_ack_t;
|
---|
311 |
|
---|
312 | /**
|
---|
313 | * @struct aci_evt_params_data_received_t
|
---|
314 | * @brief Structure for the ACI_EVT_DATA_RECEIVED event return parameters
|
---|
315 | */
|
---|
316 | typedef struct
|
---|
317 | {
|
---|
318 | aci_rx_data_t rx_data;
|
---|
319 | } _aci_packed_ aci_evt_params_data_received_t;
|
---|
320 |
|
---|
321 | typedef struct
|
---|
322 | {
|
---|
323 | uint8_t content[1];
|
---|
324 | } _aci_packed_ error_data_t;
|
---|
325 |
|
---|
326 | /**
|
---|
327 | * @struct aci_evt_params_pipe_error_t
|
---|
328 | * @brief Structure for the ACI_EVT_PIPE_ERROR event return parameters
|
---|
329 | */
|
---|
330 | typedef struct
|
---|
331 | {
|
---|
332 | uint8_t pipe_number;
|
---|
333 | uint8_t error_code;
|
---|
334 | union
|
---|
335 | {
|
---|
336 | error_data_t error_data;
|
---|
337 | } params;
|
---|
338 | } _aci_packed_ aci_evt_params_pipe_error_t;
|
---|
339 |
|
---|
340 | /**
|
---|
341 | * @struct aci_evt_params_display_passkey_t
|
---|
342 | * @brief Structure for the ACI_EVT_DISPLAY_PASSKEY event return parameters
|
---|
343 | */
|
---|
344 | typedef struct
|
---|
345 | {
|
---|
346 | uint8_t passkey[6];
|
---|
347 | } _aci_packed_ aci_evt_params_display_passkey_t;
|
---|
348 |
|
---|
349 | /**
|
---|
350 | * @struct aci_evt_params_key_request_t
|
---|
351 | * @brief Structure for the ACI_EVT_KEY_REQUEST event return parameters
|
---|
352 | */
|
---|
353 | typedef struct
|
---|
354 | {
|
---|
355 | aci_key_type_t key_type;
|
---|
356 | } _aci_packed_ aci_evt_params_key_request_t;
|
---|
357 |
|
---|
358 | /**
|
---|
359 | * @struct aci_event_params_echo_t
|
---|
360 | * @brief Structure for the ACI_EVT_ECHO ACI event parameters
|
---|
361 | */
|
---|
362 | typedef struct
|
---|
363 | {
|
---|
364 | uint8_t echo_data[ACI_ECHO_DATA_MAX_LEN];
|
---|
365 | } _aci_packed_ aci_evt_params_echo_t;
|
---|
366 |
|
---|
367 | /**
|
---|
368 | * @struct aci_evt_t
|
---|
369 | * @brief Encapsulates a generic ACI event
|
---|
370 | */
|
---|
371 | typedef struct
|
---|
372 | {
|
---|
373 | uint8_t len;
|
---|
374 | aci_evt_opcode_t evt_opcode;
|
---|
375 | union
|
---|
376 | {
|
---|
377 | aci_evt_params_device_started_t device_started;
|
---|
378 | aci_evt_params_echo_t echo;
|
---|
379 | aci_evt_params_hw_error_t hw_error;
|
---|
380 | aci_evt_params_cmd_rsp_t cmd_rsp;
|
---|
381 | aci_evt_params_connected_t connected;
|
---|
382 | aci_evt_params_disconnected_t disconnected;
|
---|
383 | aci_evt_params_bond_status_t bond_status;
|
---|
384 | aci_evt_params_pipe_status_t pipe_status;
|
---|
385 | aci_evt_params_timing_t timing;
|
---|
386 | aci_evt_params_data_credit_t data_credit;
|
---|
387 | aci_evt_params_data_ack_t data_ack;
|
---|
388 | aci_evt_params_data_received_t data_received;
|
---|
389 | aci_evt_params_pipe_error_t pipe_error;
|
---|
390 | aci_evt_params_display_passkey_t display_passkey;
|
---|
391 | aci_evt_params_key_request_t key_request;
|
---|
392 | } params;
|
---|
393 | } _aci_packed_ aci_evt_t;
|
---|
394 |
|
---|
395 | ACI_ASSERT_SIZE(aci_evt_t, 33);
|
---|
396 |
|
---|
397 | #endif // ACI_EVTS_H__
|
---|