]> Repositories - Adafruit_Blinka-hackapet.git/commitdiff
Add uart interface
authorFrancis Guevarra <francis@binho.io>
Sat, 23 Nov 2019 22:38:30 +0000 (14:38 -0800)
committerFrancis Guevarra <francis@binho.io>
Sat, 23 Nov 2019 22:38:30 +0000 (14:38 -0800)
src/adafruit_blinka/board/binho_nova.py
src/adafruit_blinka/microcontroller/nova/pin.py
src/adafruit_blinka/microcontroller/nova/uart.py [new file with mode: 0644]
src/busio.py

index 430abb39e2207a384b32218fecb7c30af9ab012e..35dc3a0546e6990075b4d3d00520fc7cfe76e13a 100644 (file)
@@ -5,3 +5,6 @@ IO1 = pin.IO1
 IO2 = pin.IO2
 IO3 = pin.IO3
 IO4 = pin.IO4
 IO2 = pin.IO2
 IO3 = pin.IO3
 IO4 = pin.IO4
+
+TX = IO4
+RX = IO3
\ No newline at end of file
index 5a58372150b7929f1fca72f602f3b5202f9a7767..04879e9d0233cec0df944e10d5d1f9fddbdffbcf 100644 (file)
@@ -54,4 +54,11 @@ PWM2 = IO2
 PWM3 = IO3
 PWM4 = IO4
 
 PWM3 = IO3
 PWM4 = IO4
 
-pwmOuts = ( ((1, 0), PWM0), ((1, 2), PWM2), ((1, 3), PWM3), ((1, 4), PWM4) )
\ No newline at end of file
+# orderd as (channel, pin), id
+pwmOuts = ( ((1, 0), PWM0), ((1, 2), PWM2), ((1, 3), PWM3), ((1, 4), PWM4) )
+
+UART1_TX = IO4
+UART1_RX = IO3
+
+# ordered as uartId, txId, rxId
+uartPorts = ( (0, UART1_TX, UART1_RX), )
\ No newline at end of file
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
index 17a7fc9998e7c306430c9bcb487b752e23f8a928..230db56f343a6341d92f0785be44ac6f9cfb9dc9 100755 (executable)
@@ -208,9 +208,15 @@ class UART(Lockable):
                  flow=None):
         if detector.board.any_embedded_linux:
             raise RuntimeError('busio.UART not supported on this platform. Please use pyserial instead.')
                  flow=None):
         if detector.board.any_embedded_linux:
             raise RuntimeError('busio.UART not supported on this platform. Please use pyserial instead.')
+        elif detector.board.binho_nova:
+            from adafruit_blinka.microcontroller.nova.uart import UART as _UART
         else:
             from machine import UART as _UART
         else:
             from machine import UART as _UART
-        from microcontroller.pin import uartPorts
+
+        if detector.board.binho_nova:
+            from adafruit_blinka.microcontroller.nova.pin import uartPorts
+        else:
+            from microcontroller.pin import uartPorts
 
         self.baudrate = baudrate
 
 
         self.baudrate = baudrate
 
@@ -248,6 +254,8 @@ class UART(Lockable):
             )
 
     def deinit(self):
             )
 
     def deinit(self):
+        if detector.board.binho_nova:
+            self._uart.deinit()
         self._uart = None
 
     def read(self, nbytes=None):
         self._uart = None
 
     def read(self, nbytes=None):