Skip to content

Commit 37eaa4c

Browse files
committed
Merge branch 'fix_nimble_issue_0826' into 'release/v5.5'
fix(nimble): Fix nimble issues 0826 (v5.5) See merge request espressif/esp-idf!41535
2 parents 9f1603d + c8b67b7 commit 37eaa4c

8 files changed

Lines changed: 323 additions & 4 deletions

File tree

components/bt/CMakeLists.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -783,6 +783,13 @@ if(CONFIG_BT_ENABLED)
783783
"host/nimble/nimble/nimble/host/src/ble_eatt.c"
784784
)
785785

786+
if(CONFIG_BT_NIMBLE_ISO)
787+
list(APPEND srcs
788+
"host/nimble/nimble/nimble/host/src/ble_hs_iso_hci.c"
789+
"host/nimble/nimble/nimble/host/src/ble_hs_iso.c"
790+
)
791+
endif()
792+
786793
if(CONFIG_BT_CONTROLLER_DISABLED AND CONFIG_BT_NIMBLE_TRANSPORT_UART)
787794
list(APPEND srcs
788795
"host/nimble/nimble/nimble/transport/uart_ll/src/hci_uart.c"

components/bt/host/nimble/Kconfig.in

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -735,6 +735,84 @@ if BT_NIMBLE_50_FEATURE_SUPPORT
735735
default n
736736
help
737737
Enable support for Connectionless and Connection Oriented Direction Finding
738+
739+
config BT_NIMBLE_ISO
740+
bool "Isochronous channels"
741+
depends on BT_NIMBLE_50_FEATURE_SUPPORT
742+
help
743+
Enable BLE Isochronous functionality.
744+
745+
if BT_NIMBLE_ISO
746+
choice BT_NIMBLE_ISO_FLOW_CONTROL
747+
prompt "ISO flow control mode"
748+
default BT_NIMBLE_ISO_NON_STD_FLOW_CTRL
749+
help
750+
ISO flow control mode
751+
752+
config BT_NIMBLE_ISO_STD_FLOW_CTRL
753+
bool "Standard"
754+
help
755+
ISO standard flow control
756+
757+
config BT_NIMBLE_ISO_NON_STD_FLOW_CTRL
758+
bool "Non-standard"
759+
help
760+
ISO non-standard flow control
761+
endchoice
762+
763+
config BT_NIMBLE_ISO_TEST
764+
bool "ISO Test mode"
765+
default y
766+
help
767+
Enable BLE Isochronous Test functionality.
768+
769+
config BT_NIMBLE_ISO_BIG
770+
int "Maximum number of BIG"
771+
range 1 2
772+
default 1
773+
help
774+
Maximum number of BIG.
775+
776+
config BT_NIMBLE_ISO_BIS
777+
int "Maximum number of BIS"
778+
range 1 3
779+
default 2
780+
help
781+
Maximum number of BIS.
782+
783+
config BT_NIMBLE_ISO_BIS_PER_BIG
784+
int "Maximum number of BIS per BIG"
785+
range 1 3
786+
default 2
787+
help
788+
Maximum number of BIS per BIG.
789+
790+
config BT_NIMBLE_ISO_CIG
791+
int "Maximum number of CIG"
792+
range 1 2
793+
default 1
794+
help
795+
Maximum number of CIG.
796+
797+
config BT_NIMBLE_ISO_CIS
798+
int "Maximum number of CIS"
799+
range 1 3
800+
default 2
801+
help
802+
Maximum number of CIS.
803+
804+
config BT_NIMBLE_ISO_CIS_PER_CIG
805+
int "Maximum number of CIS per CIG"
806+
range 1 3
807+
default 2
808+
help
809+
Maximum number of CIS per CIG.
810+
811+
config BT_NIMBLE_ISO_CIS_ESTAB_V2
812+
bool "LE CIS Established event [v2]"
813+
help
814+
Enable this to support LE CIS Established event [v2].
815+
endif
738816
endif
739817

740818
menuconfig BT_NIMBLE_GATT_CACHING
@@ -795,6 +873,12 @@ config BT_NIMBLE_GATT_CACHING_DISABLE_AUTO
795873
help
796874
When client receives ATT out-of-sync error message, it will not automatically start the discovery procedure
797875
to correct the invalid cache.
876+
config BT_NIMBLE_GATT_CACHING_ASSOC_ENABLE
877+
bool "Enable association-based GATT caching"
878+
depends on BT_NIMBLE_GATT_CACHING
879+
default n
880+
help
881+
Enable this option to use associated address caching instead of performing service discovery.
798882

799883
config BT_NIMBLE_WHITELIST_SIZE
800884
int "BLE white list size"

components/bt/host/nimble/port/include/esp_nimble_cfg.h

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,14 @@
196196
#define MYNEWT_VAL_BLE_GATT_CACHING_DISABLE_AUTO (0)
197197
#endif
198198

199+
#ifndef MYNEWT_VAL_BLE_GATT_CACHING_ASSOC_ENABLE
200+
#ifdef CONFIG_BT_NIMBLE_GATT_CACHING_ASSOC_ENABLE
201+
#define MYNEWT_VAL_BLE_GATT_CACHING_ASSOC_ENABLE (CONFIG_BT_NIMBLE_GATT_CACHING_ASSOC_ENABLE)
202+
#else
203+
#define MYNEWT_VAL_BLE_GATT_CACHING_ASSOC_ENABLE (0)
204+
#endif
205+
#endif
206+
199207
#endif
200208

201209
#ifndef MYNEWT_VAL_BLE_GATT_CSFC_SIZE
@@ -2002,6 +2010,94 @@
20022010
#endif
20032011
#endif
20042012

2013+
#ifndef MYNEWT_VAL_BLE_ISO
2014+
#ifdef CONFIG_BT_NIMBLE_ISO
2015+
#define MYNEWT_VAL_BLE_ISO CONFIG_BT_NIMBLE_ISO
2016+
#else
2017+
#define MYNEWT_VAL_BLE_ISO (0)
2018+
#endif
2019+
#endif
2020+
2021+
#ifndef MYNEWT_VAL_BLE_ISO_STD_FLOW_CTRL
2022+
#ifdef CONFIG_BT_NIMBLE_ISO_STD_FLOW_CTRL
2023+
#define MYNEWT_VAL_BLE_ISO_STD_FLOW_CTRL CONFIG_BT_NIMBLE_ISO_STD_FLOW_CTRL
2024+
#else
2025+
#define MYNEWT_VAL_BLE_ISO_STD_FLOW_CTRL (0)
2026+
#endif
2027+
#endif
2028+
2029+
#ifndef MYNEWT_VAL_BLE_ISO_NON_STD_FLOW_CTRL
2030+
#ifdef CONFIG_BT_NIMBLE_ISO_NON_STD_FLOW_CTRL
2031+
#define MYNEWT_VAL_BLE_ISO_NON_STD_FLOW_CTRL CONFIG_BT_NIMBLE_ISO_NON_STD_FLOW_CTRL
2032+
#else
2033+
#define MYNEWT_VAL_BLE_ISO_NON_STD_FLOW_CTRL (0)
2034+
#endif
2035+
#endif
2036+
2037+
#ifndef MYNEWT_VAL_BLE_ISO_TEST
2038+
#ifdef CONFIG_BT_NIMBLE_ISO_TEST
2039+
#define MYNEWT_VAL_BLE_ISO_TEST CONFIG_BT_NIMBLE_ISO_TEST
2040+
#else
2041+
#define MYNEWT_VAL_BLE_ISO_TEST (0)
2042+
#endif
2043+
#endif
2044+
2045+
#ifndef MYNEWT_VAL_BLE_ISO_BIG
2046+
#ifdef CONFIG_BT_NIMBLE_ISO_BIG
2047+
#define MYNEWT_VAL_BLE_ISO_BIG CONFIG_BT_NIMBLE_ISO_BIG
2048+
#else
2049+
#define MYNEWT_VAL_BLE_ISO_BIG (0)
2050+
#endif
2051+
#endif
2052+
2053+
#ifndef MYNEWT_VAL_BLE_ISO_BIS
2054+
#ifdef CONFIG_BT_NIMBLE_ISO_BIS
2055+
#define MYNEWT_VAL_BLE_ISO_BIS CONFIG_BT_NIMBLE_ISO_BIS
2056+
#else
2057+
#define MYNEWT_VAL_BLE_ISO_BIS (0)
2058+
#endif
2059+
#endif
2060+
2061+
#ifndef MYNEWT_VAL_BLE_ISO_BIS_PER_BIG
2062+
#ifdef CONFIG_BT_NIMBLE_ISO_BIS_PER_BIG
2063+
#define MYNEWT_VAL_BLE_ISO_BIS_PER_BIG CONFIG_BT_NIMBLE_ISO_BIS_PER_BIG
2064+
#else
2065+
#define MYNEWT_VAL_BLE_ISO_BIS_PER_BIG (0)
2066+
#endif
2067+
#endif
2068+
2069+
#ifndef MYNEWT_VAL_BLE_ISO_CIG
2070+
#ifdef CONFIG_BT_NIMBLE_ISO_CIG
2071+
#define MYNEWT_VAL_BLE_ISO_CIG CONFIG_BT_NIMBLE_ISO_CIG
2072+
#else
2073+
#define MYNEWT_VAL_BLE_ISO_CIG (0)
2074+
#endif
2075+
#endif
2076+
2077+
#ifndef MYNEWT_VAL_BLE_ISO_CIS
2078+
#ifdef CONFIG_BT_NIMBLE_ISO_CIS
2079+
#define MYNEWT_VAL_BLE_ISO_CIS CONFIG_BT_NIMBLE_ISO_CIS
2080+
#else
2081+
#define MYNEWT_VAL_BLE_ISO_CIS (0)
2082+
#endif
2083+
#endif
2084+
2085+
#ifndef MYNEWT_VAL_BLE_ISO_CIS_PER_CIG
2086+
#ifdef CONFIG_BT_NIMBLE_ISO_CIS_PER_CIG
2087+
#define MYNEWT_VAL_BLE_ISO_CIS_PER_CIG CONFIG_BT_NIMBLE_ISO_CIS_PER_CIG
2088+
#else
2089+
#define MYNEWT_VAL_BLE_ISO_CIS_PER_CIG (0)
2090+
#endif
2091+
#endif
2092+
2093+
#ifndef MYNEWT_VAL_BLE_ISO_CIS_ESTAB_V2
2094+
#ifdef CONFIG_BT_NIMBLE_ISO_CIS_ESTAB_V2
2095+
#define MYNEWT_VAL_BLE_ISO_CIS_ESTAB_V2 CONFIG_BT_NIMBLE_ISO_CIS_ESTAB_V2
2096+
#else
2097+
#define MYNEWT_VAL_BLE_ISO_CIS_ESTAB_V2 (0)
2098+
#endif
2099+
#endif
2100+
20052101
#ifndef MYNEWT_VAL_BLE_GATTC_PROC_PREEMPTION_PROTECT
20062102
#ifdef CONFIG_BT_NIMBLE_GATTC_PROC_PREEMPTION_PROTECT
20072103
#define MYNEWT_VAL_BLE_GATTC_PROC_PREEMPTION_PROTECT CONFIG_BT_NIMBLE_GATTC_PROC_PREEMPTION_PROTECT

examples/bluetooth/nimble/ble_cts/cts_cent/main/main.c

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,13 @@ ble_cts_cent_gap_event(struct ble_gap_event *event, void *arg)
426426
} else {
427427
MODLOG_DFLT(INFO, "Connection secured\n");
428428
}
429+
#else
430+
#if MYNEWT_VAL(BLE_GATT_CACHING_ASSOC_ENABLE)
431+
rc = ble_gattc_cache_assoc(desc.peer_id_addr);
432+
if (rc != 0) {
433+
MODLOG_DFLT(ERROR, "Cache Association Failed; rc=%d\n", rc);
434+
return 0;
435+
}
429436
#else
430437
/* Perform service discovery */
431438
rc = peer_disc_all(event->connect.conn_handle,
@@ -434,6 +441,7 @@ ble_cts_cent_gap_event(struct ble_gap_event *event, void *arg)
434441
MODLOG_DFLT(ERROR, "Failed to discover services; rc=%d\n", rc);
435442
return 0;
436443
}
444+
#endif // BLE_GATT_CACHING_ASSOC_ENABLE
437445
#endif
438446
} else {
439447
/* Connection attempt failed; resume scanning. */
@@ -470,16 +478,41 @@ ble_cts_cent_gap_event(struct ble_gap_event *event, void *arg)
470478
assert(rc == 0);
471479
print_conn_desc(&desc);
472480
#if CONFIG_EXAMPLE_ENCRYPTION
481+
#if MYNEWT_VAL(BLE_GATT_CACHING_ASSOC_ENABLE)
482+
rc = ble_gattc_cache_assoc(desc.peer_id_addr);
483+
if (rc != 0) {
484+
MODLOG_DFLT(ERROR, "Cache Association Failed; rc=%d\n", rc);
485+
return 0;
486+
}
487+
#else
473488
/*** Go for service discovery after encryption has been successfully enabled ***/
474489
rc = peer_disc_all(event->connect.conn_handle,
475490
ble_cts_cent_on_disc_complete, NULL);
476491
if (rc != 0) {
477492
MODLOG_DFLT(ERROR, "Failed to discover services; rc=%d\n", rc);
478493
return 0;
479494
}
495+
#endif // BLE_GATT_CACHING_ASSOC_ENABLE
480496
#endif
481497
return 0;
482498

499+
case BLE_GAP_EVENT_CACHE_ASSOC:
500+
#if MYNEWT_VAL(BLE_GATT_CACHING_ASSOC_ENABLE)
501+
/* Cache association result for this connection */
502+
MODLOG_DFLT(INFO, "cache association; conn_handle=%d status=%d cache_state=%s\n",
503+
event->cache_assoc.conn_handle,
504+
event->cache_assoc.status,
505+
(event->cache_assoc.cache_state == 0) ? "INVALID" : "LOADED");
506+
/* Perform service discovery */
507+
rc = peer_disc_all(event->connect.conn_handle,
508+
blecent_on_disc_complete, NULL);
509+
if(rc != 0) {
510+
MODLOG_DFLT(ERROR, "Failed to discover services; rc=%d\n", rc);
511+
return 0;
512+
}
513+
#endif
514+
return 0;
515+
483516
case BLE_GAP_EVENT_NOTIFY_RX:
484517
/* Peer sent us a notification or indication. */
485518
MODLOG_DFLT(INFO, "received %s; conn_handle=%d attr_handle=%d "

examples/bluetooth/nimble/ble_htp/htp_cent/main/main.c

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,13 @@ ble_htp_cent_gap_event(struct ble_gap_event *event, void *arg)
540540
} else {
541541
MODLOG_DFLT(INFO, "Connection secured\n");
542542
}
543+
#else
544+
#if MYNEWT_VAL(BLE_GATT_CACHING_ASSOC_ENABLE)
545+
rc = ble_gattc_cache_assoc(desc.peer_id_addr);
546+
if (rc != 0) {
547+
MODLOG_DFLT(ERROR, "Cache Association Failed; rc=%d\n", rc);
548+
return 0;
549+
}
543550
#else
544551
/* Perform service discovery */
545552
rc = peer_disc_all(event->connect.conn_handle,
@@ -548,6 +555,7 @@ ble_htp_cent_gap_event(struct ble_gap_event *event, void *arg)
548555
MODLOG_DFLT(ERROR, "Failed to discover services; rc=%d\n", rc);
549556
return 0;
550557
}
558+
#endif // BLE_GATT_CACHING_ASSOC_ENABLE
551559
#endif
552560
} else {
553561
/* Connection attempt failed; resume scanning. */
@@ -584,16 +592,41 @@ ble_htp_cent_gap_event(struct ble_gap_event *event, void *arg)
584592
assert(rc == 0);
585593
print_conn_desc(&desc);
586594
#if CONFIG_EXAMPLE_ENCRYPTION
595+
#if MYNEWT_VAL(BLE_GATT_CACHING_ASSOC_ENABLE)
596+
rc = ble_gattc_cache_assoc(desc.peer_id_addr);
597+
if (rc != 0) {
598+
MODLOG_DFLT(ERROR, "Cache Association Failed; rc=%d\n", rc);
599+
return 0;
600+
}
601+
#else
587602
/*** Go for service discovery after encryption has been successfully enabled ***/
588603
rc = peer_disc_all(event->connect.conn_handle,
589604
ble_htp_cent_on_disc_complete, NULL);
590605
if (rc != 0) {
591606
MODLOG_DFLT(ERROR, "Failed to discover services; rc=%d\n", rc);
592607
return 0;
593608
}
609+
#endif // BLE_GATT_CACHING_ASSOC_ENABLE
594610
#endif
595611
return 0;
596612

613+
case BLE_GAP_EVENT_CACHE_ASSOC:
614+
#if MYNEWT_VAL(BLE_GATT_CACHING_ASSOC_ENABLE)
615+
/* Cache association result for this connection */
616+
MODLOG_DFLT(INFO, "cache association; conn_handle=%d status=%d cache_state=%s\n",
617+
event->cache_assoc.conn_handle,
618+
event->cache_assoc.status,
619+
(event->cache_assoc.cache_state == 0) ? "INVALID" : "LOADED");
620+
/* Perform service discovery */
621+
rc = peer_disc_all(event->connect.conn_handle,
622+
blecent_on_disc_complete, NULL);
623+
if(rc != 0) {
624+
MODLOG_DFLT(ERROR, "Failed to discover services; rc=%d\n", rc);
625+
return 0;
626+
}
627+
#endif
628+
return 0;
629+
597630
case BLE_GAP_EVENT_NOTIFY_RX:
598631
/* Peer sent us a notification or indication. */
599632
MODLOG_DFLT(INFO, "received %s; conn_handle=%d attr_handle=%d "

0 commit comments

Comments
 (0)