diff options
author | Jim Mussared <jim.mussared@gmail.com> | 2020-08-18 11:05:34 +1000 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2020-09-08 12:53:24 +1000 |
commit | 99a29ec705b463290d5a2ac1eabc46fb7f2a83b0 (patch) | |
tree | 13918c236f68fea9de4425169877a9b932c4c4e2 /extmod/btstack/modbluetooth_btstack.c | |
parent | 6077c63a450d7c2ab5e31e5845ecb5f1a4634b26 (diff) | |
download | micropython-99a29ec705b463290d5a2ac1eabc46fb7f2a83b0.tar.gz micropython-99a29ec705b463290d5a2ac1eabc46fb7f2a83b0.zip |
extmod/btstack: Detect HCI UART init failure.
Diffstat (limited to 'extmod/btstack/modbluetooth_btstack.c')
-rw-r--r-- | extmod/btstack/modbluetooth_btstack.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/extmod/btstack/modbluetooth_btstack.c b/extmod/btstack/modbluetooth_btstack.c index 2e1bd47cfa..cde802a61f 100644 --- a/extmod/btstack/modbluetooth_btstack.c +++ b/extmod/btstack/modbluetooth_btstack.c @@ -317,6 +317,9 @@ STATIC void btstack_packet_handler(uint8_t packet_type, uint8_t *packet, uint8_t // Signal that de-initialisation has completed. mp_bluetooth_btstack_state = MP_BLUETOOTH_BTSTACK_STATE_OFF; } + } else if (event_type == BTSTACK_EVENT_POWERON_FAILED) { + // Signal that initialisation has failed. + mp_bluetooth_btstack_state = MP_BLUETOOTH_BTSTACK_STATE_OFF; } else if (event_type == HCI_EVENT_TRANSPORT_PACKET_SENT) { DEBUG_printf(" --> hci transport packet sent\n"); } else if (event_type == HCI_EVENT_COMMAND_COMPLETE) { @@ -644,6 +647,8 @@ int mp_bluetooth_init(void) { if (mp_bluetooth_btstack_state != MP_BLUETOOTH_BTSTACK_STATE_ACTIVE) { DEBUG_printf("mp_bluetooth_init: stack startup timed out\n"); + bool timeout = mp_bluetooth_btstack_state == MP_BLUETOOTH_BTSTACK_STATE_TIMEOUT; + // Required to stop the polling loop. mp_bluetooth_btstack_state = MP_BLUETOOTH_BTSTACK_STATE_OFF; // Attempt a shutdown (may not do anything). @@ -652,7 +657,7 @@ int mp_bluetooth_init(void) { // Clean up. MP_STATE_PORT(bluetooth_btstack_root_pointers) = NULL; - return MP_ETIMEDOUT; + return timeout ? MP_ETIMEDOUT : MP_EINVAL; } DEBUG_printf("mp_bluetooth_init: stack startup complete\n"); |