# SPDX-License-Identifier: MIT
"""
-`displayio.i2cdisplay`
+`i2cdisplaybus`
================================================================================
-displayio for Blinka
+i2cdisplaybus for Blinka
**Software and Dependencies:**
"""
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
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(
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)
) 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: