Mercurial > code > home > repos > doorbell
changeset 7:25f0c04e1654
has_response in _send_command
author | drewp@bigasterisk.com |
---|---|
date | Sun, 05 Feb 2023 14:30:44 -0800 |
parents | ca63391a2214 |
children | 5441581186f8 |
files | telemetrix_local.py |
diffstat | 1 files changed, 13 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/telemetrix_local.py Sun Feb 05 14:28:57 2023 -0800 +++ b/telemetrix_local.py Sun Feb 05 14:30:44 2023 -0800 @@ -15,6 +15,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA """ +from typing import Optional import asyncio # import socket # import struct @@ -2153,23 +2154,8 @@ :returns: This method never returns """ while True: - if self.shutdown_flag: - break - try: - if not self.ip_address: - packet_length = await self.serial_port.read() - else: - - packet_length = ord(await self.sock.read()) - - except TypeError: - continue - - # get the rest of the packet - if not self.ip_address: - packet = await self.serial_port.read(packet_length) - else: - packet = list(await self.sock.read(packet_length)) + log.debug('dispatch loop: waiting for serial') + packet = await self._send_command([], has_response=True) report = packet[0] await self.report_dispatch[report](packet[1:]) @@ -2488,7 +2474,7 @@ async def _features_report(self, report): self.reported_features = report[0] - async def _send_command(self, command): + async def _send_command(self, command, has_response=False): """ This is a private utility method. @@ -2510,6 +2496,14 @@ else: await self.sock.write(send_message) # await asyncio.sleep(.1) + + if not has_response: + return None else: - await self.sock.write(send_message) # await asyncio.sleep(.1) + header = await self.serial_port.read(1) + packet_length = header[0] + pkt = await self.serial_port.read(packet_length) + log.debug(f'got response {list(pkt)}') + + return pkt