Skip to content

Commit

Permalink
Merge pull request #142 from FoamyGuy/i2c_buffer_sleepwake_fix
Browse files Browse the repository at this point in the history
I2c buffer sleepwake fix
  • Loading branch information
FoamyGuy authored Nov 20, 2024
2 parents fe81d28 + 3fbd616 commit 145e02d
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 15 deletions.
12 changes: 1 addition & 11 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,17 +102,7 @@
#
on_rtd = os.environ.get("READTHEDOCS", None) == "True"

if not on_rtd: # only import and set the theme if we're building docs locally
try:
import sphinx_rtd_theme

html_theme = "sphinx_rtd_theme"
html_theme_path = [sphinx_rtd_theme.get_html_theme_path(), "."]
except:
html_theme = "default"
html_theme_path = ["."]
else:
html_theme_path = ["."]
html_theme = "sphinx_rtd_theme"

# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
Expand Down
27 changes: 23 additions & 4 deletions i2cdisplaybus/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
"""

import time
from typing import Optional

import busio
import digitalio
from circuitpython_typing import ReadableBuffer
Expand Down Expand Up @@ -87,22 +89,32 @@ def send(self, command: int, data: ReadableBuffer) -> None:
done.
"""
self._begin_transaction()
self._send(DISPLAY_COMMAND, CHIP_SELECT_UNTOUCHED, bytes([command] + data))
self._send(DISPLAY_COMMAND, CHIP_SELECT_UNTOUCHED, data, command)
self._end_transaction()

def _send(
self,
data_type: int,
_chip_select: int, # Chip select behavior
data: ReadableBuffer,
command: Optional[int] = None,
):
# pylint: disable=too-many-branches
if data_type == DISPLAY_COMMAND:
n = len(data)
if command is not None:
n += 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 command is not None:
if i > 0:
command_bytes[2 * i + 1] = data[i]
else:
command_bytes[2 * i + 1] = command
else:
command_bytes[2 * i + 1] = data[i]

try:
self._i2c.writeto(self._dev_addr, buffer=command_bytes)
Expand All @@ -113,9 +125,16 @@ def _send(
) from error
raise error
else:
data_bytes = bytearray(len(data) + 1)
size = len(data) + 1
if command is not None:
size += 1
data_bytes = bytearray(size)
data_bytes[0] = 0x40
data_bytes[1:] = data
if command is not None:
data_bytes[1] = command
data_bytes[2:] = data
else:
data_bytes[1:] = data
try:
self._i2c.writeto(self._dev_addr, buffer=data_bytes)
except OSError as error:
Expand Down

0 comments on commit 145e02d

Please sign in to comment.