87 lines
2.5 KiB
Python
87 lines
2.5 KiB
Python
# SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
"""UART Class for Binho Nova"""
|
|
|
|
from adafruit_blinka.microcontroller.nova import Connection
|
|
|
|
|
|
class UART:
|
|
"""Custom UART Class for Binho Nova"""
|
|
|
|
ESCAPE_SEQUENCE = "+++UART0"
|
|
|
|
# pylint: disable=too-many-arguments,unused-argument
|
|
def __init__(
|
|
self,
|
|
portid,
|
|
baudrate=9600,
|
|
bits=8,
|
|
parity=None,
|
|
stop=1,
|
|
timeout=1000,
|
|
read_buf_len=None,
|
|
flow=None,
|
|
):
|
|
self._nova = Connection.getInstance()
|
|
|
|
self._id = portid
|
|
self._baudrate = baudrate
|
|
self._parity = parity
|
|
self._bits = bits
|
|
self._stop = stop
|
|
self._timeout = timeout
|
|
|
|
if flow is not None: # default 0
|
|
raise NotImplementedError(
|
|
"Parameter '{}' unsupported on Binho Nova".format("flow")
|
|
)
|
|
|
|
self._nova.setOperationMode(self._id, "UART")
|
|
self._nova.setBaudRateUART(self._id, baudrate)
|
|
self._nova.setDataBitsUART(self._id, bits)
|
|
self._nova.setParityUART(self._id, parity)
|
|
self._nova.setStopBitsUART(self._id, stop)
|
|
self._nova.setEscapeSequenceUART(self._id, UART.ESCAPE_SEQUENCE)
|
|
self._nova.beginBridgeUART(self._id)
|
|
|
|
# pylint: enable=too-many-arguments,unused-argument
|
|
def __del__(self):
|
|
"""Close Nova on delete"""
|
|
self.deinit()
|
|
self._nova.close()
|
|
|
|
def deinit(self):
|
|
"""Deinitialize"""
|
|
self._nova.writeBridgeUART(UART.ESCAPE_SEQUENCE)
|
|
self._nova.stopBridgeUART(UART.ESCAPE_SEQUENCE)
|
|
|
|
def read(self, nbytes=None):
|
|
"""Read data from UART and return it"""
|
|
if nbytes is None:
|
|
return None
|
|
data = bytearray()
|
|
for _ in range(nbytes):
|
|
data.append(ord(self._nova.readBridgeUART()))
|
|
return data
|
|
|
|
def readinto(self, buf, nbytes=None):
|
|
"""Read data from UART and into the buffer"""
|
|
if nbytes is None:
|
|
return None
|
|
for _ in range(nbytes):
|
|
buf.append(ord(self._nova.readBridgeUART()))
|
|
return buf
|
|
|
|
def readline(self):
|
|
"""Read a single line of data from UART"""
|
|
out = self._nova.readBridgeUART()
|
|
line = out
|
|
while out != "\r":
|
|
out = self._nova.readBridgeUART()
|
|
line += out
|
|
return line
|
|
|
|
def write(self, buf):
|
|
"""Write data from the buffer to UART"""
|
|
return self._nova.writeBridgeUART(buf)
|