From 8f35badc31e215a4eddf4ea91c449c7687cf9229 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 15 Oct 2026 06:15:39 +0000 Subject: [PATCH 1/2] =?UTF-8?q?=EC=8B=9C=EC=9E=91=20=E2=80=94=20=EC=A0=95?= =?UTF-8?q?=EB=A6=AC=203=EB=8B=A8=EA=B3=84=20PR=2012:=20=ED=8C=A8=EB=84=90?= =?UTF-8?q?=20=EB=93=9C=EB=9D=BC=EC=9D=B4=EB=B2=84=EC=97=90=20=EC=9B=90?= =?UTF-8?q?=EB=9E=98=20=EB=9D=BC=EC=9D=B4=EB=B8=8C=EB=9F=AC=EB=A6=AC=20?= =?UTF-8?q?=EA=B3=A0=EC=B9=A8=EC=9D=84=20=EB=93=A4=EC=9D=B8=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01NitpYZAot3zeUJsjGVUSyf From 8465f800627054937432ca81a743485862af7038 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 15 Oct 2026 06:19:37 +0000 Subject: [PATCH 2/2] firmware: take upstream 7bf3b6c, set line_decoder in the HUB75 config constructor At 3.0.13 the field is never set, and c09362a, the oldest commit left on the list, reads it to address every row. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01NitpYZAot3zeUJsjGVUSyf --- .../hub75/ESP32-HUB75-MatrixPanel-I2S-DMA.h | 2 +- firmware/patternflow/src/hub75/UPSTREAM.md | 26 +++++++++++++------ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/firmware/patternflow/src/hub75/ESP32-HUB75-MatrixPanel-I2S-DMA.h b/firmware/patternflow/src/hub75/ESP32-HUB75-MatrixPanel-I2S-DMA.h index 05a3c56af..354f18761 100644 --- a/firmware/patternflow/src/hub75/ESP32-HUB75-MatrixPanel-I2S-DMA.h +++ b/firmware/patternflow/src/hub75/ESP32-HUB75-MatrixPanel-I2S-DMA.h @@ -347,7 +347,7 @@ struct HUB75_I2S_CFG bool _clockphase = true, uint16_t _min_refresh_rate = 60, uint8_t _pixel_color_depth_bits = PIXEL_COLOR_DEPTH_BITS_DEFAULT) - : mx_width(_w), mx_height(_h), chain_length(_chain), gpio(_pinmap), driver(_drv), double_buff(_dbuff), i2sspeed(_i2sspeed), latch_blanking(_latblk), clkphase(_clockphase), min_refresh_rate(_min_refresh_rate) + : mx_width(_w), mx_height(_h), chain_length(_chain), gpio(_pinmap), driver(_drv), line_decoder(_line_drv), double_buff(_dbuff), i2sspeed(_i2sspeed), latch_blanking(_latblk), clkphase(_clockphase), min_refresh_rate(_min_refresh_rate) { setPixelColorDepthBits(_pixel_color_depth_bits); } diff --git a/firmware/patternflow/src/hub75/UPSTREAM.md b/firmware/patternflow/src/hub75/UPSTREAM.md index 81f1d1b73..28abd48eb 100644 --- a/firmware/patternflow/src/hub75/UPSTREAM.md +++ b/firmware/patternflow/src/hub75/UPSTREAM.md @@ -5,11 +5,12 @@ at tag `3.0.13`, commit `a6221865c71fd5aeba885c31b81fe41bd36c5705` (25 October 2025). It was copied in on 31 July 2026, in `42bfc10`. Upstream's `master` was already past the tag that day, but the copy is the tag: every upstream file here that [patternflow.patch](patternflow.patch) does not name is byte for byte the -one at `a622186`. +one at `a622186`, plus the commits under +[Taken from upstream since](#taken-from-upstream-since). -The patch is every change since. It is `diff -ruN` of upstream's `src/` against -this folder, over the files both carry, and [VENDORED.md](VENDORED.md) says why -each change is there. +The patch is every change Patternflow made since. It is `diff -ruN` of +upstream's `src/`, with those commits on it, against this folder, over the +files both carry, and [VENDORED.md](VENDORED.md) says why each change is there. ## What was not copied @@ -38,6 +39,7 @@ From the repository root, with GNU diff: U=$(mktemp -d) git clone -q https://github.com/mrcodetastic/ESP32-HUB75-MatrixPanel-DMA "$U/upstream" git -C "$U/upstream" checkout -q a6221865c71fd5aeba885c31b81fe41bd36c5705 +git -C "$U/upstream" cherry-pick -n 7bf3b6c1dfb407f02ff6f3394b56d6f813048f5c ln -s "$U/upstream/src" "$U/a" ln -s "$PWD/firmware/patternflow/src/hub75" "$U/b" (cd "$U" && diff -ruN -x VENDORED.md -x UPSTREAM.md -x UPSTREAM_library.properties \ @@ -52,7 +54,8 @@ Upstream ends some lines in spaces, the patch carries them as context, and an editor that trims trailing whitespace (`.editorconfig` asks for that) breaks those hunks. -To check it, apply it to a clean copy of the tag. The last `diff -r` prints +To check it, apply it to a clean copy of the tag with the taken commits on it, +which is what the rebuild left in `$U/upstream`. The last `diff -r` prints nothing: ```sh @@ -64,7 +67,14 @@ diff -r -x VENDORED.md -x UPSTREAM.md -x UPSTREAM_library.properties \ ## Taken from upstream since -None yet. A commit taken from upstream gets a line here, oldest first, with its -hash and title. The rebuild above then picks it after the checkout -(`git -C "$U/upstream" cherry-pick -n `), so the patch stays Patternflow's +A commit taken from upstream gets a line here, in the order it was taken, with +its hash and title. Its full hash goes on the end of the `cherry-pick -n` line +in the rebuild above, in the same order, so the patch stays Patternflow's changes and nothing upstream wrote. + +- `7bf3b6c` "Fix: Properly set line_decoder in HUB75_I2S_CFG struct + constructor" (Christopher King, 3 April 2026). At 3.0.13 the constructor + never sets `line_decoder`, and `initDisplay()` in `core_display.h` builds its + config on the stack, so the field held whatever the stack held. It was taken + ahead of older commits because `c09362a`, the oldest one left, reads the + field to address every row.