]> Repositories - Adafruit_Blinka-hackapet.git/blobdiff - src/adafruit_blinka/microcontroller/ftdi_mpsse/mpsse/spi.py
Merge branch 'master' of https://github.com/adafruit/Adafruit_Blinka
[Adafruit_Blinka-hackapet.git] / src / adafruit_blinka / microcontroller / ftdi_mpsse / mpsse / spi.py
index 69fe66fcbfbf1b7e085f8f6a5afc1b8b9790094c..0b76c081ebb8d3ce4c99f05a8eed0a10a2e91402 100644 (file)
@@ -1,5 +1,9 @@
 """SPI Class for FTDI MPSSE"""
 from adafruit_blinka.microcontroller.ftdi_mpsse.mpsse.pin import Pin
+from adafruit_blinka.microcontroller.ftdi_mpsse.mpsse.url import (
+    get_ft232h_url,
+    get_ft2232h_url,
+)
 
 # pylint: disable=protected-access
 class SPI:
@@ -7,17 +11,17 @@ class SPI:
 
     MSB = 0
 
-    def __init__(self, id=None):
+    def __init__(self, spi_id=None):
         # pylint: disable=import-outside-toplevel
         from pyftdi.spi import SpiController
 
         # pylint: enable=import-outside-toplevel
 
         self._spi = SpiController(cs_count=1)
-        if id is None:
-            self._spi.configure("ftdi://ftdi:ft232h/1", frequency=frequency)
-        else
-            self._spi.configure("ftdi://ftdi:ft2232h/{}".format(id+1), frequency=frequency)
+        if spi_id is None:
+            self._spi.configure(get_ft232h_url())
+        else:
+            self._spi.configure(get_ft2232h_url(spi_id + 1))
         self._port = self._spi.get_port(0)
         self._port.set_frequency(100000)
         self._port._cpol = 0
@@ -63,13 +67,15 @@ class SPI:
             chunk_end = chunk_start + self._spi.PAYLOAD_MAX_LENGTH
             self._port.write(buf[chunk_start:chunk_end])
         if rest:
-            self._port.write(buf[-1 * rest :])
+            rest_start = start + chunks * self._spi.PAYLOAD_MAX_LENGTH
+            self._port.write(buf[rest_start:end])
 
     # pylint: disable=unused-argument
     def readinto(self, buf, start=0, end=None, write_value=0):
         """Read data from SPI and into the buffer"""
         end = end if end else len(buf)
-        result = self._port.read(end - start)
+        buffer_out = [write_value] * (end - start)
+        result = self._port.exchange(buffer_out, end - start, duplex=True)
         for i, b in enumerate(result):
             buf[start + i] = b