flash_can: Fix pyserial exception handling

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2022-05-15 18:53:01 -04:00 committed by Eric Callahan
parent 468b756f8d
commit 92e9174cae

View File

@ -499,13 +499,13 @@ class CanSocket:
class SerialSocket: class SerialSocket:
def __init__(self, loop: asyncio.AbstractEventLoop): def __init__(self, loop: asyncio.AbstractEventLoop):
self._loop = loop self._loop = loop
self.serial = None self.serial = self.serial_error = None
self.node = CanNode(0, self) self.node = CanNode(0, self)
def _handle_response(self) -> None: def _handle_response(self) -> None:
try: try:
data = self.serial.read(4096) data = self.serial.read(4096)
except self.serial.SerialException as e: except self.serial_error as e:
logging.exception("Error on serial read") logging.exception("Error on serial read")
self.close() self.close()
self.node.feed_data(data) self.node.feed_data(data)
@ -513,21 +513,22 @@ class SerialSocket:
def send(self, can_id: int, payload: bytes = b"") -> None: def send(self, can_id: int, payload: bytes = b"") -> None:
try: try:
self.serial.write(payload) self.serial.write(payload)
except self.serial.SerialException as e: except self.serial_error as e:
logging.exception("Error on serial read") logging.exception("Error on serial write")
self.close() self.close()
async def run(self, intf: str, baud: int, fw_path: pathlib.Path) -> None: async def run(self, intf: str, baud: int, fw_path: pathlib.Path) -> None:
if not fw_path.is_file(): if not fw_path.is_file():
raise FlashCanError("Invalid firmware path '%s'" % (fw_path)) raise FlashCanError("Invalid firmware path '%s'" % (fw_path))
import serial import serial
self.serial_error = serial.SerialException
try: try:
serial_dev = serial.Serial(baudrate=baud, timeout=0, serial_dev = serial.Serial(baudrate=baud, timeout=0,
exclusive=True) exclusive=True)
serial_dev.port = intf serial_dev.port = intf
serial_dev.open() serial_dev.open()
except (OSError, IOError, serial.SerialException) as e: except (OSError, IOError, self.serial_error) as e:
logging.warn("Unable to open serial port: %s", e) raise FlashCanError("Unable to open serial port: %s" % (e,))
self.serial = serial_dev self.serial = serial_dev
self._loop.add_reader(self.serial.fileno(), self._handle_response) self._loop.add_reader(self.serial.fileno(), self._handle_response)
flasher = CanFlasher(self.node, fw_path) flasher = CanFlasher(self.node, fw_path)