* Author(s): cefn
"""
+import threading
+
from adafruit_blinka import Enum, Lockable, agnostic
from adafruit_blinka.agnostic import board_id, detector
import adafruit_platformdetect.board as ap_board
def init(self, scl, sda, frequency):
self.deinit()
- if detector.board.any_embedded_linux:
+ if detector.board.ftdi_ft232h:
+ from adafruit_blinka.microcontroller.ft232h.i2c import I2C
+ self._i2c = I2C()
+ return
+ elif detector.board.any_embedded_linux:
from adafruit_blinka.microcontroller.generic_linux.i2c import I2C as _I2C
else:
from machine import I2C as _I2C
self._i2c = _I2C(portId, mode=_I2C.MASTER, baudrate=frequency)
break
else:
- raise NotImplementedError(
- "No Hardware I2C on (scl,sda)={}\nValid UART ports: {}".format((scl, sda), i2cPorts)
+ raise ValueError(
+ "No Hardware I2C on (scl,sda)={}\nValid I2C ports: {}".format((scl, sda), i2cPorts)
)
+ self._lock = threading.RLock()
+
def deinit(self):
try:
del self._i2c
pass
def __enter__(self):
+ self._lock.acquire()
return self
def __exit__(self, exc_type, exc_value, traceback):
+ self._lock.release()
self.deinit()
def scan(self):
class SPI(Lockable):
def __init__(self, clock, MOSI=None, MISO=None):
self.deinit()
- if detector.board.any_embedded_linux:
+ if detector.board.ftdi_ft232h:
+ from adafruit_blinka.microcontroller.ft232h.spi import SPI as _SPI
+ from adafruit_blinka.microcontroller.ft232h.pin import SCK, MOSI, MISO
+ self._spi = _SPI()
+ self._pins = (SCK, MOSI, MISO)
+ return
+ elif detector.board.any_embedded_linux:
from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
else:
from machine import SPI as _SPI
self._pins = (portSck, portMosi, portMiso)
break
else:
- raise NotImplementedError(
+ raise ValueError(
"No Hardware SPI on (SCLK, MOSI, MISO)={}\nValid SPI ports:{}".
format((clock, MOSI, MISO), spiPorts))
def configure(self, baudrate=100000, polarity=0, phase=0, bits=8):
- if detector.board.any_raspberry_pi:
+ if detector.board.any_raspberry_pi or detector.board.any_raspberry_pi_40_pin:
from adafruit_blinka.microcontroller.bcm283x.pin import Pin
from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
- elif board_id == ap_board.BEAGLEBONE_BLACK:
+ elif detector.board.any_beaglebone:
from adafruit_blinka.microcontroller.am335x.pin import Pin
from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
- elif board_id == ap_board.ORANGE_PI_PC:
+ elif board_id == ap_board.ORANGE_PI_PC or board_id == ap_board.ORANGE_PI_R1 or board_id == ap_board.ORANGE_PI_ZERO:
from adafruit_blinka.microcontroller.allwinner_h3.pin import Pin
from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
elif board_id == ap_board.GIANT_BOARD:
from adafruit_blinka.microcontroller.sama5.pin import Pin
from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
+ elif board_id == ap_board.CORAL_EDGE_TPU_DEV:
+ from adafruit_blinka.microcontroller.nxp_imx8m.pin import Pin
+ from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
+ elif board_id == ap_board.ODROID_C2:
+ from adafruit_blinka.microcontroller.amlogic.s905.pin import Pin
+ from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
+ elif board_id == ap_board.DRAGONBOARD_410C:
+ from adafruit_blinka.microcontroller.snapdragon.apq8016.pin import Pin
+ from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
+ elif board_id == ap_board.JETSON_NANO:
+ from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
+ from adafruit_blinka.microcontroller.tegra.t210.pin import Pin
+ elif board_id == ap_board.JETSON_TX1:
+ from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
+ from adafruit_blinka.microcontroller.tegra.t210.pin import Pin
+ elif board_id == ap_board.JETSON_TX2:
+ from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
+ from adafruit_blinka.microcontroller.tegra.t186.pin import Pin
+ elif board_id == ap_board.JETSON_XAVIER:
+ from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
+ from adafruit_blinka.microcontroller.tegra.t194.pin import Pin
+ elif detector.board.ftdi_ft232h:
+ from adafruit_blinka.microcontroller.ft232h.spi import SPI as _SPI
+ from adafruit_blinka.microcontroller.ft232h.pin import Pin
else:
from machine import SPI as _SPI
from machine import Pin
self._spi = None
self._pinIds = None
+ @property
+ def frequency(self):
+ try:
+ return self._spi.frequency
+ except AttributeError:
+ raise NotImplementedError("Frequency attribute not implemented for this platform")
+
def write(self, buf, start=0, end=None):
return self._spi.write(buf, start, end)
)
break
else:
- raise NotImplementedError(
+ raise ValueError(
"No Hardware UART on (tx,rx)={}\nValid UART ports: {}".format((tx, rx), uartPorts)
)