From edfb5d56c8392b1c0933abf49e757b90f2c07859 Mon Sep 17 00:00:00 2001 From: Jim Mussared Date: Wed, 21 Jul 2021 17:04:41 +1000 Subject: [PATCH] extmod/nimble: Allow modbluetooth binding to hook "sent HCI packet". --- extmod/nimble/hal/hal_uart.c | 6 ++++++ extmod/nimble/modbluetooth_nimble.c | 3 +++ extmod/nimble/modbluetooth_nimble.h | 3 +++ 3 files changed, 12 insertions(+) diff --git a/extmod/nimble/hal/hal_uart.c b/extmod/nimble/hal/hal_uart.c index cd5e49e30b..84a964fde9 100644 --- a/extmod/nimble/hal/hal_uart.c +++ b/extmod/nimble/hal/hal_uart.c @@ -27,6 +27,7 @@ #include "py/runtime.h" #include "py/mphal.h" #include "nimble/ble.h" +#include "extmod/nimble/modbluetooth_nimble.h" #include "extmod/nimble/hal/hal_uart.h" #include "extmod/nimble/nimble/nimble_npl_os.h" #include "extmod/mpbthci.h" @@ -74,6 +75,11 @@ void hal_uart_start_tx(uint32_t port) { #endif mp_bluetooth_hci_uart_write(mp_bluetooth_hci_cmd_buf, len); + + if (len > 0) { + // Allow modbluetooth bindings to hook "sent packet" (e.g. to unstall l2cap channels). + mp_bluetooth_nimble_sent_hci_packet(); + } } int hal_uart_close(uint32_t port) { diff --git a/extmod/nimble/modbluetooth_nimble.c b/extmod/nimble/modbluetooth_nimble.c index 8bbec54881..f3679354f4 100644 --- a/extmod/nimble/modbluetooth_nimble.c +++ b/extmod/nimble/modbluetooth_nimble.c @@ -1392,6 +1392,9 @@ int mp_bluetooth_gattc_exchange_mtu(uint16_t conn_handle) { #endif // MICROPY_PY_BLUETOOTH_ENABLE_GATT_CLIENT +void mp_bluetooth_nimble_sent_hci_packet(void) { +} + #if MICROPY_PY_BLUETOOTH_ENABLE_L2CAP_CHANNELS // Fortunately NimBLE uses mbuf chains correctly with L2CAP COC (rather than diff --git a/extmod/nimble/modbluetooth_nimble.h b/extmod/nimble/modbluetooth_nimble.h index 9ed64368b2..15648a9959 100644 --- a/extmod/nimble/modbluetooth_nimble.h +++ b/extmod/nimble/modbluetooth_nimble.h @@ -71,5 +71,8 @@ void mp_bluetooth_nimble_port_start(void); // Tell the port to stop its background task. void mp_bluetooth_nimble_port_shutdown(void); +// --- Called by the HCI UART layer to let us know when packets have been sent. +void mp_bluetooth_nimble_sent_hci_packet(void); + #endif // MICROPY_INCLUDED_EXTMOD_NIMBLE_MODBLUETOOTH_NIMBLE_H