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: fd8cc973a63e210e9166cd054cbea0b2792ccefd (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
/*****************************************************************************
 * @file    ble_defs.h
 * @author  MCD Application Team
 * @brief   This file contains definitions used for BLE Stack interface.
 *****************************************************************************
 * @attention
 *
 * <h2><center>&copy; Copyright (c) 2019 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 vendor specific event codes */

/* ACI GAP events */
#define ACI_GAP_LIMITED_DISCOVERABLE_VSEVT_CODE        0x0400
#define ACI_GAP_PAIRING_COMPLETE_VSEVT_CODE            0x0401
#define ACI_GAP_PASS_KEY_REQ_VSEVT_CODE                0x0402
#define ACI_GAP_AUTHORIZATION_REQ_VSEVT_CODE           0x0403
#define ACI_GAP_SLAVE_SECURITY_INITIATED_VSEVT_CODE    0x0404
#define ACI_GAP_BOND_LOST_VSEVT_CODE                   0x0405
#define ACI_GAP_PROC_COMPLETE_VSEVT_CODE               0x0407
#define ACI_GAP_ADDR_NOT_RESOLVED_VSEVT_CODE           0x0408
#define ACI_GAP_NUMERIC_COMPARISON_VALUE_VSEVT_CODE    0x0409
#define ACI_GAP_KEYPRESS_NOTIFICATION_VSEVT_CODE       0x040A

/* ACI GATT/ATT events */
#define ACI_GATT_ATTRIBUTE_MODIFIED_VSEVT_CODE          0x0C01
#define ACI_GATT_PROC_TIMEOUT_VSEVT_CODE                0x0C02
#define ACI_ATT_EXCHANGE_MTU_RESP_VSEVT_CODE            0x0C03
#define ACI_ATT_FIND_INFO_RESP_VSEVT_CODE               0x0C04
#define ACI_ATT_FIND_BY_TYPE_VALUE_RESP_VSEVT_CODE      0x0C05
#define ACI_ATT_READ_BY_TYPE_RESP_VSEVT_CODE            0x0C06
#define ACI_ATT_READ_RESP_VSEVT_CODE                    0x0C07
#define ACI_ATT_READ_BLOB_RESP_VSEVT_CODE               0x0C08
#define ACI_ATT_READ_MULTIPLE_RESP_VSEVT_CODE           0x0C09
#define ACI_ATT_READ_BY_GROUP_TYPE_RESP_VSEVT_CODE      0x0C0A
#define ACI_ATT_PREPARE_WRITE_RESP_VSEVT_CODE           0x0C0C
#define ACI_ATT_EXEC_WRITE_RESP_VSEVT_CODE              0x0C0D
#define ACI_GATT_INDICATION_VSEVT_CODE                  0x0C0E
#define ACI_GATT_NOTIFICATION_VSEVT_CODE                0x0C0F
#define ACI_GATT_PROC_COMPLETE_VSEVT_CODE               0x0C10
#define ACI_GATT_ERROR_RESP_VSEVT_CODE                  0x0C11
#define ACI_GATT_DISC_READ_CHAR_BY_UUID_RESP_VSEVT_CODE 0x0C12
#define ACI_GATT_WRITE_PERMIT_REQ_VSEVT_CODE            0x0C13
#define ACI_GATT_READ_PERMIT_REQ_VSEVT_CODE             0x0C14
#define ACI_GATT_READ_MULTI_PERMIT_REQ_VSEVT_CODE       0x0C15
#define ACI_GATT_TX_POOL_AVAILABLE_VSEVT_CODE           0x0C16
#define ACI_GATT_SERVER_CONFIRMATION_VSEVT_CODE         0x0C17
#define ACI_GATT_PREPARE_WRITE_PERMIT_REQ_VSEVT_CODE    0x0C18
#define ACI_GATT_READ_EXT_VSEVT_CODE                    0x0C1D
#define ACI_GATT_INDICATION_EXT_VSEVT_CODE              0x0C1E
#define ACI_GATT_NOTIFICATION_EXT_VSEVT_CODE            0x0C1F

/* ACI L2CAP events */
#define ACI_L2CAP_CONNECTION_UPDATE_RESP_VSEVT_CODE     0x0800
#define ACI_L2CAP_PROC_TIMEOUT_VSEVT_CODE               0x0801
#define ACI_L2CAP_CONNECTION_UPDATE_REQ_VSEVT_CODE      0x0802
#define ACI_L2CAP_COMMAND_REJECT_VSEVT_CODE             0x080A

/* ACI HAL events */
#define ACI_HAL_END_OF_RADIO_ACTIVITY_VSEVT_CODE        0x0004
#define ACI_HAL_SCAN_REQ_REPORT_VSEVT_CODE              0x0005
#define ACI_HAL_FW_ERROR_VSEVT_CODE                     0x0006


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

/* Status codes */
#define BLE_STATUS_SUCCESS                          0x00
#define BLE_STATUS_SEC_UNKNOWN_CONNECTION_ID        0x40
#define BLE_STATUS_FAILED                           0x41
#define BLE_STATUS_INVALID_PARAMS                   0x42
#define BLE_STATUS_BUSY                             0x43
#define BLE_STATUS_PENDING                          0x45
#define BLE_STATUS_NOT_ALLOWED                      0x46
#define BLE_STATUS_ERROR                            0x47
#define BLE_STATUS_OUT_OF_MEMORY                    0x48
#define BLE_STATUS_INVALID_CID                      0x50
#define BLE_STATUS_DEV_IN_BLACKLIST                 0x59
#define BLE_STATUS_CSRK_NOT_FOUND                   0x5A
#define BLE_STATUS_IRK_NOT_FOUND                    0x5B
#define BLE_STATUS_DEV_NOT_FOUND_IN_DB              0x5C
#define BLE_STATUS_SEC_DB_FULL                      0x5D
#define BLE_STATUS_DEV_NOT_BONDED                   0x5E
#define BLE_STATUS_INSUFFICIENT_ENC_KEYSIZE         0x5F
#define BLE_STATUS_INVALID_HANDLE                   0x60
#define BLE_STATUS_OUT_OF_HANDLE                    0x61
#define BLE_STATUS_INVALID_OPERATION                0x62
#define BLE_STATUS_CHARAC_ALREADY_EXISTS            0x63
#define BLE_STATUS_INSUFFICIENT_RESOURCES           0x64
#define BLE_STATUS_SEC_PERMISSION_ERROR             0x65
#define BLE_STATUS_ADDR_NOT_RESOLVED                0x70

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

/* Returned when a scan window shorter than minimum allowed value has been
 * requested (i.e. 2ms)
 */
#define BLE_STATUS_SCAN_WINDOW_SHORT                0x83

/* Returned when the maximum requested interval to be allocated is shorter
 * then the current anchor period and a 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              0x84

/* 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               0x85

/* 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                    0x86

/*
 * Library Error Codes
 */
#define BLE_STATUS_TIMEOUT                          0xFF


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


/* GAP UUIDs
 */
#define GAP_SERVICE_UUID                           0x1800
#define DEVICE_NAME_UUID                           0x2A00
#define APPEARANCE_UUID                            0x2A01
#define PERIPHERAL_PRIVACY_FLAG_UUID               0x2A02
#define RECONNECTION_ADDR_UUID                     0x2A03
#define PERIPHERAL_PREFERRED_CONN_PARAMS_UUID      0x2A04
#define CENTRAL_ADDRESS_RESOLUTION_UUID            0x2AA6

/* 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                               31
#define DEVICE_NAME_LEN                                 7
#define BD_ADDR_SIZE                                    6


/* AD types for adv. data and scan response data
 */
#define AD_TYPE_FLAGS                              0x01
#define AD_TYPE_16_BIT_SERV_UUID                   0x02
#define AD_TYPE_16_BIT_SERV_UUID_CMPLT_LIST        0x03
#define AD_TYPE_32_BIT_SERV_UUID                   0x04
#define AD_TYPE_32_BIT_SERV_UUID_CMPLT_LIST        0x05
#define AD_TYPE_128_BIT_SERV_UUID                  0x06
#define AD_TYPE_128_BIT_SERV_UUID_CMPLT_LIST       0x07
#define AD_TYPE_SHORTENED_LOCAL_NAME               0x08
#define AD_TYPE_COMPLETE_LOCAL_NAME                0x09
#define AD_TYPE_TX_POWER_LEVEL                     0x0A
#define AD_TYPE_CLASS_OF_DEVICE                    0x0D
#define AD_TYPE_SEC_MGR_TK_VALUE                   0x10
#define AD_TYPE_SEC_MGR_OOB_FLAGS                  0x11
#define AD_TYPE_SLAVE_CONN_INTERVAL                0x12
#define AD_TYPE_SERV_SOLICIT_16_BIT_UUID_LIST      0x14
#define AD_TYPE_SERV_SOLICIT_128_BIT_UUID_LIST     0x15
#define AD_TYPE_SERVICE_DATA                       0x16
#define AD_TYPE_APPEARANCE                         0x19
#define AD_TYPE_ADVERTISING_INTERVAL               0x1A
#define AD_TYPE_LE_ROLE                            0x1C
#define AD_TYPE_SERV_SOLICIT_32_BIT_UUID_LIST      0x1F
#define AD_TYPE_URI                                0x24
#define AD_TYPE_MANUFACTURER_SPECIFIC_DATA         0xFF


/* 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             0x190  /* 250 ms */
#define DIR_CONN_ADV_INT_MAX             0x320  /* 500 ms */
#define UNDIR_CONN_ADV_INT_MIN           0x800  /* 1.28 s */
#define UNDIR_CONN_ADV_INT_MAX           0x1000 /* 2.56 s */
#define LIM_DISC_ADV_INT_MIN             0x190  /* 250 ms */
#define LIM_DISC_ADV_INT_MAX             0x320  /* 500 ms */
#define GEN_DISC_ADV_INT_MIN             0x800  /* 1.28 s */
#define GEN_DISC_ADV_INT_MAX             0x1000 /* 2.56 s */


/* Timeout values
 */
#define LIM_DISC_MODE_TIMEOUT            180000 /* 180 seconds */
#define PRIVATE_ADDR_INT_TIMEOUT         900000 /* 15 minutes */


/* GAP Roles
 */
#define GAP_PERIPHERAL_ROLE               0x01
#define GAP_BROADCASTER_ROLE              0x02
#define GAP_CENTRAL_ROLE                  0x04
#define GAP_OBSERVER_ROLE                 0x08


/* GAP procedure codes
 * Procedure codes for EVT_BLUE_GAP_PROCEDURE_COMPLETE event
 * and aci_gap_terminate_gap_procedure() command.
 */
#define GAP_LIMITED_DISCOVERY_PROC                   0x01
#define GAP_GENERAL_DISCOVERY_PROC                   0x02
#define GAP_NAME_DISCOVERY_PROC                      0x04
#define GAP_AUTO_CONNECTION_ESTABLISHMENT_PROC       0x08
#define GAP_GENERAL_CONNECTION_ESTABLISHMENT_PROC    0x10
#define GAP_SELECTIVE_CONNECTION_ESTABLISHMENT_PROC  0x20
#define GAP_DIRECT_CONNECTION_ESTABLISHMENT_PROC     0x40
#define GAP_OBSERVATION_PROC                         0x80


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


/* IO capabilities
 */
#define IO_CAP_DISPLAY_ONLY                  0x00
#define IO_CAP_DISPLAY_YES_NO                0x01
#define IO_CAP_KEYBOARD_ONLY                 0x02
#define IO_CAP_NO_INPUT_NO_OUTPUT            0x03
#define IO_CAP_KEYBOARD_DISPLAY              0x04


/* Authentication requirements
 */
#define NO_BONDING                           0x00
#define BONDING                              0x01


/* MITM protection requirements
 */
#define MITM_PROTECTION_NOT_REQUIRED         0x00
#define MITM_PROTECTION_REQUIRED             0x01


/* Out-Of-Band data
 */
#define OOB_AUTH_DATA_ABSENT                 0x00
#define OOB_AUTH_DATA_PRESENT                0x01


/* Authorization requirements
 */
#define AUTHORIZATION_NOT_REQUIRED           0x00
#define AUTHORIZATION_REQUIRED               0x01


/* Connection authorization
 */
#define CONNECTION_AUTHORIZED                0x01
#define CONNECTION_REJECTED                  0x02


/* Use fixed pin
 */
#define USE_FIXED_PIN_FOR_PAIRING            0x00
#define DONOT_USE_FIXED_PIN_FOR_PAIRING      0x01


/* Link security status
 */
#define SM_LINK_AUTHENTICATED                0x01
#define SM_LINK_AUTHORIZED                   0x02
#define SM_LINK_ENCRYPTED                    0x04


/* SMP pairing status (ACI_GAP_PAIRING_COMPLETE_EVENT)
 */
#define SMP_PAIRING_STATUS_SUCCESS           0x00
#define SMP_PAIRING_STATUS_SMP_TIMEOUT       0x01
#define SMP_PAIRING_STATUS_PAIRING_FAILED    0x02
#define SMP_PAIRING_STATUS_ENCRYPT_FAILED    0x03


/* 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


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


/* Well-Known UUIDs
 */
#define PRIMARY_SERVICE_UUID                       0x2800
#define SECONDARY_SERVICE_UUID                     0x2801
#define INCLUDE_SERVICE_UUID                       0x2802
#define CHARACTERISTIC_UUID                        0x2803
#define CHAR_EXTENDED_PROP_DESC_UUID               0x2900
#define CHAR_USER_DESC_UUID                        0x2901
#define CHAR_CLIENT_CONFIG_DESC_UUID               0x2902
#define CHAR_SERVER_CONFIG_DESC_UUID               0x2903
#define CHAR_FORMAT_DESC_UUID                      0x2904
#define CHAR_AGGR_FMT_DESC_UUID                    0x2905
#define GATT_SERVICE_UUID                          0x1801
#define GAP_SERVICE_UUID                           0x1800
#define SERVICE_CHANGED_UUID                       0x2A05


/* Access permissions for an attribute
 */
#define ATTR_NO_ACCESS                             0x00
#define ATTR_ACCESS_READ_ONLY                      0x01 
#define ATTR_ACCESS_WRITE_REQ_ONLY                 0x02
#define ATTR_ACCESS_READ_WRITE                     0x03
#define ATTR_ACCESS_WRITE_WITHOUT_RESPONSE         0x04
#define ATTR_ACCESS_SIGNED_WRITE_ALLOWED           0x08
#define ATTR_ACCESS_WRITE_ANY                      0x0E


/* Characteristic properties.
 */
#define CHAR_PROP_NONE                           0x00
#define CHAR_PROP_BROADCAST                      0x01
#define CHAR_PROP_READ                           0x02
#define CHAR_PROP_WRITE_WITHOUT_RESP             0x04
#define CHAR_PROP_WRITE                          0x08
#define CHAR_PROP_NOTIFY                         0x10
#define CHAR_PROP_INDICATE                       0x20
#define CHAR_PROP_SIGNED_WRITE                   0x40
#define CHAR_PROP_EXT                            0x80


/* Security permissions for an attribute.
 */
#define ATTR_PERMISSION_NONE          0x00 /* No security. */
#define ATTR_PERMISSION_AUTHEN_READ   0x01 /* Need authentication to read */
#define ATTR_PERMISSION_AUTHOR_READ   0x02 /* Need authorization to read */
#define ATTR_PERMISSION_ENCRY_READ    0x04 /* Need encryption to read */
#define ATTR_PERMISSION_AUTHEN_WRITE  0x08 /* Need authentication to write */
#define ATTR_PERMISSION_AUTHOR_WRITE  0x10 /* Need authorization to write */
#define ATTR_PERMISSION_ENCRY_WRITE   0x20 /* Need encryption to write */


/* Type of UUID (16 bit or 128 bit.
 */
#define UUID_TYPE_16                               0x01
#define UUID_TYPE_128                              0x02


/* Type of service (primary or secondary
 */
#define PRIMARY_SERVICE                            0x01
#define SECONDARY_SERVICE                          0x02


/* 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                    7
#define MAX_ENCRY_KEY_SIZE                    0x10


/* Format
 */
#define FORMAT_UINT8                          0x04
#define FORMAT_UINT16                         0x06
#define FORMAT_SINT16                         0x0E
#define FORMAT_SINT24                         0x0F


/* 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                      0x00
#define WHITE_LIST_FOR_ONLY_SCAN               0x01
#define WHITE_LIST_FOR_ONLY_CONN               0x02
#define WHITE_LIST_FOR_ALL                     0x03


/* Bluetooth address types
 */
#define PUBLIC_ADDR                            0
#define RANDOM_ADDR                            1
#define STATIC_RANDOM_ADDR                     1
#define RESOLVABLE_PRIVATE_ADDR                2
#define NON_RESOLVABLE_PRIVATE_ADDR            3


/* Directed advertising types
 * Type of advertising during directed advertising
 */
#define HIGH_DUTY_CYCLE_DIRECTED_ADV           1
#define LOW_DUTY_CYCLE_DIRECTED_ADV            4


/* Advertising type
 * See hci_le_set_advertising_parameters
  */
#define ADV_IND                                0x00
#define ADV_DIRECT_IND                         0x01
#define ADV_SCAN_IND                           0x02
#define ADV_NONCONN_IND                        0x03
#define SCAN_RSP                               0x04


/* Lowest allowed interval value for connectable types(20ms)..multiple of 625us
 */
#define ADV_INTERVAL_LOWEST_CONN               0X0020


/* Highest allowed interval value (10.24s)..multiple of 625us.
 */
#define ADV_INTERVAL_HIGHEST                   0X4000


/* Lowest allowed interval value for non connectable types
 * (100ms)..multiple of 625us.
 */
#define ADV_INTERVAL_LOWEST_NONCONN            0X00a0


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


/* Scan_types Scan types
 */
#define PASSIVE_SCAN                           0
#define ACTIVE_SCAN                            1


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


/* Configuration values.
 * See aci_hal_write_config_data().
 */
#define CONFIG_DATA_PUBADDR_OFFSET            0x00
#define CONFIG_DATA_DIV_OFFSET                0x06
#define CONFIG_DATA_ER_OFFSET                 0x08
#define CONFIG_DATA_IR_OFFSET                 0x18
#define CONFIG_DATA_RANDOM_ADDRESS_OFFSET     0x2E

/* Length for configuration values.
 * See aci_hal_write_config_data().
 */
#define CONFIG_DATA_PUBADDR_LEN               6
#define CONFIG_DATA_DIV_LEN                   2
#define CONFIG_DATA_ER_LEN                    16
#define CONFIG_DATA_IR_LEN                    16
#define CONFIG_DATA_RANDOM_ADDRESS_LEN        6


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


#endif /* BLE_DEFS_H__ */