From: Cefn Hoile Date: Tue, 20 Feb 2018 17:11:41 +0000 (+0000) Subject: Untested draft I2C X-Git-Tag: 0.1.0~4^2~58 X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/commitdiff_plain/ff252342973b085c40ee7e64667a1cd70768fd55 Untested draft I2C --- diff --git a/python/bitbangio/__init__.py b/python/bitbangio/__init__.py new file mode 100644 index 0000000..3634f44 --- /dev/null +++ b/python/bitbangio/__init__.py @@ -0,0 +1,52 @@ +from machine import Pin, I2C as _I2C + +class I2C: + def __init__(self, scl, sda, frequency=400000): + self.init(scl, sda, frequency) + + def init(self, scl, sda, frequency): + self.deinit() + 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), frequency) + + def deinit(self): + try: + del self._i2c + except AttributeError: + pass + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.deinit() + + def scan(self): + return self._i2c.scan() + + def try_lock(self): + if self._locked: + return False + else: + self._locked=True + return True + + def unlock(self): + if self._locked: + self._locked = False + else: + raise ValueError("Not locked") + + def readfrom_into(self, address, buffer, start=0, end=None): + if start is not 0 or end is not None: + if end is None: + end = len(buffer) + buffer = memoryview(buffer)[start:end] + return self._i2c.readfrom_into(address, buffer, stop=False) + + def writeto(self, address, buffer, start=0, end=None, stop=True): + if start is not 0 or end is not None: + if end is None: + end = len(buffer) + buffer = memoryview(buffer)[start:end] + return self._i2c.writeto(address, buffer, stop)