extmod/nimble: Make stm32 and unix NimBLE ports use synchronous events.
This changes stm32 from using PENDSV to run NimBLE to use the MicroPython scheduler instead. This allows Python BLE callbacks to be invoked directly (and therefore synchronously) rather than via the ringbuffer. The NimBLE UART HCI and event processing now happens in a scheduled task every 128ms. When RX IRQ idle events arrive, it will also schedule this task to improve latency. There is a similar change for the unix port where the background thread now queues the scheduled task. Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
This commit is contained in:
committed by
Damien George
parent
81e92d3d6e
commit
61d1e4b01b
@@ -382,6 +382,7 @@ int mp_bluetooth_init(void) {
|
||||
mp_bluetooth_nimble_ble_state = MP_BLUETOOTH_NIMBLE_BLE_STATE_WAITING_FOR_SYNC;
|
||||
|
||||
// Initialise NimBLE memory and data structures.
|
||||
DEBUG_printf("mp_bluetooth_init: nimble_port_init\n");
|
||||
nimble_port_init();
|
||||
|
||||
// Make sure that the HCI UART and event handling task is running.
|
||||
@@ -402,6 +403,8 @@ int mp_bluetooth_init(void) {
|
||||
return MP_ETIMEDOUT;
|
||||
}
|
||||
|
||||
DEBUG_printf("mp_bluetooth_init: starting services\n");
|
||||
|
||||
// By default, just register the default gap/gatt service.
|
||||
ble_svc_gap_init();
|
||||
ble_svc_gatt_init();
|
||||
@@ -417,7 +420,7 @@ int mp_bluetooth_init(void) {
|
||||
}
|
||||
|
||||
void mp_bluetooth_deinit(void) {
|
||||
DEBUG_printf("mp_bluetooth_deinit\n");
|
||||
DEBUG_printf("mp_bluetooth_deinit %d\n", mp_bluetooth_nimble_ble_state);
|
||||
if (mp_bluetooth_nimble_ble_state == MP_BLUETOOTH_NIMBLE_BLE_STATE_OFF) {
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user