"""MAPID utility library. This module contains an utility class to control MAPID/CP using pyserial. """ import os import time import dotenv # import serial DOTENV_LOADED = False """bool: Is .env loaded? Prevents loading .env multiple times for speed. """ def load_dotenv(): """Load .env file """ basedir = os.path.abspath(os.path.dirname(__file__)) dotenv.load_dotenv(os.path.join(basedir, ".env")) global DOTENV_LOADED DOTENV_LOADED = True def get_serial_dev(): """Get SERIAL_DEV setting from dotenv. Returns: str: The device file. """ global DOTENV_LOADED if not DOTENV_LOADED: load_dotenv() return os.environ.get("SERIAL_DEV") def get_serial_speed(): """Get SERIAL_SPEED setting from dotenv. Returns: int: Serial speed in baud. """ global DOTENV_LOADED if not DOTENV_LOADED: load_dotenv() return os.environ.get("SERIAL_SPEED") class MAPIDCP: arduino = None def __init__(self): self.arduino = serial.Serial(port=get_serial_dev(), baudrate=get_serial_speed(), timeout=.1) def _cmd(self, cmd: str): self.arduino.write(bytes(cmd + "\r\n", "utf8")) time.sleep(0.1) def cls(self): self._cmd("CLS") def led(self, state: bool): if state: self._cmd("ON") else: self._cmd("OFF") def line(self, line_no: int): self._cmd("LINE " + str(line_no)) def echo(self, text: str): self._cmd("ECHO " + text)