From 663152fdbb3180a500baa5cd9be8352ab1e7e60b Mon Sep 17 00:00:00 2001 From: Glen Robertson Date: Mon, 2 Jan 2023 15:21:45 -0500 Subject: [PATCH 1/3] Avoid AttributeError when calling start_wifi() after stop_bluetooth() `stop_bluetooth()` sets _uart to None, so when calling `start_wifi()`, the call to reset that tries to read self._uart raises a Value Error. Check that _uart is not None --- adafruit_airlift/esp32.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/adafruit_airlift/esp32.py b/adafruit_airlift/esp32.py index 50ccea4..1db37bf 100644 --- a/adafruit_airlift/esp32.py +++ b/adafruit_airlift/esp32.py @@ -136,10 +136,11 @@ def reset(self, mode: int, debug: bool = False) -> None: return startup_message = b"" - while self._uart.in_waiting: # pylint: disable=no-member - more = self._uart.read() - if more: - startup_message += more + if self._uart is not None: + while self._uart.in_waiting: # pylint: disable=no-member + more = self._uart.read() + if more: + startup_message += more if not startup_message: raise RuntimeError("ESP32 did not respond with a startup message") From 912f82f6047554f5c8d18e177cdd2fe1e35d052e Mon Sep 17 00:00:00 2001 From: Glen Robertson Date: Mon, 30 Jan 2023 16:25:45 -0500 Subject: [PATCH 2/3] Allow reuse of _bleio.Adapter --- adafruit_airlift/esp32.py | 40 ++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/adafruit_airlift/esp32.py b/adafruit_airlift/esp32.py index 1db37bf..a2fac4e 100644 --- a/adafruit_airlift/esp32.py +++ b/adafruit_airlift/esp32.py @@ -142,14 +142,15 @@ def reset(self, mode: int, debug: bool = False) -> None: if more: startup_message += more - if not startup_message: + if startup_message: + if debug: + try: + print(startup_message.decode("utf-8")) + except UnicodeError: + raise RuntimeError("Garbled ESP32 startup message") from UnicodeError + else: raise RuntimeError("ESP32 did not respond with a startup message") - if debug: - try: - print(startup_message.decode("utf-8")) - except UnicodeError: - raise RuntimeError("Garbled ESP32 startup message") from UnicodeError - + # Everything's fine. Remember mode. self._mode = mode @@ -175,13 +176,14 @@ def start_bluetooth(self, debug: bool = False) -> Adapter: # Choose Bluetooth mode. self._chip_select.switch_to_output(False) - self._uart = busio.UART( - self._tx or board.ESP_TX, - self._rx or board.ESP_RX, - baudrate=115200, - timeout=0, - receiver_buffer_size=512, - ) + if self._uart is None: + self._uart = busio.UART( + self._tx or board.ESP_TX, + self._rx or board.ESP_RX, + baudrate=115200, + timeout=0, + receiver_buffer_size=512, + ) # Reset into Bluetooth mode. self.reset(ESP32.BLUETOOTH, debug=debug) @@ -190,9 +192,11 @@ def start_bluetooth(self, debug: bool = False) -> Adapter: self._gpio0_rts.switch_to_output() # pylint: disable=no-member # pylint: disable=unexpected-keyword-arg - self._bleio_adapter = _bleio.Adapter( - uart=self._uart, rts=self._gpio0_rts, cts=self._busy_cts - ) + if self._bleio_adapter is None: + self._bleio_adapter = _bleio.Adapter( + uart=self._uart, rts=self._gpio0_rts, cts=self._busy_cts + ) + self._bleio_adapter.enabled = True return self._bleio_adapter @@ -202,8 +206,6 @@ def stop_bluetooth(self): return self._bleio_adapter.enabled = False self.reset(ESP32.NOT_IN_USE) - self._uart.deinit() - self._uart = None def start_wifi(self, debug: bool = False) -> SPI: """Start WiFi on the ESP32. From 09dcef95b9f4cfe36a61fd40029f76cfda1999df Mon Sep 17 00:00:00 2001 From: foamyguy Date: Mon, 27 Feb 2023 09:46:11 -0600 Subject: [PATCH 3/3] code format --- adafruit_airlift/esp32.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/adafruit_airlift/esp32.py b/adafruit_airlift/esp32.py index a2fac4e..0cf4ea3 100644 --- a/adafruit_airlift/esp32.py +++ b/adafruit_airlift/esp32.py @@ -147,10 +147,12 @@ def reset(self, mode: int, debug: bool = False) -> None: try: print(startup_message.decode("utf-8")) except UnicodeError: - raise RuntimeError("Garbled ESP32 startup message") from UnicodeError + raise RuntimeError( + "Garbled ESP32 startup message" + ) from UnicodeError else: raise RuntimeError("ESP32 did not respond with a startup message") - + # Everything's fine. Remember mode. self._mode = mode