feat: add M5Stack PaperS3 simple-config preset (panel-IC 3004) - #111
Merged
Merged
Conversation
Adds the M5Stack PaperS3 (ESP32-S3, 4.7" 960x540 ED047TC1-class parallel e-paper, 16-gray capable) as a driverBoard plus its two panel entries, following the Inkplate pattern for FastEPD parallel panels. Firmware support merged in OpenDisplay/Firmware#159 and shipped in release 2.26.5 (panel-IC 3004 -> BB_PANEL_M5PAPERS3). No new binary or manifest: reuses the existing esp32-s3-N16R8_full.json. - simple-config-presets.json: m5-papers3 (index 31), m5-papers3-960x540 (44, mono) and m5-papers3-960x540-4gray (45, color_scheme 6) - simple-config-id-registry.json: the three matching id -> index appends - config.yaml: panel_ic_type 3004 (m5papers3_960x540) and minor_version 4 -> 5, mirroring the protocol-side backward-compatible enum addition Every value comes from a physical unit driven through a 24-scenario acceptance run.
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.
Adds the M5Stack PaperS3 (ESP32-S3, 4.7" 960×540 ED047TC1-class parallel e-paper, 16-gray capable) as a complete device preset, plus its two panel entries.
Firmware support merged in OpenDisplay/Firmware#159 and shipped in release 2.26.5: panel-IC 3004 maps to FastEPD
BB_PANEL_M5PAPERS3. This is the toolbox-side counterpart — no new firmware binary and no new manifest, it reuses the existingbin/esp32-s3-N16R8_full.json.Changes
simple-config-presets.json—driverBoards:m5-papers3(index 31);displays:m5-papers3-960x540(44, mono) andm5-papers3-960x540-4gray(45,color_scheme6), identical apart from the colour scheme.simple-config-id-registry.json— the three matching id → index appends.config.yaml—panel_ic_type3004 (m5papers3_960x540) andminor_version4 → 5, mirroring the protocol-side@since 1.5backward-compatible enum addition.connectorPinsuses a new private token1047, so the board and its two panels only offer each other — same approach as the Inkplate entries (1010 / 1052). The board followsinkplate-5v2for the parallel-panel shape (alldisplayPins0xff, panel pin map lives in the firmware) and the reTerminal entries forpowerDefaults..github/scripts/validate-simple-config-presets.pypasses locally:simple-config OK: 87 presets; id/index registry stable.Hardware validation
Every value comes from a physical PaperS3 driven through a 24-scenario acceptance run (MONO and GRAY16 rendering over direct and pipe writes, GT911 touch telemetry, buzzer, battery telemetry, deep sleep with timer wake and image retained, plus a full erase → reflash → reconfigure → first image run). Points worth a reviewer's attention:
dataBusblock is mandatory on this board. Without an explicit I²C block (SCL 42 / SDA 41, 400 kHz) the firmware falls back toWire.begin()on GPIO 8/9 — which are EPD data lines here — and rendering corrupts into column artefacts. This was the hardest-won finding of the bring-up.flags=0x6(SWAP_XY | INVERT_Y): the GT911 reports portrait-native axes; this maps them to the 960×540 landscape, corner-verified on hardware.i2c_addr_7bit=0xfffor GT911 auto-probe (0x5D then 0x14, board-revision dependent; 0x5D on the validated unit). The schema documents 0/0xFF as auto-detect, though this is the first preset to use it.voltage_scaling_factor=0xa1(161): validated to −3.2 % against the Li-ion 4.20 V charge plateau (the enclosure exposes no measurement point).dataBus.pullups=0x0— unlike the reTerminal entries, this board has external I²C pullups; andbuzzerConfig.flags=0x0becauseenable_pinis unused here.manufacturer_idis0(diy) with the name "M5Stack PaperS3", so the name-split path advertises manufacturerM5Stack/ modelPaperS3— no manufacturer enum change needed.Two things for you to decide
1.
powerDefaultsare skipped on mains power.mergeSimpleConfigToFull()applies a board'spowerDefaultsonly whenpower_mode !== '2'(index.html:3826-3828). The PaperS3's sensible default is mains/always-on (usb), so its battery ADC (GPIO 3, scaling 161,capacity_estimator1) is dropped in exactly the default configuration — even though the hardware reports battery voltage fine on USB power. The values do apply as soon as a user picks a battery option.This isn't PaperS3-specific: it affects any board with a battery ADC selected on USB power (
reterminal-e1003has the same hole). I leftdefaultPower: "usb"with thepowerDefaultsblock intact rather than guess. Happy to either relax that guard so only the sleep-related fields are skipped on mains (one line, here or separately), or add a device-specificpowerOptionsentry carrying the ADC inline — though that spends a permanent registry index and adds a row to every board's dropdown. Your call.2. Sequencing with the hosted firmware.
bin/firmware-version.jsoncurrently pins 2.26.4 (synced 2026-09-02), while PaperS3 support ships in 2.26.5. Until the sync lands, a user flashing from the toolbox would get a firmware without the 3004 mapping and then apply a config it cannot drive. Nothing to edit here — just worth merging this after the firmware sync, or triggering it first.Happy to reshape any of this.