]> Repositories - hackapet/Adafruit_Blinka_Displayio.git/blobdiff - i2cdisplaybus/__init__.py
add command to _send()
[hackapet/Adafruit_Blinka_Displayio.git] / i2cdisplaybus / __init__.py
index 5527c6c2fa2fc11ecbac63b79471eee05400d3d4..f1b2d15fddc2a3b7843b198b0a3b7d6686e66baf 100644 (file)
@@ -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: