SmartSnippets DA1459x SDK
ble_config.h
Go to the documentation of this file.
1 
54 #ifndef _BLE_CONFIG_H_
55 #define _BLE_CONFIG_H_
56 
57 #include <stdint.h>
58 #include "ble_stack_config.h"
59 
60 /* --------------------------------- BLE configuration options ---------------------------------- */
61 
71 #ifndef dg_configBLE_CONNECTIONS_MAX
72 #define dg_configBLE_CONNECTIONS_MAX (2)
73 #elif ( ( dg_configBLE_CONNECTIONS_MAX > CFG_CON ) || ( dg_configBLE_CONNECTIONS_MAX < 1 ) )
74 #error "dg_configBLE_CONNECTIONS_MAX must be between 1 and 8"
75 #endif
76 
86 #ifndef dg_configBLE_OBSERVER
87 #define dg_configBLE_OBSERVER (1)
88 #endif
89 
99 #ifndef dg_configBLE_BROADCASTER
100 #define dg_configBLE_BROADCASTER (1)
101 #endif
102 
112 #ifndef dg_configBLE_CENTRAL
113 #define dg_configBLE_CENTRAL (1)
114 #endif
115 
125 #ifndef dg_configBLE_PERIPHERAL
126 #define dg_configBLE_PERIPHERAL (1)
127 #endif
128 
138 #ifndef dg_configBLE_GATT_CLIENT
139 #define dg_configBLE_GATT_CLIENT (1)
140 #endif
141 
151 #ifndef dg_configBLE_GATT_SERVER
152 #define dg_configBLE_GATT_SERVER (1)
153 #endif
154 
161 #ifndef dg_configBLE_L2CAP_COC
162 #define dg_configBLE_L2CAP_COC (1)
163 #endif
164 
165 /*
166  * Disable Connection Parameter Request procedure
167  *
168  * This option is deprecated. Using ble_gap_conn_param_update() with a peer that does
169  * not support the 4.1 Connection Parameter Request feature will result in making a
170  * connection update request over L2CAP to ensure interoperability.
171  */
172 #ifdef dg_configBLE_CONN_PARAM_REQ_DISABLE
173 #pragma message "dg_configBLE_CONN_PARAM_REQ_DISABLE macro is deprecated: Defining it will have no effect!"
174 #endif
175 
176 
185 #ifndef dg_configBLE_EVENT_COUNTER_ENABLE
186 #define dg_configBLE_EVENT_COUNTER_ENABLE (0)
187 #endif
188 
198 #ifndef dg_configBLE_ADV_STOP_DELAY_ENABLE
199 #define dg_configBLE_ADV_STOP_DELAY_ENABLE (0)
200 #endif
201 
207 #ifndef dg_configBLE_SKIP_LATENCY_API
208 #define dg_configBLE_SKIP_LATENCY_API (0)
209 #endif
210 
221 #ifndef dg_configBLE_PRIVACY_1_2
222 #define dg_configBLE_PRIVACY_1_2 (0)
223 #endif
224 
235 #ifndef dg_configBLE_DATA_LENGTH_RX_MAX
236 #define dg_configBLE_DATA_LENGTH_RX_MAX (251)
237 #else
238 #if ((dg_configBLE_DATA_LENGTH_RX_MAX > 251) || (dg_configBLE_DATA_LENGTH_RX_MAX < 27))
239 #error "dg_configBLE_DATA_LENGTH_RX_MAX value must be between 27 and 251!"
240 #endif
241 #endif
242 
253 #ifndef dg_configBLE_DATA_LENGTH_TX_MAX
254 #define dg_configBLE_DATA_LENGTH_TX_MAX (251)
255 #else
256 #if ((dg_configBLE_DATA_LENGTH_TX_MAX > 251) || (dg_configBLE_DATA_LENGTH_TX_MAX < 27))
257 #error "dg_configBLE_DATA_LENGTH_TX_MAX value must be between 27 and 251!"
258 #endif
259 #endif
260 
261 /*
262  * \brief Initiate a data length request upon a new connection as slave
263  *
264  * Id defined to 1, the device will send an LL_LENGTH_REQ PDU upon a new connection as slave.
265  */
266 #ifndef dg_configBLE_DATA_LENGTH_REQ_UPON_CONN
267 #define dg_configBLE_DATA_LENGTH_REQ_UPON_CONN (0)
268 #endif
269 
271 #define BLE_DATA_LENGTH_TO_TIME(OCTETS) ( ( (OCTETS) + 11 + 3 ) * 8 )
272 
288 #ifndef dg_configBLE_CONN_EVENT_LENGTH_MIN
289 #define dg_configBLE_CONN_EVENT_LENGTH_MIN \
290  ( (BLE_DATA_LENGTH_TO_TIME(dg_configBLE_DATA_LENGTH_RX_MAX) \
291  + BLE_DATA_LENGTH_TO_TIME(dg_configBLE_DATA_LENGTH_TX_MAX) + 150 + 624) / 625)
292 
293 #if (dg_configBLE_CONN_EVENT_LENGTH_MIN > 8)
294  #undef dg_configBLE_CONN_EVENT_LENGTH_MIN
295  #define dg_configBLE_CONN_EVENT_LENGTH_MIN (8)
296 #endif
297 #elif defined(dg_configBLE_CONN_EVENT_LENGTH_MAX) \
298  && (dg_configBLE_CONN_EVENT_LENGTH_MIN > dg_configBLE_CONN_EVENT_LENGTH_MAX)
299 #error "dg_configBLE_CONN_EVENT_LENGTH_MIN must be lower or equal to dg_configBLE_CONN_EVENT_LENGTH_MAX."
300 #endif
301 
317 #ifndef dg_configBLE_CONN_EVENT_LENGTH_MAX
318 #define dg_configBLE_CONN_EVENT_LENGTH_MAX (0xFFFF)
319 #endif
320 
329 #ifndef dg_configBLE_DUPLICATE_FILTER_MAX
330 #define dg_configBLE_DUPLICATE_FILTER_MAX (10)
331 #elif ((dg_configBLE_DUPLICATE_FILTER_MAX < 10) || (dg_configBLE_DUPLICATE_FILTER_MAX > 255))
332 #error "dg_configBLE_DUPLICATE_FILTER_MAX value must be between 10 and 255."
333 #endif
334 
348 #ifndef dg_configBLE_PAIR_INIT_KEY_DIST
349 #define dg_configBLE_PAIR_INIT_KEY_DIST (GAP_KDIST_ENCKEY | GAP_KDIST_IDKEY | GAP_KDIST_SIGNKEY)
350 #endif
351 
365 #ifndef dg_configBLE_PAIR_RESP_KEY_DIST
366 #define dg_configBLE_PAIR_RESP_KEY_DIST (GAP_KDIST_ENCKEY | GAP_KDIST_IDKEY | GAP_KDIST_SIGNKEY)
367 #endif
368 
377 #ifndef dg_configBLE_SECURE_CONNECTIONS
378 #define dg_configBLE_SECURE_CONNECTIONS (1)
379 #endif
380 
387 #ifdef dg_configBLE_PUB_KEY_SUCCESS_THR
388 #pragma message "This configuration macro is deprecated. The P-256 Public/Private Key Pair is automatically renewed by the stack prior to every pairing procedure."
389 #endif
390 
397 #ifdef dg_configBLE_PUB_KEY_FAILURE_THR
398 #pragma message "This configuration macro is deprecated. The P-256 Public/Private Key Pair is automatically renewed by the stack prior to every pairing procedure."
399 #endif
400 
407 #ifndef dg_configBLE_INITIAL_TX_POWER
408 #define dg_configBLE_INITIAL_TX_POWER (GAP_TX_POWER_0_dBm)
409 #else
410  #if ( (dg_configBLE_INITIAL_TX_POWER < GAP_TX_POWER_MIN) || \
411  (dg_configBLE_INITIAL_TX_POWER > GAP_TX_POWER_MAX) )
412  #error "The TX power level value must be one of @gap_tx_power_t values."
413  #endif
414 #endif
415 
423 #ifndef dg_configDEFAULT_RADIO_OP_MODE
424 #define dg_configDEFAULT_RADIO_OP_MODE (LOW_POWER_ALL_PHYS)
425 #endif
426 
427 /* ------------------------------- RF calibration configuration --------------------------------- */
428 
437 #ifndef dg_configRF_CALIB_TEMP_DIFF
438 #define dg_configRF_CALIB_TEMP_DIFF (8)
439 #endif
440 
448 #ifndef dg_configRF_CALIB_TEMP_POLL_INTV
449 #define dg_configRF_CALIB_TEMP_POLL_INTV (1000)
450 #endif
451 
452 /* ---------------------------------- BLE default parameters ------------------------------------ */
453 
464 #ifndef defaultBLE_DEVICE_NAME
465 #define defaultBLE_DEVICE_NAME "Dialog BLE"
466 #endif
467 
478 #ifndef defaultBLE_APPEARANCE
479 #define defaultBLE_APPEARANCE (0)
480 #endif
481 
489 #ifndef defaultBLE_MAX_CONNECTIONS
490 #define defaultBLE_MAX_CONNECTIONS (CFG_CON)
491 #endif
492 #if (defaultBLE_MAX_CONNECTIONS != CFG_CON)
493 # error "Values different than the BLE stack library default (CFG_CON) are not currently supported."
494 #endif
495 
496 
504 #ifndef defaultBLE_MAX_BONDED
505 #define defaultBLE_MAX_BONDED (8)
506 #endif
507 
516 #ifndef defaultBLE_GAP_ROLE
517 #define defaultBLE_GAP_ROLE GAP_NO_ROLE
518 #endif
519 
530 #ifndef defaultBLE_ADDRESS_RENEW_DURATION
531 #define defaultBLE_ADDRESS_RENEW_DURATION (900) // 900 seconds (15 minutes)
532 #endif
533 
541 #ifndef defaultBLE_STATIC_ADDRESS
542 #define defaultBLE_STATIC_ADDRESS { 0x06, 0x00, 0xF4, 0x35, 0x23, 0x48 }
543 #endif
544 
552 #ifndef defaultBLE_ADDRESS_TYPE
553 #define defaultBLE_ADDRESS_TYPE PUBLIC_ADDRESS
554 #endif
555 
563 #ifndef defaultBLE_IRK
564 #define defaultBLE_IRK { 0xEF, 0xCD, 0xAB, 0x89, 0x67, 0x45, 0x23, 0x01, \
565  0xEF, 0xCD, 0xAB, 0x89, 0x67, 0x45, 0x23, 0x01 }
566 #endif
567 
587 #ifndef defaultBLE_ATT_DB_CONFIGURATION
588 #define defaultBLE_ATT_DB_CONFIGURATION (0x10) // Peripheral Pref. Conn. Parameters present
589 #endif
590 
598 #ifndef defaultBLE_MAX_MTU_SIZE
599 #define defaultBLE_MAX_MTU_SIZE (512)
600 #endif
601 
611 #ifndef defaultBLE_MIN_MTU_SIZE
612 #if (dg_configBLE_SECURE_CONNECTIONS == 1)
613 #define defaultBLE_MIN_MTU_SIZE (65)
614 #else
615 #define defaultBLE_MIN_MTU_SIZE (23)
616 #endif
617 #elif (((dg_configBLE_SECURE_CONNECTIONS == 1) \
618  && (defaultBLE_MIN_MTU_SIZE < 65)) \
619  || ((dg_configBLE_SECURE_CONNECTIONS == 0) \
620  && (defaultBLE_MIN_MTU_SIZE < 23)) \
621  || (defaultBLE_MIN_MTU_SIZE > defaultBLE_MAX_MTU_SIZE))
622 #error "defaultBLE_MIN_MTU_SIZE set out of supported range!"
623 #endif
624 
632 #ifndef defaultBLE_MTU_SIZE
633 #define defaultBLE_MTU_SIZE (defaultBLE_MIN_MTU_SIZE)
634 #elif ((defaultBLE_MTU_SIZE < defaultBLE_MIN_MTU_SIZE) \
635  || (defaultBLE_MTU_SIZE > defaultBLE_MAX_MTU_SIZE))
636 #error "defaultBLE_MTU_SIZE set out of supported range!"
637 #endif
638 
647 #ifndef defaultBLE_CHANNEL_MAP
648 #define defaultBLE_CHANNEL_MAP {0xFF, 0xFF, 0xFF, 0xFF, 0x1F} // All channels enabled
649 #endif
650 
658 #ifndef defaultBLE_ADVERTISE_MODE
659 #define defaultBLE_ADVERTISE_MODE GAP_DISC_MODE_GEN_DISCOVERABLE
660 #endif
661 
669 #ifndef defaultBLE_ADVERTISE_CHANNEL_MAP
670 #define defaultBLE_ADVERTISE_CHANNEL_MAP (GAP_ADV_CHANNEL_37 | GAP_ADV_CHANNEL_38 | GAP_ADV_CHANNEL_39)
671 #endif
672 
681 #ifndef defaultBLE_ADVERTISE_INTERVAL_MIN
682 #define defaultBLE_ADVERTISE_INTERVAL_MIN (BLE_ADV_INTERVAL_FROM_MS(687.5)) // 687.5ms
683 #endif
684 
693 #ifndef defaultBLE_ADVERTISE_INTERVAL_MAX
694 #define defaultBLE_ADVERTISE_INTERVAL_MAX (BLE_ADV_INTERVAL_FROM_MS(687.5)) // 687.5ms
695 #endif
696 
707 #ifndef defaultBLE_ADVERTISE_FILTER_POLICY
708 #define defaultBLE_ADVERTISE_FILTER_POLICY ADV_ALLOW_SCAN_ANY_CONN_ANY
709 #endif
710 
719 #ifndef defaultBLE_ADVERTISE_DATA_LENGTH
720 #define defaultBLE_ADVERTISE_DATA_LENGTH (28)
721 #endif
722 
734 #ifndef defaultBLE_ADVERTISE_DATA
735 #define defaultBLE_ADVERTISE_DATA { 0x0D, GAP_DATA_TYPE_LOCAL_NAME, \
736  'R', 'e', 'n', 'e', 's', 'a', 's', ' ', 'B', 'L', 'E' }
737 #endif
738 
747 #ifndef defaultBLE_SCAN_RESPONSE_DATA_LENGTH
748 #define defaultBLE_SCAN_RESPONSE_DATA_LENGTH (31)
749 #endif
750 
762 #ifndef defaultBLE_SCAN_RESPONSE_DATA
763 #define defaultBLE_SCAN_RESPONSE_DATA { }
764 #endif
765 
774 #ifndef defaultBLE_SCAN_INTERVAL
775 #define defaultBLE_SCAN_INTERVAL (BLE_SCAN_INTERVAL_FROM_MS(100)) // 100ms
776 #endif
777 
786 #ifndef defaultBLE_SCAN_WINDOW
787 #define defaultBLE_SCAN_WINDOW (BLE_SCAN_WINDOW_FROM_MS(50)) // 50ms
788 #endif
789 
798 #ifndef defaultBLE_PPCP_INTERVAL_MIN
799 #define defaultBLE_PPCP_INTERVAL_MIN (BLE_CONN_INTERVAL_FROM_MS(10)) // 10ms
800 #endif
801 
810 #ifndef defaultBLE_PPCP_INTERVAL_MAX
811 #define defaultBLE_PPCP_INTERVAL_MAX (BLE_CONN_INTERVAL_FROM_MS(20)) // 20ms
812 #endif
813 
822 #ifndef defaultBLE_PPCP_SLAVE_LATENCY
823 #define defaultBLE_PPCP_SLAVE_LATENCY (0) // number of events
824 #endif
825 
834 #ifndef defaultBLE_PPCP_SUP_TIMEOUT
835 #define defaultBLE_PPCP_SUP_TIMEOUT (BLE_SUPERVISION_TMO_FROM_MS(1000)) // 1s
836 #endif
837 
846 #ifndef defaultBLE_GAP_IO_CAP
847 #define defaultBLE_GAP_IO_CAP GAP_IO_CAP_NO_INPUT_OUTPUT
848 #endif
849 
855 #ifndef defaultBLE_DIS_MANUFACTURER
856 #define defaultBLE_DIS_MANUFACTURER "Renesas Electronics Corporation"
857 #endif
858 
859 #ifndef defaultBLE_DIS_MODEL_NUMBER
860 #define defaultBLE_DIS_MODEL_NUMBER "Renesas BLE"
861 #endif
862 
863 #ifndef defaultBLE_DIS_SERIAL_NUMBER
864 #define defaultBLE_DIS_SERIAL_NUMBER "SN123456"
865 #endif
866 
867 #ifndef defaultBLE_DIS_HW_REVISION
868 #define defaultBLE_DIS_HW_REVISION "Rev.D"
869 #endif
870 
871 #ifndef defaultBLE_DIS_FW_REVISION
872 #define defaultBLE_DIS_FW_REVISION "1.0"
873 #endif
874 
875 #ifndef defaultBLE_DIS_SW_REVISION
876 #define defaultBLE_DIS_SW_REVISION "1.1"
877 #endif
878 
879 #ifndef defaultBLE_DIS_PNP_VID_SOURCE
880 #define defaultBLE_DIS_PNP_VID_SOURCE (0x01)
881 #endif
882 
883 #ifndef defaultBLE_DIS_PNP_VID
884 #define defaultBLE_DIS_PNP_VID (0x00D2)
885 #endif
886 
887 #ifndef defaultBLE_DIS_PNP_PID
888 #define defaultBLE_DIS_PNP_PID (0x0001)
889 #endif
890 
891 #ifndef defaultBLE_DIS_PNP_VERSION
892 #define defaultBLE_DIS_PNP_VERSION (0x0001)
893 #endif
894 
895 /* IEEE 11073-20601 Regulatory Certification Data List Characteristic */
896 #ifndef defaultBLE_DIS_REGULATORY_CERT
897 #define defaultBLE_DIS_REGULATORY_CERT { 0x00, 0x02, 0x00, 0x12, 0x02, 0x01, 0x00, 0x08, 0x01, \
898  0x05, 0x00, 0x01, 0x00, 0x02, 0x80, 0x08, 0x02, 0x02, \
899  0x00, 0x02, 0x00, 0x00 }
900 #endif
901 
902 #ifndef defaultBLE_DIS_SYSTEM_ID_OUI
903 #define defaultBLE_DIS_SYSTEM_ID_OUI { 0x80, 0xEA, 0xCA }
904 #endif
905 
906 #ifndef defaultBLE_DIS_SYSTEM_ID_MANUFACTURER
907 #define defaultBLE_DIS_SYSTEM_ID_MANUFACTURER { 0x0A, 0x0B, 0x0C, 0x0D, 0x0E }
908 #endif
909 
917 #ifdef BLE_EXTERNAL_HOST
918 #define BLE_STACK_PASSTHROUGH_MODE
919 #define BLE_MGR_DIRECT_ACCESS 0
920 #endif
921 
930 #ifndef USE_BLE_SLEEP
931 # define USE_BLE_SLEEP 1
932 #endif
933 
934 
945 /* -----------------------------------BLE event notifications configuration --------------------- */
946 
947 /*
948  * BLE ISR event Notifications
949  *
950  * This facility enables the user app to receive notifications for BLE
951  * ISR events. These events can be received either directly from inside
952  * the BLE ISR, or as task notifications to the Application Task
953  * registered to the BLE manager.
954  *
955  * To enable, define dg_configBLE_EVENT_NOTIF_TYPE to either
956  * BLE_EVENT_NOTIF_USER_ISR or BLE_EVENT_NOTIF_USER_TASK.
957  *
958  * - When dg_configBLE_EVENT_NOTIF_TYPE == BLE_EVENT_NOTIF_USER_ISR, the user
959  * can define the following macros on his app configuration:
960  *
961  * dg_configBLE_EVENT_NOTIF_HOOK_END_EVENT : The BLE End Event
962  * dg_configBLE_EVENT_NOTIF_HOOK_CSCNT_EVENT : The BLE CSCNT Event
963  * dg_configBLE_EVENT_NOTIF_HOOK_FINE_EVENT : The BLE FINE Event
964  *
965  * These macros must be actually set to the names of functions defined inside
966  * the user application, having a prototype of
967  *
968  * void func(void);
969  *
970  * (The user app does not need to explicitly define the prototype).
971  *
972  * If one of these macros is not defined, the respective notification
973  * will be suppressed.
974  *
975  * Note that these functions will be called in ISR context, directly from the
976  * BLE ISR. They should therefore be very fast and should NEVER block.
977  *
978  * - When dg_configBLE_EVENT_NOTIF_TYPE == BLE_EVENT_NOTIF_USER_TASK, the user
979  * app will receive task notifications on the task registered to the BLE
980  * manager.
981  *
982  * Notifications will be received using the following bit masks:
983  *
984  * - dg_configBLE_EVENT_NOTIF_MASK_END_EVENT: End Event Mask (Def: bit 24)
985  * - dg_configBLE_EVENT_NOTIF_MASK_CSCNT_EVENT: CSCNT Event Mask (Def: bit 25)
986  * - dg_configBLE_EVENT_NOTIF_MASK_FINE_EVENT: FINE Event Mask (Def: bit 26)
987  *
988  * These macros, defining the task notification bit masks, can be redefined as
989  * needed.
990  *
991  * If one of the macros for callback functions presented in the previous
992  * section (for direct ISR notifications) is defined, while in this mode,
993  * the function with the same name will be called directly from the isr
994  * instead of sending a task notification for this particular event to
995  * the app task.
996  *
997  * Macro dg_configBLE_EVENT_NOTIF_RUNTIME_CONTROL (Default: 1) enables/disables
998  * runtime control/masking of notifications.
999  *
1000  * If dg_configBLE_EVENT_NOTIF_RUNTIME_CONTROL == 1, then task notifications
1001  * must be enabled/disabled using the
1002  * ble_event_notif_[enable|disable]_[end|cscnt|fine]_event() functions.
1003  * By default all notifications are disabled.
1004  *
1005  * If dg_configBLE_EVENT_NOTIF_RUNTIME_CONTROL == 0, all notifications will
1006  * be sent unconditionally to the application task.
1007  *
1008  */
1009 #ifndef dg_configBLE_EVENT_NOTIF_TYPE
1010 #define dg_configBLE_EVENT_NOTIF_TYPE BLE_EVENT_NOTIF_USER_ISR
1011 #endif
1012 
1013 #if dg_configBLE_EVENT_NOTIF_TYPE == BLE_EVENT_NOTIF_USER_TASK
1014 
1015 /* Default implementation of BLE event task notifications. This
1016  * implementation allows a user task to register for notifications,
1017  * and to get task notifications for the available events
1018  */
1019 
1020 /* Default task notification masks for the various events for which
1021  * the framework provides notifications
1022  */
1023 #ifndef dg_configBLE_EVENT_NOTIF_MASK_END_EVENT
1024 #define dg_configBLE_EVENT_NOTIF_MASK_END_EVENT (1 << 24)
1025 #endif
1026 
1027 #ifndef dg_configBLE_EVENT_NOTIF_MASK_CSCNT_EVENT
1028 #define dg_configBLE_EVENT_NOTIF_MASK_CSCNT_EVENT (1 << 25)
1029 #endif
1030 
1031 #ifndef dg_configBLE_EVENT_NOTIF_MASK_FINE_EVENT
1032 #define dg_configBLE_EVENT_NOTIF_MASK_FINE_EVENT (1 << 26)
1033 #endif
1034 
1035 /* Implement event hook functions */
1036 #ifndef dg_configBLE_EVENT_NOTIF_HOOK_END_EVENT
1037 #define dg_configBLE_EVENT_NOTIF_HOOK_END_EVENT ble_event_notif_app_task_end_event
1038 #endif
1039 
1040 #ifndef dg_configBLE_EVENT_NOTIF_HOOK_CSCNT_EVENT
1041 #define dg_configBLE_EVENT_NOTIF_HOOK_CSCNT_EVENT ble_event_notif_app_task_cscnt_event
1042 #endif
1043 
1044 #ifndef dg_configBLE_EVENT_NOTIF_HOOK_FINE_EVENT
1045 #define dg_configBLE_EVENT_NOTIF_HOOK_FINE_EVENT ble_event_notif_app_task_fine_event
1046 #endif
1047 
1048 /*
1049  * Allow runtime control of (un)masking notifications
1050  */
1051 #ifndef dg_configBLE_EVENT_NOTIF_RUNTIME_CONTROL
1052 #define dg_configBLE_EVENT_NOTIF_RUNTIME_CONTROL 1
1053 #endif
1054 
1055 #endif
1056 /* ---------------------------------------------------------------------------------------------- */
1057 
1068 #define dg_configBLE_2MBIT_PHY (1)
1069 
1075 #ifndef dg_configBLE_UUID_SUOTA_SERVICE
1076 #define dg_configBLE_UUID_SUOTA_SERVICE (0xFEF5)
1077 #endif
1078 
1079 #endif /* _BLE_CONFIG_H_ */
1080 
ble_stack_config.h
BLE stack configuration options.