From 43226b84d1dc9e333b8b3a3c0a69d74612f936ff Mon Sep 17 00:00:00 2001 From: Rahul Tank Date: Mon, 2 Sep 2024 17:42:39 +0530 Subject: [PATCH] fix(nimble): De-register host cb in stack deinit --- nimble/transport/esp_ipc/src/hci_esp_ipc.c | 13 +++++++++++++ .../esp_ipc_legacy/src/hci_esp_ipc_legacy.c | 6 ++++++ nimble/transport/include/nimble/transport_impl.h | 2 ++ porting/nimble/src/nimble_port.c | 2 ++ 4 files changed, 23 insertions(+) diff --git a/nimble/transport/esp_ipc/src/hci_esp_ipc.c b/nimble/transport/esp_ipc/src/hci_esp_ipc.c index 33f0494c6..22f589a2d 100644 --- a/nimble/transport/esp_ipc/src/hci_esp_ipc.c +++ b/nimble/transport/esp_ipc/src/hci_esp_ipc.c @@ -14,6 +14,13 @@ #include "esp_hci_transport.h" #include "esp_hci_internal.h" +static int +ble_transport_dummy_host_recv_cb(hci_trans_pkt_ind_t type, uint8_t *data, uint16_t len) +{ + /* Dummy function */ + return 0; +} + static int ble_transport_host_recv_cb(hci_trans_pkt_ind_t type, uint8_t *data, uint16_t len) { @@ -45,6 +52,12 @@ ble_transport_ll_init(void) hci_transport_host_callback_register(ble_transport_host_recv_cb); } +void +ble_transport_ll_deinit(void) +{ + hci_transport_host_callback_register(ble_transport_dummy_host_recv_cb); +} + void * ble_transport_alloc_cmd(void) { diff --git a/nimble/transport/esp_ipc_legacy/src/hci_esp_ipc_legacy.c b/nimble/transport/esp_ipc_legacy/src/hci_esp_ipc_legacy.c index ee18e9f8d..323f4d755 100644 --- a/nimble/transport/esp_ipc_legacy/src/hci_esp_ipc_legacy.c +++ b/nimble/transport/esp_ipc_legacy/src/hci_esp_ipc_legacy.c @@ -31,3 +31,9 @@ ble_transport_ll_init(void) } +void +ble_transport_ll_deinit(void) +{ + +} + diff --git a/nimble/transport/include/nimble/transport_impl.h b/nimble/transport/include/nimble/transport_impl.h index 4a316c218..2a7deb4c4 100644 --- a/nimble/transport/include/nimble/transport_impl.h +++ b/nimble/transport/include/nimble/transport_impl.h @@ -31,6 +31,8 @@ extern "C" { extern void ble_transport_ll_init(void); extern void ble_transport_hs_init(void); +extern void ble_transport_ll_deinit(void); + /* APIs to be implemented by HS/LL side of transports */ extern int ble_transport_to_ll_cmd_impl(void *buf); extern int ble_transport_to_ll_acl_impl(struct os_mbuf *om); diff --git a/porting/nimble/src/nimble_port.c b/porting/nimble/src/nimble_port.c index ae08514fd..b565443f2 100644 --- a/porting/nimble/src/nimble_port.c +++ b/porting/nimble/src/nimble_port.c @@ -156,6 +156,8 @@ esp_err_t esp_nimble_deinit(void) #if !SOC_ESP_NIMBLE_CONTROLLER || !CONFIG_BT_CONTROLLER_ENABLED npl_freertos_funcs_deinit(); #endif + + ble_transport_ll_deinit(); return ESP_OK; }