eeprom-programmer/client/helpers/EepromProgrammer.py

69 lines
1.8 KiB
Python

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))