Welcome to mirror list, hosted at ThFree Co, Russian Federation.

ble_defs.h « core « ble « STM32_WPAN « ST « Middlewares - github.com/Flipper-Zero/STM32CubeWB.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 90d8233cb46f3ddb3ac9fdc80b410b000f3bb4a9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
/*****************************************************************************
 * @file    ble_defs.h
 * @author  MCD
 * @brief   This file contains definitions used for BLE Stack interface.
 *****************************************************************************
 * @attention
 *
 * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
 * All rights reserved.</center></h2>
 *
 * This software component is licensed by ST under Ultimate Liberty license
 * SLA0044, the "License"; You may not use this file except in compliance with
 * the License. You may obtain a copy of the License at:
 *                             www.st.com/SLA0044
 *
 ******************************************************************************
 */

#ifndef BLE_DEFS_H__
#define BLE_DEFS_H__


/* ------------------------------------------------------------------------- */

/* ACI GAP vendor specific event codes
 */

/* ACI_GAP_LIMITED_DISCOVERABLE_EVENT code: */
#define ACI_GAP_LIMITED_DISCOVERABLE_VSEVT_CODE         0x0400U

/* ACI_GAP_PAIRING_COMPLETE_EVENT code: */
#define ACI_GAP_PAIRING_COMPLETE_VSEVT_CODE             0x0401U

/* ACI_GAP_PASS_KEY_REQ_EVENT code: */
#define ACI_GAP_PASS_KEY_REQ_VSEVT_CODE                 0x0402U

/* ACI_GAP_AUTHORIZATION_REQ_EVENT code: */
#define ACI_GAP_AUTHORIZATION_REQ_VSEVT_CODE            0x0403U

/* ACI_GAP_SLAVE_SECURITY_INITIATED_EVENT code: */
#define ACI_GAP_SLAVE_SECURITY_INITIATED_VSEVT_CODE     0x0404U

/* ACI_GAP_BOND_LOST_EVENT code: */
#define ACI_GAP_BOND_LOST_VSEVT_CODE                    0x0405U

/* ACI_GAP_PROC_COMPLETE_EVENT code: */
#define ACI_GAP_PROC_COMPLETE_VSEVT_CODE                0x0407U

/* ACI_GAP_ADDR_NOT_RESOLVED_EVENT code: */
#define ACI_GAP_ADDR_NOT_RESOLVED_VSEVT_CODE            0x0408U

/* ACI_GAP_NUMERIC_COMPARISON_VALUE_EVENT code: */
#define ACI_GAP_NUMERIC_COMPARISON_VALUE_VSEVT_CODE     0x0409U

/* ACI_GAP_KEYPRESS_NOTIFICATION_EVENT code: */
#define ACI_GAP_KEYPRESS_NOTIFICATION_VSEVT_CODE        0x040AU

/* ACI GATT/ATT vendor specific event codes
 */

/* ACI_GATT_ATTRIBUTE_MODIFIED_EVENT code: */
#define ACI_GATT_ATTRIBUTE_MODIFIED_VSEVT_CODE          0x0C01U

/* ACI_GATT_PROC_TIMEOUT_EVENT code: */
#define ACI_GATT_PROC_TIMEOUT_VSEVT_CODE                0x0C02U

/* ACI_ATT_EXCHANGE_MTU_RESP_EVENT code: */
#define ACI_ATT_EXCHANGE_MTU_RESP_VSEVT_CODE            0x0C03U

/* ACI_ATT_FIND_INFO_RESP_EVENT code: */
#define ACI_ATT_FIND_INFO_RESP_VSEVT_CODE               0x0C04U

/* ACI_ATT_FIND_BY_TYPE_VALUE_RESP_EVENT code: */
#define ACI_ATT_FIND_BY_TYPE_VALUE_RESP_VSEVT_CODE      0x0C05U

/* ACI_ATT_READ_BY_TYPE_RESP_EVENT code: */
#define ACI_ATT_READ_BY_TYPE_RESP_VSEVT_CODE            0x0C06U

/* ACI_ATT_READ_RESP_EVENT code: */
#define ACI_ATT_READ_RESP_VSEVT_CODE                    0x0C07U

/* ACI_ATT_READ_BLOB_RESP_EVENT code: */
#define ACI_ATT_READ_BLOB_RESP_VSEVT_CODE               0x0C08U

/* ACI_ATT_READ_MULTIPLE_RESP_EVENT code: */
#define ACI_ATT_READ_MULTIPLE_RESP_VSEVT_CODE           0x0C09U

/* ACI_ATT_READ_BY_GROUP_TYPE_RESP_EVENT code: */
#define ACI_ATT_READ_BY_GROUP_TYPE_RESP_VSEVT_CODE      0x0C0AU

/* ACI_ATT_PREPARE_WRITE_RESP_EVENT code: */
#define ACI_ATT_PREPARE_WRITE_RESP_VSEVT_CODE           0x0C0CU

/* ACI_ATT_EXEC_WRITE_RESP_EVENT code: */
#define ACI_ATT_EXEC_WRITE_RESP_VSEVT_CODE              0x0C0DU

/* ACI_GATT_INDICATION_EVENT code: */
#define ACI_GATT_INDICATION_VSEVT_CODE                  0x0C0EU

/* ACI_GATT_NOTIFICATION_EVENT code: */
#define ACI_GATT_NOTIFICATION_VSEVT_CODE                0x0C0FU

/* ACI_GATT_PROC_COMPLETE_EVENT code: */
#define ACI_GATT_PROC_COMPLETE_VSEVT_CODE               0x0C10U

/* ACI_GATT_ERROR_RESP_EVENT code: */
#define ACI_GATT_ERROR_RESP_VSEVT_CODE                  0x0C11U

/* ACI_GATT_DISC_READ_CHAR_BY_UUID_RESP_EVENT code: */
#define ACI_GATT_DISC_READ_CHAR_BY_UUID_RESP_VSEVT_CODE 0x0C12U

/* ACI_GATT_WRITE_PERMIT_REQ_EVENT code: */
#define ACI_GATT_WRITE_PERMIT_REQ_VSEVT_CODE            0x0C13U

/* ACI_GATT_READ_PERMIT_REQ_EVENT code: */
#define ACI_GATT_READ_PERMIT_REQ_VSEVT_CODE             0x0C14U

/* ACI_GATT_READ_MULTI_PERMIT_REQ_EVENT code: */
#define ACI_GATT_READ_MULTI_PERMIT_REQ_VSEVT_CODE       0x0C15U

/* ACI_GATT_TX_POOL_AVAILABLE_EVENT code: */
#define ACI_GATT_TX_POOL_AVAILABLE_VSEVT_CODE           0x0C16U

/* ACI_GATT_SERVER_CONFIRMATION_EVENT code: */
#define ACI_GATT_SERVER_CONFIRMATION_VSEVT_CODE         0x0C17U

/* ACI_GATT_PREPARE_WRITE_PERMIT_REQ_EVENT code: */
#define ACI_GATT_PREPARE_WRITE_PERMIT_REQ_VSEVT_CODE    0x0C18U

/* ACI_GATT_READ_EXT_EVENT code: */
#define ACI_GATT_READ_EXT_VSEVT_CODE                    0x0C1DU

/* ACI_GATT_INDICATION_EXT_EVENT code: */
#define ACI_GATT_INDICATION_EXT_VSEVT_CODE              0x0C1EU

/* ACI_GATT_NOTIFICATION_EXT_EVENT code: */
#define ACI_GATT_NOTIFICATION_EXT_VSEVT_CODE            0x0C1FU

/* ACI L2CAP vendor specific event codes
 */

/* ACI_L2CAP_CONNECTION_UPDATE_RESP_EVENT code: */
#define ACI_L2CAP_CONNECTION_UPDATE_RESP_VSEVT_CODE     0x0800U

/* ACI_L2CAP_PROC_TIMEOUT_EVENT code: */
#define ACI_L2CAP_PROC_TIMEOUT_VSEVT_CODE               0x0801U

/* ACI_L2CAP_CONNECTION_UPDATE_REQ_EVENT code: */
#define ACI_L2CAP_CONNECTION_UPDATE_REQ_VSEVT_CODE      0x0802U

/* ACI_L2CAP_COMMAND_REJECT_EVENT code: */
#define ACI_L2CAP_COMMAND_REJECT_VSEVT_CODE             0x080AU

/* ACI_L2CAP_COC_CONNECT_EVENT code: */
#define ACI_L2CAP_COC_CONNECT_VSEVT_CODE                0x0810U

/* ACI_L2CAP_COC_CONNECT_CONFIRM_EVENT code: */
#define ACI_L2CAP_COC_CONNECT_CONFIRM_VSEVT_CODE        0x0811U

/* ACI_L2CAP_COC_RECONF_EVENT code: */
#define ACI_L2CAP_COC_RECONF_VSEVT_CODE                 0x0812U

/* ACI_L2CAP_COC_RECONF_CONFIRM_EVENT code: */
#define ACI_L2CAP_COC_RECONF_CONFIRM_VSEVT_CODE         0x0813U

/* ACI_L2CAP_COC_DISCONNECT_EVENT code: */
#define ACI_L2CAP_COC_DISCONNECT_VSEVT_CODE             0x0814U

/* ACI_L2CAP_COC_FLOW_CONTROL_EVENT code: */
#define ACI_L2CAP_COC_FLOW_CONTROL_VSEVT_CODE           0x0815U

/* ACI_L2CAP_COC_RX_DATA_EVENT code: */
#define ACI_L2CAP_COC_RX_DATA_VSEVT_CODE                0x0816U

/* ACI_L2CAP_COC_TX_POOL_AVAILABLE_EVENT code: */
#define ACI_L2CAP_COC_TX_POOL_AVAILABLE_VSEVT_CODE      0x0817U

/* ACI HAL vendor specific event codes
 */

/* ACI_HAL_END_OF_RADIO_ACTIVITY_EVENT code: */
#define ACI_HAL_END_OF_RADIO_ACTIVITY_VSEVT_CODE        0x0004U

/* ACI_HAL_SCAN_REQ_REPORT_EVENT code: */
#define ACI_HAL_SCAN_REQ_REPORT_VSEVT_CODE              0x0005U

/* ACI_HAL_FW_ERROR_EVENT code: */
#define ACI_HAL_FW_ERROR_VSEVT_CODE                     0x0006U

/* ------------------------------------------------------------------------- */

/* Status codes */

/* Returned when the command has completed with success
 */
#define BLE_STATUS_SUCCESS                              0x00U

/* The Connection Identifier does not exist at SMP level.
 */
#define BLE_STATUS_UNKNOWN_CONNECTION_ID                0x40U

/* The Host failed while performing the requested operation.
 */
#define BLE_STATUS_FAILED                               0x41U

/* Invalid parameters in Host commands
 */
#define BLE_STATUS_INVALID_PARAMS                       0x42U

/* The Host is already processing another request received in advance.
 */
#define BLE_STATUS_BUSY                                 0x43U

/* The operation requested cannot be completed immediately by the Host
 * (usually because of lack of resources). 
 * The operation is generally put on hold by the caller and it's usually 
 * retried on later time.
 */
#define BLE_STATUS_PENDING                              0x45U

/* The requested operation cannot be performed by the Host in the current
 * status.
 */
#define BLE_STATUS_NOT_ALLOWED                          0x46U

/* The requested operation violates the logic of the called layer/function or
 * the format of the data to be processed during the operation.
 */
#define BLE_STATUS_ERROR                                0x47U

/* The requested operation failed because of lack of memory.
 * Out of memory shall be returned for situations where memory will never 
 * become available again (e.g. ATT database)
 */
#define BLE_STATUS_OUT_OF_MEMORY                        0x48U

/* An invalid L2CAP CID/channel has been selected to send data over.
 */
#define BLE_STATUS_INVALID_CID                          0x50U

/* The remote device in in the Blacklist and the pairing operation it requested
 * cannot be performed.
 */
#define BLE_STATUS_DEV_IN_BLACKLIST                     0x59U

/* CSRK not found during validation of an incoming signed packet
 */
#define BLE_STATUS_CSRK_NOT_FOUND                       0x5AU

/* IRK not found (Currently not used)
 */
#define BLE_STATUS_IRK_NOT_FOUND                        0x5BU

/* A search for a specific remote device was unsuccessful because no entry
 * exists either into NVM Database or in volatile database. 
 */
#define BLE_STATUS_DEV_NOT_FOUND                        0x5CU

/* The security database is full and no more records can be added.
 */
#define BLE_STATUS_SEC_DB_FULL                          0x5DU

/* The remote device is not bonded, and no operations related to bonded devices
 * may be performed (e.g. writing Gatt Client data).
 */
#define BLE_STATUS_DEV_NOT_BONDED                       0x5EU

/* The encryption key size used for encrypting the link is insufficient\n
 */
#define BLE_STATUS_INSUFFICIENT_ENC_KEYSIZE             0x5FU

/* The attribute handle is invalid.
 */
#define BLE_STATUS_INVALID_HANDLE                       0x60U

/* There aren't sufficient Attributes handles available for allocation during
 * creation of Services, Characteristics or Descriptors.
 */
#define BLE_STATUS_OUT_OF_HANDLE                        0x61U

/* The requested GATT operation is not allowed in this context/status or using 
 * the provided parameters. 
 * This is a specific GATT error, different from generic Not Allowed error, 
 * because it refers to specific GATT specifications/rules.
 */
#define BLE_STATUS_INVALID_OPERATION                    0x62U

/* The characteristic has already been added to the database.
 */
#define BLE_STATUS_CHARAC_ALREADY_EXISTS                0x63U

/* The requested operation failed for a temporary lack of resources
 * (e.g. packet pool or timers), but it may be retried later when resources may
 * become available (packets or timers may have been released by other
 * consumers).
 */
#define BLE_STATUS_INSUFFICIENT_RESOURCES               0x64U

/* Notification/Indication can't be sent to the requested remote device because
 * it doesn't satisfy the needed security permission.
 */ 
#define BLE_STATUS_SEC_PERMISSION_ERROR                 0x65U

/* The address of the device could not be resolved using the IRK stored\n
 */
#define BLE_STATUS_ADDRESS_NOT_RESOLVED                 0x70U

/* Returned when no valid slots are available
 * (e.g. when there are no available state machines).
 */
#define BLE_STATUS_NO_VALID_SLOT                        0x82U

/* The only slot available is not long enough to satisfy scan window request.
 */
#define BLE_STATUS_SCAN_WINDOW_SHORT                    0x83U

/* Returned when the maximum requested interval to be allocated is shorter
 * then the current anchor period and there is no submultiple for the
 * current anchor period that is between the minimum and the maximum requested
 * intervals.
 */
#define BLE_STATUS_NEW_INTERVAL_FAILED                  0x84U

/* Returned when the maximum requested interval to be allocated is greater
 * than the current anchor period and there is no multiple of the anchor
 * period that is between the minimum and the maximum requested intervals.
 */
#define BLE_STATUS_INTERVAL_TOO_LARGE                   0x85U

/* Returned when the current anchor period or a new one can be found that
 * is compatible to the interval range requested by the new slot but the
 * maximum available length that can be allocated is less than the minimum
 * requested slot length.
 */
#define BLE_STATUS_LENGTH_FAILED                        0x86U

/* Returned when a timeout occurs at BLE application interface
 */
#define BLE_STATUS_TIMEOUT                              0xFFU

/* ------------------------------------------------------------------------- */

/* Characteristic value lengths
 */
#define DEVICE_NAME_CHARACTERISTIC_LEN                  8
#define APPEARANCE_CHARACTERISTIC_LEN                   2
#define PERIPHERAL_PRIVACY_CHARACTERISTIC_LEN           1
#define RECONNECTION_ADDR_CHARACTERISTIC_LEN            6
#define PERIPHERAL_PREF_CONN_PARAMS_CHARACTERISTIC_LEN  8

/* Adv. lengths
 */
#define MAX_ADV_DATA_LEN                              31U
#define BD_ADDR_SIZE                                   6U

/* AD types for adv. data and scan response data
 */
#define AD_TYPE_FLAGS                                0x01U
#define AD_TYPE_16_BIT_SERV_UUID                     0x02U
#define AD_TYPE_16_BIT_SERV_UUID_CMPLT_LIST          0x03U
#define AD_TYPE_32_BIT_SERV_UUID                     0x04U
#define AD_TYPE_32_BIT_SERV_UUID_CMPLT_LIST          0x05U
#define AD_TYPE_128_BIT_SERV_UUID                    0x06U
#define AD_TYPE_128_BIT_SERV_UUID_CMPLT_LIST         0x07U
#define AD_TYPE_SHORTENED_LOCAL_NAME                 0x08U
#define AD_TYPE_COMPLETE_LOCAL_NAME                  0x09U
#define AD_TYPE_TX_POWER_LEVEL                       0x0AU
#define AD_TYPE_CLASS_OF_DEVICE                      0x0DU
#define AD_TYPE_SEC_MGR_TK_VALUE                     0x10U
#define AD_TYPE_SEC_MGR_OOB_FLAGS                    0x11U
#define AD_TYPE_SLAVE_CONN_INTERVAL                  0x12U
#define AD_TYPE_SERV_SOLICIT_16_BIT_UUID_LIST        0x14U
#define AD_TYPE_SERV_SOLICIT_128_BIT_UUID_LIST       0x15U
#define AD_TYPE_SERVICE_DATA                         0x16U
#define AD_TYPE_APPEARANCE                           0x19U
#define AD_TYPE_ADVERTISING_INTERVAL                 0x1AU
#define AD_TYPE_LE_ROLE                              0x1CU
#define AD_TYPE_SERV_SOLICIT_32_BIT_UUID_LIST        0x1FU
#define AD_TYPE_URI                                  0x24U
#define AD_TYPE_MANUFACTURER_SPECIFIC_DATA           0xFFU

/* Flag bits for Flags AD Type
 */
#define FLAG_BIT_LE_LIMITED_DISCOVERABLE_MODE        0x01
#define FLAG_BIT_LE_GENERAL_DISCOVERABLE_MODE        0x02
#define FLAG_BIT_BR_EDR_NOT_SUPPORTED                0x04
#define FLAG_BIT_LE_BR_EDR_CONTROLLER                0x08
#define FLAG_BIT_LE_BR_EDR_HOST                      0x10

/* Appearance values
 */
#define GAP_APPEARANCE_UNKNOWN                                 0x0000
#define GAP_APPEARANCE_GENERIC_PHONE                           0x0040
#define GAP_APPEARANCE_GENERIC_COMPUTER                        0x0080
#define GAP_APPEARANCE_GENERIC_WATCH                           0x00C0
#define GAP_APPEARANCE_WATCH_SPORT_WATCH                       0x00C1
#define GAP_APPEARANCE_GENERIC_CLOCK                           0x0100
#define GAP_APPEARANCE_GENERIC_DISPLAY                         0x0140
#define GAP_APPEARANCE_GENERIC_REMOTE_CONTROL                  0x0180
#define GAP_APPEARANCE_GENERIC_EYE_GLASSES                     0x01C0
#define GAP_APPEARANCE_GENERIC_TAG                             0x0200
#define GAP_APPEARANCE_GENERIC_KEYRING                         0x0240
#define GAP_APPEARANCE_GENERIC_MEDIA_PLAYER                    0x0280
#define GAP_APPEARANCE_GENERIC_BARCODE_SCANNER                 0x02C0
#define GAP_APPEARANCE_GENERIC_THERMOMETER                     0x0300
#define GAP_APPEARANCE_THERMOMETER_EAR                         0x0301
#define GAP_APPEARANCE_GENERIC_HEART_RATE_SENSOR               0x0340
#define GAP_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT       0x0341
#define GAP_APPEARANCE_GENERIC_BLOOD_PRESSURE                  0x0380
#define GAP_APPEARANCE_BLOOD_PRESSURE_ARM                      0x0381
#define GAP_APPEARANCE_BLOOD_PRESSURE_WRIST                    0x0382
#define GAP_APPEARANCE_HUMAN_INTERFACE_DEVICE                  0x03C0
#define GAP_APPEARANCE_KEYBOARD                                0x03C1
#define GAP_APPEARANCE_MOUSE                                   0x03C2
#define GAP_APPEARANCE_JOYSTICK                                0x03C3
#define GAP_APPEARANCE_GAMEPAD                                 0x03C4
#define GAP_APPEARANCE_DIGITIZER_TABLET                        0x03C5
#define GAP_APPEARANCE_CARD_READER                             0x03C6
#define GAP_APPEARANCE_DIGITAL_PEN                             0x03C7
#define GAP_APPEARANCE_BARCODE_SCANNER                         0x03C8
#define GAP_APPEARANCE_GENERIC_GLUCOSE_METER                   0x0400
#define GAP_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR          0x0440
#define GAP_APPEARANCE_RUNNING_WALKING_IN_SHOE                 0x0441
#define GAP_APPEARANCE_RUNNING_WALKING_ON_SHOE                 0x0442
#define GAP_APPEARANCE_RUNNING_WALKING_ON_HIP                  0x0443
#define GAP_APPEARANCE_GENERIC_CYCLING                         0x0480
#define GAP_APPEARANCE_CYCLING_CYCLING_COMPUTER                0x0481
#define GAP_APPEARANCE_CYCLING_SPEED_SENSOR                    0x0482
#define GAP_APPEARANCE_CYCLING_CADENCE_SENSOR                  0x0483
#define GAP_APPEARANCE_CYCLING_POWER_SENSOR                    0x0484
#define GAP_APPEARANCE_CYCLING_SPEED_AND_CADENCE_SENSOR        0x0485
#define GAP_APPEARANCE_GENERIC_PULSE_OXYMETER                  0x0C40
#define GAP_APPEARANCE_FINGERTIP                               0x0C41
#define GAP_APPEARANCE_WRIST_WORN                              0x0C42
#define GAP_APPEARANCE_GENERIC_WEIGHT_SCALE                    0x0C80
#define GAP_APPEARANCE_GENERIC_OUTDOOR_SPORT_ACTIVITY          0x1440
#define GAP_APPEARANCE_LOCATION_DISPLAY_DEVICE                 0x1441
#define GAP_APPEARANCE_LOCATION_AND_NAVIGATION_DISPLAY_DEVICE  0x1442
#define GAP_APPEARANCE_LOCATION_POD                            0x1443
#define GAP_APPEARANCE_LOCATION_AND_NAVIGATION_POD             0x1444
#define GAP_APPEARANCE_GENERIC_ENVIRONMENTAL_SENSOR            0x1640

/* Privacy flag values
 */
#define PRIVACY_ENABLED                               0x02
#define PRIVACY_DISABLED                              0x00

/* Intervals in terms of 625 micro sec
 */
#define DIR_CONN_ADV_INT_MIN                        0x190U  /* 250 ms */
#define DIR_CONN_ADV_INT_MAX                        0x320U  /* 500 ms */
#define UNDIR_CONN_ADV_INT_MIN                      0x800U  /* 1.28 s */
#define UNDIR_CONN_ADV_INT_MAX                     0x1000U  /* 2.56 s */
#define LIM_DISC_ADV_INT_MIN                        0x190U  /* 250 ms */
#define LIM_DISC_ADV_INT_MAX                        0x320U  /* 500 ms */
#define GEN_DISC_ADV_INT_MIN                        0x800U  /* 1.28 s */
#define GEN_DISC_ADV_INT_MAX                       0x1000U  /* 2.56 s */

/* GAP Roles
 */
#define GAP_PERIPHERAL_ROLE                          0x01U
#define GAP_BROADCASTER_ROLE                         0x02U
#define GAP_CENTRAL_ROLE                             0x04U
#define GAP_OBSERVER_ROLE                            0x08U

/* GAP procedure codes
 * Procedure codes for ACI_GAP_PROC_COMPLETE_EVENT event
 * and ACI_GAP_TERMINATE_GAP_PROC command.
 */
#define GAP_LIMITED_DISCOVERY_PROC                   0x01U
#define GAP_GENERAL_DISCOVERY_PROC                   0x02U
#define GAP_NAME_DISCOVERY_PROC                      0x04U
#define GAP_AUTO_CONNECTION_ESTABLISHMENT_PROC       0x08U
#define GAP_GENERAL_CONNECTION_ESTABLISHMENT_PROC    0x10U
#define GAP_SELECTIVE_CONNECTION_ESTABLISHMENT_PROC  0x20U
#define GAP_DIRECT_CONNECTION_ESTABLISHMENT_PROC     0x40U
#define GAP_OBSERVATION_PROC                         0x80U

/* Advertising Types
 */
#define GAP_ADV_IND                                  0x00U
#define GAP_ADV_HIGH_DC_DIRECT_IND                   0x01U
#define GAP_ADV_SCAN_IND                             0x02U
#define GAP_ADV_NONCONN_IND                          0x03U
#define GAP_ADV_LOW_DC_DIRECT_IND                    0x04U

/* ------------------------------------------------------------------------- */

/* IO capabilities
 */
#define IO_CAP_DISPLAY_ONLY                        0x00U
#define IO_CAP_DISPLAY_YES_NO                      0x01U
#define IO_CAP_KEYBOARD_ONLY                       0x02U
#define IO_CAP_NO_INPUT_NO_OUTPUT                  0x03U
#define IO_CAP_KEYBOARD_DISPLAY                    0x04U

/* Authentication requirements
 */
#define NO_BONDING                                 0x00U
#define BONDING                                    0x01U

/* MITM protection requirements
 */
#define MITM_PROTECTION_NOT_REQUIRED               0x00U
#define MITM_PROTECTION_REQUIRED                   0x01U

/* Out-Of-Band data
 */
#define OOB_AUTH_DATA_ABSENT                       0x00U
#define OOB_AUTH_DATA_PRESENT                      0x01U

/* Authorization requirements
 */
#define AUTHORIZATION_NOT_REQUIRED                 0x00U
#define AUTHORIZATION_REQUIRED                     0x01U

/* Connection authorization
 */
#define CONNECTION_AUTHORIZED                      0x01U
#define CONNECTION_REJECTED                        0x02U

/* Keypress notification support
 */
#define KEYPRESS_NOT_SUPPORTED                     0x00U
#define KEYPRESS_SUPPORTED                         0x01U

/* Use fixed pin
 */
#define USE_FIXED_PIN_FOR_PAIRING_ALLOWED          0x00U
#define USE_FIXED_PIN_FOR_PAIRING_FORBIDDEN        0x01U

/* SMP pairing status (ACI_GAP_PAIRING_COMPLETE_EVENT)
 */
#define SMP_PAIRING_STATUS_SUCCESS                 0x00U
#define SMP_PAIRING_STATUS_SMP_TIMEOUT             0x01U
#define SMP_PAIRING_STATUS_PAIRING_FAILED          0x02U
#define SMP_PAIRING_STATUS_ENCRYPT_FAILED          0x03U

/* SMP pairing failed reason code (ACI_GAP_PAIRING_COMPLETE_EVENT)
 */
#define OOB_NOT_AVAILABLE                          0x02
#define AUTH_REQ_CANNOT_BE_MET                     0x03
#define CONFIRM_VALUE_FAILED                       0x04
#define PAIRING_NOT_SUPPORTED                      0x05
#define INSUFF_ENCRYPTION_KEY_SIZE                 0x06
#define CMD_NOT_SUPPORTED                          0x07
#define UNSPECIFIED_REASON                         0x08
#define VERY_EARLY_NEXT_ATTEMPT                    0x09
#define SM_INVALID_PARAMS                          0x0A
#define SMP_SC_DHKEY_CHECK_FAILED                  0x0B
#define SMP_SC_NUMCOMPARISON_FAILED                0x0C

/* Passkey input type detected (ACI_GAP_PASSKEY_INPUT)
 */
#define PASSKEY_ENTRY_STARTED                      0x00U
#define PASSKEY_DIGIT_ENTERED                      0x01U
#define PASSKEY_DIGIT_ERASED                       0x02U
#define PASSKEY_CLEARED                            0x03U
#define PASSKEY_ENTRY_COMPLETED                    0x04U

/* Numeric Comparison Confirm Value
 * (ACI_GAP_NUMERIC_COMPARISON_VALUE_CONFIRM_YESNO)
 */
#define NUMERIC_COMPARISON_CONFIRM_NO              0x00U
#define NUMERIC_COMPARISON_CONFIRM_YES             0x01U

/* OOB Device Type (ACI_GAP_SET_OOB_DATA)
 */
#define OOB_DEVICE_TYPE_LOCAL                      0x00U
#define OOB_DEVICE_TYPE_REMOTE                     0x01U

/* OOB Data Type (ACI_GAP_GET_OOB_DATA / ACI_GAP_SET_OOB_DATA)
 */
#define OOB_DATA_TYPE_LP_TK                        0x00U
#define OOB_DATA_TYPE_SC_RANDOM                    0x01U
#define OOB_DATA_TYPE_SC_CONFIRM                   0x02U

/* ------------------------------------------------------------------------- */

/* GATT UUIDs
 */
#define PRIMARY_SERVICE_UUID                     0x2800U
#define SECONDARY_SERVICE_UUID                   0x2801U
#define INCLUDE_SERVICE_UUID                     0x2802U
#define CHARACTERISTIC_UUID                      0x2803U
#define CHAR_EXTENDED_PROP_DESC_UUID             0x2900U
#define CHAR_USER_DESC_UUID                      0x2901U
#define CHAR_CLIENT_CONFIG_DESC_UUID             0x2902U
#define CHAR_SERVER_CONFIG_DESC_UUID             0x2903U
#define CHAR_FORMAT_DESC_UUID                    0x2904U
#define CHAR_AGGR_FMT_DESC_UUID                  0x2905U
#define GATT_SERVICE_UUID                        0x1801U
#define SERVICE_CHANGED_UUID                     0x2A05U

/* GAP UUIDs
 */
#define GAP_SERVICE_UUID                         0x1800U
#define DEVICE_NAME_UUID                         0x2A00U
#define APPEARANCE_UUID                          0x2A01U
#define PERIPHERAL_PRIVACY_FLAG_UUID             0x2A02U
#define RECONNECTION_ADDR_UUID                   0x2A03U
#define PERIPHERAL_PREFERRED_CONN_PARAMS_UUID    0x2A04U
#define CENTRAL_ADDRESS_RESOLUTION_UUID          0x2AA6U
#define RESOLVABLE_PRIVATE_ADDRESS_ONLY_UUID     0x2AC9U

/* Access permissions for an attribute
 */
#define ATTR_NO_ACCESS                           0x00U
#define ATTR_ACCESS_READ_ONLY                    0x01U
#define ATTR_ACCESS_WRITE_REQ_ONLY               0x02U
#define ATTR_ACCESS_READ_WRITE                   0x03U
#define ATTR_ACCESS_WRITE_WITHOUT_RESPONSE       0x04U
#define ATTR_ACCESS_SIGNED_WRITE_ALLOWED         0x08U
#define ATTR_ACCESS_WRITE_ANY                    0x0EU
#define ATTR_ACCESS_ANY                          0x0FU

/* Characteristic properties
 */
#define CHAR_PROP_NONE                           0x00U
#define CHAR_PROP_BROADCAST                      0x01U
#define CHAR_PROP_READ                           0x02U
#define CHAR_PROP_WRITE_WITHOUT_RESP             0x04U
#define CHAR_PROP_WRITE                          0x08U
#define CHAR_PROP_NOTIFY                         0x10u
#define CHAR_PROP_INDICATE                       0x20U
#define CHAR_PROP_SIGNED_WRITE                   0x40U
#define CHAR_PROP_EXT                            0x80U

/* Security permissions for an attribute
 */
#define ATTR_PERMISSION_NONE           0x00U /* No security. */
#define ATTR_PERMISSION_AUTHEN_READ    0x01U /* Need authentication to read */
#define ATTR_PERMISSION_AUTHOR_READ    0x02U /* Need authorization to read */
#define ATTR_PERMISSION_ENCRY_READ     0x04U /* Need encryption to read */
#define ATTR_PERMISSION_AUTHEN_WRITE   0x08U /* Need authentication to write */
#define ATTR_PERMISSION_AUTHOR_WRITE   0x10U /* Need authorization to write */
#define ATTR_PERMISSION_ENCRY_WRITE    0x20U /* Need encryption to write */

/* Type of UUID (16 bit or 128 bit)
 */
#define UUID_TYPE_16                             0x01U
#define UUID_TYPE_128                            0x02U

/* Type of service (primary or secondary)
 */
#define PRIMARY_SERVICE                          0x01U
#define SECONDARY_SERVICE                        0x02U

/* Gatt Event Mask
 * Type of event generated by GATT server
 * See aci_gatt_add_char.
 */
#define GATT_DONT_NOTIFY_EVENTS                       0x00 
#define GATT_NOTIFY_ATTRIBUTE_WRITE                   0x01
#define GATT_NOTIFY_WRITE_REQ_AND_WAIT_FOR_APPL_RESP  0x02
#define GATT_NOTIFY_READ_REQ_AND_WAIT_FOR_APPL_RESP   0x04

/* Type of characteristic length (see ACI_GATT_ADD_CHAR)
 */
#define CHAR_VALUE_LEN_CONSTANT                  0x00
#define CHAR_VALUE_LEN_VARIABLE                  0x01

/* Encryption key size
 */
#define MIN_ENCRY_KEY_SIZE                       7U
#define MAX_ENCRY_KEY_SIZE                      16U

/* Format
 */
#define FORMAT_UINT8                             0x04U
#define FORMAT_UINT16                            0x06U
#define FORMAT_SINT16                            0x0EU
#define FORMAT_SINT24                            0x0FU

/* Unit
 */
#define UNIT_UNITLESS                          0x2700
#define UNIT_TEMP_CELSIUS                      0x272F
#define UNIT_PRESSURE_BAR                      0x2780

/* ------------------------------------------------------------------------- */

/* Advertising policy for filtering (white list related)
 * See HCI_LE_SET_ADVERTISING_PARAMETERS
 */
#define NO_WHITE_LIST_USE                      0X00U
#define WHITE_LIST_FOR_ONLY_SCAN               0X01U
#define WHITE_LIST_FOR_ONLY_CONN               0X02U
#define WHITE_LIST_FOR_ALL                     0X03U

/* Advertising channels
 */
#define ADV_CH_37                              0x01
#define ADV_CH_38                              0x02
#define ADV_CH_39                              0x04

/* ------------------------------------------------------------------------- */

/* Offset for configuration values (see ACI_HAL_WRITE_CONFIG_DATA)
 */
#define CONFIG_DATA_PUBADDR_OFFSET             0x00U
#define CONFIG_DATA_ER_OFFSET                  0x08U
#define CONFIG_DATA_IR_OFFSET                  0x18U
#define CONFIG_DATA_RANDOM_ADDRESS_OFFSET      0x2EU

/* Length for configuration values (see ACI_HAL_WRITE_CONFIG_DATA)
 */
#define CONFIG_DATA_PUBADDR_LEN                6
#define CONFIG_DATA_ER_LEN                    16
#define CONFIG_DATA_IR_LEN                    16
#define CONFIG_DATA_RANDOM_ADDRESS_LEN         6

/* ------------------------------------------------------------------------- */


#endif /* BLE_DEFS_H__ */