From 482dd59b5e98e6904cb0cb47a4ecddbfd9bee6d7 Mon Sep 17 00:00:00 2001 From: Peter Harper <77111776+peterharperuk@users.noreply.github.com> Date: Tue, 19 Nov 2024 20:11:47 +0000 Subject: [PATCH] Abilty to limit iterations in hci processing loop (#1998) Fixes #1455 --- .../pico_cyw43_driver/btstack_hci_transport_cyw43.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/rp2_common/pico_cyw43_driver/btstack_hci_transport_cyw43.c b/src/rp2_common/pico_cyw43_driver/btstack_hci_transport_cyw43.c index c0210b65..ecfcf3db 100644 --- a/src/rp2_common/pico_cyw43_driver/btstack_hci_transport_cyw43.c +++ b/src/rp2_common/pico_cyw43_driver/btstack_hci_transport_cyw43.c @@ -139,6 +139,9 @@ static void hci_transport_cyw43_process(void) { CYW43_THREAD_LOCK_CHECK uint32_t len = 0; bool has_work; +#ifdef PICO_BTSTACK_CYW43_MAX_HCI_PROCESS_LOOP_COUNT + uint32_t loop_count = 0; +#endif do { int err = cyw43_bluetooth_hci_read(hci_packet_with_pre_buffer, sizeof(hci_packet_with_pre_buffer), &len); BT_DEBUG("bt in len=%lu err=%d\n", len, err); @@ -148,6 +151,12 @@ static void hci_transport_cyw43_process(void) { } else { has_work = false; } +// PICO_CONFIG: PICO_BTSTACK_CYW43_MAX_HCI_PROCESS_LOOP_COUNT, limit the max number of iterations of the hci processing loop, type=int, advanced=true, group=pico_btstack +#ifdef PICO_BTSTACK_CYW43_MAX_HCI_PROCESS_LOOP_COUNT + if (++loop_count >= PICO_BTSTACK_CYW43_MAX_HCI_PROCESS_LOOP_COUNT) { + break; + } +#endif } while (has_work); }