blob: 4fac6c67033ed6a5f784f098bb5d69f8fc6fac18 [file] [log] [blame]
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001little_endian_packets
2
Martin Brabham94db40c2019-03-29 10:24:52 -07003custom_field Address : 48 "hci/"
4custom_field ClassOfDevice : 24 "hci/"
Myles Watsonc1506122019-04-12 10:40:43 -07005
Myles Watsoncc57c6b2019-03-25 15:24:43 -07006enum Enable : 8 {
7 DISABLED = 0x00,
8 ENABLED = 0x01,
9}
10
11// https://www.bluetooth.com/specifications/assigned-numbers/generic-access-profile
Myles Watson7a0dc392019-07-09 15:24:54 -070012enum GapDataType : 8 {
13 INVALID = 0x00,
Myles Watsoncc57c6b2019-03-25 15:24:43 -070014 FLAGS = 0x01,
15 INCOMPLETE_LIST_16_BIT_UUIDS = 0x02,
16 COMPLETE_LIST_16_BIT_UUIDS = 0x03,
17 INCOMPLETE_LIST_32_BIT_UUIDS = 0x04,
18 COMPLETE_LIST_32_BIT_UUIDS = 0x05,
19 INCOMPLETE_LIST_128_BIT_UUIDS = 0x06,
20 COMPLETE_LIST_128_BIT_UUIDS = 0x07,
21 SHORTENED_LOCAL_NAME = 0x08,
22 COMPLETE_LOCAL_NAME = 0x09,
23 TX_POWER_LEVEL = 0x0A,
24 CLASS_OF_DEVICE = 0x0D,
25}
26
Myles Watson7a0dc392019-07-09 15:24:54 -070027struct GapData {
28 _size_(data) : 8, // Including one byte for data_type
29 data_type : GapDataType,
30 data : 8[+1*8],
31}
32
Myles Watsoncc57c6b2019-03-25 15:24:43 -070033// HCI ACL Packets
34
35enum PacketBoundaryFlag : 2 {
36 FIRST_NON_AUTOMATICALLY_FLUSHABLE = 0,
37 CONTINUING_FRAGMENT = 1,
38 FIRST_AUTOMATICALLY_FLUSHABLE = 2,
Myles Watsoncc57c6b2019-03-25 15:24:43 -070039}
40
41enum BroadcastFlag : 2 {
42 POINT_TO_POINT = 0,
43 ACTIVE_SLAVE_BROADCAST = 1,
44}
45
46packet AclPacket {
Myles Watson1d8aa282019-04-22 14:16:41 -070047 handle : 12,
48 packet_boundary_flag : PacketBoundaryFlag,
49 broadcast_flag : BroadcastFlag,
50 _size_(_payload_) : 16,
51 _payload_,
Myles Watsoncc57c6b2019-03-25 15:24:43 -070052}
53
54// HCI SCO Packets
55
56enum PacketStatusFlag : 2 {
57 CORRECTLY_RECEIVED = 0,
58 POSSIBLY_INCOMPLETE = 1,
59 NO_DATA = 2,
60 PARTIALLY_LOST = 3,
61}
62
63packet ScoPacket {
Myles Watson1d8aa282019-04-22 14:16:41 -070064 handle : 12,
65 packet_status_flag : PacketStatusFlag,
66 _reserved_ : 2, // BroadcastFlag
Myles Watson2d234432019-08-19 13:33:27 -070067 _size_(data) : 8,
68 data : 8[],
Myles Watsoncc57c6b2019-03-25 15:24:43 -070069}
70
71// HCI Command Packets
72
73enum OpCode : 16 {
74 NONE = 0x0000,
75
76 // LINK_CONTROL
77 INQUIRY = 0x0401,
78 INQUIRY_CANCEL = 0x0402,
79 PERIODIC_INQUIRY_MODE = 0x0403,
80 EXIT_PERIODIC_INQUIRY_MODE = 0x0404,
81 CREATE_CONNECTION = 0x0405,
82 DISCONNECT = 0x0406,
83 CREATE_CONNECTION_CANCEL = 0x0408,
84 ACCEPT_CONNECTION_REQUEST = 0x0409,
85 REJECT_CONNECTION_REQUEST = 0x040A,
86 LINK_KEY_REQUEST_REPLY = 0x040B,
87 LINK_KEY_REQUEST_NEGATIVE_REPLY = 0x040C,
88 PIN_CODE_REQUEST_REPLY = 0x040D,
89 PIN_CODE_REQUEST_NEGATIVE_REPLY = 0x040E,
90 CHANGE_CONNECTION_PACKET_TYPE = 0x040F,
91 AUTHENTICATION_REQUESTED = 0x0411,
92 SET_CONNECTION_ENCRYPTION = 0x0413,
93 CHANGE_CONNECTION_LINK_KEY = 0x0415,
94 MASTER_LINK_KEY = 0x0417,
95 REMOTE_NAME_REQUEST = 0x0419,
96 REMOTE_NAME_REQUEST_CANCEL = 0x041A,
97 READ_REMOTE_SUPPORTED_FEATURES = 0x041B,
98 READ_REMOTE_EXTENDED_FEATURES = 0x041C,
99 READ_REMOTE_VERSION_INFORMATION = 0x041D,
100 READ_CLOCK_OFFSET = 0x041F,
101 READ_LMP_HANDLE = 0x0420,
102 SETUP_SYNCHRONOUS_CONNECTION = 0x0428,
103 ACCEPT_SYNCHRONOUS_CONNECTION = 0x0429,
104 REJECT_SYNCHRONOUS_CONNECTION = 0x042A,
105 IO_CAPABILITY_REQUEST_REPLY = 0x042B,
106 USER_CONFIRMATION_REQUEST_REPLY = 0x042C,
107 USER_CONFIRMATION_REQUEST_NEGATIVE_REPLY = 0x042D,
108 USER_PASSKEY_REQUEST_REPLY = 0x042E,
109 USER_PASSKEY_REQUEST_NEGATIVE_REPLY = 0x042F,
110 REMOTE_OOB_DATA_REQUEST_REPLY = 0x0430,
111 REMOTE_OOB_DATA_REQUEST_NEGATIVE_REPLY = 0x0433,
112 IO_CAPABILITY_REQUEST_NEGATIVE_REPLY = 0x0434,
113 ENHANCED_SETUP_SYNCHRONOUS_CONNECTION = 0x043D,
114 ENHANCED_ACCEPT_SYNCHRONOUS_CONNECTION = 0x043E,
115
116 // LINK_POLICY
117 HOLD_MODE = 0x0801,
118 SNIFF_MODE = 0x0803,
119 EXIT_SNIFF_MODE = 0x0804,
120 QOS_SETUP = 0x0807,
121 ROLE_DISCOVERY = 0x0809,
122 SWITCH_ROLE = 0x080B,
123 READ_LINK_POLICY_SETTINGS = 0x080C,
124 WRITE_LINK_POLICY_SETTINGS = 0x080D,
125 READ_DEFAULT_LINK_POLICY_SETTINGS = 0x080E,
126 WRITE_DEFAULT_LINK_POLICY_SETTINGS = 0x080F,
127 FLOW_SPECIFICATION = 0x0810,
128 SNIFF_SUBRATING = 0x0811,
129
130 // CONTROLLER_AND_BASEBAND
131 SET_EVENT_MASK = 0x0C01,
132 RESET = 0x0C03,
133 SET_EVENT_FILTER = 0x0C05,
134 FLUSH = 0x0C08,
135 READ_PIN_TYPE = 0x0C09,
136 WRITE_PIN_TYPE = 0x0C0A,
137 CREATE_NEW_UNIT_KEY = 0x0C0B,
138 READ_STORED_LINK_KEY = 0x0C0D,
139 WRITE_STORED_LINK_KEY = 0x0C11,
140 DELETE_STORED_LINK_KEY = 0x0C12,
141 WRITE_LOCAL_NAME = 0x0C13,
142 READ_LOCAL_NAME = 0x0C14,
143 READ_CONNECTION_ACCEPT_TIMEOUT = 0x0C15,
144 WRITE_CONNECTION_ACCEPT_TIMEOUT = 0x0C16,
145 READ_PAGE_TIMEOUT = 0x0C17,
146 WRITE_PAGE_TIMEOUT = 0x0C18,
147 READ_SCAN_ENABLE = 0x0C19,
148 WRITE_SCAN_ENABLE = 0x0C1A,
149 READ_PAGE_SCAN_ACTIVITY = 0x0C1B,
150 WRITE_PAGE_SCAN_ACTIVITY = 0x0C1C,
151 READ_INQUIRY_SCAN_ACTIVITY = 0x0C1D,
152 WRITE_INQUIRY_SCAN_ACTIVITY = 0x0C1E,
153 READ_AUTHENTICATION_ENABLE = 0x0C1F,
154 WRITE_AUTHENTICATION_ENABLE = 0x0C20,
155 READ_CLASS_OF_DEVICE = 0x0C23,
156 WRITE_CLASS_OF_DEVICE = 0x0C24,
157 READ_VOICE_SETTING = 0x0C25,
158 WRITE_VOICE_SETTING = 0x0C26,
159 READ_AUTOMATIC_FLUSH_TIMEOUT = 0x0C27,
160 WRITE_AUTOMATIC_FLUSH_TIMEOUT = 0x0C28,
161 READ_NUM_BROADCAST_RETRANSMITS = 0x0C29,
162 WRITE_NUM_BROADCAST_RETRANSMITS = 0x0C2A,
163 READ_HOLD_MODE_ACTIVITY = 0x0C2B,
164 WRITE_HOLD_MODE_ACTIVITY = 0x0C2C,
165 READ_TRANSMIT_POWER_LEVEL = 0x0C2D,
166 READ_SYNCHRONOUS_FLOW_CONTROL_ENABLE = 0x0C2E,
167 WRITE_SYNCHRONOUS_FLOW_CONTROL_ENABLE = 0x0C2F,
168 SET_CONTROLLER_TO_HOST_FLOW_CONTROL = 0x0C31,
169 HOST_BUFFER_SIZE = 0x0C33,
170 HOST_NUM_COMPLETED_PACKETS = 0x0C35,
171 READ_LINK_SUPERVISION_TIMEOUT = 0x0C36,
172 WRITE_LINK_SUPERVISION_TIMEOUT = 0x0C37,
173 READ_NUMBER_OF_SUPPORTED_IAC = 0x0C38,
174 READ_CURRENT_IAC_LAP = 0x0C39,
175 WRITE_CURRENT_IAC_LAP = 0x0C3A,
176 SET_AFH_HOST_CHANNEL_CLASSIFICATION = 0x0C3F,
177 READ_INQUIRY_SCAN_TYPE = 0x0C42,
178 WRITE_INQUIRY_SCAN_TYPE = 0x0C43,
179 READ_INQUIRY_MODE = 0x0C44,
180 WRITE_INQUIRY_MODE = 0x0C45,
181 READ_PAGE_SCAN_TYPE = 0x0C46,
182 WRITE_PAGE_SCAN_TYPE = 0x0C47,
183 READ_AFH_CHANNEL_ASSESSMENT_MODE = 0x0C48,
184 WRITE_AFH_CHANNEL_ASSESSMENT_MODE = 0x0C49,
185 READ_EXTENDED_INQUIRY_RESPONSE = 0x0C51,
186 WRITE_EXTENDED_INQUIRY_RESPONSE = 0x0C52,
187 REFRESH_ENCRYPTION_KEY = 0x0C53,
188 READ_SIMPLE_PAIRING_MODE = 0x0C55,
189 WRITE_SIMPLE_PAIRING_MODE = 0x0C56,
190 READ_LOCAL_OOB_DATA = 0x0C57,
191 READ_INQUIRY_RESPONSE_TRANSMIT_POWER_LEVEL = 0x0C58,
192 WRITE_INQUIRY_TRANSMIT_POWER_LEVEL = 0x0C59,
193 SEND_KEYPRESS_NOTIFICATION = 0x0C60,
194
195 READ_LE_HOST_SUPPORT = 0x0C6C,
196 WRITE_LE_HOST_SUPPORT = 0x0C6D,
197
198 READ_SECURE_CONNECTIONS_HOST_SUPPORT = 0x0C79,
199 WRITE_SECURE_CONNECTIONS_HOST_SUPPORT = 0x0C7A,
Chienyuan4d7cc812019-07-12 18:00:12 +0800200 READ_LOCAL_OOB_EXTENDED_DATA = 0x0C7D,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700201
202 // INFORMATIONAL_PARAMETERS
203 READ_LOCAL_VERSION_INFORMATION = 0x1001,
204 READ_LOCAL_SUPPORTED_COMMANDS = 0x1002,
205 READ_LOCAL_SUPPORTED_FEATURES = 0x1003,
206 READ_LOCAL_EXTENDED_FEATURES = 0x1004,
207 READ_BUFFER_SIZE = 0x1005,
208 READ_BD_ADDR = 0x1009,
209 READ_DATA_BLOCK_SIZE = 0x100A,
210 READ_LOCAL_SUPPORTED_CODECS = 0x100B,
211
212 // STATUS_PARAMETERS
213 READ_FAILED_CONTACT_COUNTER = 0x1401,
214 RESET_FAILED_CONTACT_COUNTER = 0x1402,
215 READ_LINK_QUALITY = 0x1403,
216 READ_RSSI = 0x1405,
217 READ_AFH_CHANNEL_MAP = 0x1406,
218 READ_CLOCK = 0x1407,
219 READ_ENCRYPTION_KEY_SIZE = 0x1408,
220
221 // TESTING
222 READ_LOOPBACK_MODE = 0x1801,
223 WRITE_LOOPBACK_MODE = 0x1802,
224 ENABLE_DEVICE_UNDER_TEST_MODE = 0x1803,
225 WRITE_SIMPLE_PAIRING_DEBUG_MODE = 0x1804,
226 WRITE_SECURE_CONNECTIONS_TEST_MODE = 0x180A,
227
228 // LE_CONTROLLER
229 LE_SET_EVENT_MASK = 0x2001,
230 LE_READ_BUFFER_SIZE = 0x2002,
231 LE_READ_LOCAL_SUPPORTED_FEATURES = 0x2003,
232 LE_SET_RANDOM_ADDRESS = 0x2005,
233 LE_SET_ADVERTISING_PARAMETERS = 0x2006,
234 LE_READ_ADVERTISING_CHANNEL_TX_POWER = 0x2007,
235 LE_SET_ADVERTISING_DATA = 0x2008,
236 LE_SET_SCAN_RESPONSE_DATA = 0x2009,
237 LE_SET_ADVERTISING_ENABLE = 0x200A,
238 LE_SET_SCAN_PARAMETERS = 0x200B,
239 LE_SET_SCAN_ENABLE = 0x200C,
240 LE_CREATE_CONNECTION = 0x200D,
241 LE_CREATE_CONNECTION_CANCEL = 0x200E,
242 LE_READ_WHITE_LIST_SIZE = 0x200F,
243 LE_CLEAR_WHITE_LIST = 0x2010,
244 LE_ADD_DEVICE_TO_WHITE_LIST = 0x2011,
245 LE_REMOVE_DEVICE_FROM_WHITE_LIST = 0x2012,
246 LE_CONNECTION_UPDATE = 0x2013,
247 LE_SET_HOST_CHANNEL_CLASSIFICATION = 0x2014,
248 LE_READ_CHANNEL_MAP = 0x2015,
249 LE_READ_REMOTE_FEATURES = 0x2016,
250 LE_ENCRYPT = 0x2017,
251 LE_RAND = 0x2018,
252 LE_START_ENCRYPTION = 0x2019,
253 LE_LONG_TERM_KEY_REQUEST_REPLY = 0x201A,
254 LE_LONG_TERM_KEY_REQUEST_NEGATIVE_REPLY = 0x201B,
255 LE_READ_SUPPORTED_STATES = 0x201C,
256 LE_RECEIVER_TEST = 0x201D,
257 LE_TRANSMITTER_TEST = 0x201E,
258 LE_TEST_END = 0x201F,
259 LE_REMOTE_CONNECTION_PARAMETER_REQUEST_REPLY = 0x2020,
260 LE_REMOTE_CONNECTION_PARAMETER_REQUEST_NEGATIVE_REPLY = 0x2021,
261
262 LE_SET_DATA_LENGTH = 0x2022,
263 LE_READ_SUGGESTED_DEFAULT_DATA_LENGTH = 0x2023,
264 LE_WRITE_SUGGESTED_DEFAULT_DATA_LENGTH = 0x2024,
265 LE_READ_LOCAL_P_256_PUBLIC_KEY_COMMAND = 0x2025,
266 LE_GENERATE_DHKEY_COMMAND = 0x2026,
267 LE_ADD_DEVICE_TO_RESOLVING_LIST = 0x2027,
268 LE_REMOVE_DEVICE_FROM_RESOLVING_LIST = 0x2028,
269 LE_CLEAR_RESOLVING_LIST = 0x2029,
270 LE_READ_RESOLVING_LIST_SIZE = 0x202A,
271 LE_READ_PEER_RESOLVABLE_ADDRESS = 0x202B,
272 LE_READ_LOCAL_RESOLVABLE_ADDRESS = 0x202C,
273 LE_SET_ADDRESS_RESOLUTION_ENABLE = 0x202D,
274 LE_SET_RESOLVABLE_PRIVATE_ADDRESS_TIMEOUT = 0x202E,
275 LE_READ_MAXIMUM_DATA_LENGTH = 0x202F,
276 LE_READ_PHY = 0x2030,
277 LE_SET_DEFAULT_PHY = 0x2031,
278 LE_SET_PHY = 0x2032,
279 LE_ENHANCED_RECEIVER_TEST = 0x2033,
280 LE_ENHANCED_TRANSMITTER_TEST = 0x2034,
281 LE_SET_EXTENDED_ADVERTISING_RANDOM_ADDRESS = 0x2035,
282 LE_SET_EXTENDED_ADVERTISING_PARAMETERS = 0x2036,
283 LE_SET_EXTENDED_ADVERTISING_DATA = 0x2037,
284 LE_SET_EXTENDED_ADVERTISING_SCAN_RESPONSE = 0x2038,
285 LE_SET_EXTENDED_ADVERTISING_ENABLE = 0x2039,
286 LE_READ_MAXIMUM_ADVERTISING_DATA_LENGTH = 0x203A,
287 LE_READ_NUMBER_OF_SUPPORTED_ADVERTISING_SETS = 0x203B,
288 LE_REMOVE_ADVERTISING_SET = 0x203C,
289 LE_CLEAR_ADVERTISING_SETS = 0x203D,
290 LE_SET_PERIODIC_ADVERTISING_PARAM = 0x203E,
291 LE_SET_PERIODIC_ADVERTISING_DATA = 0x203F,
292 LE_SET_PERIODIC_ADVERTISING_ENABLE = 0x2040,
293 LE_SET_EXTENDED_SCAN_PARAMETERS = 0x2041,
294 LE_SET_EXTENDED_SCAN_ENABLE = 0x2042,
295 LE_EXTENDED_CREATE_CONNECTION = 0x2043,
296 LE_PERIODIC_ADVERTISING_CREATE_SYNC = 0x2044,
297 LE_PERIODIC_ADVERTISING_CREATE_SYNC_CANCEL = 0x2045,
298 LE_PERIODIC_ADVERTISING_TERMINATE_SYNC = 0x2046,
299 LE_ADD_DEVICE_TO_PERIODIC_ADVERTISING_LIST = 0x2047,
300 LE_REMOVE_DEVICE_FROM_PERIODIC_ADVERTISING_LIST = 0x2048,
301 LE_CLEAR_PERIODIC_ADVERTISING_LIST = 0x2049,
302 LE_READ_PERIODIC_ADVERTISING_LIST_SIZE = 0x204A,
303 LE_READ_TRANSMIT_POWER = 0x204B,
304 LE_READ_RF_PATH_COMPENSATION_POWER = 0x204C,
305 LE_WRITE_RF_PATH_COMPENSATION_POWER = 0x204D,
306 LE_SET_PRIVACY_MODE = 0x204E,
307
308 // VENDOR_SPECIFIC
309 LE_GET_VENDOR_CAPABILITIES = 0xFD53,
310 LE_MULTI_ADVT = 0xFD54,
311 LE_BATCH_SCAN = 0xFD56,
312 LE_ADV_FILTER = 0xFD57,
313 LE_TRACK_ADV = 0xFD58,
314 LE_ENERGY_INFO = 0xFD59,
315 LE_EXTENDED_SCAN_PARAMS = 0xFD5A,
316 CONTROLLER_DEBUG_INFO = 0xFD5B,
317 CONTROLLER_A2DP_OPCODE = 0xFD5D,
318}
319
Chienyuana7ad3fb2019-08-15 18:04:32 +0800320// For mapping Local Supported Commands command
321// Value = Octet * 10 + bit
322enum OpCodeIndex : 16 {
323 INQUIRY = 0,
324 INQUIRY_CANCEL = 1,
325 PERIODIC_INQUIRY_MODE = 2,
326 EXIT_PERIODIC_INQUIRY_MODE = 3,
327 CREATE_CONNECTION = 4,
328 DISCONNECT = 5,
329 CREATE_CONNECTION_CANCEL = 7,
330 ACCEPT_CONNECTION_REQUEST = 10,
331 REJECT_CONNECTION_REQUEST = 11,
332 LINK_KEY_REQUEST_REPLY = 12,
333 LINK_KEY_REQUEST_NEGATIVE_REPLY = 13,
334 PIN_CODE_REQUEST_REPLY = 14,
335 PIN_CODE_REQUEST_NEGATIVE_REPLY = 15,
336 CHANGE_CONNECTION_PACKET_TYPE = 16,
337 AUTHENTICATION_REQUESTED = 17,
338 SET_CONNECTION_ENCRYPTION = 20,
339 CHANGE_CONNECTION_LINK_KEY = 21,
340 MASTER_LINK_KEY = 22,
341 REMOTE_NAME_REQUEST = 23,
342 REMOTE_NAME_REQUEST_CANCEL = 24,
343 READ_REMOTE_SUPPORTED_FEATURES = 25,
344 READ_REMOTE_EXTENDED_FEATURES = 26,
345 READ_REMOTE_VERSION_INFORMATION = 27,
346 READ_CLOCK_OFFSET = 30,
347 READ_LMP_HANDLE = 31,
348 HOLD_MODE = 41,
349 SNIFF_MODE = 42,
350 EXIT_SNIFF_MODE = 43,
351 QOS_SETUP = 46,
352 ROLE_DISCOVERY = 47,
353 SWITCH_ROLE = 50,
354 READ_LINK_POLICY_SETTINGS = 51,
355 WRITE_LINK_POLICY_SETTINGS = 52,
356 READ_DEFAULT_LINK_POLICY_SETTINGS = 53,
357 WRITE_DEFAULT_LINK_POLICY_SETTINGS = 54,
358 FLOW_SPECIFICATION = 55,
359 SET_EVENT_MASK = 56,
360 RESET = 57,
361 SET_EVENT_FILTER = 60,
362 FLUSH = 61,
363 READ_PIN_TYPE = 62,
364 WRITE_PIN_TYPE = 63,
365 READ_STORED_LINK_KEY = 65,
366 WRITE_STORED_LINK_KEY = 66,
367 DELETE_STORED_LINK_KEY = 67,
368 WRITE_LOCAL_NAME = 70,
369 READ_LOCAL_NAME = 71,
370 READ_CONNECTION_ACCEPT_TIMEOUT = 72,
371 WRITE_CONNECTION_ACCEPT_TIMEOUT = 73,
372 READ_PAGE_TIMEOUT = 74,
373 WRITE_PAGE_TIMEOUT = 75,
374 READ_SCAN_ENABLE = 76,
375 WRITE_SCAN_ENABLE = 77,
376 READ_PAGE_SCAN_ACTIVITY = 80,
377 WRITE_PAGE_SCAN_ACTIVITY = 81,
378 READ_INQUIRY_SCAN_ACTIVITY = 82,
379 WRITE_INQUIRY_SCAN_ACTIVITY = 83,
380 READ_AUTHENTICATION_ENABLE = 84,
381 WRITE_AUTHENTICATION_ENABLE = 85,
382 READ_CLASS_OF_DEVICE = 90,
383 WRITE_CLASS_OF_DEVICE = 91,
384 READ_VOICE_SETTING = 92,
385 WRITE_VOICE_SETTING = 93,
386 READ_AUTOMATIC_FLUSH_TIMEOUT = 94,
387 WRITE_AUTOMATIC_FLUSH_TIMEOUT = 95,
388 READ_NUM_BROADCAST_RETRANSMITS = 96,
389 WRITE_NUM_BROADCAST_RETRANSMITS = 97,
390 READ_HOLD_MODE_ACTIVITY = 100,
391 WRITE_HOLD_MODE_ACTIVITY = 101,
392 READ_TRANSMIT_POWER_LEVEL = 102,
393 READ_SYNCHRONOUS_FLOW_CONTROL_ENABLE = 103,
394 WRITE_SYNCHRONOUS_FLOW_CONTROL_ENABLE = 104,
395 SET_CONTROLLER_TO_HOST_FLOW_CONTROL = 105,
396 HOST_BUFFER_SIZE = 106,
397 HOST_NUM_COMPLETED_PACKETS = 107,
398 READ_LINK_SUPERVISION_TIMEOUT = 110,
399 WRITE_LINK_SUPERVISION_TIMEOUT = 111,
400 READ_NUMBER_OF_SUPPORTED_IAC = 112,
401 READ_CURRENT_IAC_LAP = 113,
402 WRITE_CURRENT_IAC_LAP = 114,
403 SET_AFH_HOST_CHANNEL_CLASSIFICATION = 121,
404 READ_INQUIRY_SCAN_TYPE = 124,
405 WRITE_INQUIRY_SCAN_TYPE = 125,
406 READ_INQUIRY_MODE = 126,
407 WRITE_INQUIRY_MODE = 127,
408 READ_PAGE_SCAN_TYPE = 130,
409 WRITE_PAGE_SCAN_TYPE = 131,
410 READ_AFH_CHANNEL_ASSESSMENT_MODE = 132,
411 WRITE_AFH_CHANNEL_ASSESSMENT_MODE = 133,
412 READ_LOCAL_VERSION_INFORMATION = 143,
413 READ_LOCAL_SUPPORTED_FEATURES = 145,
414 READ_LOCAL_EXTENDED_FEATURES = 146,
415 READ_BUFFER_SIZE = 147,
416 READ_BD_ADDR = 151,
417 READ_FAILED_CONTACT_COUNTER = 152,
418 RESET_FAILED_CONTACT_COUNTER = 153,
419 READ_LINK_QUALITY = 154,
420 READ_RSSI = 155,
421 READ_AFH_CHANNEL_MAP = 156,
422 READ_CLOCK = 157,
423 READ_LOOPBACK_MODE = 160,
424 WRITE_LOOPBACK_MODE = 161,
425 ENABLE_DEVICE_UNDER_TEST_MODE = 162,
426 SETUP_SYNCHRONOUS_CONNECTION = 163,
427 ACCEPT_SYNCHRONOUS_CONNECTION = 164,
428 REJECT_SYNCHRONOUS_CONNECTION = 165,
429 READ_EXTENDED_INQUIRY_RESPONSE = 170,
430 WRITE_EXTENDED_INQUIRY_RESPONSE = 171,
431 REFRESH_ENCRYPTION_KEY = 172,
432 SNIFF_SUBRATING = 174,
433 READ_SIMPLE_PAIRING_MODE = 175,
434 WRITE_SIMPLE_PAIRING_MODE = 176,
435 READ_LOCAL_OOB_DATA = 177,
436 READ_INQUIRY_RESPONSE_TRANSMIT_POWER_LEVEL = 180,
437 WRITE_INQUIRY_TRANSMIT_POWER_LEVEL = 181,
438 IO_CAPABILITY_REQUEST_REPLY = 187,
439 USER_CONFIRMATION_REQUEST_REPLY = 190,
440 USER_CONFIRMATION_REQUEST_NEGATIVE_REPLY = 191,
441 USER_PASSKEY_REQUEST_REPLY = 192,
442 USER_PASSKEY_REQUEST_NEGATIVE_REPLY = 193,
443 REMOTE_OOB_DATA_REQUEST_REPLY = 194,
444 WRITE_SIMPLE_PAIRING_DEBUG_MODE = 195,
445 REMOTE_OOB_DATA_REQUEST_NEGATIVE_REPLY = 197,
446 SEND_KEYPRESS_NOTIFICATION = 202,
447 IO_CAPABILITY_REQUEST_NEGATIVE_REPLY = 203,
448 READ_ENCRYPTION_KEY_SIZE = 204,
449 READ_DATA_BLOCK_SIZE = 232,
450 READ_LE_HOST_SUPPORT = 245,
451 WRITE_LE_HOST_SUPPORT = 246,
452 LE_SET_EVENT_MASK = 250,
453 LE_READ_BUFFER_SIZE = 251,
454 LE_READ_LOCAL_SUPPORTED_FEATURES = 252,
455 LE_SET_RANDOM_ADDRESS = 254,
456 LE_SET_ADVERTISING_PARAMETERS = 255,
457 LE_READ_ADVERTISING_CHANNEL_TX_POWER = 256,
458 LE_SET_ADVERTISING_DATA = 257,
459 LE_SET_SCAN_RESPONSE_DATA = 260,
460 LE_SET_ADVERTISING_ENABLE = 261,
461 LE_SET_SCAN_PARAMETERS = 262,
462 LE_SET_SCAN_ENABLE = 263,
463 LE_CREATE_CONNECTION = 264,
464 LE_CREATE_CONNECTION_CANCEL = 265,
465 LE_READ_WHITE_LIST_SIZE = 266,
466 LE_CLEAR_WHITE_LIST = 267,
467 LE_ADD_DEVICE_TO_WHITE_LIST = 270,
468 LE_REMOVE_DEVICE_FROM_WHITE_LIST = 271,
469 LE_CONNECTION_UPDATE = 272,
470 LE_SET_HOST_CHANNEL_CLASSIFICATION = 273,
471 LE_READ_CHANNEL_MAP = 274,
472 LE_READ_REMOTE_FEATURES = 275,
473 LE_ENCRYPT = 276,
474 LE_RAND = 277,
475 LE_START_ENCRYPTION = 280,
476 LE_LONG_TERM_KEY_REQUEST_REPLY = 281,
477 LE_LONG_TERM_KEY_REQUEST_NEGATIVE_REPLY = 282,
478 LE_READ_SUPPORTED_STATES = 283,
479 LE_RECEIVER_TEST = 284,
480 LE_TRANSMITTER_TEST = 285,
481 LE_TEST_END = 286,
482 ENHANCED_SETUP_SYNCHRONOUS_CONNECTION = 293,
483 ENHANCED_ACCEPT_SYNCHRONOUS_CONNECTION = 294,
484 READ_LOCAL_SUPPORTED_CODECS = 295,
485 READ_SECURE_CONNECTIONS_HOST_SUPPORT = 322,
486 WRITE_SECURE_CONNECTIONS_HOST_SUPPORT = 323,
487 READ_LOCAL_OOB_EXTENDED_DATA = 326,
488 WRITE_SECURE_CONNECTIONS_TEST_MODE = 327,
489 LE_REMOTE_CONNECTION_PARAMETER_REQUEST_REPLY = 334,
490 LE_REMOTE_CONNECTION_PARAMETER_REQUEST_NEGATIVE_REPLY = 335,
491 LE_SET_DATA_LENGTH = 336,
492 LE_READ_SUGGESTED_DEFAULT_DATA_LENGTH = 337,
493 LE_WRITE_SUGGESTED_DEFAULT_DATA_LENGTH = 340,
494 LE_READ_LOCAL_P_256_PUBLIC_KEY_COMMAND = 341,
495 LE_GENERATE_DHKEY_COMMAND = 342,
496 LE_ADD_DEVICE_TO_RESOLVING_LIST = 343,
497 LE_REMOVE_DEVICE_FROM_RESOLVING_LIST = 344,
498 LE_CLEAR_RESOLVING_LIST = 345,
499 LE_READ_RESOLVING_LIST_SIZE = 346,
500 LE_READ_PEER_RESOLVABLE_ADDRESS = 347,
501 LE_READ_LOCAL_RESOLVABLE_ADDRESS = 350,
502 LE_SET_ADDRESS_RESOLUTION_ENABLE = 351,
503 LE_SET_RESOLVABLE_PRIVATE_ADDRESS_TIMEOUT = 352,
504 LE_READ_MAXIMUM_DATA_LENGTH = 353,
505 LE_READ_PHY = 354,
506 LE_SET_DEFAULT_PHY = 355,
507 LE_SET_PHY = 356,
508 LE_ENHANCED_RECEIVER_TEST = 357,
509 LE_ENHANCED_TRANSMITTER_TEST = 360,
510 LE_SET_EXTENDED_ADVERTISING_RANDOM_ADDRESS = 361,
511 LE_SET_EXTENDED_ADVERTISING_PARAMETERS = 362,
512 LE_SET_EXTENDED_ADVERTISING_DATA = 363,
513 LE_SET_EXTENDED_ADVERTISING_SCAN_RESPONSE = 364,
514 LE_SET_EXTENDED_ADVERTISING_ENABLE = 365,
515 LE_READ_MAXIMUM_ADVERTISING_DATA_LENGTH = 366,
516 LE_READ_NUMBER_OF_SUPPORTED_ADVERTISING_SETS = 367,
517 LE_REMOVE_ADVERTISING_SET = 370,
518 LE_CLEAR_ADVERTISING_SETS = 371,
519 LE_SET_PERIODIC_ADVERTISING_PARAM = 372,
520 LE_SET_PERIODIC_ADVERTISING_DATA = 373,
521 LE_SET_PERIODIC_ADVERTISING_ENABLE = 374,
522 LE_SET_EXTENDED_SCAN_PARAMETERS = 375,
523 LE_SET_EXTENDED_SCAN_ENABLE = 376,
524 LE_EXTENDED_CREATE_CONNECTION = 377,
525 LE_PERIODIC_ADVERTISING_CREATE_SYNC = 380,
526 LE_PERIODIC_ADVERTISING_CREATE_SYNC_CANCEL = 381,
527 LE_PERIODIC_ADVERTISING_TERMINATE_SYNC = 382,
528 LE_ADD_DEVICE_TO_PERIODIC_ADVERTISING_LIST = 383,
529 LE_REMOVE_DEVICE_FROM_PERIODIC_ADVERTISING_LIST = 384,
530 LE_CLEAR_PERIODIC_ADVERTISING_LIST = 385,
531 LE_READ_PERIODIC_ADVERTISING_LIST_SIZE = 386,
532 LE_READ_TRANSMIT_POWER = 387,
533 LE_READ_RF_PATH_COMPENSATION_POWER = 390,
534 LE_WRITE_RF_PATH_COMPENSATION_POWER = 391,
535 LE_SET_PRIVACY_MODE = 392,
536}
537
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700538packet CommandPacket {
Myles Watson1d8aa282019-04-22 14:16:41 -0700539 op_code : OpCode,
540 _size_(_payload_) : 8,
541 _payload_,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700542}
543
544// Packets for interfaces
545
Myles Watson1d8aa282019-04-22 14:16:41 -0700546packet DiscoveryCommand : CommandPacket { _payload_, }
Myles Watson1d8aa282019-04-22 14:16:41 -0700547packet ConnectionManagementCommand : CommandPacket { _payload_, }
548packet SecurityCommand : CommandPacket { _payload_, }
549packet ScoConnectionCommand : CommandPacket { _payload_, }
550packet LeAdvertisingCommand : CommandPacket { _payload_, }
Myles Watson742597d2019-10-14 16:23:38 -0700551packet LeScanningCommand : CommandPacket { _payload_, }
Myles Watson1d8aa282019-04-22 14:16:41 -0700552packet LeConnectionManagementCommand : CommandPacket { _payload_, }
553packet LeSecurityCommand : CommandPacket { _payload_, }
554packet VendorCommand : CommandPacket { _payload_, }
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700555
556// HCI Event Packets
557
558enum EventCode : 8 {
559 INQUIRY_COMPLETE = 0x01,
560 INQUIRY_RESULT = 0x02,
561 CONNECTION_COMPLETE = 0x03,
562 CONNECTION_REQUEST = 0x04,
563 DISCONNECTION_COMPLETE = 0x05,
564 AUTHENTICATION_COMPLETE = 0x06,
565 REMOTE_NAME_REQUEST_COMPLETE = 0x07,
566 ENCRYPTION_CHANGE = 0x08,
567 CHANGE_CONNECTION_LINK_KEY_COMPLETE = 0x09,
568 MASTER_LINK_KEY_COMPLETE = 0x0A,
569 READ_REMOTE_SUPPORTED_FEATURES_COMPLETE = 0x0B,
570 READ_REMOTE_VERSION_INFORMATION_COMPLETE = 0x0C,
571 QOS_SETUP_COMPLETE = 0x0D,
572 COMMAND_COMPLETE = 0x0E,
573 COMMAND_STATUS = 0x0F,
574 HARDWARE_ERROR = 0x10,
575 FLUSH_OCCURRED = 0x11,
576 ROLE_CHANGE = 0x12,
577 NUMBER_OF_COMPLETED_PACKETS = 0x13,
578 MODE_CHANGE = 0x14,
579 RETURN_LINK_KEYS = 0x15,
580 PIN_CODE_REQUEST = 0x16,
581 LINK_KEY_REQUEST = 0x17,
582 LINK_KEY_NOTIFICATION = 0x18,
583 LOOPBACK_COMMAND = 0x19,
584 DATA_BUFFER_OVERFLOW = 0x1A,
585 MAX_SLOTS_CHANGE = 0x1B,
586 READ_CLOCK_OFFSET_COMPLETE = 0x1C,
Chienyuan7eb23652019-09-11 16:37:30 +0800587 CONNECTION_PACKET_TYPE_CHANGED = 0x1D,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700588 QOS_VIOLATION = 0x1E,
589 PAGE_SCAN_REPETITION_MODE_CHANGE = 0x20,
590 FLOW_SPECIFICATION_COMPLETE = 0x21,
591 INQUIRY_RESULT_WITH_RSSI = 0x22,
592 READ_REMOTE_EXTENDED_FEATURES_COMPLETE = 0x23,
593 SYNCHRONOUS_CONNECTION_COMPLETE = 0x2C,
594 SYNCHRONOUS_CONNECTION_CHANGED = 0x2D,
595 SNIFF_SUBRATING = 0x2E,
596 EXTENDED_INQUIRY_RESULT = 0x2F,
597 ENCRYPTION_KEY_REFRESH_COMPLETE = 0x30,
598 IO_CAPABILITY_REQUEST = 0x31,
599 IO_CAPABILITY_RESPONSE = 0x32,
600 USER_CONFIRMATION_REQUEST = 0x33,
601 USER_PASSKEY_REQUEST = 0x34,
602 REMOTE_OOB_DATA_REQUEST = 0x35,
603 SIMPLE_PAIRING_COMPLETE = 0x36,
604 LINK_SUPERVISION_TIMEOUT_CHANGED = 0x38,
605 ENHANCED_FLUSH_COMPLETE = 0x39,
606 USER_PASSKEY_NOTIFICATION = 0x3B,
607 KEYPRESS_NOTIFICATION = 0x3C,
608 REMOTE_HOST_SUPPORTED_FEATURES_NOTIFICATION = 0x3D,
609 LE_META_EVENT = 0x3e,
610 NUMBER_OF_COMPLETED_DATA_BLOCKS = 0x48,
Chienyuanaa235aa2019-08-06 16:39:20 +0800611 VENDOR_SPECIFIC = 0xFF,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700612}
613
614packet EventPacket {
Myles Watson1d8aa282019-04-22 14:16:41 -0700615 event_code : EventCode,
616 _size_(_payload_) : 8,
617 _payload_,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700618}
619
620// LE Events
621
622enum SubeventCode : 8 {
623 CONNECTION_COMPLETE = 0x01,
624 ADVERTISING_REPORT = 0x02,
625 CONNECTION_UPDATE_COMPLETE = 0x03,
626 READ_REMOTE_FEATURES_COMPLETE = 0x04,
627 LONG_TERM_KEY_REQUEST = 0x05,
628 REMOTE_CONNECTION_PARAMETER_REQUEST = 0x06,
629 DATA_LENGTH_CHANGE = 0x07,
630 READ_LOCAL_P256_PUBLIC_KEY_COMPLETE = 0x08,
631 GENERATE_DHKEY_COMPLETE = 0x09,
632 ENHANCED_CONNECTION_COMPLETE = 0x0a,
633 DIRECTED_ADVERTISING_REPORT = 0x0b,
634 PHY_UPDATE_COMPLETE = 0x0c,
635 EXTENDED_ADVERTISING_REPORT = 0x0D,
636 PERIODIC_ADVERTISING_SYNC_ESTABLISHED = 0x0E,
637 PERIODIC_ADVERTISING_REPORT = 0x0F,
638 PERIODIC_ADVERTISING_SYNC_LOST = 0x10,
639 SCAN_TIMEOUT = 0x11,
640 ADVERTISING_SET_TERMINATED = 0x12,
641 SCAN_REQUEST_RECEIVED = 0x13,
642}
643
644// Common definitions for commands and events
645
646enum FeatureFlag : 1 {
647 UNSUPPORTED = 0,
648 SUPPORTED = 1,
649}
650
Myles Watson38ea5ac2019-05-08 16:15:01 -0700651enum ErrorCode: 8 {
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700652 SUCCESS = 0x00,
653 UNKNOWN_HCI_COMMAND = 0x01,
654 UNKNOWN_CONNECTION = 0x02,
655 HARDWARE_FAILURE = 0x03,
656 PAGE_TIMEOUT = 0x04,
657 AUTHENTICATION_FAILURE = 0x05,
658 PIN_OR_KEY_MISSING = 0x06,
659 MEMORY_CAPACITY_EXCEEDED = 0x07,
660 CONNECTION_TIMEOUT = 0x08,
661 CONNECTION_LIMIT_EXCEEDED = 0x09,
662 SYNCHRONOUS_CONNECTION_LIMIT_EXCEEDED = 0x0A,
663 CONNECTION_ALREADY_EXISTS = 0x0B,
664 COMMAND_DISALLOWED = 0x0C,
665 CONNECTION_REJECTED_LIMITED_RESOURCES = 0x0D,
666 CONNECTION_REJECTED_SECURITY_REASONS = 0x0E,
667 CONNECTION_REJECTED_UNACCEPTABLE_BD_ADDR = 0x0F,
668 CONNECTION_ACCEPT_TIMEOUT = 0x10,
669 UNSUPORTED_FEATURE_OR_PARAMETER_VALUE = 0x11,
670 INVALID_HCI_COMMAND_PARAMETERS = 0x12,
671 REMOTE_USER_TERMINATED_CONNECTION = 0x13,
672 REMOTE_DEVICE_TERMINATED_CONNECTION_LOW_RESOURCES = 0x14,
673 REMOTE_DEVICE_TERMINATED_CONNECTION_POWER_OFF = 0x15,
674 CONNECTION_TERMINATED_BY_LOCAL_HOST = 0x16,
675 REPEATED_ATTEMPTS = 0x17,
676 PAIRING_NOT_ALLOWED = 0x18,
677 UNKNOWN_LMP_PDU = 0x19,
678 UNSUPPORTED_REMOTE_OR_LMP_FEATURE = 0x1A,
679 SCO_OFFSET_REJECTED = 0x1B,
680 SCO_INTERVAL_REJECTED = 0x1C,
681 SCO_AIR_MODE_REJECTED = 0x1D,
682 INVALID_LMP_OR_LL_PARAMETERS = 0x1E,
683 UNSPECIFIED_ERROR = 0x1F,
684 UNSUPPORTED_LMP_OR_LL_PARAMETER = 0x20,
685 ROLE_CHANGE_NOT_ALLOWED = 0x21,
Chienyuanf58d5112019-11-14 20:25:26 +0800686 ENCRYPTION_MODE_NOT_ACCEPTABLE = 0x25,
687 CONTROLLER_BUSY = 0x3A,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700688}
689
690// Events that are defined with their respective commands
691
Myles Watson1d8aa282019-04-22 14:16:41 -0700692packet CommandComplete : EventPacket (event_code = COMMAND_COMPLETE){
693 num_hci_command_packets : 8,
694 command_op_code : OpCode,
695 _payload_,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700696}
697
Myles Watson1d8aa282019-04-22 14:16:41 -0700698packet CommandStatus : EventPacket (event_code = COMMAND_STATUS){
Myles Watson38ea5ac2019-05-08 16:15:01 -0700699 status : ErrorCode, // SUCCESS means PENDING
Myles Watson1d8aa282019-04-22 14:16:41 -0700700 num_hci_command_packets : 8,
701 command_op_code : OpCode,
702 _payload_,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700703}
704
Myles Watsonb39fc3e2019-06-12 14:57:46 -0700705 // Credits
706packet NoCommandComplete : CommandComplete (command_op_code = NONE){
707}
708
Chris Mantonb3650842019-10-03 17:31:12 -0700709struct Lap { // Lower Address Part
710 lap : 6,
711 _reserved_ : 2,
712 _fixed_ = 0x9e8b : 16,
713}
714
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700715 // LINK_CONTROL
Myles Watson1d8aa282019-04-22 14:16:41 -0700716packet Inquiry : DiscoveryCommand (op_code = INQUIRY) {
Chris Mantonb3650842019-10-03 17:31:12 -0700717 lap : Lap,
Myles Watson1d8aa282019-04-22 14:16:41 -0700718 inquiry_length : 8, // 0x1 - 0x30 (times 1.28s)
719 num_responses : 8, // 0x00 unlimited
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700720}
721
Myles Watson1d8aa282019-04-22 14:16:41 -0700722packet InquiryStatus : CommandStatus (command_op_code = INQUIRY) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700723}
724
Myles Watson1d8aa282019-04-22 14:16:41 -0700725packet InquiryCancel : DiscoveryCommand (op_code = INQUIRY_CANCEL) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700726}
727
Myles Watson1d8aa282019-04-22 14:16:41 -0700728packet InquiryCancelComplete : CommandComplete (command_op_code = INQUIRY_CANCEL) {
Myles Watson38ea5ac2019-05-08 16:15:01 -0700729 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700730}
731
Myles Watson1d8aa282019-04-22 14:16:41 -0700732packet PeriodicInquiryMode : DiscoveryCommand (op_code = PERIODIC_INQUIRY_MODE) {
Chris Manton16d20012019-10-14 13:11:55 -0700733 max_period_length : 16, // Range 0x0003 to 0xffff (times 1.28s)
734 min_period_length : 16, // Range 0x0002 to 0xfffe (times 1.28s)
735 lap : Lap,
736 inquiry_length : 8, // 0x1 - 0x30 (times 1.28s)
737 num_responses : 8, // 0x00 unlimited
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700738}
739
Myles Watson1d8aa282019-04-22 14:16:41 -0700740packet PeriodicInquiryModeComplete : CommandComplete (command_op_code = PERIODIC_INQUIRY_MODE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -0700741 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700742}
743
Myles Watson1d8aa282019-04-22 14:16:41 -0700744packet ExitPeriodicInquiryMode : DiscoveryCommand (op_code = EXIT_PERIODIC_INQUIRY_MODE) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700745}
746
Myles Watson1d8aa282019-04-22 14:16:41 -0700747packet ExitPeriodicInquiryModeComplete : CommandComplete (command_op_code = EXIT_PERIODIC_INQUIRY_MODE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -0700748 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700749}
750
751enum PageScanRepetitionMode : 8 {
752 R0 = 0x00,
753 R1 = 0x01,
754 R2 = 0x02,
755}
756
757enum ClockOffsetValid : 1 {
758 INVALID = 0,
759 VALID = 1,
760}
761
Myles Watson7a5b7232019-04-08 16:41:33 -0700762enum CreateConnectionRoleSwitch : 8 {
763 REMAIN_MASTER = 0x00,
764 ALLOW_ROLE_SWITCH = 0x01,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700765}
766
Myles Watson38ea5ac2019-05-08 16:15:01 -0700767packet CreateConnection : ConnectionManagementCommand (op_code = CREATE_CONNECTION) {
Myles Watson1d8aa282019-04-22 14:16:41 -0700768 bd_addr : Address,
769 packet_type : 16,
770 page_scan_repetition_mode : PageScanRepetitionMode,
771 _reserved_ : 8,
772 clock_offset : 15,
773 clock_offset_valid : ClockOffsetValid,
774 allow_role_switch : CreateConnectionRoleSwitch,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700775}
776
Myles Watson1d8aa282019-04-22 14:16:41 -0700777packet CreateConnectionStatus : CommandStatus (command_op_code = CREATE_CONNECTION) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700778}
779
780enum DisconnectReason : 8 {
781 AUTHENTICATION_FAILURE = 0x05,
782 REMOTE_USER_TERMINATED_CONNECTION = 0x13,
783 REMOTE_DEVICE_TERMINATED_CONNECTION_LOW_RESOURCES = 0x14,
784 REMOTE_DEVICE_TERMINATED_CONNECTION_POWER_OFF = 0x15,
785 UNSUPPORTED_REMOTE_FEATURE = 0x1A,
786 PAIRING_WITH_UNIT_KEY_NOT_SUPPORTED = 0x29,
787 UNACCEPTABLE_CONNECTION_PARAMETERS = 0x3B,
788}
789
Myles Watson1d8aa282019-04-22 14:16:41 -0700790packet Disconnect : ConnectionManagementCommand (op_code = DISCONNECT) {
791 connection_handle : 12,
792 _reserved_ : 4,
793 reason : DisconnectReason,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700794}
795
Myles Watson1d8aa282019-04-22 14:16:41 -0700796packet DisconnectStatus : CommandStatus (command_op_code = DISCONNECT) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700797}
798
Myles Watson38ea5ac2019-05-08 16:15:01 -0700799packet CreateConnectionCancel : ConnectionManagementCommand (op_code = CREATE_CONNECTION_CANCEL) {
Myles Watson1d8aa282019-04-22 14:16:41 -0700800 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700801}
802
Myles Watson1d8aa282019-04-22 14:16:41 -0700803packet CreateConnectionCancelComplete : CommandComplete (command_op_code = CREATE_CONNECTION_CANCEL) {
Myles Watson38ea5ac2019-05-08 16:15:01 -0700804 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -0700805 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700806}
807
808enum AcceptConnectionRequestRole : 8 {
809 BECOME_MASTER = 0x00,
810 REMAIN_SLAVE = 0x01,
811}
812
Myles Watson38ea5ac2019-05-08 16:15:01 -0700813packet AcceptConnectionRequest : ConnectionManagementCommand (op_code = ACCEPT_CONNECTION_REQUEST) {
Myles Watson1d8aa282019-04-22 14:16:41 -0700814 bd_addr : Address,
815 role : AcceptConnectionRequestRole,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700816}
817
Myles Watson1d8aa282019-04-22 14:16:41 -0700818packet AcceptConnectionRequestStatus : CommandStatus (command_op_code = ACCEPT_CONNECTION_REQUEST) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700819}
820
821enum RejectConnectionReason : 8 {
822 LIMITED_RESOURCES = 0x0D,
823 SECURITY_REASONS = 0x0E,
824 UNACCEPTABLE_BD_ADDR = 0x0F,
825}
826
Myles Watson38ea5ac2019-05-08 16:15:01 -0700827packet RejectConnectionRequest : ConnectionManagementCommand (op_code = REJECT_CONNECTION_REQUEST) {
Myles Watson1d8aa282019-04-22 14:16:41 -0700828 bd_addr : Address,
829 reason : RejectConnectionReason,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700830}
831
Myles Watson1d8aa282019-04-22 14:16:41 -0700832packet RejectConnectionRequestStatus : CommandStatus (command_op_code = REJECT_CONNECTION_REQUEST) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700833}
834
Myles Watson1d8aa282019-04-22 14:16:41 -0700835packet LinkKeyRequestReply : SecurityCommand (op_code = LINK_KEY_REQUEST_REPLY) {
836 bd_addr : Address,
Chienyuan4d7cc812019-07-12 18:00:12 +0800837 link_key : 8[16],
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700838}
839
Myles Watson1d8aa282019-04-22 14:16:41 -0700840packet LinkKeyRequestReplyComplete : CommandComplete (command_op_code = LINK_KEY_REQUEST_REPLY) {
Myles Watson38ea5ac2019-05-08 16:15:01 -0700841 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700842}
843
Myles Watson1d8aa282019-04-22 14:16:41 -0700844packet LinkKeyRequestNegativeReply : SecurityCommand (op_code = LINK_KEY_REQUEST_NEGATIVE_REPLY) {
845 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700846}
847
Myles Watson1d8aa282019-04-22 14:16:41 -0700848packet LinkKeyRequestNegativeReplyComplete : CommandComplete (command_op_code = LINK_KEY_REQUEST_NEGATIVE_REPLY) {
Myles Watson38ea5ac2019-05-08 16:15:01 -0700849 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -0700850 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700851}
852
Myles Watson1d8aa282019-04-22 14:16:41 -0700853packet PinCodeRequestReply : SecurityCommand (op_code = PIN_CODE_REQUEST_REPLY) {
854 bd_addr : Address,
855 pin_code_length : 5, // 0x01 - 0x10
856 _reserved_ : 3,
Chienyuan4d7cc812019-07-12 18:00:12 +0800857 pin_code : 8[16], // string parameter, first octet first
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700858}
859
Myles Watson1d8aa282019-04-22 14:16:41 -0700860packet PinCodeRequestReplyComplete : CommandComplete (command_op_code = PIN_CODE_REQUEST_REPLY) {
Myles Watson38ea5ac2019-05-08 16:15:01 -0700861 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -0700862 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700863}
864
Myles Watson1d8aa282019-04-22 14:16:41 -0700865packet PinCodeRequestNegativeReply : SecurityCommand (op_code = PIN_CODE_REQUEST_NEGATIVE_REPLY) {
866 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700867}
868
Myles Watson1d8aa282019-04-22 14:16:41 -0700869packet PinCodeRequestNegativeReplyComplete : CommandComplete (command_op_code = PIN_CODE_REQUEST_NEGATIVE_REPLY) {
Myles Watson38ea5ac2019-05-08 16:15:01 -0700870 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -0700871 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700872}
873
Myles Watson1d8aa282019-04-22 14:16:41 -0700874packet ChangeConnectionPacketType : ConnectionManagementCommand (op_code = CHANGE_CONNECTION_PACKET_TYPE) {
875 connection_handle : 12,
876 _reserved_ : 4,
877 packet_type : 16,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700878}
879
Myles Watson1d8aa282019-04-22 14:16:41 -0700880packet ChangeConnectionPacketTypeStatus : CommandStatus (command_op_code = CHANGE_CONNECTION_PACKET_TYPE) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700881}
882
Myles Watson1d8aa282019-04-22 14:16:41 -0700883packet AuthenticationRequested : ConnectionManagementCommand (op_code = AUTHENTICATION_REQUESTED) {
884 connection_handle : 12,
885 _reserved_ : 4,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700886}
887
Myles Watson1d8aa282019-04-22 14:16:41 -0700888packet AuthenticationRequestedStatus : CommandStatus (command_op_code = AUTHENTICATION_REQUESTED) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700889}
890
Myles Watson1d8aa282019-04-22 14:16:41 -0700891packet SetConnectionEncryption : ConnectionManagementCommand (op_code = SET_CONNECTION_ENCRYPTION) {
892 connection_handle : 12,
893 _reserved_ : 4,
894 encryption_enable : Enable,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700895}
896
Myles Watson1d8aa282019-04-22 14:16:41 -0700897packet SetConnectionEncryptionStatus : CommandStatus (command_op_code = SET_CONNECTION_ENCRYPTION) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700898}
899
Myles Watson1d8aa282019-04-22 14:16:41 -0700900packet ChangeConnectionLinkKey : ConnectionManagementCommand (op_code = CHANGE_CONNECTION_LINK_KEY) {
901 connection_handle : 12,
902 _reserved_ : 4,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700903}
904
Myles Watson1d8aa282019-04-22 14:16:41 -0700905packet ChangeConnectionLinkKeyStatus : CommandStatus (command_op_code = CHANGE_CONNECTION_LINK_KEY) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700906}
907
908enum KeyFlag : 8 {
909 SEMI_PERMANENT = 0x00,
910 TEMPORARY = 0x01,
911}
912
Myles Watson1d8aa282019-04-22 14:16:41 -0700913packet MasterLinkKey : ConnectionManagementCommand (op_code = MASTER_LINK_KEY) {
914 key_flag : KeyFlag,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700915}
916
Myles Watson1d8aa282019-04-22 14:16:41 -0700917packet MasterLinkKeyStatus : CommandStatus (command_op_code = MASTER_LINK_KEY) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700918}
919
Myles Watson1d8aa282019-04-22 14:16:41 -0700920packet RemoteNameRequest : DiscoveryCommand (op_code = REMOTE_NAME_REQUEST) {
921 bd_addr : Address,
922 page_scan_repetition_mode : PageScanRepetitionMode,
923 _reserved_ : 8,
924 clock_offset : 15,
925 clock_offset_valid : ClockOffsetValid,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700926}
927
Myles Watson1d8aa282019-04-22 14:16:41 -0700928packet RemoteNameRequestStatus : CommandStatus (command_op_code = REMOTE_NAME_REQUEST) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700929}
930
Myles Watson1d8aa282019-04-22 14:16:41 -0700931packet RemoteNameRequestCancel : DiscoveryCommand (op_code = REMOTE_NAME_REQUEST_CANCEL) {
932 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700933}
934
Myles Watson1d8aa282019-04-22 14:16:41 -0700935packet RemoteNameRequestCancelComplete : CommandComplete (command_op_code = REMOTE_NAME_REQUEST_CANCEL) {
Myles Watson38ea5ac2019-05-08 16:15:01 -0700936 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -0700937 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700938}
939
Myles Watson1d8aa282019-04-22 14:16:41 -0700940packet ReadRemoteSupportedFeatures : DiscoveryCommand (op_code = READ_REMOTE_SUPPORTED_FEATURES) {
941 connection_handle : 12,
942 _reserved_ : 4,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700943}
944
Myles Watson1d8aa282019-04-22 14:16:41 -0700945packet ReadRemoteSupportedFeaturesStatus : CommandStatus (command_op_code = READ_REMOTE_SUPPORTED_FEATURES) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700946}
947
Myles Watson1d8aa282019-04-22 14:16:41 -0700948packet ReadRemoteExtendedFeatures : DiscoveryCommand (op_code = READ_REMOTE_EXTENDED_FEATURES) {
949 connection_handle : 12,
950 _reserved_ : 4,
951 page_number : 8,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700952}
953
Myles Watson1d8aa282019-04-22 14:16:41 -0700954packet ReadRemoteExtendedFeaturesStatus : CommandStatus (command_op_code = READ_REMOTE_EXTENDED_FEATURES) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700955}
956
Myles Watson1d8aa282019-04-22 14:16:41 -0700957packet ReadRemoteVersionInformation : DiscoveryCommand (op_code = READ_REMOTE_VERSION_INFORMATION) {
958 connection_handle : 12,
959 _reserved_ : 4,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700960}
961
Myles Watson1d8aa282019-04-22 14:16:41 -0700962packet ReadRemoteVersionInformationStatus : CommandStatus (command_op_code = READ_REMOTE_VERSION_INFORMATION) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700963}
964
Myles Watson1d8aa282019-04-22 14:16:41 -0700965packet ReadClockOffset : ConnectionManagementCommand (op_code = READ_CLOCK_OFFSET) {
966 connection_handle : 12,
967 _reserved_ : 4,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700968}
969
Myles Watson1d8aa282019-04-22 14:16:41 -0700970packet ReadClockOffsetStatus : CommandStatus (command_op_code = READ_CLOCK_OFFSET) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700971}
972
Myles Watson1d8aa282019-04-22 14:16:41 -0700973packet ReadLmpHandle : ConnectionManagementCommand (op_code = READ_LMP_HANDLE) {
974 connection_handle : 12,
975 _reserved_ : 4,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700976}
977
Myles Watson1d8aa282019-04-22 14:16:41 -0700978packet ReadLmpHandleComplete : CommandComplete (command_op_code = READ_LMP_HANDLE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -0700979 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -0700980 connection_handle : 12,
981 _reserved_ : 4,
982 lmp_handle : 8,
983 _reserved_ : 32,
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700984}
985
Myles Watson1d8aa282019-04-22 14:16:41 -0700986packet SetupSynchronousConnection : ScoConnectionCommand (op_code = SETUP_SYNCHRONOUS_CONNECTION) {
987 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700988}
989
Myles Watson1d8aa282019-04-22 14:16:41 -0700990packet AcceptSynchronousConnection : ScoConnectionCommand (op_code = ACCEPT_SYNCHRONOUS_CONNECTION) {
991 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700992}
993
Myles Watson1d8aa282019-04-22 14:16:41 -0700994packet RejectSynchronousConnection : ScoConnectionCommand (op_code = REJECT_SYNCHRONOUS_CONNECTION) {
995 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -0700996}
997
998enum IoCapability : 8 {
999 DISPLAY_ONLY = 0x00,
1000 DISPLAY_YES_NO = 0x01,
1001 KEYBOARD_ONLY = 0x02,
1002 NO_INPUT_NO_OUTPUT = 0x03,
1003}
1004
1005enum OobDataPresent : 8 {
1006 NOT_PRESENT = 0x00,
1007 P_192_PRESENT = 0x01,
1008 P_256_PRESENT = 0x02,
1009 P_192_AND_256_PRESENT = 0x03,
1010}
1011
1012enum AuthenticationRequirements : 8 {
1013 NO_BONDING = 0x00,
1014 NO_BONDING_MITM_PROTECTION = 0x01,
1015 DEDICATED_BONDING = 0x02,
1016 DEDICATED_BONDING_MITM_PROTECTION = 0x03,
1017 GENERAL_BONDING = 0x04,
1018 GENERAL_BONDING_MITM_PROTECTION = 0x05,
1019}
1020
Myles Watson1d8aa282019-04-22 14:16:41 -07001021packet IoCapabilityRequestReply : SecurityCommand (op_code = IO_CAPABILITY_REQUEST_REPLY) {
1022 bd_addr : Address,
1023 io_capability : IoCapability,
1024 oob_present : OobDataPresent,
1025 authentication_requirements : AuthenticationRequirements,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001026}
1027
Myles Watson1d8aa282019-04-22 14:16:41 -07001028packet IoCapabilityRequestReplyComplete : CommandComplete (command_op_code = IO_CAPABILITY_REQUEST_REPLY) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001029 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07001030 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001031}
1032
Myles Watson1d8aa282019-04-22 14:16:41 -07001033packet UserConfirmationRequestReply : SecurityCommand (op_code = USER_CONFIRMATION_REQUEST_REPLY) {
1034 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001035}
1036
Myles Watson1d8aa282019-04-22 14:16:41 -07001037packet UserConfirmationRequestReplyComplete : CommandComplete (command_op_code = USER_CONFIRMATION_REQUEST_REPLY) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001038 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07001039 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001040}
1041
Myles Watson1d8aa282019-04-22 14:16:41 -07001042packet UserConfirmationRequestNegativeReply : SecurityCommand (op_code = USER_CONFIRMATION_REQUEST_NEGATIVE_REPLY) {
1043 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001044}
1045
Myles Watson1d8aa282019-04-22 14:16:41 -07001046packet UserConfirmationRequestNegativeReplyComplete : CommandComplete (command_op_code = USER_CONFIRMATION_REQUEST_NEGATIVE_REPLY) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001047 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07001048 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001049}
1050
Myles Watson1d8aa282019-04-22 14:16:41 -07001051packet UserPasskeyRequestReply : SecurityCommand (op_code = USER_PASSKEY_REQUEST_REPLY) {
1052 bd_addr : Address,
1053 numeric_value : 32, // 000000-999999 decimal or 0x0-0xF423F
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001054}
1055
Chienyuanf58d5112019-11-14 20:25:26 +08001056packet UserPasskeyRequestReplyComplete : CommandComplete (command_op_code = USER_PASSKEY_REQUEST_REPLY) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001057 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07001058 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001059}
1060
Myles Watson1d8aa282019-04-22 14:16:41 -07001061packet UserPasskeyRequestNegativeReply : SecurityCommand (op_code = USER_PASSKEY_REQUEST_NEGATIVE_REPLY) {
1062 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001063}
1064
Myles Watson1d8aa282019-04-22 14:16:41 -07001065packet UserPasskeyRequestNegativeReplyComplete : CommandComplete (command_op_code = USER_PASSKEY_REQUEST_NEGATIVE_REPLY) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001066 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07001067 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001068}
1069
Myles Watson1d8aa282019-04-22 14:16:41 -07001070packet RemoteOobDataRequestReply : SecurityCommand (op_code = REMOTE_OOB_DATA_REQUEST_REPLY) {
Chienyuan4d7cc812019-07-12 18:00:12 +08001071 bd_addr : Address,
1072 c : 8[16],
1073 r : 8[16],
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001074}
1075
Myles Watson1d8aa282019-04-22 14:16:41 -07001076packet RemoteOobDataRequestReplyComplete : CommandComplete (command_op_code = REMOTE_OOB_DATA_REQUEST_REPLY) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001077 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07001078 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001079}
1080
Myles Watson1d8aa282019-04-22 14:16:41 -07001081packet RemoteOobDataRequestNegativeReply : SecurityCommand (op_code = REMOTE_OOB_DATA_REQUEST_NEGATIVE_REPLY) {
1082 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001083}
1084
Myles Watson1d8aa282019-04-22 14:16:41 -07001085packet RemoteOobDataRequestNegativeReplyComplete : CommandComplete (command_op_code = REMOTE_OOB_DATA_REQUEST_NEGATIVE_REPLY) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001086 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07001087 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001088}
1089
Myles Watson1d8aa282019-04-22 14:16:41 -07001090packet IoCapabilityRequestNegativeReply : SecurityCommand (op_code = IO_CAPABILITY_REQUEST_NEGATIVE_REPLY) {
1091 bd_addr : Address,
Myles Watson38ea5ac2019-05-08 16:15:01 -07001092 reason : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001093}
1094
Myles Watson1d8aa282019-04-22 14:16:41 -07001095packet IoCapabilityRequestNegativeReplyComplete : CommandComplete (command_op_code = IO_CAPABILITY_REQUEST_NEGATIVE_REPLY) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001096 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07001097 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001098}
1099
Myles Watson1d8aa282019-04-22 14:16:41 -07001100packet EnhancedSetupSynchronousConnection : ScoConnectionCommand (op_code = ENHANCED_SETUP_SYNCHRONOUS_CONNECTION) {
1101 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001102}
1103
Myles Watson1d8aa282019-04-22 14:16:41 -07001104packet EnhancedAcceptSynchronousConnection : ScoConnectionCommand (op_code = ENHANCED_ACCEPT_SYNCHRONOUS_CONNECTION) {
1105 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001106}
1107
1108
1109 // LINK_POLICY
Myles Watson1d8aa282019-04-22 14:16:41 -07001110packet HoldMode : ConnectionManagementCommand (op_code = HOLD_MODE) {
Chienyuan7eb23652019-09-11 16:37:30 +08001111 connection_handle : 12,
1112 _reserved_ : 4,
1113 hold_mode_max_interval: 16, // 0x0002-0xFFFE (1.25ms-40.9s)
1114 hold_mode_min_interval: 16, // 0x0002-0xFFFE (1.25ms-40.9s)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001115}
1116
Chienyuan7eb23652019-09-11 16:37:30 +08001117packet HoldModeStatus : CommandStatus (command_op_code = HOLD_MODE) {
1118}
1119
1120
Myles Watson1d8aa282019-04-22 14:16:41 -07001121packet SniffMode : ConnectionManagementCommand (op_code = SNIFF_MODE) {
Chienyuan7eb23652019-09-11 16:37:30 +08001122 connection_handle : 12,
1123 _reserved_ : 4,
1124 sniff_max_interval: 16, // 0x0002-0xFFFE (1.25ms-40.9s)
1125 sniff_min_interval: 16, // 0x0002-0xFFFE (1.25ms-40.9s)
1126 sniff_attempt: 16, // 0x0001-0x7FFF (1.25ms-40.9s)
1127 sniff_timeout: 16, // 0x0000-0x7FFF (0ms-40.9s)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001128}
1129
Chienyuan7eb23652019-09-11 16:37:30 +08001130packet SniffModeStatus : CommandStatus (command_op_code = SNIFF_MODE) {
1131}
1132
1133
Myles Watson1d8aa282019-04-22 14:16:41 -07001134packet ExitSniffMode : ConnectionManagementCommand (op_code = EXIT_SNIFF_MODE) {
Chienyuan7eb23652019-09-11 16:37:30 +08001135 connection_handle : 12,
1136 _reserved_ : 4,
1137}
1138
1139packet ExitSniffModeStatus : CommandStatus (command_op_code = EXIT_SNIFF_MODE) {
1140}
1141
1142enum ServiceType : 8 {
1143 NO_TRAFFIC = 0x00,
1144 BEST_EFFORT = 0x01,
1145 GUARANTEED = 0x02,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001146}
1147
Myles Watson1d8aa282019-04-22 14:16:41 -07001148packet QosSetup : ConnectionManagementCommand (op_code = QOS_SETUP) {
Chienyuan7eb23652019-09-11 16:37:30 +08001149 connection_handle : 12,
1150 _reserved_ : 4,
1151 _reserved_ : 8,
1152 service_type : ServiceType,
1153 token_rate : 32, // Octets/s
1154 peak_bandwidth : 32, // Octets/s
1155 latency : 32, // Octets/s
1156 delay_variation : 32, // microseconds
1157}
1158
1159packet QosSetupStatus : CommandStatus (command_op_code = QOS_SETUP) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001160}
1161
Myles Watson1d8aa282019-04-22 14:16:41 -07001162packet RoleDiscovery : ConnectionManagementCommand (op_code = ROLE_DISCOVERY) {
Chienyuan7eb23652019-09-11 16:37:30 +08001163 connection_handle : 12,
1164 _reserved_ : 4,
1165}
1166
1167enum Role : 8 {
1168 MASTER = 0x00,
1169 SLAVE = 0x01,
1170}
1171
1172packet RoleDiscoveryComplete : CommandComplete (command_op_code = ROLE_DISCOVERY) {
1173 status : ErrorCode,
1174 connection_handle : 12,
1175 _reserved_ : 4,
1176 current_role : Role,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001177}
1178
Myles Watson1d8aa282019-04-22 14:16:41 -07001179packet SwitchRole : ConnectionManagementCommand (op_code = SWITCH_ROLE) {
Chienyuan9145e7a2019-10-02 15:18:55 +08001180 bd_addr : Address,
1181 role : Role,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001182}
1183
Chienyuan9145e7a2019-10-02 15:18:55 +08001184packet SwitchRoleStatus : CommandStatus (command_op_code = SWITCH_ROLE) {
1185}
1186
1187
Myles Watson1d8aa282019-04-22 14:16:41 -07001188packet ReadLinkPolicySettings : ConnectionManagementCommand (op_code = READ_LINK_POLICY_SETTINGS) {
Chienyuan7eb23652019-09-11 16:37:30 +08001189 connection_handle : 12,
1190 _reserved_ : 4,
1191}
1192
1193enum LinkPolicy : 16 {
1194 ENABLE_ROLE_SWITCH = 0x01,
1195 ENABLE_HOLD_MODE = 0x02,
1196 ENABLE_SNIFF_MODE = 0x04,
Chienyuan9145e7a2019-10-02 15:18:55 +08001197 ENABLE_PARK_MODE = 0x08, // deprecated after 5.0
Chienyuan7eb23652019-09-11 16:37:30 +08001198}
1199
1200packet ReadLinkPolicySettingsComplete : CommandComplete (command_op_code = READ_LINK_POLICY_SETTINGS) {
1201 status : ErrorCode,
1202 connection_handle : 12,
1203 _reserved_ : 4,
1204 link_policy_settings : 16,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001205}
1206
Myles Watson1d8aa282019-04-22 14:16:41 -07001207packet WriteLinkPolicySettings : ConnectionManagementCommand (op_code = WRITE_LINK_POLICY_SETTINGS) {
Chienyuan7eb23652019-09-11 16:37:30 +08001208 connection_handle : 12,
1209 _reserved_ : 4,
1210 link_policy_settings : 16,
1211}
1212
1213packet WriteLinkPolicySettingsComplete : CommandComplete (command_op_code = WRITE_LINK_POLICY_SETTINGS) {
1214 status : ErrorCode,
1215 connection_handle : 12,
1216 _reserved_ : 4,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001217}
1218
Myles Watson1d8aa282019-04-22 14:16:41 -07001219packet ReadDefaultLinkPolicySettings : ConnectionManagementCommand (op_code = READ_DEFAULT_LINK_POLICY_SETTINGS) {
Chienyuan9145e7a2019-10-02 15:18:55 +08001220}
1221
1222packet ReadDefaultLinkPolicySettingsComplete : CommandComplete (command_op_code = READ_DEFAULT_LINK_POLICY_SETTINGS) {
1223 status : ErrorCode,
1224 default_link_policy_settings : 16,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001225}
1226
Myles Watson1d8aa282019-04-22 14:16:41 -07001227packet WriteDefaultLinkPolicySettings : ConnectionManagementCommand (op_code = WRITE_DEFAULT_LINK_POLICY_SETTINGS) {
Chienyuan9145e7a2019-10-02 15:18:55 +08001228 default_link_policy_settings : 16,
1229}
1230
1231packet WriteDefaultLinkPolicySettingsComplete : CommandComplete (command_op_code = WRITE_DEFAULT_LINK_POLICY_SETTINGS) {
1232 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001233}
1234
Chienyuan7eb23652019-09-11 16:37:30 +08001235enum FlowDirection : 8 {
1236 OUTGOING_FLOW = 0x00,
1237 INCOMING_FLOW = 0x01,
1238}
1239
Myles Watson1d8aa282019-04-22 14:16:41 -07001240packet FlowSpecification : ConnectionManagementCommand (op_code = FLOW_SPECIFICATION) {
Chienyuan7eb23652019-09-11 16:37:30 +08001241 connection_handle : 12,
1242 _reserved_ : 4,
1243 _reserved_ : 8,
1244 flow_direction : FlowDirection,
1245 service_type : ServiceType,
1246 token_rate : 32, // Octets/s
1247 token_bucket_size : 32,
1248 peak_bandwidth : 32, // Octets/s
1249 access_latency : 32, // Octets/s
1250}
1251
1252packet FlowSpecificationStatus : CommandStatus (command_op_code = FLOW_SPECIFICATION) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001253}
1254
Myles Watson1d8aa282019-04-22 14:16:41 -07001255packet SniffSubrating : ConnectionManagementCommand (op_code = SNIFF_SUBRATING) {
Chienyuan7eb23652019-09-11 16:37:30 +08001256 connection_handle : 12,
1257 _reserved_ : 4,
1258 maximum_latency : 16, // 0x0002-0xFFFE (1.25ms-40.9s)
1259 minimum_remote_timeout : 16, // 0x0000-0xFFFE (0-40.9s)
1260 minimum_local_timeout: 16, // 0x0000-0xFFFE (0-40.9s)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001261}
1262
Chienyuan7eb23652019-09-11 16:37:30 +08001263packet SniffSubratingComplete : CommandComplete (command_op_code = SNIFF_SUBRATING) {
1264 status : ErrorCode,
1265 connection_handle : 12,
1266 _reserved_ : 4,
1267}
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001268
1269 // CONTROLLER_AND_BASEBAND
Myles Watson1d8aa282019-04-22 14:16:41 -07001270packet SetEventMask : CommandPacket (op_code = SET_EVENT_MASK) {
1271 event_mask : 64,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001272}
1273
Myles Watson1d8aa282019-04-22 14:16:41 -07001274packet SetEventMaskComplete : CommandComplete (command_op_code = SET_EVENT_MASK) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001275 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001276}
1277
Myles Watson1d8aa282019-04-22 14:16:41 -07001278packet Reset : CommandPacket (op_code = RESET) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001279}
1280
Myles Watson1d8aa282019-04-22 14:16:41 -07001281packet ResetComplete : CommandComplete (command_op_code = RESET) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001282 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001283}
1284
Myles Watson46e942d2019-08-19 17:45:26 -07001285enum FilterType : 8 {
1286 CLEAR_ALL_FILTERS = 0x00,
1287 INQUIRY_RESULT = 0x01,
1288 CONNECTION_SETUP = 0x02,
1289}
1290
Myles Watson1d8aa282019-04-22 14:16:41 -07001291packet SetEventFilter : CommandPacket (op_code = SET_EVENT_FILTER) {
Myles Watson46e942d2019-08-19 17:45:26 -07001292 filter_type : FilterType,
1293 _body_,
1294}
1295
1296packet SetEventFilterComplete : CommandComplete (command_op_code = SET_EVENT_FILTER) {
1297 status : ErrorCode,
1298}
1299
1300packet SetEventFilterClearAll : SetEventFilter (filter_type = CLEAR_ALL_FILTERS) {
1301}
1302
1303enum FilterConditionType : 8 {
1304 ALL_DEVICES = 0x00,
1305 CLASS_OF_DEVICE = 0x01,
1306 ADDRESS = 0x02,
1307}
1308
1309packet SetEventFilterInquiryResult : SetEventFilter (filter_type = INQUIRY_RESULT) {
1310 filter_condition_type : FilterConditionType,
1311 _body_,
1312}
1313
1314packet SetEventFilterInquiryResultAllDevices : SetEventFilterInquiryResult (filter_condition_type = ALL_DEVICES) {
1315}
1316
1317packet SetEventFilterInquiryResultClassOfDevice : SetEventFilterInquiryResult (filter_condition_type = CLASS_OF_DEVICE) {
1318 class_of_device : ClassOfDevice,
1319 class_of_device_mask : ClassOfDevice,
1320}
1321
1322packet SetEventFilterInquiryResultAddress : SetEventFilterInquiryResult (filter_condition_type = ADDRESS) {
1323 address : Address,
1324}
1325
1326packet SetEventFilterConnectionSetup : SetEventFilter (filter_type = CONNECTION_SETUP) {
1327 filter_condition_type : FilterConditionType,
1328 _body_,
1329}
1330
1331enum AutoAcceptFlag : 8 {
1332 AUTO_ACCEPT_OFF = 0x01,
1333 AUTO_ACCEPT_ON_ROLE_SWITCH_DISABLED = 0x02,
1334 AUTO_ACCEPT_ON_ROLE_SWITCH_ENABLED = 0x03,
1335}
1336
1337packet SetEventFilterConnectionSetupAllDevices : SetEventFilterConnectionSetup (filter_condition_type = ALL_DEVICES) {
1338 auto_accept_flag : AutoAcceptFlag,
1339}
1340
1341packet SetEventFilterConnectionSetupClassOfDevice : SetEventFilterConnectionSetup (filter_condition_type = CLASS_OF_DEVICE) {
1342 class_of_device : ClassOfDevice,
1343 class_of_device_mask : ClassOfDevice,
1344 auto_accept_flag : AutoAcceptFlag,
1345}
1346
1347packet SetEventFilterConnectionSetupAddress : SetEventFilterConnectionSetup (filter_condition_type = ADDRESS) {
1348 address : Address,
1349 auto_accept_flag : AutoAcceptFlag,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001350}
1351
Myles Watson1d8aa282019-04-22 14:16:41 -07001352packet Flush : ConnectionManagementCommand (op_code = FLUSH) {
Chienyuan7eb23652019-09-11 16:37:30 +08001353 connection_handle : 12,
1354 _reserved_ : 4,
1355}
1356
1357packet FlushComplete : CommandComplete (command_op_code = FLUSH) {
1358 status : ErrorCode,
1359 connection_handle : 12,
1360 _reserved_ : 4,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001361}
1362
Myles Watson1d8aa282019-04-22 14:16:41 -07001363packet ReadPinType : CommandPacket (op_code = READ_PIN_TYPE) {
1364 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001365}
1366
Myles Watson1d8aa282019-04-22 14:16:41 -07001367packet WritePinType : CommandPacket (op_code = WRITE_PIN_TYPE) {
1368 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001369}
1370
Myles Watson1d8aa282019-04-22 14:16:41 -07001371packet CreateNewUnitKey : CommandPacket (op_code = CREATE_NEW_UNIT_KEY) {
1372 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001373}
1374
1375enum ReadStoredLinkKeyReadAllFlag : 8 {
1376 SPECIFIED_BD_ADDR = 0x00,
1377 ALL = 0x01,
1378}
1379
Myles Watson1d8aa282019-04-22 14:16:41 -07001380packet ReadStoredLinkKey : SecurityCommand (op_code = READ_STORED_LINK_KEY) {
1381 bd_addr : Address,
1382 read_all_flag : ReadStoredLinkKeyReadAllFlag,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001383}
1384
Myles Watson1d8aa282019-04-22 14:16:41 -07001385packet ReadStoredLinkKeyComplete : CommandComplete (command_op_code = READ_STORED_LINK_KEY) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001386 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07001387 max_num_keys : 16,
1388 num_keys_read : 16,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001389}
1390
Myles Watson2d234432019-08-19 13:33:27 -07001391struct KeyAndAddress {
1392 address : Address,
Chienyuan4d7cc812019-07-12 18:00:12 +08001393 link_key : 8[16],
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001394}
1395
Myles Watson2d234432019-08-19 13:33:27 -07001396packet WriteStoredLinkKey : SecurityCommand (op_code = WRITE_STORED_LINK_KEY) {
1397 _count_(keys_to_write) : 8, // 0x01-0x0B
1398 keys_to_write : KeyAndAddress[],
1399}
1400
Myles Watson1d8aa282019-04-22 14:16:41 -07001401packet WriteStoredLinkKeyComplete : CommandComplete (command_op_code = WRITE_STORED_LINK_KEY) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001402 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07001403 num_keys_written : 8,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001404}
1405
1406enum DeleteStoredLinkKeyDeleteAllFlag : 8 {
1407 SPECIFIED_BD_ADDR = 0x00,
1408 ALL = 0x01,
1409}
1410
Myles Watson1d8aa282019-04-22 14:16:41 -07001411packet DeleteStoredLinkKey : SecurityCommand (op_code = DELETE_STORED_LINK_KEY) {
1412 bd_addr : Address,
1413 delete_all_flag : DeleteStoredLinkKeyDeleteAllFlag,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001414}
1415
Myles Watson1d8aa282019-04-22 14:16:41 -07001416packet DeleteStoredLinkKeyComplete : CommandComplete (command_op_code = DELETE_STORED_LINK_KEY) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001417 status : ErrorCode,
Chienyuanf58d5112019-11-14 20:25:26 +08001418 num_keys_deleted : 16,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001419}
1420
Myles Watson1d8aa282019-04-22 14:16:41 -07001421packet WriteLocalName : CommandPacket (op_code = WRITE_LOCAL_NAME) {
Myles Watson2d234432019-08-19 13:33:27 -07001422 local_name : 8[248], // Null-terminated UTF-8 encoded name
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001423}
1424
Myles Watson1d8aa282019-04-22 14:16:41 -07001425packet WriteLocalNameComplete : CommandComplete (command_op_code = WRITE_LOCAL_NAME) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001426 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001427}
1428
Myles Watson1d8aa282019-04-22 14:16:41 -07001429packet ReadLocalName : CommandPacket (op_code = READ_LOCAL_NAME) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001430}
1431
Myles Watson1d8aa282019-04-22 14:16:41 -07001432packet ReadLocalNameComplete : CommandComplete (command_op_code = READ_LOCAL_NAME) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001433 status : ErrorCode,
Myles Watson2d234432019-08-19 13:33:27 -07001434 local_name : 8[248], // Null-terminated UTF-8 encoded name
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001435}
1436
Myles Watson38ea5ac2019-05-08 16:15:01 -07001437packet ReadConnectionAcceptTimeout : ConnectionManagementCommand (op_code = READ_CONNECTION_ACCEPT_TIMEOUT) {
Myles Watson1d8aa282019-04-22 14:16:41 -07001438 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001439}
1440
Myles Watson38ea5ac2019-05-08 16:15:01 -07001441packet WriteConnectionAcceptTimeout : ConnectionManagementCommand (op_code = WRITE_CONNECTION_ACCEPT_TIMEOUT) {
Myles Watson1d8aa282019-04-22 14:16:41 -07001442 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001443}
1444
Myles Watson1d8aa282019-04-22 14:16:41 -07001445packet ReadPageTimeout : DiscoveryCommand (op_code = READ_PAGE_TIMEOUT) {
Chris Manton4fda81a2019-10-02 16:13:31 -07001446}
1447
1448packet ReadPageTimeoutComplete : CommandComplete (command_op_code = READ_PAGE_TIMEOUT) {
1449 status : ErrorCode,
1450 page_timeout : 16,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001451}
1452
Myles Watson1d8aa282019-04-22 14:16:41 -07001453packet WritePageTimeout : DiscoveryCommand (op_code = WRITE_PAGE_TIMEOUT) {
Chris Manton499fb1d2019-10-15 16:02:42 -07001454 page_timeout : 16,
1455}
1456
1457packet WritePageTimeoutComplete : CommandComplete (command_op_code = WRITE_PAGE_TIMEOUT) {
1458 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001459}
1460
1461enum ScanEnable : 8 {
1462 NO_SCANS = 0x00,
1463 INQUIRY_SCAN_ONLY = 0x01,
1464 PAGE_SCAN_ONLY = 0x02,
1465 INQUIRY_AND_PAGE_SCAN = 0x03,
1466}
1467
Myles Watson1d8aa282019-04-22 14:16:41 -07001468packet ReadScanEnable : DiscoveryCommand (op_code = READ_SCAN_ENABLE) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001469}
1470
Myles Watson1d8aa282019-04-22 14:16:41 -07001471packet ReadScanEnableComplete : CommandComplete (command_op_code = READ_SCAN_ENABLE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001472 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07001473 scan_enable : ScanEnable,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001474}
1475
Myles Watson1d8aa282019-04-22 14:16:41 -07001476packet WriteScanEnable : DiscoveryCommand (op_code = WRITE_SCAN_ENABLE) {
1477 scan_enable : ScanEnable,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001478}
1479
Myles Watson1d8aa282019-04-22 14:16:41 -07001480packet WriteScanEnableComplete : CommandComplete (command_op_code = WRITE_SCAN_ENABLE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001481 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001482}
1483
Myles Watson1d8aa282019-04-22 14:16:41 -07001484packet ReadPageScanActivity : DiscoveryCommand (op_code = READ_PAGE_SCAN_ACTIVITY) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001485}
1486
Myles Watson1d8aa282019-04-22 14:16:41 -07001487packet ReadPageScanActivityComplete : CommandComplete (command_op_code = READ_PAGE_SCAN_ACTIVITY) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001488 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07001489 page_scan_interval : 16, // Range: 0x0012 to 0x1000; only even values are valid * 0x625 ms
1490 page_scan_window : 16, // 0x0011 to PageScanInterval
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001491}
1492
Myles Watson1d8aa282019-04-22 14:16:41 -07001493packet WritePageScanActivity : DiscoveryCommand (op_code = WRITE_PAGE_SCAN_ACTIVITY) {
1494 page_scan_interval : 16, // Range: 0x0012 to 0x1000; only even values are valid * 0x625 ms
1495 page_scan_window : 16, // 0x0011 to PageScanInterval
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001496}
1497
Myles Watson1d8aa282019-04-22 14:16:41 -07001498packet WritePageScanActivityComplete : CommandComplete (command_op_code = WRITE_PAGE_SCAN_ACTIVITY) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001499 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001500}
1501
Myles Watson1d8aa282019-04-22 14:16:41 -07001502packet ReadInquiryScanActivity : DiscoveryCommand (op_code = READ_INQUIRY_SCAN_ACTIVITY) {
Chris Mantonb3650842019-10-03 17:31:12 -07001503}
1504
1505packet ReadInquiryScanActivityComplete : CommandComplete (command_op_code = READ_INQUIRY_SCAN_ACTIVITY) {
1506 status : ErrorCode,
1507 inquiry_scan_interval : 16, // Range: 0x0012 to 0x1000; only even values are valid * 0x625 ms
1508 inquiry_scan_window : 16, // Range: 0x0011 to 0x1000
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001509}
1510
Myles Watson1d8aa282019-04-22 14:16:41 -07001511packet WriteInquiryScanActivity : DiscoveryCommand (op_code = WRITE_INQUIRY_SCAN_ACTIVITY) {
Chris Manton76ccca12019-10-02 21:54:41 -07001512 inquiry_scan_interval : 16, // Range: 0x0012 to 0x1000; only even values are valid * 0x625 ms
1513 inquiry_scan_window : 16, // Range: 0x0011 to 0x1000
1514}
1515
1516packet WriteInquiryScanActivityComplete : CommandComplete (command_op_code = WRITE_INQUIRY_SCAN_ACTIVITY) {
1517 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001518}
1519
1520enum AuthenticationEnable : 8 {
1521 NOT_REQUIRED = 0x00,
1522 REQUIRED = 0x01,
1523}
1524
Myles Watson1d8aa282019-04-22 14:16:41 -07001525packet ReadAuthenticationEnable : CommandPacket (op_code = READ_AUTHENTICATION_ENABLE) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001526}
1527
Myles Watson1d8aa282019-04-22 14:16:41 -07001528packet ReadAuthenticationEnableComplete : CommandComplete (command_op_code = READ_AUTHENTICATION_ENABLE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001529 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07001530 authentication_enable : AuthenticationEnable,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001531}
1532
Martin Brabham2e76f9a2019-11-21 09:16:24 -08001533packet WriteAuthenticationEnable : SecurityCommand (op_code = WRITE_AUTHENTICATION_ENABLE) {
Myles Watson1d8aa282019-04-22 14:16:41 -07001534 authentication_enable : AuthenticationEnable,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001535}
1536
Myles Watson1d8aa282019-04-22 14:16:41 -07001537packet WriteAuthenticationEnableComplete : CommandComplete (command_op_code = WRITE_AUTHENTICATION_ENABLE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001538 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001539}
1540
Myles Watson1d8aa282019-04-22 14:16:41 -07001541packet ReadClassOfDevice : DiscoveryCommand (op_code = READ_CLASS_OF_DEVICE) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001542}
1543
Myles Watson1d8aa282019-04-22 14:16:41 -07001544packet ReadClassOfDeviceComplete : CommandComplete (command_op_code = READ_CLASS_OF_DEVICE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001545 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07001546 class_of_device : ClassOfDevice,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001547}
1548
Myles Watson1d8aa282019-04-22 14:16:41 -07001549packet WriteClassOfDevice : DiscoveryCommand (op_code = WRITE_CLASS_OF_DEVICE) {
1550 class_of_device : ClassOfDevice,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001551}
1552
Myles Watson1d8aa282019-04-22 14:16:41 -07001553packet WriteClassOfDeviceComplete : CommandComplete (command_op_code = WRITE_CLASS_OF_DEVICE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001554 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001555}
1556
Myles Watson1d8aa282019-04-22 14:16:41 -07001557packet ReadVoiceSetting : CommandPacket (op_code = READ_VOICE_SETTING) {
1558 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001559}
1560
Myles Watson1d8aa282019-04-22 14:16:41 -07001561packet WriteVoiceSetting : CommandPacket (op_code = WRITE_VOICE_SETTING) {
1562 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001563}
1564
Chienyuancefe0722019-11-20 18:00:41 +08001565packet WriteVoiceSettingComplete : CommandComplete (command_op_code = WRITE_VOICE_SETTING) {
1566 status : ErrorCode,
1567}
1568
Myles Watson1d8aa282019-04-22 14:16:41 -07001569packet ReadAutomaticFlushTimeout : ConnectionManagementCommand (op_code = READ_AUTOMATIC_FLUSH_TIMEOUT) {
Chienyuan7eb23652019-09-11 16:37:30 +08001570 connection_handle : 12,
1571 _reserved_ : 4,
1572}
1573
1574packet ReadAutomaticFlushTimeoutComplete : CommandComplete (command_op_code = READ_AUTOMATIC_FLUSH_TIMEOUT) {
1575 status : ErrorCode,
1576 connection_handle : 12,
1577 _reserved_ : 4,
1578 flush_timeout : 16,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001579}
1580
Myles Watson1d8aa282019-04-22 14:16:41 -07001581packet WriteAutomaticFlushTimeout : ConnectionManagementCommand (op_code = WRITE_AUTOMATIC_FLUSH_TIMEOUT) {
Chienyuan7eb23652019-09-11 16:37:30 +08001582 connection_handle : 12,
1583 _reserved_ : 4,
1584 flush_timeout : 16, // 0x0000-0x07FF Default 0x0000 (No Automatic Flush)
1585}
1586
1587packet WriteAutomaticFlushTimeoutComplete : CommandComplete (command_op_code = WRITE_AUTOMATIC_FLUSH_TIMEOUT) {
1588 status : ErrorCode,
1589 connection_handle : 12,
1590 _reserved_ : 4,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001591}
1592
Myles Watson1d8aa282019-04-22 14:16:41 -07001593packet ReadNumBroadcastRetransmits : CommandPacket (op_code = READ_NUM_BROADCAST_RETRANSMITS) {
1594 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001595}
1596
Myles Watson1d8aa282019-04-22 14:16:41 -07001597packet WriteNumBroadcastRetransmits : CommandPacket (op_code = WRITE_NUM_BROADCAST_RETRANSMITS) {
1598 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001599}
1600
Myles Watson1d8aa282019-04-22 14:16:41 -07001601packet ReadHoldModeActivity : CommandPacket (op_code = READ_HOLD_MODE_ACTIVITY) {
1602 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001603}
1604
Myles Watson1d8aa282019-04-22 14:16:41 -07001605packet WriteHoldModeActivity : CommandPacket (op_code = WRITE_HOLD_MODE_ACTIVITY) {
1606 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001607}
1608
Chienyuan7eb23652019-09-11 16:37:30 +08001609
1610enum TransmitPowerLevelType : 8 {
1611 CURRENT = 0x00,
1612 MAXIMUM = 0x01,
1613}
1614
Myles Watson1d8aa282019-04-22 14:16:41 -07001615packet ReadTransmitPowerLevel : ConnectionManagementCommand (op_code = READ_TRANSMIT_POWER_LEVEL) {
Chienyuan7eb23652019-09-11 16:37:30 +08001616 connection_handle : 12,
1617 _reserved_ : 4,
1618 type : TransmitPowerLevelType,
1619
1620}
1621
1622packet ReadTransmitPowerLevelComplete : CommandComplete (command_op_code = READ_TRANSMIT_POWER_LEVEL) {
1623 status : ErrorCode,
1624 connection_handle : 12,
1625 _reserved_ : 4,
1626 transmit_power_level : 8,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001627}
1628
Myles Watson1d8aa282019-04-22 14:16:41 -07001629packet ReadSynchronousFlowControlEnable : CommandPacket (op_code = READ_SYNCHRONOUS_FLOW_CONTROL_ENABLE) {
1630 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001631}
1632
Myles Watson1d8aa282019-04-22 14:16:41 -07001633packet WriteSynchronousFlowControlEnable : CommandPacket (op_code = WRITE_SYNCHRONOUS_FLOW_CONTROL_ENABLE) {
1634 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001635}
1636
Myles Watson1d8aa282019-04-22 14:16:41 -07001637packet SetControllerToHostFlowControl : CommandPacket (op_code = SET_CONTROLLER_TO_HOST_FLOW_CONTROL) {
1638 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001639}
1640
Myles Watson1d8aa282019-04-22 14:16:41 -07001641packet HostBufferSize : CommandPacket (op_code = HOST_BUFFER_SIZE) {
1642 host_acl_data_packet_length : 16,
1643 host_synchronous_data_packet_length : 8,
1644 host_total_num_acl_data_packets : 16,
1645 host_total_num_synchronous_data_packets : 16,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001646}
1647
Myles Watson1d8aa282019-04-22 14:16:41 -07001648packet HostBufferSizeComplete : CommandComplete (command_op_code = HOST_BUFFER_SIZE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001649 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001650}
1651
Myles Watson2d234432019-08-19 13:33:27 -07001652struct CompletedPackets {
1653 connection_handle : 12,
1654 _reserved_ : 4,
1655 host_num_of_completed_packets : 16,
1656}
1657
Myles Watson1d8aa282019-04-22 14:16:41 -07001658packet HostNumCompletedPackets : CommandPacket (op_code = HOST_NUM_COMPLETED_PACKETS) {
Myles Watson2d234432019-08-19 13:33:27 -07001659 _count_(completed_packets) : 8,
1660 completed_packets : CompletedPackets[],
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001661}
1662
Myles Watson1d8aa282019-04-22 14:16:41 -07001663packet HostNumCompletedPacketsError : CommandComplete (command_op_code = HOST_NUM_COMPLETED_PACKETS) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001664 error_code : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001665}
1666
Myles Watson1d8aa282019-04-22 14:16:41 -07001667packet ReadLinkSupervisionTimeout : ConnectionManagementCommand (op_code = READ_LINK_SUPERVISION_TIMEOUT) {
1668 connection_handle : 12,
1669 _reserved_ : 4,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001670}
1671
Myles Watson1d8aa282019-04-22 14:16:41 -07001672packet ReadLinkSupervisionTimeoutComplete : CommandComplete (command_op_code = READ_LINK_SUPERVISION_TIMEOUT) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001673 status : ErrorCode,
Chienyuan7eb23652019-09-11 16:37:30 +08001674 connection_handle : 12,
Myles Watson1d8aa282019-04-22 14:16:41 -07001675 _reserved_ : 4,
1676 link_supervision_timeout : 16, // 0x001-0xFFFF (0.625ms-40.9s)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001677}
1678
Myles Watson1d8aa282019-04-22 14:16:41 -07001679packet WriteLinkSupervisionTimeout : ConnectionManagementCommand (op_code = WRITE_LINK_SUPERVISION_TIMEOUT) {
1680 handle : 12,
1681 _reserved_ : 4,
1682 link_supervision_timeout : 16, // 0x001-0xFFFF (0.625ms-40.9s)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001683}
1684
Myles Watson1d8aa282019-04-22 14:16:41 -07001685packet WriteLinkSupervisionTimeoutComplete : CommandComplete (command_op_code = WRITE_LINK_SUPERVISION_TIMEOUT) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001686 status : ErrorCode,
Chienyuan7eb23652019-09-11 16:37:30 +08001687 connection_handle : 12,
Myles Watson1d8aa282019-04-22 14:16:41 -07001688 _reserved_ : 4,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001689}
1690
Myles Watson1d8aa282019-04-22 14:16:41 -07001691packet ReadNumberOfSupportedIac : DiscoveryCommand (op_code = READ_NUMBER_OF_SUPPORTED_IAC) {
Chris Mantond3d317f2019-10-02 16:51:58 -07001692}
1693
1694packet ReadNumberOfSupportedIacComplete : CommandComplete (command_op_code = READ_NUMBER_OF_SUPPORTED_IAC) {
1695 status : ErrorCode,
1696 num_support_iac : 8,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001697}
1698
Chris Mantonb3650842019-10-03 17:31:12 -07001699packet ReadCurrentIacLap : DiscoveryCommand (op_code = READ_CURRENT_IAC_LAP) {
Chris Manton76ccca12019-10-02 21:54:41 -07001700}
1701
Chris Mantonb3650842019-10-03 17:31:12 -07001702packet ReadCurrentIacLapComplete : CommandComplete (command_op_code = READ_CURRENT_IAC_LAP) {
1703 status : ErrorCode,
1704 _count_(laps_to_read) : 8,
1705 laps_to_read : Lap[],
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001706}
1707
Myles Watson1d8aa282019-04-22 14:16:41 -07001708packet WriteCurrentIacLap : DiscoveryCommand (op_code = WRITE_CURRENT_IAC_LAP) {
Chris Manton76ccca12019-10-02 21:54:41 -07001709 _count_(laps_to_write) : 8,
1710 laps_to_write : Lap[],
1711}
1712
1713packet WriteCurrentIacLapComplete : CommandComplete (command_op_code = WRITE_CURRENT_IAC_LAP) {
1714 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001715}
1716
Myles Watson1d8aa282019-04-22 14:16:41 -07001717packet SetAfhHostChannelClassification : CommandPacket (op_code = SET_AFH_HOST_CHANNEL_CLASSIFICATION) {
1718 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001719}
1720
1721enum InquiryScanType : 8 {
1722 STANDARD = 0x00,
1723 INTERLACED = 0x01,
1724}
1725
Myles Watson1d8aa282019-04-22 14:16:41 -07001726packet ReadInquiryScanType : DiscoveryCommand (op_code = READ_INQUIRY_SCAN_TYPE) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001727}
1728
Myles Watson1d8aa282019-04-22 14:16:41 -07001729packet ReadInquiryScanTypeComplete : CommandComplete (command_op_code = READ_INQUIRY_SCAN_TYPE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001730 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07001731 inquiry_scan_type : InquiryScanType,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001732}
1733
Myles Watson1d8aa282019-04-22 14:16:41 -07001734packet WriteInquiryScanType : DiscoveryCommand (op_code = WRITE_INQUIRY_SCAN_TYPE) {
1735 inquiry_scan_type : InquiryScanType,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001736}
1737
Myles Watson1d8aa282019-04-22 14:16:41 -07001738packet WriteInquiryScanTypeComplete : CommandComplete (command_op_code = WRITE_INQUIRY_SCAN_TYPE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001739 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001740}
1741
1742enum InquiryMode : 8 {
1743 STANDARD = 0x00,
1744 RSSI = 0x01,
1745 RSSI_OR_EXTENDED = 0x02,
1746}
1747
Myles Watson1d8aa282019-04-22 14:16:41 -07001748packet ReadInquiryMode : DiscoveryCommand (op_code = READ_INQUIRY_MODE) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001749}
1750
Myles Watson1d8aa282019-04-22 14:16:41 -07001751packet ReadInquiryModeComplete : CommandComplete (command_op_code = READ_INQUIRY_MODE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001752 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07001753 inquiry_mode : InquiryMode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001754}
1755
Myles Watson1d8aa282019-04-22 14:16:41 -07001756packet WriteInquiryMode : DiscoveryCommand (op_code = WRITE_INQUIRY_MODE) {
1757 inquiry_mode : InquiryMode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001758}
1759
Myles Watson1d8aa282019-04-22 14:16:41 -07001760packet WriteInquiryModeComplete : CommandComplete (command_op_code = WRITE_INQUIRY_MODE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001761 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001762}
1763
1764enum PageScanType : 8 {
1765 STANDARD = 0x00,
1766 INTERLACED = 0x01,
1767}
1768
Myles Watson1d8aa282019-04-22 14:16:41 -07001769packet ReadPageScanType : DiscoveryCommand (op_code = READ_PAGE_SCAN_TYPE) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001770}
1771
Myles Watson1d8aa282019-04-22 14:16:41 -07001772packet ReadPageScanTypeComplete : CommandComplete (command_op_code = READ_PAGE_SCAN_TYPE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001773 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07001774 page_scan_type : PageScanType,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001775}
1776
Myles Watson1d8aa282019-04-22 14:16:41 -07001777packet WritePageScanType : DiscoveryCommand (op_code = WRITE_PAGE_SCAN_TYPE) {
1778 page_scan_type : PageScanType,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001779}
1780
Myles Watson1d8aa282019-04-22 14:16:41 -07001781packet WritePageScanTypeComplete : CommandComplete (command_op_code = WRITE_PAGE_SCAN_TYPE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001782 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001783}
1784
Myles Watson1d8aa282019-04-22 14:16:41 -07001785packet ReadAfhChannelAssessmentMode : CommandPacket (op_code = READ_AFH_CHANNEL_ASSESSMENT_MODE) {
1786 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001787}
1788
Myles Watson1d8aa282019-04-22 14:16:41 -07001789packet WriteAfhChannelAssessmentMode : CommandPacket (op_code = WRITE_AFH_CHANNEL_ASSESSMENT_MODE) {
1790 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001791}
1792
1793enum FecRequired : 8 {
1794 NOT_REQUIRED = 0x00,
1795 REQUIRED = 0x01,
1796}
1797
Myles Watson1d8aa282019-04-22 14:16:41 -07001798packet ReadExtendedInquiryResponse : CommandPacket (op_code = READ_EXTENDED_INQUIRY_RESPONSE) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001799}
1800
Myles Watson1d8aa282019-04-22 14:16:41 -07001801packet ReadExtendedInquiryResponseComplete : CommandComplete (command_op_code = READ_EXTENDED_INQUIRY_RESPONSE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001802 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07001803 fec_required : FecRequired,
Myles Watson7a0dc392019-07-09 15:24:54 -07001804 extended_inquiry_response : GapData[],
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001805}
1806
Myles Watson1d8aa282019-04-22 14:16:41 -07001807packet WriteExtendedInquiryResponse : CommandPacket (op_code = WRITE_EXTENDED_INQUIRY_RESPONSE) {
1808 fec_required : FecRequired,
Myles Watson7a0dc392019-07-09 15:24:54 -07001809 extended_inquiry_response : GapData[],
Myles Watsonfb2fec72019-10-22 16:21:44 -07001810 _padding_[244], // Zero padding to be 240 octets (GapData[]) + 2 (opcode) + 1 (size) + 1 (FecRequired)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001811}
1812
Myles Watson1d8aa282019-04-22 14:16:41 -07001813packet WriteExtendedInquiryResponseComplete : CommandComplete (command_op_code = WRITE_EXTENDED_INQUIRY_RESPONSE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001814 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001815}
1816
Myles Watson1d8aa282019-04-22 14:16:41 -07001817packet RefreshEncryptionKey : SecurityCommand (op_code = REFRESH_ENCRYPTION_KEY) {
1818 connection_handle : 12,
1819 _reserved_ : 4,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001820}
1821
Myles Watson1d8aa282019-04-22 14:16:41 -07001822packet RefreshEncryptionKeyStatus : CommandStatus (command_op_code = REFRESH_ENCRYPTION_KEY) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001823}
1824
Myles Watson1d8aa282019-04-22 14:16:41 -07001825packet ReadSimplePairingMode : SecurityCommand (op_code = READ_SIMPLE_PAIRING_MODE) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001826}
1827
Myles Watson1d8aa282019-04-22 14:16:41 -07001828packet ReadSimplePairingModeComplete : CommandComplete (command_op_code = READ_SIMPLE_PAIRING_MODE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001829 status : ErrorCode,
1830 simple_pairing_mode : Enable,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001831}
1832
Myles Watson1d8aa282019-04-22 14:16:41 -07001833packet WriteSimplePairingMode : SecurityCommand (op_code = WRITE_SIMPLE_PAIRING_MODE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001834 simple_pairing_mode : Enable,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001835}
1836
Myles Watson1d8aa282019-04-22 14:16:41 -07001837packet WriteSimplePairingModeComplete : CommandComplete (command_op_code = WRITE_SIMPLE_PAIRING_MODE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001838 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001839}
1840
Myles Watson1d8aa282019-04-22 14:16:41 -07001841packet ReadLocalOobData : SecurityCommand (op_code = READ_LOCAL_OOB_DATA) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001842}
1843
Myles Watson1d8aa282019-04-22 14:16:41 -07001844packet ReadLocalOobDataComplete : CommandComplete (command_op_code = READ_LOCAL_OOB_DATA) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001845 status : ErrorCode,
Myles Watson2d234432019-08-19 13:33:27 -07001846 c : 8[16],
1847 r : 8[16],
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001848}
1849
Myles Watson1d8aa282019-04-22 14:16:41 -07001850packet ReadInquiryResponseTransmitPowerLevel : DiscoveryCommand (op_code = READ_INQUIRY_RESPONSE_TRANSMIT_POWER_LEVEL) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001851}
1852
Myles Watson1d8aa282019-04-22 14:16:41 -07001853packet ReadInquiryResponseTransmitPowerLevelComplete : CommandComplete (command_op_code = READ_INQUIRY_RESPONSE_TRANSMIT_POWER_LEVEL) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001854 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07001855 tx_power : 8, // (-70dBm to 20dBm)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001856}
1857
Myles Watson1d8aa282019-04-22 14:16:41 -07001858packet WriteInquiryTransmitPowerLevel : DiscoveryCommand (op_code = WRITE_INQUIRY_TRANSMIT_POWER_LEVEL) {
1859 tx_power : 8,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001860}
1861
Myles Watson1d8aa282019-04-22 14:16:41 -07001862packet WriteInquiryResponseTransmitPowerLevelComplete : CommandComplete (command_op_code = WRITE_INQUIRY_TRANSMIT_POWER_LEVEL) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001863 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001864}
1865
1866enum KeypressNotificationType : 8 {
1867 ENTRY_STARTED = 0,
1868 DIGIT_ENTERED = 1,
1869 DIGIT_ERASED = 2,
1870 CLEARED = 3,
1871 ENTRY_COMPLETED = 4,
1872}
1873
Myles Watson1d8aa282019-04-22 14:16:41 -07001874packet SendKeypressNotification : SecurityCommand (op_code = SEND_KEYPRESS_NOTIFICATION) {
1875 bd_addr : Address,
1876 notification_type : KeypressNotificationType,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001877}
1878
Myles Watson1d8aa282019-04-22 14:16:41 -07001879packet SendKeypressNotificationComplete : CommandComplete (command_op_code = SEND_KEYPRESS_NOTIFICATION) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001880 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07001881 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001882}
1883
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001884enum SimultaneousLeHost : 8 {
1885 DISABLED = 0x00,
1886}
1887
Myles Watson1d8aa282019-04-22 14:16:41 -07001888packet ReadLeHostSupport : CommandPacket (op_code = READ_LE_HOST_SUPPORT) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001889}
1890
Myles Watson1d8aa282019-04-22 14:16:41 -07001891packet ReadLeHostSupportComplete : CommandComplete (command_op_code = READ_LE_HOST_SUPPORT) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001892 status : ErrorCode,
1893 le_supported_host : Enable,
Myles Watson1d8aa282019-04-22 14:16:41 -07001894 simultaneous_le_host : SimultaneousLeHost,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001895}
1896
Myles Watson1d8aa282019-04-22 14:16:41 -07001897packet WriteLeHostSupport : CommandPacket (op_code = WRITE_LE_HOST_SUPPORT) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001898 le_supported_host : Enable,
Myles Watson1d8aa282019-04-22 14:16:41 -07001899 simultaneous_le_host : SimultaneousLeHost,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001900}
1901
Myles Watson1d8aa282019-04-22 14:16:41 -07001902packet WriteLeHostSupportComplete : CommandComplete (command_op_code = WRITE_LE_HOST_SUPPORT) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001903 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001904}
1905
Myles Watson1d8aa282019-04-22 14:16:41 -07001906packet ReadSecureConnectionsHostSupport : CommandPacket (op_code = READ_SECURE_CONNECTIONS_HOST_SUPPORT) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001907}
1908
Myles Watson1d8aa282019-04-22 14:16:41 -07001909packet ReadSecureConnectionsHostSupportComplete : CommandComplete (command_op_code = READ_SECURE_CONNECTIONS_HOST_SUPPORT) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001910 status : ErrorCode,
1911 secure_connections_host_support : Enable,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001912}
1913
Martin Brabham2e76f9a2019-11-21 09:16:24 -08001914packet WriteSecureConnectionsHostSupport : SecurityCommand (op_code = WRITE_SECURE_CONNECTIONS_HOST_SUPPORT) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001915 secure_connections_host_support : Enable,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001916}
1917
Myles Watson1d8aa282019-04-22 14:16:41 -07001918packet WriteSecureConnectionsHostSupportComplete : CommandComplete (command_op_code = WRITE_SECURE_CONNECTIONS_HOST_SUPPORT) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07001919 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001920}
1921
Chienyuan4d7cc812019-07-12 18:00:12 +08001922packet ReadLocalOobExtendedData : SecurityCommand (op_code = READ_LOCAL_OOB_EXTENDED_DATA) {
1923}
1924
1925packet ReadLocalOobExtendedDataComplete : CommandComplete (command_op_code = READ_LOCAL_OOB_EXTENDED_DATA) {
1926 status : ErrorCode,
Myles Watson2d234432019-08-19 13:33:27 -07001927 c_192 : 8[16],
1928 r_192 : 8[16],
1929 c_256 : 8[16],
1930 r_256 : 8[16],
Chienyuan4d7cc812019-07-12 18:00:12 +08001931}
1932
1933
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001934 // INFORMATIONAL_PARAMETERS
Myles Watson1d8aa282019-04-22 14:16:41 -07001935packet ReadLocalVersionInformation : CommandPacket (op_code = READ_LOCAL_VERSION_INFORMATION) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001936}
1937
Myles Watsonb39fc3e2019-06-12 14:57:46 -07001938enum HciVersion : 8 {
Myles Watsonb5ad62e2019-09-30 13:27:20 -07001939 V_1_0B = 0x00,
Myles Watsonb39fc3e2019-06-12 14:57:46 -07001940 V_1_1 = 0x01,
1941 V_1_2 = 0x02,
1942 V_2_0 = 0x03, // + EDR
1943 V_2_1 = 0x04, // + EDR
1944 V_3_0 = 0x05, // + HS
1945 V_4_0 = 0x06,
1946 V_4_1 = 0x07,
1947 V_4_2 = 0x08,
1948 V_5_0 = 0x09,
1949 V_5_1 = 0x0a,
1950}
1951
1952enum LmpVersion : 8 {
Myles Watsonb5ad62e2019-09-30 13:27:20 -07001953 V_1_0B = 0x00, // withdrawn
Myles Watsonb39fc3e2019-06-12 14:57:46 -07001954 V_1_1 = 0x01, // withdrawn
1955 V_1_2 = 0x02, // withdrawn
1956 V_2_0 = 0x03, // + EDR
1957 V_2_1 = 0x04, // + EDR
1958 V_3_0 = 0x05, // + HS
1959 V_4_0 = 0x06,
1960 V_4_1 = 0x07,
1961 V_4_2 = 0x08,
1962 V_5_0 = 0x09,
1963 V_5_1 = 0x0a,
1964}
1965
Chienyuana7ad3fb2019-08-15 18:04:32 +08001966struct LocalVersionInformation {
Myles Watsonb39fc3e2019-06-12 14:57:46 -07001967 hci_version : HciVersion,
1968 hci_revision : 16,
1969 lmp_version : LmpVersion,
1970 manufacturer_name : 16,
1971 lmp_subversion : 16,
1972}
1973
Chienyuana7ad3fb2019-08-15 18:04:32 +08001974packet ReadLocalVersionInformationComplete : CommandComplete (command_op_code = READ_LOCAL_VERSION_INFORMATION) {
1975 status : ErrorCode,
1976 local_version_information : LocalVersionInformation,
1977}
1978
Myles Watson1d8aa282019-04-22 14:16:41 -07001979packet ReadLocalSupportedCommands : CommandPacket (op_code = READ_LOCAL_SUPPORTED_COMMANDS) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001980}
1981
Myles Watsonb39fc3e2019-06-12 14:57:46 -07001982packet ReadLocalSupportedCommandsComplete : CommandComplete (command_op_code = READ_LOCAL_SUPPORTED_COMMANDS) {
1983 status : ErrorCode,
1984 supported_commands : 8[64],
1985}
1986
Myles Watson1d8aa282019-04-22 14:16:41 -07001987packet ReadLocalSupportedFeatures : CommandPacket (op_code = READ_LOCAL_SUPPORTED_FEATURES) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001988}
1989
Myles Watsonb39fc3e2019-06-12 14:57:46 -07001990packet ReadLocalSupportedFeaturesComplete : CommandComplete (command_op_code = READ_LOCAL_SUPPORTED_FEATURES) {
1991 status : ErrorCode,
1992 lmp_features : 64,
1993}
1994
Myles Watson1d8aa282019-04-22 14:16:41 -07001995packet ReadLocalExtendedFeatures : CommandPacket (op_code = READ_LOCAL_EXTENDED_FEATURES) {
1996 page_number : 8,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07001997}
1998
Myles Watsonfc57a962019-08-22 16:11:01 -07001999packet ReadLocalExtendedFeaturesComplete : CommandComplete (command_op_code = READ_LOCAL_EXTENDED_FEATURES) {
2000 status : ErrorCode,
2001 page_number : 8,
2002 maximum_page_number : 8,
2003 extended_lmp_features : 64,
2004}
2005
Myles Watson1d8aa282019-04-22 14:16:41 -07002006packet ReadBufferSize : CommandPacket (op_code = READ_BUFFER_SIZE) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002007}
2008
Myles Watsonb39fc3e2019-06-12 14:57:46 -07002009packet ReadBufferSizeComplete : CommandComplete (command_op_code = READ_BUFFER_SIZE) {
2010 status : ErrorCode,
2011 acl_data_packet_length : 16,
2012 synchronous_data_packet_length : 8,
2013 total_num_acl_data_packets : 16,
2014 total_num_synchronous_data_packets : 16,
2015}
2016
Myles Watson1d8aa282019-04-22 14:16:41 -07002017packet ReadBdAddr : CommandPacket (op_code = READ_BD_ADDR) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002018}
2019
Hansong Zhangc443be72019-06-18 16:04:01 -07002020packet ReadBdAddrComplete : CommandComplete (command_op_code = READ_BD_ADDR) {
2021 status : ErrorCode,
2022 bd_addr : Address,
2023}
2024
Myles Watson1d8aa282019-04-22 14:16:41 -07002025packet ReadDataBlockSize : CommandPacket (op_code = READ_DATA_BLOCK_SIZE) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002026}
2027
Myles Watson1d8aa282019-04-22 14:16:41 -07002028packet ReadLocalSupportedCodecs : CommandPacket (op_code = READ_LOCAL_SUPPORTED_CODECS) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002029}
2030
Chienyuanf58d5112019-11-14 20:25:26 +08002031packet ReadLocalSupportedCodecsComplete : CommandComplete (command_op_code = READ_LOCAL_SUPPORTED_CODECS) {
2032 status : ErrorCode,
2033 _size_(supported_codecs) : 8,
2034 supported_codecs : 8[],
2035 _size_(vendor_specific_codecs) : 8,
2036 vendor_specific_codecs : 32[],
2037}
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002038
2039 // STATUS_PARAMETERS
Myles Watson1d8aa282019-04-22 14:16:41 -07002040packet ReadFailedContactCounter : ConnectionManagementCommand (op_code = READ_FAILED_CONTACT_COUNTER) {
Chienyuan7eb23652019-09-11 16:37:30 +08002041 connection_handle : 12,
Myles Watson1d8aa282019-04-22 14:16:41 -07002042 _reserved_ : 4,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002043}
2044
Chienyuan7eb23652019-09-11 16:37:30 +08002045packet ReadFailedContactCounterComplete : CommandComplete (command_op_code = READ_FAILED_CONTACT_COUNTER) {
2046 status : ErrorCode,
2047 connection_handle : 12,
2048 _reserved_ : 4,
2049 failed_contact_counter : 16,
2050}
2051
Myles Watson1d8aa282019-04-22 14:16:41 -07002052packet ResetFailedContactCounter : ConnectionManagementCommand (op_code = RESET_FAILED_CONTACT_COUNTER) {
Chienyuan7eb23652019-09-11 16:37:30 +08002053 connection_handle : 12,
2054 _reserved_ : 4,
2055}
2056
2057packet ResetFailedContactCounterComplete : CommandComplete (command_op_code = RESET_FAILED_CONTACT_COUNTER) {
2058 status : ErrorCode,
2059 connection_handle : 12,
Myles Watson1d8aa282019-04-22 14:16:41 -07002060 _reserved_ : 4,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002061}
2062
Myles Watson1d8aa282019-04-22 14:16:41 -07002063packet ReadLinkQuality : ConnectionManagementCommand (op_code = READ_LINK_QUALITY) {
Chienyuan7eb23652019-09-11 16:37:30 +08002064 connection_handle : 12,
Myles Watson1d8aa282019-04-22 14:16:41 -07002065 _reserved_ : 4,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002066}
2067
Chienyuan7eb23652019-09-11 16:37:30 +08002068packet ReadLinkQualityComplete : CommandComplete (command_op_code = READ_LINK_QUALITY) {
2069 status : ErrorCode,
2070 connection_handle : 12,
Myles Watson1d8aa282019-04-22 14:16:41 -07002071 _reserved_ : 4,
Chienyuan7eb23652019-09-11 16:37:30 +08002072 link_quality : 8,
2073}
2074
2075packet ReadRssi : ConnectionManagementCommand (op_code = READ_RSSI) {
2076 connection_handle : 12,
2077 _reserved_ : 4,
2078}
2079
2080packet ReadRssiComplete : CommandComplete (command_op_code = READ_RSSI) {
2081 status : ErrorCode,
2082 connection_handle : 12,
2083 _reserved_ : 4,
2084 rssi : 8,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002085}
2086
Myles Watson1d8aa282019-04-22 14:16:41 -07002087packet ReadAfhChannelMap : ConnectionManagementCommand (op_code = READ_AFH_CHANNEL_MAP) {
2088 connection_handle : 12,
2089 _reserved_ : 4,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002090}
2091
Chienyuan9145e7a2019-10-02 15:18:55 +08002092enum AfhMode : 8 {
2093 AFH_DISABLED = 0x00,
2094 AFH_ENABLED = 0x01,
2095}
2096
2097packet ReadAfhChannelMapComplete : CommandComplete (command_op_code = READ_AFH_CHANNEL_MAP) {
2098 status : ErrorCode,
2099 connection_handle : 12,
2100 _reserved_ : 4,
2101 afh_mode : AfhMode,
2102 afh_channel_map : 8[10],
2103}
2104
2105
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002106enum WhichClock : 8 {
2107 LOCAL = 0x00,
2108 PICONET = 0x01,
2109}
2110
Myles Watson1d8aa282019-04-22 14:16:41 -07002111packet ReadClock : ConnectionManagementCommand (op_code = READ_CLOCK) {
2112 connection_handle : 12,
2113 _reserved_ : 4,
2114 which_clock : WhichClock,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002115}
2116
Chienyuan7eb23652019-09-11 16:37:30 +08002117packet ReadClockComplete : CommandComplete (command_op_code = READ_CLOCK) {
2118 status : ErrorCode,
2119 connection_handle : 12,
2120 _reserved_ : 4,
2121 clock : 28,
2122 _reserved_ : 4,
2123 accuracy : 16,
2124}
2125
Myles Watson1d8aa282019-04-22 14:16:41 -07002126packet ReadEncryptionKeySize : SecurityCommand (op_code = READ_ENCRYPTION_KEY_SIZE) {
2127 connection_handle : 12,
2128 _reserved_ : 4,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002129}
2130
Chienyuanf58d5112019-11-14 20:25:26 +08002131packet ReadEncryptionKeySizeComplete : CommandComplete (command_op_code = READ_ENCRYPTION_KEY_SIZE) {
2132 status : ErrorCode,
2133 connection_handle : 12,
2134 _reserved_ : 4,
2135 key_size : 8,
2136}
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002137
2138 // TESTING
2139enum LoopbackMode : 8 {
2140 NO_LOOPBACK = 0x00,
2141 ENABLE_LOCAL = 0x01,
2142 ENABLE_REMOTE = 0x02,
2143}
2144
Myles Watson1d8aa282019-04-22 14:16:41 -07002145packet ReadLoopbackMode : CommandPacket (op_code = READ_LOOPBACK_MODE) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002146}
2147
Myles Watson1d8aa282019-04-22 14:16:41 -07002148packet ReadLoopbackModeComplete : CommandComplete (command_op_code = READ_LOOPBACK_MODE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07002149 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07002150 loopback_mode : LoopbackMode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002151}
2152
Myles Watson1d8aa282019-04-22 14:16:41 -07002153packet WriteLoopbackMode : CommandPacket (op_code = WRITE_LOOPBACK_MODE) {
2154 loopback_mode : LoopbackMode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002155}
2156
Myles Watson1d8aa282019-04-22 14:16:41 -07002157packet WriteLoopbackModeComplete : CommandComplete (command_op_code = WRITE_LOOPBACK_MODE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07002158 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002159}
2160
Myles Watson1d8aa282019-04-22 14:16:41 -07002161packet EnableDeviceUnderTestMode : CommandPacket (op_code = ENABLE_DEVICE_UNDER_TEST_MODE) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002162}
2163
Myles Watson1d8aa282019-04-22 14:16:41 -07002164packet EnableDeviceUnderTestModeComplete : CommandComplete (command_op_code = ENABLE_DEVICE_UNDER_TEST_MODE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07002165 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002166}
2167
Myles Watson1d8aa282019-04-22 14:16:41 -07002168packet WriteSimplePairingDebugMode : CommandPacket (op_code = WRITE_SIMPLE_PAIRING_DEBUG_MODE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07002169 simple_pairing_debug_mode : Enable,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002170}
2171
Myles Watson1d8aa282019-04-22 14:16:41 -07002172packet WriteSimplePairingDebugModeComplete : CommandComplete (command_op_code = WRITE_SIMPLE_PAIRING_DEBUG_MODE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07002173 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002174}
2175
Myles Watson1d8aa282019-04-22 14:16:41 -07002176packet WriteSecureConnectionsTestMode : CommandPacket (op_code = WRITE_SECURE_CONNECTIONS_TEST_MODE) {
2177 connection_handle : 12,
2178 _reserved_ : 4,
Myles Watson38ea5ac2019-05-08 16:15:01 -07002179 dm1_aclu_mode : Enable,
2180 esco_loopback_mode : Enable,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002181}
2182
Myles Watson1d8aa282019-04-22 14:16:41 -07002183packet WriteSecureConnectionsTestModeComplete : CommandComplete (command_op_code = WRITE_SECURE_CONNECTIONS_TEST_MODE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07002184 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002185}
2186
2187 // LE_CONTROLLER
Myles Watson1d8aa282019-04-22 14:16:41 -07002188packet LeSetEventMask : CommandPacket (op_code = LE_SET_EVENT_MASK) {
2189 le_event_mask : 64,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002190}
2191
Myles Watson1d8aa282019-04-22 14:16:41 -07002192packet LeSetEventMaskComplete : CommandComplete (command_op_code = LE_SET_EVENT_MASK) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07002193 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002194}
2195
Myles Watson1d8aa282019-04-22 14:16:41 -07002196packet LeReadBufferSize : CommandPacket (op_code = LE_READ_BUFFER_SIZE) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002197}
2198
Chienyuana7ad3fb2019-08-15 18:04:32 +08002199struct LeBufferSize {
2200 le_data_packet_length : 16,
2201 total_num_le_packets : 8,
2202}
2203
Myles Watson1d8aa282019-04-22 14:16:41 -07002204packet LeReadBufferSizeComplete : CommandComplete (command_op_code = LE_READ_BUFFER_SIZE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07002205 status : ErrorCode,
Chienyuana7ad3fb2019-08-15 18:04:32 +08002206 le_buffer_size : LeBufferSize,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002207}
2208
Myles Watson1d8aa282019-04-22 14:16:41 -07002209packet LeReadLocalSupportedFeatures : CommandPacket (op_code = LE_READ_LOCAL_SUPPORTED_FEATURES) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002210}
2211
Myles Watson1d8aa282019-04-22 14:16:41 -07002212packet LeReadLocalSupportedFeaturesComplete : CommandComplete (command_op_code = LE_READ_LOCAL_SUPPORTED_FEATURES) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07002213 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07002214 le_features : 64,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002215}
2216
Myles Watsonfb2fec72019-10-22 16:21:44 -07002217packet LeSetRandomAddress : LeAdvertisingCommand (op_code = LE_SET_RANDOM_ADDRESS) {
Myles Watson1d8aa282019-04-22 14:16:41 -07002218 random_address : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002219}
2220
Myles Watson1d8aa282019-04-22 14:16:41 -07002221packet LeSetRandomAddressComplete : CommandComplete (command_op_code = LE_SET_RANDOM_ADDRESS) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07002222 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002223}
2224
Myles Watson41bab612019-11-11 08:34:49 -08002225enum AdvertisingFilterPolicy : 2 {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002226 ALL_DEVICES = 0, // Default
Myles Watson41bab612019-11-11 08:34:49 -08002227 WHITELISTED_SCAN = 1,
2228 WHITELISTED_CONNECT = 2,
2229 WHITELISTED_SCAN_AND_CONNECT = 3,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002230}
2231
2232enum PeerAddressType : 8 {
2233 PUBLIC_DEVICE_OR_IDENTITY_ADDRESS = 0x00,
2234 RANDOM_DEVICE_OR_IDENTITY_ADDRESS = 0x01,
2235}
2236
2237enum AdvertisingEventType : 8 {
2238 ADV_IND = 0x00,
2239 ADV_DIRECT_IND = 0x01,
2240 ADV_SCAN_IND = 0x02,
2241 ADV_NONCONN_IND = 0x03,
Myles Watsonfb2fec72019-10-22 16:21:44 -07002242 ADV_DIRECT_IND_LOW = 0x04,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002243}
2244
2245enum AddressType : 8 {
2246 PUBLIC_DEVICE_ADDRESS = 0x00,
2247 RANDOM_DEVICE_ADDRESS = 0x01,
2248 PUBLIC_IDENTITY_ADDRESS = 0x02,
2249 RANDOM_IDENTITY_ADDRESS = 0x03,
2250}
2251
Myles Watson1d8aa282019-04-22 14:16:41 -07002252packet LeSetAdvertisingParameters : LeAdvertisingCommand (op_code = LE_SET_ADVERTISING_PARAMETERS) {
Myles Watsonfb2fec72019-10-22 16:21:44 -07002253 interval_min : 16,
2254 interval_max : 16,
2255 type : AdvertisingEventType,
Myles Watson1d8aa282019-04-22 14:16:41 -07002256 own_address_type : AddressType,
2257 peer_address_type : PeerAddressType,
2258 peer_address : Address,
Myles Watsonfb2fec72019-10-22 16:21:44 -07002259 channel_map : 8,
2260 filter_policy : AdvertisingFilterPolicy,
Myles Watson1d8aa282019-04-22 14:16:41 -07002261 _reserved_ : 6,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002262}
2263
Myles Watson1d8aa282019-04-22 14:16:41 -07002264packet LeSetAdvertisingParametersComplete : CommandComplete (command_op_code = LE_SET_ADVERTISING_PARAMETERS) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07002265 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002266}
2267
Myles Watson1d8aa282019-04-22 14:16:41 -07002268packet LeReadAdvertisingChannelTxPower : LeAdvertisingCommand (op_code = LE_READ_ADVERTISING_CHANNEL_TX_POWER) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002269}
2270
Myles Watson1d8aa282019-04-22 14:16:41 -07002271packet LeReadAdvertisingChannelTxPowerComplete : CommandComplete (command_op_code = LE_READ_ADVERTISING_CHANNEL_TX_POWER) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07002272 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07002273 transmit_power_level : 8, // (-20dBm to 10dBm) Accuracy: +/-4dB
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002274}
2275
Myles Watson1d8aa282019-04-22 14:16:41 -07002276packet LeSetAdvertisingData : LeAdvertisingCommand (op_code = LE_SET_ADVERTISING_DATA) {
Myles Watson7a0dc392019-07-09 15:24:54 -07002277 _size_(advertising_data) : 8,
2278 advertising_data : GapData[],
Myles Watsonfb2fec72019-10-22 16:21:44 -07002279 _padding_[31], // Zero padding to 31 bytes of advertising_data
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002280}
2281
Myles Watson1d8aa282019-04-22 14:16:41 -07002282packet LeSetAdvertisingDataComplete : CommandComplete (command_op_code = LE_SET_ADVERTISING_DATA) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07002283 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002284}
2285
Myles Watson1d8aa282019-04-22 14:16:41 -07002286packet LeSetScanResponseData : LeAdvertisingCommand (op_code = LE_SET_SCAN_RESPONSE_DATA) {
Myles Watson7a0dc392019-07-09 15:24:54 -07002287 _size_(advertising_data) : 8,
2288 advertising_data : GapData[],
Myles Watsonfb2fec72019-10-22 16:21:44 -07002289 _padding_[31], // Zero padding to 31 bytes of advertising_data
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002290}
2291
Myles Watson1d8aa282019-04-22 14:16:41 -07002292packet LeSetScanResponseDataComplete : CommandComplete (command_op_code = LE_SET_SCAN_RESPONSE_DATA) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07002293 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002294}
2295
Myles Watson1d8aa282019-04-22 14:16:41 -07002296packet LeSetAdvertisingEnable : LeAdvertisingCommand (op_code = LE_SET_ADVERTISING_ENABLE) {
2297 advertising_enable : Enable, // Default DISABLED
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002298}
2299
Myles Watson1d8aa282019-04-22 14:16:41 -07002300packet LeSetAdvertisingEnableComplete : CommandComplete (command_op_code = LE_SET_ADVERTISING_ENABLE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07002301 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002302}
2303
2304enum LeScanType : 8 {
2305 PASSIVE = 0x00, // Default
2306 ACTIVE = 0x01,
2307}
2308
2309enum LeSetScanningFilterPolicy : 8 {
2310 ACCEPT_ALL = 0x00, // Default
2311 WHITE_LIST_ONLY = 0x01,
2312 CHECK_INITIATORS_IDENTITY = 0x02,
2313 WHITE_LIST_AND_INITIATORS_IDENTITY = 0x03,
2314}
2315
Myles Watson742597d2019-10-14 16:23:38 -07002316packet LeSetScanParameters : LeScanningCommand (op_code = LE_SET_SCAN_PARAMETERS) {
Myles Watson1d8aa282019-04-22 14:16:41 -07002317 le_scan_type : LeScanType,
2318 le_scan_interval : 16, // 0x0004-0x4000 Default 0x10 (10ms)
2319 le_scan_window : 16, // Default 0x10 (10ms)
2320 own_address_type : AddressType,
2321 scanning_filter_policy : LeSetScanningFilterPolicy,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002322}
2323
Myles Watson1d8aa282019-04-22 14:16:41 -07002324packet LeSetScanParametersComplete : CommandComplete (command_op_code = LE_SET_SCAN_PARAMETERS) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07002325 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002326}
2327
Myles Watson742597d2019-10-14 16:23:38 -07002328packet LeSetScanEnable : LeScanningCommand (op_code = LE_SET_SCAN_ENABLE) {
Myles Watson1d8aa282019-04-22 14:16:41 -07002329 le_scan_enable : Enable,
2330 filter_duplicates : Enable,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002331}
2332
Myles Watson1d8aa282019-04-22 14:16:41 -07002333packet LeSetScanEnableComplete : CommandComplete (command_op_code = LE_SET_SCAN_ENABLE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07002334 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002335}
2336
2337enum InitiatorFilterPolicy : 8 {
2338 USE_PEER_ADDRESS = 0x00,
2339 USE_WHITE_LIST = 0x01,
2340}
2341
2342enum OwnAddressType : 8 {
2343 PUBLIC_DEVICE_ADDRESS = 0x00,
2344 RANDOM_DEVICE_ADDRESS = 0x01,
2345 RESOLVABLE_OR_PUBLIC_ADDRESS = 0x02,
2346 RESOLVABLE_OR_RANDOM_ADDRESS = 0x03,
2347}
2348
Myles Watson38ea5ac2019-05-08 16:15:01 -07002349packet LeCreateConnection : LeConnectionManagementCommand (op_code = LE_CREATE_CONNECTION) {
Myles Watson1d8aa282019-04-22 14:16:41 -07002350 le_scan_interval : 16, // 0x0004-0x4000
2351 le_scan_window : 16, // < = LeScanInterval
2352 initiator_filter_policy : InitiatorFilterPolicy,
2353 peer_address_type : AddressType,
2354 peer_address : Address,
2355 own_address_type : OwnAddressType,
2356 conn_interval_min : 16, // 0x0006-0x0C80 (7.5ms to 4s)
2357 conn_interval_max : 16, // 0x0006-0x0C80 (7.5ms to 4s)
2358 conn_latency : 16, // 0x0006-0x01F3
2359 supervision_timeout : 16, // 0x00A to 0x0C80 (100ms to 32s)
2360 minimum_ce_length : 16, // 0.625ms
2361 maximum_ce_length : 16, // 0.625ms
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002362}
2363
Myles Watson1d8aa282019-04-22 14:16:41 -07002364packet LeCreateConnectionStatus : CommandStatus (command_op_code = LE_CREATE_CONNECTION) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002365}
2366
Myles Watson38ea5ac2019-05-08 16:15:01 -07002367packet LeCreateConnectionCancel : LeConnectionManagementCommand (op_code = LE_CREATE_CONNECTION_CANCEL) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002368}
2369
Chienyuancefe0722019-11-20 18:00:41 +08002370packet LeCreateConnectionCancelStatus : CommandStatus (command_op_code = LE_CREATE_CONNECTION_CANCEL) {
2371}
2372
Myles Watson1d8aa282019-04-22 14:16:41 -07002373packet LeCreateConnectionCancelComplete : CommandComplete (command_op_code = LE_CREATE_CONNECTION_CANCEL) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07002374 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002375}
2376
Myles Watson38ea5ac2019-05-08 16:15:01 -07002377packet LeReadWhiteListSize : LeConnectionManagementCommand (op_code = LE_READ_WHITE_LIST_SIZE) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002378}
2379
Myles Watson1d8aa282019-04-22 14:16:41 -07002380packet LeReadWhiteListSizeComplete : CommandComplete (command_op_code = LE_READ_WHITE_LIST_SIZE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07002381 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07002382 white_list_size : 8,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002383}
2384
Myles Watson38ea5ac2019-05-08 16:15:01 -07002385packet LeClearWhiteList : LeConnectionManagementCommand (op_code = LE_CLEAR_WHITE_LIST) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002386}
2387
Myles Watson1d8aa282019-04-22 14:16:41 -07002388packet LeClearWhiteListComplete : CommandComplete (command_op_code = LE_CLEAR_WHITE_LIST) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07002389 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002390}
2391
2392enum WhiteListAddressType : 8 {
2393 PUBLIC = 0x00,
2394 RANDOM = 0x01,
2395 ANONYMOUS_ADVERTISERS = 0xFF,
2396}
2397
Myles Watson38ea5ac2019-05-08 16:15:01 -07002398packet LeAddDeviceToWhiteList : LeConnectionManagementCommand (op_code = LE_ADD_DEVICE_TO_WHITE_LIST) {
Myles Watson1d8aa282019-04-22 14:16:41 -07002399 address_type : WhiteListAddressType,
2400 address : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002401}
2402
Myles Watson1d8aa282019-04-22 14:16:41 -07002403packet LeAddDeviceToWhiteListComplete : CommandComplete (command_op_code = LE_ADD_DEVICE_TO_WHITE_LIST) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07002404 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002405}
2406
Myles Watson38ea5ac2019-05-08 16:15:01 -07002407packet LeRemoveDeviceFromWhiteList : LeConnectionManagementCommand (op_code = LE_REMOVE_DEVICE_FROM_WHITE_LIST) {
Myles Watson1d8aa282019-04-22 14:16:41 -07002408 address_type : WhiteListAddressType,
2409 address : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002410}
2411
Myles Watson1d8aa282019-04-22 14:16:41 -07002412packet LeRemoveDeviceFromWhiteListComplete : CommandComplete (command_op_code = LE_REMOVE_DEVICE_FROM_WHITE_LIST) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07002413 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002414}
2415
Myles Watson1d8aa282019-04-22 14:16:41 -07002416packet LeConnectionUpdate : LeConnectionManagementCommand (op_code = LE_CONNECTION_UPDATE) {
2417 connection_handle : 12,
2418 _reserved_ : 4,
2419 conn_interval_min : 16, // 0x0006-0x0C80 (7.5ms to 4s)
2420 conn_interval_max : 16, // 0x0006-0x0C80 (7.5ms to 4s)
2421 conn_latency : 16, // 0x0006-0x01F3
2422 supervision_timeout : 16, // 0x00A to 0x0C80 (100ms to 32s)
2423 minimum_ce_length : 16, // 0.625ms
2424 maximum_ce_length : 16, // 0.625ms
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002425}
2426
Myles Watson1d8aa282019-04-22 14:16:41 -07002427packet LeConnectionUpdateStatus : CommandStatus (command_op_code = LE_CONNECTION_UPDATE) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002428}
2429
Myles Watson1d8aa282019-04-22 14:16:41 -07002430packet LeSetHostChannelClassification : LeConnectionManagementCommand (op_code = LE_SET_HOST_CHANNEL_CLASSIFICATION) {
2431 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002432}
2433
Myles Watson1d8aa282019-04-22 14:16:41 -07002434packet LeReadChannelMap : LeConnectionManagementCommand (op_code = LE_READ_CHANNEL_MAP) {
2435 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002436}
2437
Myles Watson1d8aa282019-04-22 14:16:41 -07002438packet LeReadRemoteFeatures : LeConnectionManagementCommand (op_code = LE_READ_REMOTE_FEATURES) {
2439 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002440}
2441
Myles Watson1d8aa282019-04-22 14:16:41 -07002442packet LeEncrypt : LeSecurityCommand (op_code = LE_ENCRYPT) {
2443 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002444}
2445
Myles Watson1d8aa282019-04-22 14:16:41 -07002446packet LeRand : LeSecurityCommand (op_code = LE_RAND) {
Myles Watson07c86d32019-08-20 15:17:00 -07002447}
2448
2449packet LeRandComplete : CommandComplete (command_op_code = LE_RAND) {
2450 status : ErrorCode,
2451 random_number : 64,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002452}
2453
Myles Watson1d8aa282019-04-22 14:16:41 -07002454packet LeStartEncryption : LeSecurityCommand (op_code = LE_START_ENCRYPTION) {
Jakub Pawlowski0dfabe12019-09-06 16:27:18 +02002455 connection_handle: 16,
2456 rand: 8[8],
2457 ediv: 16,
2458 ltk: 8[16],
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002459}
2460
Chienyuancefe0722019-11-20 18:00:41 +08002461packet LeStartEncryptionStatus : CommandStatus (command_op_code = LE_START_ENCRYPTION) {
2462}
2463
Myles Watson1d8aa282019-04-22 14:16:41 -07002464packet LeLongTermKeyRequestReply : LeSecurityCommand (op_code = LE_LONG_TERM_KEY_REQUEST_REPLY) {
Jakub Pawlowski0dfabe12019-09-06 16:27:18 +02002465 connection_handle: 16,
2466 long_term_key: 8[16],
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002467}
2468
Myles Watson1d8aa282019-04-22 14:16:41 -07002469packet LeLongTermKeyRequestNegativeReply : LeSecurityCommand (op_code = LE_LONG_TERM_KEY_REQUEST_NEGATIVE_REPLY) {
2470 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002471}
2472
Myles Watson1d8aa282019-04-22 14:16:41 -07002473packet LeReadSupportedStates : CommandPacket (op_code = LE_READ_SUPPORTED_STATES) {
Chienyuana7ad3fb2019-08-15 18:04:32 +08002474}
2475
2476packet LeReadSupportedStatesComplete : CommandComplete (command_op_code = LE_READ_SUPPORTED_STATES) {
2477 status : ErrorCode,
2478 le_states : 64,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002479}
2480
Myles Watson1d8aa282019-04-22 14:16:41 -07002481packet LeReceiverTest : CommandPacket (op_code = LE_RECEIVER_TEST) {
2482 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002483}
2484
Myles Watson1d8aa282019-04-22 14:16:41 -07002485packet LeTransmitterTest : CommandPacket (op_code = LE_TRANSMITTER_TEST) {
2486 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002487}
2488
Myles Watson1d8aa282019-04-22 14:16:41 -07002489packet LeTestEnd : CommandPacket (op_code = LE_TEST_END) {
2490 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002491}
2492
Myles Watson1d8aa282019-04-22 14:16:41 -07002493packet LeRemoteConnectionParameterRequestReply : LeConnectionManagementCommand (op_code = LE_REMOTE_CONNECTION_PARAMETER_REQUEST_REPLY) {
2494 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002495}
2496
Myles Watson1d8aa282019-04-22 14:16:41 -07002497packet LeRemoteConnectionParameterRequestNegativeReply : LeConnectionManagementCommand (op_code = LE_REMOTE_CONNECTION_PARAMETER_REQUEST_NEGATIVE_REPLY) {
2498 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002499}
2500
2501
Myles Watson1d8aa282019-04-22 14:16:41 -07002502packet LeSetDataLength : LeConnectionManagementCommand (op_code = LE_SET_DATA_LENGTH) {
2503 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002504}
2505
Myles Watson1d8aa282019-04-22 14:16:41 -07002506packet LeReadSuggestedDefaultDataLength : LeConnectionManagementCommand (op_code = LE_READ_SUGGESTED_DEFAULT_DATA_LENGTH) {
2507 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002508}
2509
Myles Watson1d8aa282019-04-22 14:16:41 -07002510packet LeWriteSuggestedDefaultDataLength : LeConnectionManagementCommand (op_code = LE_WRITE_SUGGESTED_DEFAULT_DATA_LENGTH) {
2511 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002512}
2513
Myles Watson1d8aa282019-04-22 14:16:41 -07002514packet LeReadLocalP256PublicKeyCommand : LeSecurityCommand (op_code = LE_READ_LOCAL_P_256_PUBLIC_KEY_COMMAND) {
2515 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002516}
2517
Myles Watson1d8aa282019-04-22 14:16:41 -07002518packet LeGenerateDhkeyCommand : LeSecurityCommand (op_code = LE_GENERATE_DHKEY_COMMAND) {
2519 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002520}
2521
Myles Watson1d8aa282019-04-22 14:16:41 -07002522packet LeAddDeviceToResolvingList : LeSecurityCommand (op_code = LE_ADD_DEVICE_TO_RESOLVING_LIST) {
2523 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002524}
2525
Chienyuancefe0722019-11-20 18:00:41 +08002526packet LeAddDeviceToResolvingListComplete : CommandComplete (command_op_code = LE_ADD_DEVICE_TO_RESOLVING_LIST) {
2527 status : ErrorCode,
2528}
2529
Myles Watson1d8aa282019-04-22 14:16:41 -07002530packet LeRemoveDeviceFromResolvingList : LeSecurityCommand (op_code = LE_REMOVE_DEVICE_FROM_RESOLVING_LIST) {
2531 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002532}
2533
Chienyuancefe0722019-11-20 18:00:41 +08002534packet LeRemoveDeviceFromResolvingListComplete : CommandComplete (command_op_code = LE_REMOVE_DEVICE_FROM_RESOLVING_LIST) {
2535 status : ErrorCode,
2536}
2537
Myles Watson1d8aa282019-04-22 14:16:41 -07002538packet LeClearResolvingList : LeSecurityCommand (op_code = LE_CLEAR_RESOLVING_LIST) {
2539 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002540}
2541
Chienyuancefe0722019-11-20 18:00:41 +08002542packet LeClearResolvingListComplete : CommandComplete (command_op_code = LE_CLEAR_RESOLVING_LIST) {
2543 status : ErrorCode,
2544}
2545
Myles Watson1d8aa282019-04-22 14:16:41 -07002546packet LeReadResolvingListSize : LeSecurityCommand (op_code = LE_READ_RESOLVING_LIST_SIZE) {
2547 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002548}
2549
Myles Watson1d8aa282019-04-22 14:16:41 -07002550packet LeReadPeerResolvableAddress : LeSecurityCommand (op_code = LE_READ_PEER_RESOLVABLE_ADDRESS) {
2551 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002552}
2553
Myles Watson1d8aa282019-04-22 14:16:41 -07002554packet LeReadLocalResolvableAddress : LeSecurityCommand (op_code = LE_READ_LOCAL_RESOLVABLE_ADDRESS) {
2555 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002556}
2557
Myles Watson1d8aa282019-04-22 14:16:41 -07002558packet LeSetAddressResolutionEnable : LeSecurityCommand (op_code = LE_SET_ADDRESS_RESOLUTION_ENABLE) {
2559 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002560}
2561
Myles Watson1d8aa282019-04-22 14:16:41 -07002562packet LeSetResolvablePrivateAddressTimeout : LeSecurityCommand (op_code = LE_SET_RESOLVABLE_PRIVATE_ADDRESS_TIMEOUT) {
2563 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002564}
2565
Myles Watson1d8aa282019-04-22 14:16:41 -07002566packet LeReadMaximumDataLength : CommandPacket (op_code = LE_READ_MAXIMUM_DATA_LENGTH) {
Chienyuana7ad3fb2019-08-15 18:04:32 +08002567}
2568
2569struct LeMaximumDataLength {
2570 supported_max_tx_octets : 16,
2571 supported_max_tx_time: 16,
2572 supported_max_rx_octets : 16,
2573 supported_max_rx_time: 16,
2574}
2575
2576
2577packet LeReadMaximumDataLengthComplete : CommandComplete (command_op_code = LE_READ_MAXIMUM_DATA_LENGTH) {
2578 status : ErrorCode,
2579 le_maximum_data_length : LeMaximumDataLength,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002580}
2581
Myles Watson1d8aa282019-04-22 14:16:41 -07002582packet LeReadPhy : LeConnectionManagementCommand (op_code = LE_READ_PHY) {
2583 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002584}
2585
Myles Watson1d8aa282019-04-22 14:16:41 -07002586packet LeSetDefaultPhy : LeConnectionManagementCommand (op_code = LE_SET_DEFAULT_PHY) {
2587 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002588}
2589
Myles Watson1d8aa282019-04-22 14:16:41 -07002590packet LeSetPhy : LeConnectionManagementCommand (op_code = LE_SET_PHY) {
2591 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002592}
2593
Myles Watson1d8aa282019-04-22 14:16:41 -07002594packet LeEnhancedReceiverTest : CommandPacket (op_code = LE_ENHANCED_RECEIVER_TEST) {
2595 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002596}
2597
Myles Watson1d8aa282019-04-22 14:16:41 -07002598packet LeEnhancedTransmitterTest : CommandPacket (op_code = LE_ENHANCED_TRANSMITTER_TEST) {
2599 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002600}
2601
Myles Watson1d8aa282019-04-22 14:16:41 -07002602packet LeSetExtendedAdvertisingRandomAddress : LeAdvertisingCommand (op_code = LE_SET_EXTENDED_ADVERTISING_RANDOM_ADDRESS) {
2603 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002604}
2605
Myles Watson1d8aa282019-04-22 14:16:41 -07002606packet LeSetExtendedAdvertisingParameters : LeAdvertisingCommand (op_code = LE_SET_EXTENDED_ADVERTISING_PARAMETERS) {
2607 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002608}
2609
Myles Watson1d8aa282019-04-22 14:16:41 -07002610packet LeSetExtendedAdvertisingData : LeAdvertisingCommand (op_code = LE_SET_EXTENDED_ADVERTISING_DATA) {
2611 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002612}
2613
Myles Watson1d8aa282019-04-22 14:16:41 -07002614packet LeSetExtendedAdvertisingScanResponse : LeAdvertisingCommand (op_code = LE_SET_EXTENDED_ADVERTISING_SCAN_RESPONSE) {
2615 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002616}
2617
Myles Watson1d8aa282019-04-22 14:16:41 -07002618packet LeSetExtendedAdvertisingEnable : LeAdvertisingCommand (op_code = LE_SET_EXTENDED_ADVERTISING_ENABLE) {
2619 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002620}
2621
Myles Watson1d8aa282019-04-22 14:16:41 -07002622packet LeReadMaximumAdvertisingDataLength : CommandPacket (op_code = LE_READ_MAXIMUM_ADVERTISING_DATA_LENGTH) {
Chienyuana7ad3fb2019-08-15 18:04:32 +08002623}
2624
2625packet LeReadMaximumAdvertisingDataLengthComplete : CommandComplete (command_op_code = LE_READ_MAXIMUM_ADVERTISING_DATA_LENGTH) {
2626 status : ErrorCode,
2627 maximum_advertising_data_length : 16,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002628}
2629
Myles Watson1d8aa282019-04-22 14:16:41 -07002630packet LeReadNumberOfSupportedAdvertisingSets : CommandPacket (op_code = LE_READ_NUMBER_OF_SUPPORTED_ADVERTISING_SETS) {
Chienyuana7ad3fb2019-08-15 18:04:32 +08002631}
2632
2633packet LeReadNumberOfSupportedAdvertisingSetsComplete : CommandComplete (command_op_code = LE_READ_NUMBER_OF_SUPPORTED_ADVERTISING_SETS) {
2634 status : ErrorCode,
2635 number_supported_advertising_sets : 8,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002636}
2637
Myles Watson1d8aa282019-04-22 14:16:41 -07002638packet LeRemoveAdvertisingSet : LeAdvertisingCommand (op_code = LE_REMOVE_ADVERTISING_SET) {
2639 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002640}
2641
Myles Watson1d8aa282019-04-22 14:16:41 -07002642packet LeClearAdvertisingSets : LeAdvertisingCommand (op_code = LE_CLEAR_ADVERTISING_SETS) {
2643 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002644}
2645
Myles Watson1d8aa282019-04-22 14:16:41 -07002646packet LeSetPeriodicAdvertisingParam : LeAdvertisingCommand (op_code = LE_SET_PERIODIC_ADVERTISING_PARAM) {
2647 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002648}
2649
Myles Watson1d8aa282019-04-22 14:16:41 -07002650packet LeSetPeriodicAdvertisingData : LeAdvertisingCommand (op_code = LE_SET_PERIODIC_ADVERTISING_DATA) {
2651 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002652}
2653
Myles Watson1d8aa282019-04-22 14:16:41 -07002654packet LeSetPeriodicAdvertisingEnable : LeAdvertisingCommand (op_code = LE_SET_PERIODIC_ADVERTISING_ENABLE) {
2655 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002656}
2657
Myles Watson0494eb52019-11-06 11:08:04 -08002658packet LeSetExtendedScanParameters : LeScanningCommand (op_code = LE_SET_EXTENDED_SCAN_PARAMETERS) {
2659 le_scan_type : LeScanType,
2660 le_scan_interval : 32, // 0x0004-0x00FFFFFF Default 0x10 (10ms)
2661 le_scan_window : 32, // 0x004-0xFFFF Default 0x10 (10ms)
2662 own_address_type : AddressType,
2663 scanning_filter_policy : LeSetScanningFilterPolicy,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002664}
2665
Myles Watson0494eb52019-11-06 11:08:04 -08002666packet LeSetExtendedScanParametersComplete : CommandComplete (command_op_code = LE_SET_EXTENDED_SCAN_PARAMETERS) {
2667 status : ErrorCode,
2668}
2669
2670enum FilterDuplicates : 8 {
2671 DISABLED = 0,
2672 ENABLED = 1,
2673 RESET_EACH_PERIOD = 2,
2674}
2675
2676packet LeSetExtendedScanEnable : LeScanningCommand (op_code = LE_SET_EXTENDED_SCAN_ENABLE) {
2677 enable : Enable,
2678 filter_duplicates : FilterDuplicates,
2679 duration : 16, // 0 - Scan continuously, N * 10 ms
2680 period : 16, // 0 - Scan continuously, N * 1.28 sec
2681}
2682
2683packet LeSetExtendedScanEnableComplete : CommandComplete (command_op_code = LE_SET_EXTENDED_SCAN_ENABLE) {
2684 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002685}
2686
Myles Watson38ea5ac2019-05-08 16:15:01 -07002687packet LeExtendedCreateConnection : LeConnectionManagementCommand (op_code = LE_EXTENDED_CREATE_CONNECTION) {
Myles Watson1d8aa282019-04-22 14:16:41 -07002688 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002689}
2690
Myles Watson1d8aa282019-04-22 14:16:41 -07002691packet LePeriodicAdvertisingCreateSync : LeAdvertisingCommand (op_code = LE_PERIODIC_ADVERTISING_CREATE_SYNC) {
2692 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002693}
2694
Myles Watson1d8aa282019-04-22 14:16:41 -07002695packet LePeriodicAdvertisingCreateSyncCancel : LeAdvertisingCommand (op_code = LE_PERIODIC_ADVERTISING_CREATE_SYNC_CANCEL) {
2696 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002697}
2698
Myles Watson1d8aa282019-04-22 14:16:41 -07002699packet LePeriodicAdvertisingTerminateSync : LeAdvertisingCommand (op_code = LE_PERIODIC_ADVERTISING_TERMINATE_SYNC) {
2700 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002701}
2702
Myles Watson1d8aa282019-04-22 14:16:41 -07002703packet LeAddDeviceToPeriodicAdvertisingList : LeAdvertisingCommand (op_code = LE_ADD_DEVICE_TO_PERIODIC_ADVERTISING_LIST) {
2704 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002705}
2706
Myles Watson1d8aa282019-04-22 14:16:41 -07002707packet LeRemoveDeviceFromPeriodicAdvertisingList : LeAdvertisingCommand (op_code = LE_REMOVE_DEVICE_FROM_PERIODIC_ADVERTISING_LIST) {
2708 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002709}
2710
Myles Watson1d8aa282019-04-22 14:16:41 -07002711packet LeClearPeriodicAdvertisingList : LeAdvertisingCommand (op_code = LE_CLEAR_PERIODIC_ADVERTISING_LIST) {
2712 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002713}
2714
Myles Watson1d8aa282019-04-22 14:16:41 -07002715packet LeReadPeriodicAdvertisingListSize : LeAdvertisingCommand (op_code = LE_READ_PERIODIC_ADVERTISING_LIST_SIZE) {
2716 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002717}
2718
Myles Watson1d8aa282019-04-22 14:16:41 -07002719packet LeReadTransmitPower : LeAdvertisingCommand (op_code = LE_READ_TRANSMIT_POWER) {
2720 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002721}
2722
Myles Watson1d8aa282019-04-22 14:16:41 -07002723packet LeReadRfPathCompensationPower : LeAdvertisingCommand (op_code = LE_READ_RF_PATH_COMPENSATION_POWER) {
2724 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002725}
2726
Myles Watson1d8aa282019-04-22 14:16:41 -07002727packet LeWriteRfPathCompensationPower : LeAdvertisingCommand (op_code = LE_WRITE_RF_PATH_COMPENSATION_POWER) {
2728 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002729}
2730
Myles Watson1d8aa282019-04-22 14:16:41 -07002731packet LeSetPrivacyMode : LeSecurityCommand (op_code = LE_SET_PRIVACY_MODE) {
2732 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002733}
2734
Chienyuancefe0722019-11-20 18:00:41 +08002735packet LeSetPrivacyModeComplete : CommandComplete (command_op_code = LE_SET_PRIVACY_MODE) {
2736 status : ErrorCode,
2737}
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002738
2739 // VENDOR_SPECIFIC
Myles Watson1d8aa282019-04-22 14:16:41 -07002740packet LeGetVendorCapabilities : VendorCommand (op_code = LE_GET_VENDOR_CAPABILITIES) {
Chienyuan1beb9f82019-09-03 14:24:26 +08002741}
2742
2743struct VendorCapabilities {
2744 is_supported : 8,
2745 max_advt_instances: 8,
2746 offloaded_resolution_of_private_address : 8,
2747 total_scan_results_storage: 16,
2748 max_irk_list_sz: 8,
2749 filtering_support: 8,
2750 max_filter: 8,
2751 activity_energy_info_support: 8,
2752 version_supported: 16,
2753 total_num_of_advt_tracked: 16,
2754 extended_scan_support: 8,
2755 debug_logging_supported: 8,
2756 le_address_generation_offloading_support: 8,
2757 a2dp_source_offload_capability_mask: 32,
2758 bluetooth_quality_report_support: 8
2759}
2760
2761struct BaseVendorCapabilities {
2762 max_advt_instances: 8,
2763 offloaded_resolution_of_private_address : 8,
2764 total_scan_results_storage: 16,
2765 max_irk_list_sz: 8,
2766 filtering_support: 8,
2767 max_filter: 8,
2768 activity_energy_info_support: 8,
2769}
2770
2771packet LeGetVendorCapabilitiesComplete : CommandComplete (command_op_code = LE_GET_VENDOR_CAPABILITIES) {
2772 status : ErrorCode,
2773 base_vendor_capabilities : BaseVendorCapabilities,
2774 _payload_,
2775}
2776packet LeGetVendorCapabilitiesComplete095 : LeGetVendorCapabilitiesComplete {
2777 version_supported: 16,
2778 total_num_of_advt_tracked: 16,
2779 extended_scan_support: 8,
2780 debug_logging_supported: 8,
2781 _payload_,
2782}
2783packet LeGetVendorCapabilitiesComplete096 : LeGetVendorCapabilitiesComplete095 {
2784 le_address_generation_offloading_support: 8,
2785 _payload_,
2786}
2787
2788packet LeGetVendorCapabilitiesComplete098 : LeGetVendorCapabilitiesComplete096 {
2789 a2dp_source_offload_capability_mask: 32,
2790 bluetooth_quality_report_support: 8
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002791}
2792
Myles Watsonfb2fec72019-10-22 16:21:44 -07002793enum SubOcf : 8 {
Myles Watson41bab612019-11-11 08:34:49 -08002794 SET_PARAM = 0x01,
2795 SET_DATA = 0x02,
2796 SET_SCAN_RESP = 0x03,
2797 SET_RANDOM_ADDR = 0x04,
2798 SET_ENABLE = 0x05,
Myles Watsonfb2fec72019-10-22 16:21:44 -07002799}
2800
2801packet LeMultiAdvt : LeAdvertisingCommand (op_code = LE_MULTI_ADVT) {
2802 sub_cmd : SubOcf,
2803 _body_,
2804}
2805
Myles Watson41bab612019-11-11 08:34:49 -08002806packet LeMultiAdvtComplete : CommandComplete (command_op_code = LE_MULTI_ADVT) {
Myles Watsonfb2fec72019-10-22 16:21:44 -07002807 status : ErrorCode,
2808 sub_cmd : SubOcf,
2809}
2810
Myles Watson41bab612019-11-11 08:34:49 -08002811packet LeMultiAdvtParam : LeMultiAdvt (sub_cmd = SET_PARAM) {
Myles Watsonfb2fec72019-10-22 16:21:44 -07002812 interval_min : 16,
2813 interval_max : 16,
2814 type : AdvertisingEventType,
2815 own_address_type : AddressType,
2816 peer_address_type : PeerAddressType,
2817 peer_address : Address,
2818 channel_map : 8,
2819 filter_policy : AdvertisingFilterPolicy,
2820 _reserved_ : 6,
2821 instance : 8,
2822 tx_power : 8,
2823}
2824
Myles Watson41bab612019-11-11 08:34:49 -08002825packet LeMultiAdvtParamComplete : LeMultiAdvtComplete (sub_cmd = SET_PARAM) {
2826}
2827
2828packet LeMultiAdvtSetData : LeMultiAdvt (sub_cmd = SET_DATA) {
Myles Watsonfb2fec72019-10-22 16:21:44 -07002829 _size_(advertising_data) : 8,
2830 advertising_data : GapData[],
2831 _padding_[31], // Zero padding to 31 bytes of advertising_data
2832 advertising_instance : 8,
2833}
2834
Myles Watson41bab612019-11-11 08:34:49 -08002835packet LeMultiAdvtSetDataComplete : LeMultiAdvtComplete (sub_cmd = SET_DATA) {
2836}
2837
2838packet LeMultiAdvtSetScanResp : LeMultiAdvt (sub_cmd = SET_SCAN_RESP) {
Myles Watsonfb2fec72019-10-22 16:21:44 -07002839 _size_(advertising_data) : 8,
2840 advertising_data : GapData[],
2841 _padding_[31], // Zero padding to 31 bytes of advertising_data
2842 advertising_instance : 8,
2843}
2844
Myles Watson41bab612019-11-11 08:34:49 -08002845packet LeMultiAdvtSetScanRespComplete : LeMultiAdvtComplete (sub_cmd = SET_SCAN_RESP) {
2846}
2847
2848packet LeMultiAdvtSetRandomAddr : LeMultiAdvt (sub_cmd = SET_RANDOM_ADDR) {
Myles Watsonfb2fec72019-10-22 16:21:44 -07002849 random_address : Address,
2850 advertising_instance : 8,
2851}
2852
Myles Watson41bab612019-11-11 08:34:49 -08002853packet LeMultiAdvtSetRandomAddrComplete : LeMultiAdvtComplete (sub_cmd = SET_RANDOM_ADDR) {
2854}
2855
2856packet LeMultiAdvtSetEnable : LeMultiAdvt (sub_cmd = SET_ENABLE) {
Myles Watsonfb2fec72019-10-22 16:21:44 -07002857 advertising_enable : Enable, // Default DISABLED
2858 advertising_instance : 8,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002859}
2860
Myles Watson41bab612019-11-11 08:34:49 -08002861packet LeMultiAdvtSetEnableComplete : LeMultiAdvtComplete (sub_cmd = SET_ENABLE) {
2862}
2863
Myles Watson1d8aa282019-04-22 14:16:41 -07002864packet LeBatchScan : VendorCommand (op_code = LE_BATCH_SCAN) {
2865 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002866}
2867
Myles Watsonfb2fec72019-10-22 16:21:44 -07002868enum ApcfOpcode : 8 {
2869 ENABLE = 0x00,
2870 SET_FILTERING_PARAMETERS = 0x01,
2871 BROADCASTER_ADDRESS = 0x02,
2872 SERVICE_UUID = 0x03,
2873 SERVICE_SOLICITATION_UUID = 0x04,
2874 LOCAL_NAME = 0x05,
2875 MANUFACTURER_DATA = 0x06,
2876 SERVICE_DATA = 0x07,
2877}
2878
Myles Watson1d8aa282019-04-22 14:16:41 -07002879packet LeAdvFilter : VendorCommand (op_code = LE_ADV_FILTER) {
Myles Watsonfb2fec72019-10-22 16:21:44 -07002880 apcf_opcode : ApcfOpcode,
2881 _body_,
2882}
2883
2884packet LeAdvFilterComplete : CommandComplete (command_op_code = LE_ADV_FILTER) {
2885 status : ErrorCode,
2886 apcf_opcode : ApcfOpcode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002887}
2888
Myles Watson1d8aa282019-04-22 14:16:41 -07002889packet LeTrackAdv : VendorCommand (op_code = LE_TRACK_ADV) {
2890 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002891}
2892
Myles Watson1d8aa282019-04-22 14:16:41 -07002893packet LeEnergyInfo : VendorCommand (op_code = LE_ENERGY_INFO) {
2894 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002895}
2896
Myles Watson0494eb52019-11-06 11:08:04 -08002897packet LeExtendedScanParams : LeScanningCommand (op_code = LE_EXTENDED_SCAN_PARAMS) {
2898 le_scan_type : LeScanType,
2899 le_scan_interval : 32, // 0x0004-0x4000 Default 0x10 (10ms)
2900 le_scan_window : 32, // Default 0x10 (10ms)
2901 own_address_type : AddressType,
2902 scanning_filter_policy : LeSetScanningFilterPolicy,
2903}
2904
2905packet LeExtendedScanParamsComplete : CommandComplete (command_op_code = LE_EXTENDED_SCAN_PARAMS) {
2906 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002907}
2908
Myles Watson1d8aa282019-04-22 14:16:41 -07002909packet ControllerDebugInfo : VendorCommand (op_code = CONTROLLER_DEBUG_INFO) {
2910 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002911}
2912
Myles Watson1d8aa282019-04-22 14:16:41 -07002913packet ControllerA2DPOpcode : VendorCommand (op_code = CONTROLLER_A2DP_OPCODE) {
2914 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002915}
2916
2917// HCI Event Packets
2918
Myles Watson1d8aa282019-04-22 14:16:41 -07002919packet InquiryComplete : EventPacket (event_code = INQUIRY_COMPLETE){
Myles Watson38ea5ac2019-05-08 16:15:01 -07002920 status : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002921}
2922
Myles Watson1d8aa282019-04-22 14:16:41 -07002923packet InquiryResult : EventPacket (event_code = INQUIRY_RESULT){
2924 num_responses : 8,
2925 bd_addr : Address,
2926 page_scan_repetition_mode : PageScanRepetitionMode,
2927 _reserved_ : 8,
2928 _reserved_ : 8,
2929 class_of_device : ClassOfDevice,
2930 clock_offset : 15,
2931 _reserved_ : 1,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002932}
2933
2934enum LinkType : 8 {
2935 SCO = 0x00,
2936 ACL = 0x01,
2937}
2938
Myles Watson1d8aa282019-04-22 14:16:41 -07002939packet ConnectionComplete : EventPacket (event_code = CONNECTION_COMPLETE){
Myles Watson38ea5ac2019-05-08 16:15:01 -07002940 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07002941 connection_handle : 12,
2942 _reserved_ : 4,
2943 bd_addr : Address,
2944 link_type : LinkType,
2945 encryption_enabled : Enable,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002946}
2947
2948enum ConnectionRequestLinkType : 8 {
2949 SCO = 0x00,
2950 ACL = 0x01,
2951 ESCO = 0x02,
2952}
2953
Myles Watson1d8aa282019-04-22 14:16:41 -07002954packet ConnectionRequest : EventPacket (event_code = CONNECTION_REQUEST){
2955 bd_addr : Address,
2956 class_of_device : ClassOfDevice,
2957 link_type : ConnectionRequestLinkType,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002958}
2959
Myles Watson1d8aa282019-04-22 14:16:41 -07002960packet DisconnectionComplete : EventPacket (event_code = DISCONNECTION_COMPLETE){
Myles Watson38ea5ac2019-05-08 16:15:01 -07002961 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07002962 connection_handle : 12,
2963 _reserved_ : 4,
Myles Watson38ea5ac2019-05-08 16:15:01 -07002964 reason : ErrorCode,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002965}
2966
Myles Watson1d8aa282019-04-22 14:16:41 -07002967packet AuthenticationComplete : EventPacket (event_code = AUTHENTICATION_COMPLETE){
Myles Watson38ea5ac2019-05-08 16:15:01 -07002968 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07002969 connection_handle : 12,
2970 _reserved_ : 4,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002971}
2972
Myles Watson1d8aa282019-04-22 14:16:41 -07002973packet RemoteNameRequestComplete : EventPacket (event_code = REMOTE_NAME_REQUEST_COMPLETE){
Myles Watson38ea5ac2019-05-08 16:15:01 -07002974 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07002975 bd_addr : Address,
Myles Watson2d234432019-08-19 13:33:27 -07002976 remote_name : 8[248], // UTF-8 encoded user-friendly descriptive name
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002977}
2978
2979enum EncryptionEnabled : 8 {
2980 OFF = 0x00,
2981 ON = 0x01, // E0 for BR/EDR and AES-CCM for LE
2982 BR_EDR_AES_CCM = 0x02,
2983}
2984
Myles Watson1d8aa282019-04-22 14:16:41 -07002985packet EncryptionChange : EventPacket (event_code = ENCRYPTION_CHANGE){
Myles Watson38ea5ac2019-05-08 16:15:01 -07002986 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07002987 connection_handle : 12,
2988 _reserved_ : 4,
2989 encryption_enabled : EncryptionEnabled,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002990}
2991
Myles Watson1d8aa282019-04-22 14:16:41 -07002992packet ChangeConnectionLinkKeyComplete : EventPacket (event_code = CHANGE_CONNECTION_LINK_KEY_COMPLETE){
Myles Watson38ea5ac2019-05-08 16:15:01 -07002993 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07002994 connection_handle : 12,
2995 _reserved_ : 4,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07002996}
2997
Myles Watson1d8aa282019-04-22 14:16:41 -07002998packet MasterLinkKeyComplete : EventPacket (event_code = MASTER_LINK_KEY_COMPLETE){
Myles Watson38ea5ac2019-05-08 16:15:01 -07002999 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07003000 connection_handle : 12,
3001 _reserved_ : 4,
3002 key_flag : KeyFlag,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003003}
3004
Myles Watson1d8aa282019-04-22 14:16:41 -07003005packet ReadRemoteSupportedFeaturesComplete : EventPacket (event_code = READ_REMOTE_SUPPORTED_FEATURES_COMPLETE){
Myles Watson38ea5ac2019-05-08 16:15:01 -07003006 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07003007 connection_handle : 12,
3008 _reserved_ : 4,
3009 lmp_features : 64,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003010}
3011
Myles Watson1d8aa282019-04-22 14:16:41 -07003012packet ReadRemoteVersionInformationComplete : EventPacket (event_code = READ_REMOTE_VERSION_INFORMATION_COMPLETE){
Myles Watson38ea5ac2019-05-08 16:15:01 -07003013 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07003014 connection_handle : 12,
3015 _reserved_ : 4,
3016 version : 8,
Chienyuanf58d5112019-11-14 20:25:26 +08003017 manufacturer_name : 16,
3018 sub_version : 16,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003019}
3020
Myles Watson1d8aa282019-04-22 14:16:41 -07003021packet QosSetupComplete : EventPacket (event_code = QOS_SETUP_COMPLETE){
Myles Watson38ea5ac2019-05-08 16:15:01 -07003022 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07003023 connection_handle : 12,
3024 _reserved_ : 4,
3025 _reserved_ : 8,
3026 service_type : ServiceType,
3027 token_rate : 32, // Octets/s
3028 peak_bandwidth : 32, // Octets/s
3029 latency : 32, // Octets/s
3030 delay_variation : 32, // microseconds
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003031}
3032
3033// Command Complete and Command Status Events are implemented above Commands.
3034
Myles Watson1d8aa282019-04-22 14:16:41 -07003035packet HardwareError : EventPacket (event_code = HARDWARE_ERROR){
3036 hardware_code : 8,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003037}
3038
Myles Watson1d8aa282019-04-22 14:16:41 -07003039packet FlushOccurred : EventPacket (event_code = FLUSH_OCCURRED){
3040 connection_handle : 12,
3041 _reserved_ : 4,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003042}
3043
Myles Watson1d8aa282019-04-22 14:16:41 -07003044packet RoleChange : EventPacket (event_code = ROLE_CHANGE){
Myles Watson38ea5ac2019-05-08 16:15:01 -07003045 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07003046 bd_addr : Address,
3047 new_role : Role,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003048}
3049
Myles Watson1d8aa282019-04-22 14:16:41 -07003050packet NumberOfCompletedPackets : EventPacket (event_code = NUMBER_OF_COMPLETED_PACKETS){
Myles Watson2d234432019-08-19 13:33:27 -07003051 _count_(completed_packets) : 8,
3052 completed_packets : CompletedPackets[],
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003053}
3054
3055enum Mode : 8 {
3056 ACTIVE = 0x00,
3057 HOLD = 0x01,
3058 SNIFF = 0x02,
3059}
3060
Myles Watson1d8aa282019-04-22 14:16:41 -07003061packet ModeChange : EventPacket (event_code = MODE_CHANGE){
Myles Watson38ea5ac2019-05-08 16:15:01 -07003062 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07003063 connection_handle : 12,
3064 _reserved_ : 4,
3065 current_mode : Mode,
3066 interval : 16, // 0x002 - 0xFFFE (1.25ms - 40.9s)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003067}
3068
Martin Brabham9f4120f2019-11-07 12:12:17 -08003069struct ZeroKeyAndAddress {
3070 address : Address,
3071 _fixed_ = 0 : 64,
3072 _fixed_ = 0 : 64,
3073}
3074
Myles Watson1d8aa282019-04-22 14:16:41 -07003075packet ReturnLinkKeys : EventPacket (event_code = RETURN_LINK_KEYS){
Martin Brabham9f4120f2019-11-07 12:12:17 -08003076 _count_(keys) : 8,
3077 keys : ZeroKeyAndAddress[],
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003078}
3079
Myles Watson1d8aa282019-04-22 14:16:41 -07003080packet PinCodeRequest : EventPacket (event_code = PIN_CODE_REQUEST){
3081 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003082}
3083
Myles Watson1d8aa282019-04-22 14:16:41 -07003084packet LinkKeyRequest : EventPacket (event_code = LINK_KEY_REQUEST){
3085 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003086}
3087
Martin Brabham9f4120f2019-11-07 12:12:17 -08003088enum KeyType : 8 {
3089 COMBINATION = 0x00,
3090 DEBUG_COMBINATION = 0x03,
3091 UNAUTHENTICATED_P192 = 0x04,
3092 AUTHENTICATED_P192 = 0x05,
3093 CHANGED = 0x06,
3094 UNAUTHENTICATED_P256 = 0x07,
3095 AUTHENTICATED_P256 = 0x08,
3096}
3097
Myles Watson1d8aa282019-04-22 14:16:41 -07003098packet LinkKeyNotification : EventPacket (event_code = LINK_KEY_NOTIFICATION){
Martin Brabham9f4120f2019-11-07 12:12:17 -08003099 bd_addr : Address,
3100 link_key : 8[16],
3101 key_type : KeyType,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003102}
3103
Myles Watson1d8aa282019-04-22 14:16:41 -07003104packet LoopbackCommand : EventPacket (event_code = LOOPBACK_COMMAND){
3105 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003106}
3107
Myles Watson1d8aa282019-04-22 14:16:41 -07003108packet DataBufferOverflow : EventPacket (event_code = DATA_BUFFER_OVERFLOW){
3109 link_type : LinkType,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003110}
3111
Myles Watson1d8aa282019-04-22 14:16:41 -07003112packet MaxSlotsChange : EventPacket (event_code = MAX_SLOTS_CHANGE){
3113 connection_handle : 12,
3114 _reserved_ : 4,
3115 lmp_max_slots : 8,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003116}
3117
Myles Watson1d8aa282019-04-22 14:16:41 -07003118packet ReadClockOffsetComplete : EventPacket (event_code = READ_CLOCK_OFFSET_COMPLETE){
Myles Watson38ea5ac2019-05-08 16:15:01 -07003119 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07003120 connection_handle : 12,
3121 _reserved_ : 4,
3122 clock_offset : 15,
3123 _reserved_ : 1,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003124}
3125
Chienyuan7eb23652019-09-11 16:37:30 +08003126packet ConnectionPacketTypeChanged : EventPacket (event_code = CONNECTION_PACKET_TYPE_CHANGED){
Myles Watson38ea5ac2019-05-08 16:15:01 -07003127 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07003128 connection_handle : 12,
3129 _reserved_ : 4,
3130 packet_type : 16,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003131}
3132
Myles Watson1d8aa282019-04-22 14:16:41 -07003133packet QosViolation : EventPacket (event_code = QOS_VIOLATION){
3134 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003135}
3136
Myles Watson1d8aa282019-04-22 14:16:41 -07003137packet PageScanRepetitionModeChange : EventPacket (event_code = PAGE_SCAN_REPETITION_MODE_CHANGE){
3138 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003139}
3140
Myles Watson1d8aa282019-04-22 14:16:41 -07003141packet FlowSpecificationComplete : EventPacket (event_code = FLOW_SPECIFICATION_COMPLETE){
Chienyuan7eb23652019-09-11 16:37:30 +08003142 status : ErrorCode,
3143 connection_handle : 12,
3144 _reserved_ : 4,
3145 _reserved_ : 8,
3146 flow_direction : FlowDirection,
3147 service_type : ServiceType,
3148 token_rate : 32, // Octets/s
3149 token_bucket_size : 32,
3150 peak_bandwidth : 32, // Octets/s
3151 access_latency : 32, // Octets/s
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003152}
3153
Myles Watson1d8aa282019-04-22 14:16:41 -07003154packet InquiryResultWithRssi : EventPacket (event_code = INQUIRY_RESULT_WITH_RSSI){
3155 num_responses : 8,
3156 address : Address,
3157 page_scan_repetition_mode : PageScanRepetitionMode,
3158 _reserved_ : 8,
3159 class_of_device : ClassOfDevice,
3160 clock_offset : 15,
3161 _reserved_ : 1,
3162 rssi : 8,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003163}
3164
Myles Watson1d8aa282019-04-22 14:16:41 -07003165packet ReadRemoteExtendedFeaturesComplete : EventPacket (event_code = READ_REMOTE_EXTENDED_FEATURES_COMPLETE){
Myles Watson38ea5ac2019-05-08 16:15:01 -07003166 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07003167 connection_handle : 12,
3168 _reserved_ : 4,
3169 page_number : 8,
3170 maximum_page_number : 8,
3171 extended_lmp_features : 64,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003172}
3173
Myles Watson1d8aa282019-04-22 14:16:41 -07003174packet SynchronousConnectionComplete : EventPacket (event_code = SYNCHRONOUS_CONNECTION_COMPLETE){
3175 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003176}
3177
Myles Watson1d8aa282019-04-22 14:16:41 -07003178packet SynchronousConnectionChanged : EventPacket (event_code = SYNCHRONOUS_CONNECTION_CHANGED){
3179 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003180}
3181
Myles Watson1d8aa282019-04-22 14:16:41 -07003182packet SniffSubratingEvent : EventPacket (event_code = SNIFF_SUBRATING){
Myles Watson38ea5ac2019-05-08 16:15:01 -07003183 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07003184 connection_handle : 12,
3185 _reserved_ : 4,
3186 maximum_transmit_latency : 16, // 0x000 - 0xFFFE (0s - 40.9s)
3187 maximum_receive_latency : 16, // 0x000 - 0xFFFE (0s - 40.9s)
3188 minimum_remote_timeout : 16, // 0x000 - 0xFFFE (0s - 40.9s)
Myles Watsond68d6ce2019-05-22 10:52:49 -07003189 minimum_local_timeout : 16, // 0x000 - 0xFFFE (0s - 40.9s)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003190}
3191
Myles Watson1d8aa282019-04-22 14:16:41 -07003192packet ExtendedInquiryResult : EventPacket (event_code = EXTENDED_INQUIRY_RESULT) {
3193 _fixed_ = 0x01 : 8,
3194 address : Address,
3195 page_scan_repetition_mode : PageScanRepetitionMode,
3196 _reserved_ : 8,
3197 class_of_device : ClassOfDevice,
3198 clock_offset : 15,
3199 _reserved_ : 1,
3200 rssi : 8,
Myles Watson7a0dc392019-07-09 15:24:54 -07003201 extended_inquiry_response : GapData[],
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003202}
3203
Myles Watson1d8aa282019-04-22 14:16:41 -07003204packet EncryptionKeyRefreshComplete : EventPacket (event_code = ENCRYPTION_KEY_REFRESH_COMPLETE){
Myles Watson38ea5ac2019-05-08 16:15:01 -07003205 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07003206 connection_handle : 12,
3207 _reserved_ : 4,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003208}
3209
Myles Watson1d8aa282019-04-22 14:16:41 -07003210packet IoCapabilityRequest : EventPacket (event_code = IO_CAPABILITY_REQUEST){
3211 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003212}
3213
Myles Watson1d8aa282019-04-22 14:16:41 -07003214packet IoCapabilityResponse : EventPacket (event_code = IO_CAPABILITY_RESPONSE){
3215 bd_addr : Address,
3216 io_capability : IoCapability,
3217 oob_data_present : OobDataPresent,
3218 authentication_requirements : AuthenticationRequirements,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003219}
3220
Myles Watson1d8aa282019-04-22 14:16:41 -07003221packet UserConfirmationRequest : EventPacket (event_code = USER_CONFIRMATION_REQUEST){
3222 bd_addr : Address,
3223 numeric_value : 20, // 0x00000-0xF423F (000000 - 999999)
3224 _reserved_ : 12,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003225}
3226
Myles Watson1d8aa282019-04-22 14:16:41 -07003227packet UserPasskeyRequest : EventPacket (event_code = USER_PASSKEY_REQUEST){
3228 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003229}
3230
Myles Watson1d8aa282019-04-22 14:16:41 -07003231packet RemoteOobDataRequest : EventPacket (event_code = REMOTE_OOB_DATA_REQUEST){
3232 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003233}
3234
Myles Watson1d8aa282019-04-22 14:16:41 -07003235packet SimplePairingComplete : EventPacket (event_code = SIMPLE_PAIRING_COMPLETE){
Myles Watson38ea5ac2019-05-08 16:15:01 -07003236 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07003237 bd_addr : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003238}
3239
Myles Watson1d8aa282019-04-22 14:16:41 -07003240packet LinkSupervisionTimeoutChanged : EventPacket (event_code = LINK_SUPERVISION_TIMEOUT_CHANGED){
3241 connection_handle : 12,
3242 _reserved_ : 4,
3243 link_supervision_timeout : 16, // 0x001-0xFFFF (0.625ms-40.9s)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003244}
3245
Myles Watson1d8aa282019-04-22 14:16:41 -07003246packet EnhancedFlushComplete : EventPacket (event_code = ENHANCED_FLUSH_COMPLETE){
3247 connection_handle : 12,
3248 _reserved_ : 4,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003249}
3250
Myles Watson1d8aa282019-04-22 14:16:41 -07003251packet UserPasskeyNotification : EventPacket (event_code = USER_PASSKEY_NOTIFICATION){
3252 bd_addr : Address,
3253 passkey : 20, // 0x00000-0xF423F (000000 - 999999)
3254 _reserved_ : 12,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003255}
3256
Myles Watson1d8aa282019-04-22 14:16:41 -07003257packet KeypressNotification : EventPacket (event_code = KEYPRESS_NOTIFICATION){
3258 bd_addr : Address,
3259 notification_type : KeypressNotificationType,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003260}
3261
Myles Watson1d8aa282019-04-22 14:16:41 -07003262packet RemoteHostSupportedFeaturesNotification : EventPacket (event_code = REMOTE_HOST_SUPPORTED_FEATURES_NOTIFICATION){
3263 bd_addr : Address,
3264 host_supported_features : 64,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003265}
3266
Myles Watson1d8aa282019-04-22 14:16:41 -07003267packet LeMetaEvent : EventPacket (event_code = LE_META_EVENT) {
3268 subevent_code : SubeventCode,
3269 _payload_,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003270}
3271
Myles Watson1d8aa282019-04-22 14:16:41 -07003272packet NumberOfCompletedDataBlocks : EventPacket (event_code = NUMBER_OF_COMPLETED_DATA_BLOCKS){
3273 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003274}
3275
3276// LE Events
3277
3278enum MasterClockAccuracy : 8 {
3279 PPM_500 = 0x00,
3280 PPM_250 = 0x01,
3281 PPM_150 = 0x02,
3282 PPM_100 = 0x03,
3283 PPM_75 = 0x04,
3284 PPM_50 = 0x05,
3285 PPM_30 = 0x06,
3286 PPM_20 = 0x07,
3287}
3288
Myles Watson1d8aa282019-04-22 14:16:41 -07003289packet LeConnectionComplete : LeMetaEvent (subevent_code = CONNECTION_COMPLETE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07003290 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07003291 connection_handle : 12,
3292 _reserved_ : 4,
3293 role : Role,
Chienyuanc0689612019-10-03 16:39:02 +08003294 peer_address_type : AddressType,
Myles Watson1d8aa282019-04-22 14:16:41 -07003295 peer_address : Address,
3296 conn_interval : 16, // 0x006 - 0x0C80 (7.5ms - 4000ms)
3297 conn_latency : 16, // Number of connection events
3298 supervision_timeout : 16, // 0x000A to 0x0C80 (100ms to 32s)
3299 master_clock_accuracy : MasterClockAccuracy,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003300}
3301
Myles Watson7a0dc392019-07-09 15:24:54 -07003302struct LeAdvertisingReport {
3303 event_type : AdvertisingEventType,
3304 address_type : AddressType,
3305 address : Address,
3306 _size_(advertising_data) : 8,
3307 advertising_data : GapData[],
3308 rssi : 8,
3309}
3310
Myles Watson1d8aa282019-04-22 14:16:41 -07003311packet LeAdvertisingReport : LeMetaEvent (subevent_code = ADVERTISING_REPORT) {
Myles Watsonfb2fec72019-10-22 16:21:44 -07003312 _count_(advertising_reports) : 8,
3313 advertising_reports : LeAdvertisingReport[],
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003314}
3315
Myles Watson1d8aa282019-04-22 14:16:41 -07003316packet LeConnectionUpdateComplete : LeMetaEvent (subevent_code = CONNECTION_UPDATE_COMPLETE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07003317 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07003318 connection_handle : 12,
3319 _reserved_ : 4,
3320 conn_interval : 16, // 0x006 - 0x0C80 (7.5ms - 4000ms)
3321 conn_latency : 16, // Number of connection events
3322 supervision_timeout : 16, // 0x000A to 0x0C80 (100ms to 32s)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003323}
3324
Myles Watson1d8aa282019-04-22 14:16:41 -07003325packet LeReadRemoteFeaturesComplete : LeMetaEvent (subevent_code = READ_REMOTE_FEATURES_COMPLETE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07003326 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07003327 connection_handle : 12,
3328 _reserved_ : 4,
3329 le_features : 64,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003330}
3331
Myles Watson1d8aa282019-04-22 14:16:41 -07003332packet LeLongTermKeyRequest : LeMetaEvent (subevent_code = LONG_TERM_KEY_REQUEST) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07003333 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07003334 connection_handle : 12,
3335 _reserved_ : 4,
3336 random_number : 64,
3337 encrypted_diversifier : 16,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003338}
3339
Myles Watson1d8aa282019-04-22 14:16:41 -07003340packet LeRemoteConnectionParameterRequest : LeMetaEvent (subevent_code = REMOTE_CONNECTION_PARAMETER_REQUEST) {
3341 connection_handle : 12,
3342 _reserved_ : 4,
3343 interval_min : 16, // 0x006 - 0x0C80 (7.5ms - 4s)
3344 interval_max : 16, // 0x006 - 0x0C80 (7.5ms - 4s)
3345 latency : 16, // Number of connection events (0x0000 to 0x01f3 (499)
3346 timeout : 16, // 0x000A to 0x0C80 (100ms to 32s)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003347}
3348
Myles Watson1d8aa282019-04-22 14:16:41 -07003349packet LeDataLengthChange : LeMetaEvent (subevent_code = DATA_LENGTH_CHANGE) {
3350 connection_handle : 12,
3351 _reserved_ : 4,
3352 max_tx_octets : 16, // 0x001B - 0x00FB
3353 max_tx_time : 16, // 0x0148 - 0x4290
3354 max_rx_octets : 16, // 0x001B - 0x00FB
3355 max_rx_time : 16, // 0x0148 - 0x4290
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003356}
3357
Myles Watson1d8aa282019-04-22 14:16:41 -07003358packet ReadLocalP256PublicKeyComplete : LeMetaEvent (subevent_code = READ_LOCAL_P256_PUBLIC_KEY_COMPLETE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07003359 status : ErrorCode,
Myles Watson2d234432019-08-19 13:33:27 -07003360 local_p_256_public_key : 8[64],
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003361}
3362
Myles Watson1d8aa282019-04-22 14:16:41 -07003363packet GenerateDhKeyComplete : LeMetaEvent (subevent_code = GENERATE_DHKEY_COMPLETE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07003364 status : ErrorCode,
Myles Watson2d234432019-08-19 13:33:27 -07003365 dh_key : 8[32],
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003366}
3367
Myles Watson1d8aa282019-04-22 14:16:41 -07003368packet LeEnhancedConnectionComplete : LeMetaEvent (subevent_code = ENHANCED_CONNECTION_COMPLETE) {
Myles Watson38ea5ac2019-05-08 16:15:01 -07003369 status : ErrorCode,
Myles Watson1d8aa282019-04-22 14:16:41 -07003370 connection_handle : 12,
3371 _reserved_ : 4,
3372 role : Role,
Chienyuanc0689612019-10-03 16:39:02 +08003373 peer_address_type : AddressType,
Myles Watson1d8aa282019-04-22 14:16:41 -07003374 peer_address : Address,
3375 local_resolvable_private_address : Address,
3376 peer_resolvable_private_address : Address,
3377 conn_interval : 16, // 0x006 - 0x0C80 (7.5ms - 4000ms)
3378 conn_latency : 16, // Number of connection events
3379 supervision_timeout : 16, // 0x000A to 0x0C80 (100ms to 32s)
3380 master_clock_accuracy : MasterClockAccuracy,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003381}
3382
3383enum DirectAdvertisingAddressType : 8 {
3384 PUBLIC_DEVICE_ADDRESS = 0x00,
3385 RANDOM_DEVICE_ADDRESS = 0x01,
3386 PUBLIC_IDENTITY_ADDRESS = 0x02,
3387 RANDOM_IDENTITY_ADDRESS = 0x03,
Myles Watsonfb2fec72019-10-22 16:21:44 -07003388 CONTROLLER_UNABLE_TO_RESOLVE = 0xFE,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003389 NO_ADDRESS = 0xFF,
3390}
3391
3392enum DirectAdvertisingEventType : 8 {
3393 ADV_DIRECT_IND = 0x01,
3394}
3395
3396enum DirectAddressType : 8 {
3397 RANDOM_DEVICE_ADDRESS = 0x01,
3398}
3399
Myles Watson2d234432019-08-19 13:33:27 -07003400struct LeDirectedAdvertisingReport {
3401 event_type : DirectAdvertisingEventType,
3402 address_type : DirectAdvertisingAddressType,
3403 address : Address,
3404 direct_address_type : DirectAddressType,
3405 direct_address : Address,
3406 rssi : 8,
3407}
3408
Myles Watson1d8aa282019-04-22 14:16:41 -07003409packet LeDirectedAdvertisingReport : LeMetaEvent (subevent_code = DIRECTED_ADVERTISING_REPORT) {
Myles Watsonfb2fec72019-10-22 16:21:44 -07003410 _count_(advertising_reports) : 8,
3411 advertising_reports : LeDirectedAdvertisingReport[],
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003412}
3413
Myles Watson1d8aa282019-04-22 14:16:41 -07003414packet LePhyUpdateComplete : LeMetaEvent (subevent_code = PHY_UPDATE_COMPLETE) {
3415 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003416}
3417
Myles Watsonfb2fec72019-10-22 16:21:44 -07003418enum DataStatus : 2 {
3419 COMPLETE = 0x0,
3420 CONTINUING = 0x1,
3421 TRUNCATED = 0x2,
3422 RESERVED = 0x3,
3423}
3424
3425enum PrimaryPhyType : 8 {
3426 LE_1M = 0x01,
3427 LE_CODED = 0x03,
3428}
3429
3430enum SecondaryPhyType : 8 {
3431 NO_PACKETS = 0x00,
3432 LE_1M = 0x01,
3433 LE_2M = 0x02,
3434 LE_CODED = 0x03,
3435}
3436
3437
3438struct LeExtendedAdvertisingReport {
3439 connectable : 1,
3440 scannable : 1,
3441 directed : 1,
3442 scan_response : 1,
3443 data_status : DataStatus,
3444 _reserved_ : 10,
3445 address_type : DirectAdvertisingAddressType,
3446 address : Address,
3447 primary_phy : PrimaryPhyType,
3448 secondary_phy : SecondaryPhyType,
3449 advertising_sid : 4, // SID subfield in the ADI field
3450 _reserved_ : 4,
3451 tx_power : 8,
3452 rssi : 8, // -127 to +20 (0x7F means not available)
3453 periodic_advertising_interval : 16, // 0x006 to 0xFFFF (7.5 ms to 82s)
3454 direct_address_type : DirectAdvertisingAddressType,
3455 direct_address : Address,
3456 _size_(advertising_data) : 8,
3457 advertising_data : GapData[],
3458}
3459
Myles Watson1d8aa282019-04-22 14:16:41 -07003460packet LeExtendedAdvertisingReport : LeMetaEvent (subevent_code = EXTENDED_ADVERTISING_REPORT) {
Myles Watsonfb2fec72019-10-22 16:21:44 -07003461 _count_(advertising_reports) : 8,
3462 advertising_reports : LeExtendedAdvertisingReport[],
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003463}
3464
Myles Watson1d8aa282019-04-22 14:16:41 -07003465packet LePeriodicAdvertisingSyncEstablished : LeMetaEvent (subevent_code = PERIODIC_ADVERTISING_SYNC_ESTABLISHED) {
3466 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003467}
3468
Myles Watson1d8aa282019-04-22 14:16:41 -07003469packet LePeriodicAdvertisingReport : LeMetaEvent (subevent_code = PERIODIC_ADVERTISING_REPORT) {
3470 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003471}
3472
Myles Watson1d8aa282019-04-22 14:16:41 -07003473packet LePeriodicAdvertisingSyncLost : LeMetaEvent (subevent_code = PERIODIC_ADVERTISING_SYNC_LOST) {
3474 _payload_, // placeholder (unimplemented)
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003475}
3476
Myles Watson1d8aa282019-04-22 14:16:41 -07003477packet LeScanTimeout : LeMetaEvent (subevent_code = SCAN_TIMEOUT) {
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003478}
3479
Myles Watson1d8aa282019-04-22 14:16:41 -07003480packet LeAdvertisingSetTerminated : LeMetaEvent (subevent_code = ADVERTISING_SET_TERMINATED) {
Myles Watsonfb2fec72019-10-22 16:21:44 -07003481 status : ErrorCode,
3482 advertising_handle : 8,
3483 connection_handle : 12,
3484 _reserved_ : 4,
3485 num_completed_extended_advertising_events : 8,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003486}
3487
Myles Watson1d8aa282019-04-22 14:16:41 -07003488packet LeScanRequestReceived : LeMetaEvent (subevent_code = SCAN_REQUEST_RECEIVED) {
Myles Watsonfb2fec72019-10-22 16:21:44 -07003489 advertising_handle : 8,
3490 scanner_address_type : AddressType,
3491 scanner_address : Address,
Myles Watsoncc57c6b2019-03-25 15:24:43 -07003492}