X-Git-Url: https://git.ayoreis.com/hackapet/Adafruit_Blinka_Displayio.git/blobdiff_plain/3be987da8dc6b929a0f2b58dbac2d784552a1c39..5c0068c17cc0adc6ebef5bf2006c37ab6bf97f12:/i2cdisplaybus/__init__.py diff --git a/i2cdisplaybus/__init__.py b/i2cdisplaybus/__init__.py index 5527c6c..f1b2d15 100644 --- a/i2cdisplaybus/__init__.py +++ b/i2cdisplaybus/__init__.py @@ -6,10 +6,10 @@ # SPDX-License-Identifier: MIT """ -`displayio.i2cdisplay` +`i2cdisplaybus` ================================================================================ -displayio for Blinka +i2cdisplaybus for Blinka **Software and Dependencies:** @@ -36,7 +36,7 @@ class I2CDisplayBus: """ def __init__(self, i2c_bus: busio.I2C, *, device_address: int, reset=None): - """Create a I2CDisplay object associated with the given I2C bus and reset pin. + """Create a I2CDisplayBus object associated with the given I2C bus and reset pin. The I2C bus and pins are then in use by the display until displayio.release_displays() is called even after a reload. (It does this so CircuitPython can use the display after your @@ -87,7 +87,10 @@ class I2CDisplayBus: done. """ self._begin_transaction() - self._send(DISPLAY_COMMAND, CHIP_SELECT_UNTOUCHED, bytes([command] + data)) + # re-wrap in case of byte-string + #buffer = list(data) if isinstance(data, bytes) else data + #self._send(DISPLAY_COMMAND, CHIP_SELECT_UNTOUCHED, bytes([command] + buffer)) + self._send(DISPLAY_COMMAND, CHIP_SELECT_UNTOUCHED, data, command) self._end_transaction() def _send( @@ -95,14 +98,18 @@ class I2CDisplayBus: data_type: int, _chip_select: int, # Chip select behavior data: ReadableBuffer, + command: int, ): if data_type == DISPLAY_COMMAND: - n = len(data) + n = len(data) + 1 if n > 0: command_bytes = bytearray(n * 2) for i in range(n): command_bytes[2 * i] = 0x80 - command_bytes[2 * i + 1] = data[i] + if i > 0: + command_bytes[2 * i + 1] = data[i] + else: + command_bytes[2 * i + 1] = command try: self._i2c.writeto(self._dev_addr, buffer=command_bytes) @@ -113,9 +120,10 @@ class I2CDisplayBus: ) from error raise error else: - data_bytes = bytearray(len(data) + 1) + data_bytes = bytearray(len(data) + 2) data_bytes[0] = 0x40 - data_bytes[1:] = data + data_bytes[1] = command + data_bytes[2:] = data try: self._i2c.writeto(self._dev_addr, buffer=data_bytes) except OSError as error: