1 from periphery import SPI
3 from adafruit_blinka.agnostic import detector
15 def __init__(self, portid):
16 if isinstance(portid, tuple):
17 self._bus_id = portid[0]
18 self._device_id = portid[1]
23 def init(self, baudrate=100000, polarity=0, phase=0, bits=8,
24 firstbit=MSB, sck=None, mosi=None, miso=None):
34 self.baudrate = baudrate
37 self.chip = detector.chip
40 # No kernel seems to support this, so we're just going to pass
47 def write(self, buf, start=0, end=None):
53 self._spi = SPI("/dev/spidev{}.{}".format(self._bus_id, self._device_id), self.mode, self.baudrate, bits_per_word=self.bits)
54 data_in = spi.transfer(buf[start:end])
56 except FileNotFoundError as not_found:
57 print("Could not open SPI device - check if SPI is enabled in kernel!")
60 def readinto(self, buf, start=0, end=None, write_value=0):
66 self._spi = SPI("/dev/spidev{}.{}".format(self._bus_id, self._device_id), self.mode, self.baudrate, bits_per_word=self.bits)
67 data = spi.transfer([write_value]*(end-start))
68 for i in range(end-start): # 'readinto' the given buffer
69 buf[start+i] = data[i]
71 except FileNotFoundError as not_found:
72 print("Could not open SPI device - check if SPI is enabled in kernel!")
75 def write_readinto(self, buffer_out, buffer_in, out_start=0,
76 out_end=None, in_start=0, in_end=None):
77 if not buffer_out or not buffer_in:
80 out_end = len(buffer_out)
82 in_end = len(buffer_in)
83 if out_end - out_start != in_end - in_start:
84 raise RuntimeError('Buffer slices must be of equal length.')
86 self._spi = SPI("/dev/spidev{}.{}".format(self._bus_id, self._device_id), self.mode, self.baudrate, bits_per_word=self.bits)
87 data = spi.transfer(list(buffer_out[out_start:out_end+1]))
88 for i in range((in_end - in_start)):
89 buffer_in[i+in_start] = data[i]
91 except FileNotFoundError as not_found:
92 print("Could not open SPI device - check if SPI is enabled in kernel!")