summaryrefslogtreecommitdiff
path: root/lib/bt/host/nimble/Kconfig.in
blob: 3ea055788a28571608925280c3389ca9609220cd (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
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365

choice BT_NIMBLE_MEM_ALLOC_MODE
    prompt "Memory allocation strategy"
    default BT_NIMBLE_MEM_ALLOC_MODE_INTERNAL
    help
        Allocation strategy for NimBLE host stack, essentially provides ability to
        allocate all required dynamic allocations from,

        - Internal DRAM memory only
        - External SPIRAM memory only
        - Either internal or external memory based on default malloc()
          behavior in ESP-IDF
        - Internal IRAM memory wherever applicable else internal DRAM

    config BT_NIMBLE_MEM_ALLOC_MODE_INTERNAL
        bool "Internal memory"

    config BT_NIMBLE_MEM_ALLOC_MODE_EXTERNAL
        bool "External SPIRAM"
        depends on SPIRAM_USE_CAPS_ALLOC || SPIRAM_USE_MALLOC

    config BT_NIMBLE_MEM_ALLOC_MODE_DEFAULT
        bool "Default alloc mode"

    config BT_NIMBLE_MEM_ALLOC_MODE_IRAM_8BIT
        bool "Internal IRAM"
        depends on ESP32_IRAM_AS_8BIT_ACCESSIBLE_MEMORY
        help
            Allows to use IRAM memory region as 8bit accessible region.

            Every unaligned (8bit or 16bit) access will result in an exception
            and incur penalty of certain clock cycles per unaligned read/write.

endchoice #BT_NIMBLE_MEM_ALLOC_MODE

choice BT_NIMBLE_LOG_LEVEL
    prompt "NimBLE Host log verbosity"
    depends on BT_NIMBLE_ENABLED
    default BT_NIMBLE_LOG_LEVEL_INFO
    help
        Select NimBLE log level. Please make a note that the selected NimBLE log
        verbosity can not exceed the level set in "Component config --> Log output
        --> Default log verbosity".

    config BT_NIMBLE_LOG_LEVEL_NONE
        bool "No logs"
    config BT_NIMBLE_LOG_LEVEL_ERROR
        bool "Error logs"
    config BT_NIMBLE_LOG_LEVEL_WARNING
        bool "Warning logs"
    config BT_NIMBLE_LOG_LEVEL_INFO
        bool "Info logs"
    config BT_NIMBLE_LOG_LEVEL_DEBUG
        bool "Debug logs"
endchoice #BT_NIMBLE_LOG_LEVEL

config BT_NIMBLE_LOG_LEVEL
    int
    default 0 if BT_NIMBLE_LOG_LEVEL_DEBUG
    default 1 if BT_NIMBLE_LOG_LEVEL_INFO
    default 2 if BT_NIMBLE_LOG_LEVEL_WARNING
    default 3 if BT_NIMBLE_LOG_LEVEL_ERROR
    default 4 if BT_NIMBLE_LOG_LEVEL_NONE

config BT_NIMBLE_MAX_CONNECTIONS
    int "Maximum number of concurrent connections"
    range 1 2 if IDF_TARGET_ESP32C2
    range 1 70 if IDF_TARGET_ESP32C6 || IDF_TARGET_ESP32C5 || IDF_TARGET_ESP32C61
    range 1 35 if IDF_TARGET_ESP32H2
    range 1 9
    default 2 if IDF_TARGET_ESP32C2
    default 3
    depends on BT_NIMBLE_ENABLED
    help
        Defines maximum number of concurrent BLE connections. For ESP32, user
        is expected to configure BTDM_CTRL_BLE_MAX_CONN from controller menu
        along with this option. Similarly for ESP32-C3 or ESP32-S3, user is expected to
        configure BT_CTRL_BLE_MAX_ACT from controller menu.
        For ESP32C2, ESP32C6 and ESP32H2, each connection will take about 1k DRAM.

config BT_NIMBLE_MAX_BONDS
    int "Maximum number of bonds to save across reboots"
    default 3
    depends on BT_NIMBLE_ENABLED
    help
        Defines maximum number of bonds to save for peer security and our security

config BT_NIMBLE_MAX_CCCDS
    int "Maximum number of CCC descriptors to save across reboots"
    default 8
    depends on BT_NIMBLE_ENABLED
    help
        Defines maximum number of CCC descriptors to save

config BT_NIMBLE_L2CAP_COC_MAX_NUM
    int "Maximum number of connection oriented channels"
    range 0 9
    depends on BT_NIMBLE_ENABLED
    default 0
    help
        Defines maximum number of BLE Connection Oriented Channels. When set to (0), BLE COC is not compiled in

config BT_NIMBLE_L2CAP_ENHANCED_COC
    bool "L2CAP Enhanced Connection Oriented Channel"
    depends on BT_NIMBLE_ENABLED && (BT_NIMBLE_L2CAP_COC_MAX_NUM >= 1)
    default 0
    help
        Enable Enhanced Credit Based Flow Control Mode


choice BT_NIMBLE_PINNED_TO_CORE_CHOICE
    prompt "The CPU core on which NimBLE host will run"
    depends on BT_NIMBLE_ENABLED && !FREERTOS_UNICORE
    help
        The CPU core on which NimBLE host will run. You can choose Core 0 or Core 1.
        Cannot specify no-affinity

    config BT_NIMBLE_PINNED_TO_CORE_0
        bool "Core 0 (PRO CPU)"
    config BT_NIMBLE_PINNED_TO_CORE_1
        bool "Core 1 (APP CPU)"
        depends on !FREERTOS_UNICORE
endchoice

config BT_NIMBLE_PINNED_TO_CORE
    int
    depends on BT_NIMBLE_ENABLED
    default 0 if BT_NIMBLE_PINNED_TO_CORE_0
    default 1 if BT_NIMBLE_PINNED_TO_CORE_1
    default 0

config BT_NIMBLE_HOST_TASK_STACK_SIZE
    int "NimBLE Host task stack size"
    depends on BT_NIMBLE_ENABLED
    default 5120 if BLE_MESH
    default 4096
    help
        This configures stack size of NimBLE host task

config BT_NIMBLE_ROLE_CENTRAL
    bool "Enable BLE Central role"
    depends on BT_NIMBLE_ENABLED
    default y
    help
            Enables central role

config BT_NIMBLE_ROLE_PERIPHERAL
    bool "Enable BLE Peripheral role"
    depends on BT_NIMBLE_ENABLED
    default y
    help
            Enable peripheral role

config BT_NIMBLE_ROLE_BROADCASTER
    bool "Enable BLE Broadcaster role"
    depends on BT_NIMBLE_ENABLED
    default y
    help
            Enables broadcaster role

config BT_NIMBLE_ROLE_OBSERVER
    bool "Enable BLE Observer role"
    depends on BT_NIMBLE_ENABLED
    default y
    help
            Enables observer role

config BT_NIMBLE_GATT_CLIENT
    bool "Enable BLE GATT Client support"
    depends on BT_NIMBLE_ROLE_CENTRAL
    default y
    help
            Enables support for GATT Client

config BT_NIMBLE_GATT_SERVER
    bool "Enable BLE GATT Server support"
    depends on BT_NIMBLE_ROLE_PERIPHERAL
    default y
    help
            Enables support for GATT Server

config BT_NIMBLE_NVS_PERSIST
    bool "Persist the BLE Bonding keys in NVS"
    depends on BT_NIMBLE_ENABLED
    default n
    help
            Enable this flag to make bonding persistent across device reboots

config BT_NIMBLE_SMP_ID_RESET
    bool "Reset device identity when all bonding records are deleted"
    default n
    help
        There are tracking risks associated with using a fixed or static IRK.
        If enabled this option, NimBLE will assign a new randomly-generated IRK
        when all pairing and bonding records are deleted. This would decrease the ability
        of a previously paired peer to be used to determine whether a device
        with which it previously shared an IRK is within range.

menuconfig BT_NIMBLE_SECURITY_ENABLE
    bool "Enable BLE SM feature"
    depends on BT_NIMBLE_ENABLED
    default y
    help
            Enable BLE sm feature

config BT_NIMBLE_SM_LEGACY
    bool "Security manager legacy pairing"
    depends on BT_NIMBLE_SECURITY_ENABLE
    default y
    help
        Enable security manager legacy pairing

config BT_NIMBLE_SM_SC
    bool "Security manager secure connections (4.2)"
    depends on BT_NIMBLE_SECURITY_ENABLE
    default y
    help
        Enable security manager secure connections

config BT_NIMBLE_SM_SC_DEBUG_KEYS
    bool "Use predefined public-private key pair"
    default n
    depends on BT_NIMBLE_SECURITY_ENABLE && BT_NIMBLE_SM_SC
    help
        If this option is enabled, SM uses predefined DH key pair as described
        in Core Specification, Vol. 3, Part H, 2.3.5.6.1. This allows to
        decrypt air traffic easily and thus should only be used for debugging.

config BT_NIMBLE_LL_CFG_FEAT_LE_ENCRYPTION
    bool "Enable LE encryption"
    depends on BT_NIMBLE_SECURITY_ENABLE && BT_NIMBLE_ENABLED
    default y
    help
            Enable encryption connection

config BT_NIMBLE_SM_LVL
    int "Security level"
    depends on BT_NIMBLE_SECURITY_ENABLE
    default 0
    help
        LE Security Mode 1 Levels:
        1. No Security
        2. Unauthenticated pairing with encryption
        3. Authenticated pairing with encryption
        4. Authenticated LE Secure Connections pairing with encryption using a 128-bit strength encryption key.

config BT_NIMBLE_SM_SC_ONLY
    int "Enable Secure Connections Only Mode"
    depends on BT_NIMBLE_SECURITY_ENABLE
    default 0
    help
        Enable Secure Connections Only Mode

config BT_NIMBLE_PRINT_ERR_NAME
    bool "Enable feature to print Error description"
    depends on BT_NIMBLE_ENABLED
    default y
    help
        Enable feature to give useful explanation for HCI errors

config BT_NIMBLE_DEBUG
    bool "Enable extra runtime asserts and host debugging"
    default n
    depends on BT_NIMBLE_ENABLED
    help
        This enables extra runtime asserts and host debugging

config BT_NIMBLE_DYNAMIC_SERVICE
    bool "Enable dynamic services"
    depends on BT_NIMBLE_ENABLED
    help
        This enables user to add/remove Gatt services at runtime


config BT_NIMBLE_SVC_GAP_DEVICE_NAME
    string "BLE GAP default device name"
    depends on BT_NIMBLE_ENABLED
    default "nimble"
    help
        The Device Name characteristic shall contain the name of the device as an UTF-8 string.
        This name can be changed by using API ble_svc_gap_device_name_set()

config BT_NIMBLE_GAP_DEVICE_NAME_MAX_LEN
    int "Maximum length of BLE device name in octets"
    depends on BT_NIMBLE_ENABLED
    default 31
    help
        Device Name characteristic value shall be 0 to 248 octets in length

config BT_NIMBLE_ATT_PREFERRED_MTU
    int "Preferred MTU size in octets"
    depends on BT_NIMBLE_ENABLED
    default 256
    help
        This is the default value of ATT MTU indicated by the device during an ATT MTU exchange.
        This value can be changed using API ble_att_set_preferred_mtu()

config BT_NIMBLE_ATT_MAX_PREP_ENTRIES
    int "Max Prepare write entries"
    depends on BT_NIMBLE_ENABLED
    default 64
    help
        This is the default value of ATT Maximum prepare entries

config BT_NIMBLE_SVC_GAP_APPEARANCE
    hex "External appearance of the device"
    depends on BT_NIMBLE_ENABLED
    default 0
    help
        Standard BLE GAP Appearance value in HEX format e.g. 0x02C0


menu "Memory Settings"
    config BT_NIMBLE_MSYS_1_BLOCK_COUNT
        int "MSYS_1 Block Count"
        default 24 if SOC_ESP_NIMBLE_CONTROLLER
        default 12 if !SOC_ESP_NIMBLE_CONTROLLER
        help
            MSYS is a system level mbuf registry. For prepare write & prepare
            responses MBUFs are allocated out of msys_1 pool. For NIMBLE_MESH
            enabled cases, this block count is increased by 8 than user defined
            count.

    config BT_NIMBLE_MSYS_1_BLOCK_SIZE
        int    "MSYS_1 Block Size"
        default 128 if SOC_ESP_NIMBLE_CONTROLLER
        default 256 if !SOC_ESP_NIMBLE_CONTROLLER
        help
                Dynamic memory size of block 1

    config BT_NIMBLE_MSYS_2_BLOCK_COUNT
        int    "MSYS_2 Block Count"
        default 24
        help
                Dynamic memory count

    config BT_NIMBLE_MSYS_2_BLOCK_SIZE
        int    "MSYS_2 Block Size"
        default 320
        help
                Dynamic memory size of block 2

    config BT_NIMBLE_MSYS_BUF_FROM_HEAP
        bool "Get Msys Mbuf from heap"
        default y
        depends on BT_LE_MSYS_INIT_IN_CONTROLLER
        help
            This option sets the source of the shared msys mbuf memory between
            the Host and the Controller. Allocate the memory from the heap if
            this option is sets, from the mempool otherwise.

    config BT_NIMBLE_TRANSPORT_ACL_FROM_LL_COUNT
        int "ACL Buffer count"
        depends on BT_NIMBLE_ENABLED
        default 24
        help
            The number of ACL data buffers allocated for host.

    config BT_NIMBLE_TRANSPORT_ACL_SIZE
        int "Transport ACL Buffer size"
        depends on BT_NIMBLE_ENABLED
        default 255
        help
            This is the maximum size of the data portion of HCI ACL data packets.
            It does not include the HCI data header (of 4 bytes)

    config BT_NIMBLE_TRANSPORT_EVT_SIZE
        int "Transport Event Buffer size"
        depends on BT_NIMBLE_ENABLED
        default 257 if BT_NIMBLE_EXT_ADV
        default 70
        help
            This is the size of each HCI event buffer in bytes. In case of
            extended advertising, packets can be fragmented. 257 bytes is the
            maximum size of a packet.

    config BT_NIMBLE_TRANSPORT_EVT_COUNT
        int "Transport Event Buffer count"
        depends on BT_NIMBLE_ENABLED
        default 30
        help
            This is the high priority HCI events' buffer size. High-priority
            event buffers are for everything except advertising reports. If there
            are no free high-priority event buffers then host will try to allocate a
            low-priority buffer instead

    config BT_NIMBLE_TRANSPORT_EVT_DISCARD_COUNT
        int "Discardable Transport Event Buffer count"
        depends on BT_NIMBLE_ENABLED
        default 8
        help
            This is the low priority HCI events' buffer size. Low-priority event
            buffers are only used for advertising reports. If there are no free
            low-priority event buffers, then an incoming advertising report will
            get dropped

    config BT_NIMBLE_L2CAP_COC_SDU_BUFF_COUNT
        int "L2cap coc Service Data Unit Buffer count"
        depends on BT_NIMBLE_ENABLED
        default 1
        help
            This is the service data unit buffer count for l2cap coc.

endmenu

config BT_NIMBLE_GATT_MAX_PROCS
    int "Maximum number of GATT client procedures"
    depends on BT_NIMBLE_ENABLED
    default 4
    help
        Maximum number of GATT client procedures that can be executed.

config BT_NIMBLE_HS_FLOW_CTRL
    bool "Enable Host Flow control"
    depends on BT_NIMBLE_ENABLED && !SOC_ESP_NIMBLE_CONTROLLER
    default y if IDF_TARGET_ESP32
    default n
    help
        Enable Host Flow control

config BT_NIMBLE_HS_FLOW_CTRL_ITVL
    int "Host Flow control interval"
    depends on BT_NIMBLE_HS_FLOW_CTRL
    default 1000
    help
        Host flow control interval in msecs

config BT_NIMBLE_HS_FLOW_CTRL_THRESH
    int "Host Flow control threshold"
    depends on BT_NIMBLE_HS_FLOW_CTRL
    default 2
    help
        Host flow control threshold, if the number of free buffers are at or
        below this threshold, send an immediate number-of-completed-packets
        event

config BT_NIMBLE_HS_FLOW_CTRL_TX_ON_DISCONNECT
    bool "Host Flow control on disconnect"
    depends on BT_NIMBLE_HS_FLOW_CTRL
    default y
    help
        Enable this option to send number-of-completed-packets event to
        controller after disconnection

config BT_NIMBLE_RPA_TIMEOUT
    int "RPA timeout in seconds"
    range 1 41400
    depends on BT_NIMBLE_ENABLED
    default 900
    help
        Time interval between RPA address change.

menuconfig BT_NIMBLE_MESH
    bool "Enable BLE mesh functionality"
    select BT_NIMBLE_SM_SC
    depends on BT_NIMBLE_ENABLED
    default n
    help
        Enable BLE Mesh example present in upstream mynewt-nimble and not maintained by Espressif.

        IDF maintains ESP-BLE-MESH as the official Mesh solution. Please refer to ESP-BLE-MESH guide at:
        `https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/esp-ble-mesh/ble-mesh-index.html`

config BT_NIMBLE_MESH_PROXY
    bool "Enable mesh proxy functionality"
    default n
    depends on BT_NIMBLE_MESH
    help
        Enable proxy. This is automatically set whenever NIMBLE_MESH_PB_GATT or
        NIMBLE_MESH_GATT_PROXY is set


config BT_NIMBLE_MESH_PROV
    bool "Enable BLE mesh provisioning"
    default y
    depends on BT_NIMBLE_MESH
    help
        Enable mesh provisioning

config BT_NIMBLE_MESH_PB_ADV
    bool "Enable mesh provisioning over advertising bearer"
    default y
    depends on BT_NIMBLE_MESH_PROV
    help
        Enable this option to allow the device to be provisioned over
        the advertising bearer


config BT_NIMBLE_MESH_PB_GATT
    bool "Enable mesh provisioning over GATT bearer"
    default y
    select BT_NIMBLE_MESH_PROXY
    depends on BT_NIMBLE_MESH_PROV
    help
        Enable this option to allow the device to be provisioned over the GATT
        bearer

config BT_NIMBLE_MESH_GATT_PROXY
    bool "Enable GATT Proxy functionality"
    default y
    select BT_NIMBLE_MESH_PROXY
    depends on BT_NIMBLE_MESH
    help
        This option enables support for the Mesh GATT Proxy Service,
        i.e. the ability to act as a proxy between a Mesh GATT Client
        and a Mesh network

config BT_NIMBLE_MESH_RELAY
    bool "Enable mesh relay functionality"
    default n
    depends on BT_NIMBLE_MESH
    help
        Support for acting as a Mesh Relay Node

config BT_NIMBLE_MESH_LOW_POWER
    bool "Enable mesh low power mode"
    default n
    depends on BT_NIMBLE_MESH
    help
        Enable this option to be able to act as a Low Power Node

config BT_NIMBLE_MESH_FRIEND
    bool "Enable mesh friend functionality"
    default n
    depends on BT_NIMBLE_MESH
    help
        Enable this option to be able to act as a Friend Node

config BT_NIMBLE_MESH_DEVICE_NAME
    string "Set mesh device name"
    default "nimble-mesh-node"
    depends on BT_NIMBLE_MESH
    help
        This value defines Bluetooth Mesh device/node name

config BT_NIMBLE_MESH_NODE_COUNT
    int "Set mesh node count"
    default 1
    depends on BT_NIMBLE_MESH
    help
        Defines mesh node count.

config BT_NIMBLE_MESH_PROVISIONER
    bool "Enable BLE mesh provisioner"
    default 0
    depends on BT_NIMBLE_MESH
    help
        Enable mesh provisioner.

config BT_NIMBLE_CRYPTO_STACK_MBEDTLS
    bool "Override TinyCrypt with mbedTLS for crypto computations"
    default y
    depends on BT_NIMBLE_ENABLED
    select MBEDTLS_CMAC_C
    help
        Enable this option to choose mbedTLS instead of TinyCrypt for crypto
        computations.

config BT_NIMBLE_HS_STOP_TIMEOUT_MS
    int "BLE host stop timeout in msec"
    default 2000
    depends on BT_NIMBLE_ENABLED
    help
        BLE Host stop procedure timeout in milliseconds.

config BT_NIMBLE_HOST_BASED_PRIVACY
    bool "Enable host based privacy for random address."
    default n
    depends on BT_NIMBLE_ENABLED && IDF_TARGET_ESP32
    help
        Use this option to do host based Random Private Address resolution.
        If this option is disabled then controller based privacy is used.

config BT_NIMBLE_ENABLE_CONN_REATTEMPT
    bool "Enable connection reattempts on connection establishment error"
    default y if (IDF_TARGET_ESP32C3 || IDF_TARGET_ESP32S3 || SOC_ESP_NIMBLE_CONTROLLER)
    default n if IDF_TARGET_ESP32
    help
        Enable to make the NimBLE host to reattempt GAP connection on connection
        establishment failure.

config BT_NIMBLE_MAX_CONN_REATTEMPT
    int "Maximum number connection reattempts"
    range 1 255
    default 3
    depends on BT_NIMBLE_ENABLED && BT_NIMBLE_ENABLE_CONN_REATTEMPT
    help
        Defines maximum number of connection reattempts.

config BT_NIMBLE_HANDLE_REPEAT_PAIRING_DELETION
    bool "Enable stack handling of repeat pairing"
    default n
    depends on BT_NIMBLE_ENABLED
    help
        Use this option to let stack internally handle the request for repeat pairing.
        Enabling this option will delete the pairing of the device and stack will NOT post any event
        to application. If this option is disabled, application will get BLE_GAP_EVENT_REPEAT_PAIRING
        event.

menuconfig BT_NIMBLE_50_FEATURE_SUPPORT
    bool "Enable BLE 5 feature"
    depends on BT_NIMBLE_ENABLED && (SOC_BLE_50_SUPPORTED || !BT_CONTROLLER_ENABLED)
    default y
    help
            Enable BLE 5 feature

if BT_NIMBLE_50_FEATURE_SUPPORT
    config BT_NIMBLE_LL_CFG_FEAT_LE_2M_PHY
        bool "Enable 2M Phy"
        depends on BT_NIMBLE_50_FEATURE_SUPPORT
        default y
        help
                Enable 2M-PHY

    config BT_NIMBLE_LL_CFG_FEAT_LE_CODED_PHY
        bool "Enable coded Phy"
        depends on BT_NIMBLE_50_FEATURE_SUPPORT
        default y
        help
                Enable coded-PHY

    config BT_NIMBLE_EXT_ADV
        bool "Enable extended advertising"
        depends on BT_NIMBLE_50_FEATURE_SUPPORT
        default n
        help
            Enable this option to do extended advertising. Extended advertising
            will be supported from BLE 5.0 onwards.

    if BT_NIMBLE_EXT_ADV
        config BT_NIMBLE_EXT_ADV_V2
            bool "Enable support for extended adv v2"
            default n
            depends on BT_NIMBLE_EXT_ADV
            help
                Enable this option to use Extended Adv V2 command instead of V1.

        config BT_NIMBLE_MAX_EXT_ADV_INSTANCES
            int "Maximum number of extended advertising instances."
            range 0 4
            default 1 if BT_NIMBLE_EXT_ADV
            default 0
            depends on BT_NIMBLE_EXT_ADV
            help
                Change this option to set maximum number of extended advertising
                instances. Minimum there is always one instance of
                advertising. Enter how many more advertising instances you
                want.
                For ESP32C2, ESP32C6 and ESP32H2, each extended advertising instance
                will take about 0.5k DRAM.

        config BT_NIMBLE_EXT_ADV_MAX_SIZE
            int "Maximum length of the advertising data."
            range 0 1650
            default 1650 if BT_NIMBLE_EXT_ADV
            default 0
            depends on BT_NIMBLE_EXT_ADV
            help
                Defines the length of the extended adv data. The value should not
                exceed 1650.

        config BT_NIMBLE_ENABLE_PERIODIC_ADV
            bool "Enable periodic advertisement."
            default y
            depends on BT_NIMBLE_EXT_ADV
            help
                Enable this option to start periodic advertisement.

        config BT_NIMBLE_PERIODIC_ADV_ENH
            bool "Periodic adv enhancements(adi support)"
            depends on BT_NIMBLE_ENABLE_PERIODIC_ADV && SOC_BLE_PERIODIC_ADV_ENH_SUPPORTED
            help
                Enable the periodic advertising enhancements

        config BT_NIMBLE_PERIODIC_ADV_SYNC_TRANSFER
            bool "Enable Transfer Sync Events"
            depends on BT_NIMBLE_ENABLE_PERIODIC_ADV
            default y
            help
                    This enables controller transfer periodic sync events to host

        config BT_NIMBLE_PERIODIC_ADV_WITH_RESPONSES
            bool "Enable Periodic Advertisement with Response (EXPERIMENTAL)"
            depends on BT_NIMBLE_ENABLE_PERIODIC_ADV
            default n
            help
                    This enables controller PAwR (Periodic Advertisement with Response).
    endif

    config BT_NIMBLE_EXT_SCAN
        bool "Enable extended scanning"
        depends on BT_NIMBLE_50_FEATURE_SUPPORT && BT_NIMBLE_ROLE_OBSERVER
        default y
        help
            Enable this option to do extended scanning.

    config BT_NIMBLE_ENABLE_PERIODIC_SYNC
        bool "Enable periodic sync"
        default y
        depends on BT_NIMBLE_EXT_SCAN
        help
            Enable this option to receive periodic advertisement.

    if BT_NIMBLE_ENABLE_PERIODIC_SYNC
        config BT_NIMBLE_MAX_PERIODIC_SYNCS
            int "Maximum number of periodic advertising syncs"
            range 0 3 if IDF_TARGET_ESP32C2
            range 0 8
            default 1 if BT_NIMBLE_ENABLE_PERIODIC_ADV
            default 0
            help
                Set this option to set the upper limit for number of periodic sync
                connections. This should be less than maximum connections allowed by
                controller.

        config BT_NIMBLE_MAX_PERIODIC_ADVERTISER_LIST
            int "Maximum number of periodic advertiser list"
            depends on SOC_ESP_NIMBLE_CONTROLLER
            range 1 5
            default 5 if BT_NIMBLE_50_FEATURE_SUPPORT
            help
                Set this option to set the upper limit for number of periodic advertiser list.
    endif

    config BT_NIMBLE_BLE_POWER_CONTROL
        bool "Enable support for BLE Power Control"
        depends on BT_NIMBLE_50_FEATURE_SUPPORT && SOC_BLE_POWER_CONTROL_SUPPORTED
        default n
        help
            Set this option to enable the Power Control feature

    config BT_NIMBLE_AOA_AOD
        bool "Direction Finding"
        depends on BT_NIMBLE_50_FEATURE_SUPPORT && (BT_CONTROLLER_DISABLED || SOC_BLE_CTE_SUPPORTED)
        default n
        help
            Enable support for Connectionless and Connection Oriented Direction Finding
endif

menuconfig BT_NIMBLE_GATT_CACHING
    bool "Enable GATT caching"
    depends on BT_NIMBLE_ENABLED
    select BT_NIMBLE_DYNAMIC_SERVICE
    help
        Enable GATT caching
config BT_NIMBLE_GATT_CACHING_INCLUDE_SERVICES
    bool "Include services in GATT caching"
    depends on BT_NIMBLE_GATT_CACHING
    default n
    help
        Enable this option to include *included services* (e.g., services referenced by other services)
        in the GATT database cache. Disabling this will skip caching of included service entries.
config BT_NIMBLE_INCL_SVC_DISCOVERY
    bool "Enable Included service discovery"
    default y if BT_NIMBLE_GATT_CACHING_INCLUDE_SERVICES
    default n
    help
        Enable this option to start discovery for included service.
config BT_NIMBLE_GATT_CACHING_MAX_CONNS
    int "Maximum connections to be cached"
    depends on BT_NIMBLE_GATT_CACHING
    default BT_NIMBLE_MAX_CONNECTIONS
    help
        Set this option to set the upper limit on number of connections to be cached.
config BT_NIMBLE_GATT_CACHING_MAX_SVCS
    int "Maximum number of services per connection"
    depends on BT_NIMBLE_GATT_CACHING
    default 64
    help
        Set this option to set the upper limit on number of services per connection to be cached.
config BT_NIMBLE_GATT_CACHING_MAX_INCL_SVCS
    int "Maximum number of included services per connection"
    depends on BT_NIMBLE_GATT_CACHING
    default 64
    help
        Set this option to set the upper limit on number of included services per connection to be cached.
config BT_NIMBLE_GATT_CACHING_MAX_CHRS
    int "Maximum number of characteristics per connection"
    depends on BT_NIMBLE_GATT_CACHING
    default 64
    help
        Set this option to set the upper limit on number of characteristics per connection to be cached.
config BT_NIMBLE_GATT_CACHING_MAX_DSCS
    int "Maximum number of descriptors per connection"
    depends on BT_NIMBLE_GATT_CACHING
    default 64
    help
        Set this option to set the upper limit on number of descriptors per connection to be cached.
config BT_NIMBLE_GATT_CACHING_DISABLE_AUTO
    bool "Do not start discovery procedure automatically upon receiving Out of Sync"
    depends on BT_NIMBLE_GATT_CACHING
    default n
    help
        When client receives ATT out-of-sync error message, it will not automatically start the discovery procedure
        to correct the invalid cache.

config BT_NIMBLE_WHITELIST_SIZE
    int "BLE white list size"
    depends on BT_NIMBLE_ENABLED
    range 1 31 if SOC_ESP_NIMBLE_CONTROLLER
    range 1 15
    default 12
    help
        BLE list size

config BT_NIMBLE_TEST_THROUGHPUT_TEST
    bool "Throughput Test Mode enable"
    default n
    help
            Enable the throughput test mode

config BT_NIMBLE_BLUFI_ENABLE
    bool "Enable blufi functionality"
    depends on BT_NIMBLE_ENABLED
    default n
    help
        Set this option to enable blufi functionality.

config BT_NIMBLE_USE_ESP_TIMER
    bool "Enable Esp Timer for Nimble"
    default y
    help
        Set this option to use Esp Timer which has higher priority timer instead of FreeRTOS timer

config BT_NIMBLE_LEGACY_VHCI_ENABLE
    bool
    default y if (IDF_TARGET_ESP32 || IDF_TARGET_ESP32C3 || IDF_TARGET_ESP32S3)
    default n
    help
        This option is used to distinguish whether a previous version of VHCI is being used

config BT_NIMBLE_BLE_GATT_BLOB_TRANSFER
    bool "Blob transfer"
    help
        This option is used when data to be sent is more than 512 bytes. For peripheral role,
        BT_NIMBLE_MSYS_1_BLOCK_COUNT needs to be increased according to the need.

menu "BLE Services"
    depends on BT_NIMBLE_GATT_SERVER

    config BT_NIMBLE_PROX_SERVICE
        bool "Proximity service"
        default y
        help
            Enable Proximity Service support

    config BT_NIMBLE_ANS_SERVICE
        bool "Alert Notification service"
        default y
        help
            Enable Alert Notification Service support

    config BT_NIMBLE_CTS_SERVICE
        bool "Current Time Service"
        default y
        help
            Enable Current Time Service support

    config BT_NIMBLE_HTP_SERVICE
        bool "Health Thermometer service"
        default y
        help
            Enable Health Thermometer Service support

    config BT_NIMBLE_IPSS_SERVICE
        bool "Internet Protocol Support service"
        default y
        help
            Enable Internet Protocol Service support

    config BT_NIMBLE_TPS_SERVICE
        bool "Tx Power service"
        default y
        help
            Enable Tx Power Service support

    config BT_NIMBLE_IAS_SERVICE
        bool "Immediate Alert service"
        default y
        help
            Enable Immediate Alert Service support

    config BT_NIMBLE_LLS_SERVICE
        bool "Link Loss service"
        default y
        help
            Enable Link Loss Service support

    config BT_NIMBLE_SPS_SERVICE
        bool "Serial Port service"
        default y
        help
            Enable Serial Port Service support

    config BT_NIMBLE_HR_SERVICE
        bool "Heart Rate service"
        default y
        help
            Enable HeartRate Service support

    menuconfig BT_NIMBLE_HID_SERVICE
        bool "HID service"
        default n
        help
            Enable HID service support

    config BT_NIMBLE_SVC_HID_MAX_INSTANCES
        depends on BT_NIMBLE_HID_SERVICE
        int "Maximum HID service instances"
        default 2
        help
            Defines maximum number of HID service instances

    config BT_NIMBLE_SVC_HID_MAX_RPTS
        depends on BT_NIMBLE_HID_SERVICE
        int "Maximum HID Report characteristics per service instance"
        default 3
        help
            Defines maximum number of report characteristics per service instance

    menuconfig BT_NIMBLE_BAS_SERVICE
        bool "Battery service"
        default y
        help
            Enable Battery service support

    config BT_NIMBLE_SVC_BAS_BATTERY_LEVEL_NOTIFY
        depends on BT_NIMBLE_BAS_SERVICE
        bool "BAS Battery Level NOTIFY permission"
        help
            Enable/Disable notifications on BAS Battery Level Characteristic

    menuconfig BT_NIMBLE_DIS_SERVICE
        bool "DIS service"
        default y
        help
            Enable DIS service support

    config BT_NIMBLE_SVC_DIS_MANUFACTURER_NAME
        depends on BT_NIMBLE_DIS_SERVICE
        bool "Manufacturer Name"
        default n
        help
                Enable the DIS characteristic Manufacturer Name String characteristic

    config BT_NIMBLE_SVC_DIS_SERIAL_NUMBER
        depends on BT_NIMBLE_DIS_SERVICE
        bool "Serial Number"
        default n
        help
                Enable the DIS Serial Number characteristic

    config BT_NIMBLE_SVC_DIS_HARDWARE_REVISION
        depends on BT_NIMBLE_DIS_SERVICE
        bool "Hardware Revision"
        default n
        help
                Enable the DIS Hardware Revision characteristic

    config BT_NIMBLE_SVC_DIS_FIRMWARE_REVISION
        depends on BT_NIMBLE_DIS_SERVICE
        bool "Firmware Revision"
        default n
        help
                Enable the DIS Firmware Revision characteristic

    config BT_NIMBLE_SVC_DIS_SOFTWARE_REVISION
        depends on BT_NIMBLE_DIS_SERVICE
        bool "Software Revision"
        default n
        help
                Enable the DIS Software Revision characteristic

    config BT_NIMBLE_SVC_DIS_SYSTEM_ID
        depends on BT_NIMBLE_DIS_SERVICE
        bool "System ID"
        default n
        help
                Enable the DIS System ID characteristic

    config BT_NIMBLE_SVC_DIS_PNP_ID
        depends on BT_NIMBLE_DIS_SERVICE
        bool "PnP ID"
        default n
        help
                Enable the DIS PnP ID characteristic

    config BT_NIMBLE_SVC_DIS_INCLUDED
        depends on BT_NIMBLE_DIS_SERVICE
        bool "DIS as an Included Service"
        default n
        help
                Use DIS as an included service

    menuconfig BT_NIMBLE_GAP_SERVICE
        bool "GAP Service"
        default y
        help
            Enable GAP Service support

    menu "GAP Appearance write permissions"
        depends on BT_NIMBLE_GAP_SERVICE

        config BT_NIMBLE_SVC_GAP_APPEAR_WRITE
            bool "Write"
            default n
            help
                Enable write permission (BLE_GATT_CHR_F_WRITE)

        config BT_NIMBLE_SVC_GAP_APPEAR_WRITE_ENC
            depends on BT_NIMBLE_SVC_GAP_APPEAR_WRITE
            bool "Write with encryption"
            help
                Enable write with encryption permission (BLE_GATT_CHR_F_WRITE_ENC)

        config BT_NIMBLE_SVC_GAP_APPEAR_WRITE_AUTHEN
            depends on BT_NIMBLE_SVC_GAP_APPEAR_WRITE
            bool "Write with authentication"
            help
                Enable write with authentication permission (BLE_GATT_CHR_F_WRITE_AUTHEN)

        config BT_NIMBLE_SVC_GAP_APPEAR_WRITE_AUTHOR
            depends on BT_NIMBLE_SVC_GAP_APPEAR_WRITE
            bool "Write with authorisation"
            default n
            help
                Enable write with authorisation permission (BLE_GATT_CHR_F_WRITE_AUTHOR)

        config BT_NIMBLE_SVC_GAP_APPEAR_WRITE_PERM
            int
            default 0 if !BT_NIMBLE_SVC_GAP_APPEAR_WRITE
            default 8 if BT_NIMBLE_SVC_GAP_APPEAR_WRITE

        config BT_NIMBLE_SVC_GAP_APPEAR_WRITE_PERM_ENC
            int
            default 0 if !BT_NIMBLE_SVC_GAP_APPEAR_WRITE_ENC
            default 4096 if BT_NIMBLE_SVC_GAP_APPEAR_WRITE_ENC

        config BT_NIMBLE_SVC_GAP_APPEAR_WRITE_PERM_ATHN
            int
            default 0 if !BT_NIMBLE_SVC_GAP_APPEAR_WRITE_AUTHEN
            default 8192 if BT_NIMBLE_SVC_GAP_APPEAR_WRITE_AUTHEN

        config BT_NIMBLE_SVC_GAP_APPEAR_WRITE_PERM_ATHR
            int
            default 0 if !BT_NIMBLE_SVC_GAP_APPEAR_WRITE_AUTHOR
            default 16384 if BT_NIMBLE_SVC_GAP_APPEAR_WRITE_AUTHOR
    endmenu

    choice BT_NIMBLE_SVC_GAP_CENT_ADDR_RESOLUTION
        prompt "GAP Characteristic - Central Address Resolution"
        depends on BT_NIMBLE_GAP_SERVICE
        default BT_NIMBLE_SVC_GAP_CAR_CHAR_NOT_SUPP
        help
                Weather or not Central Address Resolution characteristic is supported on
                the device, and if supported, weather or not Central Address Resolution
                is supported.

                - Central Address Resolution characteristic not supported
                - Central Address Resolution not supported
                - Central Address Resolution supported

            config BT_NIMBLE_SVC_GAP_CAR_CHAR_NOT_SUPP
                bool "Characteristic not supported"

            config BT_NIMBLE_SVC_GAP_CAR_NOT_SUPP
                bool "Central Address Resolution not supported"

            config BT_NIMBLE_SVC_GAP_CAR_SUPP
                bool "Central Address Resolution supported"
    endchoice

    config BT_NIMBLE_SVC_GAP_CENT_ADDR_RESOLUTION
        int
        default -1 if BT_NIMBLE_SVC_GAP_CAR_CHAR_NOT_SUPP
        default 0 if BT_NIMBLE_SVC_GAP_CAR_NOT_SUPP
        default 1 if BT_NIMBLE_SVC_GAP_CAR_SUPP


    menu "GAP device name write permissions"
        depends on BT_NIMBLE_GAP_SERVICE
        config BT_NIMBLE_SVC_GAP_NAME_WRITE
            bool "Write"
            default n
            help
                Enable write permission (BLE_GATT_CHR_F_WRITE)

        config BT_NIMBLE_SVC_GAP_NAME_WRITE_ENC
            depends on BT_NIMBLE_SVC_GAP_NAME_WRITE
            bool "Write with encryption"
            default n
            help
                Enable write with encryption permission (BLE_GATT_CHR_F_WRITE_ENC)

        config BT_NIMBLE_SVC_GAP_NAME_WRITE_AUTHEN
            depends on BT_NIMBLE_SVC_GAP_NAME_WRITE
            bool "Write with authentication"
            default n
            help
                Enable write with authentication permission (BLE_GATT_CHR_F_WRITE_AUTHEN)

        config BT_NIMBLE_SVC_GAP_NAME_WRITE_AUTHOR
            depends on BT_NIMBLE_SVC_GAP_NAME_WRITE
            bool "Write with authorisation"
            default n
            help
                Enable write with authorisation permission (BLE_GATT_CHR_F_WRITE_AUTHOR)
    endmenu

    menu "PPCP settings"
        depends on BT_NIMBLE_GAP_SERVICE
        config BT_NIMBLE_SVC_GAP_PPCP_MAX_CONN_INTERVAL
            int "PPCP Connection Interval Max (Unit: 1.25 ms)"
            depends on BT_NIMBLE_ROLE_PERIPHERAL && BT_NIMBLE_GAP_SERVICE
            default 0
            help
                Peripheral Preferred Connection Parameter: Connection Interval maximum value
                Interval Max = value * 1.25 ms

        config BT_NIMBLE_SVC_GAP_PPCP_MIN_CONN_INTERVAL
            int "PPCP Connection Interval Min (Unit: 1.25 ms)"
            depends on BT_NIMBLE_ROLE_PERIPHERAL && BT_NIMBLE_GAP_SERVICE
            default 0
            help
                Peripheral Preferred Connection Parameter: Connection Interval minimum value
                Interval Min = value * 1.25 ms

        config BT_NIMBLE_SVC_GAP_PPCP_SLAVE_LATENCY
            int "PPCP Slave Latency"
            depends on BT_NIMBLE_GAP_SERVICE
            default 0
            help
                Peripheral Preferred Connection Parameter: Slave Latency

        config BT_NIMBLE_SVC_GAP_PPCP_SUPERVISION_TMO
            int "PPCP Supervision Timeout (Uint: 10 ms)"
            depends on BT_NIMBLE_GAP_SERVICE
            default 0
            help
                Peripheral Preferred Connection Parameter: Supervision Timeout
                Timeout = Value * 10 ms
    endmenu

    config BT_NIMBLE_SVC_GAP_NAME_WRITE_PERM
        int
        default 0 if !BT_NIMBLE_SVC_GAP_NAME_WRITE
        default 8 if BT_NIMBLE_SVC_GAP_NAME_WRITE

    config BT_NIMBLE_SVC_GAP_NAME_WRITE_PERM_ENC
        int
        default 0 if !BT_NIMBLE_SVC_GAP_NAME_WRITE_ENC
        default 4096 if BT_NIMBLE_SVC_GAP_NAME_WRITE_ENC

    config BT_NIMBLE_SVC_GAP_NAME_WRITE_PERM_AUTHEN
        int
        default 0 if !BT_NIMBLE_SVC_GAP_NAME_WRITE_AUTHEN
        default 8192 if BT_NIMBLE_SVC_GAP_NAME_WRITE_AUTHEN

    config BT_NIMBLE_SVC_GAP_NAME_WRITE_PERM_AUTHOR
        int
        default 0 if !BT_NIMBLE_SVC_GAP_NAME_WRITE_AUTHOR
        default 16384 if BT_NIMBLE_SVC_GAP_NAME_WRITE_AUTHOR

    config BT_NIMBLE_SVC_GAP_GATT_SECURITY_LEVEL
        bool "LE GATT Security Level Characteristic"
        default n
        help
            Enable the LE GATT Security Level Characteristic

    config BT_NIMBLE_SVC_GAP_RPA_ONLY
        bool "Resolvable Private Address Only characteristic"
        default n
        help
            Enable the Resolvable Private Address Only characteristic

endmenu

config BT_NIMBLE_VS_SUPPORT
    bool "Enable support for VSC and VSE"
    help
        This option is used to enable support for sending Vendor Specific HCI commands and handling
        Vendor Specific HCI Events.

config BT_NIMBLE_OPTIMIZE_MULTI_CONN
    bool "Enable the optimization of multi-connection"
    depends on SOC_BLE_MULTI_CONN_OPTIMIZATION
    select BT_NIMBLE_VS_SUPPORT
    default n
    help
        This option enables the use of vendor-specific APIs for multi-connections, which can
        greatly enhance the stability of coexistence between numerous central and peripheral
        devices. It will prohibit the usage of standard APIs.

config BT_NIMBLE_ENC_ADV_DATA
    bool "Encrypted Advertising Data"
    help
        This option is used to enable encrypted advertising data.

config BT_NIMBLE_MAX_EADS
    int "Maximum number of EAD devices to save across reboots"
    default 10
    depends on BT_NIMBLE_ENABLED && BT_NIMBLE_ENC_ADV_DATA
    help
        Defines maximum number of encrypted advertising data key material to save

config BT_NIMBLE_HIGH_DUTY_ADV_ITVL
    bool "Enable BLE high duty advertising interval feature"
    depends on BT_NIMBLE_ENABLED
    help
        This enable BLE high duty advertising interval feature

config BT_NIMBLE_HOST_ALLOW_CONNECT_WITH_SCAN
    bool "Allow Connections with scanning in progress"
    depends on BT_NIMBLE_ENABLED && !(IDF_TARGET_ESP32C2)
    help
        This enables support for user to initiate a new connection with scan in progress

config BT_NIMBLE_HOST_QUEUE_CONG_CHECK
    bool "BLE queue congestion check"
    depends on BT_NIMBLE_ENABLED
    default n
    help
        When scanning and scan duplicate is not enabled, if there are a lot of adv packets around
        or application layer handling adv packets is slow, it will cause the controller memory
        to run out. if enabled, adv packets will be lost when host queue is congested.

config BT_NIMBLE_GATTC_PROC_PREEMPTION_PROTECT
    bool "Gatt-proc preemption protect check"
    depends on BT_NIMBLE_ENABLED
    default n
    help
        When BLE and Wireless protocol/IEEE 802.15.4 operate in coexistence, BLE preemption
        can disrupt the GATT context,causing the service discovery callback to not be invoked.
        A temporary list is maintained to preserve the GATT context and use it in case of preemption.

menu "Host-controller Transport"
    config BT_NIMBLE_TRANSPORT_UART
        bool "Enable Uart Transport"
        default y
        depends on BT_CONTROLLER_DISABLED
        help
            Use UART transport

    config BT_NIMBLE_TRANSPORT_UART_PORT
        int "Uart port"
        depends on BT_CONTROLLER_DISABLED && BT_NIMBLE_TRANSPORT_UART
        default 1
        help
            Uart port

    choice BT_NIMBLE_HCI_USE_UART_BAUDRATE
        prompt "Uart Hci Baud Rate"
        default UART_BAUDRATE_921600
        depends on BT_CONTROLLER_DISABLED && BT_NIMBLE_TRANSPORT_UART
        help
            Uart Baud Rate

        config UART_BAUDRATE_115200
            bool "115200"
        config UART_BAUDRATE_230400
            bool "230400"
        config UART_BAUDRATE_460800
            bool "460800"
        config UART_BAUDRATE_921600
            bool "921600"
    endchoice

    config BT_NIMBLE_HCI_UART_BAUDRATE
        depends on BT_CONTROLLER_DISABLED && BT_NIMBLE_TRANSPORT_UART
        int
        default 115200 if  UART_BAUDRATE_115200
        default 230400 if  UART_BAUDRATE_230400
        default 460800 if  UART_BAUDRATE_460800
        default 921600 if  UART_BAUDRATE_921600

    choice BT_NIMBLE_USE_HCI_UART_PARITY
        prompt "Uart PARITY"
        default UART_PARITY_NONE
        depends on BT_CONTROLLER_DISABLED && BT_NIMBLE_TRANSPORT_UART
        help
            Uart Parity

        config UART_PARITY_NONE
            bool "None"
        config UART_PARITY_ODD
            bool "Odd"
        config UART_PARITY_EVEN
            bool "Even"
    endchoice

    config BT_NIMBLE_TRANSPORT_UART_PARITY_NONE
        int
        default 0 if !UART_PARITY_NONE
        default 1 if UART_PARITY_NONE
        depends on BT_CONTROLLER_DISABLED && BT_NIMBLE_TRANSPORT_UART

    config BT_NIMBLE_TRANSPORT_UART_PARITY_ODD
        int
        default 0 if !UART_PARITY_ODD
        default 1 if UART_PARITY_ODD
        depends on BT_CONTROLLER_DISABLED && BT_NIMBLE_TRANSPORT_UART

    config BT_NIMBLE_TRANSPORT_UART_PARITY_EVEN
        int
        default 0 if !UART_PARITY_EVEN
        default 1 if UART_PARITY_EVEN
        depends on BT_CONTROLLER_DISABLED && BT_NIMBLE_TRANSPORT_UART

    config BT_NIMBLE_UART_RX_PIN
        int "UART Rx pin"
        depends on BT_CONTROLLER_DISABLED && BT_NIMBLE_TRANSPORT_UART
        default 5
        help
            Rx pin for Nimble Transport

    config BT_NIMBLE_UART_TX_PIN
        int "UART Tx pin"
        depends on BT_CONTROLLER_DISABLED && BT_NIMBLE_TRANSPORT_UART
        default 4
        help
            Tx pin for Nimble Transport

    choice BT_NIMBLE_USE_HCI_UART_FLOW_CTRL
        prompt "Uart Flow Control"
        default UART_HW_FLOWCTRL_DISABLE
        help
            Uart Flow Control

        config UART_HW_FLOWCTRL_DISABLE
            bool "Disable"
        config UART_HW_FLOWCTRL_CTS_RTS
            bool "Enable hardware flow control"
    endchoice

    config BT_NIMBLE_HCI_UART_FLOW_CTRL
        int
        default 0 if UART_HW_FLOWCTRL_DISABLE
        default 1 if UART_HW_FLOWCTRL_CTS_RTS

    config BT_NIMBLE_HCI_UART_RTS_PIN
        int "UART Rts Pin"
        default 19
        help
            UART HCI RTS pin

    config BT_NIMBLE_HCI_UART_CTS_PIN
        int "UART Cts Pin"
        default 23
        help
            UART HCI CTS pin
endmenu

config BT_NIMBLE_EATT_CHAN_NUM
    int "Maximum number of EATT channels"
    default 0
    depends on BT_NIMBLE_ENABLED
    help
        Defines the number of channels EATT bearers can use

config BT_NIMBLE_SUBRATE
    bool "Enable Subrate Change"
    default n
    depends on BT_NIMBLE_ENABLED
    help
        Enable connection subrate change feature