From 43e2cfc724577732b954ea1825355124c86ba484 Mon Sep 17 00:00:00 2001 From: Alex Wolden Date: Tue, 5 Aug 2025 23:05:19 -0700 Subject: [PATCH] timing and test fixes --- examples/ble_t1000_custom_vars.py | 2 +- src/meshcore/ble_cx.py | 3 ++- src/meshcore/events.py | 2 +- src/meshcore/serial_cx.py | 5 ----- tests/test_ble_connection.py | 1 + 5 files changed, 5 insertions(+), 8 deletions(-) diff --git a/examples/ble_t1000_custom_vars.py b/examples/ble_t1000_custom_vars.py index e1aa45d..db0a153 100755 --- a/examples/ble_t1000_custom_vars.py +++ b/examples/ble_t1000_custom_vars.py @@ -4,7 +4,7 @@ import asyncio from meshcore import MeshCore from meshcore import BLEConnection -ADDRESS = "Meshcore-lora-py-tester" # node ble adress or name +ADDRESS = "T1000_S" # node ble adress or name async def main () : con = BLEConnection(ADDRESS) diff --git a/src/meshcore/ble_cx.py b/src/meshcore/ble_cx.py index 517ef1b..d0aa14d 100644 --- a/src/meshcore/ble_cx.py +++ b/src/meshcore/ble_cx.py @@ -49,7 +49,8 @@ class BLEConnection: if self.client: logger.debug("Using pre-configured BleakClient.") # If a client is already provided, ensure its disconnect callback is set - self.client._disconnected_callback = self.handle_disconnect + assert isinstance(self.client, BleakClient) + self.client.set_disconnected_callback(self.handle_disconnect) self.address = self.client.address else: diff --git a/src/meshcore/events.py b/src/meshcore/events.py index 94a6643..001992d 100644 --- a/src/meshcore/events.py +++ b/src/meshcore/events.py @@ -145,7 +145,7 @@ class EventDispatcher: for key, value in subscription.attribute_filters.items()): continue - # Fire and forget - don't await! + # Fire the call back asychronously asyncio.create_task(self._execute_callback(subscription.callback, event.clone())) self.queue.task_done() diff --git a/src/meshcore/serial_cx.py b/src/meshcore/serial_cx.py index 002f703..45c0034 100644 --- a/src/meshcore/serial_cx.py +++ b/src/meshcore/serial_cx.py @@ -31,7 +31,6 @@ class SerialConnection: logger.debug('port opened') if isinstance(transport, serial_asyncio.SerialTransport) and transport.serial: transport.serial.rts = False # You can manipulate Serial object via transport - # Signal that connection is established self.cx._connected_event.set() def data_received(self, data): @@ -39,7 +38,6 @@ class SerialConnection: def connection_lost(self, exc): logger.debug('Serial port closed') - # Clear the connected event self.cx._connected_event.clear() if self.cx._disconnect_callback: asyncio.create_task(self.cx._disconnect_callback("serial_disconnect")) @@ -54,7 +52,6 @@ class SerialConnection: """ Connects to the device """ - # Clear any previous connection state self._connected_event.clear() loop = asyncio.get_running_loop() @@ -62,7 +59,6 @@ class SerialConnection: loop, lambda: self.MCSerialClientProtocol(self), self.port, baudrate=self.baudrate) - # Wait for the actual connection to be established await self._connected_event.wait() logger.info("Serial Connection started") return self.port @@ -108,7 +104,6 @@ class SerialConnection: if self.transport: self.transport.close() self.transport = None - # Clear the connected event self._connected_event.clear() logger.debug("Serial Connection closed") diff --git a/tests/test_ble_connection.py b/tests/test_ble_connection.py index dc2a649..d15e9f7 100644 --- a/tests/test_ble_connection.py +++ b/tests/test_ble_connection.py @@ -44,6 +44,7 @@ class TestBLEConnection(unittest.TestCase): asyncio.run(ble_conn.send(data_to_send)) # Assert + assert(isinstance(ble_conn.rx_char, MagicMock)) ble_conn.rx_char.write_gatt_char.assert_called_once_with(ble_conn.rx_char, data_to_send, response=True) def _get_mock_bleak_client(self):