From: Melissa LeBlanc-Williams Date: Mon, 6 Apr 2020 15:41:04 +0000 (-0700) Subject: Merge pull request #268 from makermelissa/master X-Git-Tag: 4.3.0 X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/commitdiff_plain/2bb7cbf33c9970aa242b6446f24c49713bd2c113?hp=770e016ef7fae438ecfb5317bee7b48fcdaed514 Merge pull request #268 from makermelissa/master Updates to Blinka to use the PureIO SPI library --- diff --git a/requirements.txt b/requirements.txt index a2cfda9..a833ed7 100755 --- a/requirements.txt +++ b/requirements.txt @@ -1,9 +1,8 @@ -Adafruit-PlatformDetect -Adafruit-PureIO +Adafruit-PlatformDetect>=2.5.0 +Adafruit-PureIO>=1.1.0 Jetson.GPIO; platform_machine=='aarch64' RPi.GPIO; platform_machine=='armv7l' or platform_machine=='armv6l' rpi_ws281x>=4.0.0; platform_machine=='armv7l' or platform_machine=='armv6l' -spidev>=3.4; sys_platform == 'linux' and platform_machine!='mips' sysv_ipc; sys_platform == 'linux' and platform_machine!='mips' pyftdi>=0.40.0 binho-host-adapter>=0.1.4 diff --git a/setup.py b/setup.py index 073fd18..14e82bd 100755 --- a/setup.py +++ b/setup.py @@ -47,9 +47,8 @@ setup( py_modules=['analogio', 'bitbangio', 'board', 'busio', 'digitalio', 'micropython', 'pulseio', 'neopixel_write'], package_data={'adafruit_blinka.microcontroller.bcm283x.pulseio': ['libgpiod_pulsein']}, install_requires=[ - "Adafruit-PlatformDetect", - "Adafruit-PureIO", - "spidev>=3.4; sys_platform=='linux' and platform_machine!='mips'", + "Adafruit-PlatformDetect>=2.5.0", + "Adafruit-PureIO>=1.1.0", "sysv_ipc; platform_system != 'Windows' and platform_machine != 'mips'", "pyftdi>=0.40.0" ] + board_reqs, diff --git a/src/adafruit_blinka/microcontroller/generic_linux/spi.py b/src/adafruit_blinka/microcontroller/generic_linux/spi.py index f2ffa82..520f491 100755 --- a/src/adafruit_blinka/microcontroller/generic_linux/spi.py +++ b/src/adafruit_blinka/microcontroller/generic_linux/spi.py @@ -1,4 +1,4 @@ -import spidev +import Adafruit_PureIO.spi as spi import time from adafruit_blinka.agnostic import detector @@ -13,8 +13,10 @@ class SPI: bits = 8 def __init__(self, portid): - self._port = portid - self._spi = spidev.SpiDev() + if isinstance(portid, tuple): + self._spi = spi.SPI(device=portid) + else: + self._spi = spi.SPI(device=(portid, 0)) def init(self, baudrate=100000, polarity=0, phase=0, bits=8, firstbit=MSB, sck=None, mosi=None, miso=None): @@ -23,15 +25,16 @@ class SPI: 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 + # Pins are not used + self.clock_pin = sck + self.mosi_pin = mosi + self.miso_pin = miso + def set_no_cs(self): # No kernel seems to support this, so we're just going to pass pass @@ -46,13 +49,13 @@ class SPI: if end is None: end = len(buf) try: - self._spi.open(self._port, 0) + #self._spi.open(self._port, 0) 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.writebytes2(buf[start:end]) - self._spi.close() + 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 @@ -63,15 +66,15 @@ class SPI: if end is None: end = len(buf) try: - self._spi.open(self._port, 0) + #self._spi.open(self._port, 0) 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([write_value]*(end-start)) + data = self._spi.transfer([write_value]*(end-start)) for i in range(end-start): # 'readinto' the given buffer buf[start+i] = data[i] - self._spi.close() + #self._spi.close() except FileNotFoundError as not_found: print("Could not open SPI device - check if SPI is enabled in kernel!") raise @@ -87,15 +90,15 @@ class SPI: if out_end - out_start != in_end - in_start: raise RuntimeError('Buffer slices must be of equal length.') try: - self._spi.open(self._port, 0) + #self._spi.open(self._port, 0) 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])) + data = self._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() + #self._spi.close() except FileNotFoundError as not_found: print("Could not open SPI device - check if SPI is enabled in kernel!") raise