from serial import Serial from typing import Optional, Union from . import Logger class EepromProgrammer: # Dependencies logger: Logger serial: Optional[Serial] # Settings _device_file: str _baudrate: int def __init__(self, logger: Logger, device: str, baudrate): self.logger = logger self.serial = None self._device_file = device self._baudrate = baudrate def open(self) -> None: """ Open and setup serial port. """ assert self.serial is None, 'Serial port is already opened!' self.logger.debug("Opening serial device '{}' with {} bauds".format(self._device_file, self._baudrate)) self.serial = Serial(self._device_file, self._baudrate) def close(self) -> None: """ Closes the serial port. """ if self.serial is not None: self.logger.debug("Closing serial port") self.serial.close() def write(self, data: Union[bytes, bytearray]) -> int: """ Writes bytes to the serial port and writes debug log. """ self.logger.debug('Writing: {}'.format(str(data))) return self.serial.write(data) # TODO def test_command(self) -> None: # Open serial port if self.serial is None: self.open() # TODO where to do this? in open() or when needed? self.serial.timeout = 1 # Write a test command self.logger.info("Sending INIT command ...") self.write(b'INIT BINARY\n') # Just read some stuff self.logger.info("Received line: ", self.serial.readline(80)) # Send a READ command self.logger.info("Sending READ command ...") self.write(b'READ 0000:0010\n') while True: self.logger.info("Received line: ", self.serial.readline(80))