]> Repositories - Adafruit_Blinka-hackapet.git/blobdiff - src/adafruit_blinka/microcontroller/nova/uart.py
Add uart interface
[Adafruit_Blinka-hackapet.git] / src / adafruit_blinka / microcontroller / nova / uart.py
diff --git a/src/adafruit_blinka/microcontroller/nova/uart.py b/src/adafruit_blinka/microcontroller/nova/uart.py
new file mode 100644 (file)
index 0000000..3bb471a
--- /dev/null
@@ -0,0 +1,65 @@
+import time
+
+class UART():
+    ESCAPE_SEQUENCE = "+++UART0"
+    def __init__(self,
+                 portid,
+                 baudrate=9600,
+                 bits=8,
+                 parity=None,
+                 stop=1,
+                 timeout=1000,
+                 read_buf_len=None,
+                 flow=None):
+        from adafruit_blinka.microcontroller.nova import Connection
+        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)
+
+    def deinit(self):
+        self._nova.writeBridgeUART(UART.ESCAPE_SEQUENCE)
+        self._nova.stopBridgeUART(UART.ESCAPE_SEQUENCE)
+
+    def read(self, nbytes=None):
+        if nbytes is None:
+            return None
+        data = bytearray()
+        for i in range(nbytes):
+            data.append(ord(self._nova.readBridgeUART()))
+        return data
+
+    def readinto(self, buf, nbytes=None):
+        if nbytes is None:
+            return None
+        for i in range(nbytes):
+            buf.append(ord(self._nova.readBridgeUART()))
+        return buf
+
+    def readline(self):
+        out = self._nova.readBridgeUART()
+        line = out
+        while out != '\r':
+            out = self._nova.readBridgeUART()
+            line += out
+        return line
+
+    def write(self, buf):
+        return self._nova.writeBridgeUART(buf)
\ No newline at end of file