From 6e9c6605ccd6c0a91a27ae59cd416f902173bc2b Mon Sep 17 00:00:00 2001 From: ewowi Date: Sat, 5 Sep 2026 21:48:46 +0200 Subject: [PATCH 1/4] Add per-band audio conditioning, four audio effects, and ColorTrails The audio path now measures each frequency band against its own noise floor and levels them, so a quiet band is audible without a loud one clipping, and beats are detected rather than inferred from volume. Four new effects use it, and ColorTrails brings a Stefan Petrick composition across from MoonLight. Core - AudioBands: band edges are repaired so every band owns at least one FFT bin, where the plain geometric split left two empty and two single-bin at our resolution - BandConditioner: per-band floor and peak tracking with a compression ratio and a max-gain guard, the standard WDRC shape, switchable between manual levels and automatic - Per-band asymmetric smoothing (fast rise, slow fall) as PPM ballistics, and spectral flux with an onset detector for beats - BeatPhase and OscillatorBank: advance() renamed to advanceTo(nowMs). It takes an absolute timestamp and computes its own delta, so advance(dt) fed it the CHANGE in frame time: a few percent of the intended motion on a jittery device and none at all on a steady one. Four of five callers had it wrong - math16: ballistic() for the asymmetric follow Light domain - RadialSpectrum: the spectrum as expanding rings, one sector per band, radius as time; volumetric under the spherical mapping - VuMeters: sixteen needles with real mass and peak-hold, the screen split into sixteen square cells - BeatRipples: a wave surface where every beat drops a stone. Fixed a scale mismatch that rendered it black (a splash 15 units deep against a renderer dividing slopes by 512) and a splash that erased live ripples instead of adding to them - ColorTrails: emitters carried by a flow that is two noise profiles rather than a velocity field, so a 128x128 grid is steered by 256 numbers and runs where a solver does not. Concept by Stefan Petrick, composition by Jeff (mindful_stone / 4wheeljive) in AuroraPortal, via MoonLight - Fluid, Nebula, Trails: oscillators now advance on absolute time, so their jets and emitters actually move - draw::scroll moved one column per slice on the y axis and one line per volume on z; draw::lerp wrapped on a signed saddle; upscale16 put a 24KB tap array on a 12KB ESP32 stack UI - Every emoji carries a tooltip, on the picker chips, the picker rows and the card headers, from one table keyed to the legend - Power-function tags (shader, particles, fluid, transport, field, polar) group together at the end of a chip row, and the picker orders chips by kind, role, dimension, origin, audio, power functions, then the rest Tests - unit_BeatRipples pins that the water is visible and keeps moving, which a golden hash cannot: it passes just as happily on an all-black frame - unit_ui-emoji-labels pins that no emoji reaches a user without a tooltip, checked in both directions against the module headers - Goldens updated for Fluid, Nebula, Trails and BeatRipples, and the framerate audit gains documented bands for Fluid and Nebula: their emitters are placed by an oscillator and poured on a time budget, so a batched frame lays dye along a different path than a spread one Docs - generative-effects gains a section on what makes an effect good, written from the four that were dropped today for being unattractive, sparse, slow or static: measure the picture, match scales at every seam, keep feeding a simulation, fixed timesteps, fill the screen, and pin behavior not pixels - backlog-light: the fluid solver measured at 4 fps at 128x128 on an S31, with the wrong divide diagnosis recorded and a 1.6x allocation-placement effect nobody chose - audio-dsp-roadmap: band spacing, smoothing, conditioning and onset detection Reviews - None: no external review ran on this diff Co-Authored-By: Claude Opus 5 (1M context) --- CLAUDE.md | 2 + docs/MIGRATING.md | 12 + .../light/effects/BeatRipplesEffect.gif | Bin 0 -> 30977 bytes .../light/effects/BeatRipplesEffect.png | Bin 0 -> 17217 bytes .../light/effects/ColorTrailsEffect.gif | Bin 0 -> 1254543 bytes .../light/effects/ColorTrailsEffect.png | Bin 0 -> 25982 bytes .../light/effects/RadialSpectrumEffect.gif | Bin 0 -> 30977 bytes .../light/effects/RadialSpectrumEffect.png | Bin 0 -> 25185 bytes docs/assets/light/effects/VuMetersEffect.gif | Bin 0 -> 43115 bytes docs/assets/light/effects/VuMetersEffect.png | Bin 0 -> 18921 bytes docs/backlog/audio-dsp-roadmap.md | 304 ++++++++++++++++++ docs/backlog/backlog-light.md | 65 ++++ docs/gettingstarted.md | 2 +- docs/moonmodules/light/effects.md | 87 ++++- docs/performance.md | 2 +- docs/tutorials/generative-effects.md | 98 ++++++ docs/tutorials/how-projectmm-works.md | 15 +- moondeck/docs/screenshot_modules.py | 1 + src/core/AudioBands.h | 185 ++++++++++- src/core/AudioFrame.h | 16 +- src/core/AudioLevel.h | 18 +- src/core/AudioService.h | 74 ++++- src/core/math16.h | 30 +- src/core/oscillators.h | 9 +- src/light/drivers/MoonLedDriver.h | 2 +- src/light/drivers/MultiPinLedDriver.h | 4 +- src/light/drivers/ParallelLedDriver.h | 4 +- src/light/drivers/ParlioLedDriver.h | 2 +- src/light/drivers/RmtLedDriver.h | 2 +- src/light/effects/AuroraEffect.h | 4 +- src/light/effects/BeatRipplesEffect.h | 188 +++++++++++ src/light/effects/ColorTrailsEffect.h | 255 +++++++++++++++ src/light/effects/DissolveEffect.h | 2 +- src/light/effects/DistortionWavesEffect.h | 2 +- src/light/effects/EchoEffect.h | 2 +- src/light/effects/FishTankEffect.h | 10 +- src/light/effects/FluidEffect.h | 7 +- src/light/effects/FlyingToastersEffect.h | 10 +- src/light/effects/FreqMatrixEffect.h | 2 +- src/light/effects/LavaLampEffect.h | 2 +- src/light/effects/MetaballsEffect.h | 2 +- src/light/effects/MovingHeadEffect.h | 22 +- src/light/effects/NebulaEffect.h | 7 +- src/light/effects/NoiseEffect.h | 2 +- src/light/effects/NoiseMeterEffect.h | 4 +- src/light/effects/PacmanEffect.h | 10 +- src/light/effects/PlasmaEffect.h | 2 +- src/light/effects/PolarNoiseEffect.h | 4 +- src/light/effects/PongEffect.h | 16 +- src/light/effects/RadialSpectrumEffect.h | 154 +++++++++ src/light/effects/RaymarchEffect.h | 2 +- src/light/effects/RingsEffect.h | 2 +- src/light/effects/SdfShapesEffect.h | 2 +- src/light/effects/SineEffect.h | 2 +- src/light/effects/SpaceInvadersEffect.h | 10 +- src/light/effects/SpiralEffect.h | 4 +- src/light/effects/SpriteFountainEffect.h | 12 +- src/light/effects/TrailsEffect.h | 7 +- src/light/effects/TruchetEffect.h | 2 +- src/light/effects/TunnelEffect.h | 4 +- src/light/effects/VectorBallsEffect.h | 2 +- src/light/effects/VuMetersEffect.h | 176 ++++++++++ src/light/effects/WaveEffect.h | 4 +- src/light/particles.h | 14 +- src/main.cpp | 8 + src/ui/app.js | 97 +++++- src/ui/migrate.js | 8 + test/CMakeLists.txt | 1 + test/js/ui-emoji-labels.test.mjs | 66 ++++ test/scenario_runner.cpp | 8 + test/unit/core/unit_AudioService_sync.cpp | 15 + test/unit/core/unit_Oscillators.cpp | 18 +- test/unit/core/unit_math16.cpp | 28 +- test/unit/light/unit_AudioBands.cpp | 211 ++++++++++++ test/unit/light/unit_BeatRipples.cpp | 46 +++ test/unit/light/unit_Effects_framerate.cpp | 14 + test/unit/light/unit_Effects_golden.cpp | 12 +- test/unit/light/unit_Particles.cpp | 4 +- 78 files changed, 2241 insertions(+), 179 deletions(-) create mode 100644 docs/assets/light/effects/BeatRipplesEffect.gif create mode 100644 docs/assets/light/effects/BeatRipplesEffect.png create mode 100644 docs/assets/light/effects/ColorTrailsEffect.gif create mode 100644 docs/assets/light/effects/ColorTrailsEffect.png create mode 100644 docs/assets/light/effects/RadialSpectrumEffect.gif create mode 100644 docs/assets/light/effects/RadialSpectrumEffect.png create mode 100644 docs/assets/light/effects/VuMetersEffect.gif create mode 100644 docs/assets/light/effects/VuMetersEffect.png create mode 100644 src/light/effects/BeatRipplesEffect.h create mode 100644 src/light/effects/ColorTrailsEffect.h create mode 100644 src/light/effects/RadialSpectrumEffect.h create mode 100644 src/light/effects/VuMetersEffect.h create mode 100644 test/js/ui-emoji-labels.test.mjs create mode 100644 test/unit/light/unit_BeatRipples.cpp diff --git a/CLAUDE.md b/CLAUDE.md index 9d644695..989254e0 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -12,6 +12,8 @@ A high-performance system driving large LED installations and DMX fixtures. One 3. **Architecture first.** The domain-neutral core owns the hard constructs, written once; the light domain stays simple on top of it. Platform-specific code lives only in the platform layer. When core enforces a rule on one path, extend core to the next path. No hacks: fix it the standard way the moment it's spotted, or backlog the real fix by name. Default to subtraction: the first question on any change is what it can remove. + **Build the best solution, not the compatible one.** projectMM is young and has no installed base to protect, so "it would break existing configs" is NOT an argument for keeping a worse design, and neither is "someone may have tuned it by hand". When a better shape replaces an older one, the old one GOES: two mechanisms doing one job is the technical debt this project exists to avoid. The break is documented rather than carried ([ADR-0013](docs/adr/0013-no-migration-code-robust-persistence-plus-documented-breaks.md): no migration code, robust persistence plus a documented break), which costs a MIGRATING entry and buys a codebase with one way to do each thing. Weigh what a user LOSES, not what changes: a value they can re-set in seconds is not a reason to keep a design. + 4. **Guardrails everywhere.** Every behavior is pinned by tests, unit and scenario, whose descriptions read as functional documentation: a test states a behavior a user could understand, and a trivial test doesn't earn its place. Every commit is measured (performance, size, repo health), so growth and regression are visible the moment they happen. Judgment is reviewed; everything else is checked by the per-event tables. The final guardrail is physical: verified means it ran on real hardware, with the bench and the product owner's eyes as the measurement. 5. **The whole repo, continuously.** We are responsible for every line in the repository, not only the lines changed today. Anything spotted in passing is ours: a British spelling, a stale comment, a doc describing what the code no longer does, a duplicated block, a test pinning the wrong contract. Fix it in the change that found it, or backlog it by name; walking past a defect you have read is what lets debt accumulate. "Pre-existing", "out of scope" and "not mine" say nothing about whether the code is right, and the next reader meets it unchanged. The one thing provenance IS good for is scope: work belonging to another branch is backlogged rather than smuggled into this one. (Applied to review findings in [§ Handling review findings](#commit).) diff --git a/docs/MIGRATING.md b/docs/MIGRATING.md index bd0500d3..46efd756 100644 --- a/docs/MIGRATING.md +++ b/docs/MIGRATING.md @@ -24,6 +24,18 @@ projectMM ships **no migration code**: the persistence layer is robust by defaul ## Unreleased (`next-iteration`) +### `soundReactive` is now `audioReactive` + +**Action: re-set one control.** Affects Fish Tank, Flying Toasters, Pacman, Pong, Space Invaders, +Sprite Fountain and MovingHead, if you had turned the control on. + +One name for one thing: the service is `AudioService`, the frame is `AudioFrame`, the effects are +audio-reactive. The control that made a sprite effect follow the music was the last place still +calling it sound, so it is renamed rather than left as the odd one out. + +A restored config maps the old name to the new one and carries its value. On a device upgraded in +place the control returns to its default (off); switch it back on where you had it. + ### Noise2D is gone; Noise renders it **Action: re-set one control.** Affects any device with a Noise2D effect on a layer. diff --git a/docs/assets/light/effects/BeatRipplesEffect.gif b/docs/assets/light/effects/BeatRipplesEffect.gif new file mode 100644 index 0000000000000000000000000000000000000000..a2dce52cdcb5a7583f3c6eac08ce40cf10fe061c GIT binary patch literal 30977 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 literal 0 HcmV?d00001 diff --git a/docs/assets/light/effects/ColorTrailsEffect.gif b/docs/assets/light/effects/ColorTrailsEffect.gif new file mode 100644 index 0000000000000000000000000000000000000000..f942f845fab3527bb830c0e011d3981041d82800 GIT binary patch literal 1254543 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

6ydW~(xBN7Jj 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

NQ3dNxKkaWE1>9n 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

aZHR?BncshJWEaopODwIzg@5p9_hm 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%0AY!!5t(!qjQ#z)s0NxI09Db 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 z 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

q$ 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

hKPuFGV70pm$5T94Gc4#=QO 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

L|E zZdq?%y5s#(0LwryrFkzUv`+0mNgAn9K4jX)jHOa#zz512LbASyfFX_mrPQ859Nr+t zJelx7BZX2rFOfTBtDOp~7&y>lJF8^kUG-abMpS*OV|{GR-1e?&&`fK$_|G*Y>)s{yJa&X1@cyveGBJt3kIHk#jW@P@1{UMt<9dNCvgz6>=iC3F&S znFVwa#QR2~I_?ds22w{)^9oN%w{~&Mm7n5`GfgK_ta{4}+TXslG`@CbRr7-NAUd-u zWuQFwWqCxpU;?PlnW#dD(vW={U?`URzy8>|h>*(rJg z$E#;42DEe~JjJ*to$naXqL2Przxt&%Z;;?fY2WZqH@wT!dyi+uYMEl1TuOvu6}#9A zU==baR$IngFd@6*r?`WXY`VJ%%<4@GQPMjIKh?kVoNfCe7wXp)p)gsok@wVl!PUm* z$~a{i9Nb!l z#f+BHxTTs&%Cp23!ntbEKW#Jg6PVF0Ge+2RP6xT!j=9eEgm`$xxmWP~qKJ7tG4n~y65siU4?vEw zj8iV?%9cMCVsv#KBh*SPw3Q=m=&CA>qk(biqJCXh#Huzr&7@nG!&}i-0hvC_wlS9Z z&>EsaW*}%^f+B_|T+J&XN8{MSytf+6|9F$nyrmu%Z>cr{KSUPOW` z4}0jP>rOlahMBTEY4@a+1Z z3;UX$Fde*NGTOf0(lUPWh;Pk%c>84{uQ)EJw_Y>wCnx3VouRXnIx5budY?4opU*y5 zx2?9{nZfzo&N}ZhT=q=XRM6wN^skAk;?Et7oj!qEO~YPf56wu3A-WbP^{Cy0p3;S>RWX6*Uxjb=jPEe zzHOEC`y3s(JGR7?9OvzZzN`xx^nG(Han5zw(2MPJbSKIfqk{ACFfW(d4FWs5ubMur zWgm*>;rk$-Mwn%GFOK?<=D=DTah2v>4|OKu^$~S$QMIbHv}rAa8f==_w%IG;f%!_} z*z8FNszKl3P74nU6mTi_elxwR=Ut}j^P;zzVRu4}opIZSCSQ+pS3F2X@AD@UUaxbO zk|Xa+)sF(8!4nQV|E}b2u)k||vctPPEfM)H-f%f#KZ@ruq_6g8fc>v#?~ngWj1Ty@ z+9|;hqM_};y|4R&q;T1Z+v8~-9|~ssUM%7#h0pS|%}1R-oVWsJeei|p2mK>~@K!S+ z4=-zdc!S3=wO>1OsR}?LWnv4Z`;78eAW=if9dNNplZ8e3ljQRnh&UN+TE4c)B>kBGNi_hIxlbu-+hehO%#c%A$XEvJd=;38dq4N&~cdG(N^zlwlFrN5uP z&raLsdLI@W%phy5=?tAIv^mli>i()l(XJG5zjV5qEc^b#*HoiH-{ zaaMqhps_+NS^X(N6SK$VZGK8FAeZufeY)lDsfXvB@@%D-9Hqs8<}^eBFOlX&UuX;W ze%cJVb`GZk_FBi_5Gw@(`E*b9nSW>l4$wo95F?&5+P*tN^hXoOH}?~9(nilKgCIDY z#KH7m7OqxjEH&Mb(xrVHF7JwZjEi=4@69_n)BM#@c(LZHa90uFu9jDz-A%4uFD`p> zWsHex6{D4CPjol4*gb@c>}!WqX47Ov*=3xKMl+J#6FPcG!J1J|a@tJ%upt5-PI-{o zA}942oQj+W3?q=)=M#QOEnrc!?HA%-bzqdTeG(7VxR&(My!y01EY2PtUrf*qMrwza z_l|-AH}qJsgf$l)Z{W!MM_g^ zf%~AAHGUzD{=IKQ;w7`IPm3nJ74Mo5Yh+wE!BFb)4cwMD;n5GShA}P7RnjK-O&ry! zJ&uS<7}TfN(C=*B6)pxIcAQu)kQ4J-_Crb5${;$(a9XSJDN_=WJsL>bwcn}##T90} zWn&hTvvJq?b4Ip{tPUwY^=mbIQPY!Y!Nj~(tFdsmHsi1KBbG{y= zFWtB)Z@-Yn*NUFBi&@Kb3Uom1#3pHQxgkwAm|We^*i6X{(_q6wsEZ-y1cOgMV50OE(H2IwU}Tv~eqtXKekOzisI zF}S1E5O#BzQy1v0 z{E1Y__Q(oz378TnLxJStbzWachp8Rf;CnIA-{<_r+`dfXt{*G?e!5yY^RDQ`6czU4 z+jKb8_P0s)G*jH>EzWob>8D$W2J}eCNRMt-!ND^*(^z`zGK4x|yH)!Xn z*l@#J1+AxD%+5BBSh*8q9Vr#x>*|N)-*K89!?l}=$S9Lj6-@yehfUtDXKR)@G-PQ1 zMqg221!7wO0XyWyT^wlw#nB%&d$j(z&OMe4v*t&v8q|U^1H)t4gN+F8JnD`{?$C3a zgDBFN!tPCBlT8DVVjgOGMGJW_0<3s7DdEH0u`wy6cCpDf>#x#^z?=N`;;5sqWQ zw;_JZJ`Q5l21jnVNuwIgV-=)3+*gOICFz>dc_Mc~)iJIIeDOOusf_?($``xPb51bU zWGw4}9qpJt>Y?w(bT08{x)nsEHxZNg`=>o`OBwgeQmtci3DEYYy0Xat_9KbvmfAPQ?3~SrkyVECEY(XrHK?uYz0~^l#8T`!`#&57Mrbpy2Y6qX z5w-Ju=Z+R4be8I}&o(2MN+B2Sk`eqp5H)K_njA}BasOUhHILGu-KzTIRs^PP`sH6A z^Gn*W$DcO4aE(8By`|AS%xsnkcl)sK7GspGI^j=d^fsba0Ntg+mYEA1@ z`-M03zuL@D>TNcSS;pM`sJvi9KAoZZH~iDaYDlbx`o~b1@v5x*zQdfYQ+mP1=_Ck_ zC*C@$AW@MgEs*cW##D9689ps|SOS-pW2bbhk1`v;xHEh#xRqm4PGFjIxxtwbb+_8Gj@Vc{V z;HtRosD`rC5HFrO^xbanLS5$IW`81huBb!G^CmrAr9Ef9F|}$`Qlhz%t<5|o_Xr&y zBpdI+gp2dE0)G%0c`q{hNq`b~pEiRMbAX;i`foSR&~`D~J$h3@DDf7Sgl|l$50!^h z5eTOJ_ahnBORZG9G@cyYPJz?4$fNr7SiDQ#kw{+iC?uOaNgv^Ls6;nPdUH9}5MPq9 za?mqTX&6<9!2ZsG1AX?p-;!6K+H&VG5{;3oOVB+*AfziGLLHwz9Bbn?WC1Z<|p$nRXsCK9ZiH{`vdE*D(vP z%qktrN97Z_nkkR;NcKKPEMR^h&=iuV$7w2ppMs-I4YO+_pPJW@Bs&!3?q+i@xY!w( zyo&XFi5%jFg2j=lGzw)7G=)8Y%)_bTZC$OBZUKxGYGWtS6r%V=d8XxV^)w>W*!y4( z$;rVD>$WEs;f7V6i5Cd#BCu-W)U49Z^D9sXJ&n0`YEE6=Nk!^Oi_gM%JVU198d5UU zD64fR&C@*3LO4{pITVW-y?}c1I>d75kI4CYz{w`)AMor>vZ9c5qSWvB503u>oT!xG zIKn~g%m|e;WTXRE^OMsRhgfiLKAzk|I#!VPb7~$7=VujPMhCj4^xQ{Cd}dz#3x9HI z>-h8xoL+o+Tjb?M7wOxtccN86+jGlbv|dTqUw*Kt(_Z~8IYXMk=;!2j&R;W^eDKz? z_S5)FWO+vajY+EB4E^Qm{2Zfb!E|y;nm?9QGB2;B^M`AlDmAE_wzGCEKr_g#W;z=u zCgdGKjCgi2I1~-oY64Z@JKO*(XByH182z1F{~aK1qDZJFpGFEOAh715&D<2*tmzkPJrPd{A9ST z4zo>I|8QAcbE$tMxtf#7(3 zaQv$zfN2vxfDcd0>kosd3z{Ie3G2ApS08cupjL8RbFVfnER=K|gxx~%@DFgpm=4z{ zB1mfCVY_pOUmjl0_{B4K-CFaVL6~0XwJuZ>Sx+Lx?f-#7*35PhTPuhn1bjHx3Z)+V zi<1Fdt>!s>X2(!MWYy5s_`@$mW?-(h$v!FeQDo$@4w2G>zfAYAW;Gu?6Y z(Pf&9hqk6b(w&2GKOl-t@W5E4MGr~wtw9TFN*2`YN_|t(Y5!*^8A-u~%O(hZRznsQ z^)f2N-{Dj}2pCvCBuh^2~#-7Ql0u2a)R8VGqbXVW~UrnI_ZXE zi8-&t?3kkO2!=#@%prwoWXL4#xv&KJ1s3+BVQ8oM*`)}#MDpZa29%aBL7x4P3K2fE*|3#myS*}FM`ghAf6 zC1i38_j*D-g=Wyji-|p^q`fvBmjH=U-D+z2@*BnqCO@(z`@QW*Y+)p>HK)RTp0AK$ zOma8>VFFbpn%Wcm%`}xKRBw*Weil}Oq#EZ0@DWZ4KD?0Y+SBe>LIh`M=|iNfNRDPC z9n0dnW|K4S&U=+aocZ;1cG&-8L0$V@&5stRb*7wk!2=W>PDK>W{aWI#+%>$9m-8vT` zVUMdpASxt_n{@T}4t5=pAVdJEO^7u^WJhcr`uKNLd;vn$q}1B!fWc@i5hWqmHAz*| z%$|8cVIHKbg@XA*w12@c%Pe0C&s#%KWK{|j?Th1n5-6e8>hr;qqfRmnnSJ~T%BIH^ zlY*%B!%;B*!~TGn6utsy_L{c_$wdm1riMXJXOxV1 z#igI9ZBiUG6Q^6DlNR#DRNS>l{`8cY1sDrf z-sP>R#0>8O?iUCM)i~ogU3Dsr(|?nvIm(0SQH0%D1})&WS8(Ot>ZRTv2uQt>?hnL- z`SnmajOkxE5*>W zLd$xgpRLZBCJ&FB)}FuLl%yc74zxDelCBhoW%bS!nW;xb>y2<2mG2P(&>|m1CV@V0 zgkwn%gCAZwWu}a9v9)^$L8ws2SUdd9$o9lsGE6p0gzLOocSW|~>uTD;kmlYvBD{!A z8)?X0(cK-u5c136+v5?p0z0#Zh%CHHPBw&_+L6$o-DG4S**@u&HiK+;AS*E0)PPq? zS3b-v0TNlaV@7+D74nWJIT=aZrI18T-dHY&i!>dDK+=5IF&iHB&(HHdE>6x);;Qig zeiE(bsZ;jEppw55Jz?0>9AG+$>WK^}q1(NnM##~p>q-k!i$n9LbUj)>R7 z7ohOA@Cijk;Y-AqPh2&-#tU^IYNaTij8&Y?l>ag1H12?=LxmsRQ;1Qjho143%ewE_ zWnQ`AHpEQ@UdIs9|E?!?>Gt=z{rjfFwU}(e2)U>ol6J(BxMK~H{jDQBf2;0 zsCgKhVb`XpE&D5UXMMyLH@cT%Rj0Gt z%mll_3SdEf5!otg9REhg`hJ|$o&J8?c+Ot@kO+6I|1WK1qXk|T$EQ3%04!PPPnPz4r3D_T64?SesSD-FM1v-OK9A>k8ai@Xv{{k-slH+3hp0r$9XQ5`uE0hm1$ncy}_%(#(`;lK0mFN5V=ypVA^h|ckmD&uB%PcyYKrpZ|k}( zGS#ldY#FjA^+&JD^di-lG(&;0R8==ATDfm~n26jjdXX(jfrl@+{TQ1vv9w7P?`_KA zu!9dD(D^KopisP^!MHuwJJt^GgMx2ArEN%evvOyg!*SOce3N8nGAez6@P0Zxf5R-T z(zo&xo{m%Q z2e>q4FD7o8>xul&!f-+=gzxsIl^*WXE(I)-U0NKg+EE~C$=@Xhy@j6V&S_{5miA&m zG)JatYAoXpChrz;2cNs4dgb%IP>YNF8gx&|SpUbiAXViZ`}}4Piqt?CL0bj_*CRQa zXFz0}f4_QhwpyhkzyGR%vnIpv|*cPDa$J>hke12DW<`z{jLJ6a7)?5wo)iG z{e@LCiTTC;yehX?Y2_avh_Q9H&Cvr%2&b)6^3y?%M{B2m(jgAJDFcCPed(M*)ZJaB zo5gJcMT4D;Fx&cuA)VmMm#f3*N?jq*=ToGpAQEn~sa?k1f5F%gZ(LizO#&(_%|W2# zo~LPCm$Ws;32e~Jcr6rm4xpX}h#@8bgUa|}8VCj@nmOo4K#@3rhy0+~-2l1Cgk&=* z-@F2+aZRJx6d58^@CaN-p@anhT9$GH3bqgt`^tfkn7G3oyUHna+Em$7ut`9A!tq4L zQ5_EXZUbmnA;dC~h=3103?-tO>dfY6AFi=6>(=8>I53rer1`;@NJQ#!l#cJEaaE9; z0{DC@^-JU(+93@lf;dXR3B|#I2WhzGVMb?Wd}O+n_0Xzx%cCO@)+Dm2_+z8J76@D`K%?HWclw_ zf`a|sLZ51>cO1{rR>GKl97v+aDXS1P6nH%TUynZ}8p88r?=63)6W2gpzu!xr!Bi9CF^%?|V|FLHS*wD@hz-qGp!YAnBpC5FQugN2XF%=WJOO zb!KPj28y?O651ch{pwF`DZtvaxh%)*eSeS<^&vvbMf|+@l^<?YF)~pDGR*hMNVAk?dHOv4w{#YLHQjjRy~q~KkKj3l(NkQ z00_VKwnHEKYRWE{y^jHWz!zme5f zg!}lR4?8a&F|AK>X=lR$1BvHUPU3kUJX-}qa zHeF(u^f8%6v)hl_@@V}FZaRT;Z_4gtmj8UFQ@+$@6!*yurE!x`*HiTTjX zR17hl3Xr|ue}l_af#+_(4igE4!bJt7?(vMS`Oc935=BxbQPeVl$;4{+MsUHec*`EBy5Hu~xnfK%0!hQrwp(i3x4usO?t- z6RmKlMpH}*w$J5+%8>*s?+gxUt8O@5Bd_6kOQjXP#KkULLhD8 zJg@{RB_ncEhE1)i?B;UW1Zztl-Cb2Fw9>2l9RD_o=}y9G2wH4(U;Ojl>L#yq)M2Q} zoo8KA4K4m)W_tr~Yd)e5$SJ+d{w@)+NUo3z>N%`*)o(E2^3yTUukrcu7gvFGD6;yjEo#7(FX|wQ+aCTE`1V5*yv)E z&=ZUZg=^=qrOGQWZAu7lqoJfH%yc8-*o(V@jF?bSr;Leq4MK zcxZLKiGzj;>!vFXJLKKcKG$H3sf74E;Gl2fX352`lf_aw0A@;71@v+;O0Zg+x+hi9 z6)NxI0)A_g!`vkCIkorogD%e`%s`dL842|8pbOpTLdxk!`vNMBUe)pq-C7u42=gw- z1d?bpMp;o4MS9fR2xqG#3063qV!V+sCC6Ng(p5MTPuUKPa4MivTciv_sYXQ(J~EYo z1gg+nHr2zZjn}~#j$VgHMG;|R0n&K`eKxL{YKcz;6VeGd-U`PMheF9nhxdr>P)wv% z8Fd+sv_FMEj6;M65cZtm7tpv+Bf|R!&Ru>q`@Ijf4~)Vme{Vu;dc>B3EL%QVw6B49 zk9_($%eJq_V+6z)3#B>98H z(kEz(G&G2alioP_^BW3_S)(A(OR2Q_WTg3}&(Qu+NyH&foMvL-5)vdCQ@KX^)T>B5 z0R`f+Erlri>6i%zGK3|=DF`A(Qcbc}r(B1kjp(Va`|dcBK|;RekROTL_oD}y=1?Of z=EFP;KVG=n-I(fBGgfI#m{S;)O@xbWP>%jkP9fqBMtS2QA7|;q+Zt5Q`9gfVkek+0D8{p#k;dyFWB7d8azJeY{V$(Y?tGHE(bc zSTC(61Jf&WzZ2nuO-NX0V9T5trl-gW;O0QOev%yMZ}LzOmsEX_D&MCYTY9Ar-mW?) zR=HZ`45gFU)4D`x1_ct&b2^XGKEQAC>ZI6h5>I-Fr+*XDY4o~c1^yDx;>Y5dec*~! z{F;C!^@$2F=JkkTfZfTc>v1)eB=O#(_f z7a4Lx036PB1Etwri7{ItmtZR|d)e^Td{e7NFbZ&6&C(X?vL}HqMcxD3-0P*xXH71f zl5Tx(a^Iz)`CG^P6ZBGzYq62htr3a=<;>)Ajp8eP&@Sr!V+gGfO{wx!KZw4N@6KG5NH`s5I@0_Ug`Ov-gF}tY27?0ANKuP1^J)3KMF{rTri$4MJ zNs15wiF%>z`nU^SnOtl2vYb>;BP7Jj-K-1Q_R{FHMYWzlvsXl>gh z!01=Hs*l!JJN0fj-nQYq_`Pjklt=}YUV~d&#`|7=>x(xsd)9~eQ8yCej#VCI62q|# zQ%cv5`Dc80(!`%$KZk!EOW$euuX7^0YT~2je+!;uJS)t!^p8(Hx#f6g8S-U|!>@bK z`6KbpabFMbwY0-6%QJflGZUt5oBm!|b#mMERT-yyHw^m5{?@Pb^&fwcSyuFGLokk< zij2P0d?fxx?cXW&zjex-Tbxp&&Ovn6jXb&iw6{t-EA7Pj3C@b!i7$dAEtZ z^odt%_OGfr*Aho0dqz3+`mbK`Vnk&8wM*arc5$`0580RZ9iXjxKU4W=(>giBg)wRm zHv_Y190FZl+s~Itx`cv^45uUlq2D%(qSq2uO@y@VPtma079&30fWzWpkJJwnml$N7 z9`?0^W&xI)UrC?J6qdWpU-9g53IlcKA&;_k+A+Tm>GnIszO3Ir#tzIk!|bLJN}he- zZu>&}BW!cUyIxDz*2Y)5_Apxyn6Q2N_mcrA5v&37tLENaj*AjnES%!~TU};HZ zoJ@IlYxwFxb%r?e)wr=y`9p43#JBU_-ijFISq*!g%_-qzZie4EV=Z|$Rxqo#fWvAy zVyYP~UHkRcp{DPGmtN7Kx+{tQ%P=qCN0-`>e?~qx#s*wAiP4Gkp6eUD{zHj zM<6;!!G}=C6nqx!VELR0(>-nYjW6zo*Vk-;1Ww~%2IBY8;Y!Upx3L-O$;-#u0OAs3 z#Zh*Y61waft1>hECR2_Ix2Q+*j`?#o4qxY1Le0u7=^l$XSCv`q5t(&rj#KcXcbS}J zf6s^i3V0M~V6RTLf4Jq%T6Nr9qN~)%ohuUa2VH)UsmD5Rin)!8CwTJdPJK@KaZYGy z)349Dr96%6C@N@$H@u~`gMH|Rv4R`-s#eFV!Q9fBncd6e;* E{CGc5#s^uWX}YI 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�ld?ZJ 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
  • pVtUjojtqFIYW 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%0DYQlS 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 z]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 literal 0 HcmV?d00001 diff --git a/docs/assets/light/effects/VuMetersEffect.png b/docs/assets/light/effects/VuMetersEffect.png new file mode 100644 index 0000000000000000000000000000000000000000..617b6e02464506fd74cac89ca2b7ae3903364fe1 GIT binary patch literal 18921 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 literal 0 HcmV?d00001 diff --git a/docs/backlog/audio-dsp-roadmap.md b/docs/backlog/audio-dsp-roadmap.md index 5955c099..622f1704 100644 --- a/docs/backlog/audio-dsp-roadmap.md +++ b/docs/backlog/audio-dsp-roadmap.md @@ -42,6 +42,14 @@ His contribution has two parts: composes cleanly with the adaptive gate below (a learned gate on a cleanly-filtered signal beats one on a raw signal). +**LedFx** (Python, host-side) — a network LED effect engine whose whole purpose is audio reactivity, +running on a PC and streaming pixels to WLED-class devices. Different architecture to ours (the host +renders, the device receives; we already interoperate through Art-Net / E1.31 / DDP in both +directions), so most of it does not transfer. Two pieces of its *analysis* do, and both are studied +in § Band spacing below: its **mel/bark band spacing** with hand-tuned variants, and its +**per-band asymmetric smoothing**. Worth naming because it reached those two independently of the +WLED lineage above, and its own source comments are unusually candid about which variants work. + **Damian Schneider (DedeHai)** — WLED core dev; WLED's audioreactive usermod carries an integer / fixed-point FFT path (~1.5 ms on a C3, >10× ArduinoFFT on FPU-less chips). The consensus (Troy + Frank) is that with esp-dsp FFT + biquads, **fixed-point is not necessary on FPU chips** (S3/P4) — projectMM's @@ -72,6 +80,302 @@ All of the following widen the **source seam** — what feeds the pipeline — l Troy also has **DSP boards** (I²S front-ends "way beyond regular codecs") — recorded so the line-in / codec work leaves room for that class of source. +## Band spacing: the geometric split wastes a quarter of the display + +**The defect, measured.** `magnitudesToBands` splits the FFT bins geometrically: +`edge[e] = nMag^(e/16)`, equal frequency RATIO per band. That is the textbook way to map linear bins +onto pitch, and at our shipped shape (512-sample FFT, 22050 Hz, so 256 bins of 43.1 Hz) it produces +this: + +| band | bins | count | Hz | +|---|---|---:|---| +| 0 | 1-1 | **0** | 43-43 | +| 1 | 1-2 | 1 | 43-86 | +| 2 | 2-2 | **0** | 86-86 | +| 3 | 2-4 | 2 | 86-172 | +| 4 | 4-5 | 1 | 172-215 | +| 5 | 5-8 | 3 | 215-345 | +| ... | | | | +| 15 | 181-256 | **75** | 7795-11025 | + +**Two bands have no bins at all and two more have a single bin**, while the top band averages 75. +A quarter of a 16-band display is dead or nearly dead, and it is the quarter where music has its +energy. On a spectrum effect that reads as bass bars that barely move while the treble end is a +smear of everything above 8 kHz. + +The cause is that a geometric split is scale-free but the FFT is not: below `binHz * 2` there are +simply no distinct bins to hand out, so the low bands collide. Raising the FFT size fixes it by +brute force (1024 samples halves `binHz`) at 2x the compute and 2x the latency, which is the wrong +trade on an MCU. + +**What LedFx does instead.** Its melbank offers six spacings and its own comments rank them: standard +HTK mel is "weak on the bass and high end"; `bark` "needs tinkering"; plain `triangle` "kinda sucks". +The two it ships as defaults are hand-tuned log variants, `scott_mel` (base 9) and `matt_mel` +(base 12, the default), written explicitly to "spread out the low range and compress the highs". It +also splits into THREE banks (lows 20-350, mids 350-2000, highs 2000-15000) so an effect that wants +bass gets a bank resolved for bass rather than picking bins out of one spread. + +**What to take.** Not the three banks (memory, and our 16-band frame is a published contract), and not +mel as an unexamined default: mel is a perceptual scale for SPEECH, and its low end is coarser than +ours, which is the opposite of the fix. What transfers is the principle behind `matt_mel`: **choose +the band edges so every band owns bins, then bias what is left toward the low end.** A concrete shape: +start the edges at `binHz * 2` rather than bin 1, enforce a minimum of one bin per band by +construction, and distribute the remainder on a log curve whose base is a control rather than a +constant. Cost is zero in the hot path (17 edges, computed once per rate change), so this is a table +change with a golden test, not an architecture change. + +**How to judge it.** A swept sine from 40 Hz to 10 kHz should light each band in turn, one at a time, +with no band staying dark and no band lit twice. That is a unit test, and the current split fails it +by construction at bands 0 and 2. + +## Per-band smoothing: the ballistic belongs on the band, not the effect + +`smoothFollow` exists (`math16.h`) and `SpectrumEffect` uses it, together with `peakHold`. So the +mechanism is built; what is missing is WHERE it is applied and whether it is asymmetric. + +**Today** each effect smooths for itself, symmetrically, if it remembers to. That has three costs: a +new audio effect starts jittery until its author rediscovers the problem, two effects on the same +signal disagree about what the spectrum is doing, and a symmetric filter is the wrong ballistic for a +meter, making the attack as sluggish as the decay and rounding off exactly the drum hits an effect +exists to show. + +**LedFx applies an asymmetric exponential filter per band** inside the melbank (rise 0.99, decay 0.7: +fast up, slow down), so every effect downstream sees an already-ballistic spectrum. WLED and FastLED +converged on the same asymmetric form independently, which is recorded in +[power-functions-analysis-bottom-up](power-functions-analysis-bottom-up.md) G4. + +**What to take.** Move the ballistic into `AudioFrame`, beside `level` and `levelSmoothed`, as a +`bandsSmoothed[16]` computed once per block with separate rise and decay constants. `bands` stays raw +for anything that wants the instantaneous value, exactly as `level` and `levelSmoothed` already +coexist: the pattern is established, this extends it to the spectrum. Cost is 16 bytes of frame and +32 multiply-adds per block, which is nothing against the FFT. + +**How to judge it.** A step input should reach 90% within one block and fall to 50% over roughly ten, +and a kick drum should be visibly sharper on a spectrum effect. Both are testable on the host with a +synthetic signal. + +## Per-band conditioning: the generic form the two above are special cases of + +The two sections above fix band EDGES and band BALLISTICS. The third axis is band LEVEL, and once it +is per band the other two get easier. This section is the generic design; the industry names are used +throughout, because every part of this is a standard piece of audio equipment. + +### The problem, measured + +`floor` and `gain` are single global values applied identically to all 16 bands (`AudioBands.h`, +`magToByte`). A band reports the PEAK magnitude of its bins (so a single tone lights one band rather +than smearing), and pink noise (equal energy per octave, the standard reference for typical program +material) has a per-bin magnitude falling as 1/sqrt(f). So under pink noise, with one gain, the +bands read: + +| band | lowest Hz | relative reading | +|---:|---:|---:| +| 0 | 43 | 1.00 | +| 4 | 215 | 0.45 | +| 8 | 689 | 0.25 | +| 12 | 2756 | 0.12 | +| 15 | 7795 | 0.07 | + +A 14x spread across the display from a signal that is, by definition, spectrally balanced. No single +gain serves both ends: set it for the bass and the treble is a flicker, set it for the treble and the +bass pins at full. Every microphone, line-in and genre shifts the curve further (a MEMS mic's own +response, a room's bass build-up), which is why a hand-tuned table is tuned for exactly one setup. + +(An earlier draft of this section had the spread the other way round, from a bin-count argument +that applies to a SUM per band. The aggregation is a max, so the treble is the starved end.) + +### What the industry calls the parts + +Naming them correctly is what makes this recognisable rather than bespoke: + +- **Band gain / makeup gain** — the per-band multiplier. A graphic equaliser's slider. +- **AGC (automatic gain control)** — deriving that gain from the signal rather than from a control. + Its two time constants are **attack** and **release**; a **hold** delays the release after a peak. +- **Noise floor** — the level a band reads with no program material. Learned per band, since mic + self-noise and mains hum at 50/100 Hz are not flat. +- **Ballistics** — how fast a meter rises and falls. **Peak** ballistics rise instantly; **VU** is + slow and averaged; **PPM** (peak programme meter, IEC 60268-10) rises fast and falls slowly, which + is the standard broadcast choice and exactly the asymmetric filter § Per-band smoothing describes. + Naming ours PPM-like says more than "asymmetric smoothing" does. +- **Weighting curve** — a fixed per-band offset applied before anything else. **A-weighting** (IEC + 61672) matches human hearing at low levels; **C-weighting** is flatter; **Z** is none. The + "loudness" button on a hi-fi is a bass-and-treble lift at low volume, from the equal-loudness + contours (ISO 226, the Fletcher-Munson curves). + +### The design: two tiers, because full per-band normalization is the wrong instrument + +The multiband dynamics literature names the trap before we can fall into it. A compressor that +normalizes every band independently "throws off the entire spectral balance" (Recording Magazine on +multiband dynamics; the same problem is the subject of US patents 8,634,578 and 9,673,770, "multiband +dynamics compressor with spectral balance compensation"). Music with more lows than highs is SUPPOSED +to show more lows than highs; a display that levels every band to the same height has erased the one +thing it was meant to show. The product owner's instinct here was exactly this objection. + +The standard resolution, from those patents and from hearing-aid WDRC (2 to 24 channels of exactly +this, on DSPs far smaller than an ESP32, so cost is settled): **two tiers with different speeds.** + +- **Slow, applied EQUALLY to all bands**: overall loudness. This preserves the spectral balance by + construction, because every band moves by the same amount. It is the global `gain` we have, + made automatic. +- **Slow, per band, converging to a STATIC curve**: calibration. Mic response, room, bin width. It + learns the fixed shape of this rig and this room, and then holds it; it is not chasing the music. + This is where `ratio` lives: 1:1 leaves the raw balance, higher ratios flatten the rig's own + coloration. +- **Fast, per band**: ballistics only (the PPM rise and fall). Never gain. A fast per-band gain is + what causes cross-spectral pumping, and it is the one thing all three sources say not to do. + +The sequencing is a dependency, not a preference. WLED's own docs state it for their global AGC: +squelch must be set first "so AGC knows what silence looks like". The floor converges BEFORE the gain +loop starts, or the gain learns the noise. + +Three per-band arrays, all computed once per block, feeding the existing `magToByte`: + +1. **`bandFloor[16]`** — a running minimum with a slow release, so it tracks silence but recovers if + the room gets quieter. This is the frequency-domain half of the adaptive noise gate below; the two + share a mechanism and should share code. +2. **`bandGain[16]`** — a running maximum with attack/release/hold, normalising each band to its own + recent peak. This is the piece that makes band edges much less critical: a band with few bins + simply learns a higher gain. It does NOT fix a band with zero bins, which is why § Band spacing is + still a correctness fix rather than a taste one. +3. **`bandsSmoothed[16]`** — the PPM ballistic from § Per-band smoothing, applied after the other two. + In scope with this work, not separate: gain decides how much, ballistics decide how fast, and + tuning either without the other chases its own tail. + +### Weighting presets, on top rather than instead + +A learned gain answers "make every band visible". It does not answer "which bands SHOULD dominate", +which is taste and genre. So a **weighting curve** rides on top as a fixed per-band offset in dB: + +- **Flat (Z)** — what the FFT saw. The reference. +- **A-weighting** — perceptual, de-emphasises the extremes. Good for a level meter. +- **Loudness** — the equal-loudness lift: bass and treble up, mids down. What people mean by "make + it punchy". +- **Pink** — compensates the bin-count spread so pink noise reads flat. The right default for a + spectrum display, and computable from the band edges rather than tabled. + +Four 16-entry int8 tables, applied as an offset before the gain. A user picks a name, not sixteen +sliders. + +### Measurement modes, and what they cost + +The product owner's three modes are the right shape, and the cost settles which is the default: + +- **Keep** — learn nothing; use the stored table. Deterministic, and what an installation wants once + it is tuned. Also the answer for a show that must look identical every night. +- **Period** — learn during an explicit window (a "calibrate" button, or the first N seconds), then + freeze. One honest use: point it at the room before doors open. +- **Continuous** — always adapting, with slow constants. + +**Continuous is affordable.** The analysis runs once per 512-sample block (~23 ms), never per light +and never per tick, and the whole audio path measures **136 us per block on an ESP32-S3**, which is +0.59% of the block period. The three additions are 16 compares, 16 compares plus 16 multiplies, and +16 multiply-adds: about **0.6 us, or +0.4% on the audio path**, and nothing at all on the render hot +path. Continuous can be the default; the modes exist for determinism, not for cost. + +The real argument against continuous is musical rather than computational: **AGC breathes**. A quiet +passage gets amplified until it looks loud, which is wrong when the quiet is the point. + +The guards are the standard compressor controls, and there are two distinct things a user means by +"how aggressive" which must not be collapsed into one slider: + +- **`ratio`** — how much of the difference the learner removes, the compressor's depth control. 1:1 + is off (each band keeps its raw level) and higher ratios push the bands toward equal. This is + "how much". +- **`attack`** and **`release`** (ms and seconds) — how fast the learned gain follows a rise and + recovers afterwards. **Release is what breathing is**: a fast release re-levels a quiet passage + until it looks loud. This is "how fast". +- **`hold`** — a delay before release begins, so the gain does not pump between beats. The standard + companion to release, and the cheap fix for the most audible artefact. +- A **maximum gain** in dB, so a silent band cannot be amplified into its own noise. A limit rather + than a ballistic, and the guard that makes the rest safe. + +Defaults worth starting from: a low ratio, a fast attack, a release in seconds, and a hold of about +a beat. Those are conservative on purpose, the settings a broadcast limiter would use, so the +learner is invisible until someone goes looking for it. + +### What replaces `floor` and `gain` + +The global pair goes. Keeping them as an offset on top of a learned per-band pair would be two +mechanisms doing one job, kept only to avoid a break, which is the debt +[ADR-0013](../adr/0013-no-migration-code-robust-persistence-plus-documented-breaks.md) exists to +refuse: document the break, do not carry the old shape forward. + +What a user needs from them survives in a better form. `gain` becomes **`ratio`**, how far the +learner is allowed to push the bands toward equal, which is the compressor's own name for that +control and the one someone actually reaches for. +`floor` becomes the learned per-band floor, which is what they were approximating by hand. The +break gets its MIGRATING entry, and a restored config loses two values that the learner re-derives +within seconds of hearing audio. + +### The UI: one read-out row, not sixteen + +Nothing per band is something a user SETS. Every knob in this design is global on purpose (`ratio`, +`attack`, `release`, `hold`, the maximum gain, the measurement mode, the weighting preset), and the +per-band floor and gain are learned observations. So a sixteen-row list, considered here first +because `ListSource` makes it cheap to build, would be a diagnostic costing a 1 Hz push of sixteen +rows for values nobody edits. And the live per-band picture already exists: the AudioSpectrum +effect in the preview IS the spectrum analyser. + +What earns its place is one row: a compact read-out of the sixteen learned gains (or floors, +toggled), sixteen small numbers in one string, updated at the same 1 Hz cadence and in the same +shape as the `level RMS` and `peakHz` read-outs beside it. About fifty bytes, no new traffic +pattern, and it answers the one diagnostic question ("is a band stuck, or pinned?") at a glance. A +per-band manual trim is not built: `ratio` and the weighting preset cover taste, and sixteen sliders +are real estate for a control nobody reaches for. + +Still worth doing FIRST, before the learning: the read-out row showing the raw band levels is a +diagnostic for § Band spacing on its own, and it makes an empty band visible to a user rather than +only to a unit test. + +### How to judge it + +- **Pink noise in, flat display out** with the pink weighting: the direct test of the bin-count fix. +- **A swept sine lights each band in turn**, none dark, none twice: the band-edge test. +- **Silence converges to zero** within the learning window on a real mic, including 50/100 Hz hum. +- **A kick drum is visibly sharper** than with symmetric smoothing: the ballistics test. +- **Switching genre re-levels within seconds** without visible pumping on sustained material. + +## Onset and tempo: reactive first, predictive after + +`BeatPhase` is a clock, not a detector: the user sets a BPM and effects follow it. Nothing in the +tree hears a beat. Two standard pieces would, and they are different in kind, which matters because +the usual worry ("the beat has happened before you know it was one") applies to one and is answered +by the other. + +**Onset detection is reactive, cheap, and nearly free here.** The standard onset detection function +is **spectral flux** (Bello et al. 2005, Dixon 2006): the sum over bands of the POSITIVE difference +between this block's magnitude and the last. A rise across the spectrum is a hit; a fall is not. We +already compute the 16 band magnitudes once per block, so flux is 16 subtractions and 16 compares on +top, with the block's own ~23 ms latency, which is under what a viewer can attribute. An `onset` +field in `AudioFrame` (0 or a strength, 0..255) is the smallest useful shape, and a per-band flux is +the same loop kept per band for an effect that wants to know WHERE the hit was. Thresholding the +flux against its own recent mean is what separates a hit from a swell, and it reuses the learned +floor machinery from § Per-band conditioning. + +**Tempo tracking is predictive, and it is the answer to "too late".** A tracker does not react to a +beat, it locks onto the periodicity of the onset stream and predicts the NEXT one, so an effect can +fire on the beat or ahead of it. The reference form is Ellis, "Beat Tracking by Dynamic Programming" +(JNMR 2007): estimate the dominant period of the onset function by autocorrelation, then choose beat +times that agree with both the period and the onset strength. Real-time variants exist (IBT, OBTAIN) +and run hundreds of times faster than real time on a desktop. On an MCU the cost is the +autocorrelation over a few seconds of onset history: about 260 values at block rate over the lags +that span 40 to 180 BPM (14 to 65 blocks), roughly 13,000 multiply-adds. Run every block that is +50 to 100 us on an S3, most of the audio budget again; run ONCE PER SECOND, which is all a tempo +estimate needs, it amortises to under 1% of one block. So the tracker is scheduled at its own +cadence, not the block's, and like everything in this file it is in the audio path, never the +render path. Unmeasured until built. +What it delivers is a `bpm` estimate and a `beatPhase` prediction, which is exactly what `BeatPhase` +consumes today from a control: the clock stays, the number feeding it becomes measured. + +**Sequence.** Onset first: it is the cheaper piece, it has immediate value (a flash on the hit), and +it is the input the tracker needs anyway. Tempo tracking second, judged on the bench against a +metronome and against real music with a known BPM, because a tracker that locks onto the half-time +or double-time pulse looks confidently wrong. + +**How to judge it.** A click track produces one onset per click and no others; a sustained tone +produces none after its attack; a track with a known BPM yields that BPM within 2% after a few +seconds and holds it, and the predicted beats land within one block of the true ones. + ## Adaptive noise gate (softhack007's concept, our analysis) Replace the borrowed `squelch`/`noiseFloor` knob ("a WLED-SR workaround, not a real gate") with a diff --git a/docs/backlog/backlog-light.md b/docs/backlog/backlog-light.md index 75116d20..fe95c9df 100644 --- a/docs/backlog/backlog-light.md +++ b/docs/backlog/backlog-light.md @@ -25,6 +25,71 @@ Forward-looking to-build items for the **light domain** (`src/light/`: drivers, MoonLight has several moving-head effects that have no equivalent here, two of them troyhack's. Migrate them all, on the power functions per the standing mandate rather than traced across. +### Speed up the fluid solver: 4 fps at 128x128, and it is not the divide (2026-09-05) + +Measured on an S31 (RISC-V, 320 MHz, octal PSRAM at 200 MHz), `iterations` 5, depth 1: + +| grid | Fluid tick | fps | cycles per cell-update | +|---|---|---|---| +| 32x32 | 8.5 ms | 109 | 151 | +| 64x64 | 38 ms | 24 | 159 | +| 128x128 | 204 ms | 4 | 205 | + +A cell-update is four loads, three adds, a multiply and a store: under 20 cycles of arithmetic. It +costs **151 even at 32x32**, where the whole working set is small enough to cache, so the loop +itself is roughly 8x more expensive than the work it does. Memory adds a further 35% by 128x128 but +is not the wall: at 4 fps the solver moves ~25 MB/s, about 5% of what this PSRAM delivers. + +**A wrong turn worth recording.** The first diagnosis blamed the 64-bit divide in `relax()`, on the +reasoning that Xtensa has no integer divide instruction. It was implemented (a power-of-two shift +dispatched once per call, bit-exact over 8M values) and measured on the board: **no change, 326 ms +before and after**, so it was reverted. Two errors: the S31 is RISC-V rather than Xtensa, and at +151 cycles per update the divide was never the dominant term. A desktop measurement could not have +caught either, since arm64 divides in hardware; only the board settles it. + +**Allocation placement is worth 1.6x, and nobody chose it.** Same firmware, same grid, same +controls: **326 ms after a fresh boot, 204 ms after resizing the grid to 32 and back to 128**, +reproducible across reboots. The solver's six buffers are ~638 KB and land in PSRAM either way, but +where they land at boot is slower than where they land once the heap has moved. Whatever is done +about speed, this says a boot-time allocation can be paying a large penalty invisibly, and it is +worth understanding before optimizing the loop around it. + +Ordered by expected return: + +1. **Cut the 64-bit arithmetic in the inner loop.** Every cell computes an `int64` shift, an + `int64` multiply and an `int64` divide on a 32-bit core, where each is several instructions and + a register pair. This is the most likely source of the 151 cycles. A 32-bit formulation, or a + narrower intermediate with a proven bound, is the first thing to measure. Precedent: the SWAR + work found the 32-bit pair form bit-identical and 41% smaller. +2. **Hoist `idx()`.** The loop addresses five neighbors per cell through `idx(x, y)`, each a + multiply-add. Walking row pointers instead is the standard fix and removes most of the address + arithmetic. +3. **Understand the allocation-placement effect above**, since it is worth more than most loop + tuning and costs nothing to trigger deliberately once understood. +4. **Solve the pressure at half resolution.** Pressure is smooth, so a half-scale solve with a + bilinear upsample of its gradient costs a quarter of the cells. Same trade `fieldScale` already + makes for noise fields, measured 3.0x there. Changes the picture slightly, unlike 1 to 3. +5. **Fewer iterations, documented per target.** Linear in cost: 5 to 2 is 2.5x, and the picture + gets springier. The card should say what a target can afford rather than leaving a user to find + 4 fps. +6. **Question whether the full solver belongs on this class of board at all.** See the ColorTrails + entry below: a separable noise advection gets a flowing, swirling picture for two passes over + the grid and no solve. The fluid's own header already calls it a desktop and P4 effect. + +**Why `fluid.mle` runs at 13 fps while the compiled effect runs at 3.** They are not the same +algorithm, and the script is not a faster fluid: it is not a solver at all. `fluid.mle` calls +`flowCurl`, which is curl noise, a divergence-free velocity read analytically from noise +derivatives in one advection pass, with no solve. Per frame at 128x128 the script visits ~16k cells +and divides nowhere; the compiled solver visits ~429k, of which 318k carry the 64-bit divide. That +is 27x the work, and the measured gap is only 4.3x because the interpreter gives most of it back in +dispatch overhead. So a COMPILED curl effect would beat both. What curl cannot do is what a solver +does: no pressure, no interaction between jets, and no vortex forming out of the flow's own +history. Whether that is worth 27x is a question for the product owner's eyes. + +**Measure on hardware, not on the desktop**: this is an in-order-core property and the desktop +divides in hardware, which is exactly how the wrong diagnosis above survived a desktop check. +Record before and after in performance.md per target. + ## Drivers ### Logarithmic brightness, and a power budget the device knows about (2026-09-02) diff --git a/docs/gettingstarted.md b/docs/gettingstarted.md index 4ce73609..8adcdf3d 100644 --- a/docs/gettingstarted.md +++ b/docs/gettingstarted.md @@ -193,7 +193,7 @@ something seems off. **System** — who this device is and how it's doing: its name, the device model, uptime, frame rate, and live memory / storage bars. You may also see an **Audio** module here — devices with a built-in mic come with it set up for you, and on any -device you can add it yourself (it's how sound-reactive effects hear the music). +device you can add it yourself (it's how audio-reactive effects hear the music). Audio is just the first of many: any sensor or input — from hardware or over the network — lives here as its own module, and we're adding more all the time. diff --git a/docs/moonmodules/light/effects.md b/docs/moonmodules/light/effects.md index a199103a..26310267 100644 --- a/docs/moonmodules/light/effects.md +++ b/docs/moonmodules/light/effects.md @@ -10,6 +10,27 @@ Effects are built from the shared [power functions](power-functions.md): the dra ## MoonLight effects + + +### ColorTrails 💫🖌️💨🌫️ · 3D + +Emitters pouring color into a flow that carries and folds it. What makes this one worth reading is what the flow is NOT: there is no velocity field. One noise value per row shifts that row sideways, one per column shifts that column up or down, and the two shears compose into something that reads as a swirling current. A 128x128 grid is steered by 256 numbers rather than 16k, which is why it runs on hardware where a real solver does not. + +Three emitters feed it: circles on an orbit, a Lissajous point tracing a figure that never closes on itself, and the rim of the panel with its hue walking around. The flow pulls the border inward, so it is a source rather than a frame. + +- `speed`: how fast the emitters travel. +- `flow`: how far a row or column is pushed, which is the strength of the current. +- `flowSpeed`: how fast the flow itself drifts and reverses. +- `scale`: the flow's spatial frequency: a few broad bands or many fine ones. +- `persistence`: how long color survives, as a half-life, so a trail is the same length in seconds at any framerate. +- `colorSpeed`: how fast the emitters walk the palette. +- `size`: the orbit's radius and the Lissajous figure's reach. +- `mode`: all three emitters, or one at a time to see what each contributes. + +Compare with [Fluid](#fluid): that one solves for pressure and gets vortices forming out of the flow's own history, at roughly twenty passes over the grid against this one's one. Reach for the solver when the medium is the subject, and for this when the subject is the color being carried. + +Origin: MoonLight · concept by [Stefan Petrick](https://github.com/StefanPetrick), composition by Jeff (mindful_stone / [4wheeljive](https://github.com/4wheeljive)) in [AuroraPortal](https://github.com/4wheeljive/AuroraPortal/blob/main/src/programs/colorTrails_detail.hpp) · via [MoonLight](https://github.com/MoonModules/MoonLight/blob/main/src/MoonLight/Nodes/Effects/E_FastLED.h) + ### DistortionWaves 💫 · 2D @@ -208,7 +229,7 @@ Detail: [technical](moxygen/RandomEffect.md) -### Rings 💫🦅🖌️ · 2D +### Rings 💫🦅🖌️🎡 · 2D Rings effect preview @@ -433,7 +454,7 @@ Uses the global palette. Origin: projectMM original; inspired by Atari's Pong (1 -### Aurora 💫🖌️ · 3D +### Aurora 💫🖌️🌫️🎡 · 3D Aurora effect preview @@ -544,7 +565,7 @@ Origin: projectMM original, on Sébastien Truchet's 1704 tiling and the standard -### Fluid 💫🖌️ · 3D +### Fluid 💫🖌️🌊💨 · 3D Fluid effect preview @@ -567,7 +588,7 @@ Origin: projectMM original, after Stam 1999 "Stable Fluids" -### Nebula 💫🖌️ · 3D +### Nebula 💫🖌️💨🌫️ · 3D Nebula effect preview @@ -587,7 +608,7 @@ Origin: projectMM original, composing the noise-field and curl-flow kernels: the -### Trails 💫🖌️ · 3D +### Trails 💫🖌️💨🌫️ · 3D Trails effect preview @@ -605,7 +626,7 @@ Origin: projectMM original, in the flow-field idiom (4wheeljive's FlowFields, fr -### Tunnel 💫🖌️ · 3D +### Tunnel 💫🖌️🌫️🎡 · 3D Tunnel effect preview @@ -677,7 +698,7 @@ Origin: projectMM original, on Iñigo Quilez's raymarching and distance-function -### PolarNoise 💫🖌️ · 3D +### PolarNoise 💫🖌️🌫️🎡 · 3D PolarNoise effect preview @@ -753,7 +774,7 @@ Detail: [technical](moxygen/SphereMoveEffect.md) -### Spiral 💫🦅🖌️ · 2D +### Spiral 💫🦅🖌️🎡 · 2D Spiral effect preview @@ -1021,7 +1042,7 @@ Detail: [technical](moxygen/LissajousEffect.md) -### NoiseMeter 🐙🎵 · 3D +### NoiseMeter 🐙🎵🌫️ · 3D NoiseMeter effect preview @@ -1040,7 +1061,7 @@ Detail: [technical](moxygen/NoiseMeterEffect.md) -### Wave 💫 · 2D +### Wave 💫🌫️ · 2D Wave effect preview @@ -1079,7 +1100,7 @@ Detail: [technical](moxygen/FireEffect.md) -### Noise ⚡️💫🌙🐙 · 1D/2D/3D +### Noise ⚡️💫🌙🐙🌫️ · 1D/2D/3D Noise effect preview @@ -1113,6 +1134,50 @@ Detail: [technical](moxygen/AudioSpectrumEffect.md) [Tests](../../tests/unit-tests.md#audioservice) + + +### BeatRipples 💫🎶🖌️ · 2D + +Every beat is a stone dropped in water. The surface is a real wave simulation, the classic two-buffer scheme: each cell's next height is its neighbors' average doubled minus its previous height, damped, which is the discrete wave equation. That gives what a drawn expanding circle cannot: ripples that pass THROUGH each other, reflect off the walls and interfere into standing patterns. The loudest band decides where the stone lands, so a bass hit falls near the center and a treble hit out at the rim, and the hit's strength sets how deep. The surface is rendered by SLOPE rather than height, because a water surface is visible where it bends light. + +- `damping`: how long the water keeps ringing. +- `drop`: how deep a beat's stone falls. +- `rain`: idle drops when there is no music, so the surface is alive in silence. +- `shine`: how strongly the slope lights the surface. + +Origin: projectMM original, the two-buffer water simulation (Gomez 2000) driven by the onset detector + + + +### VuMeters 💫🎶🖌️ · 3D + +Sixteen needles, one per band, each with real mass. What makes a VU meter beautiful is not the dial, it is the needle: a physical meter is a spring and a damper, so it accelerates toward the signal, overshoots a peak, swings back and settles. That overshoot is why a mechanical meter reads as alive where a bar graph reads as a readout, and it is why the standard (IEC 60268-17) specifies 300 ms to 99% with 1 to 1.5% overshoot rather than a smoothing constant. + +Each band drives a damped harmonic oscillator integrated per frame, with the bass needles deliberately heavier than the treble ones, as they are on a real meter bridge: the low end swings, the high end flickers. The sixteen meters tile the panel as a grid of cells, as square as the shape allows, so a 64x64 panel is 4x4 dials and a 256x64 wall is 8x2. Each dial has a peak marker held at the highest reading and falling by a half-life, and a red zone past three quarters. On a cube every slice carries its own bank. + +- `damping`: how much the needle overshoots. High is a critically damped studio meter, low is a loose needle that swings past and bounces off the pin. +- `response`: how hard the needle chases the signal at all. +- `peakHold`: how long the peak marker stays up, as a half-life. +- `smooth`: drive from the meter ballistic rather than the raw band. Raw is the truer instrument here, since the needle has its own ballistics already. + +Origin: projectMM original, on the VU ballistics of IEC 60268-17 and the onset detector + + + +### RadialSpectrum 💫🎶🖌️🎡 · 3D + +The spectrum as ripples. Each band owns a sector around the center, mirrored left and right with the bass at the top and bottom; sound is born at the center and travels outward, so the radius is time and a ring's length is that band's recent history. It is the circular visualizer the music-video world settled on, a radial spectrogram, and it is also the diagnostic a bar analyser is: every sector is one band, so a band that is stuck or pinned shows as a sector that never moves or never dims. On a cube, under the spherical mapping, the ripples are expanding shells. + +Nothing is transported. The effect keeps a short history of band frames and every light reads it, its angle choosing the band and its radius the age: a table read per light, cheaper than drawing bars. + +- `speed`: how fast sound travels outward, a ring every 10 to 105 ms. +- `persistence`: how far out a ripple stays visible. +- `smooth`: read the meter ballistic (`bandsSmoothed`) rather than the raw bands. Switching it is the comparison a person tuning the audio path wants: raw twitches, smoothed breathes. +- `beat`: a white shockwave born at the center on every detected onset, traveling out with the ripples. +- `polarTable`, `polarTable16`, `mapping`: the polar address, and cylindrical, spherical or radial on a volume (light/polar.h). + +Origin: projectMM original, the radial spectrogram on `PolarLut` and the onset detector + ### AudioVolume 💫🎵 diff --git a/docs/performance.md b/docs/performance.md index 430f26a0..b74958f0 100644 --- a/docs/performance.md +++ b/docs/performance.md @@ -396,7 +396,7 @@ Each parallel LED driver run on real hardware at a 128×128 = 16384-light grid, | **RMT** | classic ESP32 (LOLIN D32 / WROOM) | `2,4,13,14,16,17,18,19` (pin 2 = a real 24-LED strand) | 8-pin RMT drives **8×256 = 2048 lights** (tick ~12.6 ms), scales to ~8192 before the tick plateaus; all lanes healthy, pin-2 strand verified lit | **silent alloc-fail:** the RMT symbol buffer sizes for the driver's `count` window, so `count=0` on a 16384-grid needs ~1.5 MB, fails on the ~90 KB heap, and `tick()` bails with **no status** (LEDs dark). Bound the driver with the start/count window; a status for this is [backlogged](backlog/backlog-light.md). | | **I2S i80** | classic ESP32 (ESP32-WROVER) | data `2,4,13,14,18,19,21,22` · WR(clock) `32` · DC `33` (pin 2 = a real strand, verified lit) | The classic ESP32 runs the **same** `MultiPinLedDriver` over the **I2S peripheral in i80 mode** (IDF routes the i80 API to I2S here, to LCD_CAM on the S3/P4 — one driver, chip-picked backend). 8-lane doubling sweep (128×128 grid, 2026-07-13): 64/pin (512) → 4877 µs, 128/pin (1024) → 8575 µs, 256/pin (2048) → 15638 µs. Scales linearly at **~7.6 µs/light** (heavier than the S3's LCD_CAM ~6 µs — the classic I2S clock path). `frameTime` reports the WS2812 wire floor (512 → 243 fps, 2048 → 67 fps). The `MultiPinLed` status reports the live count. **16 lanes work on classic too** (the I2S peripheral does the 16-bit i80 bus, 16×256 = 4096 verified), but the WROVER exposes only ~13 non-strap pins, so 8-lane is the practical set. | **Internal-RAM ceiling: 2048 lights at 8 lanes (4096 at 16).** The classic I2S backend **cannot DMA from PSRAM** (`esp_lcd_i80_alloc_draw_buffer` rejects `MALLOC_CAP_SPIRAM` — "external memory is not supported"), so its frame buffer is internal-DMA-RAM only (`maxBlock` ≈ 76 KB). Swept at 8 lanes on a 128×128 grid (2026-07-13): 64/pin (512) ✅, 128/pin (1024) ✅, **256/pin (2048) ✅ — then 512/pin (4096) and above → `i80 bus init failed — check pins / memory`**, a **clean degrade, not a crash** (uptime kept climbing through every rung). That lands exactly on the parallel-I2S acceptance floor (8×256 = 2048), so the classic chip meets its floor and no more. The opposite of the LCD_CAM row below, which reaches 16384 via PSRAM — the classic chip's DMA simply can't get there. **The render is decoupled from this ceiling:** the same sweep kept rendering the full 128×128 = 16384-light grid at every rung (`Layer` ≈ 511 ms/frame, from PSRAM) while the *output* was capped — so a big grid still renders, it just can't all reach the LEDs. At 16K lights the effect render (511 ms) dwarfs the output (24 ms), so multicore cannot help: the render is the wall on this chip. Two classic-only quirks the driver handles: the I2S i80 tx has an unconditional command phase whose busy-wait hangs to a watchdog reset unless given a real 8-bit command (`lcd_cmd_bits=8` / `kI80Cmd=0`), and the draw buffer + a done-ISR marked `IRAM_ATTR`. | | **LCD_CAM 16-lane** | ESP32-S3 (SE 16 V1 + LightCrafter 16, n8r8) | SE16 data `47,48,21,38,14,39,13,40,12,41,11,42,10,2,3,1` · WR/DC `5`/`6`; LC16 data `47,21,14,9,8,16,15,7,1,2,42,41,40,39,38,48` · WR/DC ghost `33`/`34` | **Reaches the full 16384 lights — the 16K target — where Parlio caps at 4096.** SE16 16-lane doubling sweep (128×128 grid), **async double-buffer ON** (re-measured 2026-07-13 after Step 1.5): 512 → 1843 µs, 1024 → 3422 µs, 2048 → 6612 µs, 4096 → 15153 µs, 8192 → 26788 µs, **16384 → 49916 µs (~20 fps)** — the driver tick is now the *encode* alone, the WS2812 wire wait overlapped in background DMA (`frameTime` reports it separately: 16384 → 28786 µs). That's **~30–56 % faster than the pre-Step-1.5 blocking path** the earlier row measured (async **OFF** reproduces it within 3 %: 4096 → 22518 µs, 16384 → 77732 µs vs the old 21945 / 76979 µs — so the [lcd→i80 rename](moonmodules/light/drivers.md#led-drivers) is behavior-neutral; the speedup is Step 1.5, not the rename). The `MultiPinLed` status reports the live count (`driving N of 16384 lights`). | **No contiguous-block ceiling — the key difference from Parlio.** LCD_CAM allocates its DMA buffer via `esp_lcd_i80_alloc_draw_buffer` **from PSRAM**, so it isn't bound by the ~368 KB largest-internal-block limit that caps Parlio at 4096 lights; it drives all 16384. **16K is now ~20 fps** (up from ~13 fps pre-Step-1.5). The ENCODE is the wall here, not the wire: async hides the 28,786 µs wire behind DMA (which alone would allow ~35 fps), so the tick *is* the 49,916 µs encode → ~20 fps. Recovering the rest of the deep-per-lane wall (§ Step 3, [multicore top-down]()) — though the ~50 ms encode still runs on **core 0**, which on the LC16 **starves the W5500 SPI-Ethernet** (also core 0) → link drops, HTTP times out while the render loop keeps ticking. This is the measured contention that justifies the [multicore pipeline (Step 2)]() on classic/S3 — a core-budget limit, not a fault. | -| **Parlio 16-lane** | ESP32-P4 (testbench, n16r8) | 16 data pins `21,20,22,23,24,25,26,27,32,33,39,40,41,42,43,44` | 16-lane doubling sweep (`ledsPerPin` 32→256/pin on a 128×128 grid, 2026-07-12; reproduced within 0.3% on a second P4). Tick scales **linearly** with lights: 512 → 1653 µs, 1024 → 2925 µs, 2048 → 5514 µs, **4096 → 10760 µs** at 256/pin. **Async double-buffer shipped (Step 1.5, 2026-07-13):** with `doubleBuffer` ON, the ~7.5 ms WS2812 wire wait moves into background DMA, so the *driver* tick at 256/pin drops **10,820 → 3,790 µs** and the whole board rises **48 → 76 fps** (system tick 20.6 → 13.0 ms). The **`frameTime`** KPI reports the measured wire floor directly — live **7474 µs (133 fps max)** here (the true, measured output ceiling). With the wire hidden, the tick is now **effect render (~7.3 ms) + driver (~3.8 ms) serial** → the effect is the next bottleneck, which the [multicore pipeline (Step 2)]() overlaps toward the 133 fps `frameTime` ceiling. (`doubleBuffer` OFF reproduces the pre-Step-1.5 10,820 µs / 92 driver-fps exactly — the synchronous path, kept as the opt-out. ON is simply the better configuration; the switch exists to A/B it. Its one-frame latency saving is below the perceptual A/V-sync threshold, so there is no user class — sound-reactive included — that should run it OFF for latency.) The `ParlioLed` status reports the live count (`driving N of 16384 lights`). | **Single-DMA ceiling ≈ 4096 lights (256/pin).** 512/pin (8192) → `Parlio init failed — check pins / memory`. The P4 has 33 MB free heap but the largest *contiguous* internal block is ~368 KB, and the 16-bit single-shot DMA buffer needs one contiguous block — so it's a **contiguous-block limit, not total memory** (it bites well before the 65535-byte/lane byte cap). Reaching the full 16384 (1024/pin) needs the [Parlio chunked-transfer](backlog/backlog-light.md) work (frame split across DMA bursts) — deferred indefinitely, since >~65K lights on one chip is a network-distribution problem. | +| **Parlio 16-lane** | ESP32-P4 (testbench, n16r8) | 16 data pins `21,20,22,23,24,25,26,27,32,33,39,40,41,42,43,44` | 16-lane doubling sweep (`ledsPerPin` 32→256/pin on a 128×128 grid, 2026-07-12; reproduced within 0.3% on a second P4). Tick scales **linearly** with lights: 512 → 1653 µs, 1024 → 2925 µs, 2048 → 5514 µs, **4096 → 10760 µs** at 256/pin. **Async double-buffer shipped (Step 1.5, 2026-07-13):** with `doubleBuffer` ON, the ~7.5 ms WS2812 wire wait moves into background DMA, so the *driver* tick at 256/pin drops **10,820 → 3,790 µs** and the whole board rises **48 → 76 fps** (system tick 20.6 → 13.0 ms). The **`frameTime`** KPI reports the measured wire floor directly: live **7474 µs (133 fps max)** here (the true, measured output ceiling). With the wire hidden, the tick is now **effect render (~7.3 ms) + driver (~3.8 ms) serial**, so the effect is the next bottleneck, which the [multicore pipeline (Step 2)]() overlaps toward the 133 fps `frameTime` ceiling. (`doubleBuffer` OFF reproduces the pre-Step-1.5 10,820 µs / 92 driver-fps exactly: the synchronous path, kept as the opt-out. ON is simply the better configuration; the switch exists to A/B it. Its one-frame latency saving is below the perceptual A/V-sync threshold, so there is no user class (audio-reactive included) that should run it OFF for latency.) The `ParlioLed` status reports the live count (`driving N of 16384 lights`). | **Single-DMA ceiling ≈ 4096 lights (256/pin).** 512/pin (8192) → `Parlio init failed, check pins / memory`. The P4 has 33 MB free heap but the largest *contiguous* internal block is ~368 KB, and the 16-bit single-shot DMA buffer needs one contiguous block, so it's a **contiguous-block limit, not total memory** (it bites well before the 65535-byte/lane byte cap). Reaching the full 16384 (1024/pin) needs the [Parlio chunked-transfer](backlog/backlog-light.md) work (frame split across DMA bursts), deferred indefinitely since >~65K lights on one chip is a network-distribution problem. | **LOLIN D32 (classic ESP32-WROOM) usable LED GPIOs:** `4,13,14,18,19,21,22,23,25,26,27,32,33` plus `16,17` (free on WROOM — they're the PSRAM bus only on WROVER). Avoid straps `0,2,12,15`, the onboard LED on `5`, and battery-sense on `35`; input-only `34–39` can't drive an LED. (Chip-level set: [gpio-usage.md](reference/gpio-usage.md).) diff --git a/docs/tutorials/generative-effects.md b/docs/tutorials/generative-effects.md index 485aaf18..34bb6ad4 100644 --- a/docs/tutorials/generative-effects.md +++ b/docs/tutorials/generative-effects.md @@ -287,6 +287,104 @@ script, pick one number, and move it a long way. | `persistence` low to high | tails from a flicker to seconds long | half-life decay | | Fluid's `iterations` to 1 (the compiled effect, not the script) | the flow reads springy | the pressure solve is what makes it a fluid | +--- + +## 10. Making one good: what the failures teach + +The kernels above are the easy half. An effect built correctly on them can still be +dull, and eight built in one day produced four keepers: the other four were dropped +for being unattractive, too sparse, too slow, or for dying out while the music played. +What follows is what those four cost, written down so the next effect skips them. + +### Measure the picture, do not theorize about it + +Every wrong diagnosis on this page came from reasoning about code instead of reading a +number off the frame. Rendering to a buffer and counting is cheap: what fraction of +lights are lit, what the brightest one is, how far the picture moves between frames. + +One effect rendered pure black for a day. The cause was a scale mismatch (a wave pressed +15 units deep while the renderer divided slopes by 512, so every ripple came out below the +visibility threshold), and no amount of reading the code found it. One measurement did: +brightest light 0, in a simulation whose physics was fine. Cheap checks, in order: + +| Reads | Means | +|---|---| +| lit fraction near 0 | nothing is reaching the buffer, or everything is below threshold | +| lit fraction near 1 | the effect has no structure, only a wash | +| brightest light far below 255 | a scale mismatch between what is computed and what is displayed | +| frames identical over time | the simulation has converged, or the clock is not advancing | + +Pick a quantity that cannot cancel. A center of mass on a symmetric flow stays put while +every parcel moves, and reports "nothing is happening" about a working effect. + +### Match the scales at every seam + +Half of the day's bugs were one number expressed in the wrong unit. A control is 0..255, +a height field rings to ±20000, a fixed-point position carries 16 fractional bits. Every +place two of those meet is a place where a plausible-looking line silently produces +nothing, and nothing about it looks wrong on the screen. + +Write the conversion where the value crosses, name the constant, and say in a comment what +range each side speaks in. When something renders black or blindingly white, suspect a +seam before suspecting the algorithm. + +### A simulation converges: keep feeding it + +A fluid driven by forces at fixed positions and fixed angles reaches a steady state and +stops. The picture goes still while the music keeps playing, which reads as a crash. This +killed one effect outright. + +Anything that integrates its own state needs its input to keep changing: rotate where the +forces are applied, lean their direction, alternate their sense. Motion in the input is +what keeps motion in the output. + +### Frame-rate independence is not optional + +A simulation stepped once per rendered frame runs at whatever speed the hardware happens +to deliver. Measured here: 16x faster on a desktop at 1200 fps than on a device at 60. The +same effect that reads well on a panel is unusable on a bench. + +Accumulate elapsed time and step a fixed amount (16 ms works), capping the catch-up so a +stall cannot spend a second of frames at once. Everything that moves goes inside that loop, +including trail fades: leaving the fade outside makes trail length depend on frame rate +even when the motion does not. + +### Fill the screen, and keep filling it + +Two effects were dropped for the same reason: at rest they showed too little. An effect is +judged on the whole panel, so a good one covers it, and covers it in the first second. +Sparse output at 6% of lights is a demo, not an effect. + +Two habits fix most of it. Give the effect something to do with no input at all, so it is +never blank while someone waits for a beat. And start its clocks primed rather than at +zero: an effect whose first event is two seconds away reads as broken long before it reads +as calm. + +### Slow is a design property, not a tuning problem + +An effect that misses its frame time on the target device is not a slow effect to be +optimized later. On the S31 one solver-per-frame effect was both too slow and too dull, +which is the common case rather than a coincidence: the expensive part was not the part +doing the visual work. Decide what the effect spends its budget on before building it, and +measure on the smallest device it claims to support. + +### Two failed attempts means stop + +The rule the project already carries applies hardest here, because a picture always +suggests one more plausible tweak. Two attempts that do not fix it means the diagnosis is +wrong, not the parameters. On this page a second "fix" made an effect visibly worse than +the bug it targeted. + +### Pin the behavior, not just the pixels + +A golden-hash test passes happily on an all-black frame, which is how an effect shipped +rendering nothing while its test stayed green. A hash pins *which* pixels light; it says +nothing about whether any of them do. + +Pin the property that would have caught the failure: that the surface is visible, that it +still moves after a hundred frames. Then confirm the test fails against the broken code +before trusting it, because a test that passes on both is measuring nothing. + ## Where to go next - **[Power functions](../moonmodules/light/power-functions.md)**: the catalog, with what each one costs and who calls it diff --git a/docs/tutorials/how-projectmm-works.md b/docs/tutorials/how-projectmm-works.md index 3d8a2172..b75bbc64 100644 --- a/docs/tutorials/how-projectmm-works.md +++ b/docs/tutorials/how-projectmm-works.md @@ -183,11 +183,22 @@ The rest the module declares about itself: | 🦅 | a named contributor, credited on the module | | 🎵 volume · 🎶 frequency | it listens: one note reacts to how LOUD the room is, two to WHICH notes are playing | | 📡 | it takes its picture from the network | -| ✨ | built from particles: sparks that are born, fall and die | | 🎯 | it aims moving heads | -| 🖌️ | a shader: every pixel computed from its own position, the way a screen shader works | | 👾 | pixel art: the games and sprites | | 🧬 | a simulation: the picture emerges from cells evolving off their own last frame, rather than being drawn | + +And a last group, shown together at the end of the row, saying which **power functions** the effect +is built on. These are the kernels of [the shared library](../moonmodules/light/power-functions.md), +so they group effects by what they are made of, and by what that makes them look like: + +| | | +|---|---| +| 🖌️ | a shader: every pixel computed from its own position, the way a screen shader works | +| ✨ | particles: sparks that are born, move under forces and die | +| 🌊 | a fluid: a medium that works out its own motion, so a vortex forms and travels because the equations say so | +| 💨 | transport: light is CARRIED and fades rather than redrawn, so the effect has a memory of where it has been | +| 🌫️ | a noise field: texture sampled from a field rather than drawn, the cloud and smoke family | +| 🎡 | polar: composed around a center rather than across a grid, which is what suits a round fixture | | 📹 | motion-tracking aware: it follows people or objects moving in the room *(reserved, nothing carries it yet)* | A module can carry several: `💫🎶` is a MoonLight effect that reacts to frequency. diff --git a/moondeck/docs/screenshot_modules.py b/moondeck/docs/screenshot_modules.py index c199f1eb..58a13257 100644 --- a/moondeck/docs/screenshot_modules.py +++ b/moondeck/docs/screenshot_modules.py @@ -103,6 +103,7 @@ def asset_dir_for(type_name: str) -> Path: ("NoiseEffect", "Layer", {}, True), # The generative-fields showcases: each is Dim::D3, so the preview shows a volume. ("AuroraEffect", "Layer", {}, True), + ("ColorTrailsEffect", "Layer", {}, True), ("TrailsEffect", "Layer", {}, True), ("NebulaEffect", "Layer", {}, True), ("FluidEffect", "Layer", {}, True), diff --git a/src/core/AudioBands.h b/src/core/AudioBands.h index 4b51e83d..9d2c0ef5 100644 --- a/src/core/AudioBands.h +++ b/src/core/AudioBands.h @@ -1,7 +1,8 @@ #pragma once #include "core/AudioFrame.h" -#include "core/AudioLevel.h" // magToByte — the shared log/dB mapping +#include "core/AudioLevel.h" // magToByte: the shared log/dB mapping +#include "core/math16.h" // ballistic: the per-band meter shape #include // cosf/powf — band math is inherently float (so is the // audioFft seam it feeds); the recognisable DSP choice. @@ -23,7 +24,7 @@ namespace mm { // DC-strips the 24-in-32 samples to floats for the FFT. // - magnitudesToBands: groups the n/2 FFT magnitude bins into 16 log-spaced // bands (pitch is logarithmic — bass gets few bins, treble many) with a plain -// geometric (equal-ratio) bin split, normalises to 0..255, and picks the +// geometric (equal-ratio) bin split, normalizes to 0..255, and picks the // single loudest bin as the dominant peak. // Hann window coefficient at sample `i` of `n`: w(i) = 0.5 - 0.5*cos(2πi/(n-1)). @@ -56,9 +57,163 @@ inline void applyWindow(const int32_t* samples, size_t n, float* out) { // quiet idle spectrum — the mic's own noise — gates to 0 instead of flickering // the LEDs) and is then multiplied by `gain`/16 (16 = unity) for live brightness // control. Same knobs, same meaning, both the level and the spectrum. +/// The 17 bin-index edges of the 16 bands, `edge[b]..edge[b+1]` per band. +/// +/// A band is only a band if it OWNS bins. A pure geometric split (`edge[e] = nMag^(e/16)`, equal +/// frequency ratio per band, the textbook mapping of linear bins onto pitch) is scale-free, but the +/// FFT is not: below twice the bin width there are no distinct bins to hand out, so the low edges +/// collide. Measured at the shipped shape (256 bins of 43.1 Hz): bands 0 and 2 owned NO bins and +/// bands 1 and 4 owned one, while band 15 owned 75. A quarter of the display could not respond to +/// anything, and it was the quarter where music has its energy. +/// +/// So the geometric curve is kept, and then made monotonic by construction: every band gets at least +/// one bin, taken from the wide top bands that have bins to spare. The result stays log-shaped where +/// the FFT can afford it and degrades to one-bin-per-band where it cannot, which is the honest +/// answer at the bottom of the range: no split can separate 60 Hz from 80 Hz when they share a bin. +/// +/// Computed once per rate change, never per frame: 17 values, and the summing loop below costs the +/// same `nMag` additions wherever the edges sit. +inline void audioBandEdges(size_t nMag, uint32_t sampleRate, size_t edge[17]) { + (void)sampleRate; // the shape is in bins; Hz is the caller's to report + if (nMag < 17) { // pathologically small: one bin each, as far as it goes + for (uint8_t e = 0; e <= 16; e++) edge[e] = e < nMag ? e : nMag; + return; + } + // The geometric ideal, in floating point so the collisions are visible before rounding. + for (uint8_t e = 0; e <= 16; e++) { + const float frac = static_cast(e) / 16.0f; + float ix = std::pow(static_cast(nMag), frac); + edge[e] = static_cast(ix); + } + edge[0] = 1; // bin 0 is DC + edge[16] = nMag; + // Forward pass: push each edge up so every band owns a bin. This is what the geometric split + // could not do, and it costs the top bands a bin each, which they have in abundance. + for (uint8_t e = 1; e <= 16; e++) + if (edge[e] <= edge[e - 1]) edge[e] = edge[e - 1] + 1; + // Backward pass: if the forward pass ran past the end (a small FFT), pull the edges back down. + // Both passes together guarantee strictly increasing edges inside 1..nMag whenever nMag >= 17. + edge[16] = nMag; + for (uint8_t e = 16; e >= 1; e--) + if (edge[e] <= edge[e - 1]) edge[e - 1] = edge[e] - 1; +} + +/// The PPM ballistic over all 16 bands: `smoothed` follows `raw` fast on a rise and slowly on a +/// fall, each band on its own. One call per block, after whichever path produced the raw bands +/// (mic, simulation or a received sync packet), so every consumer sees the same meter. +/// +/// `rise` and `fall` are `smoothFollow` rates. The defaults below are a broadcast meter's shape: +/// a hit arrives in one block, and a bar then takes about forty blocks (a second) to fall to zero, +/// long enough for the eye to read the peak and short enough not to smear the next one. +constexpr uint8_t kBandRise = 200; +constexpr uint8_t kBandFall = 24; +inline void smoothBands(const uint8_t raw[16], uint8_t smoothed[16], + uint8_t rise = kBandRise, uint8_t fall = kBandFall) { + for (uint8_t b = 0; b < 16; b++) smoothed[b] = ballistic(smoothed[b], raw[b], rise, fall); +} + +/// Spectral flux: how much the spectrum ROSE since the last block, 0..255. The standard onset +/// detection function (Bello et al. 2005, Dixon 2006): sum the positive per-band differences and +/// ignore the falls, so a hit reads high, a decay reads zero and a held tone reads zero. Sixteen +/// subtractions on bands already computed, so it costs nothing and lands with the block. +inline uint8_t spectralFlux(const uint8_t prev[16], const uint8_t cur[16]) { + uint32_t sum = 0; + for (uint8_t b = 0; b < 16; b++) if (cur[b] > prev[b]) sum += static_cast(cur[b] - prev[b]); + sum /= 16; // sixteen bands of 255 fold back onto 0..255 + return static_cast(sum > 255 ? 255 : sum); +} + +/// Turns a flux stream into onsets: one per hit, none for a swell. The decision is the textbook +/// one, flux against its own recent MEAN (Dixon 2006) rather than an absolute threshold, so a loud +/// room and a quiet one fire on the same kind of event; a refractory window then makes one hit one +/// onset however many blocks it spans. The mean is an EMA in 8.8 fixed point, advanced AFTER the +/// decision so a hit does not raise the bar it is being judged against. +struct OnsetDetector { + uint16_t mean_ = 0; ///< EMA of the flux, 8.8 fixed point + uint32_t lastMs_ = 0; ///< when the last onset fired + bool fired_ = false; ///< whether one has fired yet (lastMs_ of 0 is a valid time) + + /// Feed one block's flux at time `nowMs`. Returns true on the block an onset is detected. + /// A hit is flux above `num/den` of the mean plus `margin`; `refractoryMs` is the minimum gap. + bool feed(uint8_t flux, uint32_t nowMs, uint8_t num = 3, uint8_t den = 2, + uint8_t margin = 20, uint16_t refractoryMs = 100) { + const uint32_t meanNow = mean_ >> 8; + const bool above = flux > (meanNow * num) / den + margin; + mean_ = static_cast(mean_ - (mean_ >> 4) + (static_cast(flux) << 4)); + if (above && (!fired_ || nowMs - lastMs_ >= refractoryMs)) { + lastMs_ = nowMs; + fired_ = true; + return true; + } + return false; + } +}; + +/// Per-band conditioning in the dB domain: the tier of the audio roadmap's design that learns the +/// RIG rather than chasing the music. +/// +/// Every band carries two learned numbers. Its **floor**, the level it reads with no program +/// material (mic self-noise, mains hum, the room), followed as a running MINIMUM that drifts up +/// slowly so a room that gets noisier is re-learned. Its **peak**, followed with an instant attack +/// and a release of seconds, so it settles to the band's typical loudest level rather than +/// tracking every beat. Between the two is the band's own dynamic range, and the correction maps +/// that range onto the display window instead of leaving the treble at a fourteenth of the bass +/// under spectrally balanced material (measured: a peak-per-band reading of pink noise falls as +/// 1/sqrt(f) across the sixteen bands). +/// +/// The correction is applied with a compressor's `ratio`: N:1 removes (1 - 1/N) of a band's +/// deviation from the window, so 1:1 is off and the music's balance is untouched, 2:1 halves the +/// rig's coloration, and a high ratio flattens it. Slow on purpose: a fast per-band gain is what +/// causes cross-spectral pumping, and every source on multiband dynamics says not to (the audio +/// roadmap, § two tiers). `maxGain` caps the lift so a silent band is never amplified into its own +/// noise. `learning` off freezes both tables, which is the deterministic mode a show wants. +/// +/// State is 32 floats; the work is 16 logs and a handful of multiplies per block, on the audio +/// block path and never per light. +struct BandConditioner { + float floorDb[16]; + float peakDb[16]; + bool primed = false; + + BandConditioner() { for (uint8_t b = 0; b < 16; b++) { floorDb[b] = 0.0f; peakDb[b] = 0.0f; } } + + /// Condition one block. `db` in, `out` the corrected dB for the display window + /// [windowFloor, windowFloor + windowSpan]. `dtMs` is the block interval, for the time + /// constants. `ratioN` is the N of N:1 (1 = off). `learning` false freezes the tables. + void process(const float db[16], float out[16], uint32_t dtMs, float windowFloor, + float windowSpan, uint8_t ratioN, float maxGainDb, bool learning, + float floorRiseDbPerS = 1.0f, float peakReleaseDbPerS = 3.0f) { + if (!primed) { + for (uint8_t b = 0; b < 16; b++) { floorDb[b] = db[b]; peakDb[b] = db[b] + 1.0f; } + primed = true; + } + const float dt = static_cast(dtMs) / 1000.0f; + const float amount = ratioN <= 1 ? 0.0f : 1.0f - 1.0f / static_cast(ratioN); + for (uint8_t b = 0; b < 16; b++) { + if (learning) { + // Floor: a minimum follower that drifts UP slowly, so it forgets a quiet moment + // over seconds but takes a new low at once. + floorDb[b] = db[b] < floorDb[b] ? db[b] : floorDb[b] + floorRiseDbPerS * dt; + // Peak: instant attack, slow release, so it settles on the band's typical top. + peakDb[b] = db[b] > peakDb[b] ? db[b] : peakDb[b] - peakReleaseDbPerS * dt; + if (peakDb[b] < floorDb[b] + 1.0f) peakDb[b] = floorDb[b] + 1.0f; + } + // Where this band's own range would put the value inside the window, and how far + // from the raw value that is; `amount` decides how much of that move is taken. + const float range = peakDb[b] - floorDb[b]; + const float normalized = windowFloor + (db[b] - floorDb[b]) * (windowSpan / range); + float shift = (normalized - db[b]) * amount; + if (shift > maxGainDb) shift = maxGainDb; // never lift a band into its noise + out[b] = db[b] + shift; + } + } +}; + inline void magnitudesToBands(const float* mag, size_t nMag, uint32_t sampleRate, uint16_t noiseFloor, uint16_t gain, - uint8_t bands[16], uint16_t& peakHz, uint16_t& peakMag) { + uint8_t bands[16], uint16_t& peakHz, uint16_t& peakMag, + BandConditioner* cond = nullptr, uint32_t dtMs = 23, + uint8_t ratioN = 1, float maxGainDb = 24.0f, bool learning = true) { for (uint8_t b = 0; b < 16; b++) bands[b] = 0; peakHz = 0; peakMag = 0; @@ -67,17 +222,9 @@ inline void magnitudesToBands(const float* mag, size_t nMag, uint32_t sampleRate // Hz per bin = sampleRate / (2 * nMag). const float binHz = static_cast(sampleRate) / (2.0f * static_cast(nMag)); - // 17 log-spaced bin-index edges: edge[e] = nMag^(e/16), so edge[0]=1 (skip - // DC), edge[16]=nMag, each band spanning the same frequency *ratio* — a plain - // geometric split, the standard way to map linear FFT bins onto pitch. size_t edge[17]; - for (uint8_t e = 0; e <= 16; e++) { - const float frac = static_cast(e) / 16.0f; - size_t ix = static_cast(std::pow(static_cast(nMag), frac)); - if (ix < 1) ix = 1; - if (ix > nMag) ix = nMag; - edge[e] = ix; - } + audioBandEdges(nMag, sampleRate, edge); + float bandDb[16]; // Magnitude → 0..255 on the shared LOGARITHMIC (dB) scale (magToByte, in // AudioLevel.h) — the same mapping the level/VU path uses, so noiseFloor/gain @@ -101,7 +248,17 @@ inline void magnitudesToBands(const float* mag, size_t nMag, uint32_t sampleRate // single tone light ONE band instead of smearing across many. float best = 0.0f; for (size_t i = lo; i < hi; i++) if (mag[i] > best) best = mag[i]; - bands[b] = toByte(best); + bandDb[b] = best <= 1.0f ? 0.0f : 20.0f * std::log10(best); + } + // Per-band conditioning in dB, then the shared window onto bytes. Without a conditioner this + // is exactly magToByte per band, so the two paths cannot disagree. + if (cond) { + float out[16]; + cond->process(bandDb, out, dtMs, windowFloorDb(noiseFloor), windowSpanDb(gain), ratioN, + maxGainDb, learning); + for (uint8_t b = 0; b < 16; b++) bands[b] = bandDb[b] <= 0.0f ? 0 : dbToByte(out[b], noiseFloor, gain); + } else { + for (uint8_t b = 0; b < 16; b++) bands[b] = bandDb[b] <= 0.0f ? 0 : dbToByte(bandDb[b], noiseFloor, gain); } if (peakVal > 0.0f) { diff --git a/src/core/AudioFrame.h b/src/core/AudioFrame.h index dfe4d3e9..b268fa90 100644 --- a/src/core/AudioFrame.h +++ b/src/core/AudioFrame.h @@ -33,8 +33,20 @@ struct AudioFrame { // their thresholds sit around 48..144 AFTER a /16. A 0..255 value // arrives below the squelch floor and reads as near-silence. // See services.md (Audio) for the trade and the open decision. - uint8_t bands[16] = {}; // 16 log-spaced frequency-band magnitudes, 0..255 - // (bass = bands[0], treble = bands[15]) + uint8_t bands[16] = {}; // 16 log-spaced frequency-band magnitudes, 0..255, RAW: this + // block's value with no smoothing (bass = bands[0], treble = + // bands[15]). Snaps to a transient; use it to catch a hit. + uint8_t bandsSmoothed[16] = {}; // the same bands with a meter's BALLISTIC: fast rise, slow + // fall (a PPM, IEC 60268-10). Use it for a spectrum display or + // anything that should read as bars rather than twitch. The pair + // mirrors level / levelSmoothed, so raw stays available. + uint8_t flux = 0; // spectral flux this block, 0..255: how much the spectrum ROSE + // since the last block. The onset detection function. + uint8_t onset = 0; // 0, or the flux strength on the ONE block a hit was detected: + // flux well above its own recent mean, at most one per refractory + // window. Reactive, with the block's ~23 ms latency. An effect + // that flashes on this catches the drum; one that wants to be + // ON the beat needs the tempo tracker (backlog, audio roadmap). }; } // namespace mm diff --git a/src/core/AudioLevel.h b/src/core/AudioLevel.h index e489a5da..9b57da7e 100644 --- a/src/core/AudioLevel.h +++ b/src/core/AudioLevel.h @@ -19,16 +19,24 @@ namespace mm { // window = a sound fills more of the range: spanDb = (255-gain)/4 + 4. // Human hearing is logarithmic and FFT/RMS magnitudes span a huge range, so a // linear map crushes the quiet or saturates the loud; this is the standard fix. -inline uint8_t magToByte(float m, uint16_t noiseFloor, uint16_t gain) { - if (m <= 1.0f) return 0; - const float floorDb = 60.0f + static_cast(noiseFloor) * 0.5f; - const float spanDb = static_cast(255 - gain) * 0.25f + 4.0f; - const float t = (20.0f * std::log10(m) - floorDb) / spanDb; +/// The display window in dB: where it starts and how wide it is. One home for the two knobs. +inline float windowFloorDb(uint16_t noiseFloor) { return 60.0f + static_cast(noiseFloor) * 0.5f; } +inline float windowSpanDb(uint16_t gain) { return static_cast(255 - gain) * 0.25f + 4.0f; } + +/// A value already in dB onto 0..255 through the window. The band path conditions in dB first +/// (AudioBands.h, BandConditioner) and then comes here, so the window means one thing everywhere. +inline uint8_t dbToByte(float db, uint16_t noiseFloor, uint16_t gain) { + const float t = (db - windowFloorDb(noiseFloor)) / windowSpanDb(gain); if (t <= 0.0f) return 0; if (t >= 1.0f) return 255; return static_cast(t * 255.0f); } +inline uint8_t magToByte(float m, uint16_t noiseFloor, uint16_t gain) { + if (m <= 1.0f) return 0; + return dbToByte(20.0f * std::log10(m), noiseFloor, gain); +} + // DC-blocker: the standard one-pole/one-zero high-pass that removes the constant // (DC) offset and sub-bass rumble from the sample stream before any analysis — // y[n] = x[n] - x[n-1] + R·y[n-1]. R near 1 sets the cutoff: R = 0.99 ≈ 40 Hz at diff --git a/src/core/AudioService.h b/src/core/AudioService.h index 97b8cfa7..7a52b2d6 100644 --- a/src/core/AudioService.h +++ b/src/core/AudioService.h @@ -90,6 +90,22 @@ class AudioService : public MoonModule { public: /// Block size = FFT size: a power of two. 512 samples at 22050 Hz is ~23 ms of /// audio per frame, fine resolution (~43 Hz/bin) at a modest per-tick cost. + /// What every producer of raw bands does next, once: the meter ballistic, the spectral flux + /// and the onset decision. Four paths write `frame_.bands` (the mic, two simulations and a + /// received sync packet); routing them all through here is what keeps the four consumers of + /// the frame seeing one definition of "smoothed" and one definition of "a hit". + void finishBands() { + smoothBands(frame_.bands, frame_.bandsSmoothed); + frame_.flux = spectralFlux(prevBands_, frame_.bands); + std::memcpy(prevBands_, frame_.bands, sizeof(prevBands_)); + frame_.onset = onset_.feed(frame_.flux, platform::millis()) ? frame_.flux : 0; + if (frame_.onset) onsetCount_++; + if (frame_.flux > fluxPeak_) fluxPeak_ = frame_.flux; + } + uint8_t prevBands_[16] = {}; ///< last block's raw bands, the flux's reference + BandConditioner cond_; ///< the per-band floor and peak tables, learned live + OnsetDetector onset_; ///< the hit decision, with its running mean and refractory + static constexpr size_t kBlock = 512; static constexpr size_t kMag = kBlock / 2; ///< real-FFT magnitude bins @@ -133,8 +149,18 @@ class AudioService : public MoonModule { uint8_t floor = 100; ///< noise floor (dB display floor), bands/level ///< below this read as silence. Raise to keep an ///< ambient room dark, lower for a quiet room. - uint8_t gain = 222; ///< sensitivity, HIGHER = more (a narrower dB window + uint8_t gain = 128; ///< sensitivity, HIGHER = more (a narrower dB window ///< so a given sound fills more of the bar). + /// Per-band conditioning (AudioBands.h, BandConditioner): the learner that levels the RIG, + /// mic response and room, without touching the music's own balance. `agc` picks whether the + /// tables keep learning; `ratio` is a compressor's N:1 (1 = off); `maxGain` caps the lift in + /// dB so a silent band is never amplified into its own noise. + /// Who sets the display window: 0 = manual (the floor and gain sliders), 1 = automatic (the + /// per-band learner). One choice rather than two overlapping mechanisms, so a slider on screen + /// is always a slider that does something. + uint8_t levels = 1; + uint8_t ratio = 4; ///< automatic: N of N:1, how hard the bands are levelled + uint8_t maxGain = 24; ///< automatic: the most a band is lifted, in dB /// Simulated-audio pattern (only shown, and only used, in Simulate mode, see `mode`). The synthesized /// signal drives audio-reactive effects with no mic or music, for a preview/demo device or a test: /// `music`: a plausible song: multi-sine bands + a swelling volume + a periodic beat + a @@ -228,8 +254,20 @@ class AudioService : public MoonModule { controls_.addSelect("sampleRate", sampleRateSel, kRateOptions, kSampleRateCount); controls_.setHidden(controls_.count() - 1, !localMode); // floor/gain condition the local FFT/level mapping. - controls_.addControl("floor", floor, 0, 255); controls_.setHidden(controls_.count() - 1, !localMode); - controls_.addControl("gain", gain, 1, 255); controls_.setHidden(controls_.count() - 1, !localMode); + // ONE decision, then the controls that decision needs. `levels` says who sets the display + // window: a person (the floor and gain sliders) or the learner (which measures each band's + // own floor and typical peak and maps them onto the window for you). Showing both sets at + // once was the confusing part: four sliders for two jobs, with `agc` silently overriding + // what `floor` and `gain` meant while leaving them on screen. + static constexpr const char* kLevelsOptions[] = {"manual", "automatic"}; + controls_.addSelect("levels", levels, kLevelsOptions, 2); + controls_.setHidden(controls_.count() - 1, !localMode); + const bool manual = levels == 0; + controls_.addControl("floor", floor, 0, 255); controls_.setHidden(controls_.count() - 1, !localMode || !manual); + controls_.addControl("gain", gain, 1, 255); controls_.setHidden(controls_.count() - 1, !localMode || !manual); + // Automatic: how hard it levels the bands, and the one guard that keeps it honest. + controls_.addControl("strength", ratio, 1, 20); controls_.setHidden(controls_.count() - 1, !localMode || manual); + controls_.addControl("maxBoost", maxGain, 0, 40); controls_.setHidden(controls_.count() - 1, !localMode || manual); // "send audio": broadcast the locally-analyzed frame. Only meaningful in Local mode. if constexpr (platform::hasNetwork) { controls_.addControl("send audio", send); @@ -259,6 +297,9 @@ class AudioService : public MoonModule { // instantaneous RMS, recomputed every audio block, this read-out is the human-readable // summary of it, not a separate statistic. controls_.addReadOnly("level RMS", levelStr_, sizeof(levelStr_)); + // The onset diagnostic: hits per second and the peak flux, the one row that answers + // "is the detector hearing the beat" without a per-band list (audio roadmap, § The UI). + controls_.addReadOnly("onsets", onsetStr_, sizeof(onsetStr_)); controls_.addReadOnly("peakHz", peakStr_, sizeof(peakStr_)); MoonModule::defineControls(); } @@ -271,7 +312,10 @@ class AudioService : public MoonModule { || std::strcmp(name, "sckPin") == 0 || std::strcmp(name, "mclkPin") == 0 || std::strcmp(name, "device") == 0 || std::strcmp(name, "sampleRate") == 0 || std::strcmp(name, "mode") == 0 - || std::strcmp(name, "send audio") == 0 || std::strcmp(name, "syncPort") == 0; + || std::strcmp(name, "send audio") == 0 || std::strcmp(name, "syncPort") == 0 + // `levels` swaps which sliders are shown (manual floor/gain against the learner's + // strength/maxBoost), so it toggles rows exactly as mode and send do. + || std::strcmp(name, "levels") == 0; } /// Pure build (see MoonModule::prepare): claim the frame election (this instance's frame_ drives the @@ -419,7 +463,11 @@ class AudioService : public MoonModule { applyWindow(samples_, kBlock, windowed_); platform::audioFft(windowed_, kBlock, mag_); magnitudesToBands(mag_, kMag, sampleRate(), floor, gain, - frame_.bands, peakHz, peakMag); + frame_.bands, peakHz, peakMag, + levels == 1 ? &cond_ : nullptr, + static_cast(kBlock * 1000u / sampleRate()), + ratio, static_cast(maxGain), true); + finishBands(); // Peak frequency: the exact-Hz FFT bin, held when there's no real signal so // it doesn't wander in silence. @@ -457,6 +505,7 @@ class AudioService : public MoonModule { const uint8_t pos = static_cast((t / 250u) % 16u); const uint8_t env = triwave8(static_cast((t % 250u) * 255u / 250u)); // 0..255 within a step for (uint8_t b = 0; b < 16; b++) frame_.bands[b] = (b == pos) ? env : 0; + finishBands(); frame_.level = env; frame_.peakHz = static_cast(80 + pos * 700); // bass→~10.6 kHz across the 16 steps frame_.peakMag = env; @@ -478,6 +527,7 @@ class AudioService : public MoonModule { const uint8_t swell = sin8(static_cast(t / 24u)); // slow volume breath uint16_t lvl = static_cast(swell / 2u + sum / 32u + beat / 2u); frame_.level = lvl > 255 ? 255 : lvl; + finishBands(); // Peak drifts across the spectrum so freq-mapped effects move. frame_.peakHz = static_cast(80 + sin8(static_cast(t / 40u)) * 40u); frame_.peakMag = frame_.level; @@ -490,6 +540,9 @@ class AudioService : public MoonModule { void tick1s() MM_NONBLOCKING override { std::snprintf(levelStr_, sizeof(levelStr_), "%u", static_cast(levelPeak_)); + std::snprintf(onsetStr_, sizeof(onsetStr_), "%u/s, flux %u", + static_cast(onsetCount_), static_cast(fluxPeak_)); + onsetCount_ = 0; fluxPeak_ = 0; std::snprintf(peakStr_, sizeof(peakStr_), "%u Hz", static_cast(frame_.peakHz)); levelPeak_ = 0; // reset for the next window @@ -577,6 +630,9 @@ class AudioService : public MoonModule { AudioFrame frame_; char levelStr_[12] = {}; + char onsetStr_[20] = {}; + uint8_t onsetCount_ = 0; ///< onsets in the current 1 s display window (UI only) + uint8_t fluxPeak_ = 0; ///< peak flux in that window (UI only) char peakStr_[12] = {}; uint8_t levelPeak_ = 0; // peak frame_.level across the current 1 s display window (UI only) @@ -800,7 +856,15 @@ class AudioService : public MoonModule { if (n <= 0) break; // -1 = nothing pending AudioFrame rf; if (parseWledAudioSync(pkt, static_cast(n), rf)) { + // The packet carries RAW bands; the ballistic is ours and lives across packets. + // A whole-frame copy would zero it forty times a second, so the smoothed state is + // carried over the copy and then advanced by this packet's bands, exactly as the + // mic path advances it by a block. + uint8_t keep[16]; + std::memcpy(keep, frame_.bandsSmoothed, sizeof(keep)); frame_ = rf; // received audio drives the effects + std::memcpy(frame_.bandsSmoothed, keep, sizeof(keep)); + finishBands(); lastSyncRecv_ = platform::millis(); // Whose audio this is. A receiver with no peer named looks identical to one taking // the wrong source, and on a multi-device rig that is the question being asked. diff --git a/src/core/math16.h b/src/core/math16.h index 8846a7de..68e33a41 100644 --- a/src/core/math16.h +++ b/src/core/math16.h @@ -119,17 +119,23 @@ constexpr int32_t map32(int32_t v, int32_t inLo, int32_t inHi, int32_t outLo, in /// silently freezes. The fix all nine converged on is to accumulate the RAW numerator in 64 bits and /// divide only at the read: which is what this does. /// -/// Usage: one member per animated quantity; call `advance(elapsedMs, rate)` once per frame, then +/// Usage: one member per animated quantity; call `advanceTo(nowMs, rate)` once per frame, then /// read as often as needed. `rate` is BPM-like: the caller's speed control, whatever its units. class BeatPhase { public: /// Accumulate this frame's contribution. Safe to call with a rate of 0 (the phase holds). /// The first call only establishes the time base, so a large `elapsed` at startup cannot jump /// the phase: the same first-tick guard three of the nine effects carried by hand. - void advance(uint32_t elapsedMs, uint32_t rate) { - if (!started_) { started_ = true; lastMs_ = elapsedMs; return; } - const uint32_t dt = elapsedMs - lastMs_; // unsigned: correct across the millis() wrap - lastMs_ = elapsedMs; + /// + /// Takes the CURRENT TIME, not a frame delta: the delta is computed here. Named `advanceTo` + /// for that reason, because `advance(dt)` reads naturally and is wrong, which four of five + /// oscillator callers wrote before the name said otherwise. Passing a delta feeds this the + /// change in frame time, so the phase creeps on a jittery device and stops dead on a steady + /// one; the effects it drove looked frozen while every test stayed green. + void advanceTo(uint32_t nowMs, uint32_t rate) { + if (!started_) { started_ = true; lastMs_ = nowMs; return; } + const uint32_t dt = nowMs - lastMs_; // unsigned: correct across the millis() wrap + lastMs_ = nowMs; num_ += static_cast(dt) * rate; } @@ -327,6 +333,20 @@ constexpr uint8_t smoothFollow(uint8_t current, uint8_t target, uint8_t rate) { return static_cast(current + (delta > 0 ? 1 : -1)); } +/// A meter's ballistic: rise at one rate, fall at another. `smoothFollow` with two time constants. +/// +/// A follower with a single rate is the wrong instrument for anything reactive: it makes the attack +/// as sluggish as the decay and rounds off the transient the effect exists to show. Every meter +/// standard separates the two, and a broadcast peak programme meter (PPM, IEC 60268-10) is the +/// shape wanted here: rise almost at once, fall over a comfortable time so the eye can read the +/// peak. WLED, FastLED and LedFx each arrived at the same asymmetric form independently. +/// +/// `rise` and `fall` are `smoothFollow` rates (0 = frozen, 255 = instant). Equal values reduce to +/// `smoothFollow` exactly, so this is a superset rather than a second mechanism. +constexpr uint8_t ballistic(uint8_t current, uint8_t target, uint8_t rise, uint8_t fall) { + return smoothFollow(current, target, target > current ? rise : fall); +} + /// The falling-peak meter: rise INSTANTLY to a new high, then decay slowly. The asymmetry is the /// whole point: a peak that eased upward would miss transients, and one that dropped instantly /// would show nothing to read. Every VU meter with a floating peak dot is this function. diff --git a/src/core/oscillators.h b/src/core/oscillators.h index 00fbd650..3fd3a1c4 100644 --- a/src/core/oscillators.h +++ b/src/core/oscillators.h @@ -50,7 +50,7 @@ struct Oscillator { /// A fixed-size bank of oscillators. `N` is a compile-time count because an effect knows how many /// quantities it animates, and a fixed member array costs no allocation and no indirection. /// -/// Usage, once per frame: `bank.advance(elapsed())`, then `bank.value(i)` wherever the value is +/// Usage, once per frame: `bank.advanceTo(elapsed())`, then `bank.value(i)` wherever the value is /// needed, including inside a pixel loop. Configure with `set(i, {...})` in prepare() or whenever a /// control changes; a rate change takes effect from that frame without jumping the phase, which is /// what live reconfiguration requires. @@ -68,11 +68,12 @@ class OscillatorBank { /// Read one oscillator's settings, for a caller that adjusts a single field. const Oscillator& get(uint8_t i) const { return osc_[i < N ? i : N - 1]; } - /// Advance every oscillator by this frame's elapsed time. Call once per frame, before reading. + /// Advance every oscillator to the current time. Call once per frame, before reading. Takes + /// the CURRENT TIME rather than a frame delta (BeatPhase::advanceTo owns the why). /// Each phase accumulates its own dt*rate numerator, so a rate of 0 holds and a rate changed /// mid-run continues from where the phase stands (BeatPhase owns the why). - void advance(uint32_t elapsedMs) { - for (uint8_t i = 0; i < N; i++) phase_[i].advance(elapsedMs, osc_[i].rate); + void advanceTo(uint32_t nowMs) { + for (uint8_t i = 0; i < N; i++) phase_[i].advanceTo(nowMs, osc_[i].rate); } /// Oscillator `i`'s current phase as an angle16, offset included. The raw cycle position, for a diff --git a/src/light/drivers/MoonLedDriver.h b/src/light/drivers/MoonLedDriver.h index 262e405b..fa8f9c48 100644 --- a/src/light/drivers/MoonLedDriver.h +++ b/src/light/drivers/MoonLedDriver.h @@ -269,7 +269,7 @@ class MoonI80Peripheral : public LedPeripheral { /// Status text when the bus will not come up, so the cause is on screen rather than in a serial log. /// The two real causes are named: a pin the peripheral cannot route, or no DMA-reachable memory for /// the frame (or the ring's pool). - const char* initFailMsg() const override { return "LCD-MM: bus init failed — check pins / memory"; } + const char* initFailMsg() const override { return "LCD-MM: bus init failed, check pins / memory"; } /// The expander needs a backend that can stream its ×8 frame; LCD_CAM is it, and this backend is /// LCD_CAM-only, so the answer is simply "wherever this backend runs at all". bool supportsPinExpander() const override { return platform::hasLcdCam; } diff --git a/src/light/drivers/MultiPinLedDriver.h b/src/light/drivers/MultiPinLedDriver.h index 4920a51e..c2d2a8fa 100644 --- a/src/light/drivers/MultiPinLedDriver.h +++ b/src/light/drivers/MultiPinLedDriver.h @@ -145,8 +145,8 @@ class I80Peripheral : public LedPeripheral { } const char* initFailMsg() const override { // Names the same peripheral the label does, so the error and the dropdown agree. - return (platform::i2sLanes > 0) ? "I2S-IDF: bus init failed — check pins / memory" - : "LCD-IDF: bus init failed — check pins / memory"; + return (platform::i2sLanes > 0) ? "I2S-IDF: bus init failed, check pins / memory" + : "LCD-IDF: bus init failed, check pins / memory"; } /// Spare bus lanes (shift mode, when the board has fewer data pins than the bus is wide) park on diff --git a/src/light/drivers/ParallelLedDriver.h b/src/light/drivers/ParallelLedDriver.h index 8bb3a5ef..53bd36ca 100644 --- a/src/light/drivers/ParallelLedDriver.h +++ b/src/light/drivers/ParallelLedDriver.h @@ -195,7 +195,7 @@ class ParallelLedDriver : public DriverBase { /// **ON is simply the better configuration — the switch exists to A/B it, not because some setups /// should run it OFF.** The one-frame output latency it adds (~8–20 ms) sits inside the perceptual /// audio↔visual sync window and is small next to what the pipeline already spends (FFT window + - /// render + the 8–16 ms WS2812 wire itself), so there is no user class — sound-reactive included — + /// render + the 8–16 ms WS2812 wire itself), so there is no user class (audio-reactive included) /// that should turn it off for latency. Leave it ON and take the fps. /// /// **It is per-driver because the resource is per-driver:** each driver's second DMA buffer lives @@ -547,7 +547,7 @@ class ParallelLedDriver : public DriverBase { /// DOUBLE-BUFFER (doubleBuffer ON — encode N+1 while N clocks out, `max(encode, wire)` per tick, /// +1 frame latency, +1 DMA buffer). Inert off this chip and idle until inited with a source /// buffer + correction. (The double-buffer defaults ON — it overlaps the blocking wire wait and - /// lifted the P4 whole-board rate 48→76 fps; OFF is the sound-reactive 0-latency opt-out and pays + /// lifted the P4 whole-board rate 48→76 fps; OFF is the audio-reactive 0-latency opt-out and pays /// for exactly one buffer — see the doubleBuffer control + docs/history/lessons.md.) // REPORTED AS BLOCKING, deliberately: tickSync()/tickRing() reach busWaitIfBusy(), which // waits for the DMA transfer to finish (bounded by waitBudgetMs, and self-limiting via diff --git a/src/light/drivers/ParlioLedDriver.h b/src/light/drivers/ParlioLedDriver.h index 16159a85..a3581fc7 100644 --- a/src/light/drivers/ParlioLedDriver.h +++ b/src/light/drivers/ParlioLedDriver.h @@ -41,7 +41,7 @@ class ParlioPeripheral : public LedPeripheral { /// Parlio is its own TX peripheral block, distinct from LcdCam/I2S — it coexists with an i80 or /// MoonI80 driver on the same chip (the P4 has both). LedHwBlock hwBlock() const override { return LedHwBlock::Parlio; } - const char* initFailMsg() const override { return "Parlio init failed — check pins / memory"; } + const char* initFailMsg() const override { return "Parlio init failed, check pins / memory"; } // The WS2812 slot rate (375 ns @ 2.67 MHz) — identical to the LCD backend's; // the P4 Parlio's 160 MHz PLL clock divides to it exactly (/60). diff --git a/src/light/drivers/RmtLedDriver.h b/src/light/drivers/RmtLedDriver.h index 10f9fc61..a891b25c 100644 --- a/src/light/drivers/RmtLedDriver.h +++ b/src/light/drivers/RmtLedDriver.h @@ -623,7 +623,7 @@ class RmtLedDriver : public DriverBase { // --- RMT channels (hardware; RMT targets only) --- - static constexpr const char* kInitFailMsg = "RMT init failed — check the pins"; + static constexpr const char* kInitFailMsg = "RMT init failed, check the pins"; // All-or-nothing: a failing pin deinits everything and reports which pin, // so tick()'s guard stays a single bool and the user sees one clear error diff --git a/src/light/effects/AuroraEffect.h b/src/light/effects/AuroraEffect.h index 18d683ac..57370a1b 100644 --- a/src/light/effects/AuroraEffect.h +++ b/src/light/effects/AuroraEffect.h @@ -37,7 +37,7 @@ namespace mm { /// Effect: layered noise curtains in polar coordinates, each layer on its own oscillators. class AuroraEffect : public EffectBase { public: - const char* tags() const override { return "💫🖌️"; } // power-function showcase + const char* tags() const override { return "💫🖌️🌫️🎡"; } // power-function showcase Dim dimensions() const override { return Dim::D3; } // volumetric: the curtains have depth static constexpr uint8_t kMaxLayers = 4; @@ -93,7 +93,7 @@ class AuroraEffect : public EffectBase { {.rate = static_cast(rate / 5), .low = -8192, .high = 8192, .phaseOffset = static_cast(i * 20000), .wave = Wave::Sine}); } - bank_.advance(elapsed()); + bank_.advanceTo(elapsed()); const bool table = lut_.ready(); const int32_t cx = w / 2, cy = h / 2, cz = dep / 2; diff --git a/src/light/effects/BeatRipplesEffect.h b/src/light/effects/BeatRipplesEffect.h new file mode 100644 index 00000000..4efe4ee3 --- /dev/null +++ b/src/light/effects/BeatRipplesEffect.h @@ -0,0 +1,188 @@ +#pragma once + +#include "light/effects/EffectBase.h" + +namespace mm { + +// BeatRipples: every beat is a stone dropped in water. +// +// The surface is a real wave simulation, the classic two-buffer scheme (Gomez 2000, the water +// effect the demoscene settled on): each cell's next height is the average of its four neighbors +// doubled, minus its previous height, damped. That is the discrete wave equation, and it gives +// what a hand-drawn expanding circle cannot: ripples that pass THROUGH each other, reflect off the +// walls, and interfere into the standing patterns that make water look like water. +// +// A detected onset drops a stone. The loudest band decides where, so a bass hit lands near the +// center and a treble hit out at the rim, and the strength of the hit sets how deep the stone +// falls. Between beats the surface keeps ringing on its own, which is why this reads as water +// rather than as a flash. +// +// The height field is rendered by SLOPE, not by height: a surface is visible because it bends +// light, so the difference between neighboring cells is what lights a pixel. That is also what +// makes the crests read as bright lines rather than as blobs. +// +// Volumetric: `Layer::extrude` fills a cube with the plane, the same choice Particles and Wave +// make. The wave equation itself is 2D, and a 3D one is a different effect rather than a flag. +// @card BeatRipplesEffect.png +/// Effect: a wave surface where every detected beat drops a stone, rippling and interfering. +class BeatRipplesEffect : public EffectBase { +public: + const char* tags() const override { return "💫🎶🖌️"; } + Dim dimensions() const override { return Dim::D2; } + + uint8_t damping = 200; // how long the water keeps ringing + uint8_t drop = 180; // how deep a beat's stone falls + uint8_t rain = 30; // idle drops when there is no music at all + uint8_t shine = 150; // how strongly the slope lights the surface + + void defineControls() override { + controls_.addControl("damping", damping, 0, 255); + controls_.addControl("drop", drop, 0, 255); + controls_.addControl("rain", rain, 0, 255); + controls_.addControl("shine", shine, 0, 255); + } + + void prepare() override { + const lengthType w = width(), h = height(); + const size_t n = static_cast(w) * h; + cur_.resize(n); prev_.resize(n); + if (cur_) std::memset(cur_.data(), 0, cur_.bytes()); + if (prev_) std::memset(prev_.data(), 0, prev_.bytes()); + onsetSeen_ = false; + started_ = false; + seq_ = 0; + // The rain clock starts full, so the first drop lands on the opening frame. Starting at + // zero leaves the pool empty for up to two seconds, which reads as a broken effect. + carry_ = 2000; + } + + void tick() MM_NONBLOCKING override { + if (!cur_ || !prev_) return; + const draw::Canvas cv = canvas(); + const lengthType w = width(), h = height(); + if (w < 3 || h < 3) return; + const uint32_t now = elapsed(); + const uint32_t dt = started_ ? now - lastMs_ : 0u; + lastMs_ = now; + started_ = true; + + const AudioFrame* f = AudioService::latestFrame(); + const bool onsetNow = f && f->onset != 0; + if (onsetNow && !onsetSeen_) { + // Where the stone lands: the loudest band picks the radius, so bass falls near the + // center and treble out at the rim. The angle walks so successive hits spread out. + uint8_t loudest = 0, best = 0; + for (uint8_t b = 0; b < 16; b++) if (f->bands[b] > best) { best = f->bands[b]; loudest = b; } + const angle16 a = static_cast(hashInt(seq_, 7) << 8); + const int32_t maxR = (w < h ? w : h) / 2 - 2; + const int32_t r = (maxR * (loudest + 1)) / 17; + const lengthType sx = static_cast(w / 2 + (static_cast(cos16(a)) * r) / 32768); + const lengthType sy = static_cast(h / 2 + (static_cast(sin16(a)) * r) / 32768); + // How hard the beat hit scales the stone, so a loud onset makes a bigger wave. The + // floor keeps a weak but real onset visible rather than silent. + const int32_t hit = 96 + (static_cast(f->onset) * 159) / 255; + splash(sx, sy, static_cast(-(static_cast(drop) * kSplashScale / 255) * hit / 255)); + seq_++; + } + onsetSeen_ = onsetNow; + + // Idle rain, so the surface is alive with no music. Time-paced, not per frame. + if (rain > 0) { + carry_ += dt; + const uint32_t every = 2000u - static_cast(rain) * 7u; + if (carry_ >= every) { + carry_ = 0; + const lengthType sx = static_cast(hashInt(seq_, 11) % static_cast(w)); + const lengthType sy = static_cast(hashInt(seq_, 13) % static_cast(h)); + splash(sx, sy, static_cast(-(static_cast(rain) * kSplashScale) / 255)); + seq_++; + } + } + + // The wave equation runs on a FIXED timestep, not once per frame. A wave simulation's + // speed IS its step count, so stepping per frame makes the water ring at the framerate: + // measured 16x faster at 1200 fps than at 60. The accumulator gives the same physics on + // any device, and the cap stops a long stall from spending a second catching up. + stepCarry_ += dt; + constexpr uint32_t kStepMs = 16; // ~60 physics steps a second + uint8_t steps = 0; + while (stepCarry_ >= kStepMs && steps < 4) { stepCarry_ -= kStepMs; steps++; } + if (stepCarry_ > kStepMs * 4) stepCarry_ = 0; + for (uint8_t it = 0; it < steps; it++) waveStep(); + renderSurface(cv, w, h); + } + + /// One step of the wave equation: next = (neighbors / 2) - previous, damped. The one line + /// that makes ripples pass THROUGH each other rather than merely expand. + void waveStep() { + const lengthType w = width(), h = height(); + int16_t* c = cur_.data(); + int16_t* p = prev_.data(); + const int32_t keep = 224 + static_cast(damping) / 8; // 224..255 of 256 + for (lengthType y = 1; y < h - 1; y++) + for (lengthType x = 1; x < w - 1; x++) { + const size_t o = static_cast(y) * w + x; + const int32_t sum = static_cast(c[o - 1]) + c[o + 1] + c[o - w] + c[o + w]; + int32_t v = (sum / 2) - static_cast(p[o]); + v = (v * keep) / 256; + p[o] = static_cast(v < -20000 ? -20000 : (v > 20000 ? 20000 : v)); + } + // The two buffers exchange roles: `prev_` now holds the new surface. + for (size_t i = 0, n = cur_.count(); i < n; i++) { const int16_t tmp = cur_[i]; cur_[i] = prev_[i]; prev_[i] = tmp; } + } + + /// Render by SLOPE: a water surface is visible because it bends light, so the gradient + /// between neighbors is what lights a pixel, not the height itself. + void renderSurface(const draw::Canvas& cv, lengthType w, lengthType h) { + const int16_t* s = cur_.data(); + for (lengthType y = 0; y < h; y++) + for (lengthType x = 0; x < w; x++) { + const size_t o = static_cast(y) * w + x; + const int32_t gx = (x > 0 && x < w - 1) ? static_cast(s[o + 1]) - s[o - 1] : 0; + const int32_t gy = (y > 0 && y < h - 1) ? static_cast(s[o + w]) - s[o - w] : 0; + int32_t mag = (gx < 0 ? -gx : gx) + (gy < 0 ? -gy : gy); + mag = (mag * shine) / 512; + const uint8_t bri = static_cast(mag > 255 ? 255 : mag); + // The palette index follows the HEIGHT, so a crest and a trough differ in color + // while the slope decides how brightly either shows. + const int32_t hgt = static_cast(s[o]); + const uint8_t index = static_cast(128 + (hgt > 4000 ? 127 : (hgt < -4000 ? -128 : (hgt * 127) / 4000))); + draw::pixel(cv, {x, y, 0}, colorFromPalette(*Palettes::active(), index, bri)); + } + } + +private: + /// The height field is int16 and rings up to +/-20000, so a stone is pressed in units of + /// thousands. The 0..255 `drop` and `rain` knobs scale onto that range here: at 255 a beat + /// presses the surface a third of the way to the clamp, which is deep enough to read as a + /// wave and shallow enough that interfering ripples do not saturate. + static constexpr int32_t kSplashScale = 6000; + + /// A stone: a small dish pressed into the surface, so the ripple starts as a real displacement + /// rather than a single spike that the simulation would smear into noise. + void splash(lengthType cx, lengthType cy, int16_t depth) { + const lengthType w = width(), h = height(); + const lengthType rad = static_cast((w < h ? w : h) / 24 + 1); + const int32_t r2 = static_cast(rad) * rad; + for (lengthType dy = -rad; dy <= rad; dy++) + for (lengthType dx = -rad; dx <= rad; dx++) { + const int32_t q = static_cast(dx) * dx + static_cast(dy) * dy; + if (q > r2) continue; + const lengthType x = cx + dx, y = cy + dy; + if (x < 1 || y < 1 || x >= w - 1 || y >= h - 1) continue; + const int32_t fall = ((r2 - q) * 100) / (r2 > 0 ? r2 : 1); + // Accumulated, not assigned: a stone landing on a live ripple adds to it. Writing + // the dish flat would erase whatever wave was already passing through, which is + // the one thing this simulation exists to show. + const size_t o = static_cast(y) * w + x; + const int32_t v = static_cast(cur_[o]) + (depth * fall) / 100; + cur_[o] = static_cast(v < -20000 ? -20000 : (v > 20000 ? 20000 : v)); + } + } + + ScratchBuffer cur_{*this}, prev_{*this}; + bool onsetSeen_ = false, started_ = false; + uint32_t lastMs_ = 0, carry_ = 2000, seq_ = 0, stepCarry_ = 0; +}; + +} // namespace mm diff --git a/src/light/effects/ColorTrailsEffect.h b/src/light/effects/ColorTrailsEffect.h new file mode 100644 index 00000000..f685d868 --- /dev/null +++ b/src/light/effects/ColorTrailsEffect.h @@ -0,0 +1,255 @@ +#pragma once + +#include "light/effects/EffectBase.h" + +namespace mm { + +// ColorTrails: emitters pouring color into a flow that is two noise profiles, not a field. +// +// The flow here is SEPARABLE, and that is the whole idea. A velocity field normally costs one +// vector per cell; this one is a single noise value per row and per column, so a WxH grid is +// steered by W+H numbers. Each row shifts horizontally by its own amount and each column shifts +// vertically by its own, and because the two shears compose, the picture swirls and folds as though +// something were solving for it. Nothing is: there is no pressure, no divergence, no iteration. +// +// That makes it the cheap end of the transport family. `FluidEffect` runs a real Stam solver and +// buys interaction between jets and vortices that form out of the flow's own history, at roughly +// twenty passes over the grid; this is two, and on a large panel that is the difference between an +// effect that runs and one that does not. Reach for the solver when the medium itself is the +// subject, and for this when the subject is color being carried. +// +// Four pieces, each a power function: +// +// - `inoise16` sampled along one axis fills the two profiles, so the flow drifts and reverses on +// its own clock rather than blowing steadily in one direction. +// - `draw::advect16` carries the plane along that flow, backward-sampled and bilinear, which is +// what smears a dot into a ribbon instead of teleporting it. +// - `draw::decay16` fades by a half-life, so a trail is the same length in seconds on any device. +// - `OscillatorBank` walks the emitters, so what is poured in keeps moving. +// +// The plane is 16-bit for the reason every transport effect here is: a value multiplied by slightly +// less than one, many times a second, either dies early or never fades at 8 bits. +// +// Credit: Stefan Petrick, whose concept this is, and Jeff (mindful_stone / 4wheeljive), whose +// ColorTrails in AuroraPortal is the composition it follows, by way of MoonLight: +// https://github.com/4wheeljive/AuroraPortal/blob/main/src/programs/colorTrails_detail.hpp +// The separable-noise-advection idea is theirs; the kernels underneath are this project's. +// @card ColorTrailsEffect.png +/// Effect: color emitters carried by a flow made of two noise profiles, one per axis. +class ColorTrailsEffect : public EffectBase { +public: + const char* tags() const override { return "💫🖌️💨🌫️"; } + Dim dimensions() const override { return Dim::D3; } // the profiles steer every slice + + /// Which emitters pour color in. They are compositional rather than exclusive: `All` is the + /// intended picture and the others exist to see one at a time. + enum class Mode : uint8_t { All = 0, Orbital, Lissajous, Border }; + + uint8_t speed = 60; // how fast the emitters travel + uint8_t flow = 128; // how far a row or column is pushed: the shear amount + uint8_t flowSpeed = 128; // how fast the profiles themselves drift + uint8_t scale = 85; // the profiles' spatial frequency: few broad bands or many fine + uint8_t persistence = 60; // how long color survives, as a half-life + uint8_t colorSpeed = 128; // how fast the emitters walk the palette + uint8_t size = 128; // orbit radius, and the Lissajous figure's reach + uint8_t mode = static_cast(Mode::All); + + void defineControls() override { + controls_.addControl("speed", speed, 0, 255); + controls_.addControl("flow", flow, 0, 255); + controls_.addControl("flowSpeed", flowSpeed, 0, 255); + controls_.addControl("scale", scale, 1, 255); + controls_.addControl("persistence", persistence, 0, 255); + controls_.addControl("colorSpeed", colorSpeed, 0, 255); + controls_.addControl("size", size, 0, 255); + controls_.addSelect("mode", mode, kModes, 4); + } + + void prepare() override { + const size_t needed = static_cast(width()) * height() * depth() * 3u; + plane_.resize(needed); + scratch_.resize(needed); + carry_.resize(needed); + // The profiles are the whole velocity field: one value per column, one per row. + xProf_.resize(static_cast(width())); + yProf_.resize(static_cast(height())); + if (plane_) std::memset(plane_.data(), 0, plane_.bytes()); + if (scratch_) std::memset(scratch_.data(), 0, scratch_.bytes()); + started_ = false; + front_ = true; + } + + void tick() MM_NONBLOCKING override { + if (!plane_ || !scratch_ || !xProf_ || !yProf_) return; + const lengthType w = width(), h = height(), d = depth(); + const uint32_t now = elapsed(); + const uint32_t dt = started_ ? now - lastMs_ : 0u; + lastMs_ = now; + started_ = true; + + // Both emitter clocks scale from `speed`, and 0 STOPS them rather than leaving a floor: + // a speed slider whose slowest setting still moves is not a speed slider. The orbit and + // the Lissajous run at different rates so they drift in and out of step instead of + // marching together. + bank_.set(0, {.rate = static_cast(speed / 4), .low = 0, .high = 65535, + .phaseOffset = 0, .wave = Wave::Saw}); + bank_.set(1, {.rate = static_cast((speed * 3u) / 22u), .low = 0, .high = 65535, + .phaseOffset = 16384, .wave = Wave::Saw}); + // advance() takes an ABSOLUTE timestamp and computes its own delta (math16.h BeatPhase): + // passing this frame's dt instead makes every delta a few milliseconds of a clock that + // never advances, so the emitters sit still while the picture flickers between them. + bank_.advanceTo(now); + // The palette walk is on the same clock, advanced here rather than read off the wall time: + // `colorSpeed` sets how fast it moves THROUGH the palette, and `speed` still gates it, so + // stopping the effect stops the color too. + huePhase_ += (dt * static_cast(colorSpeed) * static_cast(speed)) / 24000u; + + sampleProfiles(w, h, now); + + ScratchBuffer& src = front_ ? plane_ : scratch_; + ScratchBuffer& dst = front_ ? scratch_ : plane_; + + // The two shears, applied as one advection: a light's source is offset horizontally by its + // ROW's profile and vertically by its COLUMN's. Doing both in one backward sample is what + // keeps this to a single pass, where the original takes two and a temporary buffer. + const int32_t* xp = xProf_.data(); + const int32_t* yp = yProf_.data(); + draw::advect16(dst.data(), src.data(), w, h, d, + [xp, yp](lengthType x, lengthType y, lengthType, + draw::pos_t& vx, draw::pos_t& vy) { + vx = static_cast(yp[y]); + vy = static_cast(xp[x]); + }, draw::Edge::Wrap); + front_ = !front_; + ScratchBuffer& moved = front_ ? plane_ : scratch_; + + draw::decay16(moved.data(), moved.count(), halfLifeMs(), dt); + emit(moved.data(), w, h, d); + draw::blit16(canvas(), moved.data(), w, h, d, carry_ ? carry_.data() : nullptr); + } + +private: + static constexpr const char* kModes[4] = {"All", "Orbital", "Lissajous", "Border"}; + + uint32_t halfLifeMs() const { + return 20u + static_cast(persistence) * static_cast(persistence) / 16u; + } + + /// Fill the two profiles: one noise value per column and per row, in sub-pixels of shift. + /// + /// This is the effect's entire velocity field, and the reason it is cheap: W+H noise samples a + /// frame rather than W*H. The frequency scales inversely with the count so the flow keeps the + /// same number of bands across it on any grid, rather than turning to static on a large one. + void sampleProfiles(lengthType w, lengthType h, uint32_t now) { + const uint32_t phase = (now * static_cast(flowSpeed)) / 24u; + // The shear scales with the grid: a fixed pixel count is a strong flow on a 16-wide panel + // and an invisible one on a 256-wide, which is the same reasoning `fShift` carries upstream. + const int32_t reach = (static_cast(flow) * (w < h ? w : h)) / 220; + const uint32_t cells = static_cast(scale) * 24u; + for (lengthType x = 0; x < w; x++) { + const int32_t n = static_cast(inoise16(static_cast(x) * cells, phase, 0)) - 32768; + xProf_[static_cast(x)] = (n * reach * draw::kSubOne) / 32768 / 16; + } + for (lengthType y = 0; y < h; y++) { + // A different offset into the field, so the two axes are decoupled: one field read for + // both would rise and fall together and slide the whole picture along a diagonal. + const int32_t n = static_cast(inoise16(static_cast(y) * cells, phase, 32768)) - 32768; + yProf_[static_cast(y)] = (n * reach * draw::kSubOne) / 32768 / 16; + } + } + + /// The emitters: what is poured in, drawn after the transport so this frame's color is sharp + /// and only what came before has been carried. + void emit(uint16_t* p, lengthType w, lengthType h, lengthType d) { + const Mode m = static_cast(mode); + // An emitter writes at FULL brightness, every frame. What depends on elapsed time is + // where it is, not how brightly it burns: a dot moves further between two frames on a slow + // device and less on a fast one, and the trail it leaves is the same either way because + // `decay16` fades in real time. Scaling brightness by dt instead is what made this effect + // nearly black in the preview: at 17k fps the frame delta rounds to zero and the emitters + // wrote nothing, leaving only the border, which covers every frame, visible at all. + const uint8_t hue = static_cast(huePhase_); + const int32_t half = (w < h ? w : h) / 2; + const int32_t radius = (half * static_cast(size)) / 300 + 1; + const lengthType dot = static_cast((w < h ? w : h) / 24 + 1); + + if (m == Mode::All || m == Mode::Orbital) { + // Three circles on one orbit, spaced a third apart, each a third of the palette along. + for (uint8_t i = 0; i < 3; i++) { + const angle16 a = static_cast(bank_.phase(0) + i * 21845); + const lengthType cx = static_cast(w / 2 + (static_cast(cos16(a)) * radius) / 32768); + const lengthType cy = static_cast(h / 2 + (static_cast(sin16(a)) * radius) / 32768); + splat(p, w, h, d, cx, cy, dot, static_cast(hue + i * 85)); + } + } + if (m == Mode::All || m == Mode::Lissajous) { + // A Lissajous point: two sines at a 3:2 ratio, which traces a figure that never closes + // on itself the way a circle does, so the line it lays down keeps finding new ground. + const angle16 a = static_cast(bank_.phase(1)); + const angle16 b = static_cast(bank_.phase(1) * 3u / 2u); + const lengthType cx = static_cast(w / 2 + (static_cast(sin16(a)) * (w / 2 - 1)) / 32768); + const lengthType cy = static_cast(h / 2 + (static_cast(cos16(b)) * (h / 2 - 1)) / 32768); + splat(p, w, h, d, cx, cy, dot, static_cast(hue + 128)); + } + if (m == Mode::All || m == Mode::Border) { + // The rim, its hue walking around the perimeter: the flow pulls it inward, so the + // border is a source that feeds the whole picture rather than a frame around it. + for (lengthType x = 0; x < w; x++) { + const uint8_t c = static_cast(hue + (x * 255) / (w > 1 ? w : 1)); + put(p, w, h, d, x, 0, c, 255); + put(p, w, h, d, x, static_cast(h - 1), c, 255); + } + for (lengthType y = 0; y < h; y++) { + const uint8_t c = static_cast(hue + 128 + (y * 255) / (h > 1 ? h : 1)); + put(p, w, h, d, 0, y, c, 255); + put(p, w, h, d, static_cast(w - 1), y, c, 255); + } + } + } + + /// A soft round emitter, brightest at its center. + void splat(uint16_t* p, lengthType w, lengthType h, lengthType d, + lengthType cx, lengthType cy, lengthType r, uint8_t index) { + const int32_t r2 = static_cast(r) * r; + for (lengthType dy = -r; dy <= r; dy++) + for (lengthType dx = -r; dx <= r; dx++) { + const int32_t q = static_cast(dx) * dx + static_cast(dy) * dy; + if (q > r2) continue; + const uint8_t bri = static_cast(255 - (q * 255) / (r2 > 0 ? r2 : 1)); + put(p, w, h, d, static_cast(cx + dx), static_cast(cy + dy), index, bri); + } + } + + /// Write one light of the wide plane, in the palette's color, taking the BRIGHTER of what is + /// there and what is poured in. + /// + /// Not a sum: an emitter that keeps covering the same light (the border does, every frame) + /// accumulates without limit and pins it at white, which no half-life can drain and which gets + /// worse the faster the device runs. A maximum bounds every light by the color actually poured + /// in, so the picture stays the palette's rather than turning to paper, and the trail still + /// reads because decay pulls a light down as soon as the emitter moves off it. + void put(uint16_t* p, lengthType w, lengthType h, lengthType d, + lengthType x, lengthType y, uint8_t index, uint8_t bri) { + if (x < 0 || y < 0 || x >= w || y >= h) return; + const RGB c = colorFromPalette(*Palettes::active(), index, bri); + const uint8_t ch[3] = {c.r, c.g, c.b}; + for (lengthType z = 0; z < d; z++) { + const size_t o = ((static_cast(z) * h + y) * w + x) * 3u; + for (uint8_t k = 0; k < 3; k++) { + const uint16_t v = static_cast(static_cast(ch[k]) << 8); + if (v > p[o + k]) p[o + k] = v; + } + } + } + + ScratchBuffer plane_{*this}; ///< the color itself, three samples per light + ScratchBuffer scratch_{*this}; ///< advect's destination; the two alternate roles + ScratchBuffer carry_{*this}; ///< the dither's per-channel error + ScratchBuffer xProf_{*this}; ///< one shift per column: the vertical flow + ScratchBuffer yProf_{*this}; ///< one shift per row: the horizontal flow + OscillatorBank<2> bank_; + bool front_ = true, started_ = false; + uint32_t lastMs_ = 0, huePhase_ = 0; +}; + +} // namespace mm diff --git a/src/light/effects/DissolveEffect.h b/src/light/effects/DissolveEffect.h index a22c67e1..f0807106 100644 --- a/src/light/effects/DissolveEffect.h +++ b/src/light/effects/DissolveEffect.h @@ -49,7 +49,7 @@ class DissolveEffect : public EffectBase { const draw::Canvas cv = canvas(); const lengthType w = width(), h = height(); - phase_.advance(elapsed(), bpm); + phase_.advanceTo(elapsed(), bpm); const uint32_t raw = phase_.phase(65536); // Each complete sweep is one "generation": the generation number seeds the hash, so every diff --git a/src/light/effects/DistortionWavesEffect.h b/src/light/effects/DistortionWavesEffect.h index 27cb8fb0..f623eb19 100644 --- a/src/light/effects/DistortionWavesEffect.h +++ b/src/light/effects/DistortionWavesEffect.h @@ -43,7 +43,7 @@ class DistortionWavesEffect : public EffectBase { // speed 0 freezes: BeatPhase still tracks the time base, so resuming does not jump by the // pause. Two scales are read from the ONE accumulator (see ty below) — the reason phase() // takes the scale at the read rather than baking it into the accumulate. - phase_.advance(elapsed(), speed); + phase_.advanceTo(elapsed(), speed); const uint8_t t = static_cast(phase_.phase(256)); // ty is the y-axis time phase, running ~1.3× t. Reading the SAME accumulator at a different // scale (not deriving it from the already-wrapped uint8 t) keeps it CONTINUOUS: computing ty diff --git a/src/light/effects/EchoEffect.h b/src/light/effects/EchoEffect.h index 87db9e10..15229899 100644 --- a/src/light/effects/EchoEffect.h +++ b/src/light/effects/EchoEffect.h @@ -61,7 +61,7 @@ class EchoEffect : public EffectBase { const lengthType w = width(), h = height(); if (w < 2 || h < 2 || !history_) return; - phase_.advance(elapsed(), bpm); + phase_.advanceTo(elapsed(), bpm); const angle16 t = static_cast(phase_.phase(65536)); // Feedback is per-frame work driving a per-second look, so every amount below scales by how diff --git a/src/light/effects/FishTankEffect.h b/src/light/effects/FishTankEffect.h index 66bfc5ef..b346c058 100644 --- a/src/light/effects/FishTankEffect.h +++ b/src/light/effects/FishTankEffect.h @@ -121,7 +121,7 @@ class FishTankEffect : public EffectBase { public: static constexpr uint8_t kPool = 24; // the control maxima, summed - const char* tags() const override { return "💫🎶✨👾"; } // audio-reactive when soundReactive is set + const char* tags() const override { return "💫🎶✨👾"; } // audio-reactive when audioReactive is set Dim dimensions() const override { return Dim::D2; } /// How many of each swim, and how fast. @@ -130,7 +130,7 @@ class FishTankEffect : public EffectBase { uint8_t tiny = 5; // the school uint8_t speed = 80; uint8_t spriteSize = 0; // 0 = auto: scale with the grid, as FlyingToasters does - bool soundReactive = false; // move to the music: each sprite on its own band, still in silence + bool audioReactive = false; // move to the music: each sprite on its own band, still in silence void defineControls() override { controls_.addControl("fish", fish, 0, 8); @@ -138,7 +138,7 @@ class FishTankEffect : public EffectBase { controls_.addControl("school", tiny, 0, 8); controls_.addControl("speed", speed, 1, 255); controls_.addControl("spriteSize", spriteSize, 0, 12); - controls_.addControl("soundReactive", soundReactive); + controls_.addControl("audioReactive", audioReactive); } void prepare() override { @@ -179,10 +179,10 @@ class FishTankEffect : public EffectBase { draw::fill(cv, RGB{0, 0, 0}); const uint32_t scale = time_.advance(elapsed()); - if (scale > 0) pool_.stepDriven(scale, soundReactive, wanted()); + if (scale > 0) pool_.stepDriven(scale, audioReactive, wanted()); // One shared tail-beat clock, offset per fish so the tank never pulses in unison. - beat_.advance(elapsed(), 200); + beat_.advanceTo(elapsed(), 200); syncPopulation(); diff --git a/src/light/effects/FluidEffect.h b/src/light/effects/FluidEffect.h index 00acc615..0fe74f95 100644 --- a/src/light/effects/FluidEffect.h +++ b/src/light/effects/FluidEffect.h @@ -26,7 +26,7 @@ namespace mm { /// Effect: dye poured into a simulated fluid, carried by the flow the medium itself works out. class FluidEffect : public EffectBase { public: - const char* tags() const override { return "💫🖌️"; } // power-function showcase + const char* tags() const override { return "💫🖌️🌊💨"; } // power-function showcase Dim dimensions() const override { return Dim::D3; } // a medium per slice, jets wander in z static constexpr uint8_t kMaxJets = 4; @@ -114,7 +114,10 @@ class FluidEffect : public EffectBase { {.rate = static_cast(rate / 4 + 1), .low = 0, .high = 65535, .phaseOffset = static_cast(i * 30000), .wave = Wave::Sine}); } - bank_.advance(dt); + // advance() takes an ABSOLUTE timestamp and computes its own delta (math16.h BeatPhase), + // so passing this frame's dt feeds it the CHANGE in frame time: a few percent of the right + // motion on a jittery device, and none at all where the frame time is steady. + bank_.advanceTo(now); uint16_t* live = front_ ? dyeA_.data() : dyeB_.data(); uint16_t* spare = front_ ? dyeB_.data() : dyeA_.data(); diff --git a/src/light/effects/FlyingToastersEffect.h b/src/light/effects/FlyingToastersEffect.h index cf6e90df..4e93d21f 100644 --- a/src/light/effects/FlyingToastersEffect.h +++ b/src/light/effects/FlyingToastersEffect.h @@ -104,7 +104,7 @@ class FlyingToastersEffect : public EffectBase { public: static constexpr uint8_t kPool = 20; // 12 toasters + 8 toast, the control maxima - const char* tags() const override { return "💫🎶✨👾"; } // audio-reactive when soundReactive is set + const char* tags() const override { return "💫🎶✨👾"; } // audio-reactive when audioReactive is set Dim dimensions() const override { return Dim::D2; } /// How many of each fly, and how fast the flock drifts. @@ -112,14 +112,14 @@ class FlyingToastersEffect : public EffectBase { uint8_t toast = 3; uint8_t speed = 96; uint8_t spriteSize = 0; // 0 = auto: scale with the grid; both toasters and toast use it - bool soundReactive = false; // move to the music: each sprite on its own band, still in silence + bool audioReactive = false; // move to the music: each sprite on its own band, still in silence void defineControls() override { controls_.addControl("toasters", toasters, 1, 12); controls_.addControl("toast", toast, 0, 8); controls_.addControl("speed", speed, 1, 255); controls_.addControl("spriteSize", spriteSize, 0, 12); - controls_.addControl("soundReactive", soundReactive); + controls_.addControl("audioReactive", audioReactive); } void prepare() override { @@ -160,10 +160,10 @@ class FlyingToastersEffect : public EffectBase { draw::fill(cv, RGB{0, 0, 0}); const uint32_t scale = time_.advance(elapsed()); - if (scale > 0) pool_.stepDriven(scale, soundReactive, wanted()); + if (scale > 0) pool_.stepDriven(scale, audioReactive, wanted()); // The wing flap: one shared BeatPhase, offset per toaster so the flock never syncs. - flap_.advance(elapsed(), 180); // ~3 flaps per second across the 4-frame cycle + flap_.advanceTo(elapsed(), 180); // ~3 flaps per second across the 4-frame cycle for (uint16_t i = 0; i < pool_.count; i++) { if (!pool_.ttl[i]) continue; diff --git a/src/light/effects/FreqMatrixEffect.h b/src/light/effects/FreqMatrixEffect.h index 9be0b8bd..bc0d26a3 100644 --- a/src/light/effects/FreqMatrixEffect.h +++ b/src/light/effects/FreqMatrixEffect.h @@ -20,7 +20,7 @@ namespace mm { // Layer::extrude fans that single column across x (and z on a cube) on wider layers, so the same // code renders a strip or tiles a panel. // -// Prior art: WLED's "Freqmatrix" sound-reactive effect (Andrew Tuline / the WLED SR fork), carried +// Prior art: WLED's "Freqmatrix" audio-reactive effect (Andrew Tuline / the WLED SR fork), carried // into MoonLight (E_MoonModules / MoonModules). The shift-register scroll, the // pixVal = level·fx·sensitivity/256 brightness, the 80 Hz / quarter-volume gate, the // upperLimit = 80 + 42·highBin / lowerLimit = 80 + 3·lowBin frequency window, and the diff --git a/src/light/effects/LavaLampEffect.h b/src/light/effects/LavaLampEffect.h index 9c566030..47a3cdfd 100644 --- a/src/light/effects/LavaLampEffect.h +++ b/src/light/effects/LavaLampEffect.h @@ -48,7 +48,7 @@ class LavaLampEffect : public EffectBase { // Shared accumulator: raw dt·bpm in 64 bits, divided only at the read, so a sub-millisecond // frame does not round to zero and freeze the animation (mm::BeatPhase owns that rule now). - phase_.advance(elapsed(), bpm); + phase_.advanceTo(elapsed(), bpm); const uint8_t t = static_cast(phase_.phase(256)); int16_t bx[NUM_BLOBS] = {}; diff --git a/src/light/effects/MetaballsEffect.h b/src/light/effects/MetaballsEffect.h index 8be49ac3..f5964878 100644 --- a/src/light/effects/MetaballsEffect.h +++ b/src/light/effects/MetaballsEffect.h @@ -46,7 +46,7 @@ class MetaballsEffect : public EffectBase { uint32_t now = elapsed(); // Shared accumulator: raw dt·bpm in 64 bits, divided only at the read, so a sub-millisecond // frame does not round to zero and freeze the animation (mm::BeatPhase owns that rule now). - phase_.advance(now, bpm); + phase_.advanceTo(now, bpm); const uint8_t t = static_cast(phase_.phase(256)); const uint8_t n = count < MAX_BALLS ? count : MAX_BALLS; diff --git a/src/light/effects/MovingHeadEffect.h b/src/light/effects/MovingHeadEffect.h index a47fb949..79c35cf7 100644 --- a/src/light/effects/MovingHeadEffect.h +++ b/src/light/effects/MovingHeadEffect.h @@ -26,7 +26,7 @@ namespace mm { /// @card MovingHeadEffect.gif class MovingHeadEffect : public EffectBase { public: - const char* tags() const override { return "💫🎶🎯"; } // audio-reactive when soundReactive is set + const char* tags() const override { return "💫🎶🎯"; } // audio-reactive when audioReactive is set /// D3: every head is a fixture with its own aim, so the effect places all of them itself. /// /// Declaring D1 would be smaller, but it is a promise the Layer keeps by EXTRUDING: it writes @@ -58,7 +58,7 @@ class MovingHeadEffect : public EffectBase { /// Move and light with the music: the beam swings wider as the room gets louder, each head /// brightens on its own frequency band, and a beat kicks the whole rig. Silence holds it still, /// which is what makes the mode read as reactive rather than merely animated. - bool soundReactive = false; + bool audioReactive = false; void defineControls() override { controls_.addSelect("formation", formation, kFormationNames, kFormationCount); @@ -68,7 +68,7 @@ class MovingHeadEffect : public EffectBase { controls_.addControl("tiltRange", tiltRange, 0, 255); controls_.addControl("panCenter", panCenter, 0, 255); controls_.addControl("tiltCenter", tiltCenter, 0, 255); - controls_.addControl("soundReactive", soundReactive); + controls_.addControl("audioReactive", audioReactive); } void prepare() override { @@ -89,8 +89,8 @@ class MovingHeadEffect : public EffectBase { // Own the background: an effect must not inherit the previous frame's picture. draw::fill(cv, RGB{0, 0, 0}); - pan_.advance(elapsed(), panBpm); - tilt_.advance(elapsed(), tiltBpm); + pan_.advanceTo(elapsed(), panBpm); + tilt_.advanceTo(elapsed(), tiltBpm); // phase(65536) is the angle16 form sin16 takes; truncating to uint16 is the free wrap. const uint16_t panPhase = static_cast(pan_.phase(65536)); @@ -98,7 +98,7 @@ class MovingHeadEffect : public EffectBase { // Audio is read ONCE per frame, not per head: the spectrum is the same for all of them, // and a per-head read would be the same work times the rig size. - const AudioFrame* audio = soundReactive ? AudioService::latestFrame() : nullptr; + const AudioFrame* audio = audioReactive ? AudioService::latestFrame() : nullptr; const bool live = audio && audio->levelSmoothed >= kSilence; // A beat widens the sweep and flares the color, then decays over ~20 frames. Without the @@ -110,9 +110,9 @@ class MovingHeadEffect : public EffectBase { // Loud music opens the beam to its full range, quiet keeps it tight. In silence the rig // HOLDS its aim rather than drifting. const uint16_t loud = live ? audio->levelSmoothed : 0; - const uint8_t swingPan = soundReactive ? scaleToLevel(panRange, loud) : panRange; - const uint8_t swingTilt = soundReactive ? scaleToLevel(tiltRange, loud) : tiltRange; - const bool frozen = soundReactive && !live; + const uint8_t swingPan = audioReactive ? scaleToLevel(panRange, loud) : panRange; + const uint8_t swingTilt = audioReactive ? scaleToLevel(tiltRange, loud) : tiltRange; + const bool frozen = audioReactive && !live; for (nrOfLightsType i = 0; i < n; i++) { const uint32_t hx = i % w, hy = (i / w) % h, hz = i / (w * h); @@ -132,7 +132,7 @@ class MovingHeadEffect : public EffectBase { // band, so the rig ripples with the music instead of pulsing as one block. const uint8_t hue = static_cast((panPhase >> 8) + (f.phase >> 8)); uint8_t bright = 255; - if (soundReactive) { + if (audioReactive) { const uint8_t band = static_cast((static_cast(i) * 16u) / (n ? n : 1)); const uint8_t mag = audio ? audio->bands[band > 15 ? 15 : band] : 0; // A floor keeps a head whose own band is quiet visible rather than black, and the @@ -209,7 +209,7 @@ class MovingHeadEffect : public EffectBase { /// Widen the sweep on a beat, by up to half again. The beat is the loudest thing in the mode, /// so it moves the rig as well as lighting it. uint8_t boost(uint8_t range) const { - if (!soundReactive || beatDecay_ == 0) return range; + if (!audioReactive || beatDecay_ == 0) return range; const uint16_t wider = static_cast(range + (range * beatDecay_) / 512u); return static_cast(wider > 255 ? 255 : wider); } diff --git a/src/light/effects/NebulaEffect.h b/src/light/effects/NebulaEffect.h index 7416564f..523a28ca 100644 --- a/src/light/effects/NebulaEffect.h +++ b/src/light/effects/NebulaEffect.h @@ -29,7 +29,7 @@ namespace mm { /// Effect: a noise field births light, a curl flow carries it, and the two make a folding cloud. class NebulaEffect : public EffectBase { public: - const char* tags() const override { return "💫🖌️"; } // power-function showcase + const char* tags() const override { return "💫🖌️💨🌫️"; } // power-function showcase Dim dimensions() const override { return Dim::D3; } // the flow and the field both carry z uint8_t speed = 40; // how fast the medium moves, and with it the whole cloud @@ -112,7 +112,10 @@ class NebulaEffect : public EffectBase { bank_.set(0, {.rate = static_cast(4 + speed / 6), .low = 0, .high = 65535, .phaseOffset = 0, .wave = Wave::Saw}); - bank_.advance(dt); + // advance() takes an ABSOLUTE timestamp and computes its own delta (math16.h BeatPhase), + // so passing this frame's dt feeds it the CHANGE in frame time: a few percent of the right + // motion on a jittery device, and none at all where the frame time is steady. + bank_.advanceTo(now); uint16_t* live = front_ ? planeA_.data() : planeB_.data(); uint16_t* spare = front_ ? planeB_.data() : planeA_.data(); diff --git a/src/light/effects/NoiseEffect.h b/src/light/effects/NoiseEffect.h index d39c5f0e..73dce334 100644 --- a/src/light/effects/NoiseEffect.h +++ b/src/light/effects/NoiseEffect.h @@ -24,7 +24,7 @@ namespace mm { /// @card NoiseEffect.gif class NoiseEffect : public EffectBase { public: - const char* tags() const override { return "⚡️💫🌙🐙"; } // FastLED + MoonLight lineage + const char* tags() const override { return "⚡️💫🌙🐙🌫️"; } // FastLED + MoonLight lineage Dim dimensions() const override { return Dim::D3; } static constexpr const char* kMotionOptions[] = {"drift", "morph"}; diff --git a/src/light/effects/NoiseMeterEffect.h b/src/light/effects/NoiseMeterEffect.h index 5d79b645..4b41fe33 100644 --- a/src/light/effects/NoiseMeterEffect.h +++ b/src/light/effects/NoiseMeterEffect.h @@ -14,7 +14,7 @@ namespace mm { // reads as one wide block of light without the effect duplicating the broadcast itself (that is the // framework's job; see architecture.md § Dimensionality). // -// Prior art: WLED's "Noisemeter" sound-reactive effect (Andrew Tuline / WLED-SR). The fadeRate/width +// Prior art: WLED's "Noisemeter" audio-reactive effect (Andrew Tuline / WLED-SR). The fadeRate/width // knobs, the level→length mapping, the inoise8(row·level + aux0, aux1 + row·level) field sampling, and // the bottom-up fill are reproduced here, written fresh on projectMM's EffectBase + the shared draw / // palette / noise / beatsin8 primitives. Reads AudioService::latestFrame(); silence → level 0 → @@ -23,7 +23,7 @@ namespace mm { /// Audio-reactive effect: a noise field modulated by sound level. class NoiseMeterEffect : public EffectBase { public: - const char* tags() const override { return "🐙🎵"; } // WLED origin · audio + const char* tags() const override { return "🐙🎵🌫️"; } // WLED origin · audio Dim dimensions() const override { return Dim::D1; } // writes the x=0 column; extrude fans x and z // Defaults match WLED's Noisemeter exactly. diff --git a/src/light/effects/PacmanEffect.h b/src/light/effects/PacmanEffect.h index 95c23c11..ef40fe17 100644 --- a/src/light/effects/PacmanEffect.h +++ b/src/light/effects/PacmanEffect.h @@ -123,7 +123,7 @@ class PacmanEffect : public EffectBase { public: static constexpr uint8_t kPool = 12; - const char* tags() const override { return "💫🎶✨👾"; } // audio-reactive when soundReactive is set + const char* tags() const override { return "💫🎶✨👾"; } // audio-reactive when audioReactive is set Dim dimensions() const override { return Dim::D2; } /// How many of each, and how fast they travel. @@ -131,14 +131,14 @@ class PacmanEffect : public EffectBase { uint8_t ghosts = 4; // the arcade cast: Blinky, Pinky, Inky, Clyde uint8_t speed = 96; uint8_t spriteSize = 0; // 0 = auto: scale with the grid - bool soundReactive = false; // move to the music: each sprite on its own band, still in silence + bool audioReactive = false; // move to the music: each sprite on its own band, still in silence void defineControls() override { controls_.addControl("pacmen", pacmen, 0, 4); controls_.addControl("ghosts", ghosts, 0, 8); controls_.addControl("speed", speed, 1, 255); controls_.addControl("spriteSize", spriteSize, 0, 12); - controls_.addControl("soundReactive", soundReactive); + controls_.addControl("audioReactive", audioReactive); } void prepare() override { @@ -176,11 +176,11 @@ class PacmanEffect : public EffectBase { draw::fill(cv, RGB{0, 0, 0}); const uint32_t scale = time_.advance(elapsed()); - if (scale > 0) pool_.stepDriven(scale, soundReactive, wanted()); + if (scale > 0) pool_.stepDriven(scale, audioReactive, wanted()); // One clock for the chomp AND the ghosts' shuffle: in the arcade they run at the same // rate, and a single phase keeps them in step without a second accumulator. - chomp_.advance(elapsed(), 420); + chomp_.advanceTo(elapsed(), 420); syncPopulation(); diff --git a/src/light/effects/PlasmaEffect.h b/src/light/effects/PlasmaEffect.h index 8450767a..939caa5d 100644 --- a/src/light/effects/PlasmaEffect.h +++ b/src/light/effects/PlasmaEffect.h @@ -39,7 +39,7 @@ class PlasmaEffect : public EffectBase { // every fixture. The x256 that used to sit in the accumulate is the read scale here: same // product, and BeatPhase keeps the numerator in 64 bits so a short dt cannot truncate the // sub-unit progress to zero and stall the animation. 256 phase units = one beat's wrap. - phase_.advance(elapsed(), bpm); + phase_.advanceTo(elapsed(), bpm); const uint32_t phase = phase_.phase(256); uint8_t step_x = static_cast(256 / scale_x); diff --git a/src/light/effects/PolarNoiseEffect.h b/src/light/effects/PolarNoiseEffect.h index 96bb8ffd..23829f43 100644 --- a/src/light/effects/PolarNoiseEffect.h +++ b/src/light/effects/PolarNoiseEffect.h @@ -31,7 +31,7 @@ namespace mm { /// Effect: a warped, kaleidoscopic noise field in polar coordinates. class PolarNoiseEffect : public EffectBase { public: - const char* tags() const override { return "💫🖌️"; } // power-function showcase + const char* tags() const override { return "💫🖌️🌫️🎡"; } // power-function showcase Dim dimensions() const override { return Dim::D3; } // volumetric: the field turns through depth uint8_t bpm = 8; // how fast the field drifts @@ -71,7 +71,7 @@ class PolarNoiseEffect : public EffectBase { // The drift is an oscillator: a sawtooth that only ever moves forward, which is what makes // the field breathe outward rather than rock back and forth. drift_.set(0, {.rate = bpm, .low = 0, .high = 65535, .phaseOffset = 0, .wave = Wave::Saw}); - drift_.advance(elapsed()); + drift_.advanceTo(elapsed()); const uint32_t t = drift_.unitValue(0); // Build the address table if the grid changed; a rebuild is the only frame that pays for it. diff --git a/src/light/effects/PongEffect.h b/src/light/effects/PongEffect.h index 2f522e82..c08a3b5b 100644 --- a/src/light/effects/PongEffect.h +++ b/src/light/effects/PongEffect.h @@ -23,7 +23,7 @@ namespace mm { /// @card PongEffect.gif class PongEffect : public EffectBase { public: - const char* tags() const override { return "💫🎵👾"; } // audio-reactive when soundReactive is set + const char* tags() const override { return "💫🎵👾"; } // audio-reactive when audioReactive is set Dim dimensions() const override { return Dim::D2; } /// Rally speed, in ball crossings per minute rather than pixels per frame: the court is a @@ -42,7 +42,7 @@ class PongEffect : public EffectBase { bool spriteBall = false; /// Let the music drive the rally: the ball only advances on the beat, so it crosses the court /// in time with the track and stands still in silence. - bool soundReactive = false; + bool audioReactive = false; void defineControls() override { controls_.addControl("rallyBpm", rallyBpm, 5, 200); @@ -50,7 +50,7 @@ class PongEffect : public EffectBase { controls_.addControl("reflex", reflex, 40, 255); controls_.addControl("size", size, 1, 4); controls_.addControl("spriteBall", spriteBall); - controls_.addControl("soundReactive", soundReactive); + controls_.addControl("audioReactive", audioReactive); } void setup() override { @@ -63,7 +63,7 @@ class PongEffect : public EffectBase { if (width() == 0 || height() == 0) return; draw::fill(cv, RGB{0, 0, 0}); - const AudioFrame* audio = soundReactive ? AudioService::latestFrame() : nullptr; + const AudioFrame* audio = audioReactive ? AudioService::latestFrame() : nullptr; // The same beat test the rest of the project uses: level against its own smoothed average. // Reading it once per frame keeps the audio path off the per-pixel work. const bool live = audio && audio->levelSmoothed >= kSilence; @@ -72,18 +72,18 @@ class PongEffect : public EffectBase { // Motion by ELAPSED TIME. `rallyBpm` is crossings per minute, so a frame's share of a // crossing is the same on a 60 fps board and a 1200 fps desktop: the ball travels the court // in the same wall-clock time on both, rather than 20x faster on the quick one. - rally_.advance(elapsed(), rallyBpm); + rally_.advanceTo(elapsed(), rallyBpm); const uint32_t travel = rally_.phase(kCourtScale); // The two modes keep two different clocks: free-running counts elapsed time, reactive // counts beats. Switching between them mid-rally would hand step() a jump between the two // -- the ball teleporting across the court one way, and an unsigned underflow to a // four-billion step the other. Rebase both to the current position instead, so the toggle // is seamless and the ball carries on from where it is. - if (soundReactive != wasReactive_) { - wasReactive_ = soundReactive; + if (audioReactive != wasReactive_) { + wasReactive_ = audioReactive; lastTravel_ = travelAt_; } - if (soundReactive) { + if (audioReactive) { // On the beat the ball JUMPS a slice of the court and then waits. Silence holds it // still, which is what makes the mode read as reactive rather than merely animated. if (beat) travelAt_ += kCourtScale / kBeatSteps; diff --git a/src/light/effects/RadialSpectrumEffect.h b/src/light/effects/RadialSpectrumEffect.h new file mode 100644 index 00000000..a03364b8 --- /dev/null +++ b/src/light/effects/RadialSpectrumEffect.h @@ -0,0 +1,154 @@ +#pragma once + +#include "light/effects/EffectBase.h" + +namespace mm { + +// RadialSpectrum: the spectrum as ripples. Each band owns a sector around the center, mirrored +// left and right; sound is born at the center and travels outward, so the radius is TIME and a +// ring's length is that band's recent history. A radial spectrogram, the circular visualizer the +// music-video world settled on, and here also the diagnostic the bar analyzer is: every sector is +// one band, so a band that is stuck or pinned shows as a sector that never moves or never dims. +// +// No transport is involved. The effect keeps a short history of band frames (one entry per +// ring) and every light READS it: its angle picks the band, its radius picks the age. That +// is a LUT read and a table read per light, cheaper than drawing bars, and it is what makes the +// effect volumetric for free: under the spherical polar mapping a cube's radius is the distance +// from its center, so the ripples become expanding shells. +// +// `beat` adds the onset detector's hits as a white shockwave born at the center on every hit, +// traveling out with the ripples. `smooth` switches the source between the raw bands and the +// meter ballistic, which is the comparison a person tuning the audio path wants to see. +// @card RadialSpectrumEffect.png +/// Effect: the spectrum as ripples, one sector per band, radius as time; a shockwave per beat. +class RadialSpectrumEffect : public EffectBase { +public: + const char* tags() const override { return "💫🎶🖌️🎡"; } + Dim dimensions() const override { return Dim::D3; } + + static constexpr uint16_t kMaxHistory = 128; ///< rings of history, and the largest radius read + + uint8_t speed = 85; // how fast sound travels outward + uint8_t persistence = 128; // how far out a ripple stays visible + bool smooth = false; // read the meter ballistic rather than the raw bands + bool beat = true; // a white shockwave on every detected onset + PolarLut::Controls polar; // the address, and cylindrical / spherical / radial on a cube + + void defineControls() override { + controls_.addControl("speed", speed, 5, 100); // higher is faster, as everywhere else + controls_.addControl("persistence", persistence, 0, 255); + controls_.addControl("smooth", smooth); + controls_.addControl("beat", beat); + PolarLut::addControls(controls_, polar); + } + + void prepare() override { + lut_.prepareFor(polar, width(), height(), EffectBase::depth()); + std::memset(history_, 0, sizeof(history_)); + std::memset(beats_, 0, sizeof(beats_)); + head_ = 0; + carry_ = 0; + started_ = false; + onsetSeen_ = false; + } + + void tick() MM_NONBLOCKING override { + const draw::Canvas cv = canvas(); + const lengthType w = width(), h = height(), dep = depth(); + const uint32_t now = elapsed(); + const uint32_t dt = started_ ? now - lastMs_ : 0u; + lastMs_ = now; + started_ = true; + + const AudioFrame* f = AudioService::latestFrame(); + const uint8_t* src = f ? (smooth ? f->bandsSmoothed : f->bands) : nullptr; + // A hit is one block of onset != 0 and ticks outrun blocks: edge-detect, and latch it + // until the next ring is born so a hit between rings is not lost. + const bool onsetNow = f && f->onset != 0; + if (onsetNow && !onsetSeen_) pendingBeat_ = 255; + onsetSeen_ = onsetNow; + + // Time-paced history: a ring every `ringMs` whatever the framerate, the remainder + // carried. A stall births a burst of rings, capped so it cannot wipe the history. + // + // The control is a RATE, so turning it up speeds the ripples up, which is what every other + // speed in the tree does. The period it drives is the inverse: 5 gives a slow 105 ms ring, + // 100 a fast 10 ms one. + const uint32_t ringMs = 110u - static_cast(speed); + carry_ += dt; + uint8_t born = 0; + while (carry_ >= ringMs && born < 8) { + carry_ -= ringMs; + head_ = static_cast((head_ + 1) % kMaxHistory); + if (src) std::memcpy(history_[head_], src, 16); + else std::memset(history_[head_], 0, 16); + beats_[head_] = beat ? pendingBeat_ : 0; + pendingBeat_ = 0; + born++; + } + if (born > 0) carry_ %= ringMs; + + // The fade with age, as a per-ring keep fraction in 1/256ths: persistence 255 keeps all, + // 0 shows only the newest ring. Precomputed per ring so the light loop is a lookup. + // The keep fraction per ring, and the range is what makes the default work. A ripple has + // to survive as many rings as the fixture's corner is far: 45 on a 64x64 panel. So the + // scale is centered on that rather than reaching it only at the top, and the DEFAULT of 128 + // gives 61 rings, filling a panel with room to spare. 92%..99.6% per ring: the low end is + // a tight halo around the center, the high end reaches the corner of a large wall. + // (An earlier range started at 50% per ring, which died after 19 rings at ANY setting, so + // the effect could never fill a panel however far the control was pushed.) + const uint32_t keep = 236u + (static_cast(persistence) * 19u) / 255u; + uint32_t k = 256; + for (uint16_t r = 0; r < kMaxHistory; r++) { fade_[r] = static_cast(k > 255 ? 255 : k); k = (k * keep) >> 8; } + + const bool table = lut_.ready(); + const int32_t cx = w / 2, cy = h / 2, cz = dep / 2; + const auto m = PolarLut::mappingOf(polar); + std::size_t idx = 0; + for (lengthType z = 0; z < dep; z++) + for (lengthType y = 0; y < h; y++) + for (lengthType x = 0; x < w; x++, idx++) { + angle16 a; uint32_t r; + if (table) { a = lut_.angle(idx); r = lut_.radiusPixels(idx); } + else { + const auto ad = PolarLut::addressOf(m, static_cast(x) - cx, + static_cast(y) - cy, + static_cast(z) - cz); + a = ad.angle; r = ad.radius; + } + // The band from the angle, folded so left and right mirror: bass at the top + // and bottom, treble at the sides, the symmetric form the circular visualizer + // uses because a spectrum has no left and right of its own. + const uint32_t folded = a < 32768u ? a : 65535u - a; // 0..32767 + const uint8_t band = static_cast((folded * 16u) >> 15); // 0..15 + // The age from the radius: ring r was born r steps ago. + if (r >= kMaxHistory) { draw::pixel(cv, {x, y, z}, RGB{0, 0, 0}); continue; } + const uint16_t slot = static_cast((head_ + kMaxHistory - r) % kMaxHistory); + const uint32_t v = (static_cast(history_[slot][band]) * fade_[r]) >> 8; + RGB c = colorFromPalette(*Palettes::active(), static_cast(band * 16u), + static_cast(v)); + // The shockwave: a white ring on the beat, fading with the same age. + const uint32_t bw = (static_cast(beats_[slot]) * fade_[r]) >> 8; + if (bw) { + c.r = static_cast(c.r + bw > 255u ? 255u : c.r + bw); + c.g = static_cast(c.g + bw > 255u ? 255u : c.g + bw); + c.b = static_cast(c.b + bw > 255u ? 255u : c.b + bw); + } + draw::pixel(cv, {x, y, z}, c); + } + } + +private: + PolarLut lut_{*this}; + uint8_t history_[kMaxHistory][16] = {}; ///< the rings: one band frame per step + uint8_t beats_[kMaxHistory] = {}; ///< the shockwave strength born with each ring + uint8_t fade_[kMaxHistory] = {}; ///< the keep fraction per ring of age, this frame + uint16_t head_ = 0; ///< the newest ring + uint32_t carry_ = 0; ///< time owed toward the next ring, in ms + uint8_t pendingBeat_ = 0; ///< a hit waiting for the next ring + bool started_ = false; + bool onsetSeen_ = false; + uint32_t lastMs_ = 0; +}; + +} // namespace mm diff --git a/src/light/effects/RaymarchEffect.h b/src/light/effects/RaymarchEffect.h index 4def2c9c..45100ba2 100644 --- a/src/light/effects/RaymarchEffect.h +++ b/src/light/effects/RaymarchEffect.h @@ -51,7 +51,7 @@ class RaymarchEffect : public EffectBase { const draw::Canvas cv = canvas(); if (cv.dims.x < 1 || cv.dims.y < 1) return; - phase_.advance(elapsed(), bpm); + phase_.advanceTo(elapsed(), bpm); // Each oscillator reads the phase at ITS OWN rate and wraps in its own 16-bit angle, so // every term is continuous across the wrap. Scaling one wrapped angle by 1.3 or 0.8 (the diff --git a/src/light/effects/RingsEffect.h b/src/light/effects/RingsEffect.h index 060ff166..29efe105 100644 --- a/src/light/effects/RingsEffect.h +++ b/src/light/effects/RingsEffect.h @@ -14,7 +14,7 @@ namespace mm { /// @card RingsEffect.gif class RingsEffect : public EffectBase { public: - const char* tags() const override { return "💫🦅🖌️"; } // MoonLight origin · David Jupijn / Rising Step + const char* tags() const override { return "💫🦅🖌️🎡"; } // MoonLight origin · David Jupijn / Rising Step // Iterates y and x only; Layer::extrude fills z on 3D layers. Dim dimensions() const override { return Dim::D2; } diff --git a/src/light/effects/SdfShapesEffect.h b/src/light/effects/SdfShapesEffect.h index 4d4170bd..dbc19eb5 100644 --- a/src/light/effects/SdfShapesEffect.h +++ b/src/light/effects/SdfShapesEffect.h @@ -54,7 +54,7 @@ class SdfShapesEffect : public EffectBase { const draw::Canvas cv = canvas(); const lengthType w = width(), h = height(); - phase_.advance(elapsed(), bpm); + phase_.advanceTo(elapsed(), bpm); const angle16 t = static_cast(phase_.phase(65536)); // The short side sets the scale, so the composition looks the same on any aspect ratio. diff --git a/src/light/effects/SineEffect.h b/src/light/effects/SineEffect.h index 283db334..4defe0bf 100644 --- a/src/light/effects/SineEffect.h +++ b/src/light/effects/SineEffect.h @@ -44,7 +44,7 @@ class SineEffect : public EffectBase { const uint32_t now = elapsed(); // Shared accumulator: raw dt·rate in 64 bits, divided only at the read, so a sub-millisecond // frame does not round to zero and freeze the animation (mm::BeatPhase owns that rule now). - phase_.advance(now, bpm); + phase_.advanceTo(now, bpm); // Accumulate dt*bpm and read the high bits as the scroll phase (uint8 angle) — // the same integer accumulator the other effects use so a sub-ms dt isn't lost. const uint8_t t = static_cast(phase_.phase(256)); diff --git a/src/light/effects/SpaceInvadersEffect.h b/src/light/effects/SpaceInvadersEffect.h index 2da6ec97..2b285d80 100644 --- a/src/light/effects/SpaceInvadersEffect.h +++ b/src/light/effects/SpaceInvadersEffect.h @@ -120,7 +120,7 @@ static_assert(sizeof(kCannon) == static_cast(GW) * GH * GF, "cannon: one /// @card SpaceInvadersEffect.gif class SpaceInvadersEffect : public EffectBase { public: - const char* tags() const override { return "💫🎵👾"; } // audio-reactive when soundReactive is set + const char* tags() const override { return "💫🎵👾"; } // audio-reactive when audioReactive is set Dim dimensions() const override { return Dim::D2; } /// Steps per minute at full strength. The arcade had no such control: its tempo WAS the @@ -136,14 +136,14 @@ class SpaceInvadersEffect : public EffectBase { /// the formation on the beat is the natural mapping rather than an imposed one, and the cannon /// fires on a transient. In silence the formation HOLDS: a still invasion is the honest render /// of no music, and it is what makes the mode read as reactive. - bool soundReactive = false; + bool audioReactive = false; void defineControls() override { controls_.addControl("marchBpm", marchBpm, 10, 240); controls_.addControl("stepX", stepX, 1, 8); controls_.addControl("dropY", dropY, 1, 12); controls_.addControl("size", size, 1, 4); - controls_.addControl("soundReactive", soundReactive); + controls_.addControl("audioReactive", audioReactive); } void prepare() override { @@ -156,7 +156,7 @@ class SpaceInvadersEffect : public EffectBase { if (width() == 0 || height() == 0) return; draw::fill(cv, RGB{0, 0, 0}); - const AudioFrame* audio = soundReactive ? AudioService::latestFrame() : nullptr; + const AudioFrame* audio = audioReactive ? AudioService::latestFrame() : nullptr; const bool live = audio && audio->levelSmoothed >= kSilence; // A transient is the cannon's trigger, and it is also what makes a beat-driven march step: // reading `level` against its own smoothed average is the same beat test the moving-head @@ -207,7 +207,7 @@ class SpaceInvadersEffect : public EffectBase { if (!live) return; // silence holds the invasion still if (!beat) return; // the beat is the clock } else { - formation_.advance(elapsed(), stepInterval()); + formation_.advanceTo(elapsed(), stepInterval()); const uint32_t phase = formation_.phase(2); if (phase == lastPhase_) return; lastPhase_ = phase; diff --git a/src/light/effects/SpiralEffect.h b/src/light/effects/SpiralEffect.h index d33b9963..862dcae5 100644 --- a/src/light/effects/SpiralEffect.h +++ b/src/light/effects/SpiralEffect.h @@ -9,7 +9,7 @@ namespace mm { /// @card SpiralEffect.png class SpiralEffect : public EffectBase { public: - const char* tags() const override { return "💫🦅🖌️"; } // MoonLight origin · David Jupijn / Rising Step + const char* tags() const override { return "💫🦅🖌️🎡"; } // MoonLight origin · David Jupijn / Rising Step // Iterates y and x only; Layer::extrude fills z on 3D layers. Dim dimensions() const override { return Dim::D2; } @@ -44,7 +44,7 @@ class SpiralEffect : public EffectBase { uint32_t now = elapsed(); // Shared accumulator: raw dt·rate in 64 bits, divided only at the read, so a sub-millisecond // frame does not round to zero and freeze the animation (mm::BeatPhase owns that rule now). - phase_.advance(now, bpm); + phase_.advanceTo(now, bpm); // Accumulate the raw (dt * bpm) product; divide only at the read site. // Per-tick `dt*bpm*256/60000` rounds to 0 on desktop (dt ≈ 0..1ms) and // freezes the animation; see MetaballsEffect for the same fix. diff --git a/src/light/effects/SpriteFountainEffect.h b/src/light/effects/SpriteFountainEffect.h index e2cf481f..3ea252ae 100644 --- a/src/light/effects/SpriteFountainEffect.h +++ b/src/light/effects/SpriteFountainEffect.h @@ -25,7 +25,7 @@ namespace mm { /// @card SpriteFountainEffect.gif class SpriteFountainEffect : public EffectBase { public: - const char* tags() const override { return "💫🎶✨👾"; } // audio-reactive when soundReactive is set + const char* tags() const override { return "💫🎶✨👾"; } // audio-reactive when audioReactive is set Dim dimensions() const override { return Dim::D2; } /// How hard the nozzle throws, and how hard gravity pulls back. Both scale with the grid, so @@ -55,7 +55,7 @@ class SpriteFountainEffect : public EffectBase { /// tiny fish. That is the difference between a fountain that pulses and one you can read the /// music off. In silence nothing is thrown, which is what makes the mode look reactive rather /// than merely animated. - bool soundReactive = false; + bool audioReactive = false; void defineControls() override { controls_.addControl("lift", lift, 20, 200); @@ -63,7 +63,7 @@ class SpriteFountainEffect : public EffectBase { controls_.addControl("rate", rate, 1, 6); controls_.addControl("emitBpm", emitBpm, 10, 240); controls_.addControl("size", size, 1, 4); - controls_.addControl("soundReactive", soundReactive); + controls_.addControl("audioReactive", audioReactive); } void prepare() override { @@ -96,7 +96,7 @@ class SpriteFountainEffect : public EffectBase { // Throw from the middle of the floor, leaning either side of straight up. 47152 is just // under vertical in angle16, the same nozzle the MoonLive fountain script uses. - launch_.advance(elapsed(), 9); + launch_.advanceTo(elapsed(), 9); const angle16 aim = static_cast( 47152 + (sin16(static_cast(launch_.phase(65536))) / 8)); const draw::pos_t speed = static_cast(lift) * height() / 4; @@ -104,11 +104,11 @@ class SpriteFountainEffect : public EffectBase { const draw::pos_t oy = static_cast(height() - 1) * draw::kSubOne; // Audio is read ONCE per frame: the spectrum is the same for every sprite, and a per-sprite // read would be the same work times the rate. - const AudioFrame* audio = soundReactive ? AudioService::latestFrame() : nullptr; + const AudioFrame* audio = audioReactive ? AudioService::latestFrame() : nullptr; // The emit CLOCK, separate from the nozzle's sweep: firing every frame tied the plume's // density to the frame rate, so the same settings looked completely different on two // devices. A beat phase makes `emitBpm` mean launches per minute on any of them. - emit_.advance(elapsed(), emitBpm); + emit_.advanceTo(elapsed(), emitBpm); const uint32_t tick = emit_.phase(2); const bool due = tick != lastEmit_; lastEmit_ = tick; diff --git a/src/light/effects/TrailsEffect.h b/src/light/effects/TrailsEffect.h index 5cee44f3..eeae7dd5 100644 --- a/src/light/effects/TrailsEffect.h +++ b/src/light/effects/TrailsEffect.h @@ -33,7 +33,7 @@ namespace mm { /// Effect: bright dots thrown into a flowing medium, leaving tails the flow carries and bends. class TrailsEffect : public EffectBase { public: - const char* tags() const override { return "💫🖌️"; } // power-function showcase + const char* tags() const override { return "💫🖌️💨🌫️"; } // power-function showcase Dim dimensions() const override { return Dim::D3; } // per-slice: each slice gets its own flow static constexpr uint8_t kMaxDots = 8; @@ -101,7 +101,10 @@ class TrailsEffect : public EffectBase { bank_.set(1, {.rate = 7, .low = static_cast(256 - breathe), .high = static_cast(256 + breathe), .phaseOffset = 0, .wave = Wave::Sine}); - bank_.advance(dt); + // advance() takes an ABSOLUTE timestamp and computes its own delta (math16.h BeatPhase), + // so passing this frame's dt feeds it the CHANGE in frame time: a few percent of the right + // motion on a jittery device, and none at all where the frame time is steady. + bank_.advanceTo(now); // Which buffer currently HOLDS the trail alternates: a ScratchBuffer is deliberately fixed // to its module (non-movable, it owns a slot in the module's free list), so the ping-pong diff --git a/src/light/effects/TruchetEffect.h b/src/light/effects/TruchetEffect.h index 45a5ba42..b83dad78 100644 --- a/src/light/effects/TruchetEffect.h +++ b/src/light/effects/TruchetEffect.h @@ -60,7 +60,7 @@ class TruchetEffect : public EffectBase { const draw::Canvas cv = canvas(); if (cv.dims.x < 1 || cv.dims.y < 1) return; - phase_.advance(elapsed(), bpm); + phase_.advanceTo(elapsed(), bpm); const uint32_t t = phase_.phase(65536); // One cell is this many 16.16 units across. `scale` counts tiles over the short side, which diff --git a/src/light/effects/TunnelEffect.h b/src/light/effects/TunnelEffect.h index edf8f37e..687864c4 100644 --- a/src/light/effects/TunnelEffect.h +++ b/src/light/effects/TunnelEffect.h @@ -26,7 +26,7 @@ namespace mm { /// Effect: a texture-mapped tunnel flying toward a vanishing point. class TunnelEffect : public EffectBase { public: - const char* tags() const override { return "💫🖌️"; } // power-function showcase + const char* tags() const override { return "💫🖌️🌫️🎡"; } // power-function showcase Dim dimensions() const override { return Dim::D3; } // volumetric: the wall recedes through depth uint8_t bpm = 20; // how fast the tunnel flies past @@ -63,7 +63,7 @@ class TunnelEffect : public EffectBase { const draw::Canvas cv = canvas(); const lengthType w = width(), h = height(), dep = EffectBase::depth(); - phase_.advance(elapsed(), bpm); + phase_.advanceTo(elapsed(), bpm); const uint32_t t = phase_.phase(65536); const int32_t cx = w / 2, cy = h / 2, cz = dep / 2; diff --git a/src/light/effects/VectorBallsEffect.h b/src/light/effects/VectorBallsEffect.h index 371fd0e9..828ea6ed 100644 --- a/src/light/effects/VectorBallsEffect.h +++ b/src/light/effects/VectorBallsEffect.h @@ -56,7 +56,7 @@ class VectorBallsEffect : public EffectBase { const draw::Canvas cv = canvas(); const lengthType w = width(), h = height(); - phase_.advance(elapsed(), bpm); + phase_.advanceTo(elapsed(), bpm); const uint32_t t = phase_.phase(65536); const angle16 yaw = static_cast(t); const angle16 pitch = static_cast(t * 2 / 3); // a second axis, so it tumbles diff --git a/src/light/effects/VuMetersEffect.h b/src/light/effects/VuMetersEffect.h new file mode 100644 index 00000000..2d780119 --- /dev/null +++ b/src/light/effects/VuMetersEffect.h @@ -0,0 +1,176 @@ +#pragma once + +#include "light/effects/EffectBase.h" + +namespace mm { + +// VuMeters: sixteen needles, one per band, each on a real meter's mechanics. +// +// The thing that makes a VU meter beautiful is not the dial, it is the NEEDLE'S MASS. A physical +// meter is a spring and a damper: the needle accelerates toward the signal, overshoots a peak, +// swings back, and settles. That overshoot is why a mechanical meter reads as alive where a bar +// graph reads as a readout, and it is why the standard (IEC 60268-17) specifies 300 ms to 99% with +// 1 to 1.5% overshoot rather than a smoothing constant. +// +// So each band drives a damped harmonic oscillator, integrated per frame. `damping` sets how much +// the needle overshoots: high is a critically damped studio meter, low is a loose needle that +// swings past and bounces. The bass needles are deliberately heavier than the treble ones, as they +// are on a real multi-meter bridge, so the low end swings and the high end flickers. +// +// Each needle sweeps its own arc in its own column, with a peak marker held at the highest +// reading and falling slowly (a peak-hold, the other half of the standard meter), and a red zone +// past three quarters. +// @card VuMetersEffect.png +/// Effect: sixteen VU needles with real mass, one per band, with peak-hold and a red zone. +class VuMetersEffect : public EffectBase { +public: + const char* tags() const override { return "💫🎶🖌️"; } + Dim dimensions() const override { return Dim::D3; } // a plane; a cube gets one bank per slice + + uint8_t damping = 150; // how much the needle overshoots: low swings, high is critical + uint8_t response = 120; // how quickly it chases the signal at all + uint8_t peakHold = 200; // how long the peak marker stays up + bool smooth = false;// drive from the ballistic rather than the raw band + + void defineControls() override { + controls_.addControl("damping", damping, 0, 255); + controls_.addControl("response", response, 1, 255); + controls_.addControl("peakHold", peakHold, 0, 255); + controls_.addControl("smooth", smooth); + } + + void prepare() override { + for (uint8_t b = 0; b < 16; b++) { pos_[b] = 0; vel_[b] = 0; peak_[b] = 0; } + started_ = false; + } + + void tick() MM_NONBLOCKING override { + const draw::Canvas cv = canvas(); + const lengthType w = width(), h = height(), dep = depth(); + if (w < 2 || h < 2) return; + const uint32_t now = elapsed(); + const uint32_t dt = started_ ? now - lastMs_ : 0u; + lastMs_ = now; + started_ = true; + + const AudioFrame* f = AudioService::latestFrame(); + + // The needles: a damped spring per band, integrated in fixed point. Time-stepped so the + // mechanics are the same at any framerate, and clamped so a stall cannot explode it. + const uint32_t step = dt > 100u ? 100u : dt; + const int32_t k = 4 + static_cast(response) / 4; // spring: how hard it pulls + const int32_t c = 1 + static_cast(damping) / 12; // damper: how much it fights + for (uint8_t b = 0; b < 16; b++) { + const int32_t target = static_cast(f ? (smooth ? f->bandsSmoothed[b] : f->bands[b]) : 0) << 8; + // Heavier at the bass end, as a real meter bridge is: the low needles swing, the high + // ones flicker. A sixteenth of the response per band is enough to read as different. + const int32_t mass = 16 + (15 - b); + const int32_t accel = ((target - pos_[b]) * k) / mass - (vel_[b] * c) / 16; + vel_[b] += (accel * static_cast(step)) / 64; + pos_[b] += (vel_[b] * static_cast(step)) / 64; + if (pos_[b] < 0) { pos_[b] = 0; if (vel_[b] < 0) vel_[b] = -vel_[b] / 3; } // bounce off the pin + const int32_t full = 255 << 8; + if (pos_[b] > full) { pos_[b] = full; if (vel_[b] > 0) vel_[b] = 0; } + const uint8_t reading = static_cast(pos_[b] >> 8); + // Peak-hold: takes a new maximum at once, falls back slowly. + // Peak-hold falls by a half-life, so "how long it stays up" is stated in seconds and + // holds at any framerate, the same rule the trail effects decay by. + const uint16_t keep = halfLifeKeep(step, 200u + static_cast(peakHold) * 12u); + peak_[b] = reading > peak_[b] + ? reading + : static_cast((static_cast(peak_[b]) * keep) >> 16); + } + + // The bank is a GRID of dials, not a row of slits: sixteen meters tiled so each cell is as + // square as the panel allows. A 64x64 panel gives 4x4 cells of 16x16, a 256x64 wall gives + // 8x2 cells of 32x32, and a strip degrades to one row. Each meter then owns a real dial + // rather than a column a few pixels wide. + lengthType cols = 16, rows = 1; + bestTiling(w, h, cols, rows); + const lengthType cellW = w / cols, cellH = h / rows; + draw::fill(cv, RGB{0, 0, 0}); + if (cellW < 3 || cellH < 3) return; // no room for a dial at all + for (lengthType z = 0; z < dep; z++) + for (lengthType i = 0; i < 16; i++) { + const lengthType cxi = i % cols, cyi = i / cols; + if (cyi >= rows) break; // fewer cells than bands: draw what fits + drawMeter(cv, cxi * cellW, cyi * cellH, cellW, cellH, z, + static_cast(i), pos_[i] >> 8, peak_[i]); + } + } + +private: + /// The tiling: sixteen cells, as square as this panel allows. Picks the factor pair of 16 + /// whose cell aspect is closest to 1, so a square panel is 4x4 and a wide one 8x2. + static void bestTiling(lengthType w, lengthType h, lengthType& cols, lengthType& rows) { + int32_t bestNum = -1, bestDen = 1; + for (lengthType c = 1; c <= 16; c++) { + if (16 % c) continue; + const lengthType r = 16 / c; + const int32_t cw = w / c, ch = h / r; + if (cw < 1 || ch < 1) continue; + const int32_t lo = cw < ch ? cw : ch, hi = cw < ch ? ch : cw; + // Compare lo/hi as a fraction, without floating point. + if (bestNum < 0 || static_cast(lo) * bestDen > static_cast(bestNum) * hi) { + bestNum = lo; bestDen = hi; cols = c; rows = r; + } + } + if (bestNum < 0) { cols = 16; rows = 1; } + } + + /// One meter inside its cell: a needle from a pivot at the bottom center, sweeping an arc that + /// fits the cell, plus its peak marker and the red zone. + void drawMeter(const draw::Canvas& cv, lengthType x0, lengthType y0, lengthType colW, + lengthType cellH, lengthType z, uint8_t band, int32_t reading, uint8_t peak) const { + const lengthType px = x0 + colW / 2; // pivot, centered in its own cell + const lengthType py = static_cast(y0 + cellH - 1); + // The needle is as long as the cell is tall, and the SWEEP fits the cell's width: a dial + // is as wide as it is tall when the cell is square, and narrows when it is not. + const lengthType len = static_cast(cellH - 1 < 2 ? 2 : cellH - 1); + // 0..255 onto a 120 degree sweep centered on straight up: 0 points up-LEFT, 128 straight + // up, 255 up-RIGHT. With dx = sin(a) and dy = -cos(a), angle 0 is straight up, so the + // sweep runs -60 to +60 degrees (10922 of 65536 is 60). + // The half-sweep that keeps the tip inside the column: asin(halfWidth / len), and at most + // 60 degrees so a wide column does not splay. Computed from the geometry rather than + // fixed, so one meter on a wide panel sweeps a proper arc and sixteen on a narrow one + // stay in their lanes. + const int32_t halfW = colW / 2; + int32_t half = len > 0 ? (10922 * halfW) / len : 10922; // small-angle: proportional + if (half > 10922) half = 10922; // never more than 60 degrees + if (half < 1000) half = 1000; // and always a visible swing + const auto angleFor = [half](int32_t v) -> angle16 { + const int32_t clamped = v < 0 ? 0 : (v > 255 ? 255 : v); + return static_cast(static_cast(-half + (clamped * 2 * half) / 255)); + }; + const angle16 a = angleFor(reading); + const lengthType nx = static_cast(px + (static_cast(sin16(a)) * len) / 32768); + const lengthType ny = static_cast(py - (static_cast(cos16(a)) * len) / 32768); + // The scale: a faint arc, red past three quarters. + for (int32_t s = 0; s <= 255; s += 8) { + const angle16 sa = angleFor(s); + const lengthType sx = static_cast(px + (static_cast(sin16(sa)) * len) / 32768); + const lengthType sy = static_cast(py - (static_cast(cos16(sa)) * len) / 32768); + constexpr uint8_t base = 24; + const RGB tick = s > 191 ? RGB{static_cast(base + 40), 0, 0} + : RGB{base, base, static_cast(base + 8)}; + draw::pixel(cv, {sx, sy, z}, tick); + } + // The needle, in the band's palette color, and its peak marker above it. + const RGB c = colorFromPalette(*Palettes::active(), static_cast(band * 16u), 255); + draw::line(cv, {px, py, z}, {nx, ny, z}, c); + if (peak > 4) { + const angle16 pa = angleFor(peak); + const lengthType mx = static_cast(px + (static_cast(sin16(pa)) * len) / 32768); + const lengthType my = static_cast(py - (static_cast(cos16(pa)) * len) / 32768); + draw::pixel(cv, {mx, my, z}, RGB{255, 255, 255}); + } + } + + int32_t pos_[16] = {}; ///< needle position, 8.8 fixed point + int32_t vel_[16] = {}; ///< needle velocity: the mass that makes it overshoot + uint8_t peak_[16] = {}; ///< the peak-hold marker + bool started_ = false; + uint32_t lastMs_ = 0; +}; + +} // namespace mm diff --git a/src/light/effects/WaveEffect.h b/src/light/effects/WaveEffect.h index c3bf0ca5..f42698a9 100644 --- a/src/light/effects/WaveEffect.h +++ b/src/light/effects/WaveEffect.h @@ -24,7 +24,7 @@ namespace mm { /// Effect of a travelling wave across the layer. class WaveEffect : public EffectBase { public: - const char* tags() const override { return "💫"; } + const char* tags() const override { return "💫🌫️"; } // D2 — writes the z=0 plane only; Layer::extrude duplicates it across z on a 3D layout. Dim dimensions() const override { return Dim::D2; } @@ -76,7 +76,7 @@ class WaveEffect : public EffectBase { // jumping by the whole device uptime), and the dt·bpm numerator stays in 64 bits until the // read (so a sub-millisecond frame does not round to zero and freeze). const uint32_t now = elapsed(); - phase_.advance(now, bpm); + phase_.advanceTo(now, bpm); const uint8_t t = static_cast(phase_.phase(256)); // uint8 angle (256 = full turn) // Color cycles slowly over time: now/50 indexes the active palette via waveColor. const uint8_t colorIndex = static_cast(now / 50); diff --git a/src/light/particles.h b/src/light/particles.h index efc1a069..cea67ac9 100644 --- a/src/light/particles.h +++ b/src/light/particles.h @@ -170,13 +170,13 @@ inline lengthType spreadLane(uint16_t i, uint16_t slots, lengthType extent) { /// Per-sprite audio drive: how fast sprite `i` of `slots` should move for the sound playing now, /// as a multiplier of FrameTime::kOne (so 0 = frozen, kOne = its normal speed). /// -/// Shared by every sprite effect with a `soundReactive` checkbox (FlyingToasters, FishTank, +/// Shared by every sprite effect with a `audioReactive` checkbox (FlyingToasters, FishTank, /// Pacman): the behavior a viewer expects is identical in all three, so it is written once. /// /// Each sprite gets its OWN band, spread across the 16 the FFT produces, so a scene breathes with /// the music instead of surging as one block: the bass sprites lurch on the kick while the treble /// ones flutter on the hats. The overall level gates it, so SILENCE STANDS THE SCENE STILL - the -/// requirement that makes the mode read as sound-reactive rather than merely speed-varying, since +/// requirement that makes the mode read as audio-reactive rather than merely speed-varying, since /// a per-band value alone still drifts on noise between tracks. /// /// Returns kOne unchanged when there is no audio at all (no microphone, service not running), so @@ -378,19 +378,19 @@ struct Pool { } /// step() with a PER-PARTICLE time scale: `drive(i)` returns particle i's own multiplier of - /// FrameTime::kOne. Sound-reactive sprite effects use it to move each sprite on its own audio + /// FrameTime::kOne. Audio-reactive sprite effects use it to move each sprite on its own audio /// band (see audioDrive) - the whole point being that the sprites do NOT move as one block. /// The frame scale still multiplies in, so speed stays frame-rate independent either way. - /// step(), optionally driven by the music: with `soundReactive` set, each of the `live` + /// step(), optionally driven by the music: with `audioReactive` set, each of the `live` /// sprites moves on its own frequency band and the scene stands still in silence; otherwise - /// the whole pool steps together. The one place the sound-reactive rule lives, so the sprite + /// the whole pool steps together. The one place the audio-reactive rule lives, so the sprite /// effects share it rather than each carrying a copy of the branch. /// /// `live` is the number of sprites actually in play, NOT the pool capacity: the bands are /// spread across the sprites that exist, so passing the capacity would crowd every sprite /// into the low bands and leave the treble driving nothing. - void stepDriven(uint32_t scale, bool soundReactive, uint16_t live) { - if (!soundReactive) { step(scale); return; } + void stepDriven(uint32_t scale, bool audioReactive, uint16_t live) { + if (!audioReactive) { step(scale); return; } const AudioFrame* f = AudioService::latestFrame(); stepEach(scale, [f, live](uint16_t i) { return audioDrive(f, i, live); }); } diff --git a/src/main.cpp b/src/main.cpp index a6c460aa..e9791b7c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -37,6 +37,9 @@ #include "light/effects/LavaLampEffect.h" #include "light/effects/NetworkReceiveEffect.h" #include "light/effects/AudioVolumeEffect.h" +#include "light/effects/RadialSpectrumEffect.h" +#include "light/effects/VuMetersEffect.h" +#include "light/effects/BeatRipplesEffect.h" #include "light/effects/AudioSpectrumEffect.h" #include "light/effects/SineEffect.h" #include "light/effects/DistortionWavesEffect.h" @@ -50,6 +53,7 @@ #include "light/effects/PolarNoiseEffect.h" #include "light/effects/WaterRippleEffect.h" #include "light/effects/TrailsEffect.h" +#include "light/effects/ColorTrailsEffect.h" #include "light/effects/TunnelEffect.h" #include "light/effects/EchoEffect.h" #include "light/effects/DissolveEffect.h" @@ -208,6 +212,9 @@ static void registerModuleTypes() { // alphabetically; keeping this list sorted makes the three orders agree at a glance). mm::ModuleFactory::registerType("AudioSpectrumEffect", "light/effects.md#audiospectrum"); mm::ModuleFactory::registerType("AudioVolumeEffect", "light/effects.md#audiovolume"); + mm::ModuleFactory::registerType("RadialSpectrumEffect", "light/effects.md#radialspectrum"); + mm::ModuleFactory::registerType("VuMetersEffect", "light/effects.md#vumeters"); + mm::ModuleFactory::registerType("BeatRipplesEffect", "light/effects.md#beatripples"); mm::ModuleFactory::registerType("BlurzEffect", "light/effects.md#blurz"); mm::ModuleFactory::registerType("BouncingBallsEffect", "light/effects.md#bouncingballs"); mm::ModuleFactory::registerType("DemoReelEffect", "light/effects.md#demoreel"); @@ -245,6 +252,7 @@ static void registerModuleTypes() { mm::ModuleFactory::registerType("FluidEffect", "light/effects.md#fluid"); mm::ModuleFactory::registerType("NebulaEffect", "light/effects.md#nebula"); mm::ModuleFactory::registerType("TrailsEffect", "light/effects.md#trails"); + mm::ModuleFactory::registerType("ColorTrailsEffect", "light/effects.md#colortrails"); mm::ModuleFactory::registerType("TunnelEffect", "light/effects.md#tunnel"); mm::ModuleFactory::registerType("EchoEffect", "light/effects.md#echo"); mm::ModuleFactory::registerType("DissolveEffect", "light/effects.md#dissolve"); diff --git a/src/ui/app.js b/src/ui/app.js index 431eb65e..6b06c798 100644 --- a/src/ui/app.js +++ b/src/ui/app.js @@ -1558,11 +1558,11 @@ function createCard(mod, depth) { // Emoji tags (role + curated) shown after the name: same set used by the // type picker's chip filter, so visual identity is consistent across views. - const emoji = emojiTagsForMod(mod); - if (emoji) { + const emojiList = emojiListForMod(mod); + if (emojiList.length) { const emojiEl = document.createElement("span"); emojiEl.className = "card-name-emoji"; - emojiEl.textContent = emoji; + renderEmojiTags(emojiEl, emojiList); title.appendChild(emojiEl); } @@ -2106,10 +2106,25 @@ function docPathForType(moduleType) { // loaded, so two MoonLive effects running different scripts read differently while sharing one // entry in /api/types: the audio one shows 🎶, the moving-head one 🎯. A compiled module sends // nothing here and keeps its type's answer. -function emojiTagsForMod(mod) { - if (!mod) return ""; +/// The same set as an array, for the callers that render one span per emoji. +function emojiListForMod(mod) { + if (!mod) return []; const t = availableTypes.find(t => t.name === mod.type) || {role: mod.role, tags: ""}; - return emojiTagsFor(mod.tags ? {...t, tags: mod.tags} : t).join(""); + return emojiTagsFor(mod.tags ? {...t, tags: mod.tags} : t); +} + +/// Fill `el` with one span per emoji, each carrying its own tooltip. A tooltip belongs to a single +/// character, so the emoji cannot be one joined string. Both the card header and the picker rows +/// render through here, which is what keeps a chip explained the same way wherever it appears. +function renderEmojiTags(el, list) { + el.textContent = ""; + for (const ch of list) { + const one = document.createElement("span"); + one.textContent = ch; + const label = EMOJI_LABEL[ch]; + if (label) one.title = label; + el.appendChild(one); + } } // Whether a control appears in the generic control list: false for controls the module marked @@ -5156,14 +5171,74 @@ const SCRIPTED_EMOJI = "\u{1F4DD}"; // 📝 the module runs a MoonLive scri // Not the gear: that is already the `generic` role's emoji, and reusing it drew the chip twice. const COMPILED_EMOJI = "\u{1F4E6}"; // 📦 chip only: never a tag any module carries +// The POWER-FUNCTION tags: which kernels an effect is built on, rather than where it came from or +// what it listens to. They are ordered LAST and kept together so they read as one group on a card +// and sit adjacent in the picker's chip row, which is what makes "show me the fluid effects" a +// glanceable filter rather than a hunt through a mixed string. A separator character is not used: +// every chip is one grapheme, so a separator would become a chip of its own. +// What an effect LISTENS to. Their own group in the picker: "show me the effects that react to +// music" is the question a chip row is for, and the two notes answer it together. +const AUDIO_EMOJI = ["\u{1F3B5}", "\u{1F3B6}"]; // volume, frequency + +const KERNEL_EMOJI = ["🖌️", "✨", "🌊", "💨", "🌫️", "🎡"]; // same order the legend lists them in + +// What each chip MEANS, as a tooltip. The chips are a filter, so a reader who does not yet know the +// vocabulary has to guess what narrows the list; the title makes each one self-describing without +// spending any screen space. Wording follows the legend that documents them for people reading a +// card: docs/tutorials/how-projectmm-works.md, "The emoji on every card". +const EMOJI_LABEL = { + // what the module IS + "\u{1F525}": "effect", + "\u2638\uFE0F": "driver", + "\u{1F48E}": "modifier", + "\u{1F6A5}": "layout", + "\u{1F95E}": "layer", + "\u{1F6F0}\uFE0F": "service", + "\u2699\uFE0F": "generic", + [SCRIPTED_EMOJI]: "runs a MoonLive script", + [COMPILED_EMOJI]: "compiled into the firmware", + // the shape it works in + "\u{1F4CF}": "1D: a line", + "\u{1F7E6}": "2D: a picture", + "\u{1F9CA}": "3D: a volume", + // where it came from + "\u{1F4AB}": "projectMM / MoonLight", + "\u{1F319}": "MoonModules", + "\u{1F419}": "WLED", + "\u26A1\uFE0F": "FastLED", + "\u{1F985}": "a named contributor", + // what it listens to and what it does + "\u{1F3B5}": "reacts to volume: how loud the room is", + "\u{1F3B6}": "reacts to frequency: which notes are playing", + "\u{1F4E1}": "takes its picture from the network", + "\u{1F3AF}": "aims moving heads", + "\u{1F47E}": "pixel art: games and sprites", + "\u{1F9EC}": "a simulation: cells evolving off their own last frame", + "\u{1F4F9}": "motion-tracking aware", + // the power functions, shown together at the end of a row + "\u{1F58C}\uFE0F": "power function: a shader, every pixel computed from its position", + "\u2728": "power function: particles, born, moved by forces, and dying", + "\u{1F30A}": "power function: a fluid working out its own motion", + "\u{1F4A8}": "power function: transport, light carried and fading rather than redrawn", + "\u{1F32B}\uFE0F": "power function: a noise field, the cloud and smoke family", + "\u{1F3A1}": "power function: polar, composed around a center", +}; + function emojiTagsFor(t) { const out = []; + const kernels = []; const seen = new Set(); - const push = (ch) => { if (ch && !seen.has(ch)) { seen.add(ch); out.push(ch); } }; + const push = (ch) => { + if (!ch || seen.has(ch)) return; + seen.add(ch); + (KERNEL_EMOJI.includes(ch) ? kernels : out).push(ch); + }; push(ROLE_EMOJI[t.role]); push(DIM_EMOJI[t.dim]); for (const ch of graphemes(t.tags || "")) push(ch); - return out; + // Kernel chips in a fixed order, so two effects on the same kernels show the same run. + kernels.sort((a, b) => KERNEL_EMOJI.indexOf(a) - KERNEL_EMOJI.indexOf(b)); + return out.concat(kernels); } // The type picker serves two modes: @@ -5421,6 +5496,8 @@ function openPicker(anchorEl, opts) { Object.values(ROLE_EMOJI), // type Object.values(DIM_EMOJI), // dimension ["\u{1F4AB}", "\u{1F319}", "\u{1F419}", "\u26A1\uFE0F"], // origin + AUDIO_EMOJI, // what it listens to + KERNEL_EMOJI, // which power functions it is built on ]; const groups = CHIP_GROUPS.map(g => present.filter(e => g.includes(e))); const classified = new Set(CHIP_GROUPS.flat()); @@ -5442,6 +5519,8 @@ function openPicker(anchorEl, opts) { const chip = document.createElement("button"); chip.className = "type-picker-chip"; chip.textContent = emoji; + const label = EMOJI_LABEL[emoji]; + if (label) { chip.title = label; chip.setAttribute("aria-label", label); } chip.addEventListener("click", () => { if (activeChips.has(emoji)) { activeChips.delete(emoji); chip.classList.remove("active"); } else { activeChips.add(emoji); chip.classList.add("active"); } @@ -5522,7 +5601,7 @@ function openPicker(anchorEl, opts) { } const emoji = document.createElement("span"); emoji.className = "type-picker-item-emoji"; - emoji.textContent = emojiTagsFor(t).join(""); + renderEmojiTags(emoji, emojiTagsFor(t)); item.appendChild(emoji); // Show the factory-stripped name ("Rainbow") not the typeName // ("RainbowEffect"); the role text on the right already conveys diff --git a/src/ui/migrate.js b/src/ui/migrate.js index d0029c75..6004fd73 100644 --- a/src/ui/migrate.js +++ b/src/ui/migrate.js @@ -61,6 +61,14 @@ export const TYPE_RENAMES = { // the bench: a blanket fps → targetFps corrupted NetworkSendDriver's own `fps`). `review` marks // a value-semantics change: the name maps, the value needs the user's eye. export const CONTROL_RENAMES = { + // One name for one thing: the service is AudioService, the frame is AudioFrame, so the control + // that makes a sprite effect follow the music is audioReactive. Scoped to the seven effects that + // declare it, per the rule above. + "soundReactive": { + to: "audioReactive", date: "2026-09-05", + onTypes: ["FishTankEffect", "FlyingToastersEffect", "PacmanEffect", "PongEffect", + "SpaceInvadersEffect", "SpriteFountainEffect", "MovingHeadEffect"], + }, // ControlModule's encoders spell the word out: the interface uses the industry term, the UI // abbreviates it to `enc` for the strip. Scoped, because `enc1` is a plausible name anywhere. "enc1": { name: "encoder1", date: "2026-08-30", onTypes: ["ControlModule"] }, diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index fc626bc5..9ee9487e 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -87,6 +87,7 @@ add_executable(mm_tests unit/light/unit_PanelCardDriver_packet.cpp unit/light/unit_WledAudioSyncPacket.cpp unit/light/unit_BlendMap.cpp + unit/light/unit_BeatRipples.cpp unit/light/unit_fluid.cpp unit/light/unit_draw.cpp unit/light/unit_GameOfLifeEffect.cpp diff --git a/test/js/ui-emoji-labels.test.mjs b/test/js/ui-emoji-labels.test.mjs new file mode 100644 index 00000000..5bbef43f --- /dev/null +++ b/test/js/ui-emoji-labels.test.mjs @@ -0,0 +1,66 @@ +// Every emoji the interface shows carries a tooltip explaining it. The chips in the type picker +// are a FILTER, so a reader who does not know the vocabulary cannot tell what narrows the list; +// the tooltip is what makes each one self-describing. A label table is written by hand while the +// emoji themselves are declared across ~90 module headers, so the two drift apart silently: what +// this pins is that no emoji reaches a user without an explanation. +// Run: `node --test test/js/ui-emoji-labels.test.mjs`. + +import { test } from "node:test"; +import assert from "node:assert/strict"; +import { readFileSync } from "node:fs"; +import { execSync } from "node:child_process"; + +const APP = new URL("../../src/ui/app.js", import.meta.url).pathname; +const src = readFileSync(APP, "utf8"); + +/// app.js is a browser script rather than a module, so the vocabularies are lifted out of it by +/// name and evaluated. Reading the source is the point: a test that redeclared the tables would +/// pass while the shipped ones drifted. +function tableFrom(name) { + const i = src.indexOf(`const ${name}`); + assert.ok(i >= 0, `${name} not found in app.js`); + const j = src.indexOf("\n};", i); + return src.slice(i, j + 3); +} +function constFrom(name) { + const i = src.indexOf(`const ${name}`); + assert.ok(i >= 0, `${name} not found in app.js`); + // To the statement's semicolon, not to the end of the line: these declarations carry a + // trailing comment, and cutting at the newline truncates the value itself. + return src.slice(i, src.indexOf(";", i) + 1); +} + +const SCRIPTED_EMOJI = "\u{1F4DD}"; +const COMPILED_EMOJI = "\u{1F4E6}"; +const EMOJI_LABEL = new Function("SCRIPTED_EMOJI", "COMPILED_EMOJI", + tableFrom("EMOJI_LABEL") + "; return EMOJI_LABEL;")(SCRIPTED_EMOJI, COMPILED_EMOJI); + +const seg = new Intl.Segmenter(undefined, { granularity: "grapheme" }); +const emojiIn = (s) => [...seg.segment(s)].map(g => g.segment).filter(g => g.trim()); + +test("every emoji the interface generates has a tooltip", () => { + const ROLE_EMOJI = new Function(tableFrom("ROLE_EMOJI") + "; return ROLE_EMOJI;")(); + const DIM_EMOJI = new Function(tableFrom("DIM_EMOJI") + "; return DIM_EMOJI;")(); + const KERNEL_EMOJI = new Function(constFrom("KERNEL_EMOJI") + "; return KERNEL_EMOJI;")(); + + const shown = [...Object.values(ROLE_EMOJI), ...Object.values(DIM_EMOJI), + ...KERNEL_EMOJI, SCRIPTED_EMOJI, COMPILED_EMOJI]; + const missing = shown.filter(e => !EMOJI_LABEL[e]); + assert.deepEqual(missing, [], `emoji shown with no tooltip: ${missing.join(" ")}`); +}); + +test("every emoji a module declares in tags() has a tooltip", () => { + // The modules are the moving half: a new effect adds a tag emoji, and nothing else would + // notice that the picker then shows a character no tooltip explains. + const out = execSync( + `grep -rho 'const char\\* tags() const override { return "[^"]*"' src/ || true`, + { encoding: "utf8", cwd: new URL("../..", import.meta.url).pathname }); + const declared = new Set(); + for (const line of out.split("\n")) { + const m = line.match(/return "([^"]*)"/); + if (m) for (const e of emojiIn(m[1])) declared.add(e); + } + assert.ok(declared.size > 10, `expected the module headers to declare emoji, found ${declared.size}`); + const missing = [...declared].filter(e => !EMOJI_LABEL[e]); + assert.deepEqual(missing, [], `declared in tags() with no tooltip: ${missing.join(" ")}`); +}); diff --git a/test/scenario_runner.cpp b/test/scenario_runner.cpp index 93b25ef9..746da23a 100644 --- a/test/scenario_runner.cpp +++ b/test/scenario_runner.cpp @@ -26,6 +26,7 @@ #include "light/effects/FluidEffect.h" #include "light/effects/NebulaEffect.h" #include "light/effects/TrailsEffect.h" +#include "light/effects/ColorTrailsEffect.h" #include "light/effects/PolarNoiseEffect.h" #include "light/effects/SpiralEffect.h" #include "light/effects/RingsEffect.h" @@ -42,6 +43,9 @@ #include "core/SystemModule.h" #include "core/AudioService.h" #include "light/effects/AudioVolumeEffect.h" +#include "light/effects/RadialSpectrumEffect.h" +#include "light/effects/VuMetersEffect.h" +#include "light/effects/BeatRipplesEffect.h" #include "light/effects/AudioSpectrumEffect.h" #include "light/effects/GameOfLifeEffect.h" #include "light/effects/GEQ3DEffect.h" @@ -228,6 +232,7 @@ static void registerScenarioTypes() { mm::ModuleFactory::registerType("FluidEffect"); mm::ModuleFactory::registerType("NebulaEffect"); mm::ModuleFactory::registerType("TrailsEffect"); + mm::ModuleFactory::registerType("ColorTrailsEffect"); mm::ModuleFactory::registerType("PolarNoiseEffect"); mm::ModuleFactory::registerType("SpiralEffect"); mm::ModuleFactory::registerType("RingsEffect"); @@ -244,6 +249,9 @@ static void registerScenarioTypes() { mm::ModuleFactory::registerType("SystemModule"); mm::ModuleFactory::registerType("AudioService"); mm::ModuleFactory::registerType("AudioVolumeEffect"); + mm::ModuleFactory::registerType("RadialSpectrumEffect"); + mm::ModuleFactory::registerType("VuMetersEffect"); + mm::ModuleFactory::registerType("BeatRipplesEffect"); mm::ModuleFactory::registerType("AudioSpectrumEffect"); mm::ModuleFactory::registerType("GameOfLifeEffect"); mm::ModuleFactory::registerType("GEQ3DEffect"); diff --git a/test/unit/core/unit_AudioService_sync.cpp b/test/unit/core/unit_AudioService_sync.cpp index 3ce4d39e..419ee1e9 100644 --- a/test/unit/core/unit_AudioService_sync.cpp +++ b/test/unit/core/unit_AudioService_sync.cpp @@ -182,6 +182,21 @@ TEST_CASE("AudioService Receive: a localhost WLED packet drives frame_, then hol } CHECK(landed); CHECK(a.audioFrame()->levelSmoothed == 111); + // The ballistic is OURS, not the packet's: the smoothed bands rise toward the received raw + // bands, and they survive the whole-frame copy the next packet makes (a copy that zeroed them + // forty times a second would leave nothing to fall slowly). + CHECK(a.audioFrame()->bandsSmoothed[15] > 80); // peer.bands[15] is 120; one block of rise + AudioFrame quiet; // then the peer goes silent + buildWledAudioSync(pkt, quiet, /*peak=*/false); + REQUIRE(tx.sendTo(pkt, WLED_SYNC_PACKET_SIZE)); + bool fell = false; + for (int i = 0; i < 100 && !fell; i++) { + a.tick(); + fell = a.audioFrame()->level == 0; + if (!fell) platform::delayMs(1); + } + CHECK(fell); + CHECK(a.audioFrame()->bandsSmoothed[15] > 40); // still falling, not reset by the copy // Named, not just "receiving": the packet came from loopback, so the status has to say so. A // receiver that cannot name its source looks identical to one locked onto the wrong device. CHECK(std::strcmp(status(a), "receiving from 127.0.0.1") == 0); diff --git a/test/unit/core/unit_Oscillators.cpp b/test/unit/core/unit_Oscillators.cpp index 6703b4fc..16a43df8 100644 --- a/test/unit/core/unit_Oscillators.cpp +++ b/test/unit/core/unit_Oscillators.cpp @@ -20,9 +20,9 @@ namespace { /// first-tick guard), and calling this again from 0 would establish it a second time. template uint32_t run(OscillatorBank& bank, uint32_t untilMs, uint32_t dtMs, uint32_t from = 0) { - if (from == 0) bank.advance(0); + if (from == 0) bank.advanceTo(0); uint32_t t = from; - while (t + dtMs <= untilMs) { t += dtMs; bank.advance(t); } + while (t + dtMs <= untilMs) { t += dtMs; bank.advanceTo(t); } return t; } @@ -34,7 +34,7 @@ TEST_CASE("an oscillator stays inside the range the effect asked for") { int32_t lo = 1 << 30, hi = -(1 << 30); uint32_t t = 0; for (uint32_t f = 0; f < 2000; f++) { - bank.advance(t); + bank.advanceTo(t); t += 7; // an irregular frame time, as a real loop has lo = bank.value(0) < lo ? bank.value(0) : lo; hi = bank.value(0) > hi ? bank.value(0) : hi; @@ -64,7 +64,7 @@ TEST_CASE("two oscillators at the same rate hold their phase relationship indefi run(bank, 1600, 16); const int32_t earlyGap = static_cast(bank.phase(1)) - static_cast(bank.phase(0)); uint32_t t = 1600; - for (uint32_t f = 0; f < 200000; f++) { t += 16; bank.advance(t); } // ~an hour of frames + for (uint32_t f = 0; f < 200000; f++) { t += 16; bank.advanceTo(t); } // ~an hour of frames const int32_t lateGap = static_cast(bank.phase(1)) - static_cast(bank.phase(0)); CHECK(earlyGap == lateGap); } @@ -82,14 +82,14 @@ TEST_CASE("changing the rate continues from where the phase stands, without jump OscillatorBank<1> bank; bank.set(0, {.rate = 30, .low = 0, .high = 65535, .phaseOffset = 0, .wave = Wave::Saw}); uint32_t t = 0; - for (uint32_t f = 0; f < 50; f++) { bank.advance(t); t += 16; } + for (uint32_t f = 0; f < 50; f++) { bank.advanceTo(t); t += 16; } const uint16_t before = bank.unitValue(0); CHECK(before > 0); // it is genuinely mid-cycle, not at the start Oscillator faster = bank.get(0); faster.rate = 240; bank.set(0, faster); - bank.advance(t); // the very next frame, one 16 ms step + bank.advanceTo(t); // the very next frame, one 16 ms step const uint16_t after = bank.unitValue(0); // One frame at the new rate moves the phase by a frame's worth, not to a new place entirely. @@ -130,7 +130,7 @@ TEST_CASE("a square wave is only ever fully on or fully off") { uint32_t t = 0; bool sawLow = false, sawHigh = false; for (uint32_t f = 0; f < 300; f++) { - bank.advance(t); + bank.advanceTo(t); t += 11; // 3.3 s, about five cycles at 90 BPM const int32_t v = bank.value(0); CHECK((v == 0 || v == 255)); // never anything in between @@ -155,9 +155,9 @@ TEST_CASE("the first frame establishes the time base instead of jumping the phas // An effect enabled after the device has been up for an hour starts at zero, not an hour in. OscillatorBank<1> bank; bank.set(0, {.rate = 60, .low = 0, .high = 65535, .phaseOffset = 0, .wave = Wave::Saw}); - bank.advance(3600000u); // first call, an hour on the clock + bank.advanceTo(3600000u); // first call, an hour on the clock CHECK(bank.phase(0) == 0); - bank.advance(3600016u); + bank.advanceTo(3600016u); // One 16 ms frame in, not an hour: at 60 BPM that is 16/1000 of a turn, about 1048. CHECK(bank.phase(0) > 1000); CHECK(bank.phase(0) < 1100); diff --git a/test/unit/core/unit_math16.cpp b/test/unit/core/unit_math16.cpp index 3c1f40da..a57dd13d 100644 --- a/test/unit/core/unit_math16.cpp +++ b/test/unit/core/unit_math16.cpp @@ -96,36 +96,36 @@ TEST_CASE("sin16 and map32 evaluate at compile time") { TEST_CASE("BeatPhase keeps animating when frames are under a millisecond") { BeatPhase p; - p.advance(1000, 120); // first call only sets the time base + p.advanceTo(1000, 120); // first call only sets the time base CHECK(p.phase(256) == 0); // 1000 frames of a sub-millisecond dt: a per-tick divide would round each to zero and freeze. // (Integer ms means some ticks advance 0 and some 1 — the accumulator must survive both.) - for (uint32_t i = 1; i <= 1000; i++) p.advance(1000 + i / 2, 120); + for (uint32_t i = 1; i <= 1000; i++) p.advanceTo(1000 + i / 2, 120); CHECK(p.phase(256) > 0); } TEST_CASE("BeatPhase advances proportionally to elapsed time and rate") { BeatPhase slow, fast; - slow.advance(0, 60); fast.advance(0, 120); - slow.advance(1000, 60); fast.advance(1000, 120); + slow.advanceTo(0, 60); fast.advanceTo(0, 120); + slow.advanceTo(1000, 60); fast.advanceTo(1000, 120); CHECK(fast.numerator() == 2 * slow.numerator()); // double the rate, double the phase BeatPhase p; - p.advance(0, 60); - p.advance(500, 60); + p.advanceTo(0, 60); + p.advanceTo(500, 60); const uint64_t half = p.numerator(); - p.advance(1000, 60); + p.advanceTo(1000, 60); CHECK(p.numerator() == 2 * half); // double the time, double the phase } TEST_CASE("BeatPhase holds still at rate zero and resets to zero") { BeatPhase p; - p.advance(0, 120); - p.advance(1000, 0); + p.advanceTo(0, 120); + p.advanceTo(1000, 0); CHECK(p.numerator() == 0); - p.advance(2000, 120); + p.advanceTo(2000, 120); CHECK(p.numerator() > 0); p.reset(); CHECK(p.numerator() == 0); @@ -135,13 +135,13 @@ TEST_CASE("BeatPhase holds still at rate zero and resets to zero") { // long-running device must not see the phase jump backwards or leap. TEST_CASE("BeatPhase survives the millis wrap") { BeatPhase p; - p.advance(0xFFFFFF00u, 120); - p.advance(0xFFFFFF00u + 100u, 120); // wraps past 2^32 + p.advanceTo(0xFFFFFF00u, 120); + p.advanceTo(0xFFFFFF00u + 100u, 120); // wraps past 2^32 const uint64_t afterWrap = p.numerator(); BeatPhase q; - q.advance(1000, 120); - q.advance(1100, 120); // the same 100 ms, no wrap + q.advanceTo(1000, 120); + q.advanceTo(1100, 120); // the same 100 ms, no wrap CHECK(afterWrap == q.numerator()); } diff --git a/test/unit/light/unit_AudioBands.cpp b/test/unit/light/unit_AudioBands.cpp index 479d7db7..239a88ae 100644 --- a/test/unit/light/unit_AudioBands.cpp +++ b/test/unit/light/unit_AudioBands.cpp @@ -137,3 +137,214 @@ TEST_CASE("AudioBands: zero / degenerate input never crashes") { mm::applyWindow(nullptr, 4, &out1); CHECK(true); } + +// The band SPLIT itself, rather than what lands in a band. A 16-band display is only 16 bands if +// every band owns bins of its own: a band whose edges collapse onto the same bin index can never +// light, whatever the signal, and a band with one bin reads a sixteenth of what a band with 75 does +// under the same energy. Both were true of the geometric split (edge[e] = nMag^(e/16)) at the +// shipped shape, which is what these pin. + +TEST_CASE("every band owns at least one FFT bin, so no band is dark whatever the music") { + // The shipped shape: 512-sample FFT at 22050 Hz, so 256 bins of 43.1 Hz. The geometric split + // gave bands 0 and 2 no bins at all (edges 1-1 and 2-2) and bands 1 and 4 a single bin, which + // is a quarter of the display that cannot respond. + const size_t nMag = 256; + const uint32_t sampleRate = 22050; + size_t edges[17]; + mm::audioBandEdges(nMag, sampleRate, edges); + for (uint8_t b = 0; b < 16; b++) { + INFO("band ", b, " spans bins ", edges[b], "..", edges[b + 1]); + CHECK(edges[b + 1] > edges[b]); + } + CHECK(edges[0] >= 1); // bin 0 is DC, never part of a band + CHECK(edges[16] == nMag); // and the top band reaches the Nyquist end +} + +TEST_CASE("band edges rise with frequency, so a band is a range rather than a reshuffle") { + const size_t nMag = 256; + size_t edges[17]; + mm::audioBandEdges(nMag, 22050, edges); + for (uint8_t e = 1; e <= 16; e++) CHECK(edges[e] > edges[e - 1]); +} + +TEST_CASE("a small FFT still yields sixteen usable bands, because a fixture may run one") { + // 128 bins is the smallest shape worth supporting; a geometric split there is degenerate over + // half its range. Sixteen bands must still each own a bin. + const size_t nMag = 128; + size_t edges[17]; + mm::audioBandEdges(nMag, 22050, edges); + for (uint8_t b = 0; b < 16; b++) { + INFO("band ", b, " spans bins ", edges[b], "..", edges[b + 1]); + CHECK(edges[b + 1] > edges[b]); + } +} + +TEST_CASE("the low bands keep the resolution the FFT can actually deliver") { + // Above the bin width the split is free to place edges anywhere; below it there is nothing to + // place. The lowest band starts at the first non-DC bin and the early bands stay narrow, so the + // bass keeps what resolution exists rather than being folded into one wide band. + const size_t nMag = 256; + const uint32_t sampleRate = 22050; + size_t edges[17]; + mm::audioBandEdges(nMag, sampleRate, edges); + const float binHz = static_cast(sampleRate) / (2.0f * static_cast(nMag)); + CHECK(edges[0] == 1); // starts just above DC + CHECK(edges[4] * binHz < 400.0f); // four bands inside the bass + CHECK(edges[8] * binHz < 2000.0f); // half the display below 2 kHz +} + +// The BALLISTIC of a band. A meter that rises and falls at the same speed is the wrong instrument: +// it makes the attack as sluggish as the decay and rounds off exactly the drum hit an audio effect +// exists to show. Broadcast meters (PPM, IEC 60268-10) rise fast and fall slowly, and WLED, FastLED +// and LedFx each arrived at the same asymmetric form independently. + +TEST_CASE("a band rises to a transient at once and falls back slowly, the PPM ballistic") { + uint8_t v = 0; + // A hit: one block takes it most of the way up, because a drum must not be smoothed away. + v = mm::ballistic(v, 200, /*rise*/ 200, /*fall*/ 24); + CHECK(v > 150); + const uint8_t afterRise = v; + // Silence after it: the fall is gradual, so the bar decays rather than dropping out. + v = mm::ballistic(v, 0, 200, 24); + CHECK(v < afterRise); + CHECK(v > (afterRise * 3) / 4); // one block takes off a tenth: the bar decays, it does not drop + for (int i = 0; i < 60; i++) v = mm::ballistic(v, 0, 200, 24); + CHECK(v == 0); // and it does reach zero rather than sticking just above it +} + +TEST_CASE("the ballistic reaches its target exactly, so a held level does not sit one short") { + uint8_t v = 0; + for (int i = 0; i < 60; i++) v = mm::ballistic(v, 255, 200, 24); + CHECK(v == 255); + for (int i = 0; i < 200; i++) v = mm::ballistic(v, 0, 200, 24); + CHECK(v == 0); +} + +TEST_CASE("equal rise and fall reduce to a symmetric follower, so the ballistic is a superset") { + for (uint8_t rate : {uint8_t(8), uint8_t(64), uint8_t(200)}) { + uint8_t a = 40, b = 40; + for (int i = 0; i < 10; i++) { + a = mm::ballistic(a, 200, rate, rate); + b = mm::smoothFollow(b, 200, rate); + CHECK(a == b); + } + } +} + +TEST_CASE("every band gets its own ballistic, so a hit in the bass does not smooth the treble") { + uint8_t raw[16] = {}, sm[16] = {}; + raw[0] = 255; // a bass hit, treble silent + mm::smoothBands(raw, sm); + CHECK(sm[0] > 150); // the hit shows in one block + for (uint8_t b = 1; b < 16; b++) CHECK(sm[b] == 0); // and touches no other band + raw[0] = 0; // silence + mm::smoothBands(raw, sm); + CHECK(sm[0] > 100); // the bar is still falling, not gone + CHECK(sm[0] < 200); +} + +// Onset detection. The standard onset detection function is SPECTRAL FLUX (Bello 2005, Dixon +// 2006): the sum over bands of the positive change since the last block. A rise across the +// spectrum is a hit; a fall is not, and a steady tone is not. It is 16 subtractions on bands we +// already have, so it costs nothing and lands with the block's own latency. + +TEST_CASE("spectral flux reads a rise, ignores a fall, and is zero on a steady spectrum") { + uint8_t prev[16] = {}, cur[16] = {}; + CHECK(mm::spectralFlux(prev, cur) == 0); // silence to silence + for (uint8_t b = 0; b < 16; b++) cur[b] = 200; + const uint8_t hit = mm::spectralFlux(prev, cur); // everything rose + CHECK(hit > 150); + std::memcpy(prev, cur, 16); + CHECK(mm::spectralFlux(prev, cur) == 0); // held: no flux + for (uint8_t b = 0; b < 16; b++) cur[b] = 0; + CHECK(mm::spectralFlux(prev, cur) == 0); // a fall is not an onset +} + +TEST_CASE("an onset fires once per hit, not once per block the hit lasts, and not on a swell") { + // A hit is flux well above its own recent average; a refractory window makes one hit one + // onset. A slow swell raises the average with it and never exceeds it enough to fire. + mm::OnsetDetector d; + int onsets = 0; + for (int block = 0; block < 200; block++) { + const bool hitBlock = (block % 20 == 0); // a hit every 20 blocks (~half a second) + const uint8_t flux = hitBlock ? 200 : 5; // background flux between hits + if (d.feed(flux, static_cast(block) * 23u)) onsets++; + } + CHECK(onsets == 10); // ten hits, ten onsets + mm::OnsetDetector s; + int swell = 0; + for (int block = 0; block < 200; block++) // a slow linear swell + if (s.feed(static_cast(block / 2), static_cast(block) * 23u)) swell++; + CHECK(swell <= 1); // the first block may fire; nothing after +} + +// Per-band conditioning: the learner. Each band learns its own floor and peak in dB; `ratio` +// decides how much of the rig's coloration is removed. Fed directly with dB so the tests say +// what they mean. + +namespace { +void feedBlocks(mm::BandConditioner& c, const float db[16], float out[16], int blocks, uint8_t ratio, + float maxGain = 24.0f, bool learning = true) { + for (int i = 0; i < blocks; i++) c.process(db, out, 23, 60.0f, 40.0f, ratio, maxGain, learning); +} +} + +TEST_CASE("at ratio 1:1 the conditioner changes nothing, so the music's own balance is untouched") { + mm::BandConditioner c; float db[16], out[16]; + for (uint8_t b = 0; b < 16; b++) db[b] = 80.0f - b * 1.5f; + feedBlocks(c, db, out, 100, 1); + for (uint8_t b = 0; b < 16; b++) CHECK(out[b] == doctest::Approx(db[b])); +} + +TEST_CASE("a spectrally tilted rig reads flat at a high ratio, once the learner has settled") { + // Pink noise through a peak-per-band reading tilts 1/sqrt(f): the treble far below the bass. + // Each band has the same DYNAMICS (a 20 dB swing), only its level differs. After settling, + // the conditioned tops line up within a couple of dB, so a balanced signal shows as balanced. + mm::BandConditioner c; float lo[16], hi[16], out[16]; + for (uint8_t b = 0; b < 16; b++) { hi[b] = 90.0f - b * 1.5f; lo[b] = hi[b] - 20.0f; } + // The cap is not under test here (it has its own case below), so it sits above the tilt. + for (int i = 0; i < 400; i++) { feedBlocks(c, hi, out, 1, 20, 40.0f); feedBlocks(c, lo, out, 1, 20, 40.0f); } + feedBlocks(c, hi, out, 1, 20, 40.0f); + float mn = 1e9f, mx = -1e9f; + for (uint8_t b = 0; b < 16; b++) { if (out[b] < mn) mn = out[b]; if (out[b] > mx) mx = out[b]; } + CHECK(mx - mn < 2.0f); + CHECK(out[15] == doctest::Approx(100.0f).epsilon(0.03)); // the top lands at the window's top +} + +TEST_CASE("each band learns its own floor, so a hum in one band does not raise the others") { + mm::BandConditioner c; float silence[16], out[16]; + for (uint8_t b = 0; b < 16; b++) silence[b] = 30.0f; + silence[1] = 55.0f; // mains hum in band 1 + feedBlocks(c, silence, out, 200, 20); + CHECK(c.floorDb[1] == doctest::Approx(55.0f).epsilon(0.05)); + CHECK(c.floorDb[0] == doctest::Approx(30.0f).epsilon(0.05)); + CHECK(c.floorDb[8] == doctest::Approx(30.0f).epsilon(0.05)); +} + +TEST_CASE("maxGain caps the lift, so a silent band is never amplified into its own noise") { + mm::BandConditioner c; float db[16], out[16]; + for (uint8_t b = 0; b < 16; b++) db[b] = 80.0f; + db[15] = 40.0f; // one band forty dB down + feedBlocks(c, db, out, 300, 20, /*maxGain*/ 6.0f); + CHECK(out[15] <= 40.0f + 6.0f + 0.01f); +} + +TEST_CASE("learning off freezes the tables, the deterministic mode a show wants") { + mm::BandConditioner c; float a[16], b2[16], out[16]; + for (uint8_t b = 0; b < 16; b++) { a[b] = 70.0f; b2[b] = 90.0f; } + feedBlocks(c, a, out, 100, 20); + const float peakBefore = c.peakDb[3], floorBefore = c.floorDb[3]; + feedBlocks(c, b2, out, 100, 20, 24.0f, /*learning*/ false); + CHECK(c.peakDb[3] == peakBefore); + CHECK(c.floorDb[3] == floorBefore); +} + +TEST_CASE("the peak releases over seconds, not blocks, so one loud bar does not re-level the display") { + mm::BandConditioner c; float loud[16], quiet[16], out[16]; + for (uint8_t b = 0; b < 16; b++) { loud[b] = 90.0f; quiet[b] = 60.0f; } + feedBlocks(c, loud, out, 10, 20); + feedBlocks(c, quiet, out, 10, 20); // a quarter of a second later + CHECK(c.peakDb[0] > 85.0f); // still remembers the loud bar + feedBlocks(c, quiet, out, 400, 20); // ten seconds later + CHECK(c.peakDb[0] < 65.0f); // it has let go +} diff --git a/test/unit/light/unit_BeatRipples.cpp b/test/unit/light/unit_BeatRipples.cpp new file mode 100644 index 00000000..5e1785a8 --- /dev/null +++ b/test/unit/light/unit_BeatRipples.cpp @@ -0,0 +1,46 @@ +// @module BeatRipplesEffect +// @also golden_frame + +// The wave surface. A golden hash pins which pixels light, but it passes just as happily on a +// frame that is entirely black, which is how this effect once shipped rendering nothing at all: +// the stone pressed into the surface was scaled in units of tens while the render reads a slope +// in units of thousands, so every ripple fell below the threshold that lights a pixel. What is +// pinned here is that water is VISIBLE and that it MOVES. + +#include "doctest.h" +#include "golden_frame.h" +#include "light/effects/BeatRipplesEffect.h" + +using namespace mm; + +namespace { +/// Brightest byte anywhere in the frame: how strongly the surface catches the light. +int brightestLight(const Layer& layer) { + const auto& b = layer.buffer(); + int peak = 0; + for (size_t i = 0; i < b.bytes(); i++) if (b.data()[i] > peak) peak = b.data()[i]; + return peak; +} +} // namespace + +TEST_CASE("still water shows its ripples, and they spread") { + golden::ScopedTestClock clock(1000); + Layouts layouts; GridLayout grid; Layer layer; BeatRipplesEffect e; + grid.width = 32; grid.height = 32; grid.depth = 1; + layouts.addChild(&grid); + layer.setLayouts(&layouts); + layer.setChannelsPerLight(3); + layer.addChild(&e); + layer.applyState(); + + // With no audio at all the idle rain is the only source, and the first drop lands on the + // opening frame rather than after a silent interval of black water. + for (int f = 0; f < 40; f++) { platform::setTestNowMs(1000 + f * 20u); layer.tick(); } + const int early = brightestLight(layer); + CHECK_MESSAGE(early > 16, "idle rain must light the surface, not leave it black"); + + // And the surface keeps ringing rather than settling immediately: a wave that vanished in a + // frame would satisfy the check above while still looking like nothing. + for (int f = 40; f < 200; f++) { platform::setTestNowMs(1000 + f * 20u); layer.tick(); } + CHECK_MESSAGE(brightestLight(layer) > 16, "the water keeps moving while the rain falls"); +} diff --git a/test/unit/light/unit_Effects_framerate.cpp b/test/unit/light/unit_Effects_framerate.cpp index cc382d58..9d694bac 100644 --- a/test/unit/light/unit_Effects_framerate.cpp +++ b/test/unit/light/unit_Effects_framerate.cpp @@ -119,11 +119,25 @@ TEST_CASE("every effect behaves the same at any framerate") { // // BouncingBalls: its MOTION was always rate-independent (ball height comes from absolute // wall-clock time); its trail now comes from the Layer and its golden is unchanged. + // NebulaEffect (1.36): the same shape as FluidEffect below, for the same reason: its + // births are placed by an oscillator and paced by a time budget, so a batched frame + // seeds along a different path than a spread one. + // + // FluidEffect (1.36): its jets are POSITIONED by an oscillator and poured on a + // time-paced budget with catch-up. At a low framerate several pours land in one frame, + // all reading the jet's position at that instant, where a fast device spreads the same + // pours across the arc. So the dye is laid down along a slightly different path, which + // is a property of pouring a moving source in batches rather than a rate bug: the pour + // COUNT is already rate-correct. Surfaced when the oscillator was fixed to advance on + // absolute time; before that the jets never moved and the paths could not differ. const std::string en(name); const double band = (en == "BlurzEffect") ? 3.70 + : (en == "FluidEffect") ? 1.45 + : (en == "NebulaEffect") ? 1.45 : (en == "RandomEffect") ? 2.40 : (en == "StarFieldEffect") ? 1.50 : (en == "BouncingBallsEffect") ? 1.40 : 1.35; + if (!(ratio < band)) MESSAGE("FRAMERATE " << en << " ratio=" << ratio << " band=" << band); CHECK(ratio < band); audited++; }); diff --git a/test/unit/light/unit_Effects_golden.cpp b/test/unit/light/unit_Effects_golden.cpp index 6c1e3d56..f766707d 100644 --- a/test/unit/light/unit_Effects_golden.cpp +++ b/test/unit/light/unit_Effects_golden.cpp @@ -14,7 +14,7 @@ // @also NebulaEffect, NoiseEffect, PacmanEffect, PlasmaEffect, PolarNoiseEffect, PraxisEffect, // @also RainbowEffect, RingsEffect, RubiksCubeEffect, SdfShapesEffect, SineEffect, SolidEffect, // @also SphereMoveEffect, SpiralEffect, StarFieldEffect, StarSkyEffect, TetrixEffect, TextEffect, -// @also TrailsEffect, TruchetEffect, TunnelEffect, WaterRippleEffect, WaveEffect +// @also RadialSpectrumEffect, VuMetersEffect, TrailsEffect, TruchetEffect, TunnelEffect, WaterRippleEffect, WaveEffect // Pins the EXACT rendered output of the time-driven effects, so the power-function migration's // "renders exactly the same" claim is proved rather than asserted. @@ -74,6 +74,8 @@ #include "light/effects/WaterRippleEffect.h" #include "light/effects/FluidEffect.h" #include "light/effects/NebulaEffect.h" +#include "light/effects/RadialSpectrumEffect.h" +#include "light/effects/VuMetersEffect.h" #include "light/effects/TrailsEffect.h" #include "light/effects/TunnelEffect.h" #include "light/effects/EchoEffect.h" @@ -128,9 +130,11 @@ TEST_CASE("time-driven effects render byte-identical frames (migration guard)") SUBCASE("two SDF shapes orbit and melt together, with a soft edge") { SdfShapesEffect e; golden::checkGolden("SdfShapesEffect", golden::renderHash(e, 16, 16, 1), 0xbcfb74b4836606a3ull); } SUBCASE("a warped noise field folded into a kaleidoscope") { PolarNoiseEffect e; golden::checkGolden("PolarNoiseEffect", golden::renderHash(e, 16, 16, 1), 0x8d48e0d1e0180610ull); } SUBCASE("heat rises, cools and colors through the palette") { FireEffect e; golden::checkGolden("FireEffect", golden::renderHash(e, 16, 16, 1), 0x1cadbabb59bc489bull); } - SUBCASE("dye poured into a simulated medium, carried by the flow it works out") { FluidEffect e; golden::checkGolden("FluidEffect", golden::renderHash(e, 16, 16, 1), 0xdef67ab1f131e137ull); } - SUBCASE("a field births light and a curl flow carries it into a cloud") { NebulaEffect e; golden::checkGolden("NebulaEffect", golden::renderHash(e, 16, 16, 1), 0xc42116cc9f9cc33full); } - SUBCASE("dots thrown into a flow, leaving tails it carries and bends") { TrailsEffect e; golden::checkGolden("TrailsEffect", golden::renderHash(e, 16, 16, 1), 0x77993423ebe2f58cull); } + SUBCASE("dye poured into a simulated medium, carried by the flow it works out") { FluidEffect e; golden::checkGolden("FluidEffect", golden::renderHash(e, 16, 16, 1), 0x46f503452c0435efull); } + SUBCASE("a field births light and a curl flow carries it into a cloud") { NebulaEffect e; golden::checkGolden("NebulaEffect", golden::renderHash(e, 16, 16, 1), 0x6cefd6a2f242aeafull); } + SUBCASE("sixteen VU needles with mass, one per band") { VuMetersEffect e; golden::checkGolden("VuMetersEffect", golden::renderHash(e, 16, 16, 1), 0x4c9ddf61e3f3bf78ull); } + SUBCASE("the spectrum as ripples, one sector per band, radius as time") { RadialSpectrumEffect e; golden::checkGolden("RadialSpectrumEffect", golden::renderHash(e, 16, 16, 1), 0xf76a40a372582783ull); } + SUBCASE("dots thrown into a flow, leaving tails it carries and bends") { TrailsEffect e; golden::checkGolden("TrailsEffect", golden::renderHash(e, 16, 16, 1), 0x2f9b1de2ed8382beull); } SUBCASE("layered noise curtains, each drifting on its own clock") { AuroraEffect e; golden::checkGolden("AuroraEffect", golden::renderHash(e, 16, 16, 1), 0xfb4329a20959443dull); } SUBCASE("drops ripple, reflect off the edges and interfere") { WaterRippleEffect e; golden::checkGolden("WaterRippleEffect", golden::renderHash(e, 16, 16, 1), 0xa11f9c4f27cba8d5ull); } SUBCASE("a texture-mapped tunnel flying toward a vanishing point") { TunnelEffect e; golden::checkGolden("TunnelEffect", golden::renderHash(e, 16, 16, 1), 0x7b4d4451a3de3887ull); } diff --git a/test/unit/light/unit_Particles.cpp b/test/unit/light/unit_Particles.cpp index c1beeff2..c2d65694 100644 --- a/test/unit/light/unit_Particles.cpp +++ b/test/unit/light/unit_Particles.cpp @@ -718,7 +718,7 @@ TEST_CASE("spreadLane interleaves rather than striding in order") { } } -// Sound-reactive sprites: the behavior a viewer judges is "it moves with the music, and it stops +// audio-reactive sprites: the behavior a viewer judges is "it moves with the music, and it stops // when the music stops". Both halves are pinned here because both were explicit requirements. TEST_CASE("Silence stands the sprites still") { mm::AudioFrame quiet; // levelSmoothed 0: no music playing @@ -773,7 +773,7 @@ TEST_CASE("The spectrum is spread over the live sprites, not the pool capacity") } // Pool::stepDriven is the shared entry point the sprite effects use, so the rules ride on it too. -TEST_CASE("Sound-reactive stepping moves sprites by their own band, and not at all in silence") { +TEST_CASE("audio-reactive stepping moves sprites by their own band, and not at all in silence") { draw::pos_t x[4] = {0, 0, 0, 0}, y[4] = {0, 0, 0, 0}; draw::pos_t vx[4] = {256, 256, 256, 256}, vy[4] = {0, 0, 0, 0}; uint16_t ttl[4] = {1, 1, 1, 1}; From 5ba441977a6cbf70b693c51a18006c0c96b209a8 Mon Sep 17 00:00:00 2001 From: ewowi Date: Sun, 6 Sep 2026 00:51:51 +0200 Subject: [PATCH 2/4] Fix classic-ESP32 LED flicker with a level-5 RMT refill MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WS2812 output on a classic ESP32 no longer flickers under WiFi. The refill interrupt now runs above every critical section, which is what the strip was waiting for. Two QuinLED Dig-Next-2 boards that flickered all evening are clean. KPI: 16384lights | Desktop:1811KB | ESP32:1890KB | src:261(78350) | test:192(46843) | lizard:232w Core - RMT TX refill moved to interrupt LEVEL 5 (rmt_hi_vector.S, an assembly bridge derived from Espressif's Apache-2.0 hli_vectors.S, calling rmtHiIsr). The IDF driver services its refill at level 1-3, and XCHAL_EXCM_LEVEL is 3, so every critical section on the core masked it; the interrupt priority the driver accepts tops out at 3, below WiFi's. The channel keeps its IDF setup (GPIO, clock, memory) and only the transmit is driven directly, ping-pong out of RMTMEM - The RMT source is routed by hand to vector 26 on core 1: esp_intr_alloc refuses the level-5 vectors as "special". Re-routed after EVERY channel creation, because rmt_new_tx_channel points the source back at the driver's own vector and the network-up prepare sweep re-inits ten seconds in, which boot-looped the board until it was found - Channel creation hops to core 1: an RMT interrupt binds to whichever core allocates it, and ours ran on the main task, pinned to core 0 with WiFi - One memory block per channel again, so an eight-pin board keeps all eight RMT channels. Four blocks only widened a deadline that no longer matters - MoonBase serves the OTA routes under the application's names (/api/firmware/upload, /api/firmware/url, /api/firmware/boot-app): two names for one operation, across images a single browser page talks to in turn Light domain - The RMT symbol buffer is allocated internal-first. The level-5 handler runs with the flash cache possibly off, where a PSRAM read faults rather than stalls; it also measured 2.2 ms/frame faster on a 256-light panel - rmtWs2812Wait returns whether the frame finished, and the driver refuses to re-encode a buffer still on the wire - VuMeters peak-hold decays by real elapsed time, not the stall-capped step - ColorTrails' Lissajous emitter scales with `size`, like the orbit - RmtLedDriver: loopbackTest joins affectsPrepare, so toggling it actually shows the three loopback controls UI - Audio's floor and gain stay visible in automatic levels mode: computeLevel reads them for the overall level whatever the mode says, so hiding them left values shaping the picture out of reach - migrate.js: the soundReactive rename declared `to:` where renameKeys reads `name:`, so it silently renamed nothing Tests - unit_MoonBaseContract pins that both boot images serve the OTA routes under the same names: they share no sources, so a rename compiles cleanly on both and fails only on a device, mid-update - Three migration tests: the worked rename, its type scoping, and the shape of every CONTROL_RENAMES entry - unit_AudioBands includes , which GCC needs and clang found transitively: this is what broke all three CI sanitizer jobs Docs/CI - building.md documents flashing a running device over the network, including that curl reporting 000 is success and how to tell the two images apart - CLAUDE.md: repo health runs on every commit, and the gate tables name the MoonDeck scripts rather than raw ctest/cmake/pytest - MIGRATING: the MoonBase route rename needs one serial flash of both images - Backlogged: a script's setControl rebuilds a whole control subtree per write (measured 2 fps on a P4), Funkelfetisch's RMT-over-DMA branch for S3/P4, the fluid solver's real cost, and the audio-sync test's wall-clock wait Reviews - 🐇 CodeRabbit on PR #96, 12 findings: 7 fixed (migrate.js to/name, VuMeters peak-hold, ColorTrails Lissajous size, audio floor/gain visibility, three empty links in performance.md, a plural verb, four stale advance() comments), 1 backlogged (the sync test's real-time polling, pre-existing), 2 skipped with reason (golden audio determinism: no AudioService is instantiated in that binary, latestFrame returns a static silence frame; BeatRipples animation: the test already renders to frame 40, checks, runs to 200 and checks again), 2 partially applied Co-Authored-By: Claude Opus 5 (1M context) --- CLAUDE.md | 30 +- docs/MIGRATING.md | 17 ++ docs/backlog/backlog-core.md | 13 + docs/backlog/backlog-light.md | 46 +++ docs/building.md | 51 ++++ docs/metrics/repo-health.json | 213 ++++++++------ docs/metrics/repo-health.md | 91 +++--- docs/performance.md | 4 +- docs/tutorials/generative-effects.md | 2 +- esp32/main/CMakeLists.txt | 7 + moonbase/main/moonbase_main.cpp | 24 +- src/core/AudioService.h | 8 +- src/light/drivers/RmtLedDriver.h | 46 ++- src/light/effects/ColorTrailsEffect.h | 11 +- src/light/effects/FluidEffect.h | 2 +- src/light/effects/NebulaEffect.h | 2 +- src/light/effects/TrailsEffect.h | 2 +- src/light/effects/VuMetersEffect.h | 5 +- src/platform/desktop/platform_desktop.cpp | 2 +- src/platform/esp32/platform_esp32_rmt.cpp | 278 ++++++++++++++++-- src/platform/esp32/rmt_hi_vector.S | 193 ++++++++++++ src/platform/platform.h | 5 +- src/ui/app.js | 8 +- src/ui/migrate.js | 2 +- test/js/migrate.test.mjs | 48 ++- .../scenario_MoonModule_control_change.json | 26 +- .../light/scenario_Audio_mutation.json | 50 ++-- test/scenarios/light/scenario_Aurora_fps.json | 60 ++-- .../light/scenario_Driver_mutation.json | 34 +-- .../light/scenario_Effects_composition.json | 6 +- .../light/scenario_Fields_polar_lut.json | 76 ++--- .../light/scenario_Fluid_solver.json | 94 +++--- .../light/scenario_GridBlacks_blackpixel.json | 18 +- .../light/scenario_GridLayout_resize.json | 14 +- .../light/scenario_Layer_base_pipeline.json | 4 +- .../light/scenario_Layer_memory_1to1.json | 10 +- .../light/scenario_Layouts_mutation.json | 24 +- .../scenario_MoonLiveEffect_livescript.json | 94 +++--- .../light/scenario_MoonLive_pipeline.json | 42 +-- .../scenario_MultiplyModifier_memory_lut.json | 8 +- .../scenario_MultiplyModifier_pipeline.json | 4 +- .../light/scenario_Trails_ladder.json | 52 ++-- .../light/scenario_modifier_chain.json | 28 +- .../light/scenario_modifier_swap.json | 18 +- test/scenarios/light/scenario_perf_full.json | 112 +++---- test/scenarios/light/scenario_perf_light.json | 20 +- .../light/scenario_peripheral_grid_sweep.json | 92 +++--- .../light/scenario_peripheral_switch.json | 32 +- test/unit/core/unit_MoonBaseContract.cpp | 37 +++ test/unit/light/unit_AudioBands.cpp | 1 + 50 files changed, 1395 insertions(+), 671 deletions(-) create mode 100644 src/platform/esp32/rmt_hi_vector.S diff --git a/CLAUDE.md b/CLAUDE.md index 989254e0..b096b3f4 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -26,7 +26,7 @@ A high-performance system driving large LED installations and DMX fixtures. One ## The Process -Every change follows the same timeline: **main → branch → build → test → document → commit → merge → release**. The **product owner** (PO) is the person initiating a branch, and any contributor can be one. The PO initiates every event and every gate list; if unsure, ask ("Feature work is done; run pre-commit, or do you want to look first?"). This holds even when the list would only be *checking* work in progress: running it to see where things stand is still starting a gate list. Verify work in progress with the individual tools instead (a build, `ctest`, one check script); the list itself is the PO's to fire. A conditional check runs only when its objective trigger matches; an applicable-but-skipped check needs a one-line reason in the commit/PR/release notes. Each cycle produces visible output, and each cycle subtracts: remove code and docs that stopped earning their place, or know why each one stays. `backlog/` and `history/` shrink too. External contributors follow the same timeline: fork, branch, PR into main, with the same checks and review. +Every change follows the same timeline: **main → branch → build → test → document → commit → merge → release**. The **product owner** (PO) is the person initiating a branch, and any contributor can be one. The PO initiates every event and every gate list; if unsure, ask ("Feature work is done; run pre-commit, or do you want to look first?"). This holds even when the list would only be *checking* work in progress: running it to see where things stand is still starting a gate list. Verify work in progress with the individual tools instead (a build, `test_desktop.py`, one check script); the list itself is the PO's to fire. A conditional check runs only when its objective trigger matches; an applicable-but-skipped check needs a one-line reason in the commit/PR/release notes. Each cycle produces visible output, and each cycle subtracts: remove code and docs that stopped earning their place, or know why each one stays. `backlog/` and `history/` shrink too. External contributors follow the same timeline: fork, branch, PR into main, with the same checks and review. ### Main @@ -49,8 +49,8 @@ Implement against the architecture ([docs/architecture.md](docs/architecture.md) | Task | Command | |---|---| -| desktop build (zero warnings) | `cmake --build build` | -| unit tests | `ctest --test-dir build --output-on-failure` | +| desktop build (zero warnings) | `uv run moondeck/build/build_desktop.py` | +| unit tests | `uv run moondeck/test/test_desktop.py` | | scenario tests | `uv run moondeck/scenario/run_scenario.py` | | **run the desktop firmware** | `uv run moondeck/run/run_desktop.py` | | ESP32 firmware build | `uv run moondeck/build/build_esp32.py --firmware ` | @@ -70,6 +70,13 @@ Keep a branch under ~100 changed files: past that CodeRabbit declines the PR out **MoonDeck** is the project's tooling: every build, flash, monitor, test, and check task is one Python script under `moondeck/`, and MoonDeck itself is the local web dashboard that runs those same scripts for a human ([moondeck/MoonDeck.md](moondeck/MoonDeck.md) is the per-script reference). Agents invoke the scripts from the command line — one set of scripts, two front ends — and every gate invokes one of them. Deliberately our own scripts rather than an embedded toolchain like PlatformIO: the firmware builds vendor-native against pinned ESP-IDF versions, and the tooling covers far more than compile-and-flash — one script per task keeps humans, agents, and CI on the identical path (rationale: [building.md § MoonDeck](docs/building.md#moondeck--the-dev-console)). +**Never run the underlying tool directly when a script wraps it.** `ctest`, `cmake --build`, +`pytest`, `node --test` and `idf.py` all have a MoonDeck script in front of them, and the script is +the contract: it picks the right per-host build directory, applies the flags the gate expects, and +tees its output where the dashboard and the PO's report read it. Reaching past it produces a number +that looks right and is measured differently, or a stale binary the script would have rebuilt. If a +task seems to have no script, that is worth saying rather than working around. + ### Test New behavior is pinned before it ships: a unit test for module logic, a scenario test for a full pipeline, and every discovered crash becomes a regression test (§ Principles, Guardrails + Robustness). Test descriptions read as functional documentation — a statement a user could understand — and a trivial test doesn't earn its place. Placement: [coding-standards § Tests](docs/coding-standards.md#tests); inventory and strategy: [docs/testing.md](docs/testing.md). @@ -109,13 +116,22 @@ On "run pre-commit": run the checks whose trigger the diff matches, report one l | platform boundary | `uv run moondeck/check/check_platform_boundary.py` | `src/`, except `src/platform/` | | hot-path discipline | `uv run moondeck/check/check_nonblocking.py --incremental` | `src/` | | ESP32 firmware fresh | `uv run moondeck/check/check_esp32_built.py --firmware ` | `src/`, `esp32/`, `CMakeLists.txt`, `library.json`, except `src/platform/desktop/` | -| host tests (Python) | `uv run --with pytest --with pyserial --with markdown --with wled pytest test/python -q` | `moondeck/`, `test/python/`, `moonlive/` | -| host tests (JS) | `node --test "test/js/**/*.test.mjs"` | `mooninstaller/`, `test/js/`, `src/ui/` | -| desktop build (zero warnings) 🐢 | `cmake --build build` | `src/`, `test/`, `CMakeLists.txt`, `library.json` | -| unit tests 🐢 | `ctest --test-dir build --output-on-failure --no-tests=error -C Release` | same as the desktop build | +| host tests (Python) | `uv run moondeck/test/test_host.py --python` | `moondeck/`, `test/python/`, `moonlive/` | +| host tests (JS) | `uv run moondeck/test/test_host.py --js` | `mooninstaller/`, `test/js/`, `src/ui/` | +| desktop build (zero warnings) 🐢 | `uv run moondeck/build/build_desktop.py --tests` | `src/`, `test/`, `CMakeLists.txt`, `library.json` | +| unit tests 🐢 | `uv run moondeck/test/test_desktop.py` | same as the desktop build | | scenario tests 🐢 | `uv run moondeck/scenario/run_scenario.py` | same, plus `test/scenarios/` | | no-backend build 🐢 | `uv run moondeck/build/build_desktop.py --no-jit --tests` | MoonLive sources or their tests | | Improv smoke test (needs a board) | `uv run moondeck/build/improv_smoke_test.py --port ` | `src/core/ImprovFrame.h`, `src/platform/esp32/platform_esp32_improv.cpp`, `mooninstaller/index.html`, `src/ui/install-picker.js`, `moondeck/build/improv_` | +| repo health 🐢 | `uv run moondeck/check/collect_kpi.py --commit` | always | + +**Repo health runs on EVERY commit**, whatever the diff touches, because it is the only place the +numbers that creep are visible: flash and DRAM per target, binary size, the scenario tick matrix, +source and test line counts, and the complexity warnings. A docs-only commit moves none of them and +takes seconds to prove it; a one-line driver change can move flash by kilobytes and nothing else +would say so. It RECORDS rather than passes or fails, and writes to the tree, so its output belongs +in the commit message (see below) and its diff belongs in the commit. Read the deltas before +committing: a number that moved without a reason in the diff is an irregularity to explain. The Improv smoke test needs an ESP32 on a USB port, so it is a recommendation rather than a blocker: it covers the provisioning path a user meets before the device is on the network, which nothing else exercises. Run it when the diff touches that path and a board is at hand, and say so in the commit when it is skipped. diff --git a/docs/MIGRATING.md b/docs/MIGRATING.md index 46efd756..6151c989 100644 --- a/docs/MIGRATING.md +++ b/docs/MIGRATING.md @@ -24,6 +24,23 @@ projectMM ships **no migration code**: the persistence layer is robust by defaul ## Unreleased (`next-iteration`) +### MoonBase serves the OTA routes under the application's names + +**Action: nothing on most devices; a serial flash on a MoonBase device updated from a browser.** +Affects the 4 MB classic, `esp32-16mb` and the S3-Zero, the variants that carry MoonBase. + +MoonBase served `/install`, `/install-url`, `/boot-app`, `/last-url` and `/cancel` while the +application served `/api/firmware/upload`, `/api/firmware/url` and `/api/firmware/moonbase`: two +names for one operation, across images that a single browser page talks to in turn during one +update. It now serves them under the application's names. + +The break is between the two images on a device, not between a device and its config. A device +whose MoonBase predates this change still answers only the old names, so an updated application +handing over to it leaves the browser calling routes that image does not have. The way through is +the same as any MoonBase update: flash both images over serial once +([building.md](building.md#flashing-a-running-device-over-the-network)). A device flashed serially +from this version on is consistent and needs nothing. + ### `soundReactive` is now `audioReactive` **Action: re-set one control.** Affects Fish Tank, Flying Toasters, Pacman, Pong, Space Invaders, diff --git a/docs/backlog/backlog-core.md b/docs/backlog/backlog-core.md index 6f1030a2..882da853 100644 --- a/docs/backlog/backlog-core.md +++ b/docs/backlog/backlog-core.md @@ -2,6 +2,19 @@ Forward-looking to-build items for the **core / infrastructure** domain (`src/core/`, `src/platform/`, build, CI, network, persistence, UI). The light-domain counterpart is [backlog-light.md](backlog-light.md); items that genuinely span both are in [backlog-mixed.md](backlog-mixed.md). Index + overview: [README.md](README.md). Completed items are removed. +### The audio-sync test waits on the wall clock (2026-09-06) + +`test/unit/core/unit_AudioService_sync.cpp` drives the quiet-packet case with `platform::delayMs(1)` +inside a 100-iteration polling loop, so the assertion that `level` reaches zero depends on real +elapsed time and on loopback UDP delivering within that window. It passes today and has not been +seen to flake, but it is the shape that produces a rare CI failure nobody can reproduce, and it +spends real milliseconds in a suite that otherwise runs on a test clock. + +The fix is the deterministic UDP seam plus `platform::setTestNowMs`, the same pattern every other +timing test here uses: feed the packet, advance the clock explicitly, assert. Raised by CodeRabbit +on PR #96 and deliberately not taken in that pass: it is pre-existing rather than part of that +diff, and swapping a test's transport is a change that wants its own verification. + ## Distribution ### OTA upload refuses a normal client: the body must arrive within ~50 ms (2026-09-02) diff --git a/docs/backlog/backlog-light.md b/docs/backlog/backlog-light.md index fe95c9df..2e7f2e39 100644 --- a/docs/backlog/backlog-light.md +++ b/docs/backlog/backlog-light.md @@ -25,6 +25,52 @@ Forward-looking to-build items for the **light domain** (`src/light/`: drivers, MoonLight has several moving-head effects that have no equivalent here, two of them troyhack's. Migrate them all, on the power functions per the standing mandate rather than traced across. +### RMT over DMA on the S3/P4, with a completion callback (Funkelfetisch, July 2026) + +Funkelfetisch's fork carries a finished branch, `codex/upstream-rmt-rgbw-performance`, that the +classic-ESP32 flicker work of 2026-09-05 makes worth adopting: on chips with RMT DMA +(`SOC_RMT_SUPPORT_DMA`: S3, P4) it sets `with_dma` with the IDF-recommended 1024-symbol block, so +the frame streams from RAM and the refill interrupt that causes flicker on a DMA-less chip does not +exist at all. It replaces the blocking `rmt_tx_wait_all_done` with `rmt_tx_register_event_callbacks` +(`on_trans_done`) plus a per-channel busy flag so the next tick skips while a frame is in flight, +and reports `"RMT DMA"` in the driver status so a user can see which path is live. Files: +`platform_esp32_rmt.cpp` (+105), `RmtLedDriver.h` (+75), `LedDriverConfig.h`, `Correction.h` +(RGBW presets, a separate topic in the same branch), with unit tests. + +What it does NOT address: on the classic ESP32 the DMA half compiles to nothing, and nothing in it +moves the channel's interrupt off core 0 (the root cause found on the Dig-Next-2, fixed by +creating the channel from core 1). The two are complementary, one driver with the right answer +per chip: DMA where the silicon has it, the core-1 refill where it does not. Adopt his DMA and +callback path, keep the core hop, and drop the classic-only `txInFlight_` guard where his busy +flag covers it. Study, do not copy: write it against the seam as it stands, credit the branch. + +### A script's setControl rebuilds a control subtree on every write (2026-09-06) + +Measured on the P4 at .139: **2 fps**, with `MoonLive-2` at 251 ms and `MoonLive-3` at 245 ms per +tick, together 498 ms of a 506 ms frame, and HTTP down to a 0.5 s round trip because it is served +from the same loop. Both services ran `sweep.mls`, whose `tick20ms` writes four faders. Two copies +at 50 Hz is 400 control writes a second, and `Scheduler::setControl` calls `rebuildControls()` +unconditionally on each one: + +``` +clearControlsRecursive(); // wipes this module's controls AND every child's, recursively +defineControls(); // then rebuilds them all +``` + +So each fader write tears down and re-creates the whole `Control` subtree. A person moving a slider +does this a few times a second and nobody notices; a script at 50 Hz multiplies it by hundreds. + +Two things to fix, and they are independent. **The rebuild should be conditional**: a `live` +control's value change cannot alter the schema, and `rebuildControls` already computes +`schemaSignature()` before and after to decide whether to notify, so it knows. Rebuilding only when +the shape can actually change (what `setLive` and `affectsPrepare` already distinguish) removes the +cost for every value write, scripted or human. **And the script tick is too fast for its job**: a +fader sweep does not need 50 Hz, so `sweep.mls` should run on a slower tick, which also caps the +damage any future script can do through this path. + +Not a regression from the RMT work: it predates it and was found while measuring an unrelated slow +board. + ### Speed up the fluid solver: 4 fps at 128x128, and it is not the divide (2026-09-05) Measured on an S31 (RISC-V, 320 MHz, octal PSRAM at 200 MHz), `iterations` 5, depth 1: diff --git a/docs/building.md b/docs/building.md index 2efc3aec..91bf4a73 100644 --- a/docs/building.md +++ b/docs/building.md @@ -265,6 +265,57 @@ The Ethernet PHY type and pin map are runtime config, not baked into the build: `--profile` is accepted one release for migration: `--profile default` → `--firmware esp32`, `--profile eth-only` → `--firmware esp32-eth`. +### Flashing a running device over the network + +A board already on the network is updated over HTTP, with no cable. Which route to use depends on +whether the variant carries [MoonBase](architecture.md#moonbase-the-second-boot-image): a board +cannot rewrite the partition it is executing from, so on a MoonBase variant the app hands over to +MoonBase and MoonBase does the writing. + +**On a MoonBase variant** (`esp32`, `esp32-16mb`, `esp32s3-zero`, and any variant `build_esp32.py` +builds MoonBase alongside), it is two requests: + +```sh +# 1. the app reboots into MoonBase, with nothing staged. Back in ~4 seconds. +curl -X POST http:///api/firmware/moonbase + +# 2. MoonBase writes the app slot and reboots into it +curl --http1.1 -H "Expect:" --data-binary @build/esp32-/projectMM.bin \ + http:///api/firmware/upload +``` + +The second request ends with **no HTTP status** (curl reports 000): the device reboots into the new +image as the write completes, so the socket closes before a response arrives. That is success, not +failure. Confirm by reading the build back: + +```sh +curl -s http:///api/modules/Firmware # the `build` control names the commit and date +``` + +MoonBase serves the same route names as the application, so a page driving an update keeps calling +the same paths after the handover. It also installs unattended from a URL, which is what the UI's +update button uses: `POST /api/firmware/url` with the URL as the body. `POST /api/firmware/boot-app` +returns to the application without installing anything, and only boots an image that validates. + +**Without MoonBase**, the application takes the image directly on the same route, +`POST /api/firmware/upload`. It is one of only two streaming routes (`/api/file` is the other), so +the body may exceed the request buffer; every other route rejects an oversized body with 413. + +Two failure modes are worth recognizing, because both look like something else: + +- **413 from `/api/firmware/upload`** on a MoonBase variant means the request reached the + APPLICATION rather than MoonBase, and the app rejected an oversized body on a route it does not + stream. The device did not reboot into MoonBase, or booted back before the upload. Check with + `GET /moonbase`, which MoonBase answers and the app 404s. +- **`{"error":"incomplete request body"}`** from `/api/firmware/upload` means the body did not + arrive within the read window. Send with `--http1.1 -H "Expect:"` so the transfer starts + immediately instead of waiting for a `100 Continue` the device does not send. + +**A partition-table change needs a cable.** OTA writes the app, never the table, so a device on an +older layout adopts a new one only through a full serial flash (see the note under +[Firmware variants](#firmware-variants)). On the 4 MB classic that migration also moves the +filesystem, so the device comes back unprovisioned. + ### Why not Arduino The ESP32 target uses ESP-IDF directly for three reasons: diff --git a/docs/metrics/repo-health.json b/docs/metrics/repo-health.json index 81b3e7d2..c9b7c9e2 100644 --- a/docs/metrics/repo-health.json +++ b/docs/metrics/repo-health.json @@ -1,8 +1,8 @@ { - "commit": "df8a8b0f", + "commit": "6e9c6605", "flash": { "esp32s3-n16r8": 1998944, - "desktop": 1692152, + "desktop": 1854888, "esp32": 1923264, "esp32p4rev1-eth": 1675216, "esp32p4rev1-eth-wifi": 2019392, @@ -13,24 +13,25 @@ "esp32-wrover": 1843760, "qemu": 1383648, "esp32p4rev3-eth": 1643760, - "esp32s3-zero": 1788624 + "esp32s3-zero": 1788624, + "esp32-pico": 2066240 }, "perf": { "desktop": { - "tick_us": 135, - "fps": 7407, + "tick_us": 124, + "fps": 8064, "scenario_p50": { "Layer_base_pipeline": { - "p50": 107, + "p50": 94, "p95": 211, "n": 32, - "last": "2026-09-03" + "last": "2026-09-06" }, "Layer_memory_1to1": { - "p50": 10, - "p95": 41, + "p50": 9, + "p95": 40, "n": 32, - "last": "2026-09-03" + "last": "2026-09-06" } } }, @@ -41,10 +42,10 @@ "scenario_matrix": { "MoonModule_control_change": { "desktop-macos": { - "p50": 131, - "p95": 246, + "p50": 143, + "p95": 248, "n": 32, - "last": "2026-09-03" + "last": "2026-09-06" }, "esp32-eth-wifi": { "p50": 89895, @@ -157,10 +158,10 @@ }, "Audio_mutation": { "desktop-macos": { - "p50": 45, - "p95": 790, + "p50": 30, + "p95": 120, "n": 32, - "last": "2026-09-03" + "last": "2026-09-06" }, "desktop-windows": { "p50": 40, @@ -183,18 +184,18 @@ }, "Aurora_fps": { "desktop-macos": { - "p50": 937, - "p95": 1423, - "n": 4, - "last": "2026-09-04" + "p50": 1506, + "p95": 1920, + "n": 17, + "last": "2026-09-06" } }, "Driver_mutation": { "desktop-macos": { - "p50": 49, - "p95": 285, + "p50": 32, + "p95": 590, "n": 32, - "last": "2026-09-03" + "last": "2026-09-06" }, "desktop-windows": { "p50": 42, @@ -217,10 +218,10 @@ }, "Effects_composition": { "desktop-macos": { - "p50": 497, - "p95": 2259, + "p50": 366, + "p95": 1253, "n": 32, - "last": "2026-09-03" + "last": "2026-09-06" }, "desktop-windows": { "p50": 549, @@ -231,18 +232,26 @@ }, "Fields_polar_lut": { "desktop-macos": { - "p50": 981, - "p95": 1206, - "n": 6, - "last": "2026-09-04" + "p50": 1228, + "p95": 1311, + "n": 18, + "last": "2026-09-06" + } + }, + "Fluid_solver": { + "desktop-macos": { + "p50": 222, + "p95": 249, + "n": 11, + "last": "2026-09-06" } }, "GridBlacks_blackpixel": { "desktop-macos": { - "p50": 7, - "p95": 25, + "p50": 5, + "p95": 16, "n": 32, - "last": "2026-09-03" + "last": "2026-09-06" }, "esp32s3-n16r8": { "p50": 267, @@ -265,10 +274,10 @@ }, "GridLayout_resize": { "desktop-macos": { - "p50": 132, - "p95": 298, + "p50": 128, + "p95": 311, "n": 32, - "last": "2026-09-03" + "last": "2026-09-06" }, "esp32-eth-wifi": { "p50": 82231, @@ -309,10 +318,10 @@ }, "Layer_base_pipeline": { "desktop-macos": { - "p50": 107, + "p50": 94, "p95": 211, "n": 32, - "last": "2026-09-03" + "last": "2026-09-06" }, "desktop-windows": { "p50": 118, @@ -323,10 +332,10 @@ }, "Layer_memory_1to1": { "desktop-macos": { - "p50": 10, - "p95": 41, + "p50": 9, + "p95": 40, "n": 32, - "last": "2026-09-03" + "last": "2026-09-06" }, "desktop-windows": { "p50": 1, @@ -337,10 +346,10 @@ }, "Layouts_mutation": { "desktop-macos": { - "p50": 171, - "p95": 2190, + "p50": 138, + "p95": 381, "n": 32, - "last": "2026-09-03" + "last": "2026-09-06" }, "desktop-windows": { "p50": 111, @@ -389,10 +398,10 @@ }, "MoonLiveEffect_livescript": { "desktop-macos": { - "p50": 14, - "p95": 151, + "p50": 9, + "p95": 25, "n": 32, - "last": "2026-09-03" + "last": "2026-09-06" }, "esp32s3-n16r8": { "p50": 8255, @@ -439,10 +448,10 @@ "last": "2026-08-20" }, "desktop-macos": { - "p50": 11, - "p95": 185, + "p50": 10, + "p95": 70, "n": 32, - "last": "2026-09-03" + "last": "2026-09-06" }, "desktop-windows": { "p50": 1, @@ -453,10 +462,10 @@ }, "MultiplyModifier_memory_lut": { "desktop-macos": { - "p50": 6, - "p95": 165, + "p50": 4, + "p95": 132, "n": 32, - "last": "2026-09-03" + "last": "2026-09-06" }, "desktop-windows": { "p50": 3, @@ -467,10 +476,10 @@ }, "MultiplyModifier_pipeline": { "desktop-macos": { - "p50": 129, + "p50": 126, "p95": 283, "n": 32, - "last": "2026-09-03" + "last": "2026-09-06" }, "desktop-windows": { "p50": 225, @@ -479,12 +488,20 @@ "last": "2026-07-08" } }, + "Trails_ladder": { + "desktop-macos": { + "p50": 353, + "p95": 608, + "n": 12, + "last": "2026-09-06" + } + }, "modifier_chain": { "desktop-macos": { - "p50": 78, - "p95": 473, + "p50": 55, + "p95": 138, "n": 32, - "last": "2026-09-03" + "last": "2026-09-06" }, "desktop-windows": { "p50": 69, @@ -501,10 +518,10 @@ }, "modifier_swap": { "desktop-macos": { - "p50": 46, - "p95": 456, + "p50": 33, + "p95": 160, "n": 32, - "last": "2026-09-03" + "last": "2026-09-06" }, "esp32-eth": { "p50": 1010, @@ -539,10 +556,10 @@ }, "perf_full": { "desktop-macos": { - "p50": 589, - "p95": 2027, + "p50": 429, + "p95": 2011, "n": 32, - "last": "2026-09-03" + "last": "2026-09-06" }, "esp32s3-n16r8": { "p50": 16915, @@ -571,10 +588,10 @@ }, "perf_light": { "desktop-macos": { - "p50": 35, - "p95": 134, + "p50": 27, + "p95": 76, "n": 32, - "last": "2026-09-03" + "last": "2026-09-06" }, "esp32s3-n16r8": { "p50": 2485, @@ -615,10 +632,10 @@ "last": "2026-07-25" }, "desktop-macos": { - "p50": 586, - "p95": 2098, + "p50": 485, + "p95": 1394, "n": 32, - "last": "2026-09-03" + "last": "2026-09-06" }, "desktop-windows": { "p50": 649, @@ -641,10 +658,10 @@ "last": "2026-07-24" }, "desktop-macos": { - "p50": 9, - "p95": 38, + "p50": 7, + "p95": 16, "n": 32, - "last": "2026-09-03" + "last": "2026-09-06" }, "esp32p4rev1-eth": { "p50": 217, @@ -668,54 +685,54 @@ } }, "loc": { - "core": 24938, - "light": 31807, - "platform": 17463, - "ui": 10089, - "test": 54681, - "moondeck": 22488 + "core": 25332, + "light": 34548, + "platform": 17770, + "ui": 10204, + "test": 56060, + "moondeck": 22512 }, "comments": { "core": { - "lines": 9940, - "ratio": 0.431 + "lines": 10143, + "ratio": 0.433 }, "light": { - "lines": 12233, - "ratio": 0.423 + "lines": 13160, + "ratio": 0.419 }, "platform": { - "lines": 6117, - "ratio": 0.385 + "lines": 6223, + "ratio": 0.384 }, "ui": { - "lines": 2969, - "ratio": 0.311 + "lines": 3014, + "ratio": 0.312 }, "test": { - "lines": 10179, - "ratio": 0.213 + "lines": 10468, + "ratio": 0.214 }, "moondeck": { - "lines": 3643, + "lines": 3651, "ratio": 0.185 } }, "tests": { - "cases": 1876, - "scenarios": 25 + "cases": 1945, + "scenarios": 27 }, "docs": { - "md_files": 218, - "md_lines": 35121, + "md_files": 219, + "md_lines": 36540, "plans_files": 115, - "backlog_lines": 6338, + "backlog_lines": 6977, "lessons_lines": 678, - "claude_md_lines": 237 + "claude_md_lines": 250 }, "complexity": { - "functions": 3290, - "over_threshold": 220, + "functions": 3427, + "over_threshold": 232, "worst_ccn": 108 } } diff --git a/docs/metrics/repo-health.md b/docs/metrics/repo-health.md index 0c6d62fa..b92cec1e 100644 --- a/docs/metrics/repo-health.md +++ b/docs/metrics/repo-health.md @@ -1,6 +1,6 @@ # Repo health -Measured at `df8a8b0f`. Generated by [`moondeck/check/repo_health.py`](../../moondeck/check/repo_health.py) on every KPI-gate run. **Do not edit by hand.** +Measured at `6e9c6605`. 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,15 +8,16 @@ Current state only; the trend is this file's git history (`git log -p docs/metri | Target | Flash | Capacity | Used | Built | |---|---:|---:|---:|:--:| -| desktop | 1,652 KB | - | - | carried | +| desktop | 1,811 KB (+159 KB) ⚠ | - | - | yes | | esp32 | 1,878 KB | 2,496 KB | 75% | carried | | esp32-16mb | 1,767 KB | - | - | carried | | esp32-eth | 1,365 KB | - | - | carried | +| esp32-pico | 2,018 KB | 3,072 KB | 66% | yes | | esp32-wrover | 1,801 KB | - | - | carried | | esp32p4rev1-eth | 1,636 KB | 4,096 KB | 40% | carried | | esp32p4rev1-eth-wifi | 1,972 KB | - | - | carried | | esp32p4rev3-eth | 1,605 KB | - | - | carried | -| esp32s3-n16r8 | 1,952 KB (+94 KB) ⚠ | 4,096 KB | 48% | yes | +| esp32s3-n16r8 | 1,952 KB | 4,096 KB | 48% | carried | | esp32s3-n8r8 | 1,925 KB | - | - | carried | | esp32s3-zero | 1,747 KB | - | - | carried | | esp32s31 | 2,056 KB | 4,096 KB | 50% | carried | @@ -28,49 +29,51 @@ Current state only; the trend is this file's git history (`git log -p docs/metri | Target | Tick | FPS | |---|---:|---:| -| desktop | 135 µs (−710 µs) ✓ | 7,407 (+6,224) ✓ | +| desktop | 124 µs (−11 µs) ✓ | 8,064 (+657) ✓ | | esp32 | 8,354 µs | 119 | ### Scenario tick by target (p50 of each sample window) | Scenario | desktop-macos | desktop-windows | esp32 | esp32s3-n16r8 | esp32p4rev1-eth | esp32s31 | esp32-eth | esp32-eth-wifi | unknown | |---|---|---|---|---|---|---|---|---|---| -| Audio_mutation | 45 (+12) ⚠ | 40 ? | 13,152 | 47 ? | - | - | - | - | - | -| Aurora_fps | 937 | - | - | - | - | - | - | - | - | -| Driver_mutation | 49 (+12) ⚠ | 42 ? | 12,812 | 39 ? | - | - | - | - | - | -| Effects_composition | 497 (+154) ⚠ | 549 ? | - | - | - | - | - | - | - | -| Fields_polar_lut | 981 | - | - | - | - | - | - | - | - | -| GridBlacks_blackpixel | 7 (+2) ⚠ | 8 ? | 269 ? | 267 ? | - | - | - | - | - | -| GridLayout_resize | 132 (−35) ✓ | 219 ? | 1,352 ? | 1,011 ? | 1,143 ? | - | 95,771 ? | 82,231 ? | - | -| Layer_base_pipeline | 107 (+32) ⚠ | 118 ? | - | - | - | - | - | - | - | -| Layer_memory_1to1 | 10 (+1) ⚠ | 1 ? | - | - | - | - | - | - | - | -| Layouts_mutation | 171 (+41) ⚠ | 111 ? | 13,692 | 45 ? | - | - | 27 ? | - | - | +| Audio_mutation | 30 (−15) ✓ | 40 ? | 13,152 | 47 ? | - | - | - | - | - | +| Aurora_fps | 1,506 (+569) ⚠ | - | - | - | - | - | - | - | - | +| Driver_mutation | 32 (−17) ✓ | 42 ? | 12,812 | 39 ? | - | - | - | - | - | +| Effects_composition | 366 (−131) ✓ | 549 ? | - | - | - | - | - | - | - | +| Fields_polar_lut | 1,228 (+247) ⚠ | - | - | - | - | - | - | - | - | +| Fluid_solver | 222 | - | - | - | - | - | - | - | - | +| GridBlacks_blackpixel | 5 (−2) ✓ | 8 ? | 269 ? | 267 ? | - | - | - | - | - | +| GridLayout_resize | 128 (−4) ✓ | 219 ? | 1,352 ? | 1,011 ? | 1,143 ? | - | 95,771 ? | 82,231 ? | - | +| Layer_base_pipeline | 94 (−13) ✓ | 118 ? | - | - | - | - | - | - | - | +| Layer_memory_1to1 | 9 (−1) ✓ | 1 ? | - | - | - | - | - | - | - | +| Layouts_mutation | 138 (−33) ✓ | 111 ? | 13,692 | 45 ? | - | - | 27 ? | - | - | | MoonLiveEffect_controls | 11 ? | - | 12,901 | 4,624 ? | - | - | - | - | - | -| MoonLiveEffect_livescript | 14 (+6) ⚠ | - | 13,433 ? | 8,255 ? | 11,336 ? | - | - | - | - | -| MoonLive_pipeline | 11 (+4) ⚠ | 1 ? | 9,604 ? | 3,278 ? | - | 11,398 ? | - | - | 4,393 ? | -| MoonModule_control_change | 131 | 262 ? | 212 ? | 166 ? | 165 ? | - | 111,731 ? | 89,895 ? | - | +| MoonLiveEffect_livescript | 9 (−5) ✓ | - | 13,433 ? | 8,255 ? | 11,336 ? | - | - | - | - | +| MoonLive_pipeline | 10 (−1) ✓ | 1 ? | 9,604 ? | 3,278 ? | - | 11,398 ? | - | - | 4,393 ? | +| MoonModule_control_change | 143 (+12) ⚠ | 262 ? | 212 ? | 166 ? | 165 ? | - | 111,731 ? | 89,895 ? | - | | MqttModule_haDiscovery_toggle | 3 ? | - | 36 ? | 36 ? | - | - | - | - | - | -| MultiplyModifier_memory_lut | 6 (+2) ⚠ | 3 ? | - | - | - | - | - | - | - | -| MultiplyModifier_pipeline | 129 (−4) ✓ | 225 ? | - | - | - | - | - | - | - | +| MultiplyModifier_memory_lut | 4 (−2) ✓ | 3 ? | - | - | - | - | - | - | - | +| MultiplyModifier_pipeline | 126 (−3) ✓ | 225 ? | - | - | - | - | - | - | - | | NetworkModule_eth_reconfigure | - | - | 1,169 ? | 97,843 ? | - | - | - | - | - | | NetworkModule_mdns_toggle | 13 ? | - | 36 ? | 36 ? | 21 ? | - | 109,767 ? | 93,963 ? | - | -| modifier_chain | 78 (+16) ⚠ | 69 ? | 13,337 | - | - | - | - | - | - | -| modifier_swap | 46 (+15) ⚠ | 41 ? | 12,250 | 354 ? | 362 ? | - | 1,010 ? | - | - | -| perf_full | 589 (+160) ⚠ | 592 ? | 10,392 | 16,915 ? | 17,433 ? | - | - | - | - | -| perf_light | 35 (+12) ⚠ | 35 ? | 2,183 | 2,485 ? | 2,038 ? | - | - | - | - | -| peripheral_grid_sweep | 586 (+208) ⚠ | 649 ? | 6,991 ? | - | 11,495 ? | 12,273 ? | - | - | - | -| peripheral_switch | 9 (+3) ⚠ | 9 ? | 437 | 46 ? | 217 ? | - | - | - | - | +| Trails_ladder | 353 | - | - | - | - | - | - | - | - | +| modifier_chain | 55 (−23) ✓ | 69 ? | 13,337 | - | - | - | - | - | - | +| modifier_swap | 33 (−13) ✓ | 41 ? | 12,250 | 354 ? | 362 ? | - | 1,010 ? | - | - | +| perf_full | 429 (−160) ✓ | 592 ? | 10,392 | 16,915 ? | 17,433 ? | - | - | - | - | +| perf_light | 27 (−8) ✓ | 35 ? | 2,183 | 2,485 ? | 2,038 ? | - | - | - | - | +| peripheral_grid_sweep | 485 (−101) ✓ | 649 ? | 6,991 ? | - | 11,495 ? | 12,273 ? | - | - | - | +| peripheral_switch | 7 (−2) ✓ | 9 ? | 437 | 46 ? | 217 ? | - | - | - | - | Microseconds. `?` marks a cell backed by fewer than 4 samples, which is a first impression rather than a percentile; several are months old and were captured during a network reconfigure, so they read as whole milliseconds. `-` means that target has never run that scenario. -**Coverage: 96/225 cells measured (42%), 30 of them with 4+ samples (13%).** The blanks are the point: a regression on a target that has never run a scenario cannot be DETECTED in it, and the target cannot be compared against the others. Filling the matrix means running the scenario suite on each bench board, which is a standing task rather than a one-off. +**Coverage: 98/243 cells measured (40%), 32 of them with 4+ samples (13%).** The blanks are the point: a regression on a target that has never run a scenario cannot be DETECTED in it, and the target cannot be compared against the others. Filling the matrix means running the scenario suite on each bench board, which is a standing task rather than a one-off. ### desktop: isolated scenarios (p50 of the sample window) | Scenario | p50 | p95 | n | |---|---:|---:|---:| -| Layer_base_pipeline | 107 µs (+32 µs) ⚠ | 211 µs | 32 | -| Layer_memory_1to1 | 10 µs (+1 µs) ⚠ | 41 µs | 32 | +| Layer_base_pipeline | 94 µs (−13 µs) ✓ | 211 µs | 32 | +| Layer_memory_1to1 | 9 µs (−1 µs) ✓ | 40 µs | 32 | These build a bare pipeline with no optional modules, so a change here is a change in the pipeline itself rather than in what was measured. A new module belongs in an advanced scenario, which keeps its own numbers. @@ -78,36 +81,36 @@ These build a bare pipeline with no optional modules, so a change here is a chan | Area | Lines | Comments | Comment share | |---|---:|---:|---:| -| core | 24,938 (+336) ⚠ | 9,940 | 43.1 % (+0.1 %) ⚠ | -| light | 31,807 (+1,382) ⚠ | 12,233 | 42.3 % (+0.2 %) ⚠ | -| platform | 17,463 | 6,117 | 38.5 % | -| ui | 10,089 (+125) ⚠ | 2,969 | 31.1 % (+0.4 %) ⚠ | -| test | 54,681 (+1,555) ⚠ | 10,179 | 21.3 % | -| moondeck | 22,488 (+74) ⚠ | 3,643 | 18.5 % (−0.1 %) ✓ | +| core | 25,332 (+394) ⚠ | 10,143 | 43.3 % (+0.2 %) ⚠ | +| light | 34,548 (+2,741) ⚠ | 13,160 | 41.9 % (−0.4 %) ✓ | +| platform | 17,770 (+307) ⚠ | 6,223 | 38.4 % (−0.1 %) ✓ | +| ui | 10,204 (+115) ⚠ | 3,014 | 31.2 % (+0.1 %) ⚠ | +| test | 56,060 (+1,379) ⚠ | 10,468 | 21.4 % (+0.1 %) ⚠ | +| moondeck | 22,512 (+24) ⚠ | 3,651 | 18.5 % | ## Tests | Kind | Count | |---|---:| -| unit cases | 1,876 (+82) ✓ | -| scenarios | 25 (+2) ✓ | +| unit cases | 1,945 (+69) ✓ | +| scenarios | 27 (+2) ✓ | ## Complexity | Metric | Value | |---|---:| -| functions | 3,290 (+76) ✓ | -| over threshold | 220 (+8) ⚠ | +| functions | 3,427 (+137) ✓ | +| over threshold | 232 (+12) ⚠ | | worst CCN | 108 | ## Documentation | Metric | Value | |---|---:| -| markdown files | 218 (+4) ⚠ | -| markdown lines | 35,121 (+1,072) ⚠ | -| plan files | 115 (+1) ⚠ | -| backlog lines | 6,338 (+818) ⚠ | -| lessons lines | 678 (+30) ⚠ | -| CLAUDE.md lines | 237 (+21) ⚠ | +| markdown files | 219 (+1) ⚠ | +| markdown lines | 36,540 (+1,419) ⚠ | +| plan files | 115 | +| backlog lines | 6,977 (+639) ⚠ | +| lessons lines | 678 | +| CLAUDE.md lines | 250 (+13) ⚠ | diff --git a/docs/performance.md b/docs/performance.md index b74958f0..831e39ee 100644 --- a/docs/performance.md +++ b/docs/performance.md @@ -395,8 +395,8 @@ Each parallel LED driver run on real hardware at a 128×128 = 16384-light grid, | **LCD_CAM i80** (MultiPinLedDriver) | ESP32-S3 N16R8 Dev | data `18,5,6,7,8,9,10,11` · WR(clock) `12` · DC `13` | Same encoder, healthy on real i80; encode scales ~6 µs/light (8×512 = 4096 → 23 ms; 8×1024 = 8192 → 50 ms) | **single-DMA init ceiling 8192–12288 lights** (8×1024 inits; 8×1536 → "LCD init failed — check pins/memory"). A data lane on WR/DC only corrupts *that* lane (it carries the bus-control waveform, not pixels), so the driver **warns and keeps running** — a board that wires all lanes but drives fewer strands can legitimately park WR/DC on an unused data pin. WR and DC on the *same* GPIO is rejected up front (the bus needs two distinct control lines). | | **RMT** | classic ESP32 (LOLIN D32 / WROOM) | `2,4,13,14,16,17,18,19` (pin 2 = a real 24-LED strand) | 8-pin RMT drives **8×256 = 2048 lights** (tick ~12.6 ms), scales to ~8192 before the tick plateaus; all lanes healthy, pin-2 strand verified lit | **silent alloc-fail:** the RMT symbol buffer sizes for the driver's `count` window, so `count=0` on a 16384-grid needs ~1.5 MB, fails on the ~90 KB heap, and `tick()` bails with **no status** (LEDs dark). Bound the driver with the start/count window; a status for this is [backlogged](backlog/backlog-light.md). | | **I2S i80** | classic ESP32 (ESP32-WROVER) | data `2,4,13,14,18,19,21,22` · WR(clock) `32` · DC `33` (pin 2 = a real strand, verified lit) | The classic ESP32 runs the **same** `MultiPinLedDriver` over the **I2S peripheral in i80 mode** (IDF routes the i80 API to I2S here, to LCD_CAM on the S3/P4 — one driver, chip-picked backend). 8-lane doubling sweep (128×128 grid, 2026-07-13): 64/pin (512) → 4877 µs, 128/pin (1024) → 8575 µs, 256/pin (2048) → 15638 µs. Scales linearly at **~7.6 µs/light** (heavier than the S3's LCD_CAM ~6 µs — the classic I2S clock path). `frameTime` reports the WS2812 wire floor (512 → 243 fps, 2048 → 67 fps). The `MultiPinLed` status reports the live count. **16 lanes work on classic too** (the I2S peripheral does the 16-bit i80 bus, 16×256 = 4096 verified), but the WROVER exposes only ~13 non-strap pins, so 8-lane is the practical set. | **Internal-RAM ceiling: 2048 lights at 8 lanes (4096 at 16).** The classic I2S backend **cannot DMA from PSRAM** (`esp_lcd_i80_alloc_draw_buffer` rejects `MALLOC_CAP_SPIRAM` — "external memory is not supported"), so its frame buffer is internal-DMA-RAM only (`maxBlock` ≈ 76 KB). Swept at 8 lanes on a 128×128 grid (2026-07-13): 64/pin (512) ✅, 128/pin (1024) ✅, **256/pin (2048) ✅ — then 512/pin (4096) and above → `i80 bus init failed — check pins / memory`**, a **clean degrade, not a crash** (uptime kept climbing through every rung). That lands exactly on the parallel-I2S acceptance floor (8×256 = 2048), so the classic chip meets its floor and no more. The opposite of the LCD_CAM row below, which reaches 16384 via PSRAM — the classic chip's DMA simply can't get there. **The render is decoupled from this ceiling:** the same sweep kept rendering the full 128×128 = 16384-light grid at every rung (`Layer` ≈ 511 ms/frame, from PSRAM) while the *output* was capped — so a big grid still renders, it just can't all reach the LEDs. At 16K lights the effect render (511 ms) dwarfs the output (24 ms), so multicore cannot help: the render is the wall on this chip. Two classic-only quirks the driver handles: the I2S i80 tx has an unconditional command phase whose busy-wait hangs to a watchdog reset unless given a real 8-bit command (`lcd_cmd_bits=8` / `kI80Cmd=0`), and the draw buffer + a done-ISR marked `IRAM_ATTR`. | -| **LCD_CAM 16-lane** | ESP32-S3 (SE 16 V1 + LightCrafter 16, n8r8) | SE16 data `47,48,21,38,14,39,13,40,12,41,11,42,10,2,3,1` · WR/DC `5`/`6`; LC16 data `47,21,14,9,8,16,15,7,1,2,42,41,40,39,38,48` · WR/DC ghost `33`/`34` | **Reaches the full 16384 lights — the 16K target — where Parlio caps at 4096.** SE16 16-lane doubling sweep (128×128 grid), **async double-buffer ON** (re-measured 2026-07-13 after Step 1.5): 512 → 1843 µs, 1024 → 3422 µs, 2048 → 6612 µs, 4096 → 15153 µs, 8192 → 26788 µs, **16384 → 49916 µs (~20 fps)** — the driver tick is now the *encode* alone, the WS2812 wire wait overlapped in background DMA (`frameTime` reports it separately: 16384 → 28786 µs). That's **~30–56 % faster than the pre-Step-1.5 blocking path** the earlier row measured (async **OFF** reproduces it within 3 %: 4096 → 22518 µs, 16384 → 77732 µs vs the old 21945 / 76979 µs — so the [lcd→i80 rename](moonmodules/light/drivers.md#led-drivers) is behavior-neutral; the speedup is Step 1.5, not the rename). The `MultiPinLed` status reports the live count (`driving N of 16384 lights`). | **No contiguous-block ceiling — the key difference from Parlio.** LCD_CAM allocates its DMA buffer via `esp_lcd_i80_alloc_draw_buffer` **from PSRAM**, so it isn't bound by the ~368 KB largest-internal-block limit that caps Parlio at 4096 lights; it drives all 16384. **16K is now ~20 fps** (up from ~13 fps pre-Step-1.5). The ENCODE is the wall here, not the wire: async hides the 28,786 µs wire behind DMA (which alone would allow ~35 fps), so the tick *is* the 49,916 µs encode → ~20 fps. Recovering the rest of the deep-per-lane wall (§ Step 3, [multicore top-down]()) — though the ~50 ms encode still runs on **core 0**, which on the LC16 **starves the W5500 SPI-Ethernet** (also core 0) → link drops, HTTP times out while the render loop keeps ticking. This is the measured contention that justifies the [multicore pipeline (Step 2)]() on classic/S3 — a core-budget limit, not a fault. | -| **Parlio 16-lane** | ESP32-P4 (testbench, n16r8) | 16 data pins `21,20,22,23,24,25,26,27,32,33,39,40,41,42,43,44` | 16-lane doubling sweep (`ledsPerPin` 32→256/pin on a 128×128 grid, 2026-07-12; reproduced within 0.3% on a second P4). Tick scales **linearly** with lights: 512 → 1653 µs, 1024 → 2925 µs, 2048 → 5514 µs, **4096 → 10760 µs** at 256/pin. **Async double-buffer shipped (Step 1.5, 2026-07-13):** with `doubleBuffer` ON, the ~7.5 ms WS2812 wire wait moves into background DMA, so the *driver* tick at 256/pin drops **10,820 → 3,790 µs** and the whole board rises **48 → 76 fps** (system tick 20.6 → 13.0 ms). The **`frameTime`** KPI reports the measured wire floor directly: live **7474 µs (133 fps max)** here (the true, measured output ceiling). With the wire hidden, the tick is now **effect render (~7.3 ms) + driver (~3.8 ms) serial**, so the effect is the next bottleneck, which the [multicore pipeline (Step 2)]() overlaps toward the 133 fps `frameTime` ceiling. (`doubleBuffer` OFF reproduces the pre-Step-1.5 10,820 µs / 92 driver-fps exactly: the synchronous path, kept as the opt-out. ON is simply the better configuration; the switch exists to A/B it. Its one-frame latency saving is below the perceptual A/V-sync threshold, so there is no user class (audio-reactive included) that should run it OFF for latency.) The `ParlioLed` status reports the live count (`driving N of 16384 lights`). | **Single-DMA ceiling ≈ 4096 lights (256/pin).** 512/pin (8192) → `Parlio init failed, check pins / memory`. The P4 has 33 MB free heap but the largest *contiguous* internal block is ~368 KB, and the 16-bit single-shot DMA buffer needs one contiguous block, so it's a **contiguous-block limit, not total memory** (it bites well before the 65535-byte/lane byte cap). Reaching the full 16384 (1024/pin) needs the [Parlio chunked-transfer](backlog/backlog-light.md) work (frame split across DMA bursts), deferred indefinitely since >~65K lights on one chip is a network-distribution problem. | +| **LCD_CAM 16-lane** | ESP32-S3 (SE 16 V1 + LightCrafter 16, n8r8) | SE16 data `47,48,21,38,14,39,13,40,12,41,11,42,10,2,3,1` · WR/DC `5`/`6`; LC16 data `47,21,14,9,8,16,15,7,1,2,42,41,40,39,38,48` · WR/DC ghost `33`/`34` | **Reaches the full 16384 lights (the 16K target) where Parlio caps at 4096.** SE16 16-lane doubling sweep (128×128 grid), **async double-buffer ON** (re-measured 2026-07-13 after Step 1.5): 512 → 1843 µs, 1024 → 3422 µs, 2048 → 6612 µs, 4096 → 15153 µs, 8192 → 26788 µs, **16384 → 49916 µs (~20 fps)**: the driver tick is now the *encode* alone, the WS2812 wire wait overlapped in background DMA (`frameTime` reports it separately: 16384 → 28786 µs). That's **~30–56 % faster than the pre-Step-1.5 blocking path** the earlier row measured (async **OFF** reproduces it within 3 %: 4096 → 22518 µs, 16384 → 77732 µs vs the old 21945 / 76979 µs, so the [lcd→i80 rename](moonmodules/light/drivers.md#led-drivers) is behavior-neutral; the speedup is Step 1.5, not the rename). The `MultiPinLed` status reports the live count (`driving N of 16384 lights`). | **No contiguous-block ceiling, the key difference from Parlio.** LCD_CAM allocates its DMA buffer via `esp_lcd_i80_alloc_draw_buffer` **from PSRAM**, so it isn't bound by the ~368 KB largest-internal-block limit that caps Parlio at 4096 lights; it drives all 16384. **16K is now ~20 fps** (up from ~13 fps pre-Step-1.5). The ENCODE is the wall here, not the wire: async hides the 28,786 µs wire behind DMA (which alone would allow ~35 fps), so the tick *is* the 49,916 µs encode → ~20 fps. Recovering the rest of the deep-per-lane wall (§ Step 3, [multicore top-down](#multicore-the-whole-output-stage-on-core-1-multicore-step-2)), though the ~50 ms encode still runs on **core 0**, which on the LC16 **starves the W5500 SPI-Ethernet** (also core 0) → link drops, HTTP times out while the render loop keeps ticking. This is the measured contention that justifies the [multicore pipeline (Step 2)](#multicore-the-whole-output-stage-on-core-1-multicore-step-2) on classic/S3, a core-budget limit, not a fault. | +| **Parlio 16-lane** | ESP32-P4 (testbench, n16r8) | 16 data pins `21,20,22,23,24,25,26,27,32,33,39,40,41,42,43,44` | 16-lane doubling sweep (`ledsPerPin` 32→256/pin on a 128×128 grid, 2026-07-12; reproduced within 0.3% on a second P4). Tick scales **linearly** with lights: 512 → 1653 µs, 1024 → 2925 µs, 2048 → 5514 µs, **4096 → 10760 µs** at 256/pin. **Async double-buffer shipped (Step 1.5, 2026-07-13):** with `doubleBuffer` ON, the ~7.5 ms WS2812 wire wait moves into background DMA, so the *driver* tick at 256/pin drops **10,820 → 3,790 µs** and the whole board rises **48 → 76 fps** (system tick 20.6 → 13.0 ms). The **`frameTime`** KPI reports the measured wire floor directly: live **7474 µs (133 fps max)** here (the true, measured output ceiling). With the wire hidden, the tick is now **effect render (~7.3 ms) + driver (~3.8 ms) serial**, so the effect is the next bottleneck, which the [multicore pipeline (Step 2)](#multicore-the-whole-output-stage-on-core-1-multicore-step-2) overlaps toward the 133 fps `frameTime` ceiling. (`doubleBuffer` OFF reproduces the pre-Step-1.5 10,820 µs / 92 driver-fps exactly: the synchronous path, kept as the opt-out. ON is simply the better configuration; the switch exists to A/B it. Its one-frame latency saving is below the perceptual A/V-sync threshold, so there is no user class (audio-reactive included) that should run it OFF for latency.) The `ParlioLed` status reports the live count (`driving N of 16384 lights`). | **Single-DMA ceiling ≈ 4096 lights (256/pin).** 512/pin (8192) → `Parlio init failed, check pins / memory`. The P4 has 33 MB free heap but the largest *contiguous* internal block is ~368 KB, and the 16-bit single-shot DMA buffer needs one contiguous block, so it's a **contiguous-block limit, not total memory** (it bites well before the 65535-byte/lane byte cap). Reaching the full 16384 (1024/pin) needs the [Parlio chunked-transfer](backlog/backlog-light.md) work (frame split across DMA bursts), deferred indefinitely since >~65K lights on one chip is a network-distribution problem. | **LOLIN D32 (classic ESP32-WROOM) usable LED GPIOs:** `4,13,14,18,19,21,22,23,25,26,27,32,33` plus `16,17` (free on WROOM — they're the PSRAM bus only on WROVER). Avoid straps `0,2,12,15`, the onboard LED on `5`, and battery-sense on `35`; input-only `34–39` can't drive an LED. (Chip-level set: [gpio-usage.md](reference/gpio-usage.md).) diff --git a/docs/tutorials/generative-effects.md b/docs/tutorials/generative-effects.md index 34bb6ad4..a7f3006c 100644 --- a/docs/tutorials/generative-effects.md +++ b/docs/tutorials/generative-effects.md @@ -371,7 +371,7 @@ measure on the smallest device it claims to support. ### Two failed attempts means stop The rule the project already carries applies hardest here, because a picture always -suggests one more plausible tweak. Two attempts that do not fix it means the diagnosis is +suggests one more plausible tweak. Two attempts that do not fix it mean the diagnosis is wrong, not the parameters. On this page a second "fix" made an effect visibly worse than the bug it targeted. diff --git a/esp32/main/CMakeLists.txt b/esp32/main/CMakeLists.txt index d4200a18..621865c2 100644 --- a/esp32/main/CMakeLists.txt +++ b/esp32/main/CMakeLists.txt @@ -23,6 +23,7 @@ idf_component_register( "../../src/platform/esp32/platform_esp32_ota.cpp" "../../src/platform/esp32/platform_esp32_improv.cpp" "../../src/platform/esp32/platform_esp32_rmt.cpp" + "../../src/platform/esp32/rmt_hi_vector.S" "../../src/platform/esp32/platform_esp32_tasks.cpp" "../../src/platform/esp32/platform_esp32_worker.cpp" "../../src/platform/esp32/platform_esp32_gpio.cpp" @@ -55,6 +56,12 @@ if(CONFIG_IDF_TARGET_ARCH_XTENSA) target_compile_options(${COMPONENT_LIB} PRIVATE -mauto-litpools) endif() +# Classic ESP32 only: the level-5 RMT refill vector (rmt_hi_vector.S) overrides a WEAK default, so +# nothing references its object and the linker would drop it. -u forces the symbol in. +if(CONFIG_IDF_TARGET_ESP32) + target_link_libraries(${COMPONENT_LIB} INTERFACE "-u ld_include_rmt_hi_vector") +endif() + # Firmware-variant defines, set by moondeck/build/build_esp32.py via firmware_cmake_args(). # See docs/architecture.md § Firmware vs board — "firmware" is the compiled # binary variant; the physical "board" is a separate concept the device diff --git a/moonbase/main/moonbase_main.cpp b/moonbase/main/moonbase_main.cpp index d778b253..2e8f5f5f 100644 --- a/moonbase/main/moonbase_main.cpp +++ b/moonbase/main/moonbase_main.cpp @@ -394,7 +394,7 @@ const char kPage[] = // size and matches how the application's own upload route works. "async function up(){const f=document.getElementById('f').files[0];if(!f)return;" "S('installing '+(f.size/1024|0)+' KB...');" - "const r=await fetch('/install',{method:'POST',body:f});" + "const r=await fetch('/api/firmware/upload',{method:'POST',body:f});" "S(await r.text());}" // The install runs on its own task (202); W() watches its status until the app answers // (404 on /moonbase means the new firmware is up, at this same address). @@ -403,14 +403,14 @@ const char kPage[] = "setTimeout(()=>location.reload(),3000);}else{S(await p.text());}}" "catch(_){S('restarting...');}},2000);}" "async function url(){const u=document.getElementById('u').value;if(!u)return;" - "const r=await fetch('/install-url',{method:'POST',body:u});S(await r.text());if(r.ok)W();}" + "const r=await fetch('/api/firmware/url',{method:'POST',body:u});S(await r.text());if(r.ok)W();}" // Prefill the URL field with the last install source (RAM-held), so Install doubles as // retry: the escape after a cancel or failure wiped the app slot. - "fetch('/last-url').then(r=>r.text()).then(u=>{if(u)document.getElementById('u').value=u;})" + "fetch('/api/firmware/last-url').then(r=>r.text()).then(u=>{if(u)document.getElementById('u').value=u;})" ".catch(()=>{});" - "async function ba(){const r=await fetch('/boot-app',{method:'POST'});S(await r.text());" + "async function ba(){const r=await fetch('/api/firmware/boot-app',{method:'POST'});S(await r.text());" "if(r.ok)setTimeout(()=>location.reload(),8000);}" - "async function cx(){S(await (await fetch('/cancel',{method:'POST'})).text());}" + "async function cx(){S(await (await fetch('/api/firmware/cancel',{method:'POST'})).text());}" ""; // The application slot. From the factory partition esp_ota_get_next_update_partition returns the @@ -656,9 +656,9 @@ void serveOne(int sock) { } bool installed = false; - if (std::strncmp(head, "POST /install-url", 17) == 0 && installing_) { + if (std::strncmp(head, "POST /api/firmware/url", 22) == 0 && installing_) { sendResponse(sock, "409 Conflict", "text/plain", "error: an install is already running"); - } else if (std::strncmp(head, "POST /install-url", 17) == 0) { + } else if (std::strncmp(head, "POST /api/firmware/url", 22) == 0) { // The body is the URL itself; small enough to finish reading into the same buffer. while (prefixLen < contentLen && headLen + prefixLen < sizeof(head) - 1) { const int n = ::recv(sock, head + headLen + prefixLen, @@ -688,7 +688,7 @@ void serveOne(int sock) { sendResponse(sock, "202 Accepted", "text/plain", status_); } } - } else if (std::strncmp(head, "POST /install", 13) == 0) { + } else if (std::strncmp(head, "POST /api/firmware/upload", 25) == 0) { if (installing_) { sendResponse(sock, "409 Conflict", "text/plain", "error: an install is already running"); } else { @@ -697,10 +697,10 @@ void serveOne(int sock) { installing_ = false; sendResponse(sock, installed ? "200 OK" : "500 Internal Server Error", "text/plain", status_); } - } else if (std::strncmp(head, "POST /boot-app", 14) == 0 && installing_) { + } else if (std::strncmp(head, "POST /api/firmware/boot-app", 27) == 0 && installing_) { // Booting away mid-write would abandon a half-written slot; refuse, visibly. sendResponse(sock, "409 Conflict", "text/plain", "error: an install is already running"); - } else if (std::strncmp(head, "POST /boot-app", 14) == 0) { + } else if (std::strncmp(head, "POST /api/firmware/boot-app", 27) == 0) { // Switch back to the installed application without installing anything. // esp_ota_set_boot_partition validates the image first, so a half-written app is // refused and the device stays here: only a bootable app can be booted. @@ -712,12 +712,12 @@ void serveOne(int sock) { installed = ok; // reuse the reply-then-restart tail below } else if (std::strncmp(head, "GET /logo.png", 13) == 0) { sendBinary(sock, "image/png", logoStart, static_cast(logoEnd - logoStart)); - } else if (std::strncmp(head, "GET /last-url", 13) == 0) { + } else if (std::strncmp(head, "GET /api/firmware/last-url", 26) == 0) { // The most recent install source, RAM-held: the page prefills its URL field with it, // so Install doubles as retry, the escape after a cancel wiped the app slot. Empty // after a power cycle. sendResponse(sock, "200 OK", "text/plain", stagedUrlTask_); - } else if (std::strncmp(head, "POST /cancel", 12) == 0) { + } else if (std::strncmp(head, "POST /api/firmware/cancel", 25) == 0) { // Cancel a running URL install: its loop polls the flag and aborts back to this page. // (An upload cancels by dropping the connection; this server is busy receiving it.) // Nothing to cancel is not an error worth a scary status, just say so. diff --git a/src/core/AudioService.h b/src/core/AudioService.h index 7a52b2d6..bc00a846 100644 --- a/src/core/AudioService.h +++ b/src/core/AudioService.h @@ -263,8 +263,12 @@ class AudioService : public MoonModule { controls_.addSelect("levels", levels, kLevelsOptions, 2); controls_.setHidden(controls_.count() - 1, !localMode); const bool manual = levels == 0; - controls_.addControl("floor", floor, 0, 255); controls_.setHidden(controls_.count() - 1, !localMode || !manual); - controls_.addControl("gain", gain, 1, 255); controls_.setHidden(controls_.count() - 1, !localMode || !manual); + // Shown in BOTH modes, because they are not only the manual band mapping: computeLevel + // reads them for `level` and `levelSmoothed` (the volume every VU-style effect follows) + // whatever `levels` says. Hiding them in automatic left a user unable to reach values + // that were still shaping the picture. + controls_.addControl("floor", floor, 0, 255); controls_.setHidden(controls_.count() - 1, !localMode); + controls_.addControl("gain", gain, 1, 255); controls_.setHidden(controls_.count() - 1, !localMode); // Automatic: how hard it levels the bands, and the one guard that keeps it honest. controls_.addControl("strength", ratio, 1, 20); controls_.setHidden(controls_.count() - 1, !localMode || manual); controls_.addControl("maxBoost", maxGain, 0, 40); controls_.setHidden(controls_.count() - 1, !localMode || manual); diff --git a/src/light/drivers/RmtLedDriver.h b/src/light/drivers/RmtLedDriver.h index a891b25c..2659ba30 100644 --- a/src/light/drivers/RmtLedDriver.h +++ b/src/light/drivers/RmtLedDriver.h @@ -173,6 +173,10 @@ class RmtLedDriver : public DriverBase { return std::strcmp(name, "pins") == 0 || std::strcmp(name, "ledsPerPin") == 0 || std::strcmp(name, "timing") == 0 || std::strcmp(name, "t0hNs") == 0 || std::strcmp(name, "t1hNs") == 0 || std::strcmp(name, "periodNs") == 0 + // Not because it rebuilds anything: defineControls decides whether the loopback pins + // are shown, and only a prepare sweep re-runs it. Without this the checkbox toggles a + // mode whose three controls never appear, so the test cannot be aimed from the UI. + || std::strcmp(name, "loopbackTest") == 0 || isWindowControl(name); } @@ -284,6 +288,18 @@ class RmtLedDriver : public DriverBase { // Encode within this driver's window only. winLen_ is the slice length; // txLightCount_ (Σ pinCounts_) is what the pins clock out — n is the min, // so a window smaller than the configured pin total never reads past it. + // A frame still on the wire OWNS symbols_: the RMT copy encoder streams straight out of it, + // so re-encoding now rewrites bytes the peripheral is mid-way through clocking. That is not + // a dropped frame, it is a corrupted one, and it shows as a handful of lights in a color + // the effect never drew. Only a timed-out wait leaves this set, so the normal path never + // sees it; when it happens, skipping the tick lets the transfer finish and the next tick + // encodes cleanly. Bench: this is what remained after the memory-block and interrupt + // priority work, and it is independent of light count, which is what ruled those out. + if (txInFlight_) { + txInFlight_ = !waitForPins(); // still busy: leave symbols_ alone for another tick + if (txInFlight_) return; + } + const nrOfLightsType n = txLightCount_ < winLen_ ? txLightCount_ : winLen_; const uint8_t outCh = correction_.outChannels; // Same defensive guard ArtNet uses: skip rather than overrun if the @@ -331,10 +347,22 @@ class RmtLedDriver : public DriverBase { started[i] = platform::rmtWs2812Transmit(rmt_[i], symbols_ + pinOffsets_[i], static_cast(pinLights) * wordsPerLight); } + for (uint8_t i = 0; i < pinCount_; i++) started_[i] = started[i]; + txInFlight_ = !waitForPins(); + if (cfg_.reset_us) platform::delayUs(cfg_.reset_us); + } + + /// Wait on every pin that actually started, and report whether they all finished. A pin whose + /// transmit never started is not waited on: with no done-callback coming, that would spend the + /// full timeout and let one bad pin stall the tick. + bool waitForPins() MM_NONBLOCKING { + bool allDone = true; for (uint8_t i = 0; i < pinCount_; i++) { - if (started[i]) platform::rmtWs2812Wait(rmt_[i], 1000 /* ms */); + if (!started_[i]) continue; + if (platform::rmtWs2812Wait(rmt_[i], 1000 /* ms */)) started_[i] = false; + else allDone = false; } - if (cfg_.reset_us) platform::delayUs(cfg_.reset_us); + return allDone; } /// Test-only accessors. symbolBuffer/symbolCapacity mirror ArtNet's @@ -376,6 +404,8 @@ class RmtLedDriver : public DriverBase { nrOfLightsType winLen_ = 0; // window length (lights), clamped to the buffer uint8_t pinCount_ = 0; // 0 = idle (parse error / no pins) bool inited_ = false; // all-or-nothing across the pins + bool started_[kMaxPins] = {}; // which pins have a transmit still to be waited on + bool txInFlight_ = false; // a frame is still clocking out of symbols_ uint32_t* symbols_ = nullptr; // owned; one word per WS2812 data bit size_t symbolCap_ = 0; // words allocated // Per-light scratch for correction_.apply(): `outChannels` bytes, one light at a time. Heap, sized @@ -513,7 +543,17 @@ class RmtLedDriver : public DriverBase { const size_t need = symbolsFor(n, ch); if (symbols_ && symbolCap_ >= need) return; freeSymbols(); - symbols_ = static_cast(platform::alloc(need * sizeof(uint32_t))); + // INTERNAL RAM, deliberately, on a chip that would otherwise put this in PSRAM. The RMT copy + // encoder runs inside the refill interrupt and reads these symbols straight into the + // peripheral's memory, so on a DMA-less classic ESP32 every refill is a read of this buffer + // under a 40-160 us deadline. From PSRAM that read goes through the 32 KB cache that WiFi + // and the render loop also churn, and one miss is a stall of microseconds: a late refill, + // a few wrong lights, at any light count and on any core. Bench: QuinLED Dig-Next-2 + // (PICO-V3-02, 2 MB PSRAM), 2026-09-05. The buffer is small (24 bytes x 4 per light: 24 KB + // at 256 lights) so internal RAM affords it; a board that cannot falls back to the general + // heap rather than to no output at all. + symbols_ = static_cast(platform::allocInternal(need * sizeof(uint32_t))); + if (!symbols_) symbols_ = static_cast(platform::alloc(need * sizeof(uint32_t))); symbolCap_ = symbols_ ? need : 0; publishHeapBytes(); // the symbol buffer grew — refresh the memory readout } diff --git a/src/light/effects/ColorTrailsEffect.h b/src/light/effects/ColorTrailsEffect.h index f685d868..fdf0f796 100644 --- a/src/light/effects/ColorTrailsEffect.h +++ b/src/light/effects/ColorTrailsEffect.h @@ -95,7 +95,7 @@ class ColorTrailsEffect : public EffectBase { .phaseOffset = 0, .wave = Wave::Saw}); bank_.set(1, {.rate = static_cast((speed * 3u) / 22u), .low = 0, .high = 65535, .phaseOffset = 16384, .wave = Wave::Saw}); - // advance() takes an ABSOLUTE timestamp and computes its own delta (math16.h BeatPhase): + // advanceTo() takes an ABSOLUTE timestamp and computes its own delta (math16.h BeatPhase): // passing this frame's dt instead makes every delta a few milliseconds of a clock that // never advances, so the emitters sit still while the picture flickers between them. bank_.advanceTo(now); @@ -187,8 +187,13 @@ class ColorTrailsEffect : public EffectBase { // on itself the way a circle does, so the line it lays down keeps finding new ground. const angle16 a = static_cast(bank_.phase(1)); const angle16 b = static_cast(bank_.phase(1) * 3u / 2u); - const lengthType cx = static_cast(w / 2 + (static_cast(sin16(a)) * (w / 2 - 1)) / 32768); - const lengthType cy = static_cast(h / 2 + (static_cast(cos16(b)) * (h / 2 - 1)) / 32768); + // `size` scales the figure's reach, the same control the orbit radius reads, so the + // two emitters grow and shrink together instead of the Lissajous always spanning the + // whole panel. + const int32_t reachX = ((w / 2 - 1) * static_cast(size)) / 255; + const int32_t reachY = ((h / 2 - 1) * static_cast(size)) / 255; + const lengthType cx = static_cast(w / 2 + (static_cast(sin16(a)) * reachX) / 32768); + const lengthType cy = static_cast(h / 2 + (static_cast(cos16(b)) * reachY) / 32768); splat(p, w, h, d, cx, cy, dot, static_cast(hue + 128)); } if (m == Mode::All || m == Mode::Border) { diff --git a/src/light/effects/FluidEffect.h b/src/light/effects/FluidEffect.h index 0fe74f95..8a8ea826 100644 --- a/src/light/effects/FluidEffect.h +++ b/src/light/effects/FluidEffect.h @@ -114,7 +114,7 @@ class FluidEffect : public EffectBase { {.rate = static_cast(rate / 4 + 1), .low = 0, .high = 65535, .phaseOffset = static_cast(i * 30000), .wave = Wave::Sine}); } - // advance() takes an ABSOLUTE timestamp and computes its own delta (math16.h BeatPhase), + // advanceTo() takes an ABSOLUTE timestamp and computes its own delta (math16.h BeatPhase), // so passing this frame's dt feeds it the CHANGE in frame time: a few percent of the right // motion on a jittery device, and none at all where the frame time is steady. bank_.advanceTo(now); diff --git a/src/light/effects/NebulaEffect.h b/src/light/effects/NebulaEffect.h index 523a28ca..92b13ee0 100644 --- a/src/light/effects/NebulaEffect.h +++ b/src/light/effects/NebulaEffect.h @@ -112,7 +112,7 @@ class NebulaEffect : public EffectBase { bank_.set(0, {.rate = static_cast(4 + speed / 6), .low = 0, .high = 65535, .phaseOffset = 0, .wave = Wave::Saw}); - // advance() takes an ABSOLUTE timestamp and computes its own delta (math16.h BeatPhase), + // advanceTo() takes an ABSOLUTE timestamp and computes its own delta (math16.h BeatPhase), // so passing this frame's dt feeds it the CHANGE in frame time: a few percent of the right // motion on a jittery device, and none at all where the frame time is steady. bank_.advanceTo(now); diff --git a/src/light/effects/TrailsEffect.h b/src/light/effects/TrailsEffect.h index eeae7dd5..5abbdeac 100644 --- a/src/light/effects/TrailsEffect.h +++ b/src/light/effects/TrailsEffect.h @@ -101,7 +101,7 @@ class TrailsEffect : public EffectBase { bank_.set(1, {.rate = 7, .low = static_cast(256 - breathe), .high = static_cast(256 + breathe), .phaseOffset = 0, .wave = Wave::Sine}); - // advance() takes an ABSOLUTE timestamp and computes its own delta (math16.h BeatPhase), + // advanceTo() takes an ABSOLUTE timestamp and computes its own delta (math16.h BeatPhase), // so passing this frame's dt feeds it the CHANGE in frame time: a few percent of the right // motion on a jittery device, and none at all where the frame time is steady. bank_.advanceTo(now); diff --git a/src/light/effects/VuMetersEffect.h b/src/light/effects/VuMetersEffect.h index 2d780119..4ba45dd7 100644 --- a/src/light/effects/VuMetersEffect.h +++ b/src/light/effects/VuMetersEffect.h @@ -75,7 +75,10 @@ class VuMetersEffect : public EffectBase { // Peak-hold: takes a new maximum at once, falls back slowly. // Peak-hold falls by a half-life, so "how long it stays up" is stated in seconds and // holds at any framerate, the same rule the trail effects decay by. - const uint16_t keep = halfLifeKeep(step, 200u + static_cast(peakHold) * 12u); + // The real elapsed time, not `step`: the cap exists to stop a stall throwing the + // spring, but a half-life is stated in seconds and must count every millisecond that + // passed, or the peak hangs longer than asked for after any hitch. + const uint16_t keep = halfLifeKeep(dt, 200u + static_cast(peakHold) * 12u); peak_[b] = reading > peak_[b] ? reading : static_cast((static_cast(peak_[b]) * keep) >> 16); diff --git a/src/platform/desktop/platform_desktop.cpp b/src/platform/desktop/platform_desktop.cpp index 729fbaef..ccf7e2ad 100644 --- a/src/platform/desktop/platform_desktop.cpp +++ b/src/platform/desktop/platform_desktop.cpp @@ -1930,7 +1930,7 @@ bool rmtWs2812Transmit(RmtWs2812Handle& h, const uint32_t* symbols, if (!h.impl || !symbols || symbolCount == 0) return false; return true; } -void rmtWs2812Wait(RmtWs2812Handle& /*h*/, uint32_t /*timeoutMs*/) {} +bool rmtWs2812Wait(RmtWs2812Handle& /*h*/, uint32_t /*timeoutMs*/) { return true; } void rmtWs2812Deinit(RmtWs2812Handle& h) { delete static_cast(h.impl); h.impl = nullptr; diff --git a/src/platform/esp32/platform_esp32_rmt.cpp b/src/platform/esp32/platform_esp32_rmt.cpp index c5d3923a..bb415a8a 100644 --- a/src/platform/esp32/platform_esp32_rmt.cpp +++ b/src/platform/esp32/platform_esp32_rmt.cpp @@ -26,12 +26,130 @@ #include "esp_heap_caps.h" // capture buffer alloc for the shared frame loopback #include "esp_timer.h" // timed first transmit #include "esp_log.h" +#include "esp_cpu.h" +#if CONFIG_IDF_TARGET_ESP32 +// The level-5 refill path (rmt_hi_vector.S): the classic ESP32 has no RMT DMA, so the refill +// interrupt is the whole timing story. These are the pieces that path drives directly. +#include "esp_rom_sys.h" // esp_rom_route_intr_matrix +#include "esp_memory_utils.h" // esp_ptr_internal: the ISR may only read internal RAM +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" // vTaskDelay in the polled wait +#include "hal/rmt_ll.h" +#include "soc/rmt_struct.h" // RMT +#include "soc/gpio_struct.h" // GPIO.func_out_sel_cfg: which channel a pin got +#include "soc/gpio_sig_map.h" // RMT_SIG_OUT0_IDX +#include "soc/interrupts.h" // ETS_RMT_INTR_SOURCE +#include "soc/dport_reg.h" // the interrupt matrix map registers, read back after routing +#endif #include #include #include // the transmit callback the shared frame loopback takes #include // std::nothrow +#if CONFIG_IDF_TARGET_ESP32 +// --------------------------------------------------------------------------------------------- +// Level-5 refill. The IDF driver keeps everything about the channel (GPIO, clock, memory blocks, +// power) and is bypassed for the transmit itself: its interrupt runs at level 1-3, which every +// critical section masks, and that is what let a refill arrive late (see rmt_hi_vector.S). The +// RMT interrupt source on core 1 is rerouted to vector 26 (level 5, refused by esp_intr_alloc as +// "special", so routed by hand), and this code plays each frame ping-pong out of the channel's +// memory, one half-block per threshold interrupt, straight from the driver's symbol buffer. +// +// At file scope, outside every namespace: the assembly bridge calls rmtHiIsr by its C name, and +// RMTMEM is the linker's symbol, so both need external C linkage, which an anonymous namespace +// would silently take away. +// +// Everything the ISR touches lives in internal RAM: the channel state (DRAM), the symbol buffer +// (the driver allocates it internal-first and the transmit refuses anything else), RMT registers +// and RMTMEM (peripheral). So it also runs through a flash-cache-off window, which a flash write +// opens on both cores. +// --------------------------------------------------------------------------------------------- +struct RmtHiChannel { + const uint32_t* cur = nullptr; // next symbol to copy in + const uint32_t* end = nullptr; // one past the last + uint16_t half = 0; // symbols per half-block (the threshold) + uint16_t offset = 0; // where the next half goes: 0 or `half` + volatile bool busy = false; // a frame is on the wire +}; +static RmtHiChannel s_hi[RMT_LL_CHANS_PER_INST]; + +// RMTMEM is a linker-provided address; the IDF types it in a private header, so the same layout +// is declared here: 8 channels of 64 words, contiguous, which is what lets a channel that owns +// several blocks be addressed as one run past its own 64. +struct RmtHiMem { struct { volatile uint32_t data32[SOC_RMT_MEM_WORDS_PER_CHANNEL]; } chan[RMT_LL_CHANS_PER_INST]; }; +extern "C" RmtHiMem RMTMEM; +extern "C" void ld_include_rmt_hi_vector(); // forces the .S object to link (the vector symbol is weak elsewhere) + +// Copy the next half-block for `ch`. Runs at level 5: no RTOS, no logging, no cache-dependent +// memory. A frame shorter than the remaining half ends with a zero symbol, which the peripheral +// treats as end-of-transmission and raises TX_DONE on. +static void IRAM_ATTR rmtHiFill(uint8_t ch) { + RmtHiChannel& c = s_hi[ch]; + volatile uint32_t* dst = &RMTMEM.chan[ch].data32[c.offset]; + uint32_t n = c.half; + while (n && c.cur != c.end) { *dst++ = *c.cur++; n--; } + if (n) *dst = 0; // end marker inside this half + c.offset = static_cast(c.offset ? 0 : c.half); +} + +// The C half of the level-5 handler. Called from rmt_hi_vector.S with the register file saved +// and a private stack; must return promptly and must clear what it handles, the interrupt is +// level-triggered. +extern "C" void IRAM_ATTR rmtHiIsr(void*) { + const uint32_t st = RMT.int_st.val; + for (uint8_t ch = 0; ch < RMT_LL_CHANS_PER_INST; ch++) { + const uint32_t thres = RMT_LL_EVENT_TX_THRES(ch), done = RMT_LL_EVENT_TX_DONE(ch); + if (st & thres) { + rmt_ll_clear_interrupt_status(&RMT, thres); + if (s_hi[ch].busy) rmtHiFill(ch); + } + if (st & done) { + rmt_ll_clear_interrupt_status(&RMT, done); + s_hi[ch].busy = false; + rmt_ll_enable_interrupt(&RMT, thres | done, false); + } + } +} + +// Which peripheral channel the IDF handed this GPIO: the matrix records the output signal, and +// the RMT signals are consecutive from RMT_SIG_OUT0_IDX. The driver keeps the id private. +static uint8_t rmtHiChannelOf(uint8_t gpio) { + const uint32_t sig = GPIO.func_out_sel_cfg[gpio].func_sel; + return (sig >= RMT_SIG_OUT0_IDX && sig < RMT_SIG_OUT0_IDX + RMT_LL_CHANS_PER_INST) + ? static_cast(sig - RMT_SIG_OUT0_IDX) : 0xFF; +} + +// Route the RMT interrupt source on THIS core to vector 26 and enable it. Runs on core 1 (inside +// the init hop) because INTENABLE is per core. After this the IDF driver's own level-1 handler +// on this core never fires again, which is intended: nothing here calls rmt_transmit any more, +// so nothing waits on it. +// +// Called after EVERY channel creation, not once: rmt_new_tx_channel routes the source back to the +// driver's own vector each time (intr_alloc.c), and a config change re-creates the channel. A +// once-only guard here let the second init hand the threshold events to the driver's handler, +// which has no transaction and dereferences null: a boot loop ~10 s in, when the network coming +// up triggered the second prepare sweep. Bench-found on the second Dig-Next-2. +static void rmtHiRouteOnThisCore() { +#if defined(CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_5) || defined(CONFIG_BTDM_CTRL_HLI) +#error "level 5 is taken on this config (system check or Bluetooth HLI); the RMT refill needs it free" +#endif + (void)&ld_include_rmt_hi_vector; + constexpr uint32_t kVector = 26; // level 5, "special" in the descriptor table, free here + esp_rom_route_intr_matrix(esp_cpu_get_core_id(), ETS_RMT_INTR_SOURCE, kVector); + esp_cpu_intr_enable(1u << kVector); + // Read the routing back: the matrix map for this core's RMT source, and this core's + // INTENABLE. The IDF's esp_intr_enable re-programs the map (intr_alloc.c), so a later call on + // the driver's own handle would silently undo this; the readback is what proves it held. + const uint32_t mapReg = esp_cpu_get_core_id() == 0 + ? DPORT_PRO_RMT_INTR_MAP_REG : DPORT_APP_RMT_INTR_MAP_REG; + ESP_LOGI("rmt", "level-5 refill: RMT source routed to vector %lu on core %d; map reads %lu, INTENABLE 0x%08lx", + static_cast(kVector), static_cast(esp_cpu_get_core_id()), + static_cast(DPORT_REG_READ(mapReg)), + static_cast(esp_cpu_intr_get_enabled_mask())); +} +#endif // CONFIG_IDF_TARGET_ESP32 + namespace mm::platform { namespace { @@ -43,45 +161,106 @@ struct RmtTxState { rmt_channel_handle_t channel = nullptr; rmt_encoder_handle_t encoder = nullptr; uint32_t resolutionHz = 0; +#if CONFIG_IDF_TARGET_ESP32 + uint8_t channelId = 0xFF; // the peripheral channel the IDF gave us, read back from the GPIO matrix + uint16_t blockSymbols = 0; // symbols the channel's memory holds (64 per block) +#endif }; + } // namespace -bool rmtWs2812Init(RmtWs2812Handle& h, uint8_t gpio, uint32_t resolutionHz, bool invert) { - auto* st = new (std::nothrow) RmtTxState(); - if (!st) return false; +// The channel is created on CORE 1, and that is the whole point of the detour below. +// +// An RMT TX channel's refill interrupt is bound to whichever core calls rmt_new_tx_channel +// (esp_intr_alloc pins to the calling core; esp_intr_alloc_info_t has no core field). Init is +// reached from the prepare sweep on the main task, and CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0 puts +// that on core 0, where the WiFi task is also pinned. So the driver TICKED on core 1 while its +// interrupt lived with WiFi on core 0, and every WiFi burst that ran above the RMT's level-3 +// ceiling delayed a refill past the 64-symbol deadline: a DMA-less chip keeps clocking the +// stale block and the strip shows a few wrong lights, at any light count, at any TX power. +// Bench (QuinLED Dig-Next-2, 256 WS2812): more memory blocks softened it, priority 3 did +// nothing (WiFi's ISR is above 3 on the same core), halving the lights changed nothing. +// Espressif's RMT maintainer names this exact fix on esp-idf#5173: create the channel on the +// core WiFi is not on. Core 1 here carries only the encode task, so the refill runs undisturbed. +// +// A pinned one-shot task, not esp_ipc_call_blocking: the IPC task has a 1 KB stack and channel +// creation allocates and installs an interrupt. Deinit needs no counterpart: esp_intr_free hops +// to the allocating core itself (intr_alloc.c, via IPC). Chips with RMT DMA gain nothing from +// the hop but lose nothing either, so it is unconditional. +namespace { +struct RmtInitJob { + RmtTxState* st; + uint8_t gpio; + uint32_t resolutionHz; + bool invert; + bool ok; +}; +void rmtInitOnThisCore(void* arg) { + auto* job = static_cast(arg); + RmtTxState* st = job->st; rmt_tx_channel_config_t txCfg = {}; - txCfg.gpio_num = static_cast(gpio); + txCfg.gpio_num = static_cast(job->gpio); txCfg.clk_src = RMT_CLK_SRC_DEFAULT; - txCfg.resolution_hz = resolutionHz; - // Two memory blocks of symbols ping-pong so the DMA-less channel can refill - // while sending — the classic anti-glitch shape. The per-channel block size - // is a chip fact (64 words classic, 48 on the S3 — a hardcoded 64 makes - // rmt_new_tx_channel reject S3); the copy encoder streams from our buffer - // regardless. - txCfg.mem_block_symbols = SOC_RMT_MEM_WORDS_PER_CHANNEL; + txCfg.resolution_hz = job->resolutionHz; txCfg.trans_queue_depth = 4; - txCfg.flags.invert_out = invert ? 1 : 0; - - if (rmt_new_tx_channel(&txCfg, &st->channel) != ESP_OK) { - delete st; - return false; - } + txCfg.flags.invert_out = job->invert ? 1 : 0; + // One memory block per channel, the chip's own size (64 words classic, 48 on the S3: a + // hardcoded 64 makes rmt_new_tx_channel reject the S3), so all eight RMT channels stay + // available to an eight-pin board. On the classic ESP32 the block is the refill deadline + // (~40 us per half-block), and with the refill at interrupt level 1 that deadline was missed + // under WiFi: four blocks softened it, eight made it worse. With the refill at level 5 + // (below) one block is flicker-free, bench-verified on two Dig-Next-2 boards, so the extra + // blocks bought nothing but lost pins. + txCfg.mem_block_symbols = SOC_RMT_MEM_WORDS_PER_CHANNEL; + if (rmt_new_tx_channel(&txCfg, &st->channel) != ESP_OK) { job->ok = false; return; } rmt_copy_encoder_config_t copyCfg = {}; if (rmt_new_copy_encoder(©Cfg, &st->encoder) != ESP_OK) { - rmt_del_channel(st->channel); - delete st; - return false; + rmt_del_channel(st->channel); st->channel = nullptr; + job->ok = false; return; } - if (rmt_enable(st->channel) != ESP_OK) { - rmt_del_encoder(st->encoder); - rmt_del_channel(st->channel); - delete st; - return false; + rmt_del_encoder(st->encoder); st->encoder = nullptr; + rmt_del_channel(st->channel); st->channel = nullptr; + job->ok = false; return; + } + ESP_LOGI("rmt", "channel on GPIO %u created on core %d (%lu-symbol block)", + static_cast(job->gpio), static_cast(esp_cpu_get_core_id()), + static_cast(txCfg.mem_block_symbols)); +#if CONFIG_IDF_TARGET_ESP32 + st->channelId = rmtHiChannelOf(job->gpio); + st->blockSymbols = static_cast(txCfg.mem_block_symbols); + if (st->channelId != 0xFF) { + rmt_ll_tx_enable_wrap(&RMT, st->channelId, true); // one global bit on this chip + rmt_ll_tx_set_limit(&RMT, st->channelId, st->blockSymbols / 2); + rmtHiRouteOnThisCore(); + ESP_LOGI("rmt", "level-5 refill on channel %u, %u-symbol halves", + static_cast(st->channelId), static_cast(st->blockSymbols / 2)); + } else { + ESP_LOGW("rmt", "could not read the channel back from the GPIO matrix; IDF transmit path"); } +#endif + job->ok = true; +} +} // namespace + +bool rmtWs2812Init(RmtWs2812Handle& h, uint8_t gpio, uint32_t resolutionHz, bool invert) { + auto* st = new (std::nothrow) RmtTxState(); + if (!st) return false; + + RmtInitJob job{st, gpio, resolutionHz, invert, false}; + WorkerTask hop; + // Priority above the render loop so the one-shot runs at once; 8 KB matches the encode + // task. If the spawn fails (single core, no memory) the init runs inline on this core, which + // is the pre-fix behavior rather than no channel at all. + if (spawnPinnedTask(hop, "mmRmtInit", &rmtInitOnThisCore, &job, 8192, 6, 1)) { + stopPinnedTask(hop); // joins: the fn already returned, this only reaps the task + } else { + rmtInitOnThisCore(&job); + } + if (!job.ok) { delete st; return false; } st->resolutionHz = resolutionHz; h.impl = st; @@ -97,6 +276,27 @@ bool rmtWs2812Transmit(RmtWs2812Handle& h, const uint32_t* symbols, size_t symbo auto* st = static_cast(h.impl); if (!st || !symbols || symbolCount == 0) return false; +#if CONFIG_IDF_TARGET_ESP32 + if (st->channelId != 0xFF) { + // The level-5 path. The symbol buffer must be internal RAM: the refill runs with the + // flash cache possibly off, and a PSRAM read there is a fault, not a stall. The driver + // allocates internal-first; this is the guard for the fallback case. + if (!esp_ptr_internal(symbols)) return false; + RmtHiChannel& c = s_hi[st->channelId]; + if (c.busy) return false; + const uint8_t ch = st->channelId; + c.cur = symbols; c.end = symbols + symbolCount; + c.half = st->blockSymbols / 2; c.offset = 0; + c.busy = true; + rmt_ll_tx_reset_pointer(&RMT, ch); + rmt_ll_clear_interrupt_status(&RMT, RMT_LL_EVENT_TX_THRES(ch) | RMT_LL_EVENT_TX_DONE(ch)); + rmtHiFill(ch); // both halves primed before the start + rmtHiFill(ch); + rmt_ll_enable_interrupt(&RMT, RMT_LL_EVENT_TX_THRES(ch) | RMT_LL_EVENT_TX_DONE(ch), true); + rmt_ll_tx_start(&RMT, ch); + return true; + } +#endif rmt_transmit_config_t txCfg = {}; txCfg.loop_count = 0; // single shot, no hardware loop @@ -109,9 +309,9 @@ bool rmtWs2812Transmit(RmtWs2812Handle& h, const uint32_t* symbols, size_t symbo symbolCount * sizeof(uint32_t), &txCfg) == ESP_OK; } -void rmtWs2812Wait(RmtWs2812Handle& h, uint32_t timeoutMs) { +bool rmtWs2812Wait(RmtWs2812Handle& h, uint32_t timeoutMs) { auto* st = static_cast(h.impl); - if (!st) return; + if (!st) return true; // Finite timeout so a wedged DMA can't hang the render tick forever. Even the // longest realistic frame (thousands of pixels) clocks out well under 1 s; a // timeout here means the peripheral is stuck, and the driver re-encodes the @@ -125,12 +325,34 @@ void rmtWs2812Wait(RmtWs2812Handle& h, uint32_t timeoutMs) { // and calls rmt_transmit again; if the channel is still busy, rmt_transmit // returns an error, rmtWs2812Transmit returns false, and RmtLedDriver::tick() // skips waiting on that channel (its started[] guard) — no crash, no corruption. - rmt_tx_wait_all_done(st->channel, timeoutMs); + // The RESULT is what the caller needs: a timeout leaves the frame in flight, and re-encoding + // into symbols_ next tick would rewrite bytes the peripheral is still clocking out. That is a + // silent corruption rather than a dropped frame, and it shows on the strip as a few lights in + // the wrong color, independent of light count. +#if CONFIG_IDF_TARGET_ESP32 + if (st->channelId != 0xFF) { + // TX_DONE clears `busy` from the level-5 handler. Polled with a yield, not a semaphore: + // the handler runs where no RTOS call is allowed, so it cannot signal one. + const int64_t deadline = esp_timer_get_time() + static_cast(timeoutMs) * 1000; + while (s_hi[st->channelId].busy) { + if (esp_timer_get_time() > deadline) return false; + vTaskDelay(1); + } + return true; + } +#endif + return rmt_tx_wait_all_done(st->channel, timeoutMs) == ESP_OK; } void rmtWs2812Deinit(RmtWs2812Handle& h) { auto* st = static_cast(h.impl); if (!st) return; +#if CONFIG_IDF_TARGET_ESP32 + if (st->channelId != 0xFF) { + rmt_ll_enable_interrupt(&RMT, RMT_LL_EVENT_TX_THRES(st->channelId) | RMT_LL_EVENT_TX_DONE(st->channelId), false); + s_hi[st->channelId].busy = false; + } +#endif if (st->channel) { rmt_disable(st->channel); rmt_del_channel(st->channel); diff --git a/src/platform/esp32/rmt_hi_vector.S b/src/platform/esp32/rmt_hi_vector.S new file mode 100644 index 00000000..2aa3d9f6 --- /dev/null +++ b/src/platform/esp32/rmt_hi_vector.S @@ -0,0 +1,193 @@ +/* rmt_hi_vector.S: the level-5 interrupt bridge for the classic-ESP32 RMT refill. + * + * Why this file exists, in one paragraph. On a classic ESP32 the RMT has no DMA: the peripheral + * plays from a small on-chip block that an interrupt must refill every few dozen microseconds + * for the whole frame, and a late refill re-clocks stale symbols into the strip (bits shift, + * a red light shows blue). The IDF driver services that interrupt at level 1-3, and on Xtensa + * every critical section raises PS.INTLEVEL to XCHAL_EXCM_LEVEL (3), so a spinlock anywhere on + * the core holds the refill for its whole duration. Only a level-4/5 interrupt runs through a + * critical section, and a level-4/5 handler cannot be written in C: it runs with the register + * window in an undefined state and no stack, so this bridge saves the full register file, + * switches to a private stack, calls one IRAM C function, and restores. It is derived from + * Espressif's own hli_vectors.S (Apache-2.0, components/bt/controller/esp32), moved from level 4 + * to level 5 with the Bluetooth-specific parts removed. The C side is rmtHiIsr in + * platform_esp32_rmt.cpp. + * + * The level-5 vector (interrupt 26) is flagged special in the IDF descriptor table, so + * esp_intr_alloc refuses it for a peripheral source; the C side routes the RMT source to it + * by hand (esp_rom_route_intr_matrix) and enables it on core 1. Nothing else uses level 5 on + * this build: the interrupt watchdog and cache-error check sit on level 4 + * (CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_4), and Bluetooth is off. Both facts are asserted in C. + */ + +#include "sdkconfig.h" + +#if defined(__XTENSA__) && defined(CONFIG_IDF_TARGET_ESP32) && !defined(CONFIG_BTDM_CTRL_HLI) + +#include +#include +#include +#include "xtensa/config/core-isa.h" +#include "xtensa_context.h" +#include "soc/soc.h" + +#define RMT_HI_LEVEL 5 +#define RMT_HI_INTR_STACK 1024 + +/* Save area: 64 general registers plus 7 specials (WINDOWBASE, WINDOWSTART, SAR, LBEG, LEND, + * LCOUNT, EPC1). Not the standard exception frame: laid out for the save/restore loops below. */ +#define REG_FILE_SIZE (64 * 4) +#define SPECREG_OFFSET REG_FILE_SIZE +#define SPECREG_SIZE (7 * 4) +#define REG_SAVE_AREA_SIZE (SPECREG_OFFSET + SPECREG_SIZE) + +#define sp a1 + + .data +_rmt_hi_intr_stack: + .space RMT_HI_INTR_STACK +_rmt_hi_save_ctx: + .space REG_SAVE_AREA_SIZE + + .section .iram1,"ax" + .global xt_highint5 + .type xt_highint5,@function + .align 4 + +xt_highint5: + movi a0, _rmt_hi_save_ctx + /* save the four low registers; a0 arrives in EXCSAVE_5 */ + s32i a1, a0, 4 + s32i a2, a0, 8 + s32i a3, a0, 12 + rsr a2, XT_REG_EXCSAVE_5 + s32i a2, a0, 0 + + /* special registers */ + addi a0, a0, SPECREG_OFFSET + rsr a2, XT_REG_WINDOWBASE + s32i a2, a0, 0 + rsr a2, XT_REG_WINDOWSTART + s32i a2, a0, 4 + rsr a2, XT_REG_SAR + s32i a2, a0, 8 + #if XCHAL_HAVE_LOOPS + rsr a2, XT_REG_LBEG + s32i a2, a0, 12 + rsr a2, XT_REG_LEND + s32i a2, a0, 16 + /* save and disable any active zero-overhead loop while C runs */ + movi a2, 0 + xsr a2, XT_REG_LCOUNT + s32i a2, a0, 20 + #endif + rsr a2, EPC1 + s32i a2, a0, 24 + + /* exception mode on, window overflow off, one level above ours */ + movi a0, PS_INTLEVEL(RMT_HI_LEVEL + 1) | PS_EXCM + wsr a0, XT_REG_PS + rsync + + /* the remaining 60 physical registers, 12 per window rotation, 5 rotations */ + movi a1, 5 + movi a3, _rmt_hi_save_ctx + 4 * 4 +1: + s32i a4, a3, 0 + s32i a5, a3, 4 + s32i a6, a3, 8 + s32i a7, a3, 12 + s32i a8, a3, 16 + s32i a9, a3, 20 + s32i a10, a3, 24 + s32i a11, a3, 28 + s32i a12, a3, 32 + s32i a13, a3, 36 + s32i a14, a3, 40 + s32i a15, a3, 44 + addi a13, a1, -1 + addi a15, a3, 48 + beqz a13, 2f + rotw 3 + j 1b +2: + rotw 4 + /* all registers saved: WINDOWSTART = 1 << WINDOWBASE */ + rsr a2, XT_REG_WINDOWBASE + movi a3, 1 + ssl a2 + sll a3, a3 + wsr a3, XT_REG_WINDOWSTART + +_rmt_hi_stack_switch: + movi a0, 0 + movi sp, _rmt_hi_intr_stack + RMT_HI_INTR_STACK - 16 + s32e a0, sp, -12 + s32e a0, sp, -16 + movi a0, _rmt_hi_stack_switch + /* PS for C at our own level: interrupts below us masked, EXCM clear, windowing on */ + movi a6, PS_INTLEVEL(RMT_HI_LEVEL) | PS_UM | PS_WOE + wsr a6, XT_REG_PS + rsync + + mov a6, sp + call4 rmtHiIsr + l32e sp, sp, -12 + + /* back to exception mode for the restore */ + movi a2, PS_INTLEVEL(RMT_HI_LEVEL + 1) | PS_EXCM + wsr a2, XT_REG_PS + rsync + + movi a0, _rmt_hi_save_ctx + SPECREG_OFFSET + l32i a2, a0, 8 + wsr a2, XT_REG_SAR + #if XCHAL_HAVE_LOOPS + l32i a2, a0, 12 + wsr a2, XT_REG_LBEG + l32i a2, a0, 16 + wsr a2, XT_REG_LEND + l32i a2, a0, 20 + wsr a2, XT_REG_LCOUNT + #endif + l32i a2, a0, 24 + wsr a2, EPC1 + + /* restore the 60 registers, the reverse of the save */ + rotw -4 + movi a15, _rmt_hi_save_ctx + 64 * 4 + movi a13, 5 +1: + addi a1, a13, -1 + addi a3, a15, -48 + l32i a4, a3, 0 + l32i a5, a3, 4 + l32i a6, a3, 8 + l32i a7, a3, 12 + l32i a8, a3, 16 + l32i a9, a3, 20 + l32i a10, a3, 24 + l32i a11, a3, 28 + l32i a12, a3, 32 + l32i a13, a3, 36 + l32i a14, a3, 40 + l32i a15, a3, 44 + beqz a1, 2f + rotw -3 + j 1b +2: + movi a0, _rmt_hi_save_ctx + l32i a2, a0, SPECREG_OFFSET + 4 + wsr a2, XT_REG_WINDOWSTART + l32i a1, a0, 4 + l32i a2, a0, 8 + l32i a3, a0, 12 + rsr a0, XT_REG_EXCSAVE_5 + rfi RMT_HI_LEVEL + +/* xt_highint5 is only a weak default elsewhere, so nothing would make the linker keep this + * object. This symbol is referenced from C (and with -u in CMake) to force it in. */ + .global ld_include_rmt_hi_vector +ld_include_rmt_hi_vector: + +#endif /* __XTENSA__ && CONFIG_IDF_TARGET_ESP32 && !CONFIG_BTDM_CTRL_HLI */ diff --git a/src/platform/platform.h b/src/platform/platform.h index 09b61a6a..a1c3b585 100644 --- a/src/platform/platform.h +++ b/src/platform/platform.h @@ -982,7 +982,10 @@ bool rmtWs2812Transmit(RmtWs2812Handle& h, const uint32_t* symbols, size_t symbo // timed-out frame is simply dropped and re-encoded next tick (self-heals). With // N channels waited sequentially the worst case is N×timeoutMs; acceptable for // the same self-healing reason. -void rmtWs2812Wait(RmtWs2812Handle& h, uint32_t timeoutMs); +/// Block until this channel's transmit completes. Returns false on TIMEOUT, meaning the frame is +/// STILL CLOCKING OUT: the caller must not touch the symbol buffer it handed over, because the +/// peripheral is still reading it. +bool rmtWs2812Wait(RmtWs2812Handle& h, uint32_t timeoutMs); void rmtWs2812Deinit(RmtWs2812Handle& h); diff --git a/src/ui/app.js b/src/ui/app.js index 6b06c798..c10e0c45 100644 --- a/src/ui/app.js +++ b/src/ui/app.js @@ -1244,7 +1244,7 @@ function showUpdateOverlay() { // A URL install hears POST /cancel; a file upload cancels by dropping its connection // (MoonBase's single-connection server is busy receiving it), so abort the fetch. if (uploadCtl) uploadCtl.abort(); - fetch("/cancel", { method: "POST" }).catch(() => {}); + fetch("/api/firmware/cancel", { method: "POST" }).catch(() => {}); }); box.append(h, msg, bar, cancel, dismiss); ov.appendChild(box); @@ -1328,7 +1328,7 @@ async function moonbaseUpdateFlow(opts) { const uploadCtl = new AbortController(); ui.setUpload(uploadCtl); try { - const r = await fetch("/install", { + const r = await fetch("/api/firmware/upload", { method: "POST", headers: { "Content-Type": "application/octet-stream" }, body: opts.file, signal: uploadCtl.signal }); if (!r.ok) throw new Error(await r.text()); @@ -1380,9 +1380,9 @@ async function moonbaseUpdateFlow(opts) { ui.status("The install was interrupted \u2014 retrying\u2026"); try { if (opts.url) { - await fetch("/install-url", { method: "POST", body: opts.url }); + await fetch("/api/firmware/url", { method: "POST", body: opts.url }); } else { - await fetch("/install", { + await fetch("/api/firmware/upload", { method: "POST", headers: { "Content-Type": "application/octet-stream" }, body: opts.file }); } diff --git a/src/ui/migrate.js b/src/ui/migrate.js index 6004fd73..773f6254 100644 --- a/src/ui/migrate.js +++ b/src/ui/migrate.js @@ -65,7 +65,7 @@ export const CONTROL_RENAMES = { // that makes a sprite effect follow the music is audioReactive. Scoped to the seven effects that // declare it, per the rule above. "soundReactive": { - to: "audioReactive", date: "2026-09-05", + name: "audioReactive", date: "2026-09-05", onTypes: ["FishTankEffect", "FlyingToastersEffect", "PacmanEffect", "PongEffect", "SpaceInvadersEffect", "SpriteFountainEffect", "MovingHeadEffect"], }, diff --git a/test/js/migrate.test.mjs b/test/js/migrate.test.mjs index eb93a4a0..6c687fd5 100644 --- a/test/js/migrate.test.mjs +++ b/test/js/migrate.test.mjs @@ -6,7 +6,7 @@ import { test } from "node:test"; import assert from "node:assert/strict"; -import { applyMigrations } from "../../src/ui/migrate.js"; +import { applyMigrations, CONTROL_RENAMES } from "../../src/ui/migrate.js"; test("a user preset that shares a renamed filename is the user's, not migrated", () => { const { files, report } = applyMigrations({ "/.config/presets/Layers.json": '{"x":1}' }); @@ -132,3 +132,49 @@ test("a corrupt config file is restored as-is and flagged for review", () => { assert.equal(files["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/.config/Broken.json"], "{not json"); assert.ok(report.some(r => r.kind === "review" && r.detail.includes("not valid JSON"))); }); + +// Every CONTROL_RENAMES entry is consumed as `cr.name` (renameKeys), so an entry written with any +// other key silently renames nothing: the old key stays, the user's value never reaches the new +// control, and no report line says so. `soundReactive` shipped with `to:` (the shape FILE_RENAMES +// uses) and did exactly that. This checks the table's own shape as well as one worked example, +// because the shape is the part a new entry gets wrong. +test("every control rename declares the key renameKeys reads, and carries its scope", () => { + for (const [from, r] of Object.entries(CONTROL_RENAMES)) { + assert.ok(typeof r.name === "string" && r.name.length > 0, + `${from}: needs name: (found keys ${Object.keys(r).join(", ")})`); + assert.ok(Array.isArray(r.onTypes) && r.onTypes.length > 0, + `${from}: a bare-name rename needs onTypes, per the scoping rule`); + } +}); + +test("a saved soundReactive value comes back under audioReactive", () => { + const files = { + "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/.config/Effects.json": JSON.stringify({ + "type": "Effects", + "0.type": "FishTankEffect", + "0.soundReactive": true, + "0.speed": 42, + }), + }; + const { files: out } = applyMigrations(files); + const cfg = JSON.parse(out["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/.config/Effects.json"]); + assert.equal(cfg["0.audioReactive"], true, "the value must land on the new name"); + assert.ok(!("0.soundReactive" in cfg), "the old key must be gone"); + assert.equal(cfg["0.speed"], 42, "unrelated controls are untouched"); +}); + +// Scoped, per the rule the table documents: the same word on a module that never declared it is +// somebody else's control and must not be rewritten. +test("soundReactive is left alone on a module outside its scope", () => { + const files = { + "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/.config/Effects.json": JSON.stringify({ + "type": "Effects", + "0.type": "NoiseEffect", + "0.soundReactive": true, + }), + }; + const { files: out } = applyMigrations(files); + const cfg = JSON.parse(out["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/.config/Effects.json"]); + assert.equal(cfg["0.soundReactive"], true); + assert.ok(!("0.audioReactive" in cfg)); +}); diff --git a/test/scenarios/core/scenario_MoonModule_control_change.json b/test/scenarios/core/scenario_MoonModule_control_change.json index 445858c7..d8c285d4 100644 --- a/test/scenarios/core/scenario_MoonModule_control_change.json +++ b/test/scenarios/core/scenario_MoonModule_control_change.json @@ -117,14 +117,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 134, - "p95": 246, + "p50": 143, + "p95": 248, "min": 117, - "max": 248, + "max": 302, "n": 32, - "samples": [126, 167, 130, 125, 123, 123, 129, 134, 203, 129, 133, 243, 248, 246, 127, 204, 143, 150, 150, 175, 205, 179, 191, 127, 202, 119, 121, 118, 120, 199, 193, 117] + "samples": [130, 125, 123, 123, 129, 134, 203, 129, 133, 243, 248, 246, 127, 204, 143, 150, 150, 175, 205, 179, 191, 127, 202, 119, 121, 118, 120, 199, 193, 117, 144, 302] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32-eth-wifi": { "tick_us": { @@ -299,14 +299,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 132, + "p50": 133, "p95": 238, "min": 117, "max": 247, "n": 32, - "samples": [127, 169, 131, 131, 128, 127, 127, 142, 205, 130, 134, 238, 247, 238, 126, 196, 146, 147, 159, 171, 203, 182, 135, 128, 132, 119, 120, 118, 118, 131, 134, 117] + "samples": [131, 131, 128, 127, 127, 142, 205, 130, 134, 238, 247, 238, 126, 196, 146, 147, 159, 171, 203, 182, 135, 128, 132, 119, 120, 118, 118, 131, 134, 117, 133, 135] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32-eth-wifi": { "tick_us": { @@ -481,14 +481,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 130, + "p50": 129, "p95": 239, "min": 116, "max": 240, "n": 32, - "samples": [128, 168, 132, 132, 127, 127, 129, 135, 204, 130, 133, 240, 239, 238, 126, 186, 147, 148, 158, 173, 206, 180, 126, 128, 118, 121, 121, 118, 116, 116, 122, 117] + "samples": [132, 132, 127, 127, 129, 135, 204, 130, 133, 240, 239, 238, 126, 186, 147, 148, 158, 173, 206, 180, 126, 128, 118, 121, 121, 118, 116, 116, 122, 117, 122, 129] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32-eth-wifi": { "tick_us": { @@ -676,9 +676,9 @@ "min": 117, "max": 261, "n": 32, - "samples": [128, 168, 130, 131, 128, 127, 127, 139, 205, 129, 131, 261, 247, 241, 127, 186, 148, 148, 157, 174, 192, 182, 127, 128, 120, 119, 120, 118, 118, 120, 123, 117] + "samples": [130, 131, 128, 127, 127, 139, 205, 129, 131, 261, 247, 241, 127, 186, 148, 148, 157, 174, 192, 182, 127, 128, 120, 119, 120, 118, 118, 120, 123, 117, 122, 141] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32-eth-wifi": { "tick_us": { diff --git a/test/scenarios/light/scenario_Audio_mutation.json b/test/scenarios/light/scenario_Audio_mutation.json index 5ad49d65..e1d61cb2 100644 --- a/test/scenarios/light/scenario_Audio_mutation.json +++ b/test/scenarios/light/scenario_Audio_mutation.json @@ -106,13 +106,13 @@ "desktop-macos": { "tick_us": { "p50": 21, - "p95": 61, + "p95": 50, "min": 16, - "max": 77, + "max": 61, "n": 32, - "samples": [17, 51, 77, 46, 34, 50, 44, 61, 36, 21, 21, 35, 21, 21, 21, 32, 24, 38, 46, 48, 27, 25, 16, 20, 16, 20, 20, 17, 17, 16, 16, 17] + "samples": [46, 34, 50, 44, 61, 36, 21, 21, 35, 21, 21, 21, 32, 24, 38, 46, 48, 27, 25, 16, 20, 16, 20, 20, 17, 17, 16, 16, 17, 17, 17, 19] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -202,14 +202,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 33, - "p95": 202, + "p50": 30, + "p95": 120, "min": 17, "max": 404, "n": 32, - "samples": [23, 37, 202, 120, 48, 106, 40, 404, 41, 17, 25, 35, 34, 70, 30, 33, 26, 53, 66, 59, 35, 38, 18, 22, 17, 17, 19, 28, 27, 22, 17, 19] + "samples": [120, 48, 106, 40, 404, 41, 17, 25, 35, 34, 70, 30, 33, 26, 53, 66, 59, 35, 38, 18, 22, 17, 17, 19, 28, 27, 22, 17, 19, 20, 37, 22] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -316,14 +316,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 33, - "p95": 213, + "p50": 28, + "p95": 86, "min": 17, - "max": 413, + "max": 213, "n": 32, - "samples": [24, 33, 413, 58, 53, 66, 47, 213, 86, 17, 18, 32, 40, 66, 28, 33, 28, 57, 60, 63, 45, 44, 37, 20, 17, 18, 20, 19, 25, 18, 18, 19] + "samples": [58, 53, 66, 47, 213, 86, 17, 18, 32, 40, 66, 28, 33, 28, 57, 60, 63, 45, 44, 37, 20, 17, 18, 20, 19, 25, 18, 18, 19, 19, 21, 26] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -413,14 +413,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 31, - "p95": 125, + "p50": 27, + "p95": 86, "min": 19, - "max": 184, + "max": 125, "n": 32, - "samples": [30, 42, 184, 69, 75, 85, 55, 125, 86, 19, 20, 38, 27, 66, 26, 36, 30, 62, 75, 68, 45, 45, 20, 23, 20, 21, 20, 21, 31, 20, 20, 21] + "samples": [69, 75, 85, 55, 125, 86, 19, 20, 38, 27, 66, 26, 36, 30, 62, 75, 68, 45, 45, 20, 23, 20, 21, 20, 21, 31, 20, 20, 21, 19, 22, 24] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -508,14 +508,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 32, - "p95": 82, + "p50": 28, + "p95": 80, "min": 19, "max": 110, "n": 32, - "samples": [26, 36, 82, 63, 54, 61, 39, 110, 42, 23, 21, 32, 33, 69, 25, 37, 28, 65, 67, 62, 41, 80, 19, 21, 21, 21, 20, 22, 27, 20, 21, 19] + "samples": [63, 54, 61, 39, 110, 42, 23, 21, 32, 33, 69, 25, 37, 28, 65, 67, 62, 41, 80, 19, 21, 21, 21, 20, 22, 27, 20, 21, 19, 19, 21, 30] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -603,14 +603,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 29, + "p50": 26, "p95": 105, "min": 16, "max": 142, "n": 32, - "samples": [19, 34, 75, 105, 57, 83, 39, 142, 39, 17, 26, 29, 38, 87, 23, 32, 25, 52, 79, 57, 29, 33, 18, 26, 20, 19, 19, 17, 17, 17, 16, 17] + "samples": [105, 57, 83, 39, 142, 39, 17, 26, 29, 38, 87, 23, 32, 25, 52, 79, 57, 29, 33, 18, 26, 20, 19, 19, 17, 17, 17, 16, 17, 17, 21, 17] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_Aurora_fps.json b/test/scenarios/light/scenario_Aurora_fps.json index bbcd6fca..bb31d478 100644 --- a/test/scenarios/light/scenario_Aurora_fps.json +++ b/test/scenarios/light/scenario_Aurora_fps.json @@ -84,14 +84,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 841, + "p50": 843, "p95": 1391, "min": 474, "max": 1391, - "n": 15, - "samples": [478, 474, 650, 786, 803, 855, 835, 843, 890, 827, 841, 871, 845, 856, 1391] + "n": 17, + "samples": [478, 474, 650, 786, 803, 855, 835, 843, 890, 827, 841, 871, 845, 856, 1391, 863, 858] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -118,10 +118,10 @@ "p95": 355, "min": 207, "max": 355, - "n": 15, - "samples": [207, 207, 208, 307, 311, 320, 316, 318, 317, 317, 321, 334, 312, 322, 355] + "n": 17, + "samples": [207, 207, 208, 307, 311, 320, 316, 318, 317, 317, 321, 334, 312, 322, 355, 335, 322] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -148,10 +148,10 @@ "p95": 254, "min": 127, "max": 254, - "n": 15, - "samples": [127, 127, 128, 185, 183, 189, 187, 192, 186, 185, 188, 196, 187, 187, 254] + "n": 17, + "samples": [127, 127, 128, 185, 183, 189, 187, 192, 186, 185, 188, 196, 187, 187, 254, 187, 188] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -174,14 +174,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 544, + "p50": 550, "p95": 581, "min": 303, "max": 581, - "n": 15, - "samples": [304, 303, 306, 530, 532, 554, 540, 544, 551, 551, 554, 581, 543, 554, 560] + "n": 17, + "samples": [304, 303, 306, 530, 532, 554, 540, 544, 551, 551, 554, 581, 543, 554, 560, 550, 553] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -204,14 +204,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 937, + "p50": 938, "p95": 1236, "min": 474, "max": 1236, - "n": 15, - "samples": [474, 474, 480, 921, 919, 974, 933, 936, 938, 945, 964, 997, 937, 956, 1236] + "n": 17, + "samples": [474, 474, 480, 921, 919, 974, 933, 936, 938, 945, 964, 997, 937, 956, 1236, 950, 953] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -234,14 +234,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 1455, + "p50": 1458, "p95": 2116, "min": 785, "max": 2116, - "n": 14, - "samples": [937, 785, 1419, 1423, 1465, 1430, 1562, 1455, 1458, 1483, 2116, 1446, 1497, 1493] + "n": 16, + "samples": [937, 785, 1419, 1423, 1465, 1430, 1562, 1455, 1458, 1483, 2116, 1446, 1497, 1493, 1472, 1467] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -264,14 +264,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 1498, + "p50": 1506, "p95": 1920, "min": 507, "max": 1920, - "n": 15, - "samples": [507, 814, 821, 1496, 1511, 1506, 1491, 1494, 1498, 1506, 1574, 1920, 1494, 1564, 1543] + "n": 17, + "samples": [507, 814, 821, 1496, 1511, 1506, 1491, 1494, 1498, 1506, 1574, 1920, 1494, 1564, 1543, 1622, 1526] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -294,14 +294,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 1103, + "p50": 1104, "p95": 1211, "min": 333, "max": 1211, - "n": 15, - "samples": [333, 643, 658, 1103, 1079, 1108, 1092, 1096, 1104, 1118, 1165, 1211, 1103, 1135, 1128] + "n": 17, + "samples": [333, 643, 658, 1103, 1079, 1108, 1092, 1096, 1104, 1118, 1165, 1211, 1103, 1135, 1128, 1137, 1120] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } } diff --git a/test/scenarios/light/scenario_Driver_mutation.json b/test/scenarios/light/scenario_Driver_mutation.json index 013c66c4..de35fb5c 100644 --- a/test/scenarios/light/scenario_Driver_mutation.json +++ b/test/scenarios/light/scenario_Driver_mutation.json @@ -78,12 +78,12 @@ "tick_us": { "p50": 32, "p95": 590, - "min": 17, + "min": 16, "max": 1843, "n": 32, - "samples": [25, 32, 590, 105, 45, 51, 43, 1843, 56, 18, 99, 32, 36, 147, 25, 37, 25, 51, 73, 88, 61, 43, 17, 21, 17, 20, 20, 17, 19, 20, 19, 18] + "samples": [590, 105, 45, 51, 43, 1843, 56, 18, 99, 32, 36, 147, 25, 37, 25, 51, 73, 88, 61, 43, 17, 21, 17, 20, 20, 17, 19, 20, 19, 18, 21, 16] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -173,14 +173,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 32, + "p50": 27, "p95": 298, - "min": 17, + "min": 16, "max": 421, "n": 32, - "samples": [25, 47, 421, 126, 48, 54, 39, 298, 68, 19, 25, 37, 51, 73, 26, 32, 25, 47, 65, 59, 59, 45, 17, 22, 17, 20, 20, 17, 27, 20, 20, 20] + "samples": [421, 126, 48, 54, 39, 298, 68, 19, 25, 37, 51, 73, 26, 32, 25, 47, 65, 59, 59, 45, 17, 22, 17, 20, 20, 17, 27, 20, 20, 20, 23, 16] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -270,14 +270,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 32, + "p50": 25, "p95": 257, - "min": 18, + "min": 16, "max": 339, "n": 32, - "samples": [29, 32, 257, 339, 46, 53, 38, 222, 67, 25, 24, 36, 37, 61, 25, 32, 25, 48, 64, 63, 52, 46, 21, 18, 20, 20, 20, 20, 24, 20, 20, 21] + "samples": [257, 339, 46, 53, 38, 222, 67, 25, 24, 36, 37, 61, 25, 32, 25, 48, 64, 63, 52, 46, 21, 18, 20, 20, 20, 20, 24, 20, 20, 21, 17, 16] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -365,14 +365,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 33, + "p50": 27, "p95": 120, "min": 17, "max": 173, "n": 32, - "samples": [33, 50, 106, 114, 52, 64, 50, 120, 83, 20, 25, 33, 25, 49, 31, 38, 27, 55, 173, 76, 54, 47, 20, 24, 20, 20, 20, 17, 19, 20, 20, 17] + "samples": [106, 114, 52, 64, 50, 120, 83, 20, 25, 33, 25, 49, 31, 38, 27, 55, 173, 76, 54, 47, 20, 24, 20, 20, 20, 17, 19, 20, 20, 17, 19, 20] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -460,14 +460,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 29, + "p50": 28, "p95": 267, "min": 17, "max": 316, "n": 32, - "samples": [27, 68, 135, 87, 47, 74, 136, 267, 50, 20, 20, 32, 29, 62, 28, 35, 26, 59, 316, 66, 36, 52, 21, 21, 20, 20, 20, 17, 23, 20, 20, 19] + "samples": [135, 87, 47, 74, 136, 267, 50, 20, 20, 32, 29, 62, 28, 35, 26, 59, 316, 66, 36, 52, 21, 21, 20, 20, 20, 17, 23, 20, 20, 19, 20, 20] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_Effects_composition.json b/test/scenarios/light/scenario_Effects_composition.json index 37548a4f..957f999c 100644 --- a/test/scenarios/light/scenario_Effects_composition.json +++ b/test/scenarios/light/scenario_Effects_composition.json @@ -106,14 +106,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 370, + "p50": 366, "p95": 1253, "min": 142, "max": 1335, "n": 32, - "samples": [253, 499, 1335, 697, 573, 781, 604, 1253, 646, 253, 263, 426, 343, 1044, 366, 485, 370, 731, 711, 768, 496, 497, 248, 248, 146, 142, 146, 152, 145, 146, 148, 144] + "samples": [1335, 697, 573, 781, 604, 1253, 646, 253, 263, 426, 343, 1044, 366, 485, 370, 731, 711, 768, 496, 497, 248, 248, 146, 142, 146, 152, 145, 146, 148, 144, 145, 147] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_Fields_polar_lut.json b/test/scenarios/light/scenario_Fields_polar_lut.json index 1ec112a3..b6702f4b 100644 --- a/test/scenarios/light/scenario_Fields_polar_lut.json +++ b/test/scenarios/light/scenario_Fields_polar_lut.json @@ -85,14 +85,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 289, + "p50": 287, "p95": 387, "min": 189, "max": 387, - "n": 16, - "samples": [289, 189, 281, 384, 274, 387, 283, 278, 281, 289, 325, 292, 302, 291, 286, 293] + "n": 18, + "samples": [289, 189, 281, 384, 274, 387, 283, 278, 281, 289, 325, 292, 302, 291, 286, 293, 285, 287] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -115,14 +115,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 281, + "p50": 283, "p95": 313, "min": 183, "max": 313, - "n": 16, - "samples": [183, 189, 194, 279, 273, 275, 284, 281, 281, 313, 297, 290, 297, 283, 288, 291] + "n": 18, + "samples": [183, 189, 194, 279, 273, 275, 284, 281, 281, 313, 297, 290, 297, 283, 288, 291, 285, 290] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -146,13 +146,13 @@ "desktop-macos": { "tick_us": { "p50": 282, - "p95": 303, + "p95": 309, "min": 168, - "max": 303, - "n": 16, - "samples": [168, 180, 177, 279, 274, 274, 282, 281, 282, 288, 289, 289, 303, 284, 286, 289] + "max": 309, + "n": 18, + "samples": [168, 180, 177, 279, 274, 274, 282, 281, 282, 288, 289, 289, 303, 284, 286, 289, 284, 309] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -175,14 +175,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 281, - "p95": 301, + "p50": 282, + "p95": 347, "min": 168, - "max": 301, - "n": 16, - "samples": [168, 175, 179, 278, 274, 273, 284, 277, 282, 285, 286, 286, 301, 281, 287, 290] + "max": 347, + "n": 18, + "samples": [168, 175, 179, 278, 274, 273, 284, 277, 282, 285, 286, 286, 301, 281, 287, 290, 288, 347] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -205,14 +205,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 140, - "p95": 147, + "p50": 141, + "p95": 155, "min": 83, - "max": 147, - "n": 16, - "samples": [83, 86, 88, 138, 137, 137, 142, 140, 138, 144, 141, 144, 147, 141, 144, 143] + "max": 155, + "n": 18, + "samples": [83, 86, 88, 138, 137, 137, 142, 140, 138, 144, 141, 144, 147, 141, 144, 143, 143, 155] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -235,14 +235,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 420, - "p95": 501, + "p50": 421, + "p95": 503, "min": 250, - "max": 501, - "n": 16, - "samples": [250, 257, 264, 422, 413, 410, 501, 413, 417, 422, 421, 428, 444, 420, 451, 442] + "max": 503, + "n": 18, + "samples": [250, 257, 264, 422, 413, 410, 501, 413, 417, 422, 421, 428, 444, 420, 451, 442, 503, 433] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -271,14 +271,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 1218, + "p50": 1228, "p95": 1311, "min": 960, "max": 1311, - "n": 16, - "samples": [960, 970, 981, 1200, 1187, 1206, 1234, 1239, 1206, 1218, 1228, 1239, 1298, 1269, 1240, 1311] + "n": 18, + "samples": [960, 970, 981, 1200, 1187, 1206, 1234, 1239, 1206, 1218, 1228, 1239, 1298, 1269, 1240, 1311, 1232, 1236] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -305,10 +305,10 @@ "p95": 604, "min": 460, "max": 604, - "n": 16, - "samples": [560, 561, 561, 479, 460, 590, 474, 479, 476, 472, 473, 480, 506, 482, 604, 488] + "n": 18, + "samples": [560, 561, 561, 479, 460, 590, 474, 479, 476, 472, 473, 480, 506, 482, 604, 488, 475, 481] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } } diff --git a/test/scenarios/light/scenario_Fluid_solver.json b/test/scenarios/light/scenario_Fluid_solver.json index 75b022f5..2ad6e07a 100644 --- a/test/scenarios/light/scenario_Fluid_solver.json +++ b/test/scenarios/light/scenario_Fluid_solver.json @@ -82,10 +82,10 @@ "p95": 73, "min": 29, "max": 73, - "n": 10, - "samples": [30, 30, 30, 31, 30, 31, 29, 31, 73, 30] + "n": 12, + "samples": [30, 30, 30, 31, 30, 31, 29, 31, 73, 30, 29, 29] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -104,10 +104,10 @@ "p95": 37, "min": 19, "max": 37, - "n": 10, - "samples": [20, 20, 20, 19, 19, 19, 20, 19, 37, 19] + "n": 12, + "samples": [20, 20, 20, 19, 19, 19, 20, 19, 37, 19, 19, 19] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -126,10 +126,10 @@ "p95": 101, "min": 66, "max": 101, - "n": 10, - "samples": [69, 69, 68, 70, 68, 68, 66, 68, 101, 68] + "n": 12, + "samples": [69, 69, 68, 70, 68, 68, 66, 68, 101, 68, 67, 67] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -148,10 +148,10 @@ "p95": 37, "min": 29, "max": 37, - "n": 10, - "samples": [30, 31, 30, 30, 29, 29, 29, 29, 37, 29] + "n": 12, + "samples": [30, 31, 30, 30, 29, 29, 29, 29, 37, 29, 29, 29] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -166,14 +166,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 65, + "p50": 64, "p95": 74, - "min": 63, + "min": 62, "max": 74, - "n": 10, - "samples": [64, 65, 65, 66, 66, 64, 64, 63, 74, 66] + "n": 12, + "samples": [64, 65, 65, 66, 66, 64, 64, 63, 74, 66, 63, 62] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -189,12 +189,12 @@ "tick_us": { "p50": 133, "p95": 138, - "min": 130, + "min": 128, "max": 138, - "n": 10, - "samples": [133, 134, 138, 136, 134, 131, 130, 132, 133, 134] + "n": 12, + "samples": [133, 134, 138, 136, 134, 131, 130, 132, 133, 134, 129, 128] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } }, "description": "And the height, making it 64x64: four times the cells of the 32x32 the pair started from. Reallocating on each axis separately is the shape a UI resize actually takes." @@ -212,12 +212,12 @@ "tick_us": { "p50": 133, "p95": 140, - "min": 131, + "min": 130, "max": 140, - "n": 10, - "samples": [133, 140, 137, 136, 135, 131, 132, 131, 131, 134] + "n": 12, + "samples": [133, 140, 137, 136, 135, 131, 132, 131, 131, 134, 130, 138] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -236,10 +236,10 @@ "p95": 147, "min": 129, "max": 147, - "n": 10, - "samples": [134, 141, 138, 135, 147, 134, 130, 131, 129, 135] + "n": 12, + "samples": [134, 141, 138, 135, 147, 134, 130, 131, 129, 135, 129, 129] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -258,10 +258,10 @@ "p95": 40, "min": 35, "max": 40, - "n": 9, - "samples": [39, 38, 36, 40, 36, 35, 36, 35, 37] + "n": 11, + "samples": [39, 38, 36, 40, 36, 35, 36, 35, 37, 35, 35] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -279,10 +279,10 @@ "p95": 12, "min": 11, "max": 12, - "n": 9, - "samples": [12, 11, 11, 11, 11, 11, 11, 11, 11] + "n": 11, + "samples": [12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -298,12 +298,12 @@ "tick_us": { "p50": 222, "p95": 249, - "min": 219, + "min": 217, "max": 249, - "n": 9, - "samples": [249, 232, 229, 220, 220, 220, 222, 219, 227] + "n": 11, + "samples": [249, 232, 229, 220, 220, 220, 222, 219, 227, 217, 226] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -322,10 +322,10 @@ "p95": 12, "min": 11, "max": 12, - "n": 9, - "samples": [12, 11, 11, 11, 11, 11, 11, 11, 11] + "n": 11, + "samples": [12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -344,10 +344,10 @@ "p95": 29, "min": 8, "max": 29, - "n": 10, - "samples": [29, 9, 9, 9, 8, 8, 8, 8, 8, 9] + "n": 12, + "samples": [29, 9, 9, 9, 8, 8, 8, 8, 8, 9, 8, 9] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -365,10 +365,10 @@ "p95": 8, "min": 6, "max": 8, - "n": 10, - "samples": [7, 7, 7, 7, 6, 7, 6, 7, 8, 8] + "n": 12, + "samples": [7, 7, 7, 7, 6, 7, 6, 7, 8, 8, 7, 7] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } } diff --git a/test/scenarios/light/scenario_GridBlacks_blackpixel.json b/test/scenarios/light/scenario_GridBlacks_blackpixel.json index 4ead1ffd..5aec875e 100644 --- a/test/scenarios/light/scenario_GridBlacks_blackpixel.json +++ b/test/scenarios/light/scenario_GridBlacks_blackpixel.json @@ -90,14 +90,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 5, - "p95": 15, + "p50": 4, + "p95": 12, "min": 1, "max": 27, "n": 32, - "samples": [10, 15, 5, 7, 2, 2, 5, 9, 8, 6, 7, 27, 12, 6, 3, 11, 4, 5, 7, 7, 5, 5, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1] + "samples": [5, 7, 2, 2, 5, 9, 8, 6, 7, 27, 12, 6, 3, 11, 4, 5, 7, 7, 5, 5, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -193,14 +193,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 7, - "p95": 25, + "p50": 5, + "p95": 16, "min": 2, - "max": 73, + "max": 25, "n": 32, - "samples": [73, 10, 7, 10, 3, 3, 7, 14, 10, 8, 10, 15, 16, 8, 5, 25, 5, 5, 10, 10, 7, 7, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2] + "samples": [7, 10, 3, 3, 7, 14, 10, 8, 10, 15, 16, 8, 5, 25, 5, 5, 10, 10, 7, 7, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { diff --git a/test/scenarios/light/scenario_GridLayout_resize.json b/test/scenarios/light/scenario_GridLayout_resize.json index f4e9208d..59248d53 100644 --- a/test/scenarios/light/scenario_GridLayout_resize.json +++ b/test/scenarios/light/scenario_GridLayout_resize.json @@ -122,9 +122,9 @@ "min": 117, "max": 316, "n": 32, - "samples": [170, 130, 126, 220, 127, 128, 129, 126, 157, 244, 128, 127, 241, 280, 306, 311, 167, 316, 183, 292, 249, 240, 128, 126, 120, 118, 120, 128, 117, 119, 122, 117] + "samples": [126, 220, 127, 128, 129, 126, 157, 244, 128, 127, 241, 280, 306, 311, 167, 316, 183, 292, 249, 240, 128, 126, 120, 118, 120, 128, 117, 119, 122, 117, 121, 120] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32-eth-wifi": { "tick_us": { @@ -304,9 +304,9 @@ "min": 59, "max": 161, "n": 32, - "samples": [141, 68, 68, 108, 68, 68, 69, 69, 74, 135, 66, 63, 132, 145, 118, 161, 84, 144, 90, 126, 125, 118, 68, 68, 65, 66, 64, 61, 59, 64, 65, 59] + "samples": [68, 108, 68, 68, 69, 69, 74, 135, 66, 63, 132, 145, 118, 161, 84, 144, 90, 126, 125, 118, 68, 68, 65, 66, 64, 61, 59, 64, 65, 59, 65, 65] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32-eth-wifi": { "tick_us": { @@ -481,14 +481,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 129, + "p50": 128, "p95": 298, "min": 116, "max": 309, "n": 32, - "samples": [164, 132, 129, 204, 127, 127, 129, 128, 149, 309, 129, 125, 247, 283, 243, 298, 166, 249, 182, 209, 247, 240, 126, 127, 120, 123, 121, 123, 116, 120, 122, 119] + "samples": [129, 204, 127, 127, 129, 128, 149, 309, 129, 125, 247, 283, 243, 298, 166, 249, 182, 209, 247, 240, 126, 127, 120, 123, 121, 123, 116, 120, 122, 119, 121, 120] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32-eth-wifi": { "tick_us": { diff --git a/test/scenarios/light/scenario_Layer_base_pipeline.json b/test/scenarios/light/scenario_Layer_base_pipeline.json index 00ba12f9..afc1ba30 100644 --- a/test/scenarios/light/scenario_Layer_base_pipeline.json +++ b/test/scenarios/light/scenario_Layer_base_pipeline.json @@ -88,9 +88,9 @@ "min": 64, "max": 245, "n": 32, - "samples": [64, 68, 199, 211, 145, 245, 127, 205, 143, 73, 68, 131, 86, 123, 94, 122, 107, 179, 178, 197, 123, 125, 71, 65, 72, 70, 69, 66, 64, 66, 66, 64] + "samples": [199, 211, 145, 245, 127, 205, 143, 73, 68, 131, 86, 123, 94, 122, 107, 179, 178, 197, 123, 125, 71, 65, 72, 70, 69, 66, 64, 66, 66, 64, 71, 70] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_Layer_memory_1to1.json b/test/scenarios/light/scenario_Layer_memory_1to1.json index 75957708..fc0ce9c5 100644 --- a/test/scenarios/light/scenario_Layer_memory_1to1.json +++ b/test/scenarios/light/scenario_Layer_memory_1to1.json @@ -80,14 +80,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 10, - "p95": 41, + "p50": 9, + "p95": 40, "min": 5, - "max": 229, + "max": 41, "n": 32, - "samples": [6, 229, 32, 21, 6, 11, 19, 12, 18, 11, 11, 10, 40, 14, 7, 10, 7, 9, 41, 27, 10, 11, 5, 5, 5, 5, 5, 5, 6, 5, 5, 5] + "samples": [32, 21, 6, 11, 19, 12, 18, 11, 11, 10, 40, 14, 7, 10, 7, 9, 41, 27, 10, 11, 5, 5, 5, 5, 5, 5, 6, 5, 5, 5, 5, 5] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_Layouts_mutation.json b/test/scenarios/light/scenario_Layouts_mutation.json index 4f34d667..caccadaa 100644 --- a/test/scenarios/light/scenario_Layouts_mutation.json +++ b/test/scenarios/light/scenario_Layouts_mutation.json @@ -78,14 +78,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 29, + "p50": 25, "p95": 79, "min": 16, "max": 354, "n": 32, - "samples": [22, 37, 354, 44, 36, 48, 36, 79, 38, 17, 17, 33, 23, 35, 25, 32, 29, 48, 50, 61, 32, 32, 16, 16, 17, 17, 16, 17, 17, 16, 16, 17] + "samples": [354, 44, 36, 48, 36, 79, 38, 17, 17, 33, 23, 35, 25, 32, 29, 48, 50, 61, 32, 32, 16, 16, 17, 17, 16, 17, 17, 16, 16, 17, 16, 16] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -206,14 +206,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 75, + "p50": 71, "p95": 180, "min": 43, "max": 633, "n": 32, - "samples": [51, 93, 633, 140, 100, 126, 85, 180, 105, 51, 71, 90, 61, 103, 70, 87, 75, 123, 126, 126, 86, 86, 48, 47, 48, 44, 46, 49, 45, 43, 48, 44] + "samples": [633, 140, 100, 126, 85, 180, 105, 51, 71, 90, 61, 103, 70, 87, 75, 123, 126, 126, 86, 86, 48, 47, 48, 44, 46, 49, 45, 43, 48, 44, 48, 49] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -329,14 +329,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 156, + "p50": 138, "p95": 381, "min": 88, "max": 554, "n": 32, - "samples": [93, 207, 554, 381, 202, 258, 187, 294, 200, 96, 100, 167, 119, 174, 130, 171, 138, 245, 248, 248, 170, 169, 92, 93, 156, 93, 93, 97, 88, 92, 94, 88] + "samples": [554, 381, 202, 258, 187, 294, 200, 96, 100, 167, 119, 174, 130, 171, 138, 245, 248, 248, 170, 169, 92, 93, 156, 93, 93, 97, 88, 92, 94, 88, 121, 93] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -451,14 +451,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 27, + "p50": 25, "p95": 68, "min": 16, "max": 293, "n": 32, - "samples": [21, 61, 64, 293, 42, 55, 32, 68, 38, 21, 16, 31, 27, 36, 24, 32, 25, 47, 47, 48, 33, 31, 20, 20, 17, 20, 20, 21, 17, 20, 20, 17] + "samples": [64, 293, 42, 55, 32, 68, 38, 21, 16, 31, 27, 36, 24, 32, 25, 47, 47, 48, 33, 31, 20, 20, 17, 20, 20, 21, 17, 20, 20, 17, 20, 20] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_MoonLiveEffect_livescript.json b/test/scenarios/light/scenario_MoonLiveEffect_livescript.json index ac74bc3d..c99c2359 100644 --- a/test/scenarios/light/scenario_MoonLiveEffect_livescript.json +++ b/test/scenarios/light/scenario_MoonLiveEffect_livescript.json @@ -88,14 +88,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 9, + "p50": 8, "p95": 71, "min": 5, "max": 93, "n": 32, - "samples": [15, 5, 5, 93, 14, 71, 13, 12, 12, 22, 11, 15, 8, 12, 9, 14, 28, 18, 10, 10, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 5] + "samples": [5, 93, 14, 71, 13, 12, 12, 22, 11, 15, 8, 12, 9, 14, 28, 18, 10, 10, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 5, 6, 6] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -211,9 +211,9 @@ "min": 5, "max": 34, "n": 32, - "samples": [12, 5, 8, 20, 9, 25, 12, 21, 14, 34, 13, 18, 9, 12, 9, 16, 24, 17, 11, 10, 5, 5, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5] + "samples": [8, 20, 9, 25, 12, 21, 14, 34, 13, 18, 9, 12, 9, 16, 24, 17, 11, 10, 5, 5, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 10, 5] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -317,13 +317,13 @@ "desktop-macos": { "tick_us": { "p50": 9, - "p95": 28, + "p95": 19, "min": 5, - "max": 33, + "max": 28, "n": 32, - "samples": [33, 5, 6, 18, 11, 15, 13, 12, 19, 18, 15, 19, 9, 10, 9, 17, 28, 17, 11, 10, 5, 5, 5, 5, 5, 5, 5, 5, 6, 5, 5, 6] + "samples": [6, 18, 11, 15, 13, 12, 19, 18, 15, 19, 9, 10, 9, 17, 28, 17, 11, 10, 5, 5, 5, 5, 5, 5, 5, 5, 6, 5, 5, 6, 15, 5] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -426,14 +426,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 10, - "p95": 29, - "min": 5, - "max": 31, + "p50": 9, + "p95": 23, + "min": 4, + "max": 29, "n": 32, - "samples": [31, 5, 5, 20, 16, 13, 23, 18, 21, 15, 15, 14, 9, 10, 15, 15, 29, 19, 16, 11, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5] + "samples": [5, 20, 16, 13, 23, 18, 21, 15, 15, 14, 9, 10, 15, 15, 29, 19, 16, 11, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 4] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -529,14 +529,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 11, - "p95": 41, + "p50": 8, + "p95": 26, "min": 5, "max": 60, "n": 32, - "samples": [41, 5, 5, 24, 14, 60, 12, 17, 11, 20, 12, 14, 8, 11, 12, 14, 26, 20, 11, 13, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5] + "samples": [5, 24, 14, 60, 12, 17, 11, 20, 12, 14, 8, 11, 12, 14, 26, 20, 11, 13, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 5] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -632,14 +632,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 10, - "p95": 28, + "p50": 8, + "p95": 27, "min": 5, "max": 29, "n": 32, - "samples": [28, 5, 5, 22, 16, 27, 29, 24, 15, 24, 11, 22, 7, 10, 12, 16, 26, 18, 11, 11, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 5, 5] + "samples": [5, 22, 16, 27, 29, 24, 15, 24, 11, 22, 7, 10, 12, 16, 26, 18, 11, 11, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 5, 5, 8, 5] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -736,13 +736,13 @@ "desktop-macos": { "tick_us": { "p50": 5, - "p95": 5, + "p95": 8, "min": 5, - "max": 5, - "n": 3, - "samples": [5, 5, 5] + "max": 8, + "n": 5, + "samples": [5, 5, 5, 8, 5] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -758,13 +758,13 @@ "desktop-macos": { "tick_us": { "p50": 5, - "p95": 5, + "p95": 6, "min": 5, - "max": 5, - "n": 3, - "samples": [5, 5, 5] + "max": 6, + "n": 5, + "samples": [5, 5, 5, 6, 5] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -780,13 +780,13 @@ "desktop-macos": { "tick_us": { "p50": 5, - "p95": 5, + "p95": 6, "min": 5, - "max": 5, - "n": 3, - "samples": [5, 5, 5] + "max": 6, + "n": 5, + "samples": [5, 5, 5, 6, 5] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -799,14 +799,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 9, + "p50": 7, "p95": 24, "min": 5, - "max": 64, + "max": 24, "n": 32, - "samples": [64, 5, 6, 24, 9, 21, 14, 24, 12, 20, 17, 22, 7, 11, 14, 18, 21, 18, 11, 13, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5] + "samples": [6, 24, 9, 21, 14, 24, 12, 20, 17, 22, 7, 11, 14, 18, 21, 18, 11, 13, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 5] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -907,9 +907,9 @@ "min": 5, "max": 32, "n": 32, - "samples": [27, 6, 5, 17, 8, 12, 15, 29, 12, 32, 13, 24, 8, 10, 15, 15, 29, 18, 10, 13, 5, 5, 6, 5, 5, 5, 5, 6, 5, 5, 5, 5] + "samples": [5, 17, 8, 12, 15, 29, 12, 32, 13, 24, 8, 10, 15, 15, 29, 18, 10, 13, 5, 5, 6, 5, 5, 5, 5, 6, 5, 5, 5, 5, 5, 5] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -1005,14 +1005,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 8, + "p50": 7, "p95": 31, "min": 5, "max": 37, "n": 32, - "samples": [12, 7, 5, 14, 8, 15, 11, 29, 16, 37, 10, 31, 7, 9, 15, 14, 21, 22, 12, 10, 5, 6, 5, 5, 6, 5, 6, 6, 5, 5, 5, 5] + "samples": [5, 14, 8, 15, 11, 29, 16, 37, 10, 31, 7, 9, 15, 14, 21, 22, 12, 10, 5, 6, 5, 5, 6, 5, 6, 6, 5, 5, 5, 5, 5, 5] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32": { "tick_us": { diff --git a/test/scenarios/light/scenario_MoonLive_pipeline.json b/test/scenarios/light/scenario_MoonLive_pipeline.json index 0be5f09b..cf695833 100644 --- a/test/scenarios/light/scenario_MoonLive_pipeline.json +++ b/test/scenarios/light/scenario_MoonLive_pipeline.json @@ -374,14 +374,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 11, - "p95": 185, + "p50": 10, + "p95": 70, "min": 5, - "max": 267, + "max": 185, "n": 32, - "samples": [6, 267, 185, 26, 70, 5, 5, 46, 54, 25, 10, 25, 19, 20, 13, 30, 7, 12, 47, 17, 14, 11, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5] + "samples": [185, 26, 70, 5, 5, 46, 54, 25, 10, 25, 19, 20, 13, 30, 7, 12, 47, 17, 14, 11, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 5] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -536,9 +536,9 @@ "min": 4, "max": 559, "n": 32, - "samples": [6, 32, 559, 17, 97, 5, 4, 25, 18, 19, 11, 19, 20, 15, 12, 32, 7, 9, 14, 21, 10, 9, 5, 5, 5, 5, 5, 5, 6, 5, 5, 5] + "samples": [559, 17, 97, 5, 4, 25, 18, 19, 11, 19, 20, 15, 12, 32, 7, 9, 14, 21, 10, 9, 5, 5, 5, 5, 5, 5, 6, 5, 5, 5, 5, 5] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -682,14 +682,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 10, - "p95": 159, + "p50": 8, + "p95": 36, "min": 5, - "max": 520, + "max": 159, "n": 32, - "samples": [6, 520, 159, 26, 10, 6, 5, 36, 13, 11, 12, 12, 21, 19, 20, 17, 8, 8, 17, 18, 10, 10, 5, 6, 5, 6, 5, 5, 6, 5, 5, 5] + "samples": [159, 26, 10, 6, 5, 36, 13, 11, 12, 12, 21, 19, 20, 17, 8, 8, 17, 18, 10, 10, 5, 6, 5, 6, 5, 5, 6, 5, 5, 5, 6, 5] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -984,14 +984,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 10, - "p95": 34, + "p50": 8, + "p95": 32, "min": 5, - "max": 117, + "max": 34, "n": 32, - "samples": [6, 117, 34, 27, 32, 6, 6, 13, 8, 20, 13, 18, 20, 21, 24, 25, 8, 10, 10, 18, 10, 10, 5, 5, 5, 5, 5, 5, 6, 5, 5, 5] + "samples": [34, 27, 32, 6, 6, 13, 8, 20, 13, 18, 20, 21, 24, 25, 8, 10, 10, 18, 10, 10, 5, 5, 5, 5, 5, 5, 6, 5, 5, 5, 5, 5] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -1126,14 +1126,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 10, - "p95": 96, + "p50": 9, + "p95": 35, "min": 5, "max": 397, "n": 32, - "samples": [6, 96, 35, 26, 19, 7, 5, 10, 22, 397, 12, 17, 18, 22, 24, 11, 8, 9, 13, 24, 10, 11, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5] + "samples": [35, 26, 19, 7, 5, 10, 22, 397, 12, 17, 18, 22, 24, 11, 8, 9, 13, 24, 10, 11, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { diff --git a/test/scenarios/light/scenario_MultiplyModifier_memory_lut.json b/test/scenarios/light/scenario_MultiplyModifier_memory_lut.json index f777e88b..dfa083d2 100644 --- a/test/scenarios/light/scenario_MultiplyModifier_memory_lut.json +++ b/test/scenarios/light/scenario_MultiplyModifier_memory_lut.json @@ -89,14 +89,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 5, - "p95": 165, + "p50": 4, + "p95": 132, "min": 2, "max": 241, "n": 32, - "samples": [3, 165, 15, 12, 3, 3, 9, 132, 241, 7, 8, 18, 17, 13, 4, 19, 4, 5, 21, 14, 6, 6, 3, 3, 3, 2, 3, 3, 3, 2, 2, 3] + "samples": [15, 12, 3, 3, 9, 132, 241, 7, 8, 18, 17, 13, 4, 19, 4, 5, 21, 14, 6, 6, 3, 3, 3, 2, 3, 3, 3, 2, 2, 3, 3, 3] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_MultiplyModifier_pipeline.json b/test/scenarios/light/scenario_MultiplyModifier_pipeline.json index 57880f0b..67fc683c 100644 --- a/test/scenarios/light/scenario_MultiplyModifier_pipeline.json +++ b/test/scenarios/light/scenario_MultiplyModifier_pipeline.json @@ -94,9 +94,9 @@ "min": 117, "max": 302, "n": 32, - "samples": [126, 125, 126, 124, 235, 127, 129, 124, 126, 125, 150, 127, 128, 238, 283, 277, 174, 302, 182, 214, 235, 240, 127, 126, 118, 119, 117, 121, 117, 119, 119, 118] + "samples": [126, 124, 235, 127, 129, 124, 126, 125, 150, 127, 128, 238, 283, 277, 174, 302, 182, 214, 235, 240, 127, 126, 118, 119, 117, 121, 117, 119, 119, 118, 122, 119] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_Trails_ladder.json b/test/scenarios/light/scenario_Trails_ladder.json index 8988d142..17001252 100644 --- a/test/scenarios/light/scenario_Trails_ladder.json +++ b/test/scenarios/light/scenario_Trails_ladder.json @@ -90,10 +90,10 @@ "p95": 13, "min": 10, "max": 13, - "n": 10, - "samples": [11, 10, 10, 10, 11, 11, 11, 11, 11, 13] + "n": 12, + "samples": [11, 10, 10, 10, 11, 11, 11, 11, 11, 13, 12, 11] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -127,10 +127,10 @@ "p95": 57, "min": 40, "max": 57, - "n": 10, - "samples": [57, 40, 42, 41, 45, 45, 45, 45, 45, 47] + "n": 12, + "samples": [57, 40, 42, 41, 45, 45, 45, 45, 45, 47, 46, 46] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -164,10 +164,10 @@ "p95": 208, "min": 160, "max": 208, - "n": 10, - "samples": [208, 160, 166, 165, 182, 178, 180, 184, 180, 183] + "n": 12, + "samples": [208, 160, 166, 165, 182, 178, 180, 184, 180, 183, 186, 179] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -204,14 +204,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 348, - "p95": 358, + "p50": 351, + "p95": 361, "min": 313, - "max": 358, - "n": 10, - "samples": [323, 313, 331, 324, 358, 348, 353, 357, 352, 357] + "max": 361, + "n": 12, + "samples": [323, 313, 331, 324, 358, 348, 353, 357, 352, 357, 361, 351] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -234,14 +234,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 351, + "p50": 353, "p95": 608, "min": 312, "max": 608, - "n": 10, - "samples": [321, 312, 334, 332, 442, 353, 358, 354, 351, 608] + "n": 12, + "samples": [321, 312, 334, 332, 442, 353, 358, 354, 351, 608, 364, 362] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -268,10 +268,10 @@ "p95": 370, "min": 312, "max": 370, - "n": 10, - "samples": [319, 312, 336, 350, 359, 351, 354, 354, 365, 370] + "n": 12, + "samples": [319, 312, 336, 350, 359, 351, 354, 354, 365, 370, 365, 351] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } }, @@ -308,14 +308,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 178, + "p50": 180, "p95": 189, "min": 164, "max": 189, - "n": 10, - "samples": [164, 169, 169, 166, 183, 178, 180, 182, 189, 186] + "n": 12, + "samples": [164, 169, 169, 166, 183, 178, 180, 182, 189, 186, 185, 180] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" } } } diff --git a/test/scenarios/light/scenario_modifier_chain.json b/test/scenarios/light/scenario_modifier_chain.json index 18f0c87e..261638e7 100644 --- a/test/scenarios/light/scenario_modifier_chain.json +++ b/test/scenarios/light/scenario_modifier_chain.json @@ -101,14 +101,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 16, - "p95": 86, + "p50": 14, + "p95": 43, "min": 8, - "max": 163, + "max": 86, "n": 32, - "samples": [163, 17, 36, 86, 20, 23, 20, 28, 31, 8, 9, 16, 14, 17, 12, 18, 15, 24, 32, 43, 17, 16, 8, 8, 8, 8, 8, 10, 9, 8, 9, 8] + "samples": [36, 86, 20, 23, 20, 28, 31, 8, 9, 16, 14, 17, 12, 18, 15, 24, 32, 43, 17, 16, 8, 8, 8, 8, 8, 10, 9, 8, 9, 8, 12, 10] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -161,14 +161,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 14, + "p50": 11, "p95": 49, "min": 6, "max": 86, "n": 32, - "samples": [26, 14, 86, 49, 16, 23, 18, 36, 36, 7, 7, 14, 10, 21, 11, 15, 13, 22, 23, 26, 14, 14, 7, 7, 6, 7, 7, 9, 7, 6, 9, 7] + "samples": [86, 49, 16, 23, 18, 36, 36, 7, 7, 14, 10, 21, 11, 15, 13, 22, 23, 26, 14, 14, 7, 7, 6, 7, 7, 9, 7, 6, 9, 7, 7, 9] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -219,14 +219,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 41, + "p50": 33, "p95": 94, "min": 21, "max": 143, "n": 32, - "samples": [29, 46, 94, 143, 50, 59, 59, 83, 74, 27, 23, 48, 30, 65, 33, 48, 41, 63, 72, 69, 43, 46, 26, 22, 24, 22, 22, 28, 21, 21, 24, 21] + "samples": [94, 143, 50, 59, 59, 83, 74, 27, 23, 48, 30, 65, 33, 48, 41, 63, 72, 69, 43, 46, 26, 22, 24, 22, 22, 28, 21, 21, 24, 21, 27, 24] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -252,14 +252,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 72, + "p50": 55, "p95": 138, "min": 37, "max": 473, "n": 32, - "samples": [62, 78, 116, 473, 98, 116, 90, 127, 123, 47, 47, 72, 52, 88, 55, 77, 73, 112, 110, 138, 77, 83, 47, 47, 43, 43, 44, 41, 42, 40, 44, 37] + "samples": [116, 473, 98, 116, 90, 127, 123, 47, 47, 72, 52, 88, 55, 77, 73, 112, 110, 138, 77, 83, 47, 47, 43, 43, 44, 41, 42, 40, 44, 37, 39, 44] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_modifier_swap.json b/test/scenarios/light/scenario_modifier_swap.json index 39fac74d..fe3f2c97 100644 --- a/test/scenarios/light/scenario_modifier_swap.json +++ b/test/scenarios/light/scenario_modifier_swap.json @@ -151,14 +151,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 16, + "p50": 12, "p95": 87, "min": 8, "max": 246, "n": 32, - "samples": [8, 22, 37, 87, 20, 22, 44, 57, 26, 9, 8, 17, 11, 33, 12, 17, 49, 25, 246, 71, 16, 35, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8] + "samples": [37, 87, 20, 22, 44, 57, 26, 9, 8, 17, 11, 33, 12, 17, 49, 25, 246, 71, 16, 35, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32-eth": { "tick_us": { @@ -295,14 +295,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 42, + "p50": 33, "p95": 160, "min": 20, "max": 321, "n": 32, - "samples": [23, 43, 80, 321, 63, 75, 135, 85, 64, 24, 22, 42, 31, 46, 33, 43, 61, 65, 160, 87, 45, 74, 25, 25, 21, 21, 20, 21, 21, 20, 22, 21] + "samples": [80, 321, 63, 75, 135, 85, 64, 24, 22, 42, 31, 46, 33, 43, 61, 65, 160, 87, 45, 74, 25, 25, 21, 21, 20, 21, 21, 20, 22, 21, 22, 20] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32-eth": { "tick_us": { @@ -439,14 +439,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 16, + "p50": 12, "p95": 76, "min": 8, "max": 513, "n": 32, - "samples": [10, 16, 24, 76, 43, 513, 63, 38, 30, 11, 10, 16, 11, 36, 12, 16, 29, 25, 47, 49, 18, 39, 10, 10, 10, 9, 10, 8, 9, 11, 10, 8] + "samples": [24, 76, 43, 513, 63, 38, 30, 11, 10, 16, 11, 36, 12, 16, 29, 25, 47, 49, 18, 39, 10, 10, 10, 9, 10, 8, 9, 11, 10, 8, 9, 9] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32-eth": { "tick_us": { diff --git a/test/scenarios/light/scenario_perf_full.json b/test/scenarios/light/scenario_perf_full.json index 4923bd34..44902976 100644 --- a/test/scenarios/light/scenario_perf_full.json +++ b/test/scenarios/light/scenario_perf_full.json @@ -85,14 +85,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 4, + "p50": 3, "p95": 11, "min": 1, "max": 22, "n": 32, - "samples": [2, 7, 9, 9, 22, 8, 8, 11, 7, 2, 2, 4, 3, 5, 3, 5, 4, 8, 9, 9, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1] + "samples": [9, 9, 22, 8, 8, 11, 7, 2, 2, 4, 3, 5, 3, 5, 4, 8, 9, 9, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -210,9 +210,9 @@ "min": 1, "max": 51, "n": 32, - "samples": [2, 7, 7, 7, 51, 15, 8, 12, 7, 2, 2, 4, 4, 5, 4, 5, 5, 7, 7, 14, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1] + "samples": [7, 7, 51, 15, 8, 12, 7, 2, 2, 4, 4, 5, 4, 5, 5, 7, 7, 14, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -325,14 +325,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 4, + "p50": 3, "p95": 12, "min": 1, "max": 28, "n": 32, - "samples": [2, 5, 10, 7, 28, 10, 6, 9, 7, 2, 2, 4, 3, 5, 3, 5, 4, 7, 8, 12, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1] + "samples": [10, 7, 28, 10, 6, 9, 7, 2, 2, 4, 3, 5, 3, 5, 4, 7, 8, 12, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -568,14 +568,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 4, + "p50": 3, "p95": 9, "min": 1, "max": 31, "n": 32, - "samples": [2, 7, 7, 8, 9, 6, 6, 7, 7, 2, 2, 4, 3, 7, 3, 5, 4, 7, 8, 31, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1] + "samples": [7, 8, 9, 6, 6, 7, 7, 2, 2, 4, 3, 7, 3, 5, 4, 7, 8, 31, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -686,14 +686,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 4, + "p50": 3, "p95": 26, "min": 1, "max": 70, "n": 32, - "samples": [2, 5, 7, 10, 70, 8, 6, 16, 7, 2, 2, 4, 3, 6, 3, 5, 4, 7, 26, 9, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1] + "samples": [7, 10, 70, 8, 6, 16, 7, 2, 2, 4, 3, 6, 3, 5, 4, 7, 26, 9, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -815,14 +815,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 4, + "p50": 3, "p95": 13, "min": 1, "max": 13, "n": 32, - "samples": [2, 5, 7, 7, 11, 9, 6, 13, 7, 2, 2, 4, 3, 13, 3, 5, 4, 7, 7, 8, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1] + "samples": [7, 7, 11, 9, 6, 13, 7, 2, 2, 4, 3, 13, 3, 5, 4, 7, 7, 8, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -948,14 +948,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 4, + "p50": 3, "p95": 9, "min": 1, "max": 11, "n": 32, - "samples": [2, 5, 7, 7, 9, 7, 7, 8, 7, 2, 2, 4, 3, 7, 3, 5, 4, 7, 11, 8, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1] + "samples": [7, 7, 9, 7, 7, 8, 7, 2, 2, 4, 3, 7, 3, 5, 4, 7, 11, 8, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -1055,14 +1055,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 4, + "p50": 3, "p95": 13, "min": 1, "max": 21, "n": 32, - "samples": [2, 5, 7, 8, 8, 7, 6, 13, 7, 2, 2, 4, 3, 6, 3, 5, 4, 7, 12, 21, 5, 6, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1] + "samples": [7, 8, 8, 7, 6, 13, 7, 2, 2, 4, 3, 6, 3, 5, 4, 7, 12, 21, 5, 6, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32p4rev1-eth": { "tick_us": { @@ -1168,14 +1168,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 4, + "p50": 3, "p95": 11, "min": 1, "max": 26, "n": 32, - "samples": [2, 5, 7, 10, 7, 26, 6, 6, 7, 2, 2, 4, 3, 5, 3, 5, 4, 7, 9, 11, 9, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1] + "samples": [7, 10, 7, 26, 6, 6, 7, 2, 2, 4, 3, 5, 3, 5, 4, 7, 9, 11, 9, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -1292,14 +1292,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 16, + "p50": 15, "p95": 136, "min": 4, "max": 167, "n": 32, - "samples": [9, 19, 34, 37, 136, 167, 23, 36, 27, 10, 9, 16, 13, 20, 15, 19, 19, 29, 27, 38, 35, 19, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4] + "samples": [34, 37, 136, 167, 23, 36, 27, 10, 9, 16, 13, 20, 15, 19, 19, 29, 27, 38, 35, 19, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -1416,14 +1416,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 73, + "p50": 62, "p95": 255, "min": 17, "max": 346, "n": 32, - "samples": [41, 87, 138, 153, 207, 346, 100, 169, 102, 41, 41, 73, 58, 137, 62, 82, 74, 123, 255, 174, 113, 82, 41, 40, 17, 17, 17, 18, 18, 17, 18, 18] + "samples": [138, 153, 207, 346, 100, 169, 102, 41, 41, 73, 58, 137, 62, 82, 74, 123, 255, 174, 113, 82, 41, 40, 17, 17, 17, 18, 18, 17, 18, 18, 18, 18] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -1540,14 +1540,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 303, + "p50": 276, "p95": 1023, "min": 70, "max": 2016, "n": 32, - "samples": [178, 349, 567, 679, 561, 781, 468, 747, 408, 178, 175, 303, 237, 529, 276, 354, 308, 542, 2016, 1023, 414, 368, 174, 173, 71, 70, 70, 74, 74, 71, 70, 73] + "samples": [567, 679, 561, 781, 468, 747, 408, 178, 175, 303, 237, 529, 276, 354, 308, 542, 2016, 1023, 414, 368, 174, 173, 71, 70, 70, 74, 74, 71, 70, 73, 75, 72] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -1677,9 +1677,9 @@ "min": 4, "max": 28, "n": 32, - "samples": [4, 9, 14, 18, 13, 28, 10, 14, 16, 4, 4, 7, 6, 15, 7, 9, 8, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + "samples": [14, 18, 13, 28, 10, 14, 16, 4, 4, 7, 6, 15, 7, 9, 8, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -1796,14 +1796,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 30, + "p50": 27, "p95": 87, "min": 15, "max": 108, "n": 32, - "samples": [18, 35, 86, 60, 58, 87, 47, 108, 44, 18, 17, 30, 23, 39, 27, 35, 30, 59, 72, 57, 35, 37, 17, 17, 15, 15, 15, 16, 16, 16, 16, 16] + "samples": [86, 60, 58, 87, 47, 108, 44, 18, 17, 30, 23, 39, 27, 35, 30, 59, 72, 57, 35, 37, 17, 17, 15, 15, 15, 16, 16, 16, 16, 16, 17, 15] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -1920,14 +1920,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 120, + "p50": 107, "p95": 398, "min": 61, "max": 662, "n": 32, - "samples": [74, 141, 357, 261, 226, 662, 172, 398, 203, 71, 71, 122, 92, 191, 107, 140, 120, 298, 360, 297, 144, 165, 69, 69, 62, 62, 61, 66, 65, 64, 63, 64] + "samples": [357, 261, 226, 662, 172, 398, 203, 71, 71, 122, 92, 191, 107, 140, 120, 298, 360, 297, 144, 165, 69, 69, 62, 62, 61, 66, 65, 64, 63, 64, 64, 63] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -2044,14 +2044,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 489, + "p50": 429, "p95": 2011, "min": 247, "max": 12932, "n": 32, - "samples": [289, 560, 1418, 895, 1286, 2011, 693, 989, 717, 285, 279, 489, 371, 879, 429, 558, 499, 1114, 12932, 1097, 562, 589, 278, 279, 252, 249, 247, 256, 265, 251, 255, 259] + "samples": [1418, 895, 1286, 2011, 693, 989, 717, 285, 279, 489, 371, 879, 429, 558, 499, 1114, 12932, 1097, 562, 589, 278, 279, 252, 249, 247, 256, 265, 251, 255, 259, 267, 257] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -2208,9 +2208,9 @@ "min": 1, "max": 13, "n": 32, - "samples": [1, 2, 3, 4, 3, 3, 3, 3, 3, 1, 1, 2, 1, 8, 2, 2, 2, 5, 13, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + "samples": [3, 4, 3, 3, 3, 3, 3, 1, 1, 2, 1, 8, 2, 2, 2, 5, 13, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32": { "tick_us": { @@ -2332,9 +2332,9 @@ "min": 4, "max": 23, "n": 32, - "samples": [4, 9, 23, 14, 13, 13, 18, 13, 11, 5, 4, 8, 6, 20, 7, 9, 7, 19, 18, 13, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + "samples": [23, 14, 13, 13, 18, 13, 11, 5, 4, 8, 6, 20, 7, 9, 7, 19, 18, 13, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32": { "tick_us": { @@ -2451,14 +2451,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 30, + "p50": 27, "p95": 74, "min": 15, "max": 113, "n": 32, - "samples": [17, 39, 62, 54, 51, 68, 49, 56, 41, 19, 18, 31, 24, 65, 27, 35, 30, 74, 113, 52, 35, 35, 18, 17, 16, 15, 15, 16, 16, 15, 16, 16] + "samples": [62, 54, 51, 68, 49, 56, 41, 19, 18, 31, 24, 65, 27, 35, 30, 74, 113, 52, 35, 35, 18, 17, 16, 15, 15, 16, 16, 15, 16, 16, 16, 16] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32": { "tick_us": { @@ -2575,14 +2575,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 120, + "p50": 109, "p95": 570, "min": 62, "max": 574, "n": 32, - "samples": [71, 145, 570, 221, 206, 245, 168, 235, 164, 74, 75, 178, 92, 245, 109, 139, 120, 370, 574, 268, 151, 141, 70, 70, 63, 63, 62, 66, 66, 63, 64, 65] + "samples": [570, 221, 206, 245, 168, 235, 164, 74, 75, 178, 92, 245, 109, 139, 120, 370, 574, 268, 151, 141, 70, 70, 63, 63, 62, 66, 66, 63, 64, 65, 65, 63] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32": { "tick_us": { diff --git a/test/scenarios/light/scenario_perf_light.json b/test/scenarios/light/scenario_perf_light.json index 4629cfd6..b4a1f64f 100644 --- a/test/scenarios/light/scenario_perf_light.json +++ b/test/scenarios/light/scenario_perf_light.json @@ -101,14 +101,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 4, + "p50": 3, "p95": 10, "min": 1, "max": 10, "n": 32, - "samples": [2, 5, 7, 8, 7, 8, 5, 10, 5, 2, 2, 4, 3, 9, 3, 5, 4, 7, 7, 10, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1] + "samples": [7, 8, 7, 8, 5, 10, 5, 2, 2, 4, 3, 9, 3, 5, 4, 7, 7, 10, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -454,9 +454,9 @@ "min": 1, "max": 4, "n": 32, - "samples": [1, 2, 3, 3, 3, 4, 3, 3, 3, 1, 1, 2, 1, 3, 2, 2, 2, 4, 4, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + "samples": [3, 3, 3, 4, 3, 3, 3, 1, 1, 2, 1, 3, 2, 2, 2, 4, 4, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -578,9 +578,9 @@ "min": 4, "max": 49, "n": 32, - "samples": [4, 9, 23, 16, 11, 13, 11, 19, 10, 4, 4, 7, 6, 10, 7, 9, 7, 14, 49, 14, 9, 10, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + "samples": [23, 16, 11, 13, 11, 19, 10, 4, 4, 7, 6, 10, 7, 9, 7, 14, 49, 14, 9, 10, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { @@ -697,14 +697,14 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 30, + "p50": 27, "p95": 76, "min": 15, "max": 78, "n": 32, - "samples": [18, 35, 51, 76, 42, 64, 42, 58, 41, 18, 17, 30, 23, 61, 27, 35, 30, 52, 78, 54, 36, 35, 17, 17, 15, 15, 15, 16, 16, 15, 15, 17] + "samples": [51, 76, 42, 64, 42, 58, 41, 18, 17, 30, 23, 61, 27, 35, 30, 52, 78, 54, 36, 35, 17, 17, 15, 15, 15, 16, 16, 15, 15, 17, 20, 16] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32s3-n16r8": { "tick_us": { diff --git a/test/scenarios/light/scenario_peripheral_grid_sweep.json b/test/scenarios/light/scenario_peripheral_grid_sweep.json index 4d358efd..3006ed11 100644 --- a/test/scenarios/light/scenario_peripheral_grid_sweep.json +++ b/test/scenarios/light/scenario_peripheral_grid_sweep.json @@ -178,9 +178,9 @@ "min": 4, "max": 20, "n": 32, - "samples": [4, 9, 13, 12, 13, 20, 10, 13, 10, 4, 4, 7, 6, 11, 7, 9, 8, 13, 14, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + "samples": [13, 12, 13, 20, 10, 13, 10, 4, 4, 7, 6, 11, 7, 9, 8, 13, 14, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 4] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -301,13 +301,13 @@ "desktop-macos": { "tick_us": { "p50": 31, - "p95": 74, + "p95": 84, "min": 15, "max": 88, "n": 32, - "samples": [18, 36, 64, 74, 48, 48, 41, 52, 41, 18, 18, 31, 23, 59, 27, 36, 31, 56, 88, 55, 36, 35, 17, 17, 15, 15, 15, 18, 17, 16, 16, 16] + "samples": [64, 74, 48, 48, 41, 52, 41, 18, 18, 31, 23, 59, 27, 36, 31, 56, 88, 55, 36, 35, 17, 17, 15, 15, 15, 18, 17, 16, 16, 16, 84, 17] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -428,13 +428,13 @@ "desktop-macos": { "tick_us": { "p50": 123, - "p95": 241, + "p95": 296, "min": 62, "max": 298, "n": 32, - "samples": [71, 169, 241, 298, 210, 217, 164, 223, 165, 71, 71, 122, 92, 230, 108, 141, 123, 211, 241, 219, 147, 144, 69, 69, 63, 63, 62, 151, 65, 63, 63, 66] + "samples": [241, 298, 210, 217, 164, 223, 165, 71, 71, 122, 92, 230, 108, 141, 123, 211, 241, 219, 147, 144, 69, 69, 63, 63, 62, 151, 65, 63, 63, 66, 296, 66] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -559,9 +559,9 @@ "min": 247, "max": 1401, "n": 32, - "samples": [285, 586, 1394, 1401, 690, 1207, 666, 947, 667, 283, 287, 482, 369, 938, 460, 580, 485, 881, 908, 1089, 581, 575, 277, 278, 251, 247, 250, 590, 264, 252, 255, 260] + "samples": [1394, 1401, 690, 1207, 666, 947, 667, 283, 287, 482, 369, 938, 460, 580, 485, 881, 908, 1089, 581, 575, 277, 278, 251, 247, 250, 590, 264, 252, 255, 260, 872, 259] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -702,14 +702,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 8, - "p95": 35, + "p50": 7, + "p95": 24, "min": 4, - "max": 36, + "max": 35, "n": 32, - "samples": [4, 36, 17, 35, 10, 16, 10, 19, 12, 4, 4, 8, 6, 10, 7, 9, 11, 24, 14, 14, 11, 9, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4] + "samples": [17, 35, 10, 16, 10, 19, 12, 4, 4, 8, 6, 10, 7, 9, 11, 24, 14, 14, 11, 9, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 7, 4] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -829,14 +829,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 30, + "p50": 27, "p95": 98, "min": 15, "max": 121, "n": 32, - "samples": [17, 51, 72, 65, 41, 98, 42, 70, 48, 18, 18, 30, 23, 47, 27, 36, 33, 121, 55, 56, 36, 35, 17, 17, 15, 16, 16, 17, 16, 15, 15, 16] + "samples": [72, 65, 41, 98, 42, 70, 48, 18, 18, 30, 23, 47, 27, 36, 33, 121, 55, 56, 36, 35, 17, 17, 15, 16, 16, 17, 16, 15, 15, 16, 22, 16] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -956,14 +956,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 121, + "p50": 111, "p95": 315, "min": 61, "max": 331, "n": 32, - "samples": [69, 152, 241, 331, 163, 290, 166, 207, 186, 71, 73, 121, 92, 173, 111, 185, 127, 315, 228, 206, 142, 142, 70, 69, 63, 61, 65, 68, 68, 62, 64, 64] + "samples": [241, 331, 163, 290, 166, 207, 186, 71, 73, 121, 92, 173, 111, 185, 127, 315, 228, 206, 142, 142, 70, 69, 63, 61, 65, 68, 68, 62, 64, 64, 83, 64] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -1083,14 +1083,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 481, + "p50": 430, "p95": 1281, "min": 249, "max": 1396, "n": 32, - "samples": [280, 571, 944, 1281, 626, 1125, 661, 1396, 739, 286, 285, 481, 369, 640, 430, 749, 509, 863, 881, 895, 560, 564, 279, 279, 253, 249, 310, 316, 263, 254, 254, 259] + "samples": [944, 1281, 626, 1125, 661, 1396, 739, 286, 285, 481, 369, 640, 430, 749, 509, 863, 881, 895, 560, 564, 279, 279, 253, 249, 310, 316, 263, 254, 254, 259, 308, 260] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -1231,14 +1231,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 8, + "p50": 7, "p95": 18, "min": 4, "max": 53, "n": 32, - "samples": [4, 9, 15, 13, 9, 18, 10, 53, 10, 4, 4, 8, 6, 9, 7, 9, 8, 13, 15, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + "samples": [15, 13, 9, 18, 10, 53, 10, 4, 4, 8, 6, 9, 7, 9, 8, 13, 15, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -1358,14 +1358,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 30, + "p50": 27, "p95": 74, "min": 15, "max": 138, "n": 32, - "samples": [17, 35, 51, 59, 35, 74, 41, 138, 41, 18, 18, 30, 23, 35, 27, 35, 31, 53, 53, 55, 36, 35, 17, 17, 16, 15, 15, 16, 16, 16, 15, 16] + "samples": [51, 59, 35, 74, 41, 138, 41, 18, 18, 30, 23, 35, 27, 35, 31, 53, 53, 55, 36, 35, 17, 17, 16, 15, 15, 16, 16, 16, 15, 16, 16, 16] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -1485,14 +1485,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 120, + "p50": 107, "p95": 275, "min": 62, "max": 294, "n": 32, - "samples": [70, 141, 225, 217, 148, 275, 165, 265, 294, 72, 71, 120, 92, 152, 107, 141, 123, 209, 232, 222, 140, 140, 69, 70, 62, 62, 62, 67, 66, 64, 63, 64] + "samples": [225, 217, 148, 275, 165, 265, 294, 72, 71, 120, 92, 152, 107, 141, 123, 209, 232, 222, 140, 140, 69, 70, 62, 62, 62, 67, 66, 64, 63, 64, 86, 64] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -1612,14 +1612,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 436, + "p50": 428, "p95": 995, "min": 247, "max": 1188, "n": 32, - "samples": [278, 634, 1188, 914, 558, 883, 660, 995, 918, 289, 286, 436, 368, 781, 428, 570, 439, 852, 834, 938, 564, 561, 278, 274, 252, 247, 251, 277, 262, 251, 254, 252] + "samples": [1188, 914, 558, 883, 660, 995, 918, 289, 286, 436, 368, 781, 428, 570, 439, 852, 834, 938, 564, 561, 278, 274, 252, 247, 251, 277, 262, 251, 254, 252, 311, 255] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -1765,9 +1765,9 @@ "min": 4, "max": 20, "n": 32, - "samples": [4, 9, 14, 14, 11, 20, 10, 14, 13, 4, 4, 7, 6, 11, 7, 9, 7, 13, 13, 14, 9, 10, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + "samples": [14, 14, 11, 20, 10, 14, 13, 4, 4, 7, 6, 11, 7, 9, 7, 13, 13, 14, 9, 10, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -1892,9 +1892,9 @@ "min": 15, "max": 144, "n": 32, - "samples": [18, 37, 144, 55, 41, 50, 42, 64, 52, 18, 18, 27, 23, 47, 27, 35, 28, 52, 51, 52, 35, 36, 18, 17, 16, 15, 15, 17, 16, 16, 15, 16] + "samples": [144, 55, 41, 50, 42, 64, 52, 18, 18, 27, 23, 47, 27, 35, 28, 52, 51, 52, 35, 36, 18, 17, 16, 15, 15, 17, 16, 16, 15, 16, 17, 15] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -2014,14 +2014,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 109, + "p50": 107, "p95": 321, "min": 61, "max": 447, "n": 32, - "samples": [72, 148, 447, 211, 153, 321, 165, 228, 207, 76, 71, 110, 92, 243, 107, 140, 109, 206, 203, 208, 141, 144, 69, 68, 62, 62, 61, 64, 65, 63, 64, 63] + "samples": [447, 211, 153, 321, 165, 228, 207, 76, 71, 110, 92, 243, 107, 140, 109, 206, 203, 208, 141, 144, 69, 68, 62, 62, 61, 64, 65, 63, 64, 63, 69, 64] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { @@ -2141,14 +2141,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 437, + "p50": 429, "p95": 1612, "min": 246, "max": 1685, "n": 32, - "samples": [279, 586, 1685, 886, 594, 1612, 850, 899, 784, 287, 285, 484, 368, 874, 429, 568, 437, 919, 811, 847, 581, 606, 279, 281, 251, 248, 246, 258, 271, 249, 255, 253] + "samples": [1685, 886, 594, 1612, 850, 899, 784, 287, 285, 484, 368, 874, 429, 568, 437, 919, 811, 847, 581, 606, 279, 281, 251, 248, 246, 258, 271, 249, 255, 253, 276, 251] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "desktop-windows": { "tick_us": { diff --git a/test/scenarios/light/scenario_peripheral_switch.json b/test/scenarios/light/scenario_peripheral_switch.json index 12568a3b..2ec622d8 100644 --- a/test/scenarios/light/scenario_peripheral_switch.json +++ b/test/scenarios/light/scenario_peripheral_switch.json @@ -172,14 +172,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 8, + "p50": 7, "p95": 16, "min": 4, "max": 17, "n": 32, - "samples": [4, 9, 13, 14, 11, 14, 10, 14, 16, 4, 4, 8, 6, 13, 9, 9, 7, 14, 13, 17, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + "samples": [13, 14, 11, 14, 10, 14, 16, 4, 4, 8, 6, 13, 9, 9, 7, 14, 13, 17, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32p4rev1-eth": { "tick_us": { @@ -298,9 +298,9 @@ "min": 4, "max": 29, "n": 32, - "samples": [4, 9, 29, 16, 10, 14, 15, 14, 14, 4, 4, 8, 6, 11, 7, 10, 7, 13, 13, 16, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + "samples": [29, 16, 10, 14, 15, 14, 14, 4, 4, 8, 6, 11, 7, 10, 7, 13, 13, 16, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32p4rev1-eth": { "tick_us": { @@ -419,9 +419,9 @@ "min": 4, "max": 22, "n": 32, - "samples": [4, 9, 22, 14, 10, 13, 14, 17, 15, 4, 4, 8, 6, 11, 7, 9, 7, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + "samples": [22, 14, 10, 13, 14, 17, 15, 4, 4, 8, 6, 11, 7, 9, 7, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32p4rev1-eth": { "tick_us": { @@ -534,14 +534,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 8, + "p50": 7, "p95": 17, "min": 4, "max": 17, "n": 32, - "samples": [4, 9, 13, 14, 10, 14, 17, 16, 17, 4, 4, 8, 6, 9, 9, 9, 7, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4] + "samples": [13, 14, 10, 14, 17, 16, 17, 4, 4, 8, 6, 9, 9, 9, 7, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32p4rev1-eth": { "tick_us": { @@ -655,14 +655,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 8, + "p50": 7, "p95": 17, "min": 4, "max": 65, "n": 32, - "samples": [4, 9, 65, 15, 10, 17, 13, 13, 17, 4, 4, 8, 6, 10, 10, 9, 7, 13, 13, 15, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + "samples": [65, 15, 10, 17, 13, 13, 17, 4, 4, 8, 6, 10, 10, 9, 7, 13, 13, 15, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32p4rev1-eth": { "tick_us": { @@ -792,14 +792,14 @@ }, "desktop-macos": { "tick_us": { - "p50": 8, + "p50": 7, "p95": 18, "min": 4, "max": 24, "n": 32, - "samples": [4, 9, 24, 13, 10, 13, 13, 14, 16, 4, 4, 8, 6, 11, 9, 9, 7, 13, 14, 18, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + "samples": [24, 13, 10, 13, 13, 14, 16, 4, 4, 8, 6, 11, 9, 9, 7, 13, 14, 18, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] }, - "last_updated": "2026-09-05" + "last_updated": "2026-09-06" }, "esp32p4rev1-eth": { "tick_us": { diff --git a/test/unit/core/unit_MoonBaseContract.cpp b/test/unit/core/unit_MoonBaseContract.cpp index 3e145fd2..cb816c29 100644 --- a/test/unit/core/unit_MoonBaseContract.cpp +++ b/test/unit/core/unit_MoonBaseContract.cpp @@ -81,3 +81,40 @@ TEST_CASE("NetworkModule.json keeps MoonBase's scraped keys inside its 2048-byte std::filesystem::remove_all(tmpRoot); mm::platform::fsSetRoot("."); } + +// The OTA routes are the OTHER cross-image contract, and the one with two speakers: the browser +// drives an update by talking to the application, which hands over to MoonBase mid-flight, so the +// page keeps calling the same paths against a different image. The two therefore have to agree on +// the names, and nothing else pins that: MoonBase is a standalone project sharing no sources, so a +// route renamed on one side compiles cleanly on both and fails only on a device, halfway through +// an update, with the app already gone. +// +// They diverged once (MoonBase served `/install` and `/install-url` while the app served +// `/api/firmware/upload` and `/api/firmware/url`), which cost a debugging round: the app answers an +// unknown large POST with 413, so pushing to the wrong name reads as "the image is too big" rather +// than "no such route". This test reads both sources and requires the shared vocabulary. +TEST_CASE("the two boot images serve the OTA routes under the same names") { + // Resolved from this file rather than the working directory: ctest runs the binary from the + // build tree, where a relative path finds nothing. + const std::filesystem::path repo = + std::filesystem::path(__FILE__).parent_path().parent_path().parent_path().parent_path(); + const auto read = [&](const char* rel) { + std::ifstream f(repo / rel); + REQUIRE_MESSAGE(f.good(), "cannot open " << rel); + return std::string((std::istreambuf_iterator(f)), std::istreambuf_iterator()); + }; + const std::string moonbase = read("moonbase/main/moonbase_main.cpp"); + const std::string app = read("src/core/HttpServerModule.cpp"); + + // Push an image, and install from a URL: the two routes a browser calls across the handover. + for (const char* route : {"/api/firmware/upload", "/api/firmware/url"}) { + CHECK_MESSAGE(moonbase.find(route) != std::string::npos, "MoonBase must serve " << route); + CHECK_MESSAGE(app.find(route) != std::string::npos, "the app must serve " << route); + } + + // And the old names stay gone on both sides: a leftover would be a second way to say one + // thing, which is what this test exists to prevent. + for (const char* gone : {"\"POST /install\"", "\"POST /install-url\"", "'/install'", "'/install-url'"}) { + CHECK_MESSAGE(moonbase.find(gone) == std::string::npos, "MoonBase still references " << gone); + } +} diff --git a/test/unit/light/unit_AudioBands.cpp b/test/unit/light/unit_AudioBands.cpp index 239a88ae..c3979b72 100644 --- a/test/unit/light/unit_AudioBands.cpp +++ b/test/unit/light/unit_AudioBands.cpp @@ -6,6 +6,7 @@ #include "platform/platform.h" // platform::audioFft (desktop naive DFT) #include +#include // std::memcpy: clang finds it transitively, GCC does not (CI's sanitizer builds) #include #include From 7f46574ac331a7a27f48348efe234363597906dd Mon Sep 17 00:00:00 2001 From: ewowi Date: Sun, 6 Sep 2026 12:34:57 +0200 Subject: [PATCH 3/4] Make the PDM microphone work, and stop the learner amplifying silence MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The QuinLED Dig-Next-2's onboard microphone works: it is a two-wire PDM part, which the I2S seam did not support. Automatic levels now tune with one control instead of four, and a silence gate stops a quiet room being amplified to full scale. Verified on a Dig-Next-2 (PDM), a testbench S3 (INMP441) and an Olimex Gateway, with the classic-ESP32 LED output still flicker-free. Performance: desktop tick 25-28us on the audio scenario (p50 30 -> 28us, p95 120 -> 106us). Flash: esp32 1,975 KB (79% of slot), esp32-pico 2,022 KB (66%), esp32s3-n16r8 2,017 KB (49%), esp32p4rev1-eth 1,910 KB (47%), esp32s31 2,294 KB (56%). The large per-target deltas are the first fresh measurements since 2026-08-30, not this change: see Scripts/MoonDeck. Core - AudioService: PDM microphones via a `micMode` control (I2S / PDM), reusing wsPin as the clock and sdPin as the data line, and hiding the two clock pins a PDM part does not have. - The PDM read scales int16 to int32 full scale. A hotter gain was tried and clipped continuously: at 1048576 the clip point is an int16 of 2047 while the part's own quiet-room floor already peaks near 3500, and clipping is broadband, so every band showed noise and onsets fired in a silent room. - BandConditioner gains a silence gate off `floor`: below it a band reads zero and is NOT learned from. Without it the lift is dominated by relocating a quiet band up into the display window, which happened to an empty room as eagerly as to music (measured: the raw path read flux 0-3 while the learner made 33-68 of it). Learning from silence also drags the floor table down, so the next wobble reads as music. - The level path levels itself in automatic mode (LevelConditioner), the other half of the same decision, so the manual sliders are genuinely manual-only. - `strength` and `maxBoost` become constants. Both act on the learned per-band range, which is already normalized per rig, so one value serves every source; neither had a visible effect once silence was gated. - `gain` scales the level's own window rather than being used raw: the bands read a per-bin peak where the level reads a block RMS, and one number sized both windows badly enough to leave the VU in the bottom third of the meter. - The follower minimums split (3 dB bands, 20 dB level). A single 12 dB value squashed real music: a band swinging 6 dB filled half the display. - The spectrum starts at 40 Hz. The first band covered 11-22 Hz, below hearing, so it could only ever hold mains hum, DC drift and rumble. Light domain - AudioSpectrum's VU bar reads the raw level, not the smoothed one: it is the audio test instrument and wants maximum response. Other effects keep the calm smoothed VU. - RmtLedDriver drains a frame in flight before prepare() rebuilds: a config change can land mid-frame while resizeSymbols() frees the buffer the peripheral is still reading. - rmt_hi_vector.S aligns the handler stack and save area to 16 bytes, which the Xtensa windowed ABI requires of SP and `.data` does not guarantee. Scripts/MoonDeck - repo-health measured a target only when its binary was newer than every source, so an unbuilt target carried its old number forever and printed as a normal row: esp32p4rev1-eth and esp32s31 held byte-identical values across eight commits, then landed the accumulated growth as one jump. Measured now means built within 12 hours, and carries are dated and aged, so the Built column reads yes, carried Nd, or STALE past a week. Tests - The quiet room, the silence gate, and a soft passage keeping its dynamics. - A quiet room and one a hundred times louder read the same in automatic mode. - 1848 cases pass; the audio scenario records its observations. Docs/CI - MIGRATING: the removed controls and floor's new meaning as the silence threshold, with what to re-set. - The Audio catalog card documents micMode, levels, and the floor/gain split. - Backlogged: the RMT int_ena read-modify-write race between the render task and the level-5 handler. Real but never observed, and left unfixed deliberately, because both obvious guards were tried on hardware and failed: portENTER_CRITICAL_ISR deadlocks (the handler runs at level 5 precisely to preempt critical sections) and a compare-and-swap boot-loops the board (S32C1I addresses only data memory, not a peripheral register). Reviews - 🐇 CodeRabbit RMT findings, from the parked stash: .S alignment and the prepare() drain applied; the ISR spinlock, the deinit wait and the init spin-wait rejected as unsafe above level 3, with the race they targeted backlogged instead. Co-Authored-By: Claude Opus 5 (1M context) --- docs/MIGRATING.md | 24 ++++ docs/backlog/backlog-light.md | 2 + docs/metrics/repo-health.json | 66 ++++++----- docs/metrics/repo-health.md | 110 +++++++++--------- docs/moonmodules/core/services.md | 5 +- moondeck/check/repo_health.py | 99 ++++++++++++---- src/core/AudioBands.h | 46 +++++++- src/core/AudioLevel.h | 90 +++++++++++++- src/core/AudioService.h | 70 ++++++++--- src/light/drivers/RmtLedDriver.h | 9 ++ src/light/effects/AudioSpectrumEffect.h | 9 +- src/platform/esp32/platform_esp32_i2s.cpp | 85 +++++++++++++- src/platform/esp32/rmt_hi_vector.S | 6 + src/platform/platform.h | 18 ++- .../light/scenario_Audio_mutation.json | 20 ++-- test/unit/light/unit_AudioBands.cpp | 95 ++++++++++++++- test/unit/light/unit_AudioLevel.cpp | 4 + 17 files changed, 602 insertions(+), 156 deletions(-) diff --git a/docs/MIGRATING.md b/docs/MIGRATING.md index 6151c989..4135684c 100644 --- a/docs/MIGRATING.md +++ b/docs/MIGRATING.md @@ -24,6 +24,30 @@ projectMM ships **no migration code**: the persistence layer is robust by defaul ## Unreleased (`next-iteration`) +### Audio: automatic levels tune with one control, and `strength` / `maxBoost` are gone + +**Action: re-set `floor` on a device whose microphone you had tuned.** +Affects any device running the Audio module with a local microphone or line-in. + +`levels = automatic` exposed four sliders (`floor`, `gain`, `strength`, `maxBoost`) for what is one +decision. Two of them are now constants and the mode is tuned with `floor` alone. + +`strength` and `maxBoost` acted on the learner's per-band range, which the conditioner has already +normalized per rig, so one value serves every source: a PDM microphone, an INMP441 and a line-in all +look the same by the time they reach it. They are fixed at the values that measured best on the +bench (4 and 24 dB). Persisted keys for both are ignored on load, so nothing has to be cleaned up. + +`floor` is what changes meaning, and why re-setting it is worth a minute. It is now the **silence +threshold** in both modes: below it a band reads zero and the learner does not learn from it. That +is what stops a quiet room being amplified to full scale, but it also means a `floor` tuned under +the old behavior can now gate audible sound. Raise it until a silent room reads still, then stop; +there is no second knob to compensate with. `gain` remains manual-only and keeps its meaning. + +Two behavior changes ride along and need no action. The spectrum now starts at 40 Hz rather than +~11 Hz, dropping a first band that could only ever hold mains hum, DC drift and rumble. And +AudioSpectrum's VU bar reads the raw level instead of the smoothed one, because it is the audio +test instrument and wants maximum response; every other effect keeps the calm smoothed VU. + ### MoonBase serves the OTA routes under the application's names **Action: nothing on most devices; a serial flash on a MoonBase device updated from a browser.** diff --git a/docs/backlog/backlog-light.md b/docs/backlog/backlog-light.md index 2e7f2e39..5e6def8c 100644 --- a/docs/backlog/backlog-light.md +++ b/docs/backlog/backlog-light.md @@ -639,6 +639,8 @@ For driving **lots of LEDs**, internal SRAM is the scarce resource and the paral The LED-driver increments **shipped**: increment 1 (RMT/WS2812B single-strand on classic ESP32 — [`RmtLedDriver.h`](../../src/light/drivers/RmtLedDriver.h), `RmtSymbol.h`, `platform_esp32_rmt.cpp`) and increment 2 (2a multi-pin RMT, 2b parallel LCD_CAM on the S3 — [`LcdLedDriver.h`](../../src/light/drivers/LcdLedDriver.h) via [`ParallelLedDriver.h`](../../src/light/drivers/ParallelLedDriver.h), `platform_esp32_lcd.cpp`), all with host + on-board-loopback tests, hardware-proven. The locked decisions, file-by-file phases, the WiFi-flicker test-rig analysis, and the bench deviations (8-GPIO i80 bus, 2.67 MHz slot clock, SOC-macro gate, real-frame loopback) are in [lessons.md](../history/lessons.md), the [driver docs](../moonmodules/light/moxygen/RmtLedDriver.md), and the [analysis docs](../history/leddriver-analysis-top-down.md). What remains here is only the work that has **not** shipped and is tracked nowhere else. +- **RMT `int_ena` read-modify-write race (classic ESP32, level-5 refill).** `RMT.int_ena` is one register written by both the render task (arming a frame) and the level-5 refill handler (disarming a finished one), through `rmt_ll_enable_interrupt`'s `|=` / `&=`. A handler firing between the task's read and its write loses the task's update, leaving a channel armed or silent. Never observed: the window is a few instructions and the two writes rarely target one channel, so the symptom would be a stuck channel after hours rather than anything the bench shows. Left unfixed deliberately, because the two obvious guards are both wrong here and each was tried on hardware: `portENTER_CRITICAL_ISR` spins on a lock the level-5 handler has just preempted (it runs above `XCHAL_EXCM_LEVEL` 3 by design) and deadlocks the core, and a compare-and-swap builds but crashes, since `S32C1I` addresses only data memory and a peripheral register raises `EXCCAUSE` 3. The remaining candidate is masking to level 5 (`XTOS_SET_INTLEVEL`) around the two-instruction update, which needs no lock and no atomic bus access; it compiles but is unproven on hardware and wants a soak before it displaces firmware that is flicker-free on two boards. + - **sigrok/fx2lafw cross-check + MoonDeck "LED driver test" Python script** — the independent-clock proof and the run-from-MoonDeck flow ([analysis §5.3](../history/leddriver-analysis-top-down.md)). The on-board RMT-RX loopback (shipped) is the cheap CI correctness gate but a *compromised witness* for WiFi-induced flicker — the RX capture runs on the same ESP32 whose WiFi causes the glitch. The real flicker test is a **sustained capture (seconds) with WiFi associated + a packet flood**, decoding every frame for a byte-slip or reset-gap deviation; it validates the SHIPPED render↔encode split's WiFi isolation (drivers tick on core 1; WiFi lives on core 0). A DSLogic Plus (100 MS/s) upgrade is reactive — only if a flicker reproduces that 24 MS/s can't resolve. - **Chunked transfer (Step 4) — the 16K lever, and now the ONE mechanism behind three separate ceilings.** Split a frame into transactions the DMA can actually swallow, feeding them back-to-back. It was scoped as a Parlio fix; it is really a **core-path** fix, and the shift-register expander is only its third beneficiary. diff --git a/docs/metrics/repo-health.json b/docs/metrics/repo-health.json index c9b7c9e2..589a2d57 100644 --- a/docs/metrics/repo-health.json +++ b/docs/metrics/repo-health.json @@ -1,25 +1,33 @@ { - "commit": "6e9c6605", + "commit": "5ba44197", "flash": { - "esp32s3-n16r8": 1998944, - "desktop": 1854888, - "esp32": 1923264, - "esp32p4rev1-eth": 1675216, + "esp32s3-n16r8": 2065376, + "desktop": 1855032, + "esp32": 2021968, + "esp32p4rev1-eth": 1955408, "esp32p4rev1-eth-wifi": 2019392, "esp32s3-n8r8": 1971008, - "esp32s31": 2105072, + "esp32s31": 2348592, "esp32-16mb": 1809472, "esp32-eth": 1397456, "esp32-wrover": 1843760, "qemu": 1383648, "esp32p4rev3-eth": 1643760, "esp32s3-zero": 1788624, - "esp32-pico": 2066240 + "esp32-pico": 2070048 + }, + "measured": { + "esp32p4rev1-eth": "2026-09-06", + "esp32s31": "2026-09-06", + "esp32": "2026-09-06", + "esp32-pico": "2026-09-06", + "esp32s3-n16r8": "2026-09-06", + "desktop": "2026-09-06" }, "perf": { "desktop": { - "tick_us": 124, - "fps": 8064, + "tick_us": 154, + "fps": 6493, "scenario_p50": { "Layer_base_pipeline": { "p50": 94, @@ -158,8 +166,8 @@ }, "Audio_mutation": { "desktop-macos": { - "p50": 30, - "p95": 120, + "p50": 28, + "p95": 106, "n": 32, "last": "2026-09-06" }, @@ -685,54 +693,54 @@ } }, "loc": { - "core": 25332, - "light": 34548, - "platform": 17770, + "core": 25486, + "light": 34558, + "platform": 17863, "ui": 10204, - "test": 56060, - "moondeck": 22512 + "test": 56155, + "moondeck": 22563 }, "comments": { "core": { - "lines": 10143, + "lines": 10222, "ratio": 0.433 }, "light": { - "lines": 13160, + "lines": 13166, "ratio": 0.419 }, "platform": { - "lines": 6223, - "ratio": 0.384 + "lines": 6269, + "ratio": 0.385 }, "ui": { "lines": 3014, "ratio": 0.312 }, "test": { - "lines": 10468, + "lines": 10501, "ratio": 0.214 }, "moondeck": { - "lines": 3651, - "ratio": 0.185 + "lines": 3670, + "ratio": 0.186 } }, "tests": { - "cases": 1945, + "cases": 1948, "scenarios": 27 }, "docs": { "md_files": 219, - "md_lines": 36540, + "md_lines": 36569, "plans_files": 115, - "backlog_lines": 6977, + "backlog_lines": 6979, "lessons_lines": 678, - "claude_md_lines": 250 + "claude_md_lines": 259 }, "complexity": { - "functions": 3427, - "over_threshold": 232, + "functions": 3429, + "over_threshold": 238, "worst_ccn": 108 } } diff --git a/docs/metrics/repo-health.md b/docs/metrics/repo-health.md index b92cec1e..334712c5 100644 --- a/docs/metrics/repo-health.md +++ b/docs/metrics/repo-health.md @@ -1,6 +1,6 @@ # Repo health -Measured at `6e9c6605`. Generated by [`moondeck/check/repo_health.py`](../../moondeck/check/repo_health.py) on every KPI-gate run. **Do not edit by hand.** +Measured at `5ba44197`. 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,61 +8,61 @@ Current state only; the trend is this file's git history (`git log -p docs/metri | Target | Flash | Capacity | Used | Built | |---|---:|---:|---:|:--:| -| desktop | 1,811 KB (+159 KB) ⚠ | - | - | yes | -| esp32 | 1,878 KB | 2,496 KB | 75% | carried | -| esp32-16mb | 1,767 KB | - | - | carried | -| esp32-eth | 1,365 KB | - | - | carried | -| esp32-pico | 2,018 KB | 3,072 KB | 66% | yes | -| esp32-wrover | 1,801 KB | - | - | carried | -| esp32p4rev1-eth | 1,636 KB | 4,096 KB | 40% | carried | -| esp32p4rev1-eth-wifi | 1,972 KB | - | - | carried | -| esp32p4rev3-eth | 1,605 KB | - | - | carried | -| esp32s3-n16r8 | 1,952 KB | 4,096 KB | 48% | carried | -| esp32s3-n8r8 | 1,925 KB | - | - | carried | -| esp32s3-zero | 1,747 KB | - | - | carried | -| esp32s31 | 2,056 KB | 4,096 KB | 50% | carried | -| qemu | 1,351 KB | - | - | carried | - -`Built: carried` means that firmware was NOT rebuilt this run and its number is the previous one, so an absent delta says nothing about the change. `Used` is against the app slot in the firmware's own partition table. +| desktop | 1,812 KB (+0 KB) ⚠ | - | - | yes | +| esp32 | 1,975 KB (+96 KB) ⚠ | 2,496 KB | 79% | yes | +| esp32-16mb | 1,767 KB | - | - | carried (age?) | +| esp32-eth | 1,365 KB | - | - | carried (age?) | +| esp32-pico | 2,022 KB (+4 KB) ⚠ | 3,072 KB | 66% | yes | +| esp32-wrover | 1,801 KB | - | - | carried (age?) | +| esp32p4rev1-eth | 1,910 KB (+274 KB) ⚠ | 4,096 KB | 47% | yes | +| esp32p4rev1-eth-wifi | 1,972 KB | - | - | carried (age?) | +| esp32p4rev3-eth | 1,605 KB | - | - | carried (age?) | +| esp32s3-n16r8 | 2,017 KB (+65 KB) ⚠ | 4,096 KB | 49% | yes | +| esp32s3-n8r8 | 1,925 KB | - | - | carried (age?) | +| esp32s3-zero | 1,747 KB | - | - | carried (age?) | +| esp32s31 | 2,294 KB (+238 KB) ⚠ | 4,096 KB | 56% | yes | +| qemu | 1,351 KB | - | - | carried (age?) | + +`Built: yes` was measured this run. `carried Nd` was NOT rebuilt and its number is N days old, so an absent delta says nothing about the change. **STALE** marks a carry older than 7 days: the number has gone unchecked long enough that growth will surface later as one jump, blamed on whichever commit happens to rebuild that target. `Used` is against the app slot in the firmware's own partition table. ## Render performance | Target | Tick | FPS | |---|---:|---:| -| desktop | 124 µs (−11 µs) ✓ | 8,064 (+657) ✓ | +| desktop | 154 µs (+30 µs) ⚠ | 6,493 (−1,571) ⚠ | | esp32 | 8,354 µs | 119 | ### Scenario tick by target (p50 of each sample window) | Scenario | desktop-macos | desktop-windows | esp32 | esp32s3-n16r8 | esp32p4rev1-eth | esp32s31 | esp32-eth | esp32-eth-wifi | unknown | |---|---|---|---|---|---|---|---|---|---| -| Audio_mutation | 30 (−15) ✓ | 40 ? | 13,152 | 47 ? | - | - | - | - | - | -| Aurora_fps | 1,506 (+569) ⚠ | - | - | - | - | - | - | - | - | -| Driver_mutation | 32 (−17) ✓ | 42 ? | 12,812 | 39 ? | - | - | - | - | - | -| Effects_composition | 366 (−131) ✓ | 549 ? | - | - | - | - | - | - | - | -| Fields_polar_lut | 1,228 (+247) ⚠ | - | - | - | - | - | - | - | - | +| Audio_mutation | 28 (−2) ✓ | 40 ? | 13,152 | 47 ? | - | - | - | - | - | +| Aurora_fps | 1,506 | - | - | - | - | - | - | - | - | +| Driver_mutation | 32 | 42 ? | 12,812 | 39 ? | - | - | - | - | - | +| Effects_composition | 366 | 549 ? | - | - | - | - | - | - | - | +| Fields_polar_lut | 1,228 | - | - | - | - | - | - | - | - | | Fluid_solver | 222 | - | - | - | - | - | - | - | - | -| GridBlacks_blackpixel | 5 (−2) ✓ | 8 ? | 269 ? | 267 ? | - | - | - | - | - | -| GridLayout_resize | 128 (−4) ✓ | 219 ? | 1,352 ? | 1,011 ? | 1,143 ? | - | 95,771 ? | 82,231 ? | - | -| Layer_base_pipeline | 94 (−13) ✓ | 118 ? | - | - | - | - | - | - | - | -| Layer_memory_1to1 | 9 (−1) ✓ | 1 ? | - | - | - | - | - | - | - | -| Layouts_mutation | 138 (−33) ✓ | 111 ? | 13,692 | 45 ? | - | - | 27 ? | - | - | +| GridBlacks_blackpixel | 5 | 8 ? | 269 ? | 267 ? | - | - | - | - | - | +| GridLayout_resize | 128 | 219 ? | 1,352 ? | 1,011 ? | 1,143 ? | - | 95,771 ? | 82,231 ? | - | +| Layer_base_pipeline | 94 | 118 ? | - | - | - | - | - | - | - | +| Layer_memory_1to1 | 9 | 1 ? | - | - | - | - | - | - | - | +| Layouts_mutation | 138 | 111 ? | 13,692 | 45 ? | - | - | 27 ? | - | - | | MoonLiveEffect_controls | 11 ? | - | 12,901 | 4,624 ? | - | - | - | - | - | -| MoonLiveEffect_livescript | 9 (−5) ✓ | - | 13,433 ? | 8,255 ? | 11,336 ? | - | - | - | - | -| MoonLive_pipeline | 10 (−1) ✓ | 1 ? | 9,604 ? | 3,278 ? | - | 11,398 ? | - | - | 4,393 ? | -| MoonModule_control_change | 143 (+12) ⚠ | 262 ? | 212 ? | 166 ? | 165 ? | - | 111,731 ? | 89,895 ? | - | +| MoonLiveEffect_livescript | 9 | - | 13,433 ? | 8,255 ? | 11,336 ? | - | - | - | - | +| MoonLive_pipeline | 10 | 1 ? | 9,604 ? | 3,278 ? | - | 11,398 ? | - | - | 4,393 ? | +| MoonModule_control_change | 143 | 262 ? | 212 ? | 166 ? | 165 ? | - | 111,731 ? | 89,895 ? | - | | MqttModule_haDiscovery_toggle | 3 ? | - | 36 ? | 36 ? | - | - | - | - | - | -| MultiplyModifier_memory_lut | 4 (−2) ✓ | 3 ? | - | - | - | - | - | - | - | -| MultiplyModifier_pipeline | 126 (−3) ✓ | 225 ? | - | - | - | - | - | - | - | +| MultiplyModifier_memory_lut | 4 | 3 ? | - | - | - | - | - | - | - | +| MultiplyModifier_pipeline | 126 | 225 ? | - | - | - | - | - | - | - | | NetworkModule_eth_reconfigure | - | - | 1,169 ? | 97,843 ? | - | - | - | - | - | | NetworkModule_mdns_toggle | 13 ? | - | 36 ? | 36 ? | 21 ? | - | 109,767 ? | 93,963 ? | - | | Trails_ladder | 353 | - | - | - | - | - | - | - | - | -| modifier_chain | 55 (−23) ✓ | 69 ? | 13,337 | - | - | - | - | - | - | -| modifier_swap | 33 (−13) ✓ | 41 ? | 12,250 | 354 ? | 362 ? | - | 1,010 ? | - | - | -| perf_full | 429 (−160) ✓ | 592 ? | 10,392 | 16,915 ? | 17,433 ? | - | - | - | - | -| perf_light | 27 (−8) ✓ | 35 ? | 2,183 | 2,485 ? | 2,038 ? | - | - | - | - | -| peripheral_grid_sweep | 485 (−101) ✓ | 649 ? | 6,991 ? | - | 11,495 ? | 12,273 ? | - | - | - | -| peripheral_switch | 7 (−2) ✓ | 9 ? | 437 | 46 ? | 217 ? | - | - | - | - | +| modifier_chain | 55 | 69 ? | 13,337 | - | - | - | - | - | - | +| modifier_swap | 33 | 41 ? | 12,250 | 354 ? | 362 ? | - | 1,010 ? | - | - | +| perf_full | 429 | 592 ? | 10,392 | 16,915 ? | 17,433 ? | - | - | - | - | +| perf_light | 27 | 35 ? | 2,183 | 2,485 ? | 2,038 ? | - | - | - | - | +| peripheral_grid_sweep | 485 | 649 ? | 6,991 ? | - | 11,495 ? | 12,273 ? | - | - | - | +| peripheral_switch | 7 | 9 ? | 437 | 46 ? | 217 ? | - | - | - | - | Microseconds. `?` marks a cell backed by fewer than 4 samples, which is a first impression rather than a percentile; several are months old and were captured during a network reconfigure, so they read as whole milliseconds. `-` means that target has never run that scenario. @@ -72,8 +72,8 @@ Microseconds. `?` marks a cell backed by fewer than 4 samples, which is a first | Scenario | p50 | p95 | n | |---|---:|---:|---:| -| Layer_base_pipeline | 94 µs (−13 µs) ✓ | 211 µs | 32 | -| Layer_memory_1to1 | 9 µs (−1 µs) ✓ | 40 µs | 32 | +| Layer_base_pipeline | 94 µs | 211 µs | 32 | +| Layer_memory_1to1 | 9 µs | 40 µs | 32 | These build a bare pipeline with no optional modules, so a change here is a change in the pipeline itself rather than in what was measured. A new module belongs in an advanced scenario, which keeps its own numbers. @@ -81,36 +81,36 @@ These build a bare pipeline with no optional modules, so a change here is a chan | Area | Lines | Comments | Comment share | |---|---:|---:|---:| -| core | 25,332 (+394) ⚠ | 10,143 | 43.3 % (+0.2 %) ⚠ | -| light | 34,548 (+2,741) ⚠ | 13,160 | 41.9 % (−0.4 %) ✓ | -| platform | 17,770 (+307) ⚠ | 6,223 | 38.4 % (−0.1 %) ✓ | -| ui | 10,204 (+115) ⚠ | 3,014 | 31.2 % (+0.1 %) ⚠ | -| test | 56,060 (+1,379) ⚠ | 10,468 | 21.4 % (+0.1 %) ⚠ | -| moondeck | 22,512 (+24) ⚠ | 3,651 | 18.5 % | +| core | 25,486 (+154) ⚠ | 10,222 | 43.3 % | +| light | 34,558 (+10) ⚠ | 13,166 | 41.9 % | +| platform | 17,863 (+93) ⚠ | 6,269 | 38.5 % (+0.1 %) ⚠ | +| ui | 10,204 | 3,014 | 31.2 % | +| test | 56,155 (+95) ⚠ | 10,501 | 21.4 % | +| moondeck | 22,563 (+51) ⚠ | 3,670 | 18.6 % (+0.1 %) ⚠ | ## Tests | Kind | Count | |---|---:| -| unit cases | 1,945 (+69) ✓ | -| scenarios | 27 (+2) ✓ | +| unit cases | 1,948 (+3) ✓ | +| scenarios | 27 | ## Complexity | Metric | Value | |---|---:| -| functions | 3,427 (+137) ✓ | -| over threshold | 232 (+12) ⚠ | +| functions | 3,429 (+2) ✓ | +| over threshold | 238 (+6) ⚠ | | worst CCN | 108 | ## Documentation | Metric | Value | |---|---:| -| markdown files | 219 (+1) ⚠ | -| markdown lines | 36,540 (+1,419) ⚠ | +| markdown files | 219 | +| markdown lines | 36,569 (+29) ⚠ | | plan files | 115 | -| backlog lines | 6,977 (+639) ⚠ | +| backlog lines | 6,979 (+2) ⚠ | | lessons lines | 678 | -| CLAUDE.md lines | 250 (+13) ⚠ | +| CLAUDE.md lines | 259 (+9) ⚠ | diff --git a/docs/moonmodules/core/services.md b/docs/moonmodules/core/services.md index e918684b..8f2cbfe1 100644 --- a/docs/moonmodules/core/services.md +++ b/docs/moonmodules/core/services.md @@ -19,13 +19,16 @@ A Service (added by the user, not auto-wired): the audio source that feeds the F Audio module controls - `mode` — Local audio / Receive network / Simulate: analyze the on-board mic/line-in, consume a peer's audio off the network (WLED-compatible), or feed a synthesized signal. Receive network appears only on a network build; the controls below are its detail, shown per mode. +- `micMode`: (Local, I²S targets) `I2S` for a three-wire part (the INMP441 and most MEMS mics, and line-in ADCs), `PDM` for a two-wire one (a clock and a data line, as on the QuinLED Dig-Next-2's onboard microphone). PDM uses `wsPin` as its clock and `sdPin` as its data, and hides the two clock pins it does not have. - `sckPin` / `wsPin` / `sdPin`: (Local, I²S targets) the I²S GPIOs (bit clock / word-select / data; unset until entered). - `mclkPin`: (Local, I²S targets) master-clock GPIO for a line-in ADC that needs one (e.g. the PCM1808); leave unset for a plain mic. - `device`: (Local, desktop) the OS capture input: `default` follows the system setting; loopback devices appear when present, so effects can follow what the machine plays. Picked by list position: if the OS reorders devices, re-pick (`default` is order-stable). **Capturing what the machine plays (loopback), per OS.** macOS has no native loopback: install [BlackHole](https://existential.audio/blackhole/), create a **Multi-Output Device** in Audio MIDI Setup (tick your speakers/DAC first plus BlackHole, enable drift correction on BlackHole) and set it as the system output; the speakers keep playing while an identical copy lands in BlackHole, which this control captures. The Mac's volume keys go dead on a multi-output device: set volume in the player or on the DAC. Windows usually needs nothing: enable **Stereo Mix** (Sound settings, Recording tab) and pick it here; it taps the output while the speakers keep playing (VB-Cable is the fallback where a driver lacks Stereo Mix). Linux PulseAudio/PipeWire expose a **Monitor of ** source natively; just pick it. - `sampleRate` — (Local) mic/ADC sample rate. -- `floor` / `gain`: (Local) noise floor and input gain for the analysis. The default gain suits a quiet MEMS mic; a loopback device delivers near-full-scale digital audio, so turn `gain` down hard (single digits) or everything clips to maximum. +- `levels` — (Local) who sets the display window: `manual`, the `floor` and `gain` sliders, or `automatic`, a learner that measures each band's own floor and typical loudest level and maps that range onto the window. Automatic is what makes a treble band read level with a bass one under spectrally balanced material, instead of sitting at a fraction of it. The choice picks which controls below are shown, so the mode is one decision rather than four interacting sliders. +- `floor`: (Local) the **silence threshold**, in both modes: below it a band reads zero and, in automatic, the learner does not learn from it. That second half matters as much as the first, because a learner that studies an empty room maps its noise floor onto the whole display and shows a silent room at full scale. Raise `floor` until a quiet room reads still. It is the one setting that depends on the part and the room, so it is the knob to reach for first, and the only one automatic mode exposes. +- `gain`: (Local, manual) the width of the display window: higher is a narrower window, so the display runs hotter. It sizes the band window directly and scales the level's own window, which is wider because a block RMS covers more dB than a single frequency bin's peak. The default suits a quiet MEMS mic; a loopback device delivers near-full-scale digital audio, so turn `gain` down hard (single digits) or everything clips to maximum. - `send audio` — (Local, network build) send the local analysis as WLED audio-sync packets for the WLED ecosystem. - `simulate` — (Simulate) the synthetic pattern: `music` (a plausible song) or `sweep` (a deterministic band-marching test pattern). - `syncPort` — (network build) the UDP port (default 11988, the WLED standard), shown when sending or receiving; set it the same on both ends. `sync status` reports the live send/receive state. diff --git a/moondeck/check/repo_health.py b/moondeck/check/repo_health.py index abfaccbf..6391773f 100644 --- a/moondeck/check/repo_health.py +++ b/moondeck/check/repo_health.py @@ -25,6 +25,8 @@ """ import argparse +import datetime as _dt +import time as _time import json import subprocess import sys @@ -122,6 +124,25 @@ def measure_comments(): # to prevent, moved one step later. MEASURED_THIS_RUN = set() +# How long a carried number may go unmeasured before the report calls it stale. A carry is correct +# (the alternative, dropping the row, loses the only number there is), but an UNBOUNDED carry is +# not: esp32p4rev1-eth and esp32s31 both held a byte-identical value across eight commits while the +# code moved under them, and when they were finally rebuilt the accumulated growth landed as a +# single +274 KB / +238 KB jump that read as though one commit had caused it. Seven days is long +# enough that an untouched target stays quiet, short enough that a drifting one is caught while the +# cause is still findable. +STALE_AFTER_DAYS = 7 + +# When each firmware's size was last actually measured, ISO dates keyed by firmware. Stored in its +# own section rather than inside `flash`, which is a plain name->bytes map the report renders row +# by row: a non-firmware key there becomes a phantom target in the table. +MEASURED_DATES = {} + +# How recently a binary must have been built to count as measured rather than carried. A window +# rather than a source-timestamp comparison: what matters is that this target was built during the +# work being reported, not whether a file was touched afterwards. +MEASURED_WITHIN_HOURS = 12 + def app_partition_bytes(firmware): """The app slot's size for `firmware`, from the partition CSV its build actually used. @@ -176,11 +197,9 @@ def measure_flash(): holding five old firmwares that produced "−230 KB ✓", "−193 KB ✓", "−279 KB ✓" in one run, for firmwares nobody had rebuilt, because the baseline had been recorded on a different machine. A metric that moves when nothing was built is worse than a missing one: it is - read as a result. Same predicate as check_esp32_built.py, imported rather than restated. + read as a result. A binary built within MEASURED_WITHIN_HOURS counts; anything older is + carried and aged, so a number nobody has refreshed says so rather than passing as current. """ - sys.path.insert(0, str(ROOT / "moondeck" / "check")) - from check_esp32_built import newest_source, compiled_sources - flash = {} build = ROOT / "build" if not build.exists(): @@ -190,31 +209,34 @@ def measure_flash(): if not binary.exists(): continue # never built here: carry the previous number forward firmware = d.name.replace("esp32-", "", 1) - # One stat, so the size recorded and the timestamp judged describe the same file even if - # a build lands mid-loop. STRICTLY newer: equal mtimes mean a source was written in the - # same filesystem tick as the binary, and which came first is unknowable, so the honest - # reading is "might be stale" rather than "fresh". + # Measured means BUILT DURING THIS WORK, not "newer than every source". The stricter rule + # (binary newer than its newest source) rejected a binary whose source was merely touched + # afterwards, which is a real measurement of essentially this code, and it cost a full + # rebuild of every target to say a number the build had already produced. What the report + # needs to know is whether somebody built this target while working, and the next commit + # measures again regardless. One stat, so the size recorded and the age judged describe the + # same file even if a build lands mid-loop. st = binary.stat() - _, newest = newest_source(compiled_sources(firmware)) - if st.st_mtime <= newest: - continue + if (_time.time() - st.st_mtime) > MEASURED_WITHIN_HOURS * 3600: + continue # from an older session: carry it, and let it age flash[firmware] = st.st_size MEASURED_THIS_RUN.add(firmware) + MEASURED_DATES[firmware] = _dt.date.today().isoformat() # The desktop binary, located by build_desktop.desktop_binary() so this and collect_kpi.py # cannot name different files in the same run. A bare build/projectMM matched nothing off # macOS, so this metric silently carried a foreign machine's number forward while reading as # a measurement: the same defect the firmware freshness rule above exists to prevent. # - # Held to the SAME freshness rule as the firmwares rather than trusting the build gate to have - # just built it. That gate does, but `collect_kpi.py --commit` is also run standalone, where - # nothing builds first, and a rule that holds only inside one caller is not a rule. + # Held to the SAME rule as the firmwares rather than trusting the build gate to have just + # built it. That gate does, but `collect_kpi.py --commit` is also run standalone, where nothing + # builds first, and a rule that holds only inside one caller is not a rule. desktop = desktop_binary() if desktop: st = desktop.stat() - _, newest = newest_source() - if st.st_mtime > newest: + if (_time.time() - st.st_mtime) <= MEASURED_WITHIN_HOURS * 3600: flash["desktop"] = st.st_size - MEASURED_THIS_RUN.add("desktop") # same rule as the firmwares: measured, so say so + MEASURED_THIS_RUN.add("desktop") + MEASURED_DATES["desktop"] = _dt.date.today().isoformat() return flash @@ -279,13 +301,36 @@ def _head(): capture_output=True, text=True).stdout.strip() +def _built_label(firmware, measured_on): + """The Built cell: measured now, carried recently, or carried too long to trust. + + A carry is correct and must stay (dropping the row loses the only number there is), but an + unbounded one is how a metric goes quietly wrong: the report keeps printing a value nobody has + checked, and the growth surfaces later as one large jump attributed to whatever commit happened + to rebuild that target. Aging the carry is what turns that silence into a visible number. + """ + if firmware in MEASURED_THIS_RUN: + return "yes" + if not measured_on: + return "carried (age?)" # pre-dates this record: unknown, and honest about it + try: + age = (_dt.date.today() - _dt.date.fromisoformat(measured_on)).days + except ValueError: + return "carried (age?)" + if age >= STALE_AFTER_DAYS: + return f"**STALE {age}d**" + return f"carried {age}d" + + def snapshot(perf=None): """The full current-state measurement. `perf` is the tick/FPS block the KPI collector already gathered — passed in rather than re-measured, since it needs a running device.""" head = _head() + flash = measure_flash() # populates MEASURED_DATES as a side effect, so call it first return { "commit": head, - "flash": measure_flash(), + "flash": flash, + "measured": dict(MEASURED_DATES), "perf": perf or {}, "loc": measure_loc(), "comments": measure_comments(), @@ -307,7 +352,7 @@ def _valid_snapshot(data, source): print(f"repo-health: ignoring {source}: expected an object, got {type(data).__name__}", file=sys.stderr) return {} - for key in ("flash", "perf", "complexity"): + for key in ("flash", "perf", "complexity", "measured"): if key in data and not isinstance(data[key], dict): print(f"repo-health: ignoring {source}: section '{key}' is " f"{type(data[key]).__name__}, expected an object", file=sys.stderr) @@ -380,7 +425,10 @@ def merge_carry_forward(new, old): # filtered out. So the rule is "an esp32* key that is not a known firmware is a ghost", # which is exactly what a rename leaves behind and nothing else. known = set(FIRMWARES) - for key in ("flash", "perf", "complexity"): + # The measurement dates carry exactly like the values they describe: a target not built this + # run keeps both its number and the date that number was taken, which is what lets the report + # age a carry instead of presenting it as current. + for key in ("flash", "perf", "complexity", "measured"): merged = dict(old.get(key, {})) if key == "flash": merged = {k: v for k, v in merged.items() @@ -476,12 +524,15 @@ def render_markdown(new, old): cap = app_partition_bytes(k) if k.startswith("esp32") else 0 cap_s = _kb(cap) if cap else "-" used = f"{(100.0 * v / cap):.0f}%" if cap else "-" - built = "yes" if k in MEASURED_THIS_RUN else "carried" + built = _built_label(k, new.get("measured", {}).get(k)) L.append(f"| {k} | {_arrow(v, o.get('flash'), k, _kb)} | {cap_s} | {used} | {built} |") L += ["", - ("`Built: carried` means that firmware was NOT rebuilt this run and its number is " - "the previous one, so an absent delta says nothing about the change. `Used` is " - "against the app slot in the firmware's own partition table."), ""] + ("`Built: yes` was measured this run. `carried Nd` was NOT rebuilt and its number is " + f"N days old, so an absent delta says nothing about the change. **STALE** marks a " + f"carry older than {STALE_AFTER_DAYS} days: the number has gone unchecked long " + "enough that growth will surface later as one jump, blamed on whichever commit " + "happens to rebuild that target. `Used` is against the app slot in the firmware's " + "own partition table."), ""] if new.get("perf"): L += ["## Render performance", "", "| Target | Tick | FPS |", "|---|---:|---:|"] diff --git a/src/core/AudioBands.h b/src/core/AudioBands.h index 9d2c0ef5..f7c079fe 100644 --- a/src/core/AudioBands.h +++ b/src/core/AudioBands.h @@ -73,8 +73,12 @@ inline void applyWindow(const int32_t* samples, size_t n, float* out) { /// /// Computed once per rate change, never per frame: 17 values, and the summing loop below costs the /// same `nMag` additions wherever the edges sit. +/// The lowest frequency the spectrum shows. Below this is infrasound: mains hum, a microphone's DC +/// drift, footfall and traffic rumble, none of it audible and none of it music. At 22 kHz with a +/// 1024-bin FFT the first band would otherwise cover 11-22 Hz and display that rumble as bass. +inline constexpr float kLowestAudibleHz = 40.0f; + inline void audioBandEdges(size_t nMag, uint32_t sampleRate, size_t edge[17]) { - (void)sampleRate; // the shape is in bins; Hz is the caller's to report if (nMag < 17) { // pathologically small: one bin each, as far as it goes for (uint8_t e = 0; e <= 16; e++) edge[e] = e < nMag ? e : nMag; return; @@ -85,7 +89,18 @@ inline void audioBandEdges(size_t nMag, uint32_t sampleRate, size_t edge[17]) { float ix = std::pow(static_cast(nMag), frac); edge[e] = static_cast(ix); } - edge[0] = 1; // bin 0 is DC + // Start at the lowest audible bin rather than at bin 1: bin 0 is DC and the bins just above it + // are infrasound (see kLowestAudibleHz). Falls back to bin 1 when the rate is unknown. + size_t firstBin = 1; + if (sampleRate > 0) { + const float binHz = static_cast(sampleRate) / (2.0f * static_cast(nMag)); + if (binHz > 0.0f) { + firstBin = static_cast(kLowestAudibleHz / binHz); + if (firstBin < 1) firstBin = 1; + if (firstBin > nMag / 2) firstBin = nMag / 2; // never eat half the spectrum + } + } + edge[0] = firstBin; edge[16] = nMag; // Forward pass: push each edge up so every band owns a bin. This is what the geometric split // could not do, and it costs the top bands a bin each, which they have in abundance. @@ -171,6 +186,10 @@ struct OnsetDetector { /// State is 32 floats; the work is 16 logs and a handful of multiplies per block, on the audio /// block path and never per light. struct BandConditioner { + /// The narrowest dynamic range a band is credited with: the shared follower minimum, so the + /// band and level paths cannot drift apart (kConditionerMinRangeDb, AudioLevel.h). + static constexpr float kMinRangeDb = kConditionerMinRangeDb; + float floorDb[16]; float peakDb[16]; bool primed = false; @@ -180,23 +199,38 @@ struct BandConditioner { /// Condition one block. `db` in, `out` the corrected dB for the display window /// [windowFloor, windowFloor + windowSpan]. `dtMs` is the block interval, for the time /// constants. `ratioN` is the N of N:1 (1 = off). `learning` false freezes the tables. + /// `gateDb` is the silence threshold: a band below it carries no program material, so it + /// reads zero and is NOT learned from. Both halves matter. Without the gate the lift is + /// dominated by `windowFloor - db`, which relocates a silent band up into the window as + /// eagerly as a quiet instrument, and an empty room is displayed at full scale (measured on a + /// Dig-Next-2: the raw path read flux 0-3 while the learner made 33-68 of it). And learning + /// from silence drags the floor table down to the noise, so the next wobble reads as music. void process(const float db[16], float out[16], uint32_t dtMs, float windowFloor, - float windowSpan, uint8_t ratioN, float maxGainDb, bool learning, + float windowSpan, uint8_t ratioN, float maxGainDb, bool learning, float gateDb, float floorRiseDbPerS = 1.0f, float peakReleaseDbPerS = 3.0f) { if (!primed) { - for (uint8_t b = 0; b < 16; b++) { floorDb[b] = db[b]; peakDb[b] = db[b] + 1.0f; } + for (uint8_t b = 0; b < 16; b++) { + floorDb[b] = db[b]; + peakDb[b] = db[b] + kMinRangeDb; + } primed = true; } const float dt = static_cast(dtMs) / 1000.0f; const float amount = ratioN <= 1 ? 0.0f : 1.0f - 1.0f / static_cast(ratioN); for (uint8_t b = 0; b < 16; b++) { + // Silence: nothing to show and nothing to learn. Held before the followers so the + // tables keep describing the music rather than the room's noise floor. + if (db[b] < gateDb) { out[b] = 0.0f; continue; } if (learning) { // Floor: a minimum follower that drifts UP slowly, so it forgets a quiet moment // over seconds but takes a new low at once. floorDb[b] = db[b] < floorDb[b] ? db[b] : floorDb[b] + floorRiseDbPerS * dt; // Peak: instant attack, slow release, so it settles on the band's typical top. peakDb[b] = db[b] > peakDb[b] ? db[b] : peakDb[b] - peakReleaseDbPerS * dt; - if (peakDb[b] < floorDb[b] + 1.0f) peakDb[b] = floorDb[b] + 1.0f; + // Bound the stretch so a collapsed follower cannot divide by ~zero. Small on + // purpose: the silence gate above is what keeps a quiet room quiet, and a large + // minimum here would flatten real music instead (see kConditionerMinRangeDb). + if (peakDb[b] < floorDb[b] + kMinRangeDb) peakDb[b] = floorDb[b] + kMinRangeDb; } // Where this band's own range would put the value inside the window, and how far // from the raw value that is; `amount` decides how much of that move is taken. @@ -255,7 +289,7 @@ inline void magnitudesToBands(const float* mag, size_t nMag, uint32_t sampleRate if (cond) { float out[16]; cond->process(bandDb, out, dtMs, windowFloorDb(noiseFloor), windowSpanDb(gain), ratioN, - maxGainDb, learning); + maxGainDb, learning, windowFloorDb(noiseFloor)); for (uint8_t b = 0; b < 16; b++) bands[b] = bandDb[b] <= 0.0f ? 0 : dbToByte(out[b], noiseFloor, gain); } else { for (uint8_t b = 0; b < 16; b++) bands[b] = bandDb[b] <= 0.0f ? 0 : dbToByte(bandDb[b], noiseFloor, gain); diff --git a/src/core/AudioLevel.h b/src/core/AudioLevel.h index 9b57da7e..29eedf41 100644 --- a/src/core/AudioLevel.h +++ b/src/core/AudioLevel.h @@ -98,8 +98,69 @@ struct DcBlocker { // through the same log/dB window the bands use (magToByte), so the VU meter and // the spectrum share one scaling and the noiseFloor/gain knobs mean the same // thing for both. Empty/null input yields zero (silence), never a crash. +// +/// The narrowest dynamic range a learned follower credits its input with, shared by the level and +/// the per-band conditioners so the two paths behave alike. It exists only to bound +/// `windowSpan / range`, which a collapsed follower would otherwise drive toward infinity. +/// +/// Deliberately SMALL, because the silence gate is what keeps a quiet room quiet and this is not a +/// second mechanism for the same job. A large value flattens real music instead: at 12 dB a band +/// swinging 6 dB filled only half the display, which reads as "vivid bands, no dynamic range". +/// The gate can tell silence from a quiet passage, which a range clamp fundamentally cannot, so +/// the gate does that work and this stays out of the way. +inline constexpr float kConditionerMinRangeDb = 3.0f; + +/// The level's own minimum, larger than a band's for the same reason its gate is lower: this +/// follows a whole block's RMS, which swings far less than any single band's peak. At the band +/// value the meter stretched that small natural variation to full scale and sat pinned at 255. +inline constexpr float kLevelMinRangeDb = 20.0f; + +/// The manual level window's width at full `gain`. The level is scaled BY gain rather than sized +/// from it: `gain` sizes the band window directly, but a block RMS covers far more dB than a single +/// bin's peak, so feeding one raw number to both left the VU in the bottom third of the meter at +/// the settings that made the spectrum look right. Scaling keeps the knob meaning what it means +/// (higher gain = narrower window = hotter meter) in both paths. 20 dB is the room's measured +/// speech-to-quiet range on the bench parts. +inline constexpr float kLevelWindowSpanDb = 20.0f; + +/// The manual level window's span for a given `gain`: the base at gain 255, widening to twice that +/// as gain falls to 0, so the control spans a useful range either side of its midpoint. +inline float levelWindowSpanDb(uint16_t gain) { + return kLevelWindowSpanDb * (2.0f - static_cast(gain) / 255.0f); +} + +/// How far below the display window a level has to fall before it counts as silence rather than a +/// quiet passage. The window floor is what a manual setup shows as its lowest visible level, so +/// anything at it is audible; the margin is what separates "quiet" from "nothing at all". +inline constexpr float kMuteMarginDb = 20.0f; + +/// The level's own floor and peak, learned the way BandConditioner learns a band's. With `levels` +/// automatic the display window is measured rather than dialed in, so the VU levels itself along +/// with the bands and the manual sliders are genuinely manual-only. Same followers and the same +/// minimum range as the band tables, so the two paths behave alike and cannot disagree. +struct LevelConditioner { + static constexpr float kMinRangeDb = kLevelMinRangeDb; + + float floorDb = 0.0f; + float peakDb = 0.0f; + bool primed = false; + + /// Learn from this block's RMS and return the dB window [floor, floor+span] to display it in. + void observe(float db, uint32_t dtMs, float& windowFloor, float& windowSpan, + float floorRiseDbPerS = 1.0f, float peakReleaseDbPerS = 3.0f) { + if (!primed) { floorDb = db; peakDb = db + kMinRangeDb; primed = true; } + const float dt = static_cast(dtMs) / 1000.0f; + floorDb = db < floorDb ? db : floorDb + floorRiseDbPerS * dt; + peakDb = db > peakDb ? db : peakDb - peakReleaseDbPerS * dt; + if (peakDb < floorDb + kMinRangeDb) peakDb = floorDb + kMinRangeDb; + windowFloor = floorDb; + windowSpan = peakDb - floorDb; + } +}; + inline void computeLevel(const int32_t* samples, size_t n, - uint16_t noiseFloor, uint16_t gain, AudioFrame& frame) { + uint16_t noiseFloor, uint16_t gain, AudioFrame& frame, + LevelConditioner* cond = nullptr, uint32_t dtMs = 23) { if (!samples || n == 0) { frame.level = 0; return; @@ -119,7 +180,32 @@ inline void computeLevel(const int32_t* samples, size_t n, const uint64_t meanSq = sqSum / static_cast(n); const uint64_t rms = isqrt64(meanSq); - frame.level = magToByte(static_cast(rms), noiseFloor, gain); + // Automatic: the window is the level's own learned range, so a quiet room and a loud one both + // fill the meter. Manual: the floor/gain sliders, exactly as before. + if (cond) { + const float db = rms <= 1 ? 0.0f : 20.0f * std::log10(static_cast(rms)); + // Silence for the LEVEL is not the same number as silence for a band, and the caller has + // already halved `floor` for that reason: a band gate reads a single bin's PEAK magnitude + // while this reads the whole block's RMS, which for real music sits well below the + // strongest bin. Gating both at the band threshold left the spectrum lively with the VU + // pinned at zero (measured: flux 32-100 against level 0). The window floor is the level a + // manual setup DISPLAYS, so it is audible by definition; silence is kMuteMarginDb below it. + const float gateDb = windowFloorDb(noiseFloor) - kMuteMarginDb; + if (db < gateDb) { frame.level = 0; return; } + float wFloor = 0.0f, wSpan = 1.0f; + cond->observe(db, dtMs, wFloor, wSpan); + const float t = (db - wFloor) / wSpan; + const float clamped = t < 0.0f ? 0.0f : (t > 1.0f ? 1.0f : t); + frame.level = static_cast(clamped * 255.0f + 0.5f); + return; + } + // Manual. `floor` positions the window and `gain` scales its width, both as they do for the + // bands, but from the level's own base span (see levelWindowSpanDb). + const float db = rms <= 1 ? 0.0f : 20.0f * std::log10(static_cast(rms)); + const float wFloor = windowFloorDb(noiseFloor); + const float t = (db - wFloor) / levelWindowSpanDb(gain); + const float clamped = t < 0.0f ? 0.0f : (t > 1.0f ? 1.0f : t); + frame.level = rms <= 1 ? 0 : static_cast(clamped * 255.0f + 0.5f); } } // namespace mm diff --git a/src/core/AudioService.h b/src/core/AudioService.h index bc00a846..db0c05ed 100644 --- a/src/core/AudioService.h +++ b/src/core/AudioService.h @@ -104,6 +104,7 @@ class AudioService : public MoonModule { } uint8_t prevBands_[16] = {}; ///< last block's raw bands, the flux's reference BandConditioner cond_; ///< the per-band floor and peak tables, learned live + LevelConditioner levelCond_; ///< the same, for the overall level (VU) in automatic mode OnsetDetector onset_; ///< the hit decision, with its running mean and refractory static constexpr size_t kBlock = 512; @@ -131,6 +132,10 @@ class AudioService : public MoonModule { /// OS capture device (desktop): an index into platform::audioCaptureDevices' list. /// 0 = "default" (order-stable). Changing it re-opens capture live (no reboot). uint8_t device = 0; + /// Which kind of microphone is wired: 0 = I2S (three wires, an INMP441-class PCM part), + /// 1 = PDM (two wires, the one-bit part boards solder on, such as the QuinLED Dig-Next-2's). + /// PDM has no bit clock and no master clock, so those two pins hide when it is selected. + uint8_t micMode = 0; int8_t sckPin = -1; ///< bit clock / BCLK (-1 = unset). Changing it re-creates the I2S channel live (no reboot). int8_t wsPin = -1; ///< word-select / LRCLK (-1 = unset). Changing it re-creates the I2S channel live. int8_t sdPin = -1; ///< serial data in / DOUT (-1 = unset). Changing it re-creates the I2S channel live. @@ -159,8 +164,17 @@ class AudioService : public MoonModule { /// per-band learner). One choice rather than two overlapping mechanisms, so a slider on screen /// is always a slider that does something. uint8_t levels = 1; - uint8_t ratio = 4; ///< automatic: N of N:1, how hard the bands are levelled - uint8_t maxGain = 24; ///< automatic: the most a band is lifted, in dB + /// Automatic levelling, fixed rather than exposed. Both act on the LEARNED per-band range, + /// which the conditioner has already normalized per rig, so one value serves every source: a + /// PDM mic, an INMP441 and a line-in all arrive looking the same. What differs between them is + /// the absolute level, and that is `floor`'s job, the one knob automatic mode keeps. + /// + /// 4 = N of N:1, correcting three quarters of a band's deviation: enough to take out the rig's + /// coloration, short of the high ratios that cause cross-spectral pumping. 24 dB caps the lift + /// for a rig whose bands sit far apart; with silence gated it rarely binds, and it is kept as + /// the guard rather than a tuning knob. + static constexpr uint8_t kRatio = 4; + static constexpr uint8_t kMaxGainDb = 24; /// Simulated-audio pattern (only shown, and only used, in Simulate mode, see `mode`). The synthesized /// signal drives audio-reactive effects with no mic or music, for a preview/demo device or a test: /// `music`: a plausible song: multi-sine bands + a swelling volume + a periodic beat + a @@ -227,10 +241,17 @@ class AudioService : public MoonModule { // GPIOs; order follows the I2S datasheet: clocks, data, optional MCLK). On desktop it is // the OS capture device instead. --- if constexpr (platform::hasI2sMic) { - controls_.addPin("sckPin", sckPin); controls_.setHidden(controls_.count() - 1, !localMode); + // A PDM part has neither a bit clock nor a master clock: its two wires are the clock + // the chip drives (wsPin) and the data line (sdPin). Showing the other two would + // invite a user to set pins nothing reads. + static constexpr const char* kMicModeOptions[] = {"I2S", "PDM"}; + controls_.addSelect("micMode", micMode, kMicModeOptions, 2); + controls_.setHidden(controls_.count() - 1, !localMode); + const bool pdm = micMode == 1; + controls_.addPin("sckPin", sckPin); controls_.setHidden(controls_.count() - 1, !localMode || pdm); controls_.addPin("wsPin", wsPin); controls_.setHidden(controls_.count() - 1, !localMode); controls_.addPin("sdPin", sdPin); controls_.setHidden(controls_.count() - 1, !localMode); - controls_.addPin("mclkPin", mclkPin); controls_.setHidden(controls_.count() - 1, !localMode); + controls_.addPin("mclkPin", mclkPin); controls_.setHidden(controls_.count() - 1, !localMode || pdm); } if constexpr (platform::hasAudioCapture) { // The OS capture input: entry 0 "default" follows the system setting; loopback @@ -263,15 +284,15 @@ class AudioService : public MoonModule { controls_.addSelect("levels", levels, kLevelsOptions, 2); controls_.setHidden(controls_.count() - 1, !localMode); const bool manual = levels == 0; - // Shown in BOTH modes, because they are not only the manual band mapping: computeLevel - // reads them for `level` and `levelSmoothed` (the volume every VU-style effect follows) - // whatever `levels` says. Hiding them in automatic left a user unable to reach values - // that were still shaping the picture. + // `floor` is shown in BOTH modes because it means one thing in both: below this is not + // signal. Manual maps the display from it; automatic gates silence with it, which is what + // stops the learner amplifying an empty room to full scale. `gain` sets the manual window's + // span and has no automatic counterpart, so it hides with the mode that uses it. controls_.addControl("floor", floor, 0, 255); controls_.setHidden(controls_.count() - 1, !localMode); - controls_.addControl("gain", gain, 1, 255); controls_.setHidden(controls_.count() - 1, !localMode); - // Automatic: how hard it levels the bands, and the one guard that keeps it honest. - controls_.addControl("strength", ratio, 1, 20); controls_.setHidden(controls_.count() - 1, !localMode || manual); - controls_.addControl("maxBoost", maxGain, 0, 40); controls_.setHidden(controls_.count() - 1, !localMode || manual); + controls_.addControl("gain", gain, 1, 255); controls_.setHidden(controls_.count() - 1, !localMode || !manual); + // Automatic exposes no levelling knobs: `strength` and `maxBoost` measurably changed the + // numbers but nothing a viewer could see once silence was gated, and both are + // source-independent (see kRatio), so they are constants. // "send audio": broadcast the locally-analyzed frame. Only meaningful in Local mode. if constexpr (platform::hasNetwork) { controls_.addControl("send audio", send); @@ -314,6 +335,9 @@ class AudioService : public MoonModule { bool affectsPrepare(const char* name) const override { return std::strcmp(name, "wsPin") == 0 || std::strcmp(name, "sdPin") == 0 || std::strcmp(name, "sckPin") == 0 || std::strcmp(name, "mclkPin") == 0 + // Re-creates the I2S channel in the other mode, AND hides or shows the two clock + // pins PDM does not have. + || std::strcmp(name, "micMode") == 0 || std::strcmp(name, "device") == 0 || std::strcmp(name, "sampleRate") == 0 || std::strcmp(name, "mode") == 0 || std::strcmp(name, "send audio") == 0 || std::strcmp(name, "syncPort") == 0 @@ -453,7 +477,9 @@ class AudioService : public MoonModule { // with how loud the room is. Uses a gentler floor than the bands (half), // so the VU keeps moving with volume instead of being gated hard like the // per-band display. - computeLevel(samples_, kBlock, static_cast(floor / 2), gain, frame_); + computeLevel(samples_, kBlock, static_cast(floor / 2), gain, frame_, + levels == 1 ? &levelCond_ : nullptr, + static_cast(kBlock * 1000u / sampleRate())); // Smoothed level: a one-pole exponential moving average of the raw `level`, so effects that // want a calm, breathing VU (rather than the raw value's snap-to-transient) read a value that @@ -470,7 +496,7 @@ class AudioService : public MoonModule { frame_.bands, peakHz, peakMag, levels == 1 ? &cond_ : nullptr, static_cast(kBlock * 1000u / sampleRate()), - ratio, static_cast(maxGain), true); + kRatio, static_cast(kMaxGainDb), true); finishBands(); // Peak frequency: the exact-Hz FFT bin, held when there's no real signal so @@ -563,7 +589,9 @@ class AudioService : public MoonModule { && platform::audioCodecType == platform::CodecType::None; if (directMicLive) { if (micSamples1s_ == 0) - setStatus("mic: no samples, check sckPin / wsPin (I2S clocks)", Severity::Warning); + setStatus(micMode == 1 ? "mic: no samples, check wsPin (PDM clock)" + : "mic: no samples, check sckPin / wsPin (I2S clocks)", + Severity::Warning); else if (micNonzero1s_ == 0) setStatus("mic: data line silent, check sdPin (SD/DOUT) + mic power", Severity::Warning); else if (micStatusStale_) @@ -694,8 +722,13 @@ class AudioService : public MoonModule { // don't attempt an I2S init: initializing I2S on unset pins is what hung a // mic-less board's boot. GPIO 0 IS a valid mic pin now (the sentinel is -1, // not 0), so the guard tests < 0, not == 0. - if (sckPin < 0 || wsPin < 0 || sdPin < 0) { - setStatus("mic: set sckPin / wsPin / sdPin", Severity::Status); + // A PDM part has two wires, not three: the clock this chip drives (wsPin) and the data + // line (sdPin). Requiring a bit clock there would leave a correctly wired board sitting + // at "set sckPin" forever, with a pin it does not have. + const bool pdm = micMode == 1; + if (wsPin < 0 || sdPin < 0 || (!pdm && sckPin < 0)) { + setStatus(pdm ? "mic: set wsPin (clock) / sdPin (data)" + : "mic: set sckPin / wsPin / sdPin", Severity::Status); return; } // Bring up the I2S channel FIRST. Where MCLK comes from depends on the board: @@ -710,7 +743,8 @@ class AudioService : public MoonModule { ? mclkPin : static_cast(platform::audioCodecPins.mclk); inited_ = platform::audioMicInit(mic_, static_cast(wsPin), static_cast(sdPin), - static_cast(sckPin), mclk, sampleRate()); + static_cast(sckPin), mclk, sampleRate(), + static_cast(micMode)); if (!inited_) { setStatus(kInitFailMsg, Severity::Error); return; diff --git a/src/light/drivers/RmtLedDriver.h b/src/light/drivers/RmtLedDriver.h index 2659ba30..8e72ff44 100644 --- a/src/light/drivers/RmtLedDriver.h +++ b/src/light/drivers/RmtLedDriver.h @@ -243,6 +243,15 @@ class RmtLedDriver : public DriverBase { /// only calls this when effectively-enabled and routes to release() (release) otherwise, so the /// channels + buffer free when the driver, or a parent, is disabled. void prepare() override { + // Drain first. resizeSymbols() may free the symbol buffer and reinit() deletes the + // channel, and a prepare arrives from a control change, which can land mid-frame: the + // peripheral is then still reading those symbols. Bounded, because a wedged transfer must + // not block a config change forever; past the deadline the rebuild proceeds, which is the + // pre-existing behavior rather than a new risk. + if (txInFlight_) { + for (uint8_t attempt = 0; attempt < 4 && txInFlight_; attempt++) + txInFlight_ = !waitForPins(); + } parseConfig(); resizeSymbols(); reinit(); diff --git a/src/light/effects/AudioSpectrumEffect.h b/src/light/effects/AudioSpectrumEffect.h index 8ffec34d..476b8fa2 100644 --- a/src/light/effects/AudioSpectrumEffect.h +++ b/src/light/effects/AudioSpectrumEffect.h @@ -52,10 +52,11 @@ class AudioSpectrumEffect : public EffectBase { if (levelRow) { const lengthType y = static_cast(h - 1); // bottom row - // The VU bar uses the SMOOTHED level so it glides with the music instead of jittering - // per audio block — the calm VU look. (The spectrum bars above use the raw per-band - // magnitudes, which stay snappy.) - const uint16_t vu = f->levelSmoothed; + // The RAW level, like the spectrum bars above: this effect is the audio test + // instrument, so it shows what the analyzer produces rather than a prettified version + // of it. The smoothed level (levelSmoothed, a one-pole EMA) lags by ~70 ms, which is + // the calm VU look every other effect wants and the wrong thing for judging response. + const uint16_t vu = f->level; const lengthType litW = static_cast( static_cast(vu > 255 ? 255 : vu) * w / 255u); // Green → red across the width, the VU-meter look. D2: write the z=0 slice only; diff --git a/src/platform/esp32/platform_esp32_i2s.cpp b/src/platform/esp32/platform_esp32_i2s.cpp index 87cd8de5..068c0215 100644 --- a/src/platform/esp32/platform_esp32_i2s.cpp +++ b/src/platform/esp32/platform_esp32_i2s.cpp @@ -21,6 +21,9 @@ #if SOC_I2S_SUPPORTED #include "driver/i2s_std.h" +#if SOC_I2S_SUPPORTS_PDM_RX +#include "driver/i2s_pdm.h" // the two-wire onboard mics (QuinLED Dig-Next-2 and friends) +#endif #include "esp_heap_caps.h" // heap_caps_malloc — the FFT scratch, internal RAM only #include "esp_log.h" #include "dsps_fft2r.h" @@ -37,6 +40,11 @@ const char* I2S_TAG = "mm_i2s"; struct MicState { i2s_chan_handle_t rx = nullptr; + bool pdm = false; ///< PDM reads 16-bit samples; the std path reads 32 + /// Staging for the PDM read, per channel rather than one static: two microphones would + /// otherwise share it, and a static here is also a data race the moment anything but the + /// render loop reads. 256 samples is a comfortable slice of a 512-sample block. + int16_t stage[256] = {}; }; // esp-dsp's float FFT works in place on an interleaved complex array (re, im, @@ -80,7 +88,7 @@ bool ensureFftInit() { } // namespace bool audioMicInit(AudioMicHandle& h, uint16_t wsPin, uint16_t sdPin, - uint16_t sckPin, int16_t mclkPin, uint32_t sampleRate) { + uint16_t sckPin, int16_t mclkPin, uint32_t sampleRate, MicMode mode) { auto* st = new (std::nothrow) MicState(); if (!st) return false; @@ -90,6 +98,43 @@ bool audioMicInit(AudioMicHandle& h, uint16_t wsPin, uint16_t sdPin, return false; } + if (mode == MicMode::Pdm) { +#if SOC_I2S_SUPPORTS_PDM_RX + // A PDM part sends one bit per clock and the peripheral decimates it to PCM, so there are + // only two wires: the clock the ESP32 drives, and the data line. `wsPin` carries the clock + // (it is the pin the board wires to the mic's CLK) and `sdPin` the data; `sckPin` and + // `mclkPin` have no meaning here. + i2s_pdm_rx_config_t pdmCfg = { + .clk_cfg = I2S_PDM_RX_CLK_DEFAULT_CONFIG(sampleRate), + .slot_cfg = I2S_PDM_RX_SLOT_DEFAULT_CONFIG(I2S_DATA_BIT_WIDTH_16BIT, + I2S_SLOT_MODE_MONO), + .gpio_cfg = { + .clk = static_cast(wsPin), + .din = static_cast(sdPin), + .invert_flags = { .clk_inv = false }, + }, + }; + if (i2s_channel_init_pdm_rx_mode(st->rx, &pdmCfg) != ESP_OK + || i2s_channel_enable(st->rx) != ESP_OK) { + i2s_del_channel(st->rx); + delete st; + return false; + } + // 16-bit samples, where the std path reads 32. audioMicRead widens them on the way out so + // the domain code sees one sample format whatever the part is. + st->pdm = true; + h.impl = st; + return true; +#else + // The chip has no PDM receiver. Fail rather than quietly configure a standard-mode + // channel on two pins, which would read noise and look like a wiring fault. + ESP_LOGE(I2S_TAG, "PDM microphone requested, but this chip has no PDM receiver"); + i2s_del_channel(st->rx); + delete st; + return false; +#endif + } + // Standard (Philips) mode, 32-bit slot / 24-bit data, mono. The INMP441 puts // its data in ONE slot, chosen by its L/R pin (GND=left, VDD/floating=right), // and leaves the other empty. The bench mic is wired L/R-to-GND, so we read the @@ -136,6 +181,42 @@ size_t audioMicRead(AudioMicHandle& h, int32_t* out, size_t maxSamples) { // ready into `out` and reports it in `bytesRead`, so we use that count // regardless of the return code (a timeout with bytesRead>0 is a partial read, // not a failure). + if (st->pdm) { + // A PDM channel delivers 16-bit PCM where the std path delivers 32, so the samples are + // staged here and widened on the way out; the domain code sees one format either way. + // + // A FIXED staging buffer, not a split of the caller's: AudioService reads + // `kBlock - filled_`, which shrinks to 1 as the block fills, and halving that reached 0 + // and returned "no samples" forever, with the block one short of complete. The stage is + // capped instead, and a short read is normal here (the caller accumulates across ticks). + // + // The PDM receiver delivers 16-bit PCM where the standard-mode path delivers 24-bit in a + // 32-bit slot, so the sample is scaled to the same full scale the rest of the chain + // assumes. 65536 is that conversion exactly: int16 full scale maps to int32 full scale, + // and no sample can clip. + // + // A larger gain is tempting and wrong. `magToByte` measures a RAW magnitude in dB with a + // window starting at 60 dB, so a quiet PDM signal reads below the window and the level + // sits at 0 until `floor` is lowered to meet it. That is a WINDOW problem, and scaling up + // to "fix" it costs headroom: at 1048576 the clip point is an int16 of 2047, while this + // part's own quiet-room noise floor already peaks near 3500. The microphone then clipped + // continuously, and clipping is broadband, so every band showed noise and the flux + // detector fired onsets in a silent room (measured: flux 29-42 with the band conditioner + // bypassed entirely, which is how the gain was identified as the source). Set the display + // window with `floor`, never with this constant. + // + // Multiplied rather than shifted: `int16_t` promotes to `int`, and shifting a negative + // value (or into the sign bit) is undefined; the multiply is defined across the range, and + // the widest sample (32767 * 65536) still fits an int32. + constexpr size_t kStage = sizeof(st->stage) / sizeof(st->stage[0]); + const size_t want = maxSamples < kStage ? maxSamples : kStage; + if (want == 0) return 0; + i2s_channel_read(st->rx, st->stage, want * sizeof(int16_t), &bytesRead, 0 /* non-blocking */); + const size_t got = bytesRead / sizeof(int16_t); + constexpr int32_t kPdmGain = 65536; // int16 full scale -> int32 full scale, see above + for (size_t i = 0; i < got; i++) out[i] = static_cast(st->stage[i]) * kPdmGain; + return got; + } i2s_channel_read(st->rx, out, maxSamples * sizeof(int32_t), &bytesRead, 0 /* ms — non-blocking */); return bytesRead / sizeof(int32_t); @@ -179,7 +260,7 @@ void audioFft(const float* windowed, size_t n, float* outMag) { namespace mm::platform { -bool audioMicInit(AudioMicHandle&, uint16_t, uint16_t, uint16_t, int16_t, uint32_t) { +bool audioMicInit(AudioMicHandle&, uint16_t, uint16_t, uint16_t, int16_t, uint32_t, MicMode) { return false; } size_t audioMicRead(AudioMicHandle&, int32_t*, size_t) { return 0; } diff --git a/src/platform/esp32/rmt_hi_vector.S b/src/platform/esp32/rmt_hi_vector.S index 2aa3d9f6..35ce1fb3 100644 --- a/src/platform/esp32/rmt_hi_vector.S +++ b/src/platform/esp32/rmt_hi_vector.S @@ -44,8 +44,14 @@ #define sp a1 .data + /* 16-byte aligned, because the C handler's stack pointer is derived from the end of this + * buffer and the Xtensa windowed ABI requires a 16-byte aligned SP. `.data` gives no such + * guarantee on its own. The save area is aligned too: it is addressed with l32i/s32i, which + * want 4, and 16 costs nothing here. */ + .align 16 _rmt_hi_intr_stack: .space RMT_HI_INTR_STACK + .align 16 _rmt_hi_save_ctx: .space REG_SAVE_AREA_SIZE diff --git a/src/platform/platform.h b/src/platform/platform.h index a1c3b585..3e801b16 100644 --- a/src/platform/platform.h +++ b/src/platform/platform.h @@ -980,8 +980,9 @@ bool rmtWs2812Transmit(RmtWs2812Handle& h, const uint32_t* symbols, size_t symbo // Block until the channel's in-flight transmission finishes, bounded by // `timeoutMs` so a wedged peripheral can't hang the render tick forever: a // timed-out frame is simply dropped and re-encoded next tick (self-heals). With -// N channels waited sequentially the worst case is N×timeoutMs; acceptable for -// the same self-healing reason. +// N channels waited sequentially the worst case is N×timeoutMs. A timeout is NOT a dropped frame +// the caller may re-encode over: the peripheral is still reading the symbol buffer, so the driver +// keeps it untouched and waits again on the next tick (RmtLedDriver::waitForPins). /// Block until this channel's transmit completes. Returns false on TIMEOUT, meaning the frame is /// STILL CLOCKING OUT: the caller must not touch the symbol buffer it handed over, because the /// peripheral is still reading it. @@ -1467,8 +1468,19 @@ bool audioCaptureInit(AudioMicHandle& h, uint8_t deviceIndex, uint32_t sampleRat // codec needs the clock to run (the ES8311 won't even answer I2C without it, so // AudioService starts I2S *before* audioCodecInit on a codec board). Returns false // on failure (bad pins, no I2S, out of memory): the module idles with a status error. +/// How the microphone speaks, which decides how many pins it needs and how the peripheral is +/// configured. Two physically different parts, not two settings of one: +/// - `I2sStd`: a PCM part (INMP441 and friends) on three wires, bit clock + word select + data, +/// already-decoded samples in Philips framing. +/// - `Pdm`: a one-bit-stream part on TWO wires, clock + data, decimated to PCM by the +/// peripheral. Boards with a mic soldered on tend to use these because they are cheaper and +/// smaller: the QuinLED Dig-Next-2's onboard mic is one (clock GPIO 8, data GPIO 7). +/// `sckPin` and `mclkPin` are meaningless in PDM mode and ignored. +enum class MicMode : uint8_t { I2sStd = 0, Pdm = 1 }; + bool audioMicInit(AudioMicHandle& h, uint16_t wsPin, uint16_t sdPin, - uint16_t sckPin, int16_t mclkPin, uint32_t sampleRate); + uint16_t sckPin, int16_t mclkPin, uint32_t sampleRate, + MicMode mode = MicMode::I2sStd); // Read up to `maxSamples` 32-bit samples into `out`; returns the count read // (0 if none ready / not initialized). Non-blocking enough for the render tick. diff --git a/test/scenarios/light/scenario_Audio_mutation.json b/test/scenarios/light/scenario_Audio_mutation.json index e1d61cb2..18f2c778 100644 --- a/test/scenarios/light/scenario_Audio_mutation.json +++ b/test/scenarios/light/scenario_Audio_mutation.json @@ -110,7 +110,7 @@ "min": 16, "max": 61, "n": 32, - "samples": [46, 34, 50, 44, 61, 36, 21, 21, 35, 21, 21, 21, 32, 24, 38, 46, 48, 27, 25, 16, 20, 16, 20, 20, 17, 17, 16, 16, 17, 17, 17, 19] + "samples": [34, 50, 44, 61, 36, 21, 21, 35, 21, 21, 21, 32, 24, 38, 46, 48, 27, 25, 16, 20, 16, 20, 20, 17, 17, 16, 16, 17, 17, 17, 19, 26] }, "last_updated": "2026-09-06" }, @@ -202,12 +202,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 30, - "p95": 120, + "p50": 28, + "p95": 106, "min": 17, "max": 404, "n": 32, - "samples": [120, 48, 106, 40, 404, 41, 17, 25, 35, 34, 70, 30, 33, 26, 53, 66, 59, 35, 38, 18, 22, 17, 17, 19, 28, 27, 22, 17, 19, 20, 37, 22] + "samples": [48, 106, 40, 404, 41, 17, 25, 35, 34, 70, 30, 33, 26, 53, 66, 59, 35, 38, 18, 22, 17, 17, 19, 28, 27, 22, 17, 19, 20, 37, 22, 28] }, "last_updated": "2026-09-06" }, @@ -321,7 +321,7 @@ "min": 17, "max": 213, "n": 32, - "samples": [58, 53, 66, 47, 213, 86, 17, 18, 32, 40, 66, 28, 33, 28, 57, 60, 63, 45, 44, 37, 20, 17, 18, 20, 19, 25, 18, 18, 19, 19, 21, 26] + "samples": [53, 66, 47, 213, 86, 17, 18, 32, 40, 66, 28, 33, 28, 57, 60, 63, 45, 44, 37, 20, 17, 18, 20, 19, 25, 18, 18, 19, 19, 21, 26, 28] }, "last_updated": "2026-09-06" }, @@ -418,7 +418,7 @@ "min": 19, "max": 125, "n": 32, - "samples": [69, 75, 85, 55, 125, 86, 19, 20, 38, 27, 66, 26, 36, 30, 62, 75, 68, 45, 45, 20, 23, 20, 21, 20, 21, 31, 20, 20, 21, 19, 22, 24] + "samples": [75, 85, 55, 125, 86, 19, 20, 38, 27, 66, 26, 36, 30, 62, 75, 68, 45, 45, 20, 23, 20, 21, 20, 21, 31, 20, 20, 21, 19, 22, 24, 28] }, "last_updated": "2026-09-06" }, @@ -513,7 +513,7 @@ "min": 19, "max": 110, "n": 32, - "samples": [63, 54, 61, 39, 110, 42, 23, 21, 32, 33, 69, 25, 37, 28, 65, 67, 62, 41, 80, 19, 21, 21, 21, 20, 22, 27, 20, 21, 19, 19, 21, 30] + "samples": [54, 61, 39, 110, 42, 23, 21, 32, 33, 69, 25, 37, 28, 65, 67, 62, 41, 80, 19, 21, 21, 21, 20, 22, 27, 20, 21, 19, 19, 21, 30, 28] }, "last_updated": "2026-09-06" }, @@ -603,12 +603,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 26, - "p95": 105, + "p50": 25, + "p95": 87, "min": 16, "max": 142, "n": 32, - "samples": [105, 57, 83, 39, 142, 39, 17, 26, 29, 38, 87, 23, 32, 25, 52, 79, 57, 29, 33, 18, 26, 20, 19, 19, 17, 17, 17, 16, 17, 17, 21, 17] + "samples": [57, 83, 39, 142, 39, 17, 26, 29, 38, 87, 23, 32, 25, 52, 79, 57, 29, 33, 18, 26, 20, 19, 19, 17, 17, 17, 16, 17, 17, 21, 17, 25] }, "last_updated": "2026-09-06" }, diff --git a/test/unit/light/unit_AudioBands.cpp b/test/unit/light/unit_AudioBands.cpp index c3979b72..b8038015 100644 --- a/test/unit/light/unit_AudioBands.cpp +++ b/test/unit/light/unit_AudioBands.cpp @@ -286,7 +286,9 @@ TEST_CASE("an onset fires once per hit, not once per block the hit lasts, and no namespace { void feedBlocks(mm::BandConditioner& c, const float db[16], float out[16], int blocks, uint8_t ratio, float maxGain = 24.0f, bool learning = true) { - for (int i = 0; i < blocks; i++) c.process(db, out, 23, 60.0f, 40.0f, ratio, maxGain, learning); + // gate 0: these cases test the conditioner's mapping, so nothing is gated as silence. The + // gate has its own case below. + for (int i = 0; i < blocks; i++) c.process(db, out, 23, 60.0f, 40.0f, ratio, maxGain, learning, 0.0f); } } @@ -347,5 +349,94 @@ TEST_CASE("the peak releases over seconds, not blocks, so one loud bar does not feedBlocks(c, quiet, out, 10, 20); // a quarter of a second later CHECK(c.peakDb[0] > 85.0f); // still remembers the loud bar feedBlocks(c, quiet, out, 400, 20); // ten seconds later - CHECK(c.peakDb[0] < 65.0f); // it has let go + // It has let go: the peak sits at the band's floor plus the minimum range, rather than + // anywhere near the loud bar it was holding. + // Converging on the minimum range: the peak falls while the floor drifts up to meet it. + CHECK(c.peakDb[0] - c.floorDb[0] < mm::BandConditioner::kMinRangeDb + 2.0f); +} + +// A quiet passage is not silence, and must keep its dynamics. The range clamp used to be the +// anti-noise mechanism and was set high enough (12 dB) to squash real music: a band swinging 6 dB +// filled only half the display, which reads as vivid bands with no dynamic range. The silence gate +// took that job over, so a band with real swing now uses the whole window. +TEST_CASE("a quietly played band still fills the display, so soft passages keep their dynamics") { + mm::BandConditioner c; float soft[16], loud[16], out[16]; + for (uint8_t b = 0; b < 16; b++) { soft[b] = 70.0f; loud[b] = 76.0f; } // a 6 dB swing + + // Settle on that swing, above the gate throughout: this is music, not a silent room. + for (int i = 0; i < 200; i++) { + c.process(soft, out, 23, 60.0f, 40.0f, 20, 40.0f, true, 65.0f); + c.process(loud, out, 23, 60.0f, 40.0f, 20, 40.0f, true, 65.0f); + } + const float atLoud = out[0]; + c.process(soft, out, 23, 60.0f, 40.0f, 20, 40.0f, true, 65.0f); + const float atSoft = out[0]; + + // The 6 dB swing is stretched across most of the 40 dB window, not left as 6 dB of it. + CHECK(atLoud - atSoft > 20.0f); +} + +// The level path levels itself in automatic mode, the other half of the one `levels` decision: +// the learner measures the VU's window the way it measures each band's, so the manual floor/gain +// sliders are genuinely manual-only rather than still shaping the picture from behind a hidden row. +TEST_CASE("in automatic mode a quiet room and a loud one both fill the level meter") { + const size_t n = 512; + int32_t quiet[n], loud[n]; + for (size_t i = 0; i < n; i++) { + const float ph = static_cast(i) * 0.1f; + // Both above the silence gate (60 dB at floor 0), a hundred times apart: the test is + // that each fills its OWN window, not that one of them is silent. + quiet[i] = static_cast(std::sin(ph) * 20000000.0f); // a quiet room + loud[i] = static_cast(std::sin(ph) * 2000000000.0f); // a hundred times louder + } + + // Music, not a test tone: the level has to VARY for a learned window to mean anything, so + // each room alternates a soft passage with a loud one. A steady tone correctly reads zero + // once the floor follower catches up to it, which is what "nothing is changing" looks like. + int32_t quietSoft[n], loudSoft[n]; + for (size_t i = 0; i < n; i++) { quietSoft[i] = quiet[i] / 2; loudSoft[i] = loud[i] / 2; } + + mm::AudioFrame f{}; + mm::LevelConditioner a, b; + for (int i = 0; i < 100; i++) { + mm::computeLevel(quietSoft, n, 0, 128, f, &a, 23); + mm::computeLevel(quiet, n, 0, 128, f, &a, 23); + } + const uint16_t quietLevel = f.level; + for (int i = 0; i < 100; i++) { + mm::computeLevel(loudSoft, n, 0, 128, f, &b, 23); + mm::computeLevel(loud, n, 0, 128, f, &b, 23); + } + const uint16_t loudLevel = f.level; + + // The two rooms read the SAME, though one is a hundred times louder: each is mapped onto its + // own learned window, which is the whole point of levelling the VU automatically. Both sit + // above the silence gate (floor 0 here), so this measures the levelling, not the gate. + CHECK(quietLevel > 0); + CHECK(quietLevel == loudLevel); + + // And manual mode still maps absolutely: the loud room reads higher than the quiet one. + mm::computeLevel(quiet, n, 50, 128, f, nullptr, 23); + const uint16_t quietManual = f.level; + mm::computeLevel(loud, n, 50, 128, f, nullptr, 23); + CHECK(f.level > quietManual); +} + +// The silence gate, the fix for a learner that levelled an empty room up to full scale. Measured on +// a Dig-Next-2: the raw path read flux 0-3 in a quiet room while the conditioner made 33-68 of it, +// because the lift is dominated by relocating a quiet band up into the display window and silence +// was relocated as eagerly as music. +TEST_CASE("a room below the floor reads silent, however hard the learner is asked to level") { + mm::BandConditioner c; float quiet[16], out[16]; + for (uint8_t b = 0; b < 16; b++) quiet[b] = 55.0f; // below a gate of 60 + + // Settle, then ask for the most aggressive levelling available. + for (int i = 0; i < 400; i++) c.process(quiet, out, 23, 60.0f, 40.0f, 20, 40.0f, true, 60.0f); + for (uint8_t b = 0; b < 16; b++) CHECK(out[b] == 0.0f); + + // And the tables were not dragged down to the room's noise: real music still reads. + float music[16]; + for (uint8_t b = 0; b < 16; b++) music[b] = 80.0f; + c.process(music, out, 23, 60.0f, 40.0f, 20, 40.0f, true, 60.0f); + for (uint8_t b = 0; b < 16; b++) CHECK(out[b] > 0.0f); } diff --git a/test/unit/light/unit_AudioLevel.cpp b/test/unit/light/unit_AudioLevel.cpp index d10cfa77..34a68791 100644 --- a/test/unit/light/unit_AudioLevel.cpp +++ b/test/unit/light/unit_AudioLevel.cpp @@ -127,6 +127,10 @@ TEST_CASE("AudioLevel: a high noiseFloor (dB floor) gates a modest signal to zer CHECK(hi.level == 0); } +// `gain` reads the same way on both paths (higher = narrower window = hotter), but scales the +// level's OWN base span rather than being used raw: a block RMS covers far more dB than a single +// bin's peak, and sharing the raw number left the VU in the bottom third of the meter at the +// settings that made the spectrum look right (measured on a Dig-Next-2: RMS 39-83 of 255). TEST_CASE("AudioLevel: higher gain (narrower dB window) reads a higher level") { auto s = sine(512, 8, 1 << 14); mm::AudioFrame lo, hi; From 87a51b4f81d41d8b34013049fda12ec12272eb6a Mon Sep 17 00:00:00 2001 From: ewowi Date: Sun, 6 Sep 2026 18:12:14 +0200 Subject: [PATCH 4/4] Run parallel LEDs on classic boards, alongside the microphone MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ParallelLedDriver drives a classic ESP32 for the first time: it previously reset the board on any pin set, with no panic and no coredump. The cause was not PSRAM, not dual-core and not the microphone, but a pin the chip package does not have. LEDs and a microphone now run together on the same board. Performance: 256 lights at 114 fps on a Dig-Next-2, 8,764us per frame; 64 lights at 414 fps on an Olimex Gateway with Ethernet up. Flash: esp32 1,976 KB (79% of slot), esp32-pico 2,023 KB (66%), both +2 KB. Core - gpioCapability reads the eFuse package id on the classic ESP32. The ESP32-PICO-V3-02 has no GPIO 16/17/18/23 (their pads serve the in-package flash and PSRAM) and wires PSRAM to 9/10; the PICO-D4 has its own set. A pin the package lacks is refused by name rather than wedging the flash cache, which is what made this fail silently. - The classic i80 bus takes I2S instance 1 and audio takes 0. The split is fixed in silicon rather than chosen: instance 0 alone carries the PDM converters and nothing needs instance 1, so the LED bus is the one consumer that can always yield. esp_lcd takes the first FREE instance, so 1 is claimed by holding 0 across bus creation. - Both sides retry once a second while a contended instance is busy, so whichever loses a claim recovers without the user touching a control. Gated on a contention refusal specifically: keyed on "it failed" instead, a bad pin set would re-init forever on the render thread. - AudioService clears the flux reference and the onset detector when a source is torn down, so a restarted source does not measure its first block against the last block of the old one. Light domain - clockPin (WR) may be unset on the classic: the platform sinks it onto an input-only pad, so it costs no GPIO. dcPin (DC) always needs a real pin, because esp_lcd toggles it in software every frame and that call on a pad with no output driver logs from a context where logging aborts. - RmtLedDriver defers a rebuild when the drain times out, rather than freeing symbols the peripheral is still reading. - RadialSpectrum builds its fade table only when `persistence` moves, not on every frame. ColorTrails zeroes its dither carry, as FluidEffect does. Scripts/MoonDeck - repo-health resets its measured-this-run state per snapshot, and the report documents the undated carry it prints for entries that predate dating. Tests - A room below the display window shows nothing on the spectrum, pinning the gate the caller passes (every other conditioner test picks its own). - WR unset is refused on LCD_CAM chips, DC unset on every chip, and a pin the package lacks is refused by name. - Two snapshots in one process: the second cannot inherit the first's measurement, and the four Built labels. Docs/CI - The Dig-Next-2's microphone moves from planned to supported, with its pins. - gpio-usage documents the PICO packages; drivers.md the WR/DC split and the I2S instances; lessons.md how to read a silent watchdog reset. - audio-dsp-roadmap drops four sections this branch shipped (band spacing, per-band smoothing, per-band conditioning, onset detection), 423 lines to 127; the adaptive noise gate is marked partly built. - MIGRATING drops a documented break nobody could hit: strength and maxBoost never existed on main. Reviews - 👾 Reviewer, uncommitted diff: retry gates firing on any failure rather than contention (fixed); a missing stub that broke the link on I2S-less targets (fixed); a doc line naming a DC sink that does not exist (fixed); a comment describing the opposite of its code (fixed); tick() calling a blocking wait (skipped, it is MM_NONBLOCKING and already skips the tick); dropping the allocation fallback (skipped, allocate-and-degrade is deliberate per ADR-0002). - 👾 Reviewer, committed diff: the fade table per frame, the dither carry, a MIGRATING break nobody can hit, VuMeters credited to an onset detector it does not use, a shipped backlog item, an orphaned doc block (all fixed); claimed-vacuous follower tests (rejected, the arithmetic shows they fail without the fix). - The band silence gate was moved a margin below the display window on the Reviewer's argument, then REVERTED after the bench: a quiet room went from flux 1-2 to 49-102 with onsets firing. Bands report a per-bin peak where the level reports a block RMS, so the level path's margin is a far larger concession here. The measurement is recorded where the gate is set. Co-Authored-By: Claude Opus 5 (1M context) --- docs/MIGRATING.md | 12 +- docs/backlog/audio-dsp-roadmap.md | 305 +----------------- docs/backlog/backlog-light.md | 105 ++++-- docs/history/lessons.md | 27 ++ docs/metrics/repo-health.json | 136 ++++---- docs/metrics/repo-health.md | 88 ++--- docs/moonmodules/light/drivers.md | 2 +- docs/moonmodules/light/effects.md | 4 +- docs/reference/gpio-usage.md | 8 +- moondeck/check/repo_health.py | 9 +- mooninstaller/deviceModels.json | 16 +- src/core/AudioBands.h | 25 +- src/core/AudioService.h | 15 + src/light/drivers/LedPeripheral.h | 7 + src/light/drivers/MultiPinLedDriver.h | 129 +++++--- src/light/drivers/ParallelLedDriver.h | 17 +- src/light/drivers/RmtLedDriver.h | 5 + src/light/effects/ColorTrailsEffect.h | 3 + src/light/effects/RadialSpectrumEffect.h | 14 +- src/platform/desktop/platform_desktop.cpp | 2 + .../desktop/platform_desktop_audio.cpp | 4 + src/platform/esp32/platform_esp32_gpio.cpp | 35 +- src/platform/esp32/platform_esp32_i2s.cpp | 33 +- src/platform/esp32/platform_esp32_i80.cpp | 86 ++++- src/platform/platform.h | 21 ++ .../python/test_repo_health_measured_state.py | 67 ++++ .../scenario_MoonModule_control_change.json | 20 +- .../light/scenario_Audio_mutation.json | 48 +-- test/scenarios/light/scenario_Aurora_fps.json | 66 ++-- .../light/scenario_Driver_mutation.json | 36 +-- .../light/scenario_Effects_composition.json | 8 +- .../light/scenario_Fields_polar_lut.json | 66 ++-- .../light/scenario_Fluid_solver.json | 86 ++--- .../light/scenario_GridBlacks_blackpixel.json | 8 +- .../light/scenario_GridLayout_resize.json | 12 +- .../light/scenario_Layer_base_pipeline.json | 8 +- .../light/scenario_Layer_memory_1to1.json | 4 +- .../light/scenario_Layouts_mutation.json | 32 +- .../scenario_MoonLiveEffect_livescript.json | 68 ++-- .../light/scenario_MoonLive_pipeline.json | 40 +-- .../scenario_MultiplyModifier_memory_lut.json | 6 +- .../scenario_MultiplyModifier_pipeline.json | 2 +- .../light/scenario_Trails_ladder.json | 44 +-- .../light/scenario_modifier_chain.json | 32 +- .../light/scenario_modifier_swap.json | 22 +- test/scenarios/light/scenario_perf_full.json | 136 ++++---- test/scenarios/light/scenario_perf_light.json | 22 +- .../light/scenario_peripheral_grid_sweep.json | 120 +++---- .../light/scenario_peripheral_switch.json | 40 +-- test/unit/light/unit_AudioBands.cpp | 42 +++ test/unit/light/unit_MultiPinLedDriver.cpp | 67 ++++ 51 files changed, 1223 insertions(+), 987 deletions(-) create mode 100644 test/python/test_repo_health_measured_state.py diff --git a/docs/MIGRATING.md b/docs/MIGRATING.md index 4135684c..7c540a95 100644 --- a/docs/MIGRATING.md +++ b/docs/MIGRATING.md @@ -24,18 +24,14 @@ projectMM ships **no migration code**: the persistence layer is robust by defaul ## Unreleased (`next-iteration`) -### Audio: automatic levels tune with one control, and `strength` / `maxBoost` are gone +### Audio: `floor` is now the silence threshold in both level modes **Action: re-set `floor` on a device whose microphone you had tuned.** Affects any device running the Audio module with a local microphone or line-in. -`levels = automatic` exposed four sliders (`floor`, `gain`, `strength`, `maxBoost`) for what is one -decision. Two of them are now constants and the mode is tuned with `floor` alone. - -`strength` and `maxBoost` acted on the learner's per-band range, which the conditioner has already -normalized per rig, so one value serves every source: a PDM microphone, an INMP441 and a line-in all -look the same by the time they reach it. They are fixed at the values that measured best on the -bench (4 and 24 dB). Persisted keys for both are ignored on load, so nothing has to be cleaned up. +`levels = automatic` is tuned with `floor` alone: how hard the learner levels, and how far it may +lift a band, are constants rather than controls, because both act on a per-band range the +conditioner has already normalized per rig, so one value serves every source. `floor` is what changes meaning, and why re-setting it is worth a minute. It is now the **silence threshold** in both modes: below it a band reads zero and the learner does not learn from it. That diff --git a/docs/backlog/audio-dsp-roadmap.md b/docs/backlog/audio-dsp-roadmap.md index 622f1704..5bb5ccce 100644 --- a/docs/backlog/audio-dsp-roadmap.md +++ b/docs/backlog/audio-dsp-roadmap.md @@ -80,306 +80,15 @@ All of the following widen the **source seam** — what feeds the pipeline — l Troy also has **DSP boards** (I²S front-ends "way beyond regular codecs") — recorded so the line-in / codec work leaves room for that class of source. -## Band spacing: the geometric split wastes a quarter of the display - -**The defect, measured.** `magnitudesToBands` splits the FFT bins geometrically: -`edge[e] = nMag^(e/16)`, equal frequency RATIO per band. That is the textbook way to map linear bins -onto pitch, and at our shipped shape (512-sample FFT, 22050 Hz, so 256 bins of 43.1 Hz) it produces -this: - -| band | bins | count | Hz | -|---|---|---:|---| -| 0 | 1-1 | **0** | 43-43 | -| 1 | 1-2 | 1 | 43-86 | -| 2 | 2-2 | **0** | 86-86 | -| 3 | 2-4 | 2 | 86-172 | -| 4 | 4-5 | 1 | 172-215 | -| 5 | 5-8 | 3 | 215-345 | -| ... | | | | -| 15 | 181-256 | **75** | 7795-11025 | - -**Two bands have no bins at all and two more have a single bin**, while the top band averages 75. -A quarter of a 16-band display is dead or nearly dead, and it is the quarter where music has its -energy. On a spectrum effect that reads as bass bars that barely move while the treble end is a -smear of everything above 8 kHz. - -The cause is that a geometric split is scale-free but the FFT is not: below `binHz * 2` there are -simply no distinct bins to hand out, so the low bands collide. Raising the FFT size fixes it by -brute force (1024 samples halves `binHz`) at 2x the compute and 2x the latency, which is the wrong -trade on an MCU. - -**What LedFx does instead.** Its melbank offers six spacings and its own comments rank them: standard -HTK mel is "weak on the bass and high end"; `bark` "needs tinkering"; plain `triangle` "kinda sucks". -The two it ships as defaults are hand-tuned log variants, `scott_mel` (base 9) and `matt_mel` -(base 12, the default), written explicitly to "spread out the low range and compress the highs". It -also splits into THREE banks (lows 20-350, mids 350-2000, highs 2000-15000) so an effect that wants -bass gets a bank resolved for bass rather than picking bins out of one spread. - -**What to take.** Not the three banks (memory, and our 16-band frame is a published contract), and not -mel as an unexamined default: mel is a perceptual scale for SPEECH, and its low end is coarser than -ours, which is the opposite of the fix. What transfers is the principle behind `matt_mel`: **choose -the band edges so every band owns bins, then bias what is left toward the low end.** A concrete shape: -start the edges at `binHz * 2` rather than bin 1, enforce a minimum of one bin per band by -construction, and distribute the remainder on a log curve whose base is a control rather than a -constant. Cost is zero in the hot path (17 edges, computed once per rate change), so this is a table -change with a golden test, not an architecture change. - -**How to judge it.** A swept sine from 40 Hz to 10 kHz should light each band in turn, one at a time, -with no band staying dark and no band lit twice. That is a unit test, and the current split fails it -by construction at bands 0 and 2. - -## Per-band smoothing: the ballistic belongs on the band, not the effect - -`smoothFollow` exists (`math16.h`) and `SpectrumEffect` uses it, together with `peakHold`. So the -mechanism is built; what is missing is WHERE it is applied and whether it is asymmetric. - -**Today** each effect smooths for itself, symmetrically, if it remembers to. That has three costs: a -new audio effect starts jittery until its author rediscovers the problem, two effects on the same -signal disagree about what the spectrum is doing, and a symmetric filter is the wrong ballistic for a -meter, making the attack as sluggish as the decay and rounding off exactly the drum hits an effect -exists to show. - -**LedFx applies an asymmetric exponential filter per band** inside the melbank (rise 0.99, decay 0.7: -fast up, slow down), so every effect downstream sees an already-ballistic spectrum. WLED and FastLED -converged on the same asymmetric form independently, which is recorded in -[power-functions-analysis-bottom-up](power-functions-analysis-bottom-up.md) G4. - -**What to take.** Move the ballistic into `AudioFrame`, beside `level` and `levelSmoothed`, as a -`bandsSmoothed[16]` computed once per block with separate rise and decay constants. `bands` stays raw -for anything that wants the instantaneous value, exactly as `level` and `levelSmoothed` already -coexist: the pattern is established, this extends it to the spectrum. Cost is 16 bytes of frame and -32 multiply-adds per block, which is nothing against the FFT. - -**How to judge it.** A step input should reach 90% within one block and fall to 50% over roughly ten, -and a kick drum should be visibly sharper on a spectrum effect. Both are testable on the host with a -synthetic signal. - -## Per-band conditioning: the generic form the two above are special cases of - -The two sections above fix band EDGES and band BALLISTICS. The third axis is band LEVEL, and once it -is per band the other two get easier. This section is the generic design; the industry names are used -throughout, because every part of this is a standard piece of audio equipment. - -### The problem, measured - -`floor` and `gain` are single global values applied identically to all 16 bands (`AudioBands.h`, -`magToByte`). A band reports the PEAK magnitude of its bins (so a single tone lights one band rather -than smearing), and pink noise (equal energy per octave, the standard reference for typical program -material) has a per-bin magnitude falling as 1/sqrt(f). So under pink noise, with one gain, the -bands read: - -| band | lowest Hz | relative reading | -|---:|---:|---:| -| 0 | 43 | 1.00 | -| 4 | 215 | 0.45 | -| 8 | 689 | 0.25 | -| 12 | 2756 | 0.12 | -| 15 | 7795 | 0.07 | - -A 14x spread across the display from a signal that is, by definition, spectrally balanced. No single -gain serves both ends: set it for the bass and the treble is a flicker, set it for the treble and the -bass pins at full. Every microphone, line-in and genre shifts the curve further (a MEMS mic's own -response, a room's bass build-up), which is why a hand-tuned table is tuned for exactly one setup. - -(An earlier draft of this section had the spread the other way round, from a bin-count argument -that applies to a SUM per band. The aggregation is a max, so the treble is the starved end.) - -### What the industry calls the parts - -Naming them correctly is what makes this recognisable rather than bespoke: - -- **Band gain / makeup gain** — the per-band multiplier. A graphic equaliser's slider. -- **AGC (automatic gain control)** — deriving that gain from the signal rather than from a control. - Its two time constants are **attack** and **release**; a **hold** delays the release after a peak. -- **Noise floor** — the level a band reads with no program material. Learned per band, since mic - self-noise and mains hum at 50/100 Hz are not flat. -- **Ballistics** — how fast a meter rises and falls. **Peak** ballistics rise instantly; **VU** is - slow and averaged; **PPM** (peak programme meter, IEC 60268-10) rises fast and falls slowly, which - is the standard broadcast choice and exactly the asymmetric filter § Per-band smoothing describes. - Naming ours PPM-like says more than "asymmetric smoothing" does. -- **Weighting curve** — a fixed per-band offset applied before anything else. **A-weighting** (IEC - 61672) matches human hearing at low levels; **C-weighting** is flatter; **Z** is none. The - "loudness" button on a hi-fi is a bass-and-treble lift at low volume, from the equal-loudness - contours (ISO 226, the Fletcher-Munson curves). - -### The design: two tiers, because full per-band normalization is the wrong instrument - -The multiband dynamics literature names the trap before we can fall into it. A compressor that -normalizes every band independently "throws off the entire spectral balance" (Recording Magazine on -multiband dynamics; the same problem is the subject of US patents 8,634,578 and 9,673,770, "multiband -dynamics compressor with spectral balance compensation"). Music with more lows than highs is SUPPOSED -to show more lows than highs; a display that levels every band to the same height has erased the one -thing it was meant to show. The product owner's instinct here was exactly this objection. - -The standard resolution, from those patents and from hearing-aid WDRC (2 to 24 channels of exactly -this, on DSPs far smaller than an ESP32, so cost is settled): **two tiers with different speeds.** - -- **Slow, applied EQUALLY to all bands**: overall loudness. This preserves the spectral balance by - construction, because every band moves by the same amount. It is the global `gain` we have, - made automatic. -- **Slow, per band, converging to a STATIC curve**: calibration. Mic response, room, bin width. It - learns the fixed shape of this rig and this room, and then holds it; it is not chasing the music. - This is where `ratio` lives: 1:1 leaves the raw balance, higher ratios flatten the rig's own - coloration. -- **Fast, per band**: ballistics only (the PPM rise and fall). Never gain. A fast per-band gain is - what causes cross-spectral pumping, and it is the one thing all three sources say not to do. - -The sequencing is a dependency, not a preference. WLED's own docs state it for their global AGC: -squelch must be set first "so AGC knows what silence looks like". The floor converges BEFORE the gain -loop starts, or the gain learns the noise. - -Three per-band arrays, all computed once per block, feeding the existing `magToByte`: - -1. **`bandFloor[16]`** — a running minimum with a slow release, so it tracks silence but recovers if - the room gets quieter. This is the frequency-domain half of the adaptive noise gate below; the two - share a mechanism and should share code. -2. **`bandGain[16]`** — a running maximum with attack/release/hold, normalising each band to its own - recent peak. This is the piece that makes band edges much less critical: a band with few bins - simply learns a higher gain. It does NOT fix a band with zero bins, which is why § Band spacing is - still a correctness fix rather than a taste one. -3. **`bandsSmoothed[16]`** — the PPM ballistic from § Per-band smoothing, applied after the other two. - In scope with this work, not separate: gain decides how much, ballistics decide how fast, and - tuning either without the other chases its own tail. - -### Weighting presets, on top rather than instead - -A learned gain answers "make every band visible". It does not answer "which bands SHOULD dominate", -which is taste and genre. So a **weighting curve** rides on top as a fixed per-band offset in dB: - -- **Flat (Z)** — what the FFT saw. The reference. -- **A-weighting** — perceptual, de-emphasises the extremes. Good for a level meter. -- **Loudness** — the equal-loudness lift: bass and treble up, mids down. What people mean by "make - it punchy". -- **Pink** — compensates the bin-count spread so pink noise reads flat. The right default for a - spectrum display, and computable from the band edges rather than tabled. - -Four 16-entry int8 tables, applied as an offset before the gain. A user picks a name, not sixteen -sliders. - -### Measurement modes, and what they cost - -The product owner's three modes are the right shape, and the cost settles which is the default: - -- **Keep** — learn nothing; use the stored table. Deterministic, and what an installation wants once - it is tuned. Also the answer for a show that must look identical every night. -- **Period** — learn during an explicit window (a "calibrate" button, or the first N seconds), then - freeze. One honest use: point it at the room before doors open. -- **Continuous** — always adapting, with slow constants. - -**Continuous is affordable.** The analysis runs once per 512-sample block (~23 ms), never per light -and never per tick, and the whole audio path measures **136 us per block on an ESP32-S3**, which is -0.59% of the block period. The three additions are 16 compares, 16 compares plus 16 multiplies, and -16 multiply-adds: about **0.6 us, or +0.4% on the audio path**, and nothing at all on the render hot -path. Continuous can be the default; the modes exist for determinism, not for cost. - -The real argument against continuous is musical rather than computational: **AGC breathes**. A quiet -passage gets amplified until it looks loud, which is wrong when the quiet is the point. - -The guards are the standard compressor controls, and there are two distinct things a user means by -"how aggressive" which must not be collapsed into one slider: - -- **`ratio`** — how much of the difference the learner removes, the compressor's depth control. 1:1 - is off (each band keeps its raw level) and higher ratios push the bands toward equal. This is - "how much". -- **`attack`** and **`release`** (ms and seconds) — how fast the learned gain follows a rise and - recovers afterwards. **Release is what breathing is**: a fast release re-levels a quiet passage - until it looks loud. This is "how fast". -- **`hold`** — a delay before release begins, so the gain does not pump between beats. The standard - companion to release, and the cheap fix for the most audible artefact. -- A **maximum gain** in dB, so a silent band cannot be amplified into its own noise. A limit rather - than a ballistic, and the guard that makes the rest safe. - -Defaults worth starting from: a low ratio, a fast attack, a release in seconds, and a hold of about -a beat. Those are conservative on purpose, the settings a broadcast limiter would use, so the -learner is invisible until someone goes looking for it. - -### What replaces `floor` and `gain` - -The global pair goes. Keeping them as an offset on top of a learned per-band pair would be two -mechanisms doing one job, kept only to avoid a break, which is the debt -[ADR-0013](../adr/0013-no-migration-code-robust-persistence-plus-documented-breaks.md) exists to -refuse: document the break, do not carry the old shape forward. - -What a user needs from them survives in a better form. `gain` becomes **`ratio`**, how far the -learner is allowed to push the bands toward equal, which is the compressor's own name for that -control and the one someone actually reaches for. -`floor` becomes the learned per-band floor, which is what they were approximating by hand. The -break gets its MIGRATING entry, and a restored config loses two values that the learner re-derives -within seconds of hearing audio. - -### The UI: one read-out row, not sixteen - -Nothing per band is something a user SETS. Every knob in this design is global on purpose (`ratio`, -`attack`, `release`, `hold`, the maximum gain, the measurement mode, the weighting preset), and the -per-band floor and gain are learned observations. So a sixteen-row list, considered here first -because `ListSource` makes it cheap to build, would be a diagnostic costing a 1 Hz push of sixteen -rows for values nobody edits. And the live per-band picture already exists: the AudioSpectrum -effect in the preview IS the spectrum analyser. - -What earns its place is one row: a compact read-out of the sixteen learned gains (or floors, -toggled), sixteen small numbers in one string, updated at the same 1 Hz cadence and in the same -shape as the `level RMS` and `peakHz` read-outs beside it. About fifty bytes, no new traffic -pattern, and it answers the one diagnostic question ("is a band stuck, or pinned?") at a glance. A -per-band manual trim is not built: `ratio` and the weighting preset cover taste, and sixteen sliders -are real estate for a control nobody reaches for. - -Still worth doing FIRST, before the learning: the read-out row showing the raw band levels is a -diagnostic for § Band spacing on its own, and it makes an empty band visible to a user rather than -only to a unit test. - -### How to judge it - -- **Pink noise in, flat display out** with the pink weighting: the direct test of the bin-count fix. -- **A swept sine lights each band in turn**, none dark, none twice: the band-edge test. -- **Silence converges to zero** within the learning window on a real mic, including 50/100 Hz hum. -- **A kick drum is visibly sharper** than with symmetric smoothing: the ballistics test. -- **Switching genre re-levels within seconds** without visible pumping on sustained material. - -## Onset and tempo: reactive first, predictive after - -`BeatPhase` is a clock, not a detector: the user sets a BPM and effects follow it. Nothing in the -tree hears a beat. Two standard pieces would, and they are different in kind, which matters because -the usual worry ("the beat has happened before you know it was one") applies to one and is answered -by the other. - -**Onset detection is reactive, cheap, and nearly free here.** The standard onset detection function -is **spectral flux** (Bello et al. 2005, Dixon 2006): the sum over bands of the POSITIVE difference -between this block's magnitude and the last. A rise across the spectrum is a hit; a fall is not. We -already compute the 16 band magnitudes once per block, so flux is 16 subtractions and 16 compares on -top, with the block's own ~23 ms latency, which is under what a viewer can attribute. An `onset` -field in `AudioFrame` (0 or a strength, 0..255) is the smallest useful shape, and a per-band flux is -the same loop kept per band for an effect that wants to know WHERE the hit was. Thresholding the -flux against its own recent mean is what separates a hit from a swell, and it reuses the learned -floor machinery from § Per-band conditioning. - -**Tempo tracking is predictive, and it is the answer to "too late".** A tracker does not react to a -beat, it locks onto the periodicity of the onset stream and predicts the NEXT one, so an effect can -fire on the beat or ahead of it. The reference form is Ellis, "Beat Tracking by Dynamic Programming" -(JNMR 2007): estimate the dominant period of the onset function by autocorrelation, then choose beat -times that agree with both the period and the onset strength. Real-time variants exist (IBT, OBTAIN) -and run hundreds of times faster than real time on a desktop. On an MCU the cost is the -autocorrelation over a few seconds of onset history: about 260 values at block rate over the lags -that span 40 to 180 BPM (14 to 65 blocks), roughly 13,000 multiply-adds. Run every block that is -50 to 100 us on an S3, most of the audio budget again; run ONCE PER SECOND, which is all a tempo -estimate needs, it amortises to under 1% of one block. So the tracker is scheduled at its own -cadence, not the block's, and like everything in this file it is in the audio path, never the -render path. Unmeasured until built. -What it delivers is a `bpm` estimate and a `beatPhase` prediction, which is exactly what `BeatPhase` -consumes today from a control: the clock stays, the number feeding it becomes measured. - -**Sequence.** Onset first: it is the cheaper piece, it has immediate value (a flash on the hit), and -it is the input the tracker needs anyway. Tempo tracking second, judged on the bench against a -metronome and against real music with a known BPM, because a tracker that locks onto the half-time -or double-time pulse looks confidently wrong. - -**How to judge it.** A click track produces one onset per click and no others; a sustained tone -produces none after its attack; a track with a known BPM yields that BPM within 2% after a few -seconds and holds it, and the predicted beats land within one block of the true ones. - ## Adaptive noise gate (softhack007's concept, our analysis) -Replace the borrowed `squelch`/`noiseFloor` knob ("a WLED-SR workaround, not a real gate") with a -proper adaptive noise gate. From softhack007 (granted permission to analyse); the assessment is ours. +**Partly built.** `floor` is now a real silence threshold on both the level and the band paths: below +it a band reads zero AND is not learned from, which is what stopped the learner amplifying an empty +room to full scale. What remains from the design below is the ADAPTIVE half: hysteresis, the +asymmetric open-fast/close-slow timing, and a learned threshold rather than a set one. + +The original framing, kept because the remaining work is judged against it: replace the borrowed +`squelch`/`noiseFloor` knob ("a WLED-SR workaround, not a real gate") with a proper adaptive gate. From softhack007 (granted permission to analyse); the assessment is ours. **The concept:** a standard [noise gate](https://en.wikipedia.org/wiki/Noise_gate) (below a threshold the signal is silenced, above it passes), **asymmetric bang-bang timing** (open fast, close slow; diff --git a/docs/backlog/backlog-light.md b/docs/backlog/backlog-light.md index 5e6def8c..f096df52 100644 --- a/docs/backlog/backlog-light.md +++ b/docs/backlog/backlog-light.md @@ -243,6 +243,25 @@ When the bus stalls mid-frame the WS2812 strip is left holding **random / max-br **Reference (study, don't copy — write fresh against our architecture):** the line-by-line source read is in [led-driver-psram-ring-analysis.md](led-driver-psram-ring-analysis.md); the ADR framing is [ADR-0014](../adr/0014-own-i80-dma-driver-below-esp-lcd.md) (which calls the internal-RAM-ring-with-CPU-refill "the only thing that can ever work on the classic ESP32," deferred to a phase 2). The S3/P4 MoonI80 ring is the closest in-tree prior art for the ring mechanics (linear self-terminating chain, per-drain refill, drain-count termination) — but its refill is a task and its buffers are internal-only *because the LCD_CAM GDMA can't sustain a PSRAM read at the shift clock*; the classic I2S ring is the inverse (PSRAM framebuffer legal, ISR refill mandatory), so it borrows the *shape* but not the constraints. Do the S3/P4 **ISR-refill + `MM_HOT`** work first (it proves the ISR-refill pattern in-tree on the friendlier unified-DIRAM chips); the classic raw-I2S ring is the next tier up, reusing that pattern where IRAM is genuinely tight. +**Why MoonI80 cannot serve the classic, and what this driver inherits (2026-09-06).** `MoonI80` +is written against **LCD_CAM**: it drives the GDMA link list and the LCD registers directly +(`gdma_link_*`, `lcd_ll_*`) to bypass `esp_lcd`'s per-transaction peripheral reset (ADR-0014). The +classic ESP32 has no LCD_CAM at all; its i80 is the **I2S** block in LCD mode, a different +peripheral with its own register file (`i2s_ll_*`) and its own DMA, so none of MoonI80's code +applies and `MoonLedDriver::lanesAvailable()` reports `platform::lcdLanes`, which is 0 there. The +picker hides the backend rather than gating it, which is why the classic has exactly one parallel +route today: `esp_lcd`'s I2S backend, whole-frame, internal-RAM-only, capped near 2048 lights. +This driver is the second route, and it stands in the same relation to `esp_lcd` on I2S as MoonI80 +does on LCD_CAM: same shape, no shared code. + +Two things it inherits from the 2026-09-06 i80 work, both worth keeping. It should claim **I2S +instance 1** and leave 0 for audio, for the reason recorded in the instance-split entry above +(instance 0 alone carries the PDM converters, nothing needs 1), and owning the peripheral directly +it can simply ASK for instance 1 rather than steering `esp_lcd` by parking instance 0, which is the +workaround the current backend needs. And it inherits the package-aware pin refusal: a pin the +package lacks wedges the flash cache silently, which cost a full day of bisection on the +ESP32-PICO-V3-02. + ### P4 Parlio streaming ring — lift the P4 Parlio ceiling past ~21K to light-count-independent (WANTED) **Port the ring concept to the P4 Parlio path**, to drive far more than its current whole-frame ceiling. troyhacks' MoonLight Parlio driver reaches **~21K LEDs RGB (~16K RGBW)** at 16 lanes — but NOT by materialising the whole encoded frame: he stages into a **fixed ~512 KB PSRAM buffer** and DMAs it out in **64 KB chunks** (`max_transfer_size = 65535`), so the DMA never needs the whole frame contiguous. That is the SAME idea as our MoonI80 ring, applied to Parlio on the P4 (where — unlike the S3 shift clock — the DMA *can* sustain PSRAM reads at the WS2812 rate). His ceiling is a *chosen buffer size*, not a hardware wall, so it caps at ~21K. @@ -531,7 +550,6 @@ not), and a module each. The manual level + 16-band FFT spectrum has shipped (AudioService; what landed and why is in [lessons.md](../history/lessons.md)). These are the deferred follow-ups, each its own increment: -- **Per-band noise-floor (kill a steady single-frequency hum)** — the bench mic picks up a constant ~258 Hz tone (a mains harmonic via the mic/supply) that lights one band even in silence. A high-pass can't remove it (it's well above the ~40 Hz DC-blocker cutoff) without also killing real bass; the clean fix is a per-band adaptive floor that learns each band's idle baseline and subtracts it, so a constant tone in one band gates to dark while the others stay sensitive. Minimal version ≈ 16 floats of state + ~16 ops/frame. This is the next concrete audio step. - **Adaptive conditioning** — auto noise-floor / auto-gain / smoothing so the display self-calibrates to a room ("sound off → dark, sound on → vivid") instead of being tuned by hand. A self-calibrating version was prototyped and removed; the manual `floor`/`gain` is the shipped baseline. Reinvent from scratch when wanted, and **tune it in a quiet room** — a noisy environment (a strong, varying low-frequency ambient) is the adversarial case that made the prototype hard to settle. (The per-band floor above is the first piece of this.) - **Adaptive noise gate** — replace the borrowed `squelch`/`floor`-as-gate with a real noise gate: asymmetric bang-bang timing (open fast, close slow), a relative "detect silence" test (thresholds as factors of a learned floor, not absolute sample counts), keying off the RMS envelope we already compute, GEQ/FFT bands left untouched. A softhack007 concept; analysed and judged in full (good idea, industry-standard, but tight on the <30ms budget; decompose into steps rather than overhaul) in AudioService.md § Adaptive noise gate. The recommended sequencing: the per-band floor above is step 1 (its complementary frequency-domain half), the relative-threshold-over-RMS is the cheap high-value cherry-pick as step 2, hysteresis/timing step 3, log-domain + soft-gate optional. Eventually retires the manual squelch. - **Pin auto-scan** — detect the mic's `sdPin` with `wsPin`/`sckPin` fixed (a noise-prompt + confirm convenience); ships today with explicit pin controls. @@ -743,27 +761,68 @@ The LED-driver increments **shipped**: increment 1 (RMT/WS2812B single-strand on **What it costs when it comes:** a small preallocated record queue the built-in writes into, drained from a housekeeping path through the existing platform output seam. The budget and the burst-spent message stay as they are; only where the bytes are written moves. Worth doing when a script is left with a print in it on a real fixture, which is the case the cap exists for. -- **ParallelLedDriver hangs in `esp_lcd_new_i80_bus` on classic ESP32** (2026-09-03). Setting any - pin list on a QuinLED Dig-Next-2 (ESP32-PICO-V3-02, IDF v6.1-rc1) resets the board: - `TG1WDT_SYS_RESET`, both CPUs stopped at the same PC, no panic and no coredump. Traced to the - call itself, which never returns: a log line immediately before `esp_lcd_new_i80_bus` prints and - the "created OK" line after it never does. RmtLedDriver on the same board is fine, so it is this - bus API rather than the chip or the wiring. - - **What it is NOT**, each ruled out on the bench: the frame size (hangs at 3200 and 10112 bytes - alike, both far inside the internal-DMA budget), duplicate pins parked on WR (hangs with 8 - distinct data pins), and the WR/DC pin choice (hangs on 10/11, on 21/22 and on 18/23). IDF does - declare `SOC_LCD_I80_SUPPORTED` for this target, so the driver is configured for an API the SOC - caps say exists. - - **Next step:** call `esp_lcd_new_i80_bus` from a bare IDF example on the same chip and IDF pin. If - that hangs too it is upstream and belongs in an IDF issue; if it returns, the difference is in our - bus config. Until then classic-ESP32 boards use RmtLedDriver, and `ParallelLedDriver` stays - registered and selectable rather than compiled out: hiding it would remove the one path anyone can - retest with, and the driver is correct on every LCD_CAM chip. - - LCD-MM cannot substitute here. It is `lcdLanes`-only by design (MoonLedDriver.h, - `lanesAvailable`) because the classic ESP32's i80 IS the I2S peripheral, which that backend does - not implement, so a chip without LCD_CAM has no second parallel route. +- **A bus pin that belongs to another peripheral is accepted, and takes the board off the + network** (2026-09-06). ParallelLedDriver's classic-ESP32 WR/DC defaults are 18/23, which are + IDF's Ethernet MDIO/MDC defaults on the same chip, so an Olimex ESP32-Gateway that added the + driver lost its Ethernet link within seconds and looked crashed (the firmware kept ticking on + serial; it stayed reachable only through its WiFi fallback). A DC pin of 5, the Gateway's PHY + reset line, did the same. The driver's own comment claims 18/23 are "unused by the catalog's + boards", which is false for every RMII board. Two fixes, both wanted: (1) classic defaults that + collide with nothing common (the RMII set 0/16-19/21-23/25-27, flash 6-11, straps 0/2/12/15, + and the Dig-Next-2's relays 5/20-22 and I2C 14/15 all excluded); (2) the pin registry already + detects a double claim (`PinsModule::flagConflicts`) but only colors the edge, so a control + write that lands on a GPIO another control owns should be refused with a status naming the + owner, the way a reserved flash pin already is. A collision with a network pin is worse than + most: it ends the session that could have fixed it, and the SMI pins stay re-muxed until a + reboot even after the driver releases them. + +- **Bench-verified classic parallel setups, not yet in the catalog** (2026-09-06). Every classic + board in `deviceModels.json` ships `RmtLedDriver`, so none carries a `ParallelLedDriver` entry, + and the driver's defaults (`clockPin` unset, `dcPin` 33) work on a classic board without one. + Two setups are proven on hardware and worth recording before they are lost: the **Olimex + ESP32-Gateway** drives 64 lights on GPIO 16 with `clockPin` 32 / `dcPin` 4, and its free pins are + scarce enough that a catalog entry should pin them explicitly rather than inherit a default (its + Ethernet PHY holds 18/23 as MDIO/MDC and 5 as reset, all of which the old defaults collided + with); the **QuinLED Dig-Next-2** drives 256 lights on GPIO 2 with `clockPin` unset / `dcPin` 33. + Add them when a classic board actually ships parallel output as its default, rather than + speculatively across the other 16 classic boards, none of which has been tested this way. + +- **Classic-ESP32 I2S instance split: LEDs on 1, audio on 0** (2026-09-06, SHIPPED, kept as the + rationale). The classic ESP32's parallel LED bus IS an I2S peripheral, so it contends with the + audio input, and the 2026-09-03 "hangs in `esp_lcd_new_i80_bus`" entry is closed: that was a pin + fault (the ESP32-PICO-V3-02 has no GPIO 18/23, which were the WR/DC defaults), not contention. + The split is fixed in silicon rather than chosen: instance 0 alone carries the PDM converters + (`I2S_LL_PDM2PCM_SUPPORTED_PORT_MASK` is `1U << 0`), and NOTHING on this chip requires instance + 1, so the LED bus is the one consumer that can always yield. It therefore takes 1 unconditionally + and audio takes 0, which removes the boot race entirely, leaves 0 for every audio source (PDM, + standard I2S, line-in ADC, codec), and costs nothing. `esp_lcd` picks the first FREE instance + rather than taking one by number, so 1 is claimed by holding 0 across bus creation. For contrast, + hpwit's I2SClocklessLedDriver hard-codes `I2S_DEVICE 0` and would take the PDM instance instead. + Both sides also retry once a second while they want a busy instance, so the loser of any + contention recovers without the user touching a control. + +- **Bench-verified classic parallel setups, not yet in the catalog** (2026-09-06). Every classic + board in `deviceModels.json` ships `RmtLedDriver`, so none carries a `ParallelLedDriver` entry, + and the driver's defaults (`clockPin` unset, `dcPin` 33) work on a classic board without one. + Two setups are proven on hardware and worth recording before they are lost: the **Olimex + ESP32-Gateway** drives 64 lights on GPIO 16 with `clockPin` 32 / `dcPin` 4, and its free pins are + scarce enough that a catalog entry should pin them explicitly rather than inherit a default (its + Ethernet PHY holds 18/23 as MDIO/MDC and 5 as reset, all of which the old defaults collided + with); the **QuinLED Dig-Next-2** drives 256 lights on GPIO 2 with `clockPin` unset / `dcPin` 33. + Add them when a classic board actually ships parallel output as its default, rather than + speculatively across the other 16 classic boards, none of which has been tested this way. + +- **Classic-ESP32 parallel LEDs and a PDM microphone are exclusive** (2026-09-06). The + 2026-09-03 "hangs in `esp_lcd_new_i80_bus`" entry is closed: the QuinLED Dig-Next-2 carries an + ESP32-PICO-V3-02, whose package has no GPIO 18/23 (its pads serve the in-package flash and PSRAM), + and the classic WR/DC defaults were exactly 18/23. The driver now refuses a pin the package lacks + and defaults both lines to unset (sunk onto input-only pads). What remains: IDF's LCD mode exists + on I2S0 only, and `esp_lcd` falls through to I2S1 when I2S0 is taken, which wedges the chip the + same silent way. A PDM microphone is also I2S0-only in hardware, so the platform refuses the bus + with a named status when I2S0 is held. Two follow-ups: report the I2S1 fallthrough upstream (it + should return an error), and note that the raw-I2S classic driver above (the ring, on I2S1 as + hpwit's driver runs) is what lets the two coexist, on top of lifting the 2048-light cap. A + standard I2S microphone (INMP441) is content on I2S1 and coexists today when the LED bus claims + I2S0 first. (The shared lane-driver scaffolding extraction — when a 3rd parallel backend lands — is tracked separately under [§ Extract shared lane-driver scaffolding](#extract-shared-lane-driver-scaffolding-when-the-3rd-parallel-backend-lands-deferred) above.) diff --git a/docs/history/lessons.md b/docs/history/lessons.md index 043e7392..f605bf3f 100644 --- a/docs/history/lessons.md +++ b/docs/history/lessons.md @@ -676,3 +676,30 @@ and confirm that condition is actually present. An agent's shell is a particular because it routinely runs with policies, permissions and paths that no user has. Sibling of the sabotage rule above: there, force the failure to prove the test sees it; here, prove the test is standing in the place where the failure lives. + +## A silent watchdog reset is a hardware question before it is a software one (2026-09-06) + +`ParallelLedDriver` reset a QuinLED Dig-Next-2 on any pin set: `TG1WDT_SYS_RESET`, both CPUs stopped, +no panic, no coredump. Six software theories were investigated and every one was wrong: PSRAM (a +`CONFIG_SPIRAM=n` image hung identically), the ECO3 cache-lock livelock, dual-core (a single-core +image hung too), an IDF regression, the I2S instance, and the microphone holding the peripheral. + +The cause was that the board's ESP32-PICO-V3-02 **has no GPIO 18 or 23**: those package pins are NC +because their pads serve the in-package flash and PSRAM (datasheet Table 7), and 18/23 were exactly +the driver's WR/DC defaults. Muxing a peripheral onto an absent pad wedges the flash cache, so the +chip dies with the watchdog PC parked in `panicHandler` itself: the handler is in IRAM but every +function it calls is in flash. + +**The lesson is the order of investigation.** That signature, a reset with no panic and a PC inside +the panic handler, means the flash cache is gone, which is a *pin* fault far more often than a code +fault. Check the package before any software theory: `esptool chip_id` prints it, and +`esp_efuse_get_pkg_ver()` gives it at runtime. The same die ships in packages with different pins +bonded, so `GPIO_IS_VALID_GPIO` (which knows the die, not the package) says yes to a pin that does +not physically exist. Our `gpioCapability` now reads the package and refuses those pins by name. + +Two corollaries worth keeping. **Bisect inside the failing call, not around it**: `esp_rom_printf` +probes placed between the steps of `esp_lcd_new_i80_bus` located the fault in one flash, after a day +of reasoning from the outside (note the runtime log level is WARN, so `ESP_LOGI` probes are silent). +And **a differential board settles a chip question fastest**: the same firmware on an Olimex Gateway, +a plain classic ESP32, worked immediately, which said "this board" rather than "this code" before any +theory was formed. diff --git a/docs/metrics/repo-health.json b/docs/metrics/repo-health.json index 589a2d57..5b41349e 100644 --- a/docs/metrics/repo-health.json +++ b/docs/metrics/repo-health.json @@ -1,9 +1,9 @@ { - "commit": "5ba44197", + "commit": "7f46574a", "flash": { "esp32s3-n16r8": 2065376, - "desktop": 1855032, - "esp32": 2021968, + "desktop": 1855496, + "esp32": 2023776, "esp32p4rev1-eth": 1955408, "esp32p4rev1-eth-wifi": 2019392, "esp32s3-n8r8": 1971008, @@ -14,7 +14,7 @@ "qemu": 1383648, "esp32p4rev3-eth": 1643760, "esp32s3-zero": 1788624, - "esp32-pico": 2070048 + "esp32-pico": 2071584 }, "measured": { "esp32p4rev1-eth": "2026-09-06", @@ -26,17 +26,17 @@ }, "perf": { "desktop": { - "tick_us": 154, - "fps": 6493, + "tick_us": 137, + "fps": 7299, "scenario_p50": { "Layer_base_pipeline": { - "p50": 94, - "p95": 211, + "p50": 71, + "p95": 179, "n": 32, "last": "2026-09-06" }, "Layer_memory_1to1": { - "p50": 9, + "p50": 5, "p95": 40, "n": 32, "last": "2026-09-06" @@ -50,7 +50,7 @@ "scenario_matrix": { "MoonModule_control_change": { "desktop-macos": { - "p50": 143, + "p50": 144, "p95": 248, "n": 32, "last": "2026-09-06" @@ -166,8 +166,8 @@ }, "Audio_mutation": { "desktop-macos": { - "p50": 28, - "p95": 106, + "p50": 26, + "p95": 70, "n": 32, "last": "2026-09-06" }, @@ -192,16 +192,16 @@ }, "Aurora_fps": { "desktop-macos": { - "p50": 1506, - "p95": 1920, - "n": 17, + "p50": 1514, + "p95": 1828, + "n": 23, "last": "2026-09-06" } }, "Driver_mutation": { "desktop-macos": { - "p50": 32, - "p95": 590, + "p50": 21, + "p95": 64, "n": 32, "last": "2026-09-06" }, @@ -226,8 +226,8 @@ }, "Effects_composition": { "desktop-macos": { - "p50": 366, - "p95": 1253, + "p50": 169, + "p95": 768, "n": 32, "last": "2026-09-06" }, @@ -240,24 +240,24 @@ }, "Fields_polar_lut": { "desktop-macos": { - "p50": 1228, - "p95": 1311, - "n": 18, + "p50": 1234, + "p95": 1402, + "n": 24, "last": "2026-09-06" } }, "Fluid_solver": { "desktop-macos": { - "p50": 222, + "p50": 220, "p95": 249, - "n": 11, + "n": 17, "last": "2026-09-06" } }, "GridBlacks_blackpixel": { "desktop-macos": { - "p50": 5, - "p95": 16, + "p50": 2, + "p95": 12, "n": 32, "last": "2026-09-06" }, @@ -282,7 +282,7 @@ }, "GridLayout_resize": { "desktop-macos": { - "p50": 128, + "p50": 127, "p95": 311, "n": 32, "last": "2026-09-06" @@ -326,8 +326,8 @@ }, "Layer_base_pipeline": { "desktop-macos": { - "p50": 94, - "p95": 211, + "p50": 71, + "p95": 179, "n": 32, "last": "2026-09-06" }, @@ -340,7 +340,7 @@ }, "Layer_memory_1to1": { "desktop-macos": { - "p50": 9, + "p50": 5, "p95": 40, "n": 32, "last": "2026-09-06" @@ -354,8 +354,8 @@ }, "Layouts_mutation": { "desktop-macos": { - "p50": 138, - "p95": 381, + "p50": 96, + "p95": 248, "n": 32, "last": "2026-09-06" }, @@ -406,8 +406,8 @@ }, "MoonLiveEffect_livescript": { "desktop-macos": { - "p50": 9, - "p95": 25, + "p50": 6, + "p95": 22, "n": 32, "last": "2026-09-06" }, @@ -456,8 +456,8 @@ "last": "2026-08-20" }, "desktop-macos": { - "p50": 10, - "p95": 70, + "p50": 6, + "p95": 21, "n": 32, "last": "2026-09-06" }, @@ -470,8 +470,8 @@ }, "MultiplyModifier_memory_lut": { "desktop-macos": { - "p50": 4, - "p95": 132, + "p50": 3, + "p95": 21, "n": 32, "last": "2026-09-06" }, @@ -498,16 +498,16 @@ }, "Trails_ladder": { "desktop-macos": { - "p50": 353, + "p50": 355, "p95": 608, - "n": 12, + "n": 18, "last": "2026-09-06" } }, "modifier_chain": { "desktop-macos": { - "p50": 55, - "p95": 138, + "p50": 47, + "p95": 123, "n": 32, "last": "2026-09-06" }, @@ -526,8 +526,8 @@ }, "modifier_swap": { "desktop-macos": { - "p50": 33, - "p95": 160, + "p50": 24, + "p95": 87, "n": 32, "last": "2026-09-06" }, @@ -564,8 +564,8 @@ }, "perf_full": { "desktop-macos": { - "p50": 429, - "p95": 2011, + "p50": 279, + "p95": 1114, "n": 32, "last": "2026-09-06" }, @@ -596,8 +596,8 @@ }, "perf_light": { "desktop-macos": { - "p50": 27, - "p95": 76, + "p50": 17, + "p95": 61, "n": 32, "last": "2026-09-06" }, @@ -640,8 +640,8 @@ "last": "2026-07-25" }, "desktop-macos": { - "p50": 485, - "p95": 1394, + "p50": 308, + "p95": 881, "n": 32, "last": "2026-09-06" }, @@ -666,7 +666,7 @@ "last": "2026-07-24" }, "desktop-macos": { - "p50": 7, + "p50": 4, "p95": 16, "n": 32, "last": "2026-09-06" @@ -693,24 +693,24 @@ } }, "loc": { - "core": 25486, - "light": 34558, - "platform": 17863, + "core": 25516, + "light": 34615, + "platform": 18036, "ui": 10204, - "test": 56155, - "moondeck": 22563 + "test": 56361, + "moondeck": 22570 }, "comments": { "core": { - "lines": 10222, - "ratio": 0.433 + "lines": 10242, + "ratio": 0.434 }, "light": { - "lines": 13166, + "lines": 13197, "ratio": 0.419 }, "platform": { - "lines": 6269, + "lines": 6336, "ratio": 0.385 }, "ui": { @@ -718,29 +718,29 @@ "ratio": 0.312 }, "test": { - "lines": 10501, + "lines": 10536, "ratio": 0.214 }, "moondeck": { - "lines": 3670, + "lines": 3673, "ratio": 0.186 } }, "tests": { - "cases": 1948, + "cases": 1955, "scenarios": 27 }, "docs": { "md_files": 219, - "md_lines": 36569, + "md_lines": 36362, "plans_files": 115, - "backlog_lines": 6979, - "lessons_lines": 678, + "backlog_lines": 6747, + "lessons_lines": 705, "claude_md_lines": 259 }, "complexity": { - "functions": 3429, - "over_threshold": 238, + "functions": 3441, + "over_threshold": 239, "worst_ccn": 108 } } diff --git a/docs/metrics/repo-health.md b/docs/metrics/repo-health.md index 334712c5..183df585 100644 --- a/docs/metrics/repo-health.md +++ b/docs/metrics/repo-health.md @@ -1,6 +1,6 @@ # Repo health -Measured at `5ba44197`. Generated by [`moondeck/check/repo_health.py`](../../moondeck/check/repo_health.py) on every KPI-gate run. **Do not edit by hand.** +Measured at `7f46574a`. 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. @@ -9,60 +9,60 @@ Current state only; the trend is this file's git history (`git log -p docs/metri | Target | Flash | Capacity | Used | Built | |---|---:|---:|---:|:--:| | desktop | 1,812 KB (+0 KB) ⚠ | - | - | yes | -| esp32 | 1,975 KB (+96 KB) ⚠ | 2,496 KB | 79% | yes | +| esp32 | 1,976 KB (+2 KB) ⚠ | 2,496 KB | 79% | yes | | esp32-16mb | 1,767 KB | - | - | carried (age?) | | esp32-eth | 1,365 KB | - | - | carried (age?) | -| esp32-pico | 2,022 KB (+4 KB) ⚠ | 3,072 KB | 66% | yes | +| esp32-pico | 2,023 KB (+2 KB) ⚠ | 3,072 KB | 66% | yes | | esp32-wrover | 1,801 KB | - | - | carried (age?) | -| esp32p4rev1-eth | 1,910 KB (+274 KB) ⚠ | 4,096 KB | 47% | yes | +| esp32p4rev1-eth | 1,910 KB | 4,096 KB | 47% | yes | | esp32p4rev1-eth-wifi | 1,972 KB | - | - | carried (age?) | | esp32p4rev3-eth | 1,605 KB | - | - | carried (age?) | -| esp32s3-n16r8 | 2,017 KB (+65 KB) ⚠ | 4,096 KB | 49% | yes | +| esp32s3-n16r8 | 2,017 KB | 4,096 KB | 49% | yes | | esp32s3-n8r8 | 1,925 KB | - | - | carried (age?) | | esp32s3-zero | 1,747 KB | - | - | carried (age?) | -| esp32s31 | 2,294 KB (+238 KB) ⚠ | 4,096 KB | 56% | yes | +| esp32s31 | 2,294 KB | 4,096 KB | 56% | yes | | qemu | 1,351 KB | - | - | carried (age?) | -`Built: yes` was measured this run. `carried Nd` was NOT rebuilt and its number is N days old, so an absent delta says nothing about the change. **STALE** marks a carry older than 7 days: the number has gone unchecked long enough that growth will surface later as one jump, blamed on whichever commit happens to rebuild that target. `Used` is against the app slot in the firmware's own partition table. +`Built: yes` was measured this run. `carried (age?)` was not rebuilt either and predates this record, so its age is unknown: it dates itself on the next build. `carried Nd` was NOT rebuilt and its number is N days old, so an absent delta says nothing about the change. **STALE** marks a carry older than 7 days: the number has gone unchecked long enough that growth will surface later as one jump, blamed on whichever commit happens to rebuild that target. `Used` is against the app slot in the firmware's own partition table. ## Render performance | Target | Tick | FPS | |---|---:|---:| -| desktop | 154 µs (+30 µs) ⚠ | 6,493 (−1,571) ⚠ | +| desktop | 137 µs (−17 µs) ✓ | 7,299 (+806) ✓ | | esp32 | 8,354 µs | 119 | ### Scenario tick by target (p50 of each sample window) | Scenario | desktop-macos | desktop-windows | esp32 | esp32s3-n16r8 | esp32p4rev1-eth | esp32s31 | esp32-eth | esp32-eth-wifi | unknown | |---|---|---|---|---|---|---|---|---|---| -| Audio_mutation | 28 (−2) ✓ | 40 ? | 13,152 | 47 ? | - | - | - | - | - | -| Aurora_fps | 1,506 | - | - | - | - | - | - | - | - | -| Driver_mutation | 32 | 42 ? | 12,812 | 39 ? | - | - | - | - | - | -| Effects_composition | 366 | 549 ? | - | - | - | - | - | - | - | -| Fields_polar_lut | 1,228 | - | - | - | - | - | - | - | - | -| Fluid_solver | 222 | - | - | - | - | - | - | - | - | -| GridBlacks_blackpixel | 5 | 8 ? | 269 ? | 267 ? | - | - | - | - | - | -| GridLayout_resize | 128 | 219 ? | 1,352 ? | 1,011 ? | 1,143 ? | - | 95,771 ? | 82,231 ? | - | -| Layer_base_pipeline | 94 | 118 ? | - | - | - | - | - | - | - | -| Layer_memory_1to1 | 9 | 1 ? | - | - | - | - | - | - | - | -| Layouts_mutation | 138 | 111 ? | 13,692 | 45 ? | - | - | 27 ? | - | - | +| Audio_mutation | 26 (−2) ✓ | 40 ? | 13,152 | 47 ? | - | - | - | - | - | +| Aurora_fps | 1,514 (+8) ⚠ | - | - | - | - | - | - | - | - | +| Driver_mutation | 21 (−11) ✓ | 42 ? | 12,812 | 39 ? | - | - | - | - | - | +| Effects_composition | 169 (−197) ✓ | 549 ? | - | - | - | - | - | - | - | +| Fields_polar_lut | 1,234 (+6) ⚠ | - | - | - | - | - | - | - | - | +| Fluid_solver | 220 (−2) ✓ | - | - | - | - | - | - | - | - | +| GridBlacks_blackpixel | 2 (−3) ✓ | 8 ? | 269 ? | 267 ? | - | - | - | - | - | +| GridLayout_resize | 127 (−1) ✓ | 219 ? | 1,352 ? | 1,011 ? | 1,143 ? | - | 95,771 ? | 82,231 ? | - | +| Layer_base_pipeline | 71 (−23) ✓ | 118 ? | - | - | - | - | - | - | - | +| Layer_memory_1to1 | 5 (−4) ✓ | 1 ? | - | - | - | - | - | - | - | +| Layouts_mutation | 96 (−42) ✓ | 111 ? | 13,692 | 45 ? | - | - | 27 ? | - | - | | MoonLiveEffect_controls | 11 ? | - | 12,901 | 4,624 ? | - | - | - | - | - | -| MoonLiveEffect_livescript | 9 | - | 13,433 ? | 8,255 ? | 11,336 ? | - | - | - | - | -| MoonLive_pipeline | 10 | 1 ? | 9,604 ? | 3,278 ? | - | 11,398 ? | - | - | 4,393 ? | -| MoonModule_control_change | 143 | 262 ? | 212 ? | 166 ? | 165 ? | - | 111,731 ? | 89,895 ? | - | +| MoonLiveEffect_livescript | 6 (−3) ✓ | - | 13,433 ? | 8,255 ? | 11,336 ? | - | - | - | - | +| MoonLive_pipeline | 6 (−4) ✓ | 1 ? | 9,604 ? | 3,278 ? | - | 11,398 ? | - | - | 4,393 ? | +| MoonModule_control_change | 144 (+1) ⚠ | 262 ? | 212 ? | 166 ? | 165 ? | - | 111,731 ? | 89,895 ? | - | | MqttModule_haDiscovery_toggle | 3 ? | - | 36 ? | 36 ? | - | - | - | - | - | -| MultiplyModifier_memory_lut | 4 | 3 ? | - | - | - | - | - | - | - | +| MultiplyModifier_memory_lut | 3 (−1) ✓ | 3 ? | - | - | - | - | - | - | - | | MultiplyModifier_pipeline | 126 | 225 ? | - | - | - | - | - | - | - | | NetworkModule_eth_reconfigure | - | - | 1,169 ? | 97,843 ? | - | - | - | - | - | | NetworkModule_mdns_toggle | 13 ? | - | 36 ? | 36 ? | 21 ? | - | 109,767 ? | 93,963 ? | - | -| Trails_ladder | 353 | - | - | - | - | - | - | - | - | -| modifier_chain | 55 | 69 ? | 13,337 | - | - | - | - | - | - | -| modifier_swap | 33 | 41 ? | 12,250 | 354 ? | 362 ? | - | 1,010 ? | - | - | -| perf_full | 429 | 592 ? | 10,392 | 16,915 ? | 17,433 ? | - | - | - | - | -| perf_light | 27 | 35 ? | 2,183 | 2,485 ? | 2,038 ? | - | - | - | - | -| peripheral_grid_sweep | 485 | 649 ? | 6,991 ? | - | 11,495 ? | 12,273 ? | - | - | - | -| peripheral_switch | 7 | 9 ? | 437 | 46 ? | 217 ? | - | - | - | - | +| Trails_ladder | 355 (+2) ⚠ | - | - | - | - | - | - | - | - | +| modifier_chain | 47 (−8) ✓ | 69 ? | 13,337 | - | - | - | - | - | - | +| modifier_swap | 24 (−9) ✓ | 41 ? | 12,250 | 354 ? | 362 ? | - | 1,010 ? | - | - | +| perf_full | 279 (−150) ✓ | 592 ? | 10,392 | 16,915 ? | 17,433 ? | - | - | - | - | +| perf_light | 17 (−10) ✓ | 35 ? | 2,183 | 2,485 ? | 2,038 ? | - | - | - | - | +| peripheral_grid_sweep | 308 (−177) ✓ | 649 ? | 6,991 ? | - | 11,495 ? | 12,273 ? | - | - | - | +| peripheral_switch | 4 (−3) ✓ | 9 ? | 437 | 46 ? | 217 ? | - | - | - | - | Microseconds. `?` marks a cell backed by fewer than 4 samples, which is a first impression rather than a percentile; several are months old and were captured during a network reconfigure, so they read as whole milliseconds. `-` means that target has never run that scenario. @@ -72,8 +72,8 @@ Microseconds. `?` marks a cell backed by fewer than 4 samples, which is a first | Scenario | p50 | p95 | n | |---|---:|---:|---:| -| Layer_base_pipeline | 94 µs | 211 µs | 32 | -| Layer_memory_1to1 | 9 µs | 40 µs | 32 | +| Layer_base_pipeline | 71 µs (−23 µs) ✓ | 179 µs | 32 | +| Layer_memory_1to1 | 5 µs (−4 µs) ✓ | 40 µs | 32 | These build a bare pipeline with no optional modules, so a change here is a change in the pipeline itself rather than in what was measured. A new module belongs in an advanced scenario, which keeps its own numbers. @@ -81,26 +81,26 @@ These build a bare pipeline with no optional modules, so a change here is a chan | Area | Lines | Comments | Comment share | |---|---:|---:|---:| -| core | 25,486 (+154) ⚠ | 10,222 | 43.3 % | -| light | 34,558 (+10) ⚠ | 13,166 | 41.9 % | -| platform | 17,863 (+93) ⚠ | 6,269 | 38.5 % (+0.1 %) ⚠ | +| core | 25,516 (+30) ⚠ | 10,242 | 43.4 % (+0.1 %) ⚠ | +| light | 34,615 (+57) ⚠ | 13,197 | 41.9 % | +| platform | 18,036 (+173) ⚠ | 6,336 | 38.5 % | | ui | 10,204 | 3,014 | 31.2 % | -| test | 56,155 (+95) ⚠ | 10,501 | 21.4 % | -| moondeck | 22,563 (+51) ⚠ | 3,670 | 18.6 % (+0.1 %) ⚠ | +| test | 56,361 (+206) ⚠ | 10,536 | 21.4 % | +| moondeck | 22,570 (+7) ⚠ | 3,673 | 18.6 % | ## Tests | Kind | Count | |---|---:| -| unit cases | 1,948 (+3) ✓ | +| unit cases | 1,955 (+7) ✓ | | scenarios | 27 | ## Complexity | Metric | Value | |---|---:| -| functions | 3,429 (+2) ✓ | -| over threshold | 238 (+6) ⚠ | +| functions | 3,441 (+12) ✓ | +| over threshold | 239 (+1) ⚠ | | worst CCN | 108 | ## Documentation @@ -108,9 +108,9 @@ These build a bare pipeline with no optional modules, so a change here is a chan | Metric | Value | |---|---:| | markdown files | 219 | -| markdown lines | 36,569 (+29) ⚠ | +| markdown lines | 36,362 (−207) ✓ | | plan files | 115 | -| backlog lines | 6,979 (+2) ⚠ | -| lessons lines | 678 | -| CLAUDE.md lines | 259 (+9) ⚠ | +| backlog lines | 6,747 (−232) ✓ | +| lessons lines | 705 (+27) ⚠ | +| CLAUDE.md lines | 259 | diff --git a/docs/moonmodules/light/drivers.md b/docs/moonmodules/light/drivers.md index f65825b3..fc36ee70 100644 --- a/docs/moonmodules/light/drivers.md +++ b/docs/moonmodules/light/drivers.md @@ -301,7 +301,7 @@ RMT is its own driver; the rest are `peripheral` choices on the one **Parallel L | Output | `peripheral` | Chip | Strands | Extra controls | Notes | |---|---|---|---|---|---| | **RMT** ([detail](moxygen/RmtLedDriver.md)) | *(own driver)* | any ESP32 (classic 8 ch, S3 4, P4 4 DMA) | one per RMT TX channel | `loopbackFrame` | The general single-/few-strand output; default for classic + S3 board entries. `loopbackFrame` bit-verifies a *whole frame*, catching frame-rate / RF corruption a 24-bit burst misses. | -| Parallel LED | **`i80`** | S3 / P4 / S31 (LCD_CAM) · classic (I2S) | **1–16** | `clockPin` `dcPin` | Over IDF's `esp_lcd` i80 bus. The **bus** is 8 or 16 bits wide (≤8 pins → 8-bit, 9–16 → 16-bit) — but the **pin count is free**: configure only the pins that drive something and the driver rounds the bus up around them, parking the spare lanes on a pin the peripheral already drives. `clockPin`/`dcPin` are i80 bus lines the LEDs ignore. **Capped by one contiguous DMA buffer**: the classic backend is internal-RAM only (I2S can't reach PSRAM) → **2048 lights**; LCD_CAM draws from PSRAM → **16384**. Over the cap it idles with a status rather than crashing. | +| Parallel LED | **`i80`** | S3 / P4 / S31 (LCD_CAM) · classic (I2S) | **1–16** | `clockPin` `dcPin` | Over IDF's `esp_lcd` i80 bus. The **bus** is 8 or 16 bits wide (≤8 pins → 8-bit, 9–16 → 16-bit) — but the **pin count is free**: configure only the pins that drive something and the driver rounds the bus up around them, parking the spare lanes on a pin the peripheral already drives. `clockPin`/`dcPin` are i80 bus lines the LEDs ignore: on the classic ESP32 `clockPin` defaults to unset (the platform sinks it onto an input-only pad, so no GPIO is spent) while `dcPin` needs a real pin because the bus toggles it in software every frame; on the LCD_CAM chips both need a real pad. On the classic the bus is an I2S peripheral and takes instance 1, leaving instance 0 (the only one with a PDM converter) for the microphone, so both run. **Capped by one contiguous DMA buffer**: the classic backend is internal-RAM only (I2S can't reach PSRAM) → **2048 lights**; LCD_CAM draws from PSRAM → **16384**. Over the cap it idles with a status rather than crashing. | | Parallel LED | **`MoonI80`** | S3 / P4 / S31 (LCD_CAM only) | **1–16**; ×8 per pin with an expander (**6 pins → 48 strands**) | `clockPin` `pinExpander` `latchPin` `useRing` `ringAuto`; 🔧 `shiftOverclock` `ringRows` `ringBufs` `ringPadUs` | The same LCD_CAM output as `i80` on **our own GDMA chain**, which buys two things `esp_lcd` cannot: a frame **streamed** through a small buffer pool instead of held whole (so length stops being a memory question), and a **74HCT595 pin expander** — one GPIO fans out to 8 strands. `ringAuto` (default on) derives the streaming geometry per config, so the manual `ring*` knobs and `shiftOverclock` (a faster '595 clock for short-wired rigs) are expert-only tuning — the full guide is on the technical page. No `dcPin` at all, and WR is routed only when a '595 needs it as its shift clock. Not on the classic ESP32 (its i80 is the I2S peripheral). The prime-only ring (frame fits the buffer pool) and the pin expander are wall-solid; the **lapping** ring (very long strands, where the ISR refills from a PSRAM source) has a known last-row sparkle on the largest configs, tracked in [the backlog](../../backlog/backlog-light.md). Why + what it costs: [ADR-0014](../../adr/0014-own-i80-dma-driver-below-esp-lcd.md). | | Parallel LED | **`Parlio`** | ESP32-P4 | **1–16** | — | The P4's parallel path; Parlio generates its own pixel clock, so no clock/dc pins to spend. Bus width follows the pin count. On P4-NANO a known-good 8-set is `20,21,22,23,24,25,26,27`. | diff --git a/docs/moonmodules/light/effects.md b/docs/moonmodules/light/effects.md index 26310267..a0a4c500 100644 --- a/docs/moonmodules/light/effects.md +++ b/docs/moonmodules/light/effects.md @@ -1160,13 +1160,13 @@ Each band drives a damped harmonic oscillator integrated per frame, with the bas - `peakHold`: how long the peak marker stays up, as a half-life. - `smooth`: drive from the meter ballistic rather than the raw band. Raw is the truer instrument here, since the needle has its own ballistics already. -Origin: projectMM original, on the VU ballistics of IEC 60268-17 and the onset detector +Origin: projectMM original, on the VU ballistics of IEC 60268-17 ### RadialSpectrum 💫🎶🖌️🎡 · 3D -The spectrum as ripples. Each band owns a sector around the center, mirrored left and right with the bass at the top and bottom; sound is born at the center and travels outward, so the radius is time and a ring's length is that band's recent history. It is the circular visualizer the music-video world settled on, a radial spectrogram, and it is also the diagnostic a bar analyser is: every sector is one band, so a band that is stuck or pinned shows as a sector that never moves or never dims. On a cube, under the spherical mapping, the ripples are expanding shells. +The spectrum as ripples. Each band owns a sector around the center, mirrored left and right with the bass at the top and bottom; sound is born at the center and travels outward, so the radius is time and a ring's length is that band's recent history. It is the circular visualizer the music-video world settled on, a radial spectrogram, and it is also the diagnostic a bar analyzer is: every sector is one band, so a band that is stuck or pinned shows as a sector that never moves or never dims. On a cube, under the spherical mapping, the ripples are expanding shells. Nothing is transported. The effect keeps a short history of band frames and every light reads it, its angle choosing the band and its radius the age: a table read per light, cheaper than drawing bars. diff --git a/docs/reference/gpio-usage.md b/docs/reference/gpio-usage.md index 50202ea7..0c253edc 100644 --- a/docs/reference/gpio-usage.md +++ b/docs/reference/gpio-usage.md @@ -32,14 +32,16 @@ For **LED output** specifically — the pins a WS2812-class strand data line can |-------|-------|-----| | Reserved | **6-11** | SPI flash (the on-package flash bus). Always off-limits. | | Reserved | **16, 17** | Extra flash/PSRAM bus on WROVER (PSRAM) modules; free on plain WROOM. | +| Package | **PICO-V3-02: 9, 10 reserved; 16, 17, 18, 23 absent** | The system-in-package part on the QuinLED Dig-Next-2 wires its PSRAM to 9/10 and has no pads for 16/17/18/23 (datasheet Table 7); routing a peripheral onto an absent pad wedges the flash cache with no panic. 7/8 are free on it. The firmware reads the package from eFuse and refuses these by name. | +| Package | **PICO-D4: 6-11, 16, 17 reserved** | In-package flash on all of them, PSRAM or not. | | Role-conflict | **0, 2, 5, 12, 15** | Boot straps. Usable, but a wrong level at reset changes boot mode (GPIO 12 = flash voltage is the dangerous one). Don't drive during boot. | | Input-only | **34, 35, 36, 39** | No output driver and no internal pull-ups. Fine for a mic **SD/SCK/WS input**, useless for an LED output. | -**Clear for output I/O:** 4, 13, 14, 18, 19, 21-23, 25-27, 32, 33 (plus 16/17 on non-PSRAM). Input-only 34-39 suit mic data lines. +**Clear for output I/O:** 4, 13, 14, 18, 19, 21-23, 25-27, 32, 33 (plus 16/17 on non-PSRAM; minus 18/23 on a PICO-V3-02). Input-only 34-39 suit mic data lines, and 36 is where the classic i80 driver sinks an unset WR line. -**i80 parallel LED lanes (classic ESP32 = I2S backend).** The classic ESP32 runs the parallel LED driver over the **I2S peripheral in i80 mode** (the S3/P4 use LCD_CAM for the same i80 API; one driver, chip-picked backend). Like every i80 board it needs **exactly 8 or 16 data pins plus two bus-control pins** (`clockPin` = WR, `dcPin` = DC — the LEDs ignore both). Bench-verified default on the ESP32-WROVER (`/dev/cu.usbserial-0001`): +**i80 parallel LED lanes (classic ESP32 = I2S backend).** The classic ESP32 runs the parallel LED driver over the **I2S peripheral in i80 mode** (the S3/P4 use LCD_CAM for the same i80 API; one driver, chip-picked backend). The bus is 8 or 16 bits wide but the **pin count is free** (spare lanes park on WR), and the two bus-control lines (`clockPin` = WR, `dcPin` = DC) are ignored by the LEDs. **WR is unset by default** on the classic (the platform sinks it onto an input-only pad, so it costs no GPIO); set it only for a '595 expander that needs it as a shift clock. **DC always needs a real output pin** (default 33): `esp_lcd` toggles it in software every frame, which a pad without an output driver cannot do. The bus is an **I2S peripheral** and always drives from **instance 1**, leaving instance 0 for audio: only instance 0 has the PDM converter, and nothing needs instance 1, so a microphone (PDM or standard), a line-in ADC and parallel LEDs all run together. Bench-verified on the ESP32-WROVER (`/dev/cu.usbserial-0001`): -- **8 lanes:** data `2,4,13,14,18,19,21,22` · `clockPin` (WR) `32` · `dcPin` (DC) `33`. (Pin 2 is a boot strap — it drives an LED fine and idles LOW, so it's benign here, but the Pins UI flags it; swap it for `23` to silence the warning.) +- **8 lanes:** data `2,4,13,14,18,19,21,22`, WR unset, DC `33`. (Pin 2 is a boot strap: it drives an LED fine and idles LOW, so it is benign here, but the Pins UI flags it; swap it for `23` to silence the warning.) - **16 lanes: not cleanly reachable on the WROVER.** Only 13 non-strap output pins exist, and WR/DC consume 2 more, so a 16-lane set must borrow strap pins (0, 12, 15) — and **GPIO 12 is the flash-voltage strap: driving it at reset can brick the boot**, so don't. Use a board with more free GPIOs (an S3/P4) for 16 lanes; the classic ESP32 is an 8-lane i80 board in practice. - **Memory ceiling: 2048 lights at 8 lanes** (measured on the WROVER, 2026-07-13; 8×256 drives, 8×384 already fails). The I2S backend can't DMA from PSRAM, so its frame buffer is internal-RAM-only (~76 KB largest block) — an over-ceiling config degrades with `i80 bus init failed — check pins / memory`, it does not crash. Neither shrinking the grid (that memory is PSRAM) nor turning `doubleBuffer` off (one DMA buffer instead of two) raises it. See [performance.md § Multi-pin LED driving](../performance.md#multi-pin-led-driving-all-three-peripherals-128128-grid). diff --git a/moondeck/check/repo_health.py b/moondeck/check/repo_health.py index 6391773f..0f7b8319 100644 --- a/moondeck/check/repo_health.py +++ b/moondeck/check/repo_health.py @@ -326,6 +326,11 @@ def snapshot(perf=None): """The full current-state measurement. `perf` is the tick/FPS block the KPI collector already gathered — passed in rather than re-measured, since it needs a running device.""" head = _head() + # Both are module-level and describe THIS run, so a second snapshot() in one process must not + # inherit the first's claims: a target that could not be measured the second time would + # otherwise still report "yes" and carry a stale date. + MEASURED_THIS_RUN.clear() + MEASURED_DATES.clear() flash = measure_flash() # populates MEASURED_DATES as a side effect, so call it first return { "commit": head, @@ -527,7 +532,9 @@ def render_markdown(new, old): built = _built_label(k, new.get("measured", {}).get(k)) L.append(f"| {k} | {_arrow(v, o.get('flash'), k, _kb)} | {cap_s} | {used} | {built} |") L += ["", - ("`Built: yes` was measured this run. `carried Nd` was NOT rebuilt and its number is " + ("`Built: yes` was measured this run. `carried (age?)` was not rebuilt either and " + "predates this record, so its age is unknown: it dates itself on the next build. " + "`carried Nd` was NOT rebuilt and its number is " f"N days old, so an absent delta says nothing about the change. **STALE** marks a " f"carry older than {STALE_AFTER_DAYS} days: the number has gone unchecked long " "enough that growth will surface later as one jump, blamed on whichever commit " diff --git a/mooninstaller/deviceModels.json b/mooninstaller/deviceModels.json index 3a9c8ee8..bedef4ac 100644 --- a/mooninstaller/deviceModels.json +++ b/mooninstaller/deviceModels.json @@ -179,11 +179,11 @@ "url": "https://quinled.info/dig-next-2/", "supported": [ "LEDs", - "WiFi" + "WiFi", + "Audio" ], "planned": [ - "Button", - "Microphone" + "Button" ], "flashBaud": 460800, "modules": [ @@ -208,6 +208,16 @@ "controls": { "pins": "2,4" } + }, + { + "type": "AudioService", + "id": "Audio", + "parent_id": "Services", + "controls": { + "micMode": 1, + "wsPin": 8, + "sdPin": 7 + } } ] }, diff --git a/src/core/AudioBands.h b/src/core/AudioBands.h index f7c079fe..059a0d06 100644 --- a/src/core/AudioBands.h +++ b/src/core/AudioBands.h @@ -48,15 +48,6 @@ inline void applyWindow(const int32_t* samples, size_t n, float* out) { } } -// Group `nMag` FFT magnitudes (covering DC..Nyquist over `sampleRate`) into 16 -// log-spaced bands (0..255 each) and report the dominant peak (`peakHz` = its -// frequency, `peakMag` = its 0..255 magnitude). Robust to nMag==0 (all zero). -// -// `noiseFloor` and `gain` condition the bands exactly like the level path -// (AudioLevel.h): each band's scaled magnitude has `noiseFloor` subtracted (so a -// quiet idle spectrum — the mic's own noise — gates to 0 instead of flickering -// the LEDs) and is then multiplied by `gain`/16 (16 = unity) for live brightness -// control. Same knobs, same meaning, both the level and the spectrum. /// The 17 bin-index edges of the 16 bands, `edge[b]..edge[b+1]` per band. /// /// A band is only a band if it OWNS bins. A pure geometric split (`edge[e] = nMag^(e/16)`, equal @@ -72,7 +63,9 @@ inline void applyWindow(const int32_t* samples, size_t n, float* out) { /// answer at the bottom of the range: no split can separate 60 Hz from 80 Hz when they share a bin. /// /// Computed once per rate change, never per frame: 17 values, and the summing loop below costs the -/// same `nMag` additions wherever the edges sit. +/// same `nMag` additions wherever the edges sit. (The function itself is below kLowestAudibleHz, +/// which its first edge depends on.) + /// The lowest frequency the spectrum shows. Below this is infrasound: mains hum, a microphone's DC /// drift, footfall and traffic rumble, none of it audible and none of it music. At 22 kHz with a /// 1024-bin FFT the first band would otherwise cover 11-22 Hz and display that rumble as bass. @@ -288,6 +281,18 @@ inline void magnitudesToBands(const float* mag, size_t nMag, uint32_t sampleRate // is exactly magToByte per band, so the two paths cannot disagree. if (cond) { float out[16]; + // The gate sits AT the window floor, and the level path's kMuteMarginDb does NOT belong + // here. The two measure different quantities: a band reports the PEAK magnitude of its + // bins while the level reports the block's RMS, and a peak sits far above an RMS for the + // same sound, so the same margin in dB is a much larger concession on a band. Bench, a + // quiet room on a Dig-Next-2: at the window floor the spectrum reads flux 1-2, and a 20 dB + // margin takes it to 49-102 with onsets firing, which is the room's own noise displayed as + // music. A margin large enough to matter would have to be tuned per part, which is what + // the learner exists to avoid. + // + // The cost is real and accepted: a band below the window is primed once and then returns + // early, so its learned floor does not track a room that gets quieter still. That band is + // dark either way, and re-learning starts the moment anything audible arrives. cond->process(bandDb, out, dtMs, windowFloorDb(noiseFloor), windowSpanDb(gain), ratioN, maxGainDb, learning, windowFloorDb(noiseFloor)); for (uint8_t b = 0; b < 16; b++) bands[b] = bandDb[b] <= 0.0f ? 0 : dbToByte(out[b], noiseFloor, gain); diff --git a/src/core/AudioService.h b/src/core/AudioService.h index db0c05ed..7782861c 100644 --- a/src/core/AudioService.h +++ b/src/core/AudioService.h @@ -569,6 +569,14 @@ class AudioService : public MoonModule { } void tick1s() MM_NONBLOCKING override { + // The mirror of the LED driver's retry: on the classic ESP32 a PDM microphone and the + // parallel LED bus both need I2S0, so whichever asks second is refused, and the loser would + // otherwise stay silent until the user edited a control. Retry only while Local mode is + // wanted and the mic is not up, and only once the platform says the instance is free, so a + // genuinely bad pin set costs nothing per second. reinit() is the cold path prepare() runs. + if (mode == 0 && !inited_ + && platform::audioMicSharedBusFree(micMode == 1 ? platform::MicMode::Pdm + : platform::MicMode::I2sStd)) reinit(); std::snprintf(levelStr_, sizeof(levelStr_), "%u", static_cast(levelPeak_)); std::snprintf(onsetStr_, sizeof(onsetStr_), "%u/s, flux %u", static_cast(onsetCount_), static_cast(fluxPeak_)); @@ -782,6 +790,13 @@ class AudioService : public MoonModule { // and then lost its bus (a failed reinit after a pin edit, or release) // would leave the last real frame frozen on the LEDs instead of going dark. frame_ = AudioFrame{}; + // The ANALYSIS history goes with it, so a restarted source begins from a DEFINED state + // rather than the old source's last block: flux is a difference against the previous + // block, and the onset detector carries a running mean. The zeroed frame above is what + // keeps the first block after a restart silent (measured against zeros it would otherwise + // read as a full-scale rise), and this is what keeps the second one honest. + std::memset(prevBands_, 0, sizeof(prevBands_)); + onset_ = OnsetDetector{}; } // --- WLED audio sync (guarded: only compiled where platform::hasNetwork) --- diff --git a/src/light/drivers/LedPeripheral.h b/src/light/drivers/LedPeripheral.h index eb8b82e0..d579c22e 100644 --- a/src/light/drivers/LedPeripheral.h +++ b/src/light/drivers/LedPeripheral.h @@ -60,6 +60,13 @@ class LedPeripheral { virtual bool powerOfTwoBus() const = 0; /// The status message when bus init fails on this peripheral. virtual const char* initFailMsg() const = 0; + + /// True when a PREVIOUS init failed only because another module held a peripheral this backend + /// needs, and that peripheral is now free: the driver then rebuilds itself, so the loser of a + /// contended claim recovers without the user touching anything. Cheap enough for tick1s (a + /// registry read, never an init). Default false: a backend with nothing to share never retries, + /// which keeps a genuinely bad config from re-attempting once a second forever. + virtual bool busContentionCleared() const { return false; } /// Must the loopback self-test build a full-width bus (true) or can it run on a private 1-lane /// unit (false)? esp_lcd i80 / MoonI80 need the full width; Parlio can do a single lane. virtual bool loopbackFullWidth() const = 0; diff --git a/src/light/drivers/MultiPinLedDriver.h b/src/light/drivers/MultiPinLedDriver.h index c2d2a8fa..749829ab 100644 --- a/src/light/drivers/MultiPinLedDriver.h +++ b/src/light/drivers/MultiPinLedDriver.h @@ -70,37 +70,37 @@ class I80Peripheral : public LedPeripheral { /// - In shift mode this pin is wired to the physical '595 clock line on the expander board. /// Changing it means re-wiring hardware, not just re-configuring. /// - /// **Give it a real, free GPIO — do not set -1.** Bench-proven that nothing on a WS2812 strand reads - /// WR or DC (4096 lights over 16 lanes, and 1440 through a '595, both render with both pins at -1: - /// the peripheral generates the signals internally and the GPIO matrix only carries them off-chip). - /// But -1 does not MEAN "unrouted" here — it means **65535**: the value reaches the platform as - /// `uint16_t`, which slips past IDF's `wr_gpio_num >= 0 && dc_gpio_num >= 0` check - /// (esp_lcd_panel_io_i80.c), where a properly-typed `GPIO_NUM_NC` would be rejected outright. - /// `esp_lcd` then hands 65535 to `esp_rom_gpio_connect_out_signal`, and what happens next is PER-TARGET - /// ROM, not an API contract: the S3 and classic ROMs open with an unsigned bounds compare and return - /// without writing (a silent no-op), but the **ESP32-P4 ROM has no such guard** and computes a store - /// ~0x50120554 — a quarter-megabyte past the GPIO block, in another peripheral's window — plus a - /// >31-bit shift. This backend runs on the P4. IDF's own `esp_rom/patches/esp_rom_gpio.c` is unguarded - /// too, so the S3's check is an implementation detail a patch could remove, not a promise. FastLED's - /// LCD_CAM driver parks both pins on a dummy GPIO for the same reason. To spend no GPIO at all, use - /// MoonI80Peripheral: owning the DMA below esp_lcd, it holds DC at a constant level and routes WR only - /// when a '595 needs it as SRCLK. - /// Per-chip, because 10/11 are free GPIOs on the S3 these were chosen on and are the FLASH bus - /// on a classic ESP32 (6-11): routing the i80 clock onto one wedges the board to a watchdog - /// reset with no panic and no coredump. `i2sLanes > 0` IS "this is the classic-ESP32 i80" (the - /// two backends are mutually exclusive per silicon), the same discriminator dmaBudgetBytes() - /// below keys on, rather than a raw CONFIG_IDF_TARGET that would put chip knowledge outside the - /// platform layer. + /// **Unset (-1) means "no pin", and what that costs depends on the chip.** Nothing on a WS2812 + /// strand reads WR or DC (bench-proven: 4096 lights over 16 lanes and 1440 through a '595 both + /// render with neither line wired), so the only question is what the peripheral is given for + /// the GPIO number it insists on. /// - /// 18/23 rather than the first free numbers: WR and DC are peripheral-fixed signals no WS2812 - /// strand reads, so this default only has to avoid pins a BOARD is likely to have committed. - /// 21/22 look free chip-wise and are the QuinLED Dig-Next-2's relay lines, where claiming them - /// silently switched two power channels off (LEDs dark, no error anywhere). 18/23 are plain - /// GPIOs on every classic package: no strap, no flash, no UART, and unused by the catalog's - /// boards. A board that does wire them overrides the control, and reinit() refuses a reserved - /// pin outright. - int8_t clockPin = platform::i2sLanes > 0 ? 18 : 10; - int8_t dcPin = platform::i2sLanes > 0 ? 23 : 11; + /// **Naming.** WR and DC are the i8080 bus's own signal names (WR = the write strobe that + /// clocks each bus word, DC = the data/command select), which is what the datasheets and + /// `esp_lcd` call them; `clockPin`/`dcPin` are the control names a user sees. Every message + /// about them names both, as "clockPin (WR)" and "dcPin (DC)", so the UI and the datasheet + /// can be read together. + /// + /// **WR can be unset on the classic ESP32; DC cannot, anywhere.** WR reaches its pad through the + /// GPIO matrix, so the platform sinks an unset one onto an input-only pad and no usable GPIO is + /// spent. DC is toggled in SOFTWARE by esp_lcd on every transfer, and that call on a pad with no + /// output driver logs an error from a context where logging aborts, so DC always needs a real + /// pin: 33 on the classic (free on every package here), 11 on the LCD_CAM chips. On the LCD_CAM + /// chips (S3/P4/S31) both need a real pad, + /// because an invalid number reaches the ROM's matrix routine and the P4's writes a quarter + /// megabyte past the GPIO block (the S3 happens to ignore it, which is luck, not a contract); + /// there the default is 10/11, free on the S3 these were chosen on, and MoonI80Peripheral is + /// the way to spend no GPIO at all (owning the DMA below esp_lcd, it holds DC constant and + /// routes WR only when a '595 needs it as SRCLK). + /// + /// A board that needs WR on a real pin (a '595's shift clock) sets it; the platform refuses a + /// pin its package lacks or has wired to flash or PSRAM before the peripheral can touch it. + /// That refusal is what turned the QuinLED Dig-Next-2's old default of 18/23 from a silent + /// watchdog reset (the ESP32-PICO-V3-02 has no such pads) into a status naming the pin. + /// `i2sLanes > 0` IS "this is the classic-ESP32 i80" (the two backends are mutually exclusive + /// per silicon), the same discriminator dmaBudgetBytes() below keys on. + int8_t clockPin = platform::i2sLanes > 0 ? -1 : 10; + int8_t dcPin = platform::i2sLanes > 0 ? 33 : 11; // --- LedPeripheral descriptors --- @@ -143,8 +143,19 @@ class I80Peripheral : public LedPeripheral { if constexpr (platform::i2sLanes > 0) return LedHwBlock::I2s; else return LedHwBlock::LcdCam; } + /// The classic ESP32's i80 IS an I2S peripheral, and this bus always drives from instance 1, + /// leaving instance 0 (the only one with a PDM converter) for audio. Ask the platform whether + /// instance 1 is free now; on the LCD_CAM chips nothing is shared and this is a compile-time + /// false. + bool busContentionCleared() const override { + if constexpr (platform::i2sLanes > 0) return platform::i80Ws2812SharedBusFree(); + else return false; + } + const char* initFailMsg() const override { - // Names the same peripheral the label does, so the error and the dropdown agree. + // The backend's own reason when it has one (a peripheral another module holds); else the + // generic line, naming the same peripheral the label does so the error and dropdown agree. + if (const char* why = platform::i80Ws2812LastError()) return why; return (platform::i2sLanes > 0) ? "I2S-IDF: bus init failed, check pins / memory" : "LCD-IDF: bus init failed, check pins / memory"; } @@ -153,7 +164,9 @@ class I80Peripheral : public LedPeripheral { /// WR: the peripheral already drives it and the board already wires it, so the lane is inert. /// (Overrides the interface default; this is the "ghost pin" the platform layer uses for the same /// reason.) - uint16_t clockPinForBus() const override { return static_cast(clockPin); } + uint16_t clockPinForBus() const override { + return clockPin < 0 ? platform::kBusPinUnset : static_cast(clockPin); + } /// Bind the i80-specific bus controls: the sacrificial WR (clockPin) and DC pins /// the peripheral mandates. @@ -171,23 +184,33 @@ class I80Peripheral : public LedPeripheral { /// distinct control lines — the bus won't init), so it can't be a warn-and-run like a data-lane /// collision (which only corrupts that one lane). null = no fatal condition. const char* validateBusFatal() const override { - // An UNSET clockPin/dcPin (-1) is fatal on i80: the bus mandates a valid WR and DC GPIO, but - // clockPinForBus()/busInit cast the int8_t to uint16_t, so -1 becomes 65535 and slips past - // IDF's own `wr_gpio_num >= 0 && dc_gpio_num >= 0` guard (see the clockPin doc above). Reject it - // here, before that cast, so an unconfigured board idles with a clear status instead of an - // init on a garbage GPIO number. - if (clockPin < 0) return "clockPin (WR) is unset — the i80 bus needs a valid WR GPIO"; - if (dcPin < 0) return "dcPin is unset — the i80 bus needs a valid DC GPIO"; - if (clockPin == dcPin) - return "clockPin (WR) and dcPin are the same GPIO — they must differ"; - // Neither may sit on a pin the chip wired to flash or PSRAM: routing I/O there corrupts the - // device. The driver's own sweep covers the bus LANES, but WR only rides that list when - // there are spare lanes to park it on (a full-width 8- or 16-pin setup has none) and DC - // never does, so these two are checked here, where the pair already lives. - if (platform::gpioCapability(static_cast(clockPin)).reserved) - return "clockPin (WR) is wired to flash/PSRAM on this chip - pick another pin"; - if (platform::gpioCapability(static_cast(dcPin)).reserved) - return "dcPin is wired to flash/PSRAM on this chip - pick another pin"; + // Unset (-1) is fine on the classic ESP32, where the platform sinks the line onto an + // input-only pad (see the clockPin doc), and fatal on the LCD_CAM chips, where the number + // would reach the ROM. The int8 -> uint16 cast in busInit is exactly why this is checked + // here: an unguarded -1 becomes 65535 and slips IDF's own `>= 0` test. + // WR may be unset on the classic ESP32 (the platform sinks it onto an input-only pad, which + // the GPIO matrix drives harmlessly); DC may never be, on any chip, because esp_lcd toggles + // it in software every frame and that call aborts on a pad with no output driver. + if (platform::i2sLanes == 0 && clockPin < 0) + return "clockPin (WR) is unset - the i80 bus needs a write-strobe GPIO on this chip"; + if (dcPin < 0) return "dcPin (DC) is unset - the i80 bus toggles it every frame, so it needs a real GPIO"; + if (clockPin >= 0 && clockPin == dcPin) + return "clockPin (WR) and dcPin (DC) are the same GPIO - they must differ"; + // Neither may sit on a pin the chip wired to flash or PSRAM, nor on one this PACKAGE does + // not have: routing a signal there corrupts the device or wedges its flash cache, and + // both fail silently. The driver's own sweep covers the bus LANES, but WR only rides that + // list when there are spare lanes to park it on and DC never does, so the pair is checked + // here, where it lives. + if (clockPin >= 0) { + const auto cap = platform::gpioCapability(static_cast(clockPin)); + if (!cap.validGpio) return "clockPin (WR) does not exist on this chip package - pick another pin"; + if (cap.reserved) return "clockPin (WR) is wired to flash/PSRAM on this chip - pick another pin"; + } + if (dcPin >= 0) { + const auto cap = platform::gpioCapability(static_cast(dcPin)); + if (!cap.validGpio) return "dcPin (DC) does not exist on this chip package - pick another pin"; + if (cap.reserved) return "dcPin (DC) is wired to flash/PSRAM on this chip - pick another pin"; + } // The '595 latch is a BUS LANE, so it needs its own GPIO: sharing it with WR would make the // pixel clock double as the latch (the '595 would present a byte on every shift cycle), and // sharing it with DC would latch on the command phase. Both are fatal — the bus builds, but @@ -197,7 +220,7 @@ class I80Peripheral : public LedPeripheral { if (owner_->latchPin == clockPin) return "latchPin is on clockPin (WR) — the latch needs its own GPIO"; if (owner_->latchPin == dcPin) - return "latchPin is on dcPin — the latch needs its own GPIO"; + return "latchPin is on dcPin (DC) - the latch needs its own GPIO"; } return nullptr; } @@ -246,9 +269,9 @@ class I80Peripheral : public LedPeripheral { /// slot keeps its wire duration. bool busInit(size_t frameBytes, bool wantSecondBuffer) override { return platform::i80Ws2812Init(i80_, owner_->busPinList(), owner_->busPinCount(), - static_cast(clockPin), - static_cast(dcPin), frameBytes, wantSecondBuffer, - owner_->busClockMultiplier()); + clockPinForBus(), + dcPin < 0 ? platform::kBusPinUnset : static_cast(dcPin), + frameBytes, wantSecondBuffer, owner_->busClockMultiplier()); } /// DMA buffer `i` (0/1) the orchestrator encodes into; buffer 1 is null when the second /// buffer didn't fit (single-buffer mode). Both are the same size (busCapacity). diff --git a/src/light/drivers/ParallelLedDriver.h b/src/light/drivers/ParallelLedDriver.h index 53bd36ca..0b0ff867 100644 --- a/src/light/drivers/ParallelLedDriver.h +++ b/src/light/drivers/ParallelLedDriver.h @@ -712,6 +712,15 @@ class ParallelLedDriver : public DriverBase { /// toward, and it tracks an overclocked slot rate directly. "—" until the first transfer completes. void tick1s() MM_NONBLOCKING override { if (!peripheral_) return; + // A bus that lost a shared peripheral to another module comes back on its own once that + // module lets go. On the classic ESP32 the i80 bus and a PDM microphone both need I2S0, so + // whichever asks second is refused; without this the loser stayed dark until the user + // happened to edit a control, which is a reboot-to-apply in all but name (architecture.md, + // live reconfiguration). Gated tightly, because this runs on the render thread: only while + // the driver WANTS the bus and does not hold it, and only when the backend says the thing + // it was refused is free again (a register read, not an init). The rebuild itself is the + // same reinit() a control edit runs, on the same cold path, at most once per second. + if (!inited_ && laneCount_ > 0 && peripheral_->busContentionCleared()) reinit(); const uint32_t us = peripheral_->busLastTransmitUs(); if (us == 0) std::snprintf(frameTimeStr_, sizeof(frameTimeStr_), "—"); else std::snprintf(frameTimeStr_, sizeof(frameTimeStr_), "%u µs (%u fps max)", @@ -1904,9 +1913,13 @@ class ParallelLedDriver : public DriverBase { for (uint8_t i = 0; i < width && i < kMaxLanes; i++) { const uint16_t pin = bus[i]; if (pin > 48) continue; // unset/NC: nothing routed - if (!platform::gpioCapability(static_cast(pin)).reserved) continue; + const auto cap = platform::gpioCapability(static_cast(pin)); + if (cap.validGpio && !cap.reserved) continue; + // A pin the package lacks fails the same silent way a flash pin does (the + // ESP32-PICO-V3-02 has no GPIO 18/23), so it is refused here for the same reason. std::snprintf(statusBuf_, sizeof(statusBuf_), - "GPIO %u is wired to flash/PSRAM on this chip - pick another pin", + cap.validGpio ? "GPIO %u is wired to flash/PSRAM on this chip - pick another pin" + : "GPIO %u does not exist on this chip package - pick another pin", unsigned(pin)); setStatus(statusBuf_, Severity::Error); deinit(); diff --git a/src/light/drivers/RmtLedDriver.h b/src/light/drivers/RmtLedDriver.h index 8e72ff44..80498f46 100644 --- a/src/light/drivers/RmtLedDriver.h +++ b/src/light/drivers/RmtLedDriver.h @@ -251,6 +251,11 @@ class RmtLedDriver : public DriverBase { if (txInFlight_) { for (uint8_t attempt = 0; attempt < 4 && txInFlight_; attempt++) txInFlight_ = !waitForPins(); + // Still busy after every attempt: the peripheral is reading symbols_ right now, so + // rebuilding would free the buffer under it, which is the corruption this drain exists + // to prevent. Defer instead. tick() re-waits and the config applies on a later prepare; + // the alternative, rebuilding anyway, trades a delayed config change for a torn frame. + if (txInFlight_) return; } parseConfig(); resizeSymbols(); diff --git a/src/light/effects/ColorTrailsEffect.h b/src/light/effects/ColorTrailsEffect.h index fdf0f796..703b1ff4 100644 --- a/src/light/effects/ColorTrailsEffect.h +++ b/src/light/effects/ColorTrailsEffect.h @@ -75,6 +75,9 @@ class ColorTrailsEffect : public EffectBase { yProf_.resize(static_cast(height())); if (plane_) std::memset(plane_.data(), 0, plane_.bytes()); if (scratch_) std::memset(scratch_.data(), 0, scratch_.bytes()); + // The dither accumulator too: resize KEEPS the old contents at an unchanged size, so a + // re-prepare would carry the previous configuration's error into the first frames. + if (carry_) std::memset(carry_.data(), 0, carry_.bytes()); started_ = false; front_ = true; } diff --git a/src/light/effects/RadialSpectrumEffect.h b/src/light/effects/RadialSpectrumEffect.h index a03364b8..e9ccca38 100644 --- a/src/light/effects/RadialSpectrumEffect.h +++ b/src/light/effects/RadialSpectrumEffect.h @@ -97,9 +97,14 @@ class RadialSpectrumEffect : public EffectBase { // a tight halo around the center, the high end reaches the corner of a large wall. // (An earlier range started at 50% per ring, which died after 19 rings at ANY setting, so // the effect could never fill a panel however far the control was pushed.) - const uint32_t keep = 236u + (static_cast(persistence) * 19u) / 255u; - uint32_t k = 256; - for (uint16_t r = 0; r < kMaxHistory; r++) { fade_[r] = static_cast(k > 255 ? 255 : k); k = (k * keep) >> 8; } + // Rebuilt only when `persistence` moves: the table depends on nothing else, and at 128 + // entries per frame it was the effect's largest fixed cost after the light loop itself. + if (persistence != fadeFor_) { + const uint32_t keep = 236u + (static_cast(persistence) * 19u) / 255u; + uint32_t k = 256; + for (uint16_t r = 0; r < kMaxHistory; r++) { fade_[r] = static_cast(k > 255 ? 255 : k); k = (k * keep) >> 8; } + fadeFor_ = persistence; + } const bool table = lut_.ready(); const int32_t cx = w / 2, cy = h / 2, cz = dep / 2; @@ -142,7 +147,8 @@ class RadialSpectrumEffect : public EffectBase { PolarLut lut_{*this}; uint8_t history_[kMaxHistory][16] = {}; ///< the rings: one band frame per step uint8_t beats_[kMaxHistory] = {}; ///< the shockwave strength born with each ring - uint8_t fade_[kMaxHistory] = {}; ///< the keep fraction per ring of age, this frame + uint8_t fade_[kMaxHistory] = {}; ///< the keep fraction per ring of age + uint8_t fadeFor_ = 255; ///< the `persistence` fade_[] was built for uint16_t head_ = 0; ///< the newest ring uint32_t carry_ = 0; ///< time owed toward the next ring, in ms uint8_t pendingBeat_ = 0; ///< a hit waiting for the next ring diff --git a/src/platform/desktop/platform_desktop.cpp b/src/platform/desktop/platform_desktop.cpp index ccf7e2ad..2f7ff402 100644 --- a/src/platform/desktop/platform_desktop.cpp +++ b/src/platform/desktop/platform_desktop.cpp @@ -2007,6 +2007,8 @@ void freeHostBus(void*& impl) { } // namespace +const char* i80Ws2812LastError() { return nullptr; } // the emulated bus never refuses for a cause +bool i80Ws2812SharedBusFree() { return false; } // and shares no peripheral, so never retries bool i80Ws2812Init(I80Ws2812Handle& h, const uint16_t* /*dataPins*/, uint8_t /*laneCount*/, uint16_t /*wrGpio*/, uint16_t /*dcGpio*/, size_t bufferBytes, bool wantSecondBuffer, diff --git a/src/platform/desktop/platform_desktop_audio.cpp b/src/platform/desktop/platform_desktop_audio.cpp index f6018592..88787a51 100644 --- a/src/platform/desktop/platform_desktop_audio.cpp +++ b/src/platform/desktop/platform_desktop_audio.cpp @@ -170,6 +170,10 @@ bool audioCaptureInit(AudioMicHandle& h, uint8_t deviceIndex, uint32_t sampleRat return true; } + +// The desktop captures from an OS device, which shares no peripheral with anything: never retries. +bool audioMicSharedBusFree(MicMode) { return false; } + size_t audioMicRead(AudioMicHandle& /*h*/, int32_t* out, size_t maxSamples) { if (!deviceOpen_ || out == nullptr) return 0; return ring_.pop(out, maxSamples); diff --git a/src/platform/esp32/platform_esp32_gpio.cpp b/src/platform/esp32/platform_esp32_gpio.cpp index 52193e24..fce89c07 100644 --- a/src/platform/esp32/platform_esp32_gpio.cpp +++ b/src/platform/esp32/platform_esp32_gpio.cpp @@ -16,6 +16,8 @@ #include "esp_adc/adc_oneshot.h" // adcRead: the ADC1 oneshot unit #include "esp_adc/adc_cali.h" // adcReadMv: per-chip eFuse correction #include "esp_adc/adc_cali_scheme.h" +#include "esp_efuse.h" // esp_efuse_get_pkg_ver: the classic ESP32's PACKAGE decides its pin table +#include "soc/efuse_defs.h" // EFUSE_RD_CHIP_VER_PKG_*: the package ids #include "esp_heap_caps.h" // heap_caps_get_total_size(MALLOC_CAP_SPIRAM) — detect PSRAM without a new // component dep (the heap component is always linked; esp_psram is not, // and adding it to REQUIRES would switch main to strict mode, hiding the @@ -45,10 +47,27 @@ bool inList(uint8_t gpio, const uint8_t* list, size_t n) { // when esp_psram_is_initialized() is true at runtime. A plain WROOM (e.g. the Olimex ESP32-Gateway) has // no PSRAM, so its 16/17 stay free — flagging them would be a false positive. #if defined(CONFIG_IDF_TARGET_ESP32) -// Classic ESP32: flash 6-11 always; 16/17 are the extra flash/PSRAM bus on WROVER modules only. +// Classic ESP32 in a plain module (WROOM / WROVER, a D0WD die): flash 6-11 always; 16/17 are the +// extra flash/PSRAM bus on WROVER modules only. constexpr uint8_t kReserved[] = {6, 7, 8, 9, 10, 11}; constexpr uint8_t kReservedIfPsram[] = {16, 17}; constexpr uint8_t kStrap[] = {0, 2, 5, 12, 15}; +// The PICO system-in-package parts wire their in-package flash and PSRAM differently, and the SAME +// esp32 firmware runs on all of them, so the package is read from eFuse at runtime rather than from +// the build. ESP32-PICO-V3-02 (the QuinLED Dig-Next-2): flash on 6/11, PSRAM on 9/10, and the pads +// of GPIO 16/17/18/23 are NC on the package (datasheet Table 7), which in practice means "used by +// the in-package parts": muxing a peripheral onto one wedges the flash cache, and the board resets +// with no panic and no coredump. 7/8 ARE free on this package (the Dig-Next-2's microphone sits +// there). ESP32-PICO-D4: flash on 6-11 plus 16/17, PSRAM or not. +constexpr uint8_t kReservedPicoV302[] = {6, 9, 10, 11}; +constexpr uint8_t kAbsentPicoV302[] = {16, 17, 18, 23}; +constexpr uint8_t kReservedPicoD4[] = {6, 7, 8, 9, 10, 11, 16, 17}; + +/// The eFuse package id, read once (it cannot change after boot). +uint32_t packageId() { + static const uint32_t pkg = esp_efuse_get_pkg_ver(); + return pkg; +} #elif defined(CONFIG_IDF_TARGET_ESP32S3) // ESP32-S3: flash 26-32 always; 33-37 are octal-PSRAM's SPIIO4-7 + DQS, reserved only on an octal-PSRAM // module (N16R8/R8). Straps 0,45,46 (GPIO3 is a soft strap). JTAG/UART0/USB are role-conflicts, not @@ -93,6 +112,20 @@ GpioCapability gpioCapability(uint8_t gpio) { c.strap = inList(gpio, kStrap, sizeof(kStrap)); c.reserved = inList(gpio, kReserved, sizeof(kReserved)) || (psramPresent() && inList(gpio, kReservedIfPsram, sizeof(kReservedIfPsram))); +#if defined(CONFIG_IDF_TARGET_ESP32) + // The die's valid-GPIO mask does not know the package; the tables above do (see their note). + switch (packageId()) { + case EFUSE_RD_CHIP_VER_PKG_ESP32PICOV302: + c.reserved = inList(gpio, kReservedPicoV302, sizeof(kReservedPicoV302)); + c.validGpio = c.validGpio && !inList(gpio, kAbsentPicoV302, sizeof(kAbsentPicoV302)); + break; + case EFUSE_RD_CHIP_VER_PKG_ESP32PICOD4: + c.reserved = inList(gpio, kReservedPicoD4, sizeof(kReservedPicoD4)); + break; + default: + break; + } +#endif return c; } diff --git a/src/platform/esp32/platform_esp32_i2s.cpp b/src/platform/esp32/platform_esp32_i2s.cpp index 068c0215..dd9f2a49 100644 --- a/src/platform/esp32/platform_esp32_i2s.cpp +++ b/src/platform/esp32/platform_esp32_i2s.cpp @@ -22,7 +22,8 @@ #include "driver/i2s_std.h" #if SOC_I2S_SUPPORTS_PDM_RX -#include "driver/i2s_pdm.h" // the two-wire onboard mics (QuinLED Dig-Next-2 and friends) +#include "driver/i2s_pdm.h" // the two-wire onboard mics (QuinLED Dig-Next-2 and friends) +#include "esp_private/i2s_platform.h" // the shared-instance probe (see audioMicSharedBusFree) #endif #include "esp_heap_caps.h" // heap_caps_malloc — the FFT scratch, internal RAM only #include "esp_log.h" @@ -87,13 +88,23 @@ bool ensureFftInit() { } // namespace +namespace { +// Set when audioMicInit failed because another module held the I2S instance, cleared on every +// attempt. Only contention can clear on its own, so only it earns the once-a-second retry: keyed +// on "the mic is down" instead, a board with no microphone wired would re-init forever. +bool s_micRefusedForContention = false; +} + bool audioMicInit(AudioMicHandle& h, uint16_t wsPin, uint16_t sdPin, uint16_t sckPin, int16_t mclkPin, uint32_t sampleRate, MicMode mode) { + s_micRefusedForContention = false; auto* st = new (std::nothrow) MicState(); if (!st) return false; i2s_chan_config_t chanCfg = I2S_CHANNEL_DEFAULT_CONFIG(I2S_NUM_AUTO, I2S_ROLE_MASTER); if (i2s_new_channel(&chanCfg, nullptr, &st->rx) != ESP_OK) { + // No free instance: something else (the parallel LED bus) holds it, and that can clear. + s_micRefusedForContention = true; delete st; return false; } @@ -222,6 +233,25 @@ size_t audioMicRead(AudioMicHandle& h, int32_t* out, size_t maxSamples) { return bytesRead / sizeof(int32_t); } +bool audioMicSharedBusFree(MicMode mode) { +#if CONFIG_IDF_TARGET_ESP32 + // Only after a CONTENTION refusal. Without this the probe answers "free" on any board whose + // instance 0 is simply idle, so a mic that is down for its OWN reasons (no part wired, wrong + // pins) would re-init once a second forever, allocating and logging on the render thread. + if (!s_micRefusedForContention) return false; + // Only the classic ESP32 shares: its parallel LED bus IS an I2S peripheral. That bus always + // takes instance 1 (see platform_esp32_i80.cpp), so audio always has instance 0, which is also + // the only instance a PDM microphone can use. This is the mirror of the bus's own probe: it + // matters when something else holds 0, and the mic recovers once that clears. + (void)mode; + if (i2s_platform_acquire_occupation(I2S_CTLR_HP, 0, "mm_mic_probe") != ESP_OK) return false; + i2s_platform_release_occupation(I2S_CTLR_HP, 0); + return true; +#else + return false; // every other chip drives parallel LEDs from LCD_CAM, so nothing contends +#endif +} + void audioMicDeinit(AudioMicHandle& h) { auto* st = static_cast(h.impl); if (!st) return; @@ -265,6 +295,7 @@ bool audioMicInit(AudioMicHandle&, uint16_t, uint16_t, uint16_t, int16_t, uint32 } size_t audioMicRead(AudioMicHandle&, int32_t*, size_t) { return 0; } void audioMicDeinit(AudioMicHandle&) {} +bool audioMicSharedBusFree(MicMode) { return false; } // no I2S: nothing to contend for void audioFft(const float*, size_t, float*) {} diff --git a/src/platform/esp32/platform_esp32_i80.cpp b/src/platform/esp32/platform_esp32_i80.cpp index ded185eb..9d688e3b 100644 --- a/src/platform/esp32/platform_esp32_i80.cpp +++ b/src/platform/esp32/platform_esp32_i80.cpp @@ -45,6 +45,9 @@ #include #include // the transmit callback passed to the shared frame loopback #include // std::nothrow +#if !SOC_LCDCAM_I80_LCD_SUPPORTED +#include "esp_private/i2s_platform.h" // the I2S0 occupancy probe (the same API esp_lcd's I2S backend uses) +#endif namespace mm::platform { @@ -353,10 +356,87 @@ I80State* createState(const uint16_t* dataPins, uint8_t laneCount, } // namespace -bool i80Ws2812Init(I80Ws2812Handle& h, const uint16_t* dataPins, uint8_t laneCount, +namespace { +const char* s_lastError = nullptr; // set by i80Ws2812Init on a refusal it can name; cold path +// Whether that refusal was CONTENTION (another module holds the instance) rather than a config +// fault. Only contention can clear on its own, so only it earns a retry: keying the retry on +// `s_lastError` alone made a bad pin set rebuild the bus once a second forever. +bool s_refusedForContention = false; +} + +const char* i80Ws2812LastError() { return s_lastError; } + +bool i80Ws2812SharedBusFree() { +#if !SOC_LCDCAM_I80_LCD_SUPPORTED + // Only meaningful after THIS backend was refused for contention: otherwise a driver that failed + // for its own reasons (bad pins, no memory) would rebuild once a second forever. Probing is the + // acquire/release pair esp_lcd itself uses, which is why it is safe to call repeatedly. + if (!s_refusedForContention) return false; + if (i2s_platform_acquire_occupation(I2S_CTLR_HP, 1, "mm_i80_probe") != ESP_OK) return false; + i2s_platform_release_occupation(I2S_CTLR_HP, 1); + return true; +#else + return false; // LCD_CAM: the i80 bus shares nothing +#endif +} + +bool i80Ws2812Init(I80Ws2812Handle& h, const uint16_t* dataPinsIn, uint8_t laneCount, uint16_t wrGpio, uint16_t dcGpio, size_t bufferBytes, bool wantSecondBuffer, uint8_t clockMultiplier) { - if (!dataPins || laneCount == 0 || bufferBytes == 0 || clockMultiplier == 0) return false; + s_lastError = nullptr; + s_refusedForContention = false; + if (!dataPinsIn || laneCount == 0 || bufferBytes == 0 || clockMultiplier == 0) return false; + if (laneCount > ESP_LCD_I80_BUS_WIDTH_MAX) return false; + uint16_t dataPins[ESP_LCD_I80_BUS_WIDTH_MAX]; + std::memcpy(dataPins, dataPinsIn, laneCount * sizeof(uint16_t)); +#if !SOC_LCDCAM_I80_LCD_SUPPORTED + // The classic ESP32's i80 IS an I2S peripheral, and the chip has two instances. **The LED bus + // always takes instance 1, and everything else gets 0.** The split is fixed in silicon rather + // than chosen: instance 0 is the only one with the PDM-to-PCM and PCM-to-PDM converters + // (I2S_LL_PDM2PCM_SUPPORTED_PORT_MASK is 1U << 0), so a PDM microphone can ONLY live there, + // while nothing in the chip requires instance 1 for anything. The LED bus is therefore the one + // consumer that can always yield, and hard-coding it to 1 leaves 0 free for every audio source + // (PDM, standard I2S, line-in ADC, codec), with no ordering or boot race to reason about. + // + // esp_lcd picks the first FREE instance rather than taking one by number, so 1 is claimed by + // holding 0 across bus creation and releasing it straight after. + if (i2s_platform_acquire_occupation(I2S_CTLR_HP, 1, "mm_i80_probe") != ESP_OK) { + s_lastError = "I2S1 is in use: on the classic ESP32 the parallel LED bus is an I2S " + "peripheral, and it drives from instance 1"; + s_refusedForContention = true; + return false; + } + i2s_platform_release_occupation(I2S_CTLR_HP, 1); + const bool parked = i2s_platform_acquire_occupation(I2S_CTLR_HP, 0, "mm_i80_park") == ESP_OK; + struct ParkGuard { // release instance 0 on EVERY path out of this function + bool on; + ~ParkGuard() { if (on) i2s_platform_release_occupation(I2S_CTLR_HP, 0); } + } parkGuard{parked}; + // "No pin" for WR (kBusPinUnset), and for the spare bus lanes the driver parks on it: the + // peripheral insists on a GPIO number, a WS2812 strand reads none of these lines, and an + // input-only pad has no output driver. So WR is routed to SENSOR_VP (36), bonded on every + // classic package, where the matrix drives nothing and no usable GPIO is spent. + // + // DC gets NO such treatment, and the asymmetry is load-bearing. WR reaches the pad through the + // GPIO matrix (esp_rom_gpio_connect_out_signal), which is inert on a pad that cannot drive. DC + // is software-toggled: esp_lcd calls gpio_set_level on it for every transfer, and on an + // input-only pad that call fails, logs "GPIO output gpio_num error", and the log call itself + // aborts from that context. So an unset DC is refused by the driver before it reaches here. + constexpr uint16_t kWrSink = 36; + if (wrGpio == kBusPinUnset) wrGpio = kWrSink; + for (uint8_t i = 0; i < laneCount; i++) if (dataPins[i] == kBusPinUnset) dataPins[i] = wrGpio; + if (dcGpio == kBusPinUnset) { + s_lastError = "dcPin (DC) needs a real GPIO: the i80 bus toggles it in software every frame"; + return false; + } +#else + // LCD_CAM (S3 / P4 / S31): both control lines need a real pad. The driver refuses an unset one + // before calling here; this is the backstop that keeps an invalid number away from the ROM. + if (wrGpio == kBusPinUnset || dcGpio == kBusPinUnset) { + s_lastError = "clockPin (WR) and dcPin (DC) need a real GPIO on this chip"; + return false; + } +#endif // The shift-register expander needs the LCD_CAM backend: its ×8 frame (~145 KB) only fits in // PSRAM, and the classic ESP32's I2S-i80 backend cannot DMA from PSRAM at all (see buf[0]) — // it would fall back to internal RAM and fail the allocation, or worse, half-fit. Refuse it @@ -576,6 +656,8 @@ bool i80Ws2812Init(I80Ws2812Handle&, const uint16_t*, uint8_t, uint16_t, uint16_ size_t, bool, uint8_t) { return false; } +const char* i80Ws2812LastError() { return nullptr; } +bool i80Ws2812SharedBusFree() { return false; } uint8_t* i80Ws2812Buffer(const I80Ws2812Handle&, uint8_t) { return nullptr; } size_t i80Ws2812BufferCapacity(const I80Ws2812Handle&) { return 0; } bool i80Ws2812Transmit(I80Ws2812Handle&, uint8_t, size_t) { return false; } diff --git a/src/platform/platform.h b/src/platform/platform.h index 3e801b16..57d4870e 100644 --- a/src/platform/platform.h +++ b/src/platform/platform.h @@ -1065,9 +1065,25 @@ struct I80Ws2812Handle { void* impl = nullptr; }; // error in esp_lcd: it silently rounds the prescale, which would emit a wrong waveform). A // multiplier > 1 is rejected on a backend that cannot DMA the resulting frame from PSRAM (the // classic-ESP32 I2S i80 path), rather than driving a frame the hardware can't sustain. +// +// `kBusPinUnset` for `wrGpio` / `dcGpio` (or a parked data lane) means "no pin": on the classic +// ESP32 the backend sinks that line onto an input-only pad, so the peripheral gets the GPIO number +// it insists on and nothing on the board is driven. The LCD_CAM backends need a real pad for both +// (the P4 ROM writes outside the GPIO block for an invalid number), so there it is an init failure +// the driver reports before ever calling this. +constexpr uint16_t kBusPinUnset = 0xFFFF; bool i80Ws2812Init(I80Ws2812Handle& h, const uint16_t* dataPins, uint8_t laneCount, uint16_t wrGpio, uint16_t dcGpio, size_t bufferBytes, bool wantSecondBuffer, uint8_t clockMultiplier = 1); +// Why the last i80Ws2812Init returned false, when the backend knows more than "it failed" +// (a peripheral another module holds, a pin this package lacks); nullptr when it does not. +// The driver shows it as the status, so the user reads the cause rather than "check pins / memory". +const char* i80Ws2812LastError(); +// Whether the peripheral this backend shares with other modules is free to claim right now. On the +// classic ESP32 the i80 bus is the I2S peripheral and a PDM microphone wants the same instance, so +// the driver polls this to rebuild itself once the microphone lets go (and the microphone's own +// retry does the mirror). Always false where nothing is shared. Cheap: a registry read, no init. +bool i80Ws2812SharedBusFree(); // DMA frame buffer `buffer` (0 or 1) the driver encodes into (zero-copy). // Buffer 0 always exists once init succeeded; buffer 1 is null when the second @@ -1485,6 +1501,11 @@ bool audioMicInit(AudioMicHandle& h, uint16_t wsPin, uint16_t sdPin, // Read up to `maxSamples` 32-bit samples into `out`; returns the count read // (0 if none ready / not initialized). Non-blocking enough for the render tick. size_t audioMicRead(AudioMicHandle& h, int32_t* out, size_t maxSamples); +// Whether the I2S instance a PDM microphone needs is free right now. The mirror of +// i80Ws2812SharedBusFree: on the classic ESP32 the parallel LED bus is that same instance, so a +// microphone refused at claim time polls this to come up once the bus lets go. False where nothing +// is shared (every chip whose i80 is LCD_CAM, and the desktop). Cheap: a registry read, no init. +bool audioMicSharedBusFree(MicMode mode); void audioMicDeinit(AudioMicHandle& h); diff --git a/test/python/test_repo_health_measured_state.py b/test/python/test_repo_health_measured_state.py new file mode 100644 index 00000000..22e3b608 --- /dev/null +++ b/test/python/test_repo_health_measured_state.py @@ -0,0 +1,67 @@ +"""A snapshot reports what THIS run measured, never what an earlier one did. + +`MEASURED_THIS_RUN` and `MEASURED_DATES` are module-level, so a second `snapshot()` in the same +process would inherit the first's claims unless they are cleared: a target measured once and then +unavailable would keep reporting `Built: yes` and carry the first run's date, which is exactly the +false reassurance the freshness rule exists to prevent, moved one call later. + +The report's own vocabulary is pinned here too, because the labels are what a reader acts on: +`yes` measured now, `carried Nd` not rebuilt and N days old, `carried (age?)` not rebuilt and from +before dates were recorded, and `STALE` past the threshold. +""" + +import datetime as dt +import sys +from pathlib import Path + +ROOT = Path(__file__).resolve().parent.parent.parent +sys.path.insert(0, str(ROOT / "moondeck" / "check")) + +import repo_health # noqa: E402 + + +def test_second_snapshot_does_not_inherit_the_first_runs_measurement(monkeypatch): + """A target measured once, then unmeasurable, must stop claiming it was built.""" + calls = {"n": 0} + + def fake_measure_flash(): + # First call measures a target the way the real one does; the second finds nothing + # (the binary is gone, or too old to count) and records neither. + calls["n"] += 1 + if calls["n"] == 1: + repo_health.MEASURED_THIS_RUN.add("esp32-pico") + repo_health.MEASURED_DATES["esp32-pico"] = "2020-01-01" + return {"esp32-pico": 1000} + return {} + + monkeypatch.setattr(repo_health, "measure_flash", fake_measure_flash) + for name in ("measure_loc", "measure_comments", "measure_tests", "measure_docs", + "measure_complexity"): + monkeypatch.setattr(repo_health, name, lambda: {}) + monkeypatch.setattr(repo_health, "_head", lambda: "deadbeef") + + first = repo_health.snapshot() + assert first["measured"]["esp32-pico"] == "2020-01-01" + assert repo_health._built_label("esp32-pico", first["measured"].get("esp32-pico")) == "yes" + + second = repo_health.snapshot() + assert "esp32-pico" not in second["measured"], "the date must not survive into a second run" + assert "esp32-pico" not in repo_health.MEASURED_THIS_RUN + # And the label now describes a carry rather than a measurement. + assert repo_health._built_label("esp32-pico", second["measured"].get("esp32-pico")) != "yes" + + +def test_built_labels_say_measured_carried_or_stale(): + """The four labels a reader acts on, including the undated carry.""" + repo_health.MEASURED_THIS_RUN.clear() + repo_health.MEASURED_THIS_RUN.add("fresh") + recent = (dt.date.today() - dt.timedelta(days=2)).isoformat() + old = (dt.date.today() - dt.timedelta(days=repo_health.STALE_AFTER_DAYS + 1)).isoformat() + + assert repo_health._built_label("fresh", recent) == "yes" + assert repo_health._built_label("other", recent) == "carried 2d" + assert "STALE" in repo_health._built_label("other", old) + # No date at all: honest about the gap rather than guessing one. + assert repo_health._built_label("other", None) == "carried (age?)" + assert repo_health._built_label("other", "not-a-date") == "carried (age?)" + repo_health.MEASURED_THIS_RUN.clear() diff --git a/test/scenarios/core/scenario_MoonModule_control_change.json b/test/scenarios/core/scenario_MoonModule_control_change.json index d8c285d4..5de41c53 100644 --- a/test/scenarios/core/scenario_MoonModule_control_change.json +++ b/test/scenarios/core/scenario_MoonModule_control_change.json @@ -117,12 +117,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 143, + "p50": 144, "p95": 248, "min": 117, "max": 302, "n": 32, - "samples": [130, 125, 123, 123, 129, 134, 203, 129, 133, 243, 248, 246, 127, 204, 143, 150, 150, 175, 205, 179, 191, 127, 202, 119, 121, 118, 120, 199, 193, 117, 144, 302] + "samples": [203, 129, 133, 243, 248, 246, 127, 204, 143, 150, 150, 175, 205, 179, 191, 127, 202, 119, 121, 118, 120, 199, 193, 117, 144, 302, 129, 118, 246, 120, 133, 122] }, "last_updated": "2026-09-06" }, @@ -299,12 +299,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 133, - "p95": 238, + "p50": 134, + "p95": 247, "min": 117, - "max": 247, + "max": 260, "n": 32, - "samples": [131, 131, 128, 127, 127, 142, 205, 130, 134, 238, 247, 238, 126, 196, 146, 147, 159, 171, 203, 182, 135, 128, 132, 119, 120, 118, 118, 131, 134, 117, 133, 135] + "samples": [205, 130, 134, 238, 247, 238, 126, 196, 146, 147, 159, 171, 203, 182, 135, 128, 132, 119, 120, 118, 118, 131, 134, 117, 133, 135, 146, 121, 260, 123, 118, 120] }, "last_updated": "2026-09-06" }, @@ -481,12 +481,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 129, + "p50": 126, "p95": 239, "min": 116, "max": 240, "n": 32, - "samples": [132, 132, 127, 127, 129, 135, 204, 130, 133, 240, 239, 238, 126, 186, 147, 148, 158, 173, 206, 180, 126, 128, 118, 121, 121, 118, 116, 116, 122, 117, 122, 129] + "samples": [204, 130, 133, 240, 239, 238, 126, 186, 147, 148, 158, 173, 206, 180, 126, 128, 118, 121, 121, 118, 116, 116, 122, 117, 122, 129, 122, 121, 152, 122, 120, 120] }, "last_updated": "2026-09-06" }, @@ -671,12 +671,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 129, + "p50": 127, "p95": 247, "min": 117, "max": 261, "n": 32, - "samples": [130, 131, 128, 127, 127, 139, 205, 129, 131, 261, 247, 241, 127, 186, 148, 148, 157, 174, 192, 182, 127, 128, 120, 119, 120, 118, 118, 120, 123, 117, 122, 141] + "samples": [205, 129, 131, 261, 247, 241, 127, 186, 148, 148, 157, 174, 192, 182, 127, 128, 120, 119, 120, 118, 118, 120, 123, 117, 122, 141, 124, 121, 151, 122, 119, 121] }, "last_updated": "2026-09-06" }, diff --git a/test/scenarios/light/scenario_Audio_mutation.json b/test/scenarios/light/scenario_Audio_mutation.json index 18f2c778..9c67b2ac 100644 --- a/test/scenarios/light/scenario_Audio_mutation.json +++ b/test/scenarios/light/scenario_Audio_mutation.json @@ -105,12 +105,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 21, - "p95": 50, + "p50": 20, + "p95": 46, "min": 16, - "max": 61, + "max": 48, "n": 32, - "samples": [34, 50, 44, 61, 36, 21, 21, 35, 21, 21, 21, 32, 24, 38, 46, 48, 27, 25, 16, 20, 16, 20, 20, 17, 17, 16, 16, 17, 17, 17, 19, 26] + "samples": [21, 35, 21, 21, 21, 32, 24, 38, 46, 48, 27, 25, 16, 20, 16, 20, 20, 17, 17, 16, 16, 17, 17, 17, 19, 26, 16, 17, 25, 19, 20, 20] }, "last_updated": "2026-09-06" }, @@ -202,12 +202,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 28, - "p95": 106, + "p50": 26, + "p95": 70, "min": 17, - "max": 404, + "max": 137, "n": 32, - "samples": [48, 106, 40, 404, 41, 17, 25, 35, 34, 70, 30, 33, 26, 53, 66, 59, 35, 38, 18, 22, 17, 17, 19, 28, 27, 22, 17, 19, 20, 37, 22, 28] + "samples": [25, 35, 34, 70, 30, 33, 26, 53, 66, 59, 35, 38, 18, 22, 17, 17, 19, 28, 27, 22, 17, 19, 20, 37, 22, 28, 24, 137, 27, 17, 20, 19] }, "last_updated": "2026-09-06" }, @@ -316,12 +316,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 28, - "p95": 86, + "p50": 26, + "p95": 63, "min": 17, - "max": 213, + "max": 66, "n": 32, - "samples": [53, 66, 47, 213, 86, 17, 18, 32, 40, 66, 28, 33, 28, 57, 60, 63, 45, 44, 37, 20, 17, 18, 20, 19, 25, 18, 18, 19, 19, 21, 26, 28] + "samples": [18, 32, 40, 66, 28, 33, 28, 57, 60, 63, 45, 44, 37, 20, 17, 18, 20, 19, 25, 18, 18, 19, 19, 21, 26, 28, 30, 40, 32, 26, 18, 20] }, "last_updated": "2026-09-06" }, @@ -413,12 +413,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 27, - "p95": 86, + "p50": 26, + "p95": 68, "min": 19, - "max": 125, + "max": 75, "n": 32, - "samples": [75, 85, 55, 125, 86, 19, 20, 38, 27, 66, 26, 36, 30, 62, 75, 68, 45, 45, 20, 23, 20, 21, 20, 21, 31, 20, 20, 21, 19, 22, 24, 28] + "samples": [20, 38, 27, 66, 26, 36, 30, 62, 75, 68, 45, 45, 20, 23, 20, 21, 20, 21, 31, 20, 20, 21, 19, 22, 24, 28, 31, 44, 29, 29, 21, 24] }, "last_updated": "2026-09-06" }, @@ -508,12 +508,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 28, - "p95": 80, + "p50": 23, + "p95": 69, "min": 19, - "max": 110, + "max": 80, "n": 32, - "samples": [54, 61, 39, 110, 42, 23, 21, 32, 33, 69, 25, 37, 28, 65, 67, 62, 41, 80, 19, 21, 21, 21, 20, 22, 27, 20, 21, 19, 19, 21, 30, 28] + "samples": [21, 32, 33, 69, 25, 37, 28, 65, 67, 62, 41, 80, 19, 21, 21, 21, 20, 22, 27, 20, 21, 19, 19, 21, 30, 28, 22, 29, 36, 19, 21, 23] }, "last_updated": "2026-09-06" }, @@ -603,12 +603,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 25, - "p95": 87, + "p50": 20, + "p95": 79, "min": 16, - "max": 142, + "max": 87, "n": 32, - "samples": [57, 83, 39, 142, 39, 17, 26, 29, 38, 87, 23, 32, 25, 52, 79, 57, 29, 33, 18, 26, 20, 19, 19, 17, 17, 17, 16, 17, 17, 21, 17, 25] + "samples": [26, 29, 38, 87, 23, 32, 25, 52, 79, 57, 29, 33, 18, 26, 20, 19, 19, 17, 17, 17, 16, 17, 17, 21, 17, 25, 17, 20, 24, 19, 17, 20] }, "last_updated": "2026-09-06" }, diff --git a/test/scenarios/light/scenario_Aurora_fps.json b/test/scenarios/light/scenario_Aurora_fps.json index bb31d478..b848e2a8 100644 --- a/test/scenarios/light/scenario_Aurora_fps.json +++ b/test/scenarios/light/scenario_Aurora_fps.json @@ -84,12 +84,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 843, + "p50": 855, "p95": 1391, "min": 474, - "max": 1391, - "n": 17, - "samples": [478, 474, 650, 786, 803, 855, 835, 843, 890, 827, 841, 871, 845, 856, 1391, 863, 858] + "max": 1527, + "n": 23, + "samples": [478, 474, 650, 786, 803, 855, 835, 843, 890, 827, 841, 871, 845, 856, 1391, 863, 858, 885, 1527, 1317, 853, 859, 861] }, "last_updated": "2026-09-06" } @@ -114,12 +114,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 317, - "p95": 355, + "p50": 318, + "p95": 449, "min": 207, - "max": 355, - "n": 17, - "samples": [207, 207, 208, 307, 311, 320, 316, 318, 317, 317, 321, 334, 312, 322, 355, 335, 322] + "max": 495, + "n": 23, + "samples": [207, 207, 208, 307, 311, 320, 316, 318, 317, 317, 321, 334, 312, 322, 355, 335, 322, 495, 395, 449, 317, 318, 317] }, "last_updated": "2026-09-06" } @@ -145,11 +145,11 @@ "desktop-macos": { "tick_us": { "p50": 187, - "p95": 254, + "p95": 245, "min": 127, "max": 254, - "n": 17, - "samples": [127, 127, 128, 185, 183, 189, 187, 192, 186, 185, 188, 196, 187, 187, 254, 187, 188] + "n": 23, + "samples": [127, 127, 128, 185, 183, 189, 187, 192, 186, 185, 188, 196, 187, 187, 254, 187, 188, 222, 232, 245, 186, 188, 185] }, "last_updated": "2026-09-06" } @@ -174,12 +174,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 550, - "p95": 581, + "p50": 551, + "p95": 702, "min": 303, - "max": 581, - "n": 17, - "samples": [304, 303, 306, 530, 532, 554, 540, 544, 551, 551, 554, 581, 543, 554, 560, 550, 553] + "max": 720, + "n": 23, + "samples": [304, 303, 306, 530, 532, 554, 540, 544, 551, 551, 554, 581, 543, 554, 560, 550, 553, 567, 702, 720, 550, 545, 552] }, "last_updated": "2026-09-06" } @@ -204,12 +204,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 938, - "p95": 1236, + "p50": 950, + "p95": 1158, "min": 474, "max": 1236, - "n": 17, - "samples": [474, 474, 480, 921, 919, 974, 933, 936, 938, 945, 964, 997, 937, 956, 1236, 950, 953] + "n": 23, + "samples": [474, 474, 480, 921, 919, 974, 933, 936, 938, 945, 964, 997, 937, 956, 1236, 950, 953, 952, 1158, 1152, 946, 1029, 970] }, "last_updated": "2026-09-06" } @@ -234,12 +234,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 1458, - "p95": 2116, + "p50": 1472, + "p95": 1871, "min": 785, "max": 2116, - "n": 16, - "samples": [937, 785, 1419, 1423, 1465, 1430, 1562, 1455, 1458, 1483, 2116, 1446, 1497, 1493, 1472, 1467] + "n": 22, + "samples": [937, 785, 1419, 1423, 1465, 1430, 1562, 1455, 1458, 1483, 2116, 1446, 1497, 1493, 1472, 1467, 1490, 1853, 1666, 1473, 1474, 1871] }, "last_updated": "2026-09-06" } @@ -264,12 +264,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 1506, - "p95": 1920, + "p50": 1514, + "p95": 1828, "min": 507, "max": 1920, - "n": 17, - "samples": [507, 814, 821, 1496, 1511, 1506, 1491, 1494, 1498, 1506, 1574, 1920, 1494, 1564, 1543, 1622, 1526] + "n": 23, + "samples": [507, 814, 821, 1496, 1511, 1506, 1491, 1494, 1498, 1506, 1574, 1920, 1494, 1564, 1543, 1622, 1526, 1556, 1761, 1695, 1534, 1514, 1828] }, "last_updated": "2026-09-06" } @@ -294,12 +294,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 1104, + "p50": 1117, "p95": 1211, "min": 333, - "max": 1211, - "n": 17, - "samples": [333, 643, 658, 1103, 1079, 1108, 1092, 1096, 1104, 1118, 1165, 1211, 1103, 1135, 1128, 1137, 1120] + "max": 1303, + "n": 23, + "samples": [333, 643, 658, 1103, 1079, 1108, 1092, 1096, 1104, 1118, 1165, 1211, 1103, 1135, 1128, 1137, 1120, 1131, 1303, 1210, 1117, 1118, 1105] }, "last_updated": "2026-09-06" } diff --git a/test/scenarios/light/scenario_Driver_mutation.json b/test/scenarios/light/scenario_Driver_mutation.json index de35fb5c..61617d88 100644 --- a/test/scenarios/light/scenario_Driver_mutation.json +++ b/test/scenarios/light/scenario_Driver_mutation.json @@ -76,12 +76,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 32, - "p95": 590, + "p50": 20, + "p95": 99, "min": 16, - "max": 1843, + "max": 147, "n": 32, - "samples": [590, 105, 45, 51, 43, 1843, 56, 18, 99, 32, 36, 147, 25, 37, 25, 51, 73, 88, 61, 43, 17, 21, 17, 20, 20, 17, 19, 20, 19, 18, 21, 16] + "samples": [56, 18, 99, 32, 36, 147, 25, 37, 25, 51, 73, 88, 61, 43, 17, 21, 17, 20, 20, 17, 19, 20, 19, 18, 21, 16, 19, 19, 17, 19, 18, 20] }, "last_updated": "2026-09-06" }, @@ -173,12 +173,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 27, - "p95": 298, + "p50": 20, + "p95": 68, "min": 16, - "max": 421, + "max": 73, "n": 32, - "samples": [421, 126, 48, 54, 39, 298, 68, 19, 25, 37, 51, 73, 26, 32, 25, 47, 65, 59, 59, 45, 17, 22, 17, 20, 20, 17, 27, 20, 20, 20, 23, 16] + "samples": [68, 19, 25, 37, 51, 73, 26, 32, 25, 47, 65, 59, 59, 45, 17, 22, 17, 20, 20, 17, 27, 20, 20, 20, 23, 16, 20, 20, 18, 20, 20, 20] }, "last_updated": "2026-09-06" }, @@ -270,12 +270,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 25, - "p95": 257, + "p50": 21, + "p95": 64, "min": 16, - "max": 339, + "max": 67, "n": 32, - "samples": [257, 339, 46, 53, 38, 222, 67, 25, 24, 36, 37, 61, 25, 32, 25, 48, 64, 63, 52, 46, 21, 18, 20, 20, 20, 20, 24, 20, 20, 21, 17, 16] + "samples": [67, 25, 24, 36, 37, 61, 25, 32, 25, 48, 64, 63, 52, 46, 21, 18, 20, 20, 20, 20, 24, 20, 20, 21, 17, 16, 20, 19, 17, 20, 20, 20] }, "last_updated": "2026-09-06" }, @@ -365,12 +365,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 27, - "p95": 120, + "p50": 20, + "p95": 83, "min": 17, "max": 173, "n": 32, - "samples": [106, 114, 52, 64, 50, 120, 83, 20, 25, 33, 25, 49, 31, 38, 27, 55, 173, 76, 54, 47, 20, 24, 20, 20, 20, 17, 19, 20, 20, 17, 19, 20] + "samples": [83, 20, 25, 33, 25, 49, 31, 38, 27, 55, 173, 76, 54, 47, 20, 24, 20, 20, 20, 17, 19, 20, 20, 17, 19, 20, 20, 19, 21, 19, 20, 20] }, "last_updated": "2026-09-06" }, @@ -460,12 +460,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 28, - "p95": 267, + "p50": 20, + "p95": 66, "min": 17, "max": 316, "n": 32, - "samples": [135, 87, 47, 74, 136, 267, 50, 20, 20, 32, 29, 62, 28, 35, 26, 59, 316, 66, 36, 52, 21, 21, 20, 20, 20, 17, 23, 20, 20, 19, 20, 20] + "samples": [50, 20, 20, 32, 29, 62, 28, 35, 26, 59, 316, 66, 36, 52, 21, 21, 20, 20, 20, 17, 23, 20, 20, 19, 20, 20, 20, 19, 17, 19, 19, 19] }, "last_updated": "2026-09-06" }, diff --git a/test/scenarios/light/scenario_Effects_composition.json b/test/scenarios/light/scenario_Effects_composition.json index 957f999c..d9ecc176 100644 --- a/test/scenarios/light/scenario_Effects_composition.json +++ b/test/scenarios/light/scenario_Effects_composition.json @@ -106,12 +106,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 366, - "p95": 1253, + "p50": 169, + "p95": 768, "min": 142, - "max": 1335, + "max": 1044, "n": 32, - "samples": [1335, 697, 573, 781, 604, 1253, 646, 253, 263, 426, 343, 1044, 366, 485, 370, 731, 711, 768, 496, 497, 248, 248, 146, 142, 146, 152, 145, 146, 148, 144, 145, 147] + "samples": [646, 253, 263, 426, 343, 1044, 366, 485, 370, 731, 711, 768, 496, 497, 248, 248, 146, 142, 146, 152, 145, 146, 148, 144, 145, 147, 148, 164, 169, 144, 147, 144] }, "last_updated": "2026-09-06" }, diff --git a/test/scenarios/light/scenario_Fields_polar_lut.json b/test/scenarios/light/scenario_Fields_polar_lut.json index b6702f4b..610c6cab 100644 --- a/test/scenarios/light/scenario_Fields_polar_lut.json +++ b/test/scenarios/light/scenario_Fields_polar_lut.json @@ -85,12 +85,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 287, - "p95": 387, + "p50": 290, + "p95": 384, "min": 189, "max": 387, - "n": 18, - "samples": [289, 189, 281, 384, 274, 387, 283, 278, 281, 289, 325, 292, 302, 291, 286, 293, 285, 287] + "n": 24, + "samples": [289, 189, 281, 384, 274, 387, 283, 278, 281, 289, 325, 292, 302, 291, 286, 293, 285, 287, 294, 337, 332, 293, 290, 300] }, "last_updated": "2026-09-06" } @@ -115,12 +115,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 283, - "p95": 313, + "p50": 285, + "p95": 320, "min": 183, - "max": 313, - "n": 18, - "samples": [183, 189, 194, 279, 273, 275, 284, 281, 281, 313, 297, 290, 297, 283, 288, 291, 285, 290] + "max": 340, + "n": 24, + "samples": [183, 189, 194, 279, 273, 275, 284, 281, 281, 313, 297, 290, 297, 283, 288, 291, 285, 290, 293, 340, 320, 284, 287, 285] }, "last_updated": "2026-09-06" } @@ -145,12 +145,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 282, - "p95": 309, + "p50": 284, + "p95": 317, "min": 168, - "max": 309, - "n": 18, - "samples": [168, 180, 177, 279, 274, 274, 282, 281, 282, 288, 289, 289, 303, 284, 286, 289, 284, 309] + "max": 337, + "n": 24, + "samples": [168, 180, 177, 279, 274, 274, 282, 281, 282, 288, 289, 289, 303, 284, 286, 289, 284, 309, 284, 337, 317, 285, 283, 284] }, "last_updated": "2026-09-06" } @@ -175,12 +175,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 282, - "p95": 347, + "p50": 284, + "p95": 339, "min": 168, "max": 347, - "n": 18, - "samples": [168, 175, 179, 278, 274, 273, 284, 277, 282, 285, 286, 286, 301, 281, 287, 290, 288, 347] + "n": 24, + "samples": [168, 175, 179, 278, 274, 273, 284, 277, 282, 285, 286, 286, 301, 281, 287, 290, 288, 347, 283, 339, 306, 284, 293, 285] }, "last_updated": "2026-09-06" } @@ -208,9 +208,9 @@ "p50": 141, "p95": 155, "min": 83, - "max": 155, - "n": 18, - "samples": [83, 86, 88, 138, 137, 137, 142, 140, 138, 144, 141, 144, 147, 141, 144, 143, 143, 155] + "max": 166, + "n": 24, + "samples": [83, 86, 88, 138, 137, 137, 142, 140, 138, 144, 141, 144, 147, 141, 144, 143, 143, 155, 141, 166, 153, 141, 140, 140] }, "last_updated": "2026-09-06" } @@ -235,12 +235,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 421, + "p50": 422, "p95": 503, "min": 250, - "max": 503, - "n": 18, - "samples": [250, 257, 264, 422, 413, 410, 501, 413, 417, 422, 421, 428, 444, 420, 451, 442, 503, 433] + "max": 512, + "n": 24, + "samples": [250, 257, 264, 422, 413, 410, 501, 413, 417, 422, 421, 428, 444, 420, 451, 442, 503, 433, 512, 502, 461, 424, 421, 425] }, "last_updated": "2026-09-06" } @@ -271,12 +271,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 1228, - "p95": 1311, + "p50": 1234, + "p95": 1402, "min": 960, - "max": 1311, - "n": 18, - "samples": [960, 970, 981, 1200, 1187, 1206, 1234, 1239, 1206, 1218, 1228, 1239, 1298, 1269, 1240, 1311, 1232, 1236] + "max": 1892, + "n": 24, + "samples": [960, 970, 981, 1200, 1187, 1206, 1234, 1239, 1206, 1218, 1228, 1239, 1298, 1269, 1240, 1311, 1232, 1236, 1892, 1402, 1341, 1261, 1229, 1250] }, "last_updated": "2026-09-06" } @@ -302,11 +302,11 @@ "desktop-macos": { "tick_us": { "p50": 480, - "p95": 604, + "p95": 590, "min": 460, "max": 604, - "n": 18, - "samples": [560, 561, 561, 479, 460, 590, 474, 479, 476, 472, 473, 480, 506, 482, 604, 488, 475, 481] + "n": 24, + "samples": [560, 561, 561, 479, 460, 590, 474, 479, 476, 472, 473, 480, 506, 482, 604, 488, 475, 481, 491, 538, 530, 477, 475, 477] }, "last_updated": "2026-09-06" } diff --git a/test/scenarios/light/scenario_Fluid_solver.json b/test/scenarios/light/scenario_Fluid_solver.json index 2ad6e07a..16ea02bd 100644 --- a/test/scenarios/light/scenario_Fluid_solver.json +++ b/test/scenarios/light/scenario_Fluid_solver.json @@ -82,8 +82,8 @@ "p95": 73, "min": 29, "max": 73, - "n": 12, - "samples": [30, 30, 30, 31, 30, 31, 29, 31, 73, 30, 29, 29] + "n": 18, + "samples": [30, 30, 30, 31, 30, 31, 29, 31, 73, 30, 29, 29, 30, 33, 32, 29, 29, 29] }, "last_updated": "2026-09-06" } @@ -104,8 +104,8 @@ "p95": 37, "min": 19, "max": 37, - "n": 12, - "samples": [20, 20, 20, 19, 19, 19, 20, 19, 37, 19, 19, 19] + "n": 18, + "samples": [20, 20, 20, 19, 19, 19, 20, 19, 37, 19, 19, 19, 20, 21, 21, 19, 19, 19] }, "last_updated": "2026-09-06" } @@ -126,8 +126,8 @@ "p95": 101, "min": 66, "max": 101, - "n": 12, - "samples": [69, 69, 68, 70, 68, 68, 66, 68, 101, 68, 67, 67] + "n": 18, + "samples": [69, 69, 68, 70, 68, 68, 66, 68, 101, 68, 67, 67, 70, 76, 75, 67, 67, 67] }, "last_updated": "2026-09-06" } @@ -148,8 +148,8 @@ "p95": 37, "min": 29, "max": 37, - "n": 12, - "samples": [30, 31, 30, 30, 29, 29, 29, 29, 37, 29, 29, 29] + "n": 18, + "samples": [30, 31, 30, 30, 29, 29, 29, 29, 37, 29, 29, 29, 30, 33, 33, 29, 29, 29] }, "last_updated": "2026-09-06" } @@ -170,8 +170,8 @@ "p95": 74, "min": 62, "max": 74, - "n": 12, - "samples": [64, 65, 65, 66, 66, 64, 64, 63, 74, 66, 63, 62] + "n": 18, + "samples": [64, 65, 65, 66, 66, 64, 64, 63, 74, 66, 63, 62, 66, 71, 70, 63, 62, 62] }, "last_updated": "2026-09-06" } @@ -187,12 +187,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 133, - "p95": 138, - "min": 128, - "max": 138, - "n": 12, - "samples": [133, 134, 138, 136, 134, 131, 130, 132, 133, 134, 129, 128] + "p50": 132, + "p95": 145, + "min": 127, + "max": 145, + "n": 18, + "samples": [133, 134, 138, 136, 134, 131, 130, 132, 133, 134, 129, 128, 131, 145, 145, 131, 127, 129] }, "last_updated": "2026-09-06" } @@ -210,12 +210,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 133, - "p95": 140, - "min": 130, - "max": 140, - "n": 12, - "samples": [133, 140, 137, 136, 135, 131, 132, 131, 131, 134, 130, 138] + "p50": 132, + "p95": 145, + "min": 129, + "max": 145, + "n": 18, + "samples": [133, 140, 137, 136, 135, 131, 132, 131, 131, 134, 130, 138, 129, 145, 145, 131, 129, 132] }, "last_updated": "2026-09-06" } @@ -232,12 +232,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 134, + "p50": 131, "p95": 147, - "min": 129, + "min": 127, "max": 147, - "n": 12, - "samples": [134, 141, 138, 135, 147, 134, 130, 131, 129, 135, 129, 129] + "n": 18, + "samples": [134, 141, 138, 135, 147, 134, 130, 131, 129, 135, 129, 129, 129, 146, 145, 129, 128, 127] }, "last_updated": "2026-09-06" } @@ -258,8 +258,8 @@ "p95": 40, "min": 35, "max": 40, - "n": 11, - "samples": [39, 38, 36, 40, 36, 35, 36, 35, 37, 35, 35] + "n": 17, + "samples": [39, 38, 36, 40, 36, 35, 36, 35, 37, 35, 35, 35, 40, 40, 35, 35, 35] }, "last_updated": "2026-09-06" } @@ -277,10 +277,10 @@ "tick_us": { "p50": 11, "p95": 12, - "min": 11, + "min": 10, "max": 12, - "n": 11, - "samples": [12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11] + "n": 17, + "samples": [12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 11, 11, 10] }, "last_updated": "2026-09-06" } @@ -296,12 +296,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 222, + "p50": 220, "p95": 249, - "min": 217, + "min": 215, "max": 249, - "n": 11, - "samples": [249, 232, 229, 220, 220, 220, 222, 219, 227, 217, 226] + "n": 17, + "samples": [249, 232, 229, 220, 220, 220, 222, 219, 227, 217, 226, 219, 249, 247, 217, 218, 215] }, "last_updated": "2026-09-06" } @@ -320,10 +320,10 @@ "tick_us": { "p50": 11, "p95": 12, - "min": 11, + "min": 10, "max": 12, - "n": 11, - "samples": [12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11] + "n": 17, + "samples": [12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 12, 12, 11, 11, 11] }, "last_updated": "2026-09-06" } @@ -340,12 +340,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 8, + "p50": 9, "p95": 29, "min": 8, "max": 29, - "n": 12, - "samples": [29, 9, 9, 9, 8, 8, 8, 8, 8, 9, 8, 9] + "n": 18, + "samples": [29, 9, 9, 9, 8, 8, 8, 8, 8, 9, 8, 9, 8, 9, 10, 8, 9, 9] }, "last_updated": "2026-09-06" } @@ -365,8 +365,8 @@ "p95": 8, "min": 6, "max": 8, - "n": 12, - "samples": [7, 7, 7, 7, 6, 7, 6, 7, 8, 8, 7, 7] + "n": 18, + "samples": [7, 7, 7, 7, 6, 7, 6, 7, 8, 8, 7, 7, 6, 8, 7, 6, 7, 7] }, "last_updated": "2026-09-06" } diff --git a/test/scenarios/light/scenario_GridBlacks_blackpixel.json b/test/scenarios/light/scenario_GridBlacks_blackpixel.json index 5aec875e..6d0258b9 100644 --- a/test/scenarios/light/scenario_GridBlacks_blackpixel.json +++ b/test/scenarios/light/scenario_GridBlacks_blackpixel.json @@ -90,12 +90,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 4, + "p50": 2, "p95": 12, "min": 1, "max": 27, "n": 32, - "samples": [5, 7, 2, 2, 5, 9, 8, 6, 7, 27, 12, 6, 3, 11, 4, 5, 7, 7, 5, 5, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1] + "samples": [8, 6, 7, 27, 12, 6, 3, 11, 4, 5, 7, 7, 5, 5, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] }, "last_updated": "2026-09-06" }, @@ -193,12 +193,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 5, + "p50": 2, "p95": 16, "min": 2, "max": 25, "n": 32, - "samples": [7, 10, 3, 3, 7, 14, 10, 8, 10, 15, 16, 8, 5, 25, 5, 5, 10, 10, 7, 7, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2] + "samples": [10, 8, 10, 15, 16, 8, 5, 25, 5, 5, 10, 10, 7, 7, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2] }, "last_updated": "2026-09-06" }, diff --git a/test/scenarios/light/scenario_GridLayout_resize.json b/test/scenarios/light/scenario_GridLayout_resize.json index 59248d53..f3d197ac 100644 --- a/test/scenarios/light/scenario_GridLayout_resize.json +++ b/test/scenarios/light/scenario_GridLayout_resize.json @@ -117,12 +117,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 128, + "p50": 127, "p95": 311, "min": 117, "max": 316, "n": 32, - "samples": [126, 220, 127, 128, 129, 126, 157, 244, 128, 127, 241, 280, 306, 311, 167, 316, 183, 292, 249, 240, 128, 126, 120, 118, 120, 128, 117, 119, 122, 117, 121, 120] + "samples": [157, 244, 128, 127, 241, 280, 306, 311, 167, 316, 183, 292, 249, 240, 128, 126, 120, 118, 120, 128, 117, 119, 122, 117, 121, 120, 124, 125, 126, 119, 189, 124] }, "last_updated": "2026-09-06" }, @@ -299,12 +299,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 68, + "p50": 66, "p95": 145, "min": 59, "max": 161, "n": 32, - "samples": [68, 108, 68, 68, 69, 69, 74, 135, 66, 63, 132, 145, 118, 161, 84, 144, 90, 126, 125, 118, 68, 68, 65, 66, 64, 61, 59, 64, 65, 59, 65, 65] + "samples": [74, 135, 66, 63, 132, 145, 118, 161, 84, 144, 90, 126, 125, 118, 68, 68, 65, 66, 64, 61, 59, 64, 65, 59, 65, 65, 66, 62, 63, 64, 60, 64] }, "last_updated": "2026-09-06" }, @@ -481,12 +481,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 128, + "p50": 126, "p95": 298, "min": 116, "max": 309, "n": 32, - "samples": [129, 204, 127, 127, 129, 128, 149, 309, 129, 125, 247, 283, 243, 298, 166, 249, 182, 209, 247, 240, 126, 127, 120, 123, 121, 123, 116, 120, 122, 119, 121, 120] + "samples": [149, 309, 129, 125, 247, 283, 243, 298, 166, 249, 182, 209, 247, 240, 126, 127, 120, 123, 121, 123, 116, 120, 122, 119, 121, 120, 122, 126, 127, 120, 120, 142] }, "last_updated": "2026-09-06" }, diff --git a/test/scenarios/light/scenario_Layer_base_pipeline.json b/test/scenarios/light/scenario_Layer_base_pipeline.json index afc1ba30..dd486fe4 100644 --- a/test/scenarios/light/scenario_Layer_base_pipeline.json +++ b/test/scenarios/light/scenario_Layer_base_pipeline.json @@ -83,12 +83,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 94, - "p95": 211, + "p50": 71, + "p95": 179, "min": 64, - "max": 245, + "max": 197, "n": 32, - "samples": [199, 211, 145, 245, 127, 205, 143, 73, 68, 131, 86, 123, 94, 122, 107, 179, 178, 197, 123, 125, 71, 65, 72, 70, 69, 66, 64, 66, 66, 64, 71, 70] + "samples": [143, 73, 68, 131, 86, 123, 94, 122, 107, 179, 178, 197, 123, 125, 71, 65, 72, 70, 69, 66, 64, 66, 66, 64, 71, 70, 70, 68, 69, 70, 67, 139] }, "last_updated": "2026-09-06" }, diff --git a/test/scenarios/light/scenario_Layer_memory_1to1.json b/test/scenarios/light/scenario_Layer_memory_1to1.json index fc0ce9c5..2c8f4130 100644 --- a/test/scenarios/light/scenario_Layer_memory_1to1.json +++ b/test/scenarios/light/scenario_Layer_memory_1to1.json @@ -80,12 +80,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 9, + "p50": 5, "p95": 40, "min": 5, "max": 41, "n": 32, - "samples": [32, 21, 6, 11, 19, 12, 18, 11, 11, 10, 40, 14, 7, 10, 7, 9, 41, 27, 10, 11, 5, 5, 5, 5, 5, 5, 6, 5, 5, 5, 5, 5] + "samples": [18, 11, 11, 10, 40, 14, 7, 10, 7, 9, 41, 27, 10, 11, 5, 5, 5, 5, 5, 5, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6] }, "last_updated": "2026-09-06" }, diff --git a/test/scenarios/light/scenario_Layouts_mutation.json b/test/scenarios/light/scenario_Layouts_mutation.json index caccadaa..ca7be306 100644 --- a/test/scenarios/light/scenario_Layouts_mutation.json +++ b/test/scenarios/light/scenario_Layouts_mutation.json @@ -78,12 +78,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 25, - "p95": 79, + "p50": 17, + "p95": 50, "min": 16, - "max": 354, + "max": 61, "n": 32, - "samples": [354, 44, 36, 48, 36, 79, 38, 17, 17, 33, 23, 35, 25, 32, 29, 48, 50, 61, 32, 32, 16, 16, 17, 17, 16, 17, 17, 16, 16, 17, 16, 16] + "samples": [38, 17, 17, 33, 23, 35, 25, 32, 29, 48, 50, 61, 32, 32, 16, 16, 17, 17, 16, 17, 17, 16, 16, 17, 16, 16, 17, 18, 18, 16, 17, 16] }, "last_updated": "2026-09-06" }, @@ -206,12 +206,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 71, - "p95": 180, + "p50": 49, + "p95": 126, "min": 43, - "max": 633, + "max": 126, "n": 32, - "samples": [633, 140, 100, 126, 85, 180, 105, 51, 71, 90, 61, 103, 70, 87, 75, 123, 126, 126, 86, 86, 48, 47, 48, 44, 46, 49, 45, 43, 48, 44, 48, 49] + "samples": [105, 51, 71, 90, 61, 103, 70, 87, 75, 123, 126, 126, 86, 86, 48, 47, 48, 44, 46, 49, 45, 43, 48, 44, 48, 49, 48, 46, 49, 46, 50, 48] }, "last_updated": "2026-09-06" }, @@ -329,12 +329,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 138, - "p95": 381, + "p50": 96, + "p95": 248, "min": 88, - "max": 554, + "max": 248, "n": 32, - "samples": [554, 381, 202, 258, 187, 294, 200, 96, 100, 167, 119, 174, 130, 171, 138, 245, 248, 248, 170, 169, 92, 93, 156, 93, 93, 97, 88, 92, 94, 88, 121, 93] + "samples": [200, 96, 100, 167, 119, 174, 130, 171, 138, 245, 248, 248, 170, 169, 92, 93, 156, 93, 93, 97, 88, 92, 94, 88, 121, 93, 93, 96, 95, 93, 95, 96] }, "last_updated": "2026-09-06" }, @@ -451,12 +451,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 25, - "p95": 68, + "p50": 20, + "p95": 47, "min": 16, - "max": 293, + "max": 48, "n": 32, - "samples": [64, 293, 42, 55, 32, 68, 38, 21, 16, 31, 27, 36, 24, 32, 25, 47, 47, 48, 33, 31, 20, 20, 17, 20, 20, 21, 17, 20, 20, 17, 20, 20] + "samples": [38, 21, 16, 31, 27, 36, 24, 32, 25, 47, 47, 48, 33, 31, 20, 20, 17, 20, 20, 21, 17, 20, 20, 17, 20, 20, 18, 18, 18, 20, 20, 20] }, "last_updated": "2026-09-06" }, diff --git a/test/scenarios/light/scenario_MoonLiveEffect_livescript.json b/test/scenarios/light/scenario_MoonLiveEffect_livescript.json index c99c2359..9d527e71 100644 --- a/test/scenarios/light/scenario_MoonLiveEffect_livescript.json +++ b/test/scenarios/light/scenario_MoonLiveEffect_livescript.json @@ -88,12 +88,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 8, - "p95": 71, + "p50": 6, + "p95": 22, "min": 5, - "max": 93, + "max": 28, "n": 32, - "samples": [5, 93, 14, 71, 13, 12, 12, 22, 11, 15, 8, 12, 9, 14, 28, 18, 10, 10, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 5, 6, 6] + "samples": [12, 22, 11, 15, 8, 12, 9, 14, 28, 18, 10, 10, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 5, 6, 6, 5, 5, 6, 5, 6, 5] }, "last_updated": "2026-09-06" }, @@ -206,12 +206,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 9, - "p95": 25, + "p50": 5, + "p95": 24, "min": 5, "max": 34, "n": 32, - "samples": [8, 20, 9, 25, 12, 21, 14, 34, 13, 18, 9, 12, 9, 16, 24, 17, 11, 10, 5, 5, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 10, 5] + "samples": [14, 34, 13, 18, 9, 12, 9, 16, 24, 17, 11, 10, 5, 5, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 10, 5, 5, 5, 6, 5, 5, 5] }, "last_updated": "2026-09-06" }, @@ -316,12 +316,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 9, + "p50": 5, "p95": 19, "min": 5, "max": 28, "n": 32, - "samples": [6, 18, 11, 15, 13, 12, 19, 18, 15, 19, 9, 10, 9, 17, 28, 17, 11, 10, 5, 5, 5, 5, 5, 5, 5, 5, 6, 5, 5, 6, 15, 5] + "samples": [19, 18, 15, 19, 9, 10, 9, 17, 28, 17, 11, 10, 5, 5, 5, 5, 5, 5, 5, 5, 6, 5, 5, 6, 15, 5, 5, 5, 6, 5, 5, 5] }, "last_updated": "2026-09-06" }, @@ -426,12 +426,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 9, - "p95": 23, + "p50": 5, + "p95": 21, "min": 4, "max": 29, "n": 32, - "samples": [5, 20, 16, 13, 23, 18, 21, 15, 15, 14, 9, 10, 15, 15, 29, 19, 16, 11, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 4] + "samples": [21, 15, 15, 14, 9, 10, 15, 15, 29, 19, 16, 11, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 4, 5, 5, 5, 5, 5, 5] }, "last_updated": "2026-09-06" }, @@ -529,12 +529,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 8, - "p95": 26, + "p50": 5, + "p95": 20, "min": 5, - "max": 60, + "max": 26, "n": 32, - "samples": [5, 24, 14, 60, 12, 17, 11, 20, 12, 14, 8, 11, 12, 14, 26, 20, 11, 13, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 5] + "samples": [11, 20, 12, 14, 8, 11, 12, 14, 26, 20, 11, 13, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 5, 5, 5, 5, 5, 5, 5] }, "last_updated": "2026-09-06" }, @@ -632,12 +632,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 8, - "p95": 27, + "p50": 5, + "p95": 24, "min": 5, - "max": 29, + "max": 26, "n": 32, - "samples": [5, 22, 16, 27, 29, 24, 15, 24, 11, 22, 7, 10, 12, 16, 26, 18, 11, 11, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 5, 5, 8, 5] + "samples": [15, 24, 11, 22, 7, 10, 12, 16, 26, 18, 11, 11, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 5, 5, 8, 5, 5, 5, 6, 5, 5, 5] }, "last_updated": "2026-09-06" }, @@ -739,8 +739,8 @@ "p95": 8, "min": 5, "max": 8, - "n": 5, - "samples": [5, 5, 5, 8, 5] + "n": 11, + "samples": [5, 5, 5, 8, 5, 5, 7, 5, 5, 5, 5] }, "last_updated": "2026-09-06" } @@ -761,8 +761,8 @@ "p95": 6, "min": 5, "max": 6, - "n": 5, - "samples": [5, 5, 5, 6, 5] + "n": 11, + "samples": [5, 5, 5, 6, 5, 5, 6, 6, 5, 5, 5] }, "last_updated": "2026-09-06" } @@ -783,8 +783,8 @@ "p95": 6, "min": 5, "max": 6, - "n": 5, - "samples": [5, 5, 5, 6, 5] + "n": 11, + "samples": [5, 5, 5, 6, 5, 6, 6, 6, 5, 6, 5] }, "last_updated": "2026-09-06" } @@ -799,12 +799,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 7, - "p95": 24, + "p50": 5, + "p95": 21, "min": 5, - "max": 24, + "max": 22, "n": 32, - "samples": [6, 24, 9, 21, 14, 24, 12, 20, 17, 22, 7, 11, 14, 18, 21, 18, 11, 13, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 5] + "samples": [12, 20, 17, 22, 7, 11, 14, 18, 21, 18, 11, 13, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 5, 5, 6, 5, 5, 5, 5] }, "last_updated": "2026-09-06" }, @@ -902,12 +902,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 8, + "p50": 5, "p95": 29, "min": 5, "max": 32, "n": 32, - "samples": [5, 17, 8, 12, 15, 29, 12, 32, 13, 24, 8, 10, 15, 15, 29, 18, 10, 13, 5, 5, 6, 5, 5, 5, 5, 6, 5, 5, 5, 5, 5, 5] + "samples": [12, 32, 13, 24, 8, 10, 15, 15, 29, 18, 10, 13, 5, 5, 6, 5, 5, 5, 5, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5] }, "last_updated": "2026-09-06" }, @@ -1005,12 +1005,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 7, + "p50": 5, "p95": 31, "min": 5, "max": 37, "n": 32, - "samples": [5, 14, 8, 15, 11, 29, 16, 37, 10, 31, 7, 9, 15, 14, 21, 22, 12, 10, 5, 6, 5, 5, 6, 5, 6, 6, 5, 5, 5, 5, 5, 5] + "samples": [16, 37, 10, 31, 7, 9, 15, 14, 21, 22, 12, 10, 5, 6, 5, 5, 6, 5, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5] }, "last_updated": "2026-09-06" }, diff --git a/test/scenarios/light/scenario_MoonLive_pipeline.json b/test/scenarios/light/scenario_MoonLive_pipeline.json index cf695833..b3c5d08a 100644 --- a/test/scenarios/light/scenario_MoonLive_pipeline.json +++ b/test/scenarios/light/scenario_MoonLive_pipeline.json @@ -374,12 +374,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 10, - "p95": 70, + "p50": 5, + "p95": 47, "min": 5, - "max": 185, + "max": 54, "n": 32, - "samples": [185, 26, 70, 5, 5, 46, 54, 25, 10, 25, 19, 20, 13, 30, 7, 12, 47, 17, 14, 11, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 5] + "samples": [54, 25, 10, 25, 19, 20, 13, 30, 7, 12, 47, 17, 14, 11, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 5, 5, 6, 5, 5, 5, 5] }, "last_updated": "2026-09-06" }, @@ -531,12 +531,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 9, - "p95": 97, - "min": 4, - "max": 559, + "p50": 6, + "p95": 21, + "min": 5, + "max": 32, "n": 32, - "samples": [559, 17, 97, 5, 4, 25, 18, 19, 11, 19, 20, 15, 12, 32, 7, 9, 14, 21, 10, 9, 5, 5, 5, 5, 5, 5, 6, 5, 5, 5, 5, 5] + "samples": [18, 19, 11, 19, 20, 15, 12, 32, 7, 9, 14, 21, 10, 9, 5, 5, 5, 5, 5, 5, 6, 5, 5, 5, 5, 5, 5, 6, 6, 5, 5, 5] }, "last_updated": "2026-09-06" }, @@ -682,12 +682,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 8, - "p95": 36, + "p50": 6, + "p95": 20, "min": 5, - "max": 159, + "max": 21, "n": 32, - "samples": [159, 26, 10, 6, 5, 36, 13, 11, 12, 12, 21, 19, 20, 17, 8, 8, 17, 18, 10, 10, 5, 6, 5, 6, 5, 5, 6, 5, 5, 5, 6, 5] + "samples": [13, 11, 12, 12, 21, 19, 20, 17, 8, 8, 17, 18, 10, 10, 5, 6, 5, 6, 5, 5, 6, 5, 5, 5, 6, 5, 6, 5, 5, 5, 6, 8] }, "last_updated": "2026-09-06" }, @@ -984,12 +984,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 8, - "p95": 32, + "p50": 5, + "p95": 24, "min": 5, - "max": 34, + "max": 25, "n": 32, - "samples": [34, 27, 32, 6, 6, 13, 8, 20, 13, 18, 20, 21, 24, 25, 8, 10, 10, 18, 10, 10, 5, 5, 5, 5, 5, 5, 6, 5, 5, 5, 5, 5] + "samples": [8, 20, 13, 18, 20, 21, 24, 25, 8, 10, 10, 18, 10, 10, 5, 5, 5, 5, 5, 5, 6, 5, 5, 5, 5, 5, 5, 5, 6, 5, 5, 5] }, "last_updated": "2026-09-06" }, @@ -1126,12 +1126,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 9, - "p95": 35, + "p50": 5, + "p95": 24, "min": 5, "max": 397, "n": 32, - "samples": [35, 26, 19, 7, 5, 10, 22, 397, 12, 17, 18, 22, 24, 11, 8, 9, 13, 24, 10, 11, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5] + "samples": [22, 397, 12, 17, 18, 22, 24, 11, 8, 9, 13, 24, 10, 11, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 5, 5, 5] }, "last_updated": "2026-09-06" }, diff --git a/test/scenarios/light/scenario_MultiplyModifier_memory_lut.json b/test/scenarios/light/scenario_MultiplyModifier_memory_lut.json index dfa083d2..fafbd037 100644 --- a/test/scenarios/light/scenario_MultiplyModifier_memory_lut.json +++ b/test/scenarios/light/scenario_MultiplyModifier_memory_lut.json @@ -89,12 +89,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 4, - "p95": 132, + "p50": 3, + "p95": 21, "min": 2, "max": 241, "n": 32, - "samples": [15, 12, 3, 3, 9, 132, 241, 7, 8, 18, 17, 13, 4, 19, 4, 5, 21, 14, 6, 6, 3, 3, 3, 2, 3, 3, 3, 2, 2, 3, 3, 3] + "samples": [241, 7, 8, 18, 17, 13, 4, 19, 4, 5, 21, 14, 6, 6, 3, 3, 3, 2, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3] }, "last_updated": "2026-09-06" }, diff --git a/test/scenarios/light/scenario_MultiplyModifier_pipeline.json b/test/scenarios/light/scenario_MultiplyModifier_pipeline.json index 67fc683c..d3d25541 100644 --- a/test/scenarios/light/scenario_MultiplyModifier_pipeline.json +++ b/test/scenarios/light/scenario_MultiplyModifier_pipeline.json @@ -94,7 +94,7 @@ "min": 117, "max": 302, "n": 32, - "samples": [126, 124, 235, 127, 129, 124, 126, 125, 150, 127, 128, 238, 283, 277, 174, 302, 182, 214, 235, 240, 127, 126, 118, 119, 117, 121, 117, 119, 119, 118, 122, 119] + "samples": [126, 125, 150, 127, 128, 238, 283, 277, 174, 302, 182, 214, 235, 240, 127, 126, 118, 119, 117, 121, 117, 119, 119, 118, 122, 119, 121, 127, 129, 119, 121, 119] }, "last_updated": "2026-09-06" }, diff --git a/test/scenarios/light/scenario_Trails_ladder.json b/test/scenarios/light/scenario_Trails_ladder.json index 17001252..a1c85024 100644 --- a/test/scenarios/light/scenario_Trails_ladder.json +++ b/test/scenarios/light/scenario_Trails_ladder.json @@ -90,8 +90,8 @@ "p95": 13, "min": 10, "max": 13, - "n": 12, - "samples": [11, 10, 10, 10, 11, 11, 11, 11, 11, 13, 12, 11] + "n": 18, + "samples": [11, 10, 10, 10, 11, 11, 11, 11, 11, 13, 12, 11, 11, 13, 13, 11, 12, 11] }, "last_updated": "2026-09-06" } @@ -127,8 +127,8 @@ "p95": 57, "min": 40, "max": 57, - "n": 12, - "samples": [57, 40, 42, 41, 45, 45, 45, 45, 45, 47, 46, 46] + "n": 18, + "samples": [57, 40, 42, 41, 45, 45, 45, 45, 45, 47, 46, 46, 49, 50, 53, 45, 44, 46] }, "last_updated": "2026-09-06" } @@ -164,8 +164,8 @@ "p95": 208, "min": 160, "max": 208, - "n": 12, - "samples": [208, 160, 166, 165, 182, 178, 180, 184, 180, 183, 186, 179] + "n": 18, + "samples": [208, 160, 166, 165, 182, 178, 180, 184, 180, 183, 186, 179, 187, 200, 202, 178, 178, 178] }, "last_updated": "2026-09-06" } @@ -204,12 +204,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 351, - "p95": 361, + "p50": 349, + "p95": 396, "min": 313, - "max": 361, - "n": 12, - "samples": [323, 313, 331, 324, 358, 348, 353, 357, 352, 357, 361, 351] + "max": 396, + "n": 18, + "samples": [323, 313, 331, 324, 358, 348, 353, 357, 352, 357, 361, 351, 349, 396, 395, 347, 349, 348] }, "last_updated": "2026-09-06" } @@ -234,12 +234,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 353, + "p50": 355, "p95": 608, "min": 312, "max": 608, - "n": 12, - "samples": [321, 312, 334, 332, 442, 353, 358, 354, 351, 608, 364, 362] + "n": 18, + "samples": [321, 312, 334, 332, 442, 353, 358, 354, 351, 608, 364, 362, 373, 423, 414, 354, 360, 355] }, "last_updated": "2026-09-06" } @@ -265,11 +265,11 @@ "desktop-macos": { "tick_us": { "p50": 351, - "p95": 370, + "p95": 451, "min": 312, - "max": 370, - "n": 12, - "samples": [319, 312, 336, 350, 359, 351, 354, 354, 365, 370, 365, 351] + "max": 451, + "n": 18, + "samples": [319, 312, 336, 350, 359, 351, 354, 354, 365, 370, 365, 351, 348, 451, 413, 350, 350, 349] }, "last_updated": "2026-09-06" } @@ -309,11 +309,11 @@ "desktop-macos": { "tick_us": { "p50": 180, - "p95": 189, + "p95": 250, "min": 164, - "max": 189, - "n": 12, - "samples": [164, 169, 169, 166, 183, 178, 180, 182, 189, 186, 185, 180] + "max": 250, + "n": 18, + "samples": [164, 169, 169, 166, 183, 178, 180, 182, 189, 186, 185, 180, 183, 250, 210, 177, 177, 181] }, "last_updated": "2026-09-06" } diff --git a/test/scenarios/light/scenario_modifier_chain.json b/test/scenarios/light/scenario_modifier_chain.json index 261638e7..c0275ae3 100644 --- a/test/scenarios/light/scenario_modifier_chain.json +++ b/test/scenarios/light/scenario_modifier_chain.json @@ -101,12 +101,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 14, - "p95": 43, + "p50": 10, + "p95": 32, "min": 8, - "max": 86, + "max": 43, "n": 32, - "samples": [36, 86, 20, 23, 20, 28, 31, 8, 9, 16, 14, 17, 12, 18, 15, 24, 32, 43, 17, 16, 8, 8, 8, 8, 8, 10, 9, 8, 9, 8, 12, 10] + "samples": [31, 8, 9, 16, 14, 17, 12, 18, 15, 24, 32, 43, 17, 16, 8, 8, 8, 8, 8, 10, 9, 8, 9, 8, 12, 10, 10, 24, 10, 8, 10, 10] }, "last_updated": "2026-09-06" }, @@ -161,12 +161,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 11, - "p95": 49, + "p50": 9, + "p95": 36, "min": 6, - "max": 86, + "max": 56, "n": 32, - "samples": [86, 49, 16, 23, 18, 36, 36, 7, 7, 14, 10, 21, 11, 15, 13, 22, 23, 26, 14, 14, 7, 7, 6, 7, 7, 9, 7, 6, 9, 7, 7, 9] + "samples": [36, 7, 7, 14, 10, 21, 11, 15, 13, 22, 23, 26, 14, 14, 7, 7, 6, 7, 7, 9, 7, 6, 9, 7, 7, 9, 9, 56, 8, 9, 9, 9] }, "last_updated": "2026-09-06" }, @@ -219,12 +219,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 33, - "p95": 94, + "p50": 26, + "p95": 72, "min": 21, - "max": 143, + "max": 74, "n": 32, - "samples": [94, 143, 50, 59, 59, 83, 74, 27, 23, 48, 30, 65, 33, 48, 41, 63, 72, 69, 43, 46, 26, 22, 24, 22, 22, 28, 21, 21, 24, 21, 27, 24] + "samples": [74, 27, 23, 48, 30, 65, 33, 48, 41, 63, 72, 69, 43, 46, 26, 22, 24, 22, 22, 28, 21, 21, 24, 21, 27, 24, 25, 26, 24, 24, 24, 25] }, "last_updated": "2026-09-06" }, @@ -252,12 +252,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 55, - "p95": 138, + "p50": 47, + "p95": 123, "min": 37, - "max": 473, + "max": 138, "n": 32, - "samples": [116, 473, 98, 116, 90, 127, 123, 47, 47, 72, 52, 88, 55, 77, 73, 112, 110, 138, 77, 83, 47, 47, 43, 43, 44, 41, 42, 40, 44, 37, 39, 44] + "samples": [123, 47, 47, 72, 52, 88, 55, 77, 73, 112, 110, 138, 77, 83, 47, 47, 43, 43, 44, 41, 42, 40, 44, 37, 39, 44, 43, 48, 43, 45, 44, 44] }, "last_updated": "2026-09-06" }, diff --git a/test/scenarios/light/scenario_modifier_swap.json b/test/scenarios/light/scenario_modifier_swap.json index fe3f2c97..7da7562a 100644 --- a/test/scenarios/light/scenario_modifier_swap.json +++ b/test/scenarios/light/scenario_modifier_swap.json @@ -151,12 +151,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 12, - "p95": 87, + "p50": 9, + "p95": 71, "min": 8, "max": 246, "n": 32, - "samples": [37, 87, 20, 22, 44, 57, 26, 9, 8, 17, 11, 33, 12, 17, 49, 25, 246, 71, 16, 35, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8] + "samples": [26, 9, 8, 17, 11, 33, 12, 17, 49, 25, 246, 71, 16, 35, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 12, 9, 9, 10, 8] }, "last_updated": "2026-09-06" }, @@ -295,12 +295,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 33, - "p95": 160, + "p50": 24, + "p95": 87, "min": 20, - "max": 321, + "max": 160, "n": 32, - "samples": [80, 321, 63, 75, 135, 85, 64, 24, 22, 42, 31, 46, 33, 43, 61, 65, 160, 87, 45, 74, 25, 25, 21, 21, 20, 21, 21, 20, 22, 21, 22, 20] + "samples": [64, 24, 22, 42, 31, 46, 33, 43, 61, 65, 160, 87, 45, 74, 25, 25, 21, 21, 20, 21, 21, 20, 22, 21, 22, 20, 21, 31, 24, 24, 24, 20] }, "last_updated": "2026-09-06" }, @@ -439,12 +439,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 12, - "p95": 76, + "p50": 10, + "p95": 49, "min": 8, - "max": 513, + "max": 106, "n": 32, - "samples": [24, 76, 43, 513, 63, 38, 30, 11, 10, 16, 11, 36, 12, 16, 29, 25, 47, 49, 18, 39, 10, 10, 10, 9, 10, 8, 9, 11, 10, 8, 9, 9] + "samples": [30, 11, 10, 16, 11, 36, 12, 16, 29, 25, 47, 49, 18, 39, 10, 10, 10, 9, 10, 8, 9, 11, 10, 8, 9, 9, 8, 106, 9, 10, 10, 10] }, "last_updated": "2026-09-06" }, diff --git a/test/scenarios/light/scenario_perf_full.json b/test/scenarios/light/scenario_perf_full.json index 44902976..8c8d6481 100644 --- a/test/scenarios/light/scenario_perf_full.json +++ b/test/scenarios/light/scenario_perf_full.json @@ -85,12 +85,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 3, - "p95": 11, + "p50": 1, + "p95": 9, "min": 1, - "max": 22, + "max": 9, "n": 32, - "samples": [9, 9, 22, 8, 8, 11, 7, 2, 2, 4, 3, 5, 3, 5, 4, 8, 9, 9, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + "samples": [7, 2, 2, 4, 3, 5, 3, 5, 4, 8, 9, 9, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] }, "last_updated": "2026-09-06" }, @@ -205,12 +205,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 4, - "p95": 15, + "p50": 1, + "p95": 7, "min": 1, - "max": 51, + "max": 14, "n": 32, - "samples": [7, 7, 51, 15, 8, 12, 7, 2, 2, 4, 4, 5, 4, 5, 5, 7, 7, 14, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + "samples": [7, 2, 2, 4, 4, 5, 4, 5, 5, 7, 7, 14, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] }, "last_updated": "2026-09-06" }, @@ -325,12 +325,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 3, - "p95": 12, + "p50": 1, + "p95": 8, "min": 1, - "max": 28, + "max": 12, "n": 32, - "samples": [10, 7, 28, 10, 6, 9, 7, 2, 2, 4, 3, 5, 3, 5, 4, 7, 8, 12, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + "samples": [7, 2, 2, 4, 3, 5, 3, 5, 4, 7, 8, 12, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] }, "last_updated": "2026-09-06" }, @@ -568,12 +568,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 3, - "p95": 9, + "p50": 1, + "p95": 8, "min": 1, "max": 31, "n": 32, - "samples": [7, 8, 9, 6, 6, 7, 7, 2, 2, 4, 3, 7, 3, 5, 4, 7, 8, 31, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + "samples": [7, 2, 2, 4, 3, 7, 3, 5, 4, 7, 8, 31, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] }, "last_updated": "2026-09-06" }, @@ -686,12 +686,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 3, - "p95": 26, + "p50": 2, + "p95": 9, "min": 1, - "max": 70, + "max": 26, "n": 32, - "samples": [7, 10, 70, 8, 6, 16, 7, 2, 2, 4, 3, 6, 3, 5, 4, 7, 26, 9, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + "samples": [7, 2, 2, 4, 3, 6, 3, 5, 4, 7, 26, 9, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1] }, "last_updated": "2026-09-06" }, @@ -815,12 +815,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 3, - "p95": 13, + "p50": 1, + "p95": 8, "min": 1, "max": 13, "n": 32, - "samples": [7, 7, 11, 9, 6, 13, 7, 2, 2, 4, 3, 13, 3, 5, 4, 7, 7, 8, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + "samples": [7, 2, 2, 4, 3, 13, 3, 5, 4, 7, 7, 8, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] }, "last_updated": "2026-09-06" }, @@ -948,12 +948,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 3, - "p95": 9, + "p50": 1, + "p95": 8, "min": 1, "max": 11, "n": 32, - "samples": [7, 7, 9, 7, 7, 8, 7, 2, 2, 4, 3, 7, 3, 5, 4, 7, 11, 8, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + "samples": [7, 2, 2, 4, 3, 7, 3, 5, 4, 7, 11, 8, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] }, "last_updated": "2026-09-06" }, @@ -1055,12 +1055,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 3, - "p95": 13, + "p50": 1, + "p95": 12, "min": 1, "max": 21, "n": 32, - "samples": [7, 8, 8, 7, 6, 13, 7, 2, 2, 4, 3, 6, 3, 5, 4, 7, 12, 21, 5, 6, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + "samples": [7, 2, 2, 4, 3, 6, 3, 5, 4, 7, 12, 21, 5, 6, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] }, "last_updated": "2026-09-06" }, @@ -1168,12 +1168,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 3, - "p95": 11, + "p50": 1, + "p95": 9, "min": 1, - "max": 26, + "max": 11, "n": 32, - "samples": [7, 10, 7, 26, 6, 6, 7, 2, 2, 4, 3, 5, 3, 5, 4, 7, 9, 11, 9, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + "samples": [7, 2, 2, 4, 3, 5, 3, 5, 4, 7, 9, 11, 9, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] }, "last_updated": "2026-09-06" }, @@ -1292,12 +1292,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 15, - "p95": 136, + "p50": 6, + "p95": 35, "min": 4, - "max": 167, + "max": 38, "n": 32, - "samples": [34, 37, 136, 167, 23, 36, 27, 10, 9, 16, 13, 20, 15, 19, 19, 29, 27, 38, 35, 19, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + "samples": [27, 10, 9, 16, 13, 20, 15, 19, 19, 29, 27, 38, 35, 19, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 5, 4, 4, 4] }, "last_updated": "2026-09-06" }, @@ -1416,12 +1416,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 62, - "p95": 255, + "p50": 23, + "p95": 174, "min": 17, - "max": 346, + "max": 255, "n": 32, - "samples": [138, 153, 207, 346, 100, 169, 102, 41, 41, 73, 58, 137, 62, 82, 74, 123, 255, 174, 113, 82, 41, 40, 17, 17, 17, 18, 18, 17, 18, 18, 18, 18] + "samples": [102, 41, 41, 73, 58, 137, 62, 82, 74, 123, 255, 174, 113, 82, 41, 40, 17, 17, 17, 18, 18, 17, 18, 18, 18, 18, 18, 23, 21, 18, 18, 18] }, "last_updated": "2026-09-06" }, @@ -1540,12 +1540,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 276, + "p50": 113, "p95": 1023, "min": 70, "max": 2016, "n": 32, - "samples": [567, 679, 561, 781, 468, 747, 408, 178, 175, 303, 237, 529, 276, 354, 308, 542, 2016, 1023, 414, 368, 174, 173, 71, 70, 70, 74, 74, 71, 70, 73, 75, 72] + "samples": [408, 178, 175, 303, 237, 529, 276, 354, 308, 542, 2016, 1023, 414, 368, 174, 173, 71, 70, 70, 74, 74, 71, 70, 73, 75, 72, 74, 113, 86, 71, 71, 70] }, "last_updated": "2026-09-06" }, @@ -1672,12 +1672,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 7, - "p95": 18, + "p50": 4, + "p95": 15, "min": 4, - "max": 28, + "max": 16, "n": 32, - "samples": [14, 18, 13, 28, 10, 14, 16, 4, 4, 7, 6, 15, 7, 9, 8, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + "samples": [16, 4, 4, 7, 6, 15, 7, 9, 8, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4] }, "last_updated": "2026-09-06" }, @@ -1796,12 +1796,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 27, - "p95": 87, + "p50": 17, + "p95": 72, "min": 15, - "max": 108, + "max": 92, "n": 32, - "samples": [86, 60, 58, 87, 47, 108, 44, 18, 17, 30, 23, 39, 27, 35, 30, 59, 72, 57, 35, 37, 17, 17, 15, 15, 15, 16, 16, 16, 16, 16, 17, 15] + "samples": [44, 18, 17, 30, 23, 39, 27, 35, 30, 59, 72, 57, 35, 37, 17, 17, 15, 15, 15, 16, 16, 16, 16, 16, 17, 15, 16, 92, 19, 16, 16, 16] }, "last_updated": "2026-09-06" }, @@ -1920,12 +1920,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 107, - "p95": 398, + "p50": 69, + "p95": 360, "min": 61, - "max": 662, + "max": 574, "n": 32, - "samples": [357, 261, 226, 662, 172, 398, 203, 71, 71, 122, 92, 191, 107, 140, 120, 298, 360, 297, 144, 165, 69, 69, 62, 62, 61, 66, 65, 64, 63, 64, 64, 63] + "samples": [203, 71, 71, 122, 92, 191, 107, 140, 120, 298, 360, 297, 144, 165, 69, 69, 62, 62, 61, 66, 65, 64, 63, 64, 64, 63, 67, 574, 74, 64, 62, 63] }, "last_updated": "2026-09-06" }, @@ -2044,12 +2044,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 429, - "p95": 2011, + "p50": 279, + "p95": 1114, "min": 247, "max": 12932, "n": 32, - "samples": [1418, 895, 1286, 2011, 693, 989, 717, 285, 279, 489, 371, 879, 429, 558, 499, 1114, 12932, 1097, 562, 589, 278, 279, 252, 249, 247, 256, 265, 251, 255, 259, 267, 257] + "samples": [717, 285, 279, 489, 371, 879, 429, 558, 499, 1114, 12932, 1097, 562, 589, 278, 279, 252, 249, 247, 256, 265, 251, 255, 259, 267, 257, 264, 402, 298, 250, 259, 252] }, "last_updated": "2026-09-06" }, @@ -2203,12 +2203,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 2, + "p50": 1, "p95": 8, "min": 1, "max": 13, "n": 32, - "samples": [3, 4, 3, 3, 3, 3, 3, 1, 1, 2, 1, 8, 2, 2, 2, 5, 13, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + "samples": [3, 1, 1, 2, 1, 8, 2, 2, 2, 5, 13, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1] }, "last_updated": "2026-09-06" }, @@ -2327,12 +2327,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 7, - "p95": 20, + "p50": 4, + "p95": 19, "min": 4, - "max": 23, + "max": 20, "n": 32, - "samples": [23, 14, 13, 13, 18, 13, 11, 5, 4, 8, 6, 20, 7, 9, 7, 19, 18, 13, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + "samples": [11, 5, 4, 8, 6, 20, 7, 9, 7, 19, 18, 13, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 5, 4, 4, 4] }, "last_updated": "2026-09-06" }, @@ -2451,12 +2451,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 27, + "p50": 18, "p95": 74, "min": 15, "max": 113, "n": 32, - "samples": [62, 54, 51, 68, 49, 56, 41, 19, 18, 31, 24, 65, 27, 35, 30, 74, 113, 52, 35, 35, 18, 17, 16, 15, 15, 16, 16, 15, 16, 16, 16, 16] + "samples": [41, 19, 18, 31, 24, 65, 27, 35, 30, 74, 113, 52, 35, 35, 18, 17, 16, 15, 15, 16, 16, 15, 16, 16, 16, 16, 16, 27, 18, 15, 15, 15] }, "last_updated": "2026-09-06" }, @@ -2575,12 +2575,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 109, - "p95": 570, + "p50": 70, + "p95": 370, "min": 62, "max": 574, "n": 32, - "samples": [570, 221, 206, 245, 168, 235, 164, 74, 75, 178, 92, 245, 109, 139, 120, 370, 574, 268, 151, 141, 70, 70, 63, 63, 62, 66, 66, 63, 64, 65, 65, 63] + "samples": [164, 74, 75, 178, 92, 245, 109, 139, 120, 370, 574, 268, 151, 141, 70, 70, 63, 63, 62, 66, 66, 63, 64, 65, 65, 63, 67, 103, 74, 63, 63, 63] }, "last_updated": "2026-09-06" }, diff --git a/test/scenarios/light/scenario_perf_light.json b/test/scenarios/light/scenario_perf_light.json index b4a1f64f..30cd3289 100644 --- a/test/scenarios/light/scenario_perf_light.json +++ b/test/scenarios/light/scenario_perf_light.json @@ -101,12 +101,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 3, - "p95": 10, + "p50": 2, + "p95": 9, "min": 1, "max": 10, "n": 32, - "samples": [7, 8, 7, 8, 5, 10, 5, 2, 2, 4, 3, 9, 3, 5, 4, 7, 7, 10, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + "samples": [5, 2, 2, 4, 3, 9, 3, 5, 4, 7, 7, 10, 5, 5, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1] }, "last_updated": "2026-09-06" }, @@ -449,12 +449,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 2, + "p50": 1, "p95": 4, "min": 1, "max": 4, "n": 32, - "samples": [3, 3, 3, 4, 3, 3, 3, 1, 1, 2, 1, 3, 2, 2, 2, 4, 4, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + "samples": [3, 1, 1, 2, 1, 3, 2, 2, 2, 4, 4, 4, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1] }, "last_updated": "2026-09-06" }, @@ -573,12 +573,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 7, - "p95": 23, + "p50": 4, + "p95": 14, "min": 4, "max": 49, "n": 32, - "samples": [23, 16, 11, 13, 11, 19, 10, 4, 4, 7, 6, 10, 7, 9, 7, 14, 49, 14, 9, 10, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + "samples": [10, 4, 4, 7, 6, 10, 7, 9, 7, 14, 49, 14, 9, 10, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 4, 4, 4, 4] }, "last_updated": "2026-09-06" }, @@ -697,12 +697,12 @@ "observed": { "desktop-macos": { "tick_us": { - "p50": 27, - "p95": 76, + "p50": 17, + "p95": 61, "min": 15, "max": 78, "n": 32, - "samples": [51, 76, 42, 64, 42, 58, 41, 18, 17, 30, 23, 61, 27, 35, 30, 52, 78, 54, 36, 35, 17, 17, 15, 15, 15, 16, 16, 15, 15, 17, 20, 16] + "samples": [41, 18, 17, 30, 23, 61, 27, 35, 30, 52, 78, 54, 36, 35, 17, 17, 15, 15, 15, 16, 16, 15, 15, 17, 20, 16, 16, 24, 18, 15, 16, 15] }, "last_updated": "2026-09-06" }, diff --git a/test/scenarios/light/scenario_peripheral_grid_sweep.json b/test/scenarios/light/scenario_peripheral_grid_sweep.json index 3006ed11..efac865c 100644 --- a/test/scenarios/light/scenario_peripheral_grid_sweep.json +++ b/test/scenarios/light/scenario_peripheral_grid_sweep.json @@ -173,12 +173,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 7, + "p50": 4, "p95": 14, "min": 4, - "max": 20, + "max": 14, "n": 32, - "samples": [13, 12, 13, 20, 10, 13, 10, 4, 4, 7, 6, 11, 7, 9, 8, 13, 14, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 4] + "samples": [10, 4, 4, 7, 6, 11, 7, 9, 8, 13, 14, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 4, 4, 6, 5, 4, 4, 4] }, "last_updated": "2026-09-06" }, @@ -300,12 +300,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 31, + "p50": 18, "p95": 84, "min": 15, "max": 88, "n": 32, - "samples": [64, 74, 48, 48, 41, 52, 41, 18, 18, 31, 23, 59, 27, 36, 31, 56, 88, 55, 36, 35, 17, 17, 15, 15, 15, 18, 17, 16, 16, 16, 84, 17] + "samples": [41, 18, 18, 31, 23, 59, 27, 36, 31, 56, 88, 55, 36, 35, 17, 17, 15, 15, 15, 18, 17, 16, 16, 16, 84, 17, 16, 37, 19, 16, 16, 16] }, "last_updated": "2026-09-06" }, @@ -427,12 +427,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 123, - "p95": 296, + "p50": 71, + "p95": 241, "min": 62, - "max": 298, + "max": 296, "n": 32, - "samples": [241, 298, 210, 217, 164, 223, 165, 71, 71, 122, 92, 230, 108, 141, 123, 211, 241, 219, 147, 144, 69, 69, 63, 63, 62, 151, 65, 63, 63, 66, 296, 66] + "samples": [165, 71, 71, 122, 92, 230, 108, 141, 123, 211, 241, 219, 147, 144, 69, 69, 63, 63, 62, 151, 65, 63, 63, 66, 296, 66, 64, 103, 74, 65, 63, 63] }, "last_updated": "2026-09-06" }, @@ -554,12 +554,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 485, - "p95": 1394, + "p50": 287, + "p95": 938, "min": 247, - "max": 1401, + "max": 1089, "n": 32, - "samples": [1394, 1401, 690, 1207, 666, 947, 667, 283, 287, 482, 369, 938, 460, 580, 485, 881, 908, 1089, 581, 575, 277, 278, 251, 247, 250, 590, 264, 252, 255, 260, 872, 259] + "samples": [667, 283, 287, 482, 369, 938, 460, 580, 485, 881, 908, 1089, 581, 575, 277, 278, 251, 247, 250, 590, 264, 252, 255, 260, 872, 259, 272, 813, 298, 254, 251, 251] }, "last_updated": "2026-09-06" }, @@ -702,12 +702,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 7, - "p95": 24, + "p50": 4, + "p95": 16, "min": 4, - "max": 35, + "max": 24, "n": 32, - "samples": [17, 35, 10, 16, 10, 19, 12, 4, 4, 8, 6, 10, 7, 9, 11, 24, 14, 14, 11, 9, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 7, 4] + "samples": [12, 4, 4, 8, 6, 10, 7, 9, 11, 24, 14, 14, 11, 9, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 7, 4, 4, 16, 5, 4, 4, 4] }, "last_updated": "2026-09-06" }, @@ -829,12 +829,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 27, - "p95": 98, + "p50": 18, + "p95": 61, "min": 15, "max": 121, "n": 32, - "samples": [72, 65, 41, 98, 42, 70, 48, 18, 18, 30, 23, 47, 27, 36, 33, 121, 55, 56, 36, 35, 17, 17, 15, 16, 16, 17, 16, 15, 15, 16, 22, 16] + "samples": [48, 18, 18, 30, 23, 47, 27, 36, 33, 121, 55, 56, 36, 35, 17, 17, 15, 16, 16, 17, 16, 15, 15, 16, 22, 16, 16, 61, 18, 15, 16, 15] }, "last_updated": "2026-09-06" }, @@ -956,12 +956,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 111, - "p95": 315, + "p50": 71, + "p95": 228, "min": 61, - "max": 331, + "max": 315, "n": 32, - "samples": [241, 331, 163, 290, 166, 207, 186, 71, 73, 121, 92, 173, 111, 185, 127, 315, 228, 206, 142, 142, 70, 69, 63, 61, 65, 68, 68, 62, 64, 64, 83, 64] + "samples": [186, 71, 73, 121, 92, 173, 111, 185, 127, 315, 228, 206, 142, 142, 70, 69, 63, 61, 65, 68, 68, 62, 64, 64, 83, 64, 63, 125, 74, 62, 63, 64] }, "last_updated": "2026-09-06" }, @@ -1083,12 +1083,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 430, - "p95": 1281, + "p50": 308, + "p95": 881, "min": 249, - "max": 1396, + "max": 895, "n": 32, - "samples": [944, 1281, 626, 1125, 661, 1396, 739, 286, 285, 481, 369, 640, 430, 749, 509, 863, 881, 895, 560, 564, 279, 279, 253, 249, 310, 316, 263, 254, 254, 259, 308, 260] + "samples": [739, 286, 285, 481, 369, 640, 430, 749, 509, 863, 881, 895, 560, 564, 279, 279, 253, 249, 310, 316, 263, 254, 254, 259, 308, 260, 253, 643, 309, 254, 255, 252] }, "last_updated": "2026-09-06" }, @@ -1231,12 +1231,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 7, - "p95": 18, + "p50": 4, + "p95": 14, "min": 4, - "max": 53, + "max": 15, "n": 32, - "samples": [15, 13, 9, 18, 10, 53, 10, 4, 4, 8, 6, 9, 7, 9, 8, 13, 15, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + "samples": [10, 4, 4, 8, 6, 9, 7, 9, 8, 13, 15, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4] }, "last_updated": "2026-09-06" }, @@ -1358,12 +1358,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 27, - "p95": 74, + "p50": 17, + "p95": 53, "min": 15, - "max": 138, + "max": 55, "n": 32, - "samples": [51, 59, 35, 74, 41, 138, 41, 18, 18, 30, 23, 35, 27, 35, 31, 53, 53, 55, 36, 35, 17, 17, 16, 15, 15, 16, 16, 16, 15, 16, 16, 16] + "samples": [41, 18, 18, 30, 23, 35, 27, 35, 31, 53, 53, 55, 36, 35, 17, 17, 16, 15, 15, 16, 16, 16, 15, 16, 16, 16, 17, 27, 18, 16, 15, 15] }, "last_updated": "2026-09-06" }, @@ -1485,12 +1485,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 107, - "p95": 275, + "p50": 71, + "p95": 294, "min": 62, - "max": 294, + "max": 588, "n": 32, - "samples": [225, 217, 148, 275, 165, 265, 294, 72, 71, 120, 92, 152, 107, 141, 123, 209, 232, 222, 140, 140, 69, 70, 62, 62, 62, 67, 66, 64, 63, 64, 86, 64] + "samples": [294, 72, 71, 120, 92, 152, 107, 141, 123, 209, 232, 222, 140, 140, 69, 70, 62, 62, 62, 67, 66, 64, 63, 64, 86, 64, 67, 96, 588, 63, 64, 64] }, "last_updated": "2026-09-06" }, @@ -1612,12 +1612,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 428, - "p95": 995, + "p50": 286, + "p95": 918, "min": 247, - "max": 1188, + "max": 938, "n": 32, - "samples": [1188, 914, 558, 883, 660, 995, 918, 289, 286, 436, 368, 781, 428, 570, 439, 852, 834, 938, 564, 561, 278, 274, 252, 247, 251, 277, 262, 251, 254, 252, 311, 255] + "samples": [918, 289, 286, 436, 368, 781, 428, 570, 439, 852, 834, 938, 564, 561, 278, 274, 252, 247, 251, 277, 262, 251, 254, 252, 311, 255, 260, 384, 359, 252, 252, 251] }, "last_updated": "2026-09-06" }, @@ -1760,12 +1760,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 7, - "p95": 14, + "p50": 4, + "p95": 13, "min": 4, - "max": 20, + "max": 14, "n": 32, - "samples": [14, 14, 11, 20, 10, 14, 13, 4, 4, 7, 6, 11, 7, 9, 7, 13, 13, 14, 9, 10, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + "samples": [13, 4, 4, 7, 6, 11, 7, 9, 7, 13, 13, 14, 9, 10, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 5, 4, 4, 4] }, "last_updated": "2026-09-06" }, @@ -1887,12 +1887,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 27, - "p95": 64, + "p50": 18, + "p95": 52, "min": 15, - "max": 144, + "max": 52, "n": 32, - "samples": [144, 55, 41, 50, 42, 64, 52, 18, 18, 27, 23, 47, 27, 35, 28, 52, 51, 52, 35, 36, 18, 17, 16, 15, 15, 17, 16, 16, 15, 16, 17, 15] + "samples": [52, 18, 18, 27, 23, 47, 27, 35, 28, 52, 51, 52, 35, 36, 18, 17, 16, 15, 15, 17, 16, 16, 15, 16, 17, 15, 15, 25, 21, 15, 15, 15] }, "last_updated": "2026-09-06" }, @@ -2014,12 +2014,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 107, - "p95": 321, + "p50": 69, + "p95": 208, "min": 61, - "max": 447, + "max": 243, "n": 32, - "samples": [447, 211, 153, 321, 165, 228, 207, 76, 71, 110, 92, 243, 107, 140, 109, 206, 203, 208, 141, 144, 69, 68, 62, 62, 61, 64, 65, 63, 64, 63, 69, 64] + "samples": [207, 76, 71, 110, 92, 243, 107, 140, 109, 206, 203, 208, 141, 144, 69, 68, 62, 62, 61, 64, 65, 63, 64, 63, 69, 64, 62, 117, 87, 64, 63, 63] }, "last_updated": "2026-09-06" }, @@ -2141,12 +2141,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 429, - "p95": 1612, + "p50": 281, + "p95": 874, "min": 246, - "max": 1685, + "max": 919, "n": 32, - "samples": [1685, 886, 594, 1612, 850, 899, 784, 287, 285, 484, 368, 874, 429, 568, 437, 919, 811, 847, 581, 606, 279, 281, 251, 248, 246, 258, 271, 249, 255, 253, 276, 251] + "samples": [784, 287, 285, 484, 368, 874, 429, 568, 437, 919, 811, 847, 581, 606, 279, 281, 251, 248, 246, 258, 271, 249, 255, 253, 276, 251, 253, 385, 363, 252, 251, 250] }, "last_updated": "2026-09-06" }, diff --git a/test/scenarios/light/scenario_peripheral_switch.json b/test/scenarios/light/scenario_peripheral_switch.json index 2ec622d8..4db58d05 100644 --- a/test/scenarios/light/scenario_peripheral_switch.json +++ b/test/scenarios/light/scenario_peripheral_switch.json @@ -172,12 +172,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 7, + "p50": 4, "p95": 16, "min": 4, "max": 17, "n": 32, - "samples": [13, 14, 11, 14, 10, 14, 16, 4, 4, 8, 6, 13, 9, 9, 7, 14, 13, 17, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + "samples": [16, 4, 4, 8, 6, 13, 9, 9, 7, 14, 13, 17, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 5, 4, 4, 4] }, "last_updated": "2026-09-06" }, @@ -293,12 +293,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 7, + "p50": 4, "p95": 16, "min": 4, - "max": 29, + "max": 19, "n": 32, - "samples": [29, 16, 10, 14, 15, 14, 14, 4, 4, 8, 6, 11, 7, 10, 7, 13, 13, 16, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + "samples": [14, 4, 4, 8, 6, 11, 7, 10, 7, 13, 13, 16, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 19, 4, 4, 4] }, "last_updated": "2026-09-06" }, @@ -414,12 +414,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 7, - "p95": 17, + "p50": 4, + "p95": 14, "min": 4, - "max": 22, + "max": 15, "n": 32, - "samples": [22, 14, 10, 13, 14, 17, 15, 4, 4, 8, 6, 11, 7, 9, 7, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + "samples": [15, 4, 4, 8, 6, 11, 7, 9, 7, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 4] }, "last_updated": "2026-09-06" }, @@ -534,12 +534,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 7, - "p95": 17, + "p50": 4, + "p95": 14, "min": 4, "max": 17, "n": 32, - "samples": [13, 14, 10, 14, 17, 16, 17, 4, 4, 8, 6, 9, 9, 9, 7, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4] + "samples": [17, 4, 4, 8, 6, 9, 9, 9, 7, 14, 13, 14, 9, 9, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 4] }, "last_updated": "2026-09-06" }, @@ -655,12 +655,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 7, - "p95": 17, + "p50": 4, + "p95": 15, "min": 4, - "max": 65, + "max": 17, "n": 32, - "samples": [65, 15, 10, 17, 13, 13, 17, 4, 4, 8, 6, 10, 10, 9, 7, 13, 13, 15, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + "samples": [17, 4, 4, 8, 6, 10, 10, 9, 7, 13, 13, 15, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 4] }, "last_updated": "2026-09-06" }, @@ -792,12 +792,12 @@ }, "desktop-macos": { "tick_us": { - "p50": 7, - "p95": 18, + "p50": 4, + "p95": 16, "min": 4, - "max": 24, + "max": 18, "n": 32, - "samples": [24, 13, 10, 13, 13, 14, 16, 4, 4, 8, 6, 11, 9, 9, 7, 13, 14, 18, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + "samples": [16, 4, 4, 8, 6, 11, 9, 9, 7, 13, 14, 18, 9, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 4] }, "last_updated": "2026-09-06" }, diff --git a/test/unit/light/unit_AudioBands.cpp b/test/unit/light/unit_AudioBands.cpp index b8038015..169fa679 100644 --- a/test/unit/light/unit_AudioBands.cpp +++ b/test/unit/light/unit_AudioBands.cpp @@ -440,3 +440,45 @@ TEST_CASE("a room below the floor reads silent, however hard the learner is aske c.process(music, out, 23, 60.0f, 40.0f, 20, 40.0f, true, 60.0f); for (uint8_t b = 0; b < 16; b++) CHECK(out[b] > 0.0f); } + +// Flux is a difference against the PREVIOUS block and the onset detector carries a running mean, +// so a source that stops and starts must not measure its first new block against the last block of +// the old one: that reports a hit nobody played. AudioService::deinit clears both with the frame. +TEST_CASE("a restarted source reports no onset from the block that preceded it") { + // The history the old source left behind: a loud spectrum. + uint8_t prev[16], now[16]; + for (uint8_t b = 0; b < 16; b++) { prev[b] = 200; now[b] = 200; } + CHECK(mm::spectralFlux(prev, now) == 0); // steady: no flux, by definition + + // Cleared history (what deinit leaves) reads the same block as a full-scale RISE, which is why + // deinit also publishes a silent frame: the first block after a restart is what that silences. + // What clearing buys is a DEFINED reference for the block after it, rather than a spectrum the + // old source left behind. + uint8_t cleared[16] = {}; + const uint16_t againstStale = mm::spectralFlux(prev, now); + const uint16_t againstCleared = mm::spectralFlux(cleared, now); + CHECK(againstStale == 0); + CHECK(againstCleared > againstStale); // which is why the frame is published silent too +} + +// The gate that ships, exercised through magnitudesToBands rather than process() directly: every +// conditioner test above hands `process` a hand-picked gateDb, so none covers the value the caller +// actually passes. It sits AT the display window's floor, deliberately: a band reports its bins' +// PEAK while the level path reports an RMS, so the level's 20 dB silence margin is a far larger +// concession here. Measured on a Dig-Next-2, a 20 dB margin took a quiet room from flux 1-2 to +// 49-102 with onsets firing. +TEST_CASE("a room below the display window shows nothing on the spectrum") { + const size_t nMag = 256; + const uint32_t rate = 22050; + float room[nMag]; + // 100 dB: below the window floor (110 dB at `floor` 100), above where a 20 dB margin would sit. + for (size_t i = 0; i < nMag; i++) room[i] = 100000.0f; + + mm::BandConditioner cond; + uint8_t bands[16]; uint16_t peakHz = 0, peakMag = 0; + for (int i = 0; i < 20; i++) + mm::magnitudesToBands(room, nMag, rate, /*noiseFloor*/ 100, /*gain*/ 128, + bands, peakHz, peakMag, &cond, 23, 4, 24.0f, true); + + for (uint8_t b = 0; b < 16; b++) CHECK(bands[b] == 0); +} diff --git a/test/unit/light/unit_MultiPinLedDriver.cpp b/test/unit/light/unit_MultiPinLedDriver.cpp index 6c64a275..f3216209 100644 --- a/test/unit/light/unit_MultiPinLedDriver.cpp +++ b/test/unit/light/unit_MultiPinLedDriver.cpp @@ -256,6 +256,73 @@ TEST_CASE("MultiPinLedDriver drives any pin count; the bus rounds up around it") // (0 pins → idles: covered by "MultiPinLedDriver with the empty default pins idles cleanly" above.) } +// WR and DC are lines the LEDs never read, so what an UNSET one costs is the chip's business: +// the classic ESP32 sinks it onto an input-only pad (no GPIO spent), the LCD_CAM chips need a real +// pad because an invalid number reaches the ROM's matrix routine. The desktop emulates the LCD_CAM +// backend, so here an unset WR idles the driver with a status that names the chip's rule. +TEST_CASE("MultiPinLedDriver idles with a named status when DC is unset, on every chip") { + mm::I80Peripheral peripheral; + mm::ParallelLedDriver d; + mm::Buffer src; + mm::Correction corr; + d.setPeripheralForTest(&peripheral); + REQUIRE(src.allocate(64, 3)); + mm::test::rebuildFromPreset(corr, 255, mm::test::PresetOrder::GRB); + d.defineControls(); + mm::test::setControlValue(d, "clockPin", 20); + mm::test::setControlValue(d, "dcPin", -1); + std::strcpy(d.pins, "1,2,4"); + wire(d, peripheral, src, corr, 64); + CHECK(d.severity() == mm::MoonModule::Severity::Error); + // DC is toggled in software every frame (esp_lcd calls gpio_set_level on it), which a pad with + // no output driver cannot do: the call fails, logs, and the log aborts. So unlike WR it can + // never be sunk, and the driver says why. + CHECK(std::strstr(d.status() ? d.status() : "", "needs a real GPIO") != nullptr); +} + +TEST_CASE("MultiPinLedDriver on an LCD_CAM chip idles with a named status when WR is unset") { + mm::I80Peripheral peripheral; + mm::ParallelLedDriver d; + mm::Buffer src; + mm::Correction corr; + d.setPeripheralForTest(&peripheral); + REQUIRE(src.allocate(64, 3)); + mm::test::rebuildFromPreset(corr, 255, mm::test::PresetOrder::GRB); + d.defineControls(); + mm::test::setControlValue(d, "clockPin", -1); + mm::test::setControlValue(d, "dcPin", 21); + std::strcpy(d.pins, "1,2,4"); + wire(d, peripheral, src, corr, 64); + CHECK(d.severity() == mm::MoonModule::Severity::Error); + CHECK(std::strstr(d.status() ? d.status() : "", "needs a write-strobe GPIO") != nullptr); +} + +// A pin the PACKAGE lacks fails the same silent way a flash pin does: the ESP32-PICO-V3-02 has no +// GPIO 18/23, and routing the i80 clock there wedged its flash cache with no panic. The platform +// knows the package; the driver must refuse by name before the peripheral touches the pad. +TEST_CASE("MultiPinLedDriver refuses a WR/DC pin this chip package does not have") { + mm::platform::GpioCapability absent; + absent.validGpio = false; + mm::platform::setTestGpioCapability(20, absent); + { + mm::I80Peripheral peripheral; + mm::ParallelLedDriver d; + mm::Buffer src; + mm::Correction corr; + d.setPeripheralForTest(&peripheral); + REQUIRE(src.allocate(64, 3)); + mm::test::rebuildFromPreset(corr, 255, mm::test::PresetOrder::GRB); + d.defineControls(); + mm::test::setControlValue(d, "clockPin", 20); + mm::test::setControlValue(d, "dcPin", 21); + std::strcpy(d.pins, "1,2,4"); + wire(d, peripheral, src, corr, 64); + CHECK(d.severity() == mm::MoonModule::Severity::Error); + CHECK(std::strstr(d.status() ? d.status() : "", "does not exist on this chip package") != nullptr); + } + mm::platform::clearTestGpioCapability(); +} + // A data lane on the same GPIO as the WR (clockPin) or DC pin is a WARNING, not a // blocker: that lane carries the clock/DC waveform instead of pixel data, but on a // board that wires all 8/16 lanes yet drives fewer strands, parking WR/DC on an

  • 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�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