From 054ad78d7b49c5502c4c6d3290e3060eb8b058df Mon Sep 17 00:00:00 2001 From: Chuck <33324927+ChuckBuilds@users.noreply.github.com> Date: Fri, 15 May 2026 14:17:00 -0400 Subject: [PATCH] chore(deps): update rpi-rgb-led-matrix to latest upstream for Pi 5 support (#334) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore(deps): update rpi-rgb-led-matrix to latest upstream for Pi 5 support Configure submodule to track upstream master branch (branch = master in .gitmodules) so future updates are a single 'git submodule update --remote' rather than manual SHA management. Update first_time_install.sh to use --remote flag so fresh installs always pull the current upstream master, not the commit recorded at clone time. Current upstream HEAD (8907235) brings: - PR #1886: Raspberry Pi 5 support — new RP1 PIO and RIO backends. The library auto-detects Pi 5 hardware at runtime; no config change required for basic operation. adafruit-hat-pwm is confirmed supported on Pi 5. - PR #1833: setup.py migrated from distutils → setuptools, fixing Python 3.12+ build failure (Pi runs Python 3.13). Previous version could not build the bindings at all on current Pi OS. Expose new rp1_rio option in display_manager.py and config.template.json: 0 (default) = PIO mode — uses Pi 5 RP1 coprocessor, minimal CPU usage 1 = RIO mode — Registered IO, faster throughput, higher CPU; note that gpio_slowdown has inverted effect in this mode No API changes to RGBMatrix, RGBMatrixOptions, or FrameCanvas. Pi 4 and earlier hardware is unaffected — rp1_rio is silently ignored on non-Pi-5. Co-Authored-By: Claude Sonnet 4.6 * chore(deps): update rpi-rgb-led-matrix install for new scikit-build-core system The library migrated from 'make build-python' + 'pip install bindings/python' to a scikit-build-core + cmake build where the entire repo root is pip- installable via 'pip install .'. Update first_time_install.sh accordingly: - Remove the 'make build-python' step (target no longer exists) - Install directly from the repo root instead of bindings/python - Replace build deps: remove cython3/scons/python3-dev, add python-dev-is-python3 Co-Authored-By: Claude Sonnet 4.6 * fix: deterministic submodule install + guard rp1_rio for older rgbmatrix first_time_install.sh: remove --remote from both git submodule update calls so first-time installs check out the pinned commit recorded in the repo rather than whatever upstream master happens to be at install time. The branch = master config in .gitmodules reserves --remote for an explicit maintainer upgrade (git submodule update --remote). display_manager.py: guard rp1_rio assignment with hasattr() so setting the option in config does not cause an AttributeError and silently fall through to emulator mode when running against RGBMatrixEmulator or an older rgbmatrix build that predates the Pi 5 property. Emit a warning instead so the operator knows the value was ignored. Co-Authored-By: Claude Sonnet 4.6 --------- Co-authored-by: Chuck Co-authored-by: Claude Sonnet 4.6 --- .gitmodules | 1 + config/config.template.json | 3 ++- first_time_install.sh | 19 ++++++------------- rpi-rgb-led-matrix-master | 2 +- src/display_manager.py | 11 +++++++++++ 5 files changed, 21 insertions(+), 15 deletions(-) diff --git a/.gitmodules b/.gitmodules index 6efbe97a..7998285c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,4 @@ [submodule "rpi-rgb-led-matrix-master"] path = rpi-rgb-led-matrix-master url = https://github.com/hzeller/rpi-rgb-led-matrix.git + branch = master diff --git a/config/config.template.json b/config/config.template.json index 8eb664e1..b55220ef 100644 --- a/config/config.template.json +++ b/config/config.template.json @@ -112,7 +112,8 @@ "limit_refresh_rate_hz": 100 }, "runtime": { - "gpio_slowdown": 3 + "gpio_slowdown": 3, + "rp1_rio": 0 }, "display_durations": {}, "use_short_date_format": true, diff --git a/first_time_install.sh b/first_time_install.sh index 2c46ed7f..02e54a58 100644 --- a/first_time_install.sh +++ b/first_time_install.sh @@ -271,7 +271,7 @@ apt_update # Install required system packages echo "Installing Python packages and dependencies..." -apt_install python3-pip python3-venv python3-dev python3-pil python3-pil.imagetk build-essential python3-setuptools python3-wheel cython3 scons cmake ninja-build +apt_install python3-pip python3-venv python-dev-is-python3 python3-pil python3-pil.imagetk build-essential python3-setuptools python3-wheel cmake ninja-build # Install additional system dependencies that might be needed echo "Installing additional system dependencies..." @@ -821,20 +821,13 @@ else fi pushd "$PROJECT_ROOT_DIR/rpi-rgb-led-matrix-master" >/dev/null - echo "Building rpi-rgb-led-matrix Python bindings..." - # Build the library first, then Python bindings - # The build-python target depends on the library being built - if ! make build-python; then - echo "✗ Failed to build rpi-rgb-led-matrix Python bindings" - echo " Make sure you have the required build tools installed:" - echo " sudo apt install -y build-essential python3-dev cython3 scons" - popd >/dev/null - exit 1 - fi - cd bindings/python - echo "Installing rpi-rgb-led-matrix Python package via pip..." + echo "Installing rpi-rgb-led-matrix Python package (scikit-build-core + cmake)..." + echo " Build deps required: python-dev-is-python3 cmake" + echo " This compiles C++ — may take 2-5 minutes on Pi 4/5..." if ! python3 -m pip install --break-system-packages .; then echo "✗ Failed to install rpi-rgb-led-matrix Python package" + echo " Ensure build tools are installed:" + echo " sudo apt install -y python-dev-is-python3 cmake build-essential" popd >/dev/null exit 1 fi diff --git a/rpi-rgb-led-matrix-master b/rpi-rgb-led-matrix-master index 2cfff2a4..89072356 160000 --- a/rpi-rgb-led-matrix-master +++ b/rpi-rgb-led-matrix-master @@ -1 +1 @@ -Subproject commit 2cfff2a4b14825795e195d2bf3a9b2ef2ac93446 +Subproject commit 89072356305e272c2b1af32b8377a274df3d6d9f diff --git a/src/display_manager.py b/src/display_manager.py index 43433582..e548e86f 100644 --- a/src/display_manager.py +++ b/src/display_manager.py @@ -100,6 +100,17 @@ class DisplayManager: options.pwm_dither_bits = hardware_config.get('pwm_dither_bits') if 'inverse_colors' in hardware_config: options.inverse_colors = hardware_config.get('inverse_colors') + # Pi 5 only: 0=PIO/RP1 coprocessor (default, less CPU), + # 1=RIO/Registered IO (faster; gpio_slowdown effect is inverted in this mode) + if 'rp1_rio' in runtime_config: + if hasattr(options, 'rp1_rio'): + options.rp1_rio = runtime_config.get('rp1_rio') + else: + logger.warning( + "rp1_rio is set in config but the current RGBMatrixOptions " + "implementation does not support it (RGBMatrixEmulator or older " + "library version) — value will be ignored" + ) logger.info(f"Initializing RGB Matrix with settings: rows={options.rows}, cols={options.cols}, chain_length={options.chain_length}, parallel={options.parallel}, hardware_mapping={options.hardware_mapping}")