From: Melissa LeBlanc-Williams Date: Thu, 16 Apr 2020 15:37:06 +0000 (-0700) Subject: fix merge conflict in branch X-Git-Tag: 4.5.0~1^2~2 X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/commitdiff_plain/51df1333e19ee8a3ad5832385e215bf4f2ecabcb fix merge conflict in branch --- diff --git a/src/adafruit_blinka/board/onion/__init__.py b/src/adafruit_blinka/board/onion/__init__.py new file mode 100644 index 0000000..ab79770 --- /dev/null +++ b/src/adafruit_blinka/board/onion/__init__.py @@ -0,0 +1 @@ +"""Boards definition from Onion""" diff --git a/src/adafruit_blinka/board/onion/omega2.py b/src/adafruit_blinka/board/onion/omega2.py new file mode 100644 index 0000000..2fccd66 --- /dev/null +++ b/src/adafruit_blinka/board/onion/omega2.py @@ -0,0 +1,34 @@ +"""Pin definitions for the Onion Omega2+ Expansion Dock.""" + +from adafruit_blinka.microcontroller.mips24kec import pin + +D0 = pin.GPIO0 +D1 = pin.GPIO1 +D2 = pin.GPIO2 +D3 = pin.GPIO3 + +D4 = pin.GPIO4 +D5 = pin.GPIO5 +D6 = pin.GPIO6 +D7 = pin.GPIO7 +D8 = pin.GPIO8 +D9 = pin.GPIO9 + +D11 = pin.GPIO11 +D15 = pin.GPIO15 #RGB LED Blue +D16 = pin.GPIO16 #RGB LED Green +D17 = pin.GPIO17 #RGB LED Red +D18 = pin.GPIO18 +D19 = pin.GPIO19 + +SDA = pin.I2C0_SDA +SCL = pin.I2C0_SCL + +SCLK = pin.SPI0_SCLK +MOSI = pin.SPI0_MOSI +MISO = pin.SPI0_MISO +CS = pin.SPI0_CS +SCK = SCLK + +UART_TX = pin.UART1_TX +UART_RX = pin.UART1_RX diff --git a/src/adafruit_blinka/microcontroller/generic_linux/periphery_pin.py b/src/adafruit_blinka/microcontroller/generic_linux/periphery_pin.py new file mode 100644 index 0000000..daa3240 --- /dev/null +++ b/src/adafruit_blinka/microcontroller/generic_linux/periphery_pin.py @@ -0,0 +1,72 @@ +try: + from periphery import GPIO +except ImportError: + raise ImportError("Periphery Python bindings not found, please install and try again! Try running 'pip3 install python-periphery'") + +# Pins dont exist in CPython so...lets make our own! +class Pin: + IN = "in" + OUT = "out" + LOW = 0 + HIGH = 1 + PULL_NONE = 0 + PULL_UP = 1 + PULL_DOWN = 2 + _CONSUMER = 'adafruit_blinka' + + id = None + _value = LOW + _mode = IN + + def __init__(self, pin_id): + self.id = pin_id + if type(pin_id) is tuple: + self._num = int(pin_id[1]) + self._chippath = "/dev/gpiochip{}".format(pin_id[0]) + else: + self._num = int(pin_id) + self._chippath = "/dev/gpiochip0" + self._line = None + + def __repr__(self): + return str(self.id) + + def __eq__(self, other): + return self.id == other + + def init(self, mode=IN, pull=None): + if mode != None: + if mode == self.IN: + self._mode = self.IN + if self._line is not None: + self._line.close() + self._line = GPIO(self._chippath, int(self._num), self.IN) + elif mode == self.OUT: + self._mode = self.OUT + if self._line is not None: + self._line.close() + self._line = GPIO(self._chippath, int(self._num), self.OUT) + else: + raise RuntimeError("Invalid mode for pin: %s" % self.id) + + if pull != None: + if pull == self.PULL_UP: + raise NotImplementedError("Internal pullups not supported in periphery, use physical resistor instead!") + elif pull == self.PULL_DOWN: + raise NotImplementedError("Internal pulldowns not supported in periphery, use physical resistor instead!") + else: + raise RuntimeError("Invalid pull for pin: %s" % self.id) + + def value(self, val=None): + if val != None: + if val == self.LOW: + self._value = val + self._line.write(False) + elif val == self.HIGH: + self._value = val + self._line.write(True) + else: + raise RuntimeError("Invalid value for pin") + else: + return self.HIGH if self._line.read() else self.LOW + diff --git a/src/adafruit_blinka/microcontroller/generic_linux/spi.py b/src/adafruit_blinka/microcontroller/generic_linux/spi.py index 520f491..01b885b 100755 --- a/src/adafruit_blinka/microcontroller/generic_linux/spi.py +++ b/src/adafruit_blinka/microcontroller/generic_linux/spi.py @@ -67,7 +67,7 @@ class SPI: end = len(buf) try: #self._spi.open(self._port, 0) - self.set_no_cs() + #self.set_no_cs() self._spi.max_speed_hz = self.baudrate self._spi.mode = self.mode self._spi.bits_per_word = self.bits @@ -91,7 +91,7 @@ class SPI: raise RuntimeError('Buffer slices must be of equal length.') try: #self._spi.open(self._port, 0) - self.set_no_cs() + #self.set_no_cs() self._spi.max_speed_hz = self.baudrate self._spi.mode = self.mode self._spi.bits_per_word = self.bits diff --git a/src/adafruit_blinka/microcontroller/mips24kec/__init__.py b/src/adafruit_blinka/microcontroller/mips24kec/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/adafruit_blinka/microcontroller/mips24kec/pin.py b/src/adafruit_blinka/microcontroller/mips24kec/pin.py new file mode 100644 index 0000000..980ee7d --- /dev/null +++ b/src/adafruit_blinka/microcontroller/mips24kec/pin.py @@ -0,0 +1,69 @@ +from adafruit_blinka.microcontroller.generic_linux.periphery_pin import Pin + +GPIO0 = Pin(0) +GPIO1 = Pin(1) +GPIO2 = Pin(2) +GPIO3 = Pin(3) +GPIO4 = Pin(4) #I2C SDA +GPIO5 = Pin(5) #I2C SCL +GPIO6 = Pin(6) #SPI CS +GPIO7 = Pin(7) #SPI SCLK +GPIO8 = Pin(8) #SPI MOSI +GPIO9 = Pin(9) #SPI MISO +GPIO10 = Pin(10) + +GPIO11 = Pin(11) +GPIO12 = Pin(12) +GPIO13 = Pin(13) +GPIO14 = Pin(14) +GPIO15 = Pin(15) +GPIO16 = Pin(16) +GPIO17 = Pin(17) + +GPIO18 = Pin(18) +GPIO19 = Pin(19) + +GPIO20 = Pin(20) +GPIO21 = Pin(21) +GPIO22 = Pin(22) +GPIO23 = Pin(23) + +GPIO37 = Pin((1, 5)) +GPIO38 = Pin((1, 6)) +GPIO43 = Pin((1, 11)) +GPIO44 = Pin((1, 12)) +GPIO45 = Pin((1, 13)) +GPIO46 = Pin((1, 14)) + +UART0_TX = GPIO12 +UART0_RX = GPIO13 + +UART1_TX = GPIO45 +UART1_RX = GPIO46 + +UART2_TX = GPIO20 +UART2_RX = GPIO21 + +SPI0_MOSI = GPIO8 +SPI0_MISO = GPIO9 +SPI0_SCLK = GPIO7 +SPI0_CS = GPIO6 + +I2C0_SDA = GPIO4 +I2C0_SCL = GPIO5 + +# ordered as i2cId, sclId, sdaId +i2cPorts = ( + (0, I2C0_SCL, I2C0_SDA), +) + +# ordered as spiId, sckId, mosiId, misoId +spiPorts = ( + ((0, 1), SPI0_SCLK, SPI0_MOSI, SPI0_MISO), +) + +# ordered as uartId, txId, rxId +uartPorts = ( + (0, UART0_TX, UART0_RX), + (1, UART1_TX, UART1_RX), +) diff --git a/src/adafruit_blinka/microcontroller/mips24kec/spi.py b/src/adafruit_blinka/microcontroller/mips24kec/spi.py new file mode 100755 index 0000000..4c802ea --- /dev/null +++ b/src/adafruit_blinka/microcontroller/mips24kec/spi.py @@ -0,0 +1,106 @@ +import spidev +import time +from adafruit_blinka.agnostic import detector + +class SPI: + MSB = 0 + LSB = 1 + CPHA = 1 + CPOL = 2 + + baudrate = 100000 + mode = 0 + bits = 8 + + def __init__(self, portid): + if isinstance(portid, tuple): + self._bus_id = portid[0] + self._device_id = portid[1] + else: + self._bus_id = portid + self._device_id = 0 + self._spi = spidev.SpiDev() + + def init(self, baudrate=100000, polarity=0, phase=0, bits=8, + firstbit=MSB, sck=None, mosi=None, miso=None): + mode = 0 + if polarity: + mode |= self.CPOL + if phase: + mode |= self.CPHA + + self.clock_pin = sck + self.mosi_pin = mosi + self.miso_pin = miso + self.baudrate = baudrate + self.mode = mode + self.bits = bits + self.chip = detector.chip + + def set_no_cs(self): + # No kernel seems to support this, so we're just going to pass + pass + + @property + def frequency(self): + return self.baudrate + + def write(self, buf, start=0, end=None): + if not buf: + return + if end is None: + end = len(buf) + try: + self._spi.open(self._bus_id, self._device_id) + self.set_no_cs() + self._spi.max_speed_hz = self.baudrate + self._spi.mode = self.mode + self._spi.bits_per_word = self.bits + self._spi.writebytes(buf[start:end]) + self._spi.close() + except FileNotFoundError as not_found: + print("Could not open SPI device - check if SPI is enabled in kernel!") + raise + + def readinto(self, buf, start=0, end=None, write_value=0): + if not buf: + return + if end is None: + end = len(buf) + try: + self._spi.open(self._bus_id, self._device_id) + self.set_no_cs() + self._spi.max_speed_hz = self.baudrate + self._spi.mode = self.mode + self._spi.bits_per_word = self.bits + data = self._spi.xfer3([write_value],(end-start)) + for i in range(end-start): # 'readinto' the given buffer + buf[start+i] = data[i] + self._spi.close() + except FileNotFoundError as not_found: + print("Could not open SPI device - check if SPI is enabled in kernel!") + raise + + def write_readinto(self, buffer_out, buffer_in, out_start=0, + out_end=None, in_start=0, in_end=None): + if not buffer_out or not buffer_in: + return + if out_end is None: + out_end = len(buffer_out) + if in_end is None: + in_end = len(buffer_in) + if out_end - out_start != in_end - in_start: + raise RuntimeError('Buffer slices must be of equal length.') + try: + self._spi.open(self._bus_id, self._device_id) + self.set_no_cs() + self._spi.max_speed_hz = self.baudrate + self._spi.mode = self.mode + self._spi.bits_per_word = self.bits + data = self._spi.xfer(list(buffer_out[out_start:out_end+1])) + for i in range((in_end - in_start)): + buffer_in[i+in_start] = data[i] + self._spi.close() + except FileNotFoundError as not_found: + print("Could not open SPI device - check if SPI is enabled in kernel!") + raise diff --git a/src/adafruit_blinka/microcontroller/mips24kec/spi2.py b/src/adafruit_blinka/microcontroller/mips24kec/spi2.py new file mode 100755 index 0000000..1ad3c9b --- /dev/null +++ b/src/adafruit_blinka/microcontroller/mips24kec/spi2.py @@ -0,0 +1,93 @@ +from periphery import SPI +import time +from adafruit_blinka.agnostic import detector + +class SPI: + MSB = 0 + LSB = 1 + CPHA = 1 + CPOL = 2 + + baudrate = 100000 + mode = 0 + bits = 8 + + def __init__(self, portid): + if isinstance(portid, tuple): + self._bus_id = portid[0] + self._device_id = portid[1] + else: + self._bus_id = portid + self._device_id = 0 + + def init(self, baudrate=100000, polarity=0, phase=0, bits=8, + firstbit=MSB, sck=None, mosi=None, miso=None): + mode = 0 + if polarity: + mode |= self.CPOL + if phase: + mode |= self.CPHA + + self.clock_pin = sck + self.mosi_pin = mosi + self.miso_pin = miso + self.baudrate = baudrate + self.mode = mode + self.bits = bits + self.chip = detector.chip + + def set_no_cs(self): + # No kernel seems to support this, so we're just going to pass + pass + + @property + def frequency(self): + return self.baudrate + + def write(self, buf, start=0, end=None): + if not buf: + return + if end is None: + end = len(buf) + try: + self._spi = SPI("/dev/spidev{}.{}".format(self._bus_id, self._device_id), self.mode, self.baudrate, bits_per_word=self.bits) + data_in = spi.transfer(buf[start:end]) + self._spi.close() + except FileNotFoundError as not_found: + print("Could not open SPI device - check if SPI is enabled in kernel!") + raise + + def readinto(self, buf, start=0, end=None, write_value=0): + if not buf: + return + if end is None: + end = len(buf) + try: + self._spi = SPI("/dev/spidev{}.{}".format(self._bus_id, self._device_id), self.mode, self.baudrate, bits_per_word=self.bits) + data = spi.transfer([write_value]*(end-start)) + for i in range(end-start): # 'readinto' the given buffer + buf[start+i] = data[i] + self._spi.close() + except FileNotFoundError as not_found: + print("Could not open SPI device - check if SPI is enabled in kernel!") + raise + + def write_readinto(self, buffer_out, buffer_in, out_start=0, + out_end=None, in_start=0, in_end=None): + if not buffer_out or not buffer_in: + return + if out_end is None: + out_end = len(buffer_out) + if in_end is None: + in_end = len(buffer_in) + if out_end - out_start != in_end - in_start: + raise RuntimeError('Buffer slices must be of equal length.') + try: + self._spi = SPI("/dev/spidev{}.{}".format(self._bus_id, self._device_id), self.mode, self.baudrate, bits_per_word=self.bits) + data = spi.transfer(list(buffer_out[out_start:out_end+1])) + for i in range((in_end - in_start)): + buffer_in[i+in_start] = data[i] + self._spi.close() + except FileNotFoundError as not_found: + print("Could not open SPI device - check if SPI is enabled in kernel!") + raise diff --git a/src/board.py b/src/board.py index ac44458..30b9f0a 100755 --- a/src/board.py +++ b/src/board.py @@ -143,6 +143,9 @@ elif board_id == ap_board.PINE64: elif board_id == ap_board.CLOCKWORK_CPI3: from adafruit_blinka.board.clockworkcpi3 import * +elif board_id == ap_board.ONION_OMEGA2: + from adafruit_blinka.board.onion.omega2 import * + elif "sphinx" in sys.modules: pass diff --git a/src/busio.py b/src/busio.py index 160dd9b..43045d0 100755 --- a/src/busio.py +++ b/src/busio.py @@ -69,7 +69,7 @@ class I2C(Lockable): return self._i2c.scan() def readfrom_into(self, address, buffer, *, start=0, end=None): - if start is not 0 or end is not None: + if start != 0 or end is not None: if end is None: end = len(buffer) buffer = memoryview(buffer)[start:end] @@ -79,7 +79,7 @@ class I2C(Lockable): def writeto(self, address, buffer, *, start=0, end=None, stop=True): if isinstance(buffer, str): buffer = bytes([ord(x) for x in buffer]) - if start is not 0 or end is not None: + if start != 0 or end is not None: if end is None: return self._i2c.writeto(address, memoryview(buffer)[start:], stop=stop) else: @@ -178,6 +178,9 @@ class SPI(Lockable): elif board_id == ap_board.CLOCKWORK_CPI3: from adafruit_blinka.microcontroller.allwinner.a33.pin import Pin from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI + elif board_id == ap_board.ONION_OMEGA2: + from adafruit_blinka.microcontroller.mips24kec.pin import Pin + from adafruit_blinka.microcontroller.mips24kec.spi import SPI as _SPI else: from machine import SPI as _SPI from machine import Pin diff --git a/src/digitalio.py b/src/digitalio.py index 56e005b..3d1fd86 100755 --- a/src/digitalio.py +++ b/src/digitalio.py @@ -41,6 +41,8 @@ elif detector.chip.A64: from adafruit_blinka.microcontroller.allwinner.a64.pin import Pin elif detector.chip.A33: from adafruit_blinka.microcontroller.allwinner.a33.pin import Pin +elif detector.chip.MIPS24KEC: + from adafruit_blinka.microcontroller.mips24kec.pin import Pin elif detector.board.ftdi_ft232h: from adafruit_blinka.microcontroller.ft232h.pin import Pin elif detector.board.binho_nova: @@ -119,7 +121,7 @@ class DigitalInOut(ContextManaged): @property def value(self): - return self._pin.value() is 1 + return self._pin.value() == 1 @value.setter def value(self, val): diff --git a/src/microcontroller/__init__.py b/src/microcontroller/__init__.py index 528ae14..2bec277 100755 --- a/src/microcontroller/__init__.py +++ b/src/microcontroller/__init__.py @@ -62,5 +62,7 @@ elif chip_id == ap_chip.BINHO: from adafruit_blinka.microcontroller.nova import * elif chip_id == ap_chip.MIPS24KC: from adafruit_blinka.microcontroller.atheros.ar9331.pin import * +elif chip_id == ap_chip.MIPS24KEC: + from adafruit_blinka.microcontroller.mips24kec.pin import * else: raise NotImplementedError("Microcontroller not supported:", chip_id) diff --git a/src/microcontroller/pin.py b/src/microcontroller/pin.py index 74149d8..8d0b8b0 100755 --- a/src/microcontroller/pin.py +++ b/src/microcontroller/pin.py @@ -48,5 +48,7 @@ elif chip_id == ap_chip.A33: from adafruit_blinka.microcontroller.allwinner.a33.pin import * elif chip_id == ap_chip.MIPS24KC: from adafruit_blinka.microcontroller.atheros.ar9331.pin import * +elif chip_id == ap_chip.MIPS24KEC: + from adafruit_blinka.microcontroller.mips24kec.pin import * else: raise NotImplementedError("Microcontroller not supported: ", chip_id)