From e98379f310517e2fb7d481a7d216b09f9a4e83c8 Mon Sep 17 00:00:00 2001 From: ewowi Date: Fri, 31 Jul 2026 19:51:04 +0200 Subject: [PATCH 1/2] Add ControlModule: presets on a control surface Save the device's state as a named preset and bring it back with one click. A preset is a file, so it can be uploaded, downloaded and shared; each one records which parts of the setup it carries, so a look saved on one board applies to a board with different hardware. The presets sit on an 8x8 pad grid with encoders above and faders below, laid out like a Mackie control desk so a MIDI surface maps onto it later without a translation layer. Flash esp32s3-n16r8 1,651 KB (+22 KB), esp32s31 1,887 KB (+7 KB), desktop 960 KB (+36 KB); desktop tick 132 us (+5 us). Core: - ControlModule: a new top-level module, peer of Layouts/Layers/Drivers rather than a child of Services, since it reaches across them. Hosts presets now and external control (MIDI, IR) later. - FilesystemModule gains two seams: saveSubtreeTo writes a subtree into a caller's sink, applySubtree puts one back onto a LIVE tree. saveSubtree now calls the former, so there is exactly one serializer. - applySubtree guards on the prefix being present: without it applyNode reads "no children in JSON" as "delete every child", so a truncated preset would wipe the live look. - ListSource::persistsList: a list whose rows are re-derived at setup is no longer written to flash. The preset list was serialized on every save and discarded on load, since nothing restores it. - Preset names are validated as printable ASCII without / \ or . -- the name becomes a file name, and ESP32's fsTranslate does no path normalization (desktop's does), so an unguarded name could escape the preset folder on device via delete, rename or save. - Control.h: fader/encoder/faderTarget descriptor flags and the pad-grid ListSource hooks, all presentation-only and domain-neutral. Light domain: - Unchanged. ControlModule resolves subtrees generically through typeName(), so core carries no light-specific knowledge. UI: - Pad grid, rotary encoders and faders share one column track, so the three banks line up and still follow the pane as it is resized. - Pads are tinted by the roles they carry (layout/layer/driver/service), mixing hues when a preset carries several. Applying a preset claims only the roles it carries, so a layout preset and a layer preset stay lit at once. - Fixed: the seven-segment readouts and knob dials never redrew on a WebSocket patch (which fires neither input nor change), and were built before the input had a value or bounds. One redrawRangeDecorations call now owns the seam. - Power-on demo sweep, marked as one removable block plus a single call site. View-only: it never sends a value to the device. Tests: - 21 ControlModule tests, 7 FilesystemModule subtree tests. - Mutation-tested: removing the per-role rule fails 3 assertions, removing the path-traversal guard fails 7. - No scenario test for the preset round trip: the scenario runner has no op that can apply a preset (it speaks /api/control, applying needs /api/list/). Extending the runner is separate work. Docs/CI: - docs/moonmodules/core/control.md: catalog card plus the rules no header owns (what a preset carries, one-active-preset-per-role, applying is a rebuild). Reviews: - Path traversal via preset name -> fixed, validator on the control so every write path runs it; pinned and mutation-tested. - Preset list persisted then discarded -> fixed at the core seam (ListSource::persistsList) rather than locally, so Pins/Tasks can use it. - Save wrote the file without its slot then moved it, a second whole-folder rewrite that could displace an unrelated preset -> fixed by writing the slot up front. Exposed a real bug: an unaimed save landed on pad 1; added kNoSlot. - Duplicated fader binding -> driveFader now parses faderTarget, so the popup and the action cannot disagree. - Stale `order` naming in three comments -> renamed to `slot`. - "Apply runs on the HTTP thread, not the render tick" -> not applied. HttpServerModule::tick20ms is MM_NONBLOCKING and drains inside Scheduler::tick, so the docstring is correct. - 192-byte header read, insertion-sort struct copies -> deferred to the dynamic presets rework, along with kMaxPresets 36->64 (accepted by the PO for now). Co-Authored-By: Claude Opus 5 (1M context) --- docs/assets/core/ControlModule.png | Bin 0 -> 148079 bytes ...an-20260731 - ControlModule and presets.md | 135 ++++ docs/metrics/repo-health.json | 50 +- docs/metrics/repo-health.md | 36 +- docs/moonmodules/core/control.md | 62 ++ mkdocs.yml | 1 + src/core/Control.cpp | 10 + src/core/Control.h | 62 +- src/core/ControlModule.h | 617 +++++++++++++++++ src/core/FilesystemModule.cpp | 49 +- src/core/FilesystemModule.h | 32 + src/core/HttpServerModule.cpp | 10 + src/main.cpp | 8 + src/ui/app.js | 654 +++++++++++++++++- src/ui/style.css | 327 +++++++++ test/CMakeLists.txt | 2 + .../light/scenario_Audio_mutation.json | 16 +- .../light/scenario_Driver_mutation.json | 20 +- .../light/scenario_GridBlacks_blackpixel.json | 8 +- .../light/scenario_Layers_composition.json | 4 +- .../light/scenario_Layouts_mutation.json | 16 +- .../scenario_MoonLiveEffect_livescript.json | 4 +- .../light/scenario_modifier_chain.json | 8 +- .../light/scenario_modifier_swap.json | 8 +- test/scenarios/light/scenario_perf_full.json | 50 +- .../light/scenario_peripheral_grid_sweep.json | 54 +- .../light/scenario_peripheral_switch.json | 12 +- test/unit/core/unit_ControlModule.cpp | 620 +++++++++++++++++ .../core/unit_FilesystemModule_subtree.cpp | 221 ++++++ 29 files changed, 2941 insertions(+), 155 deletions(-) create mode 100644 docs/assets/core/ControlModule.png create mode 100644 docs/history/plans/Plan-20260731 - ControlModule and presets.md create mode 100644 docs/moonmodules/core/control.md create mode 100644 src/core/ControlModule.h create mode 100644 test/unit/core/unit_ControlModule.cpp create mode 100644 test/unit/core/unit_FilesystemModule_subtree.cpp diff --git a/docs/assets/core/ControlModule.png b/docs/assets/core/ControlModule.png new file mode 100644 index 0000000000000000000000000000000000000000..4360d4fa01208584a8b920e23a5c0efbaa4b9bca GIT binary patch literal 148079 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

@yj_y}3mUz~!g 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%0D^`T-TfsC! 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 DiB3tr literal 0 HcmV?d00001 diff --git a/docs/history/plans/Plan-20260731 - ControlModule and presets.md b/docs/history/plans/Plan-20260731 - ControlModule and presets.md new file mode 100644 index 00000000..7451fce4 --- /dev/null +++ b/docs/history/plans/Plan-20260731 - ControlModule and presets.md @@ -0,0 +1,135 @@ +# Plan: ControlModule and presets + +## Context + +There is no way to save a device's configuration and bring it back. Every change edits the live tree, +and the only persistence is the automatic one that restores exactly what was there at reboot. A user +who finds a look they like cannot keep it, and cannot switch between looks. + +MoonLight solved this inside `ModuleLightsControl`, and the mechanism is the one to copy: **a preset +is a JSON file, saving is copying a file, selecting is reading one back**. MoonLight's presets cover +only effects and modifiers. We make it generic, and put it in **core** rather than the light domain, +so a preset can carry any part of the tree. + +`ControlModule` is also where external control belongs later (MIDI surfaces, IR, a hardware panel): +one place that says "put the device in this state", whatever asked for it. Presets are its first +capability, not its only one. + +**Naming.** `LightPresetsModule` already exists and is a different thing: named channel-role wirings +per fixture. It keeps its name here; the collision is noted in the module comment on both sides so a +reader is not misled. If the two prove confusable in use, renaming that one to a fixture profile is a +separate, PO-called change. + +## Decisions taken + +- **A preset captures a SELECTABLE set of top-level subtrees**, recorded in the file. A `Layers`-only + preset is hardware-portable; adding `Drivers` makes it a device snapshot that carries pin maps. + The file says which, so applying one is never a surprise. +- **Named files**: `/.config/presets/.json`. Delete is a file delete; a preset uploaded through + the File Manager just appears. This is the PO's stated principle, taken literally. +- **Playlists are NOT in this branch.** The cycling hook is designed in and left unbuilt; multiple + named playlists get their own plan, informed by real presets to cycle. + +## Design + +### The file + +```json +{ + "captures": ["Layers", "Layouts"], + "Layers": { "enabled": true, "0.type": "Layer", "0.0.type": "NoiseEffect", "0.0.speed": 128 }, + "Layouts": { "enabled": true, "0.type": "GridLayout", "0.width": 128 } +} +``` + +Each captured subtree is **exactly the bytes `FilesystemModule` already writes** for that module +(`writeNode`, `FilesystemModule.cpp:348`): a flat map of dotted positional keys, with `.type` +per child. Reusing that format means save and restore reuse the engine that already reconciles a tree +against JSON, rather than a second serializer that could drift from it. + +### What has to be added to core + +`FilesystemModule` can already do both halves, but neither is reachable at runtime: + +- **`saveSubtreeTo(MoonModule*, JsonSink&)`** — factor the body of `saveSubtree` + (`FilesystemModule.cpp:319`) so it can write into a caller's sink instead of straight to + `/.config/.json`. The existing method becomes a thin caller of it. +- **`applySubtree(MoonModule*, const char* json, const char* prefix)`** — a public wrapper over the + private `applyNode` (`FilesystemModule.cpp:191`), which already creates, replaces and destroys + children by type and tolerates unknown types. **It must also drive the lifecycle `applyNode` + leaves undone**: `applyNode` calls only `defineControls()` on a created child, because at boot the + Scheduler's phases 3 and 4 follow. At runtime the caller must do what `applyAddModule` does + (`HttpServerModule.cpp:1591`): `setup()` then `applyState()`, then one `prepareTree()`. + +Both go on `FilesystemModule` because that is where the format and the reconciliation live. No new +serializer, no second copy of the tree-walking rules. + +### ControlModule + +A top-level module, peer of Layouts/Layers/Drivers, registered in `main.cpp` alongside them. Not +under `Services`: it reaches *across* the top-level modules, so it cannot be a child of one. + +Controls: + +| control | what it does | +|---|---| +| `presets` | An editable `List` (`ListSource`, `Control.h:190`) — one row per file, with the captured subtrees shown per row. | +| `name` | Text: the name to save under. | +| `capture` | Which subtrees a save includes. One `addBool` per top-level module, so the set is explicit. | +| `save` | Button: write `/.config/presets/.json`. | +| `status` | ReadOnly: what happened, and which preset is currently applied. | + +Applying a row uses the list's existing per-row edit path (`setListRowField`), which reaches the +source with an arbitrary field name, so a row gets an "apply" affordance with no new UI primitive. +A row also carries delete and rename through the CRUD the list already provides. + +**Save** flushes pending writes first (`FilesystemModule::flushPending()`, `.cpp:100`) so the file +captures the live state rather than a stale debounce, then walks the selected top-level modules and +writes one object per capture. + +**Apply** reads the file, and for each key in `captures` that resolves to a live top-level module, +calls `applySubtree`. A capture naming a module this build does not have is skipped with a status +line: the same degrade-never-crash rule `applyNode` already follows for unknown child types. + +### The hot path + +Applying a preset rebuilds modules, and every structural mutator already quiesces the render worker +(`MoonModule::quiesceForMutation`, `MoonModule.h:510`). But mutations run inline on the render tick, +so a large restore stalls rendering for its duration. **Batch it**: mutate every captured subtree, +then one `prepareTree()` and one `requestFullResync()` at the end, rather than per subtree as the +existing add path does. `tick()` is untouched, since presets are a cold-path feature. + +## Files + +- `src/core/ControlModule.h` — new. The module, its controls, the preset `ListSource`. +- `src/core/FilesystemModule.h` / `.cpp` — `saveSubtreeTo` + `applySubtree`; `saveSubtree` refactored + to call the former. +- `src/main.cpp` — register the type, create it, `scheduler.addModule` it. +- `src/ui/app.js` — the row-apply affordance, **in both render paths** (`renderCards` and + `updateModuleControls`; a rule added to one only is invisible on a WebSocket update). +- `docs/moonmodules/core/control.md` + the catalog card. +- `test/unit/core/unit_ControlModule.cpp` — new. + +## Verification + +1. **Unit**: a preset round-trips (save a tree, mutate it, apply, the tree matches); a capture naming + an absent module is skipped without throwing; a corrupt file degrades to a status rather than a + crash; an unknown child type inside a capture is skipped and the rest still applies. +2. **Scenario**: save a preset, change effects and layout live, apply the preset, assert the pipeline + still renders non-zero, which is the wired-pipeline gate the other scenarios use. +3. **`check_footprint --module ControlModule`**: zero static RAM when not used. +4. **`clang-hotpath`**: no new blocking call on the render path. +5. **Bench, and the gate that matters**: on a real board, save a look, change it, bring it back, and + confirm the panels show what they showed before. **PO judgement.** +6. Hardware portability, deliberately: a `Layers`-only preset saved on one board applies on a board + with different pins and drives its own hardware. + +## Deliberately not in this plan + +- **Playlists**, per the decision above. The apply path is the hook they will need. +- **Apply-on-boot.** MoonLight explicitly does not (its preset branch is guarded against firing at + boot); WLED does. Worth deciding once presets exist and the behaviour can be felt. +- **Renaming `LightPresetsModule`.** Noted as a collision, not acted on: it is a PO call and a + separate change. +- **External control (MIDI, hardware surfaces).** This is what `ControlModule` exists to host, but + the first capability is presets; adding a control surface has its own plan. diff --git a/docs/metrics/repo-health.json b/docs/metrics/repo-health.json index 2dd812ce..fbd0ae6f 100644 --- a/docs/metrics/repo-health.json +++ b/docs/metrics/repo-health.json @@ -1,18 +1,18 @@ { - "commit": "cca3fe8e", + "commit": "b423df82", "flash": { "esp32": 1678960, - "esp32p4-eth": 1503232, + "esp32p4-eth": 1503280, "esp32p4-eth-wifi": 1793760, - "esp32s3-n16r8": 1667216, + "esp32s3-n16r8": 1690128, "esp32s3-n8r8": 1666992, - "esp32s31": 1924992, - "desktop": 945752 + "esp32s31": 1932624, + "desktop": 982584 }, "perf": { "desktop": { - "tick_us": 127, - "fps": 7874 + "tick_us": 132, + "fps": 7575 }, "esp32": { "tick_us": 4164, @@ -20,32 +20,32 @@ } }, "loc": { - "core": 14889, - "light": 20214, + "core": 15653, + "light": 20244, "platform": 12526, - "ui": 5811, - "test": 35504, - "moondeck": 19968 + "ui": 6457, + "test": 36345, + "moondeck": 20006 }, "comments": { "core": { - "lines": 5583, - "ratio": 0.409 + "lines": 5841, + "ratio": 0.407 }, "light": { - "lines": 7815, - "ratio": 0.427 + "lines": 7845, + "ratio": 0.428 }, "platform": { "lines": 4198, "ratio": 0.371 }, "ui": { - "lines": 1518, - "ratio": 0.278 + "lines": 1658, + "ratio": 0.273 }, "test": { - "lines": 6073, + "lines": 6196, "ratio": 0.198 }, "moondeck": { @@ -54,20 +54,20 @@ } }, "tests": { - "cases": 1008, + "cases": 1036, "scenarios": 22 }, "docs": { - "md_files": 170, - "md_lines": 22818, - "plans_files": 90, + "md_files": 172, + "md_lines": 23015, + "plans_files": 91, "backlog_lines": 3114, "lessons_lines": 418, "claude_md_lines": 135 }, "complexity": { - "functions": 2188, - "over_threshold": 140, + "functions": 2227, + "over_threshold": 142, "worst_ccn": 93 } } diff --git a/docs/metrics/repo-health.md b/docs/metrics/repo-health.md index 396c38d0..4f53241d 100644 --- a/docs/metrics/repo-health.md +++ b/docs/metrics/repo-health.md @@ -1,6 +1,6 @@ # Repo health -Measured at `cca3fe8e`. Generated by [`moondeck/check/repo_health.py`](../../moondeck/check/repo_health.py) on every KPI-gate run. **Do not edit by hand.** +Measured at `b423df82`. Generated by [`moondeck/check/repo_health.py`](../../moondeck/check/repo_health.py) on every KPI-gate run. **Do not edit by hand.** Current state only; the trend is this file's git history (`git log -p docs/metrics/repo-health.md`). Nothing here fails a build: the numbers make growth visible, the judgment stays human. @@ -8,54 +8,54 @@ Current state only; the trend is this file's git history (`git log -p docs/metri | Target | Flash | |---|---:| -| desktop | 924 KB (+0 KB) ⚠ | +| desktop | 960 KB (+36 KB) ⚠ | | esp32 | 1,640 KB | -| esp32p4-eth | 1,468 KB | +| esp32p4-eth | 1,468 KB (+0 KB) ⚠ | | esp32p4-eth-wifi | 1,752 KB | -| esp32s3-n16r8 | 1,628 KB | +| esp32s3-n16r8 | 1,651 KB (+22 KB) ⚠ | | esp32s3-n8r8 | 1,628 KB | -| esp32s31 | 1,880 KB | +| esp32s31 | 1,887 KB (+7 KB) ⚠ | ## Render performance | Target | Tick | FPS | |---|---:|---:| -| desktop | 127 µs | 7,874 | +| desktop | 132 µs (+5 µs) ⚠ | 7,575 (−299) ⚠ | | esp32 | 4,164 µs | 240 | ## Code | Area | Lines | Comments | Comment share | |---|---:|---:|---:| -| core | 14,889 | 5,583 | 40.9 % | -| light | 20,214 (+16) ⚠ | 7,815 | 42.7 % | -| platform | 12,526 (+25) ⚠ | 4,198 | 37.1 % (+0.1 %) ⚠ | -| ui | 5,811 | 1,518 | 27.8 % | -| test | 35,504 (+75) ⚠ | 6,073 | 19.8 % | -| moondeck | 19,968 | 3,187 | 18.3 % | +| core | 15,653 (+764) ⚠ | 5,841 | 40.7 % (−0.2 %) ✓ | +| light | 20,244 (+30) ⚠ | 7,845 | 42.8 % (+0.1 %) ⚠ | +| platform | 12,526 | 4,198 | 37.1 % | +| ui | 6,457 (+646) ⚠ | 1,658 | 27.3 % (−0.5 %) ✓ | +| test | 36,345 (+841) ⚠ | 6,196 | 19.8 % | +| moondeck | 20,006 (+38) ⚠ | 3,187 | 18.3 % | ## Tests | Kind | Count | |---|---:| -| unit cases | 1,008 (+1) ✓ | +| unit cases | 1,036 (+28) ✓ | | scenarios | 22 | ## Complexity | Metric | Value | |---|---:| -| functions | 2,188 (+1) ✓ | -| over threshold | 140 (+1) ⚠ | +| functions | 2,227 (+39) ✓ | +| over threshold | 142 (+2) ⚠ | | worst CCN | 93 | ## Documentation | Metric | Value | |---|---:| -| markdown files | 170 | -| markdown lines | 22,818 (+9) ⚠ | -| plan files | 90 | +| markdown files | 172 (+2) ⚠ | +| markdown lines | 23,015 (+197) ⚠ | +| plan files | 91 (+1) ⚠ | | backlog lines | 3,114 | | lessons lines | 418 | | CLAUDE.md lines | 135 | diff --git a/docs/moonmodules/core/control.md b/docs/moonmodules/core/control.md new file mode 100644 index 00000000..d3dcaf09 --- /dev/null +++ b/docs/moonmodules/core/control.md @@ -0,0 +1,62 @@ +# Core control + +The device's control surface — the place that says "put the device into this state", whatever asked for it. A preset applied from the grid, and later a fader moved on a MIDI desk, arrive at the same code. Its first capability is presets; the surface layout exists so external controllers map onto something that already looks like them. + +`ControlModule` is a top-level module, a peer of Layouts / Layers / Drivers rather than a child of Services: it reaches *across* the top-level modules, so it cannot sit inside one. + +## Control modules + + + +### Control + +A grid of preset pads, a row of rotary encoders above them, and a bank of faders below — the layout of a Mackie-style control desk ([X-Touch](https://www.behringer.com/product.html?modelCode=0808-AAF), [QCon Pro G2](https://www.iconproaudio.com/product/qcon-pro-g2/)), so a physical surface maps onto it without a translation layer. + +Control module surface: encoders, preset pads, faders + +- `presets` — the pad grid (8×8). One pad per preset file; click to apply, right-click (or long-press) to name, choose what it captures, save or delete. Drag a pad to rearrange the surface. +- `enc1` … `enc8` — rotary encoders. Drag or scroll to turn; right-click shows what each drives. +- `fader1` … `fader8` — faders. `fader1` drives `Drivers.brightness`; the rest are unassigned until bound. + +Detail: [technical](moxygen/ControlModule.md) + +[Tests](../../tests/unit-tests.md#controlmodule) + +## Presets + +A preset is a file: `/.config/presets/.json`. Saving writes one, applying reads one, deleting removes one. A preset uploaded through the File Manager appears on the grid; nothing else holds preset state, so there is no second copy to keep in step, and the list is rebuilt from the folder at startup rather than persisted alongside it. + +The name becomes the file name, so it is restricted to printable ASCII without `/`, `\` or `.` — a validator on the control, which every write path runs. `slot` records which pad the preset occupies, so a surface arranged to match a physical desk survives a reboot. + +### What a preset carries + +A preset captures a **selectable set** of top-level subtrees, recorded in the file: + +```json +{ + "slot": 12, + "captures": "Layouts,Layers", + "Layouts.enabled": true, "Layouts.0.type": "GridLayout", "Layouts.0.width": 128, + "Layers.enabled": true, "Layers.0.type": "Layer", "Layers.0.0.type": "NoiseEffect" +} +``` + +Each captured subtree is exactly the bytes the persistence engine already writes for that module, namespaced under a `.` key prefix. Save and restore therefore reuse the engine that reconciles a tree against JSON ([`saveSubtreeTo` / `applySubtree`](moxygen/FilesystemModule.md)) rather than a second serializer that could drift from it. + +The capture set decides what a preset means. `Layers` alone is a look, and applies to a board with different hardware. Adding `Drivers` makes it a device snapshot that carries pin maps. Because the file records the set, applying a preset is never a surprise. + +A capture naming a module this build does not have is skipped and reported in the status line, and an unknown module type inside a capture is skipped while the rest still applies — the same degrade-never-crash rule the boot loader follows. A malformed file leaves the live tree untouched. + +### One active preset per role + +Each capturable subtree holds a **role**: layout, layer, driver, service. Applying a preset claims every role it carries and leaves the others alone, so a layout preset and a layer preset are both active at once, and applying a new layer preset replaces only the layer. + +A pad is tinted by its roles (layout blue, layer violet, driver green, service amber), mixing the hues when it carries several. A lit pad shows the roles it still *holds*: a preset whose layer has since been replaced but whose layout is still applied stays lit in the layout color. + +This is why mixed presets need no special case. A mixed preset owns several roles rather than being a different kind of pad, and the same rule colors it and decides when it is superseded. + +### Applying is a rebuild + +Applying a preset creates, replaces and destroys modules to match what the file describes — it is a restore, not a value overlay: a preset carrying more than the device has adds it, and one describing less removes what it omits. + +Structural mutation quiesces the render worker, and mutations run inline on the render tick, so a large restore stalls rendering for its duration. Every captured subtree is applied first and `prepareTree()` runs once at the end, rather than once per capture. Presets are a cold-path feature; the tick path is untouched. diff --git a/mkdocs.yml b/mkdocs.yml index fcc1fd4f..1425330f 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -135,6 +135,7 @@ nav: - Supporting: moonmodules/light/supporting.md - Core: - System: moonmodules/core/system.md + - Control: moonmodules/core/control.md - Services: moonmodules/core/services.md - Supporting: moonmodules/core/supporting.md - Web UI: moonmodules/core/ui.md diff --git a/src/core/Control.cpp b/src/core/Control.cpp index 07fab165..b7e6232b 100644 --- a/src/core/Control.cpp +++ b/src/core/Control.cpp @@ -42,6 +42,16 @@ const char* controlTypeName(ControlType t) { return "unknown"; } +bool isPersistable(const ControlDescriptor& c) { + // A List defers to its source: rows re-derived at setup are not worth writing (see + // ListSource::persistsList). Every other type answers from the type alone. + if (c.type == ControlType::List) { + auto* src = static_cast(c.ptr); + if (src && !src->persistsList()) return false; + } + return isPersistable(c.type); +} + bool isPersistable(ControlType t) { // Display-only / device-derived types: no point saving — the next // tick1s overwrites them. diff --git a/src/core/Control.h b/src/core/Control.h index 5e2eacdc..0d1b1692 100644 --- a/src/core/Control.h +++ b/src/core/Control.h @@ -187,6 +187,13 @@ struct ListSource { // the control system stays generic. Returns true if it took. virtual bool restoreList(const char* /*json*/, const char* /*key*/) { return false; } + // Is this list's VALUE worth writing to flash? False for a list whose rows are re-derived at + // setup from a source that is itself already persistent — a folder of files, the live module + // tree, the pin map. Persisting such a list writes a large array on every save that the loader + // then discards (restoreList returns false), which is flash wear for nothing. + // Default true, so a list that genuinely owns its rows keeps persisting unchanged. + virtual bool persistsList() const { return true; } + // --- Editable list (the CRUD extension) ----------------------------------------- // A ListSource that supports adding / removing / reordering / editing rows. This is // the editable-data-grid primitive (the write half of the same data-source/adapter @@ -202,6 +209,31 @@ struct ListSource { // maps the result onto an HTTP status. virtual bool isEditableList() const { return false; } + // Render the rows as a GRID OF PADS rather than a stacked list: one uniform button per row, + // labelled with the row's `name`, clicking it fires the row's `activate` field. + // + // For rows that are TRIGGERED far more often than they are edited, a list is the wrong shape: it + // costs a click to expand before the action is even visible, and it hides which row is currently + // active. A pad grid is what a MIDI deck uses for the same job, and it is the same affordance + // whether the rows are a handful of named presets or a dense field of numbered channels. + // + // Deliberately domain-neutral, and a PRESENTATION hint only — the rows, their ids and the + // edit/delete/reorder ops are unchanged, so a pad list is still a list and still editable. A + // source that opts in should: + // - emit `"name"` per row (the pad label; short — a number or a word, not a sentence), + // - mark the current row `"active":true` so the UI can highlight it, + // - accept an `activate` field in setListRowField (the click). + // Everything else about the row stays as it was. + virtual bool listAsPads() const { return false; } + + // The pad grid's shape. Non-zero means a FIXED surface: the UI renders cols x rows cells and + // places each row at its own `slot`, so an empty cell is a real position rather than an absence. + // That is what separates a control surface from a list drawn in columns — pad 14 is pad 14 + // whether or not anything is in it, and deleting pad 3 does not slide pad 4 into its place. + // Zero (the default) keeps the flowing layout: pads in row order, wrapping to the card width. + virtual uint8_t listGridCols() const { return 0; } + virtual uint8_t listGridRows() const { return 0; } + // Append a new row with default values; write the new row's stable id into `outId`. // Returns false if the list is full or otherwise refuses (e.g. a read-only source). virtual bool addListRow(uint32_t& /*outId*/) { return false; } @@ -260,6 +292,11 @@ struct ControlDescriptor { // renders number-only for the same reason — a GPIO is an identity, not a // magnitude; this extends that to non-Pin numerics without the Pin type's // pin-ownership-map claim.) + // Appended AFTER the other flags and before `validate`: the two addText-family initializers + // below are positional, so this field's place in the order is load-bearing. + bool fader = false; // Render as a vertical fader (see ControlList::setFader). Presentation only. + bool encoder = false; // Render as a rotary encoder (see ControlList::setEncoder). + const char* faderTarget = nullptr; // What the fader/encoder drives ("Drivers.brightness"), or null. // Optional per-control input validator (Text/Password only; nullptr = accept anything // that fits the buffer). applyControlValue calls it on the incoming string BEFORE the // write and returns ApplyResult::Malformed on reject, so the check covers EVERY write @@ -361,7 +398,7 @@ class ControlList { void addText(const char* name, char* var, uint16_t bufSize = 16, bool (*validate)(const char*) = nullptr) { grow(); - controls_[count_++] = {var, name, 0, ControlType::Text, 0, bufSize, false, false, false, false, validate}; + controls_[count_++] = {var, name, 0, ControlType::Text, 0, bufSize, false, false, false, false, false, false, nullptr, validate}; } // Like addText but the UI renders a resizable multi-line