69 lines
1.8 KiB
Python
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))
|