Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

I2c buffer sleepwake fix #142

Merged
merged 7 commits into from
Nov 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading