Add Waveshare S3 Tubes remote shell - #66
Closed
theysayheygreg wants to merge 5 commits into
Closed
Conversation
This was referenced Aug 15, 2026
Author
|
The clean Waveshare S3 work is superseded by PR #69, whose third commit ( |
Author
|
Correction: the replacement updater PR #70 is target-only for Waveshare S3. Product direction for Home, Conductor, Surveyor, touch/display development remains independent and is not superseded by this updater work; no reopen is needed. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a Waveshare ESP32-S3-Touch-AMOLED-2.16 Tubes v14 remote target with a 16 MB partition contract, 60-pixel null virtual strip, local AMOLED/touch field shell, and additive canonical device-report identity.
The local UI provides Home, Conductor, Surveyor, and read-only Updater surfaces. It observes display, touch, power-monitor/IMU presence, and local radio status; it cannot claim conductor authority, drive a physical LED bus, or write peer firmware.
Scope and caveats
main;RELEASE_VERSIONremains 14.TubeHardwareWaveshareS3to the existing versioned device-report family enum; no packet/action ID changes.platformio_tubes.ini, not globalplatformio.ini. The new custom environment, partition CSV, null bus type, and pinned display/touch libraries warrant maintainer review.Validation
npm ci && npm run buildnpm test— 28 tests passed in the combined runnode --test tools/s3-partition-contract-test.js tools/tubes-s3-virtual-output-test.js— 12 tests passedtest/tubes_mesh/run.shtest/tubes_upgrade/run.shpio run -e waveshare_s3_tubes_remote— success; RAM 14.7%, flash 18.9%git diff --checkNo physical device was contacted or flashed. No generated web headers are included.
Working-set coordination — 2026-08-14
This draft is one of three independent contribution rails based on Steve's
main:Shared rules:
Current thinking
The S3 is a self-running local instrument and operator surface. Surveyor and Updater consume nearby-device identity; they do not define the canonical identity protocol. Updater remains read-only until exact target, image, lease, transfer, and health contracts are available.
Firmware display should use Legacy / Current / Next / Unknown. A valid v14 device report can prove Current. No reply must remain Unknown. v15 should identify itself explicitly through Steve's new protocol.
TODO
Recursive review hardening — 2026-08-14
Follow-up commit
c99960cfresolves the recursive review blockers without importing protocol or authority changes from the richer S3 worktree.TYPE_VIRTUAL_FRAMEBUFFER_RGB(83) inside the documented virtual-output class, with compile-time range/uniqueness assertions and explicit non-network dispatch.BusManager::add()behavior. The S3 target rejects incompatible physical/network or extra framebuffer configuration before mutation or pin allocation; Tubes idempotently owns exactly one logical framebuffer. Allocation failure returns-1andERR_NORAM_PX.Unknownwith explicit future v14/v15 adapter boundaries.platformio_tubes.iniremains explicitly maintainer-approval-gated; globalplatformio.iniis unchanged.Validation:
npm ci && npm run build;npm test(34 tests); focused S3/mixed-family tests (10/10); native Tubes mesh tests (10/10); Tubes upgrade tests; S3 firmware compile (RAM 14.8%, flash 19.0%); S3 partition/application contract; Dig2Go compile regression (RAM 25.8%, flash 79.7%);git diff --check. No device was contacted or flashed.Final authority capability correction — 2026-08-14
Commit
23d294e4closes the remaining recursive-review Important finding at the owning Tubes controller/API boundary.TUBES_READ_ONLY_FIELD_SHELL,RoleOperationis rejected before the role switch. Local lowercaserand selected/incoming/forwarded uppercaseRtherefore cannot reachsetRole(), EEPROM persistence, reboot scheduling, or role relay effects on the Waveshare S3 target.r/Rbindings, operation/wire IDs, action layout, and the legacyRoleOperationimplementation are unchanged. Dig2Go and other families do not define the S3 capability flag and retain existing role behavior.Validation: focused S3/mixed-family invariants 10/10;
npm test34/34; nativetubes_mesh10/10; S3 compile RAM 14.8% / flash 19.0%; Dig2Go compile RAM 25.8% / flash 79.7%;git diff --check. The first concurrent compile attempt encountered an npm dependency-install race; both targets then passed sequential clean reruns. No device was contacted or flashed. No reviewer was requested and the PR remains draft.Central update-contract integration checkpoint — 2026-08-14
This source PR remains independently based on Steve
main. A disposable integration worktree proved read-only consumption of PR #67's generated contract. Reviewed adapter commits:bd476b6fand5f484469.Unknownwithout complete positive evidence.Zero-pixel logical framebuffer hardening — 2026-08-15
Commit
adad692cfixes the confirmed zero-count logical framebuffer failure without changing palette behavior, physical buses, network buses, or Dig2Go.TUBES_NULL_OUTPUTnow compile-time assertsPIXEL_COUNTS > 0, so the fixed Waveshare S3 logical-output profile cannot silently build a zero-pixel framebuffer.BusVirtualFramebufferrefuses zero before allocation and cannot become valid from allocator-specificcalloc(0, ...)behavior.BusManager::add()rejects a zero-count logical framebuffer with the normalERR_NORAM_PXpath before idempotence or insertion; the bus collection remains unchanged.Validation: host framebuffer regression passed; focused S3/mixed/partition tests 18/18;
npm test34/34; native Tubes mesh tests 10/10; S3 partition/application contract passed; S3 compile succeeded (RAM 14.8%, flash 19.0%); Dig2Go regression compile succeeded (RAM 25.8%, flash 79.7%);git diff --checkpassed. No device was contacted or flashed. No reviewer was requested and the PR remains draft.