← index #6796Issue #6656
Related · medium · value 1.520
QUERY · ISSUE

extmod/bluetooth: handling of disconnect in ble_simple_central.py example is misleading

openby tveopened 2021-01-25updated 2021-01-25

The handling of the disconnect event in ble_simple_central.py is misleading. The condition if conn_handle == self._conn_handle:
(line 108) makes it look as if a different value for conn_handle would mean that there's nothing to do, but this is not the case. In particular, a disconnect can happen during the connection process, at least with nimble on the esp32, in which case self._conn_handle is still None and conn_handle != self._conn_handle but calling self._reset() is necessary.

https://github.com/micropython/micropython/blob/203e1d2a65273db3f6ff063ba1124a89c3482c0f/examples/bluetooth/ble_simple_central.py#L108

CANDIDATE · ISSUE

BLE disable / enable not working properly on unix port

closedby andrewleechopened 2020-11-27updated 2024-09-14
proposed-close

I tried to add a disable/re-enable after disconnect in an example test script

    def _irq(self, event, data):
        ...
        elif event == _IRQ_CENTRAL_DISCONNECT:
            conn_handle, _, _ = data
            micropython.schedule(self.on_disconnect, None)

    def on_disconnect(self, *_):
        self._ble.active(False)
        time.sleep(1)
        self._ble.active(True)
        time.sleep(1)
        self._advertise()

This failed on the self._ble.active(True) line with a OSError: [Errno 110] ETIMEDOUT

I'll investigate this later once other BLE issues are out of the way

Keyboard

j / / n
next pair
k / / p
previous pair
1 / / h
show query pane
2 / / l
show candidate pane
c
copy suggested comment
r
toggle reasoning
g i
go to index
?
show this help
esc
close overlays

press ? or esc to close

copied