X-Git-Url: https://git.ayoreis.com/hackapet/Adafruit_Blinka.git/blobdiff_plain/5d0b207bdb5016115f1219f65bbd9d96705a5bb7..a3770186a94117be56a8d9a8038a2d540bd2884c:/src/bitbangio.py diff --git a/src/bitbangio.py b/src/bitbangio.py old mode 100644 new mode 100755 index 101bfff..241db56 --- a/src/bitbangio.py +++ b/src/bitbangio.py @@ -1,17 +1,31 @@ +""" +`bitbangio` - Bitbanged bus protocols +============================================================== + +See `CircuitPython:bitbangio` in CircuitPython for more details. + +* Author(s): cefn +""" + from adafruit_blinka import Lockable, agnostic +import adafruit_platformdetect.constants.boards as ap_board class I2C(Lockable): def __init__(self, scl, sda, frequency=400000): - if agnostic.microcontroller == "stm32": - raise NotImplementedError("No software I2C on {}".format(agnostic.board)) + # TODO: This one is a bit questionable: + if agnostic.board_id == ap_board.PYBOARD: + raise NotImplementedError("No software I2C on {}".format(agnostic.board_id)) self.init(scl, sda, frequency) def init(self, scl, sda, frequency): from machine import Pin from machine import I2C as _I2C + self.deinit() - id = -1 # force bitbanging implementation - in future introspect platform if SDA/SCL matches hardware I2C + id = ( + -1 + ) # force bitbanging implementation - in future introspect platform if SDA/SCL matches hardware I2C self._i2c = _I2C(id, Pin(scl.id), Pin(sda.id), freq=frequency) def deinit(self): @@ -50,11 +64,13 @@ class I2C(Lockable): class SPI(Lockable): def __init__(self, clock, MOSI=None, MISO=None): from machine import SPI + self._spi = SPI(-1) self._pins = (clock, MOSI, MISO) def configure(self, baudrate=100000, polarity=0, phase=0, bits=8): - from machine import SPI,Pin + from machine import SPI, Pin + if self._locked: # TODO verify if _spi obj 'caches' sck, mosi, miso to avoid storing in _attributeIds (duplicated in busio) # i.e. #init ignores MOSI=None rather than unsetting @@ -66,7 +82,8 @@ class SPI(Lockable): firstbit=SPI.MSB, sck=Pin(self._pins[0].id), mosi=Pin(self._pins[1].id), - miso=Pin(self._pins[2].id)) + miso=Pin(self._pins[2].id), + ) else: raise RuntimeError("First call try_lock()")