From ff8e725b3583cc97542c9f2b13e36248c0afa630 Mon Sep 17 00:00:00 2001 From: Linus Beine Date: Fri, 28 Nov 2025 12:12:50 +0100 Subject: [PATCH] imported from "final" folder --- .pio/build/esp01_1m/idedata.json | 1 + .pio/build/project.checksum | 1 + .pio/libdeps/esp01_1m/ArtnetWifi/.gitignore | 23 + .pio/libdeps/esp01_1m/ArtnetWifi/.piopm | 1 + .pio/libdeps/esp01_1m/ArtnetWifi/LICENSE | 25 + .pio/libdeps/esp01_1m/ArtnetWifi/README.md | 91 + .../ArtnetWifiDebug/ArtnetWifiDebug.ino | 95 + .../ArtnetWifiDebug2/ArtnetWifiDebug2.ino | 96 + .../ArtnetWifiFastLED/ArtnetWifiFastLED.ino | 165 + .../ArtnetWifiNeoPixel/ArtnetWifiNeoPixel.ino | 141 + .../ArtnetWifiTransmit/ArtnetWifiTransmit.ino | 75 + .pio/libdeps/esp01_1m/ArtnetWifi/keywords.txt | 21 + .../esp01_1m/ArtnetWifi/library.properties | 9 + .../esp01_1m/ArtnetWifi/src/ArtnetWifi.cpp | 169 + .../esp01_1m/ArtnetWifi/src/ArtnetWifi.h | 173 + .pio/libdeps/esp01_1m/FastLED/.piopm | 1 + .../esp01_1m/FastLED/ADVANCED_DEVELOPMENT.md | 66 + .pio/libdeps/esp01_1m/FastLED/APA102.md | 73 + .../BACKGROUND_AGENT_TESTING_REQUIREMENTS.md | 168 + .pio/libdeps/esp01_1m/FastLED/CLAUDE.md | 47 + .pio/libdeps/esp01_1m/FastLED/CMakeLists.txt | 26 + .pio/libdeps/esp01_1m/FastLED/CONTRIBUTING.md | 243 + .pio/libdeps/esp01_1m/FastLED/CORKSCREW.md | 203 + .pio/libdeps/esp01_1m/FastLED/FEATURE.md | 368 + .../esp01_1m/FastLED/FEATURE_PACKAGE_JSON.md | 494 + .../esp01_1m/FastLED/FEATURE_RMT5_POOL.md | 1172 +++ .pio/libdeps/esp01_1m/FastLED/GEMINI.md | 1739 ++++ .pio/libdeps/esp01_1m/FastLED/LAYOUT.md | 414 + .pio/libdeps/esp01_1m/FastLED/LICENSE | 20 + .pio/libdeps/esp01_1m/FastLED/PORTING.md | 56 + .pio/libdeps/esp01_1m/FastLED/QWEN.md | 1744 ++++ .pio/libdeps/esp01_1m/FastLED/README.md | 510 + .pio/libdeps/esp01_1m/FastLED/RELEASE.md | 39 + .pio/libdeps/esp01_1m/FastLED/RMT.md | 806 ++ .../esp01_1m/FastLED/TESTCASE_INSTRUCTIONS.md | 261 + .pio/libdeps/esp01_1m/FastLED/TODO.md | 47 + .pio/libdeps/esp01_1m/FastLED/VIDEO.md | 352 + .pio/libdeps/esp01_1m/FastLED/apa102fix.md | 57 + .pio/libdeps/esp01_1m/FastLED/clean | 47 + .../esp01_1m/FastLED/code_of_conduct.md | 134 + .pio/libdeps/esp01_1m/FastLED/component.mk | 2 + .../libdeps/esp01_1m/FastLED/cool_projects.md | 34 + .pio/libdeps/esp01_1m/FastLED/debug_test.html | 220 + .pio/libdeps/esp01_1m/FastLED/dev.sh | 3 + .pio/libdeps/esp01_1m/FastLED/dev/dev.ino | 17 + .../esp01_1m/FastLED/examples/AGENTS.md | 356 + .../AdafruitBridge/AdafruitBridge.ino | 27 + .../examples/AnalogOutput/AnalogOutput.ino | 72 + .../FastLED/examples/AnalogOutput/compat.h | 42 + .../examples/Animartrix/Animartrix.ino | 158 + .../FastLED/examples/Apa102/Apa102.ino | 38 + .../FastLED/examples/Apa102HD/Apa102HD.ino | 88 + .../Apa102HDOverride/Apa102HDOverride.ino | 50 + .../esp01_1m/FastLED/examples/Async/Async.h | 35 + .../esp01_1m/FastLED/examples/Async/Async.ino | 19 + .../esp01_1m/FastLED/examples/Audio/Audio.ino | 39 + .../FastLED/examples/Audio/advanced/README.md | 148 + .../examples/Audio/advanced/advanced.h | 562 ++ .../FastLED/examples/Audio/simple/README.md | 157 + .../FastLED/examples/Audio/simple/fx_audio.h | 64 + .../FastLED/examples/Audio/simple/simple.h | 253 + .../FastLED/examples/AudioInput/AudioInput.h | 99 + .../examples/AudioInput/AudioInput.ino | 11 + .../esp01_1m/FastLED/examples/Blink/Blink.ino | 83 + .../examples/BlinkParallel/BlinkParallel.ino | 96 + .../esp01_1m/FastLED/examples/Blur/Blur.ino | 32 + .../FastLED/examples/Blur2d/Blur2d.ino | 65 + .../examples/Chromancer/Chromancer.ino | 607 ++ .../FastLED/examples/Chromancer/detail.h | 80 + .../gary_woos_wled_ledmap.h | 47 + .../gary_woos_wled_port/presets.json | 6681 ++++++++++++++ .../gary_woos_wled_port/presets.min.json | 1 + .../FastLED/examples/Chromancer/gen.py | 270 + .../FastLED/examples/Chromancer/mapping.h | 158 + .../FastLED/examples/Chromancer/output.json | 1 + .../FastLED/examples/Chromancer/ripple.h | 426 + .../examples/Chromancer/screenmap.json.h | 4 + .../FastLED/examples/ColorBoost/ColorBoost.h | 148 + .../examples/ColorBoost/ColorBoost.ino | 18 + .../examples/ColorPalette/ColorPalette.ino | 203 + .../ColorTemperature/ColorTemperature.ino | 89 + .../examples/CompileTest/apollo3_test.h | 26 + .../FastLED/examples/CompileTest/arm_test.h | 78 + .../FastLED/examples/CompileTest/avr_test.h | 40 + .../FastLED/examples/CompileTest/wasm_test.h | 35 + .../FastLED/examples/Corkscrew/Corkscrew.h | 183 + .../FastLED/examples/Corkscrew/Corkscrew.ino | 11 + .../esp01_1m/FastLED/examples/Cylon/Cylon.ino | 60 + .../examples/DemoReel100/DemoReel100.ino | 133 + .../FastLED/examples/Downscale/Downscale.h | 218 + .../FastLED/examples/Downscale/Downscale.ino | 18 + .../FastLED/examples/Downscale/src/wave.cpp | 65 + .../FastLED/examples/Downscale/src/wave.h | 34 + .../examples/Downscale/src/xypaths.cpp | 41 + .../FastLED/examples/Downscale/src/xypaths.h | 10 + .../FastLED/examples/EaseInOut/EaseInOut.h | 129 + .../FastLED/examples/EaseInOut/EaseInOut.ino | 9 + .../examples/Esp32S3I2SDemo/Esp32S3I2SDemo.h | 205 + .../Esp32S3I2SDemo/Esp32S3I2SDemo.ino | 19 + .../FastLED/examples/EspI2SDemo/EspI2SDemo.h | 74 + .../examples/EspI2SDemo/EspI2SDemo.ino | 25 + .../examples/FestivalStick/FestivalStick.ino | 14 + .../FastLED/examples/FestivalStick/curr.h | 811 ++ .../FastLED/examples/FestivalStick/old.h | 220 + .../FastLED/examples/Fire2012/Fire2012.ino | 111 + .../Fire2012WithPalette.ino | 167 + .../FastLED/examples/Fire2023/Fire2023.h | 262 + .../FastLED/examples/Fire2023/Fire2023.ino | 17 + .../examples/FireCylinder/FireCylinder.h | 215 + .../examples/FireCylinder/FireCylinder.ino | 9 + .../FastLED/examples/FireMatrix/FireMatrix.h | 200 + .../examples/FireMatrix/FireMatrix.ino | 9 + .../examples/FirstLight/FirstLight.ino | 96 + .../FastLED/examples/FxCylon/FxCylon.ino | 41 + .../examples/FxDemoReel100/FxDemoReel100.ino | 70 + .../FastLED/examples/FxDemoReel100/defs.h | 8 + .../FastLED/examples/FxEngine/FxEngine.ino | 79 + .../examples/FxFire2012/FxFire2012.ino | 83 + .../examples/FxGfx2Video/FxGfx2Video.ino | 107 + .../FxNoisePlusPalette/FxNoisePlusPalette.ino | 101 + .../examples/FxNoiseRing/FxNoiseRing.h | 682 ++ .../examples/FxNoiseRing/FxNoiseRing.ino | 11 + .../examples/FxNoiseRing/NOISE_RING_IDEAS.md | 760 ++ .../examples/FxNoiseRing/simple_timer.h | 58 + .../examples/FxPacifica/FxPacifica.ino | 58 + .../FastLED/examples/FxPacifica/defs.h | 9 + .../examples/FxPride2015/FxPride2015.ino | 42 + .../FastLED/examples/FxSdCard/FxSdCard.ino | 136 + .../FxSdCard/data/color_line_bubbles.rgb | Bin 0 -> 10859520 bytes .../FastLED/examples/FxSdCard/data/readme.txt | 4 + .../examples/FxSdCard/data/screenmap.json | 2 + .../FastLED/examples/FxSdCard/data/video.rgb | Bin 0 -> 3935232 bytes .../examples/FxTwinkleFox/FxTwinkleFox.ino | 30 + .../FastLED/examples/FxWater/FxWater.h | 159 + .../FastLED/examples/FxWater/FxWater.ino | 6 + .../FastLED/examples/FxWave2d/FxWave2d.ino | 46 + .../FastLED/examples/FxWave2d/wavefx.cpp | 445 + .../FastLED/examples/FxWave2d/wavefx.h | 33 + .../esp01_1m/FastLED/examples/HD107/HD107.ino | 63 + .../FastLED/examples/HSVTest/HSVTest.h | 62 + .../FastLED/examples/HSVTest/HSVTest.ino | 18 + .../esp01_1m/FastLED/examples/Json/Json.ino | 7 + .../FastLED/examples/Json/JsonSketch.h | 147 + .../LuminescentGrand/LuminescentGrand.ino | 259 + .../LuminescentGrand/arduino/LedRopeTCL.cpp | 179 + .../LuminescentGrand/arduino/LedRopeTCL.h | 81 + .../LuminescentGrand/arduino/MIDI.cpp | 115 + .../examples/LuminescentGrand/arduino/MIDI.h | 308 + .../LuminescentGrand/arduino/MIDI.hpp | 1485 +++ .../LuminescentGrand/arduino/buttons.h | 157 + .../LuminescentGrand/arduino/midi_Defs.h | 232 + .../LuminescentGrand/arduino/midi_Message.h | 103 + .../LuminescentGrand/arduino/midi_Namespace.h | 38 + .../LuminescentGrand/arduino/midi_Platform.h | 51 + .../LuminescentGrand/arduino/midi_Settings.h | 104 + .../LuminescentGrand/arduino/serialMIDI.h | 125 + .../LuminescentGrand/arduino/ui_state.cpp | 95 + .../LuminescentGrand/arduino/ui_state.h | 21 + .../shared/ApproximatingFunction.h | 75 + .../LuminescentGrand/shared/Keyboard.cpp | 211 + .../LuminescentGrand/shared/Keyboard.h | 108 + .../LuminescentGrand/shared/Painter.cpp | 485 + .../LuminescentGrand/shared/Painter.h | 58 + .../LuminescentGrand/shared/color.cpp | 151 + .../examples/LuminescentGrand/shared/color.h | 112 + .../LuminescentGrand/shared/color_mapper.cpp | 172 + .../LuminescentGrand/shared/color_mapper.h | 10 + .../examples/LuminescentGrand/shared/defs.h | 8 + .../LuminescentGrand/shared/dprint.cpp | 5 + .../examples/LuminescentGrand/shared/dprint.h | 15 + .../LuminescentGrand/shared/framebuffer.cpp | 58 + .../LuminescentGrand/shared/framebuffer.h | 35 + .../shared/led_layout_array.cpp | 205 + .../shared/led_layout_array.h | 14 + .../shared/led_rope_interface.h | 33 + .../LuminescentGrand/shared/settings.h | 26 + .../examples/LuminescentGrand/shared/util.cpp | 115 + .../examples/LuminescentGrand/shared/util.h | 39 + .../FastLED/examples/Luminova/Luminova.h | 179 + .../FastLED/examples/Luminova/Luminova.ino | 9 + .../ArrayOfLedArrays/ArrayOfLedArrays.ino | 41 + .../MirroringSample/MirroringSample.ino | 48 + .../Multiple/MultiArrays/MultiArrays.ino | 56 + .../MultipleStripsInOneArray.ino | 38 + .../Multiple/OctoWS2811Demo/OctoWS2811Demo.h | 44 + .../OctoWS2811Demo/OctoWS2811Demo.ino | 10 + .../ParallelOutputDemo/ParallelOutputDemo.h | 62 + .../ParallelOutputDemo/ParallelOutputDemo.ino | 10 + .../FastLED/examples/NetTest/NetTest.ino | 7 + .../FastLED/examples/NetTest/NetTestReal.h | 403 + .../esp01_1m/FastLED/examples/Noise/Noise.ino | 124 + .../NoisePlayground/NoisePlayground.h | 83 + .../NoisePlayground/NoisePlayground.ino | 11 + .../NoisePlusPalette/NoisePlusPalette.h | 407 + .../NoisePlusPalette/NoisePlusPalette.ino | 11 + .../examples/OctoWS2811/OctoWS2811.ino | 10 + .../examples/OctoWS2811/OctoWS2811_impl.h | 55 + .../FastLED/examples/Overclock/Overclock.ino | 101 + .../FastLED/examples/Pacifica/Pacifica.ino | 166 + .../FastLED/examples/PinMode/PinMode.ino | 26 + .../FastLED/examples/Pintest/Pintest.h | 211 + .../FastLED/examples/Pintest/Pintest.ino | 10 + .../PJRCSpectrumAnalyzer.h | 142 + .../PJRCSpectrumAnalyzer.ino | 10 + .../FastLED/examples/Pride2015/Pride2015.ino | 83 + .../esp01_1m/FastLED/examples/README.md | 223 + .../examples/RGBCalibrate/RGBCalibrate.ino | 99 + .../examples/RGBSetDemo/RGBSetDemo.ino | 26 + .../esp01_1m/FastLED/examples/RGBW/RGBW.ino | 50 + .../examples/RGBWEmulated/RGBWEmulated.ino | 76 + .../examples/SmartMatrix/SmartMatrix.ino | 11 + .../examples/SmartMatrix/SmartMatrixSketch.h | 132 + .../TeensyMassiveParallel.h | 92 + .../TeensyMassiveParallel.ino | 18 + .../TeensyParallel/TeensyParallel.ino | 88 + .../examples/TwinkleFox/TwinkleFox.ino | 393 + .../FastLED/examples/UITest/UITest.ino | 103 + .../FastLED/examples/WS2816/WS2816.ino | 35 + .../WasmScreenCoords/WasmScreenCoords.ino | 88 + .../esp01_1m/FastLED/examples/Wave/Wave.h | 102 + .../esp01_1m/FastLED/examples/Wave/Wave.ino | 19 + .../esp01_1m/FastLED/examples/Wave2d/Wave2d.h | 116 + .../FastLED/examples/Wave2d/Wave2d.ino | 10 + .../FastLED/examples/XYMatrix/XYMatrix.ino | 217 + .../FastLED/examples/XYPath/XYPath.ino | 7 + .../FastLED/examples/XYPath/complex.h | 211 + .../esp01_1m/FastLED/examples/XYPath/direct.h | 70 + .../esp01_1m/FastLED/examples/XYPath/simple.h | 75 + .../FastLED/examples/XYPath/src/wave.cpp | 65 + .../FastLED/examples/XYPath/src/wave.h | 34 + .../FastLED/examples/XYPath/src/xypaths.cpp | 41 + .../FastLED/examples/XYPath/src/xypaths.h | 10 + .../esp01_1m/FastLED/examples/wasm/wasm.ino | 7 + .../FastLED/examples/wasm/wasm_impl.h | 157 + .pio/libdeps/esp01_1m/FastLED/fastled4.md | 7 + .../FastLED/generate_compile_commands.sh | 46 + .pio/libdeps/esp01_1m/FastLED/inspect | 3 + .pio/libdeps/esp01_1m/FastLED/install | 181 + .pio/libdeps/esp01_1m/FastLED/keywords.txt | 472 + .pio/libdeps/esp01_1m/FastLED/legacy_index.js | 775 ++ .pio/libdeps/esp01_1m/FastLED/library.json | 84 + .../esp01_1m/FastLED/library.properties | 10 + .pio/libdeps/esp01_1m/FastLED/mcp_server.py | 2551 +++++ .pio/libdeps/esp01_1m/FastLED/pyproject.toml | 184 + .../libdeps/esp01_1m/FastLED/release_notes.md | 1016 ++ .../scripts/all_source_build.py.disabled | 246 + .../disable_all_source_build.py.disabled | 133 + .../FastLED/scripts/enhance-js-typing.py | 493 + .../esp01_1m/FastLED/src/CMakeLists.txt | 257 + .pio/libdeps/esp01_1m/FastLED/src/FastLED.cpp | 426 + .pio/libdeps/esp01_1m/FastLED/src/FastLED.h | 1017 ++ .pio/libdeps/esp01_1m/FastLED/src/README.md | 254 + .pio/libdeps/esp01_1m/FastLED/src/_readme | 21 + .pio/libdeps/esp01_1m/FastLED/src/bitswap.cpp | 5 + .pio/libdeps/esp01_1m/FastLED/src/bitswap.h | 296 + .pio/libdeps/esp01_1m/FastLED/src/chipsets.h | 1241 +++ .pio/libdeps/esp01_1m/FastLED/src/chsv.h | 23 + .../esp01_1m/FastLED/src/cled_controller.cpp | 47 + .../esp01_1m/FastLED/src/cled_controller.h | 285 + .pio/libdeps/esp01_1m/FastLED/src/color.h | 100 + .../esp01_1m/FastLED/src/colorpalettes.cpp | 190 + .../esp01_1m/FastLED/src/colorpalettes.h | 39 + .../libdeps/esp01_1m/FastLED/src/colorutils.h | 130 + .../libdeps/esp01_1m/FastLED/src/controller.h | 11 + .../FastLED/src/cpixel_ledcontroller.h | 72 + .../libdeps/esp01_1m/FastLED/src/cpp_compat.h | 28 + .pio/libdeps/esp01_1m/FastLED/src/crgb.cpp | 117 + .pio/libdeps/esp01_1m/FastLED/src/crgb.h | 890 ++ .pio/libdeps/esp01_1m/FastLED/src/crgb.hpp | 221 + .../esp01_1m/FastLED/src/dither_mode.h | 18 + .pio/libdeps/esp01_1m/FastLED/src/dmx.h | 88 + .pio/libdeps/esp01_1m/FastLED/src/eorder.h | 24 + .../esp01_1m/FastLED/src/fastled_config.h | 88 + .../esp01_1m/FastLED/src/fastled_delay.h | 221 + .../esp01_1m/FastLED/src/fastled_progmem.h | 111 + .pio/libdeps/esp01_1m/FastLED/src/fastpin.h | 475 + .pio/libdeps/esp01_1m/FastLED/src/fastspi.h | 199 + .../esp01_1m/FastLED/src/fastspi_bitbang.h | 424 + .../esp01_1m/FastLED/src/fastspi_dma.h | 5 + .../esp01_1m/FastLED/src/fastspi_nop.h | 74 + .../esp01_1m/FastLED/src/fastspi_ref.h | 105 + .../esp01_1m/FastLED/src/fastspi_types.h | 89 + .../libdeps/esp01_1m/FastLED/src/fl/README.md | 798 ++ .pio/libdeps/esp01_1m/FastLED/src/fl/_readme | 15 + .../esp01_1m/FastLED/src/fl/algorithm.h | 565 ++ .pio/libdeps/esp01_1m/FastLED/src/fl/align.h | 18 + .../esp01_1m/FastLED/src/fl/allocator.cpp | 138 + .../esp01_1m/FastLED/src/fl/allocator.h | 774 ++ .pio/libdeps/esp01_1m/FastLED/src/fl/array.h | 201 + .pio/libdeps/esp01_1m/FastLED/src/fl/assert.h | 8 + .../libdeps/esp01_1m/FastLED/src/fl/async.cpp | 211 + .pio/libdeps/esp01_1m/FastLED/src/fl/async.h | 260 + .pio/libdeps/esp01_1m/FastLED/src/fl/atomic.h | 160 + .../libdeps/esp01_1m/FastLED/src/fl/audio.cpp | 194 + .pio/libdeps/esp01_1m/FastLED/src/fl/audio.h | 169 + .../esp01_1m/FastLED/src/fl/audio_input.cpp | 74 + .../esp01_1m/FastLED/src/fl/audio_input.h | 142 + .../FastLED/src/fl/audio_reactive.cpp | 759 ++ .../esp01_1m/FastLED/src/fl/audio_reactive.h | 231 + .../esp01_1m/FastLED/src/fl/avr_disallowed.h | 8 + .../esp01_1m/FastLED/src/fl/bit_cast.h | 74 + .../esp01_1m/FastLED/src/fl/bitset.cpp | 28 + .pio/libdeps/esp01_1m/FastLED/src/fl/bitset.h | 663 ++ .../esp01_1m/FastLED/src/fl/bitset_dynamic.h | 451 + .pio/libdeps/esp01_1m/FastLED/src/fl/blur.cpp | 134 + .pio/libdeps/esp01_1m/FastLED/src/fl/blur.h | 71 + .../esp01_1m/FastLED/src/fl/bytestream.h | 29 + .../FastLED/src/fl/bytestreammemory.cpp | 72 + .../FastLED/src/fl/bytestreammemory.h | 31 + .../esp01_1m/FastLED/src/fl/circular_buffer.h | 143 + .pio/libdeps/esp01_1m/FastLED/src/fl/clamp.h | 20 + .pio/libdeps/esp01_1m/FastLED/src/fl/clear.h | 39 + .../esp01_1m/FastLED/src/fl/colorutils.cpp | 1109 +++ .../esp01_1m/FastLED/src/fl/colorutils.h | 1807 ++++ .../esp01_1m/FastLED/src/fl/colorutils_misc.h | 41 + .../esp01_1m/FastLED/src/fl/comparators.h | 9 + .../FastLED/src/fl/compiler_control.h | 146 + .../libdeps/esp01_1m/FastLED/src/fl/convert.h | 15 + .../esp01_1m/FastLED/src/fl/corkscrew.cpp | 502 + .../esp01_1m/FastLED/src/fl/corkscrew.h | 251 + .../esp01_1m/FastLED/src/fl/crgb_hsv16.cpp | 31 + .../libdeps/esp01_1m/FastLED/src/fl/cstddef.h | 25 + .pio/libdeps/esp01_1m/FastLED/src/fl/dbg.h | 67 + .../esp01_1m/FastLED/src/fl/deprecated.h | 28 + .pio/libdeps/esp01_1m/FastLED/src/fl/deque.h | 390 + .pio/libdeps/esp01_1m/FastLED/src/fl/dll.h | 53 + .../esp01_1m/FastLED/src/fl/downscale.cpp | 188 + .../esp01_1m/FastLED/src/fl/downscale.h | 33 + .../esp01_1m/FastLED/src/fl/draw_mode.h | 7 + .../esp01_1m/FastLED/src/fl/draw_visitor.h | 77 + .pio/libdeps/esp01_1m/FastLED/src/fl/ease.cpp | 339 + .pio/libdeps/esp01_1m/FastLED/src/fl/ease.h | 278 + .../esp01_1m/FastLED/src/fl/engine_events.cpp | 131 + .../esp01_1m/FastLED/src/fl/engine_events.h | 150 + .pio/libdeps/esp01_1m/FastLED/src/fl/eorder.h | 31 + .pio/libdeps/esp01_1m/FastLED/src/fl/export.h | 40 + .../libdeps/esp01_1m/FastLED/src/fl/fetch.cpp | 333 + .pio/libdeps/esp01_1m/FastLED/src/fl/fetch.h | 326 + .pio/libdeps/esp01_1m/FastLED/src/fl/fft.cpp | 74 + .pio/libdeps/esp01_1m/FastLED/src/fl/fft.h | 125 + .../esp01_1m/FastLED/src/fl/fft_impl.cpp | 171 + .../esp01_1m/FastLED/src/fl/fft_impl.h | 58 + .../esp01_1m/FastLED/src/fl/file_system.cpp | 206 + .../esp01_1m/FastLED/src/fl/file_system.h | 108 + .pio/libdeps/esp01_1m/FastLED/src/fl/fill.cpp | 173 + .pio/libdeps/esp01_1m/FastLED/src/fl/fill.h | 291 + .../FastLED/src/fl/five_bit_hd_gamma.h | 191 + .../esp01_1m/FastLED/src/fl/force_inline.h | 7 + .../esp01_1m/FastLED/src/fl/function.h | 351 + .../esp01_1m/FastLED/src/fl/function_list.h | 87 + .../esp01_1m/FastLED/src/fl/functional.h | 97 + .../libdeps/esp01_1m/FastLED/src/fl/gamma.cpp | 8 + .pio/libdeps/esp01_1m/FastLED/src/fl/gamma.h | 19 + .../esp01_1m/FastLED/src/fl/geometry.h | 478 + .../esp01_1m/FastLED/src/fl/gradient.cpp | 147 + .../esp01_1m/FastLED/src/fl/gradient.h | 71 + .pio/libdeps/esp01_1m/FastLED/src/fl/grid.h | 92 + .../esp01_1m/FastLED/src/fl/has_include.h | 7 + .pio/libdeps/esp01_1m/FastLED/src/fl/hash.h | 264 + .../esp01_1m/FastLED/src/fl/hash_map.h | 725 ++ .../esp01_1m/FastLED/src/fl/hash_map_lru.h | 162 + .../esp01_1m/FastLED/src/fl/hash_set.h | 32 + .pio/libdeps/esp01_1m/FastLED/src/fl/hsv.h | 109 + .../libdeps/esp01_1m/FastLED/src/fl/hsv16.cpp | 197 + .pio/libdeps/esp01_1m/FastLED/src/fl/hsv16.h | 38 + .../esp01_1m/FastLED/src/fl/id_tracker.cpp | 81 + .../esp01_1m/FastLED/src/fl/id_tracker.h | 96 + .../FastLED/src/fl/initializer_list.h | 62 + .../esp01_1m/FastLED/src/fl/inplacenew.h | 22 + .../esp01_1m/FastLED/src/fl/insert_result.h | 16 + .pio/libdeps/esp01_1m/FastLED/src/fl/int.h | 94 + .pio/libdeps/esp01_1m/FastLED/src/fl/io.cpp | 225 + .pio/libdeps/esp01_1m/FastLED/src/fl/io.h | 61 + .../esp01_1m/FastLED/src/fl/iostream.h | 4 + .../esp01_1m/FastLED/src/fl/istream.cpp | 416 + .../libdeps/esp01_1m/FastLED/src/fl/istream.h | 298 + .pio/libdeps/esp01_1m/FastLED/src/fl/json.cpp | 509 + .pio/libdeps/esp01_1m/FastLED/src/fl/json.h | 2208 +++++ .pio/libdeps/esp01_1m/FastLED/src/fl/leds.cpp | 47 + .pio/libdeps/esp01_1m/FastLED/src/fl/leds.h | 76 + .../FastLED/src/fl/line_simplification.cpp | 26 + .../FastLED/src/fl/line_simplification.h | 364 + .pio/libdeps/esp01_1m/FastLED/src/fl/lut.h | 107 + .pio/libdeps/esp01_1m/FastLED/src/fl/map.h | 543 ++ .../esp01_1m/FastLED/src/fl/map_range.h | 125 + .pio/libdeps/esp01_1m/FastLED/src/fl/math.h | 88 + .../esp01_1m/FastLED/src/fl/math_macros.h | 102 + .../libdeps/esp01_1m/FastLED/src/fl/memfill.h | 36 + .pio/libdeps/esp01_1m/FastLED/src/fl/memory.h | 54 + .pio/libdeps/esp01_1m/FastLED/src/fl/move.h | 31 + .pio/libdeps/esp01_1m/FastLED/src/fl/mutex.h | 95 + .../esp01_1m/FastLED/src/fl/namespace.h | 31 + .../esp01_1m/FastLED/src/fl/noise_woryley.cpp | 68 + .../esp01_1m/FastLED/src/fl/noise_woryley.h | 11 + .../esp01_1m/FastLED/src/fl/optional.h | 137 + .../esp01_1m/FastLED/src/fl/ostream.cpp | 11 + .../libdeps/esp01_1m/FastLED/src/fl/ostream.h | 140 + .pio/libdeps/esp01_1m/FastLED/src/fl/pair.h | 207 + .pio/libdeps/esp01_1m/FastLED/src/fl/point.h | 3 + .pio/libdeps/esp01_1m/FastLED/src/fl/printf.h | 473 + .../esp01_1m/FastLED/src/fl/priority_queue.h | 98 + .../libdeps/esp01_1m/FastLED/src/fl/promise.h | 384 + .../esp01_1m/FastLED/src/fl/promise_result.h | 187 + .pio/libdeps/esp01_1m/FastLED/src/fl/ptr.cpp | 10 + .pio/libdeps/esp01_1m/FastLED/src/fl/ptr.h | 250 + .../esp01_1m/FastLED/src/fl/ptr_impl.h | 322 + .pio/libdeps/esp01_1m/FastLED/src/fl/queue.h | 149 + .../esp01_1m/FastLED/src/fl/random.cpp | 13 + .pio/libdeps/esp01_1m/FastLED/src/fl/random.h | 168 + .../esp01_1m/FastLED/src/fl/range_access.h | 43 + .pio/libdeps/esp01_1m/FastLED/src/fl/raster.h | 10 + .../esp01_1m/FastLED/src/fl/raster_sparse.cpp | 87 + .../esp01_1m/FastLED/src/fl/raster_sparse.h | 400 + .pio/libdeps/esp01_1m/FastLED/src/fl/rbtree.h | 1019 ++ .../src/fl/rectangular_draw_buffer.cpp | 101 + .../FastLED/src/fl/rectangular_draw_buffer.h | 90 + .../esp01_1m/FastLED/src/fl/referent.cpp | 10 + .../esp01_1m/FastLED/src/fl/referent.h | 82 + .../esp01_1m/FastLED/src/fl/register.h | 13 + .pio/libdeps/esp01_1m/FastLED/src/fl/rgbw.cpp | 166 + .pio/libdeps/esp01_1m/FastLED/src/fl/rgbw.h | 201 + .../esp01_1m/FastLED/src/fl/scoped_array.h | 208 + .../esp01_1m/FastLED/src/fl/scoped_ptr.h | 14 + .../esp01_1m/FastLED/src/fl/screenmap.cpp | 451 + .../esp01_1m/FastLED/src/fl/screenmap.h | 106 + .pio/libdeps/esp01_1m/FastLED/src/fl/set.h | 379 + .../esp01_1m/FastLED/src/fl/shared_ptr.h | 469 + .../libdeps/esp01_1m/FastLED/src/fl/sin32.cpp | 50 + .pio/libdeps/esp01_1m/FastLED/src/fl/sin32.h | 73 + .../esp01_1m/FastLED/src/fl/singleton.h | 26 + .../esp01_1m/FastLED/src/fl/sketch_macros.h | 25 + .pio/libdeps/esp01_1m/FastLED/src/fl/slice.h | 252 + .pio/libdeps/esp01_1m/FastLED/src/fl/span.h | 10 + .../libdeps/esp01_1m/FastLED/src/fl/splat.cpp | 43 + .pio/libdeps/esp01_1m/FastLED/src/fl/splat.h | 26 + .../libdeps/esp01_1m/FastLED/src/fl/sstream.h | 7 + .pio/libdeps/esp01_1m/FastLED/src/fl/stdint.h | 4 + .pio/libdeps/esp01_1m/FastLED/src/fl/str.cpp | 423 + .pio/libdeps/esp01_1m/FastLED/src/fl/str.h | 1028 +++ .../esp01_1m/FastLED/src/fl/str_ui.cpp | 17 + .pio/libdeps/esp01_1m/FastLED/src/fl/string.h | 3 + .../esp01_1m/FastLED/src/fl/strstream.cpp | 43 + .../esp01_1m/FastLED/src/fl/strstream.h | 293 + .../esp01_1m/FastLED/src/fl/stub_main.cpp | 35 + .../esp01_1m/FastLED/src/fl/supersample.h | 10 + .pio/libdeps/esp01_1m/FastLED/src/fl/task.cpp | 254 + .pio/libdeps/esp01_1m/FastLED/src/fl/task.h | 188 + .../esp01_1m/FastLED/src/fl/template_magic.h | 5 + .pio/libdeps/esp01_1m/FastLED/src/fl/thread.h | 15 + .../esp01_1m/FastLED/src/fl/thread_local.h | 211 + .../esp01_1m/FastLED/src/fl/tile2x2.cpp | 169 + .../libdeps/esp01_1m/FastLED/src/fl/tile2x2.h | 128 + .pio/libdeps/esp01_1m/FastLED/src/fl/time.cpp | 152 + .pio/libdeps/esp01_1m/FastLED/src/fl/time.h | 187 + .../esp01_1m/FastLED/src/fl/time_alpha.cpp | 108 + .../esp01_1m/FastLED/src/fl/time_alpha.h | 159 + .pio/libdeps/esp01_1m/FastLED/src/fl/trace.h | 27 + .../esp01_1m/FastLED/src/fl/transform.cpp | 162 + .../esp01_1m/FastLED/src/fl/transform.h | 143 + .../esp01_1m/FastLED/src/fl/traverse_grid.h | 304 + .pio/libdeps/esp01_1m/FastLED/src/fl/tuple.h | 97 + .../esp01_1m/FastLED/src/fl/type_traits.cpp | 125 + .../esp01_1m/FastLED/src/fl/type_traits.h | 786 ++ .pio/libdeps/esp01_1m/FastLED/src/fl/types.h | 15 + .pio/libdeps/esp01_1m/FastLED/src/fl/ui.cpp | 116 + .pio/libdeps/esp01_1m/FastLED/src/fl/ui.h | 589 ++ .../libdeps/esp01_1m/FastLED/src/fl/ui_impl.h | 376 + .../esp01_1m/FastLED/src/fl/unique_ptr.h | 255 + .../esp01_1m/FastLED/src/fl/unordered_set.h | 148 + .pio/libdeps/esp01_1m/FastLED/src/fl/unused.h | 9 + .../esp01_1m/FastLED/src/fl/upscale.cpp | 368 + .../libdeps/esp01_1m/FastLED/src/fl/upscale.h | 100 + .../libdeps/esp01_1m/FastLED/src/fl/utility.h | 53 + .../libdeps/esp01_1m/FastLED/src/fl/variant.h | 299 + .pio/libdeps/esp01_1m/FastLED/src/fl/vector.h | 1222 +++ .../FastLED/src/fl/virtual_if_not_avr.h | 7 + .pio/libdeps/esp01_1m/FastLED/src/fl/warn.h | 21 + .../FastLED/src/fl/wave_simulation.cpp | 388 + .../esp01_1m/FastLED/src/fl/wave_simulation.h | 220 + .../FastLED/src/fl/wave_simulation_real.cpp | 295 + .../FastLED/src/fl/wave_simulation_real.h | 209 + .../esp01_1m/FastLED/src/fl/weak_ptr.h | 222 + .pio/libdeps/esp01_1m/FastLED/src/fl/xmap.cpp | 95 + .pio/libdeps/esp01_1m/FastLED/src/fl/xmap.h | 69 + .../libdeps/esp01_1m/FastLED/src/fl/xymap.cpp | 133 + .pio/libdeps/esp01_1m/FastLED/src/fl/xymap.h | 134 + .../esp01_1m/FastLED/src/fl/xypath.cpp | 299 + .pio/libdeps/esp01_1m/FastLED/src/fl/xypath.h | 164 + .../esp01_1m/FastLED/src/fl/xypath_impls.cpp | 364 + .../esp01_1m/FastLED/src/fl/xypath_impls.h | 278 + .../FastLED/src/fl/xypath_renderer.cpp | 39 + .../esp01_1m/FastLED/src/fl/xypath_renderer.h | 63 + .../esp01_1m/FastLED/src/fonts/_readme | 12 + .../FastLED/src/fonts/console_font_4x6.h | 2577 ++++++ .../FastLED/src/fonts/console_font_5x12.h | 4113 +++++++++ .../FastLED/src/fonts/console_font_5x8.h | 3090 +++++++ .../FastLED/src/fonts/console_font_6x8.h | 3088 +++++++ .../FastLED/src/fonts/console_font_7x9.h | 3345 +++++++ .../esp01_1m/FastLED/src/fx/1d/README.md | 124 + .../esp01_1m/FastLED/src/fx/1d/cylon.h | 61 + .../esp01_1m/FastLED/src/fx/1d/demoreel100.h | 132 + .../esp01_1m/FastLED/src/fx/1d/fire2012.h | 110 + .../esp01_1m/FastLED/src/fx/1d/noisewave.h | 44 + .../esp01_1m/FastLED/src/fx/1d/pacifica.h | 135 + .../esp01_1m/FastLED/src/fx/1d/pride2015.h | 74 + .../esp01_1m/FastLED/src/fx/1d/twinklefox.h | 306 + .../esp01_1m/FastLED/src/fx/2d/README.md | 81 + .../esp01_1m/FastLED/src/fx/2d/animartrix.hpp | 294 + .../FastLED/src/fx/2d/animartrix_detail.hpp | 4094 ++++++++ .../esp01_1m/FastLED/src/fx/2d/blend.cpp | 124 + .../esp01_1m/FastLED/src/fx/2d/blend.h | 65 + .../esp01_1m/FastLED/src/fx/2d/luminova.cpp | 128 + .../esp01_1m/FastLED/src/fx/2d/luminova.h | 68 + .../FastLED/src/fx/2d/noisepalette.cpp | 195 + .../esp01_1m/FastLED/src/fx/2d/noisepalette.h | 103 + .../esp01_1m/FastLED/src/fx/2d/redsquare.h | 46 + .../esp01_1m/FastLED/src/fx/2d/scale_up.cpp | 92 + .../esp01_1m/FastLED/src/fx/2d/scale_up.h | 62 + .../esp01_1m/FastLED/src/fx/2d/wave.cpp | 64 + .../libdeps/esp01_1m/FastLED/src/fx/2d/wave.h | 189 + .../libdeps/esp01_1m/FastLED/src/fx/README.md | 80 + .../esp01_1m/FastLED/src/fx/detail/README.md | 33 + .../FastLED/src/fx/detail/draw_context.h | 21 + .../FastLED/src/fx/detail/fx_compositor.h | 85 + .../FastLED/src/fx/detail/fx_layer.cpp | 55 + .../esp01_1m/FastLED/src/fx/detail/fx_layer.h | 37 + .../FastLED/src/fx/detail/transition.h | 49 + .../libdeps/esp01_1m/FastLED/src/fx/frame.cpp | 106 + .pio/libdeps/esp01_1m/FastLED/src/fx/frame.h | 52 + .pio/libdeps/esp01_1m/FastLED/src/fx/fx.h | 56 + .pio/libdeps/esp01_1m/FastLED/src/fx/fx1d.h | 24 + .pio/libdeps/esp01_1m/FastLED/src/fx/fx2d.h | 34 + .../esp01_1m/FastLED/src/fx/fx_engine.cpp | 105 + .../esp01_1m/FastLED/src/fx/fx_engine.h | 127 + .pio/libdeps/esp01_1m/FastLED/src/fx/readme | 29 + .pio/libdeps/esp01_1m/FastLED/src/fx/time.cpp | 89 + .pio/libdeps/esp01_1m/FastLED/src/fx/time.h | 54 + .../libdeps/esp01_1m/FastLED/src/fx/video.cpp | 197 + .pio/libdeps/esp01_1m/FastLED/src/fx/video.h | 104 + .../esp01_1m/FastLED/src/fx/video/README.md | 60 + .../src/fx/video/frame_interpolator.cpp | 51 + .../FastLED/src/fx/video/frame_interpolator.h | 107 + .../FastLED/src/fx/video/frame_tracker.cpp | 52 + .../FastLED/src/fx/video/frame_tracker.h | 37 + .../FastLED/src/fx/video/pixel_stream.cpp | 196 + .../FastLED/src/fx/video/pixel_stream.h | 63 + .../FastLED/src/fx/video/video_impl.cpp | 355 + .../FastLED/src/fx/video/video_impl.h | 65 + .pio/libdeps/esp01_1m/FastLED/src/hsv2rgb.cpp | 741 ++ .pio/libdeps/esp01_1m/FastLED/src/hsv2rgb.h | 189 + .../esp01_1m/FastLED/src/led_sysdefs.h | 95 + .../libdeps/esp01_1m/FastLED/src/lib8tion.cpp | 260 + .pio/libdeps/esp01_1m/FastLED/src/lib8tion.h | 1260 +++ .../esp01_1m/FastLED/src/lib8tion/config.h | 161 + .../esp01_1m/FastLED/src/lib8tion/intmap.h | 66 + .../FastLED/src/lib8tion/lib8static.h | 14 + .../esp01_1m/FastLED/src/lib8tion/math8.h | 701 ++ .../esp01_1m/FastLED/src/lib8tion/memmove.h | 24 + .../esp01_1m/FastLED/src/lib8tion/qfx.h | 58 + .../esp01_1m/FastLED/src/lib8tion/random8.h | 110 + .../esp01_1m/FastLED/src/lib8tion/scale8.h | 760 ++ .../esp01_1m/FastLED/src/lib8tion/trig8.h | 287 + .../esp01_1m/FastLED/src/lib8tion/types.h | 47 + .pio/libdeps/esp01_1m/FastLED/src/noise.cpp | 960 ++ .pio/libdeps/esp01_1m/FastLED/src/noise.h | 270 + .pio/libdeps/esp01_1m/FastLED/src/noisegen.h | 36 + .../esp01_1m/FastLED/src/pixel_controller.h | 617 ++ .../esp01_1m/FastLED/src/pixel_iterator.h | 193 + .pio/libdeps/esp01_1m/FastLED/src/pixelset.h | 529 ++ .../libdeps/esp01_1m/FastLED/src/pixeltypes.h | 11 + .../esp01_1m/FastLED/src/platforms.cpp | 64 + .pio/libdeps/esp01_1m/FastLED/src/platforms.h | 61 + .../FastLED/src/platforms/adafruit/README.md | 29 + .../src/platforms/adafruit/clockless.cpp | 8 + .../src/platforms/adafruit/clockless.h | 73 + .../src/platforms/adafruit/clockless_fake.hpp | 37 + .../src/platforms/adafruit/clockless_real.hpp | 93 + .../FastLED/src/platforms/adafruit/driver.h | 25 + .../FastLED/src/platforms/apollo3/README.md | 26 + .../src/platforms/apollo3/clockless_apollo3.h | 184 + .../src/platforms/apollo3/compile_test.hpp | 30 + .../src/platforms/apollo3/fastled_apollo3.h | 8 + .../src/platforms/apollo3/fastpin_apollo3.h | 173 + .../src/platforms/apollo3/fastspi_apollo3.h | 134 + .../platforms/apollo3/led_sysdefs_apollo3.h | 39 + .../src/platforms/arduino/audio_input.hpp | 235 + .../FastLED/src/platforms/arm/README.md | 35 + .../FastLED/src/platforms/arm/arm_compile.hpp | 12 + .../src/platforms/arm/common/README.md | 8 + .../src/platforms/arm/common/m0clockless.h | 423 + .../src/platforms/arm/compile_test.hpp | 96 + .../FastLED/src/platforms/arm/d21/README.md | 23 + .../src/platforms/arm/d21/clockless_arm_d21.h | 67 + .../src/platforms/arm/d21/fastled_arm_d21.h | 7 + .../src/platforms/arm/d21/fastpin_arm_d21.h | 289 + .../platforms/arm/d21/led_sysdefs_arm_d21.h | 28 + .../FastLED/src/platforms/arm/d51/README.md | 21 + .../FastLED/src/platforms/arm/d51/README.txt | 7 + .../src/platforms/arm/d51/clockless_arm_d51.h | 128 + .../src/platforms/arm/d51/fastled_arm_d51.h | 8 + .../src/platforms/arm/d51/fastpin_arm_d51.h | 241 + .../platforms/arm/d51/led_sysdefs_arm_d51.h | 27 + .../FastLED/src/platforms/arm/giga/README.md | 22 + .../FastLED/src/platforms/arm/giga/armpin.h | 50 + .../platforms/arm/giga/clockless_arm_giga.h | 128 + .../src/platforms/arm/giga/fastled_arm_giga.h | 8 + .../src/platforms/arm/giga/fastpin_arm_giga.h | 208 + .../platforms/arm/giga/led_sysdef_arm_giga.h | 36 + .../esp01_1m/FastLED/src/platforms/arm/int.h | 29 + .../FastLED/src/platforms/arm/is_arm.h | 16 + .../FastLED/src/platforms/arm/k20/README.md | 28 + .../src/platforms/arm/k20/clockless_arm_k20.h | 126 + .../arm/k20/clockless_block_arm_k20.h | 333 + .../arm/k20/clockless_objectfled.cpp | 164 + .../platforms/arm/k20/clockless_objectfled.h | 85 + .../src/platforms/arm/k20/fastled_arm_k20.h | 14 + .../src/platforms/arm/k20/fastpin_arm_k20.h | 123 + .../src/platforms/arm/k20/fastspi_arm_k20.h | 466 + .../platforms/arm/k20/led_sysdefs_arm_k20.h | 48 + .../platforms/arm/k20/octows2811_controller.h | 67 + .../src/platforms/arm/k20/smartmatrix_t3.h | 55 + .../arm/k20/ws2812serial_controller.h | 49 + .../FastLED/src/platforms/arm/k66/README.md | 22 + .../src/platforms/arm/k66/clockless_arm_k66.h | 124 + .../arm/k66/clockless_block_arm_k66.h | 347 + .../src/platforms/arm/k66/fastled_arm_k66.h | 14 + .../src/platforms/arm/k66/fastpin_arm_k66.h | 130 + .../src/platforms/arm/k66/fastspi_arm_k66.h | 470 + .../platforms/arm/k66/led_sysdefs_arm_k66.h | 48 + .../FastLED/src/platforms/arm/kl26/README.md | 23 + .../platforms/arm/kl26/clockless_arm_kl26.h | 68 + .../src/platforms/arm/kl26/fastled_arm_kl26.h | 10 + .../src/platforms/arm/kl26/fastpin_arm_kl26.h | 90 + .../src/platforms/arm/kl26/fastspi_arm_kl26.h | 252 + .../platforms/arm/kl26/led_sysdefs_arm_kl26.h | 54 + .../arm/mgm240/clockless_arm_mgm240.h | 174 + .../platforms/arm/mgm240/fastled_arm_mgm240.h | 5 + .../arm/mgm240/fastpin_arm_mgm240.cpp | 25 + .../platforms/arm/mgm240/fastpin_arm_mgm240.h | 192 + .../arm/mgm240/led_sysdefs_arm_mgm240.h | 98 + .../src/platforms/arm/mxrt1062/README.md | 16 + .../mxrt1062/block_clockless_arm_mxrt1062.h | 214 + .../arm/mxrt1062/clockless_arm_mxrt1062.h | 131 + .../arm/mxrt1062/fastled_arm_mxrt1062.h | 12 + .../arm/mxrt1062/fastpin_arm_mxrt1062.h | 93 + .../arm/mxrt1062/fastspi_arm_mxrt1062.h | 140 + .../arm/mxrt1062/led_sysdefs_arm_mxrt1062.h | 45 + .../arm/mxrt1062/octows2811_controller.h | 64 + .../FastLED/src/platforms/arm/nrf51/README.md | 22 + .../platforms/arm/nrf51/clockless_arm_nrf51.h | 84 + .../platforms/arm/nrf51/fastled_arm_nrf51.h | 9 + .../platforms/arm/nrf51/fastpin_arm_nrf51.h | 121 + .../platforms/arm/nrf51/fastspi_arm_nrf51.h | 149 + .../arm/nrf51/led_sysdefs_arm_nrf51.h | 48 + .../FastLED/src/platforms/arm/nrf52/README.md | 29 + .../src/platforms/arm/nrf52/arbiter_nrf52.h | 114 + .../platforms/arm/nrf52/clockless_arm_nrf52.h | 390 + .../platforms/arm/nrf52/fastled_arm_nrf52.h | 11 + .../platforms/arm/nrf52/fastpin_arm_nrf52.h | 212 + .../arm/nrf52/fastpin_arm_nrf52_variants.h | 965 ++ .../platforms/arm/nrf52/fastspi_arm_nrf52.h | 340 + .../arm/nrf52/led_sysdefs_arm_nrf52.h | 56 + .../src/platforms/arm/renesas/README.md | 21 + .../arm/renesas/clockless_arm_renesas.h | 128 + .../arm/renesas/fastled_arm_renesas.h | 8 + .../arm/renesas/fastpin_arm_renesas.h | 139 + .../arm/renesas/led_sysdef_arm_renesas.h | 34 + .../src/platforms/arm/rp2040/README.md | 26 + .../arm/rp2040/clockless_arm_rp2040.h | 335 + .../platforms/arm/rp2040/fastled_arm_rp2040.h | 8 + .../platforms/arm/rp2040/fastpin_arm_rp2040.h | 98 + .../arm/rp2040/led_sysdefs_arm_rp2040.h | 113 + .../src/platforms/arm/rp2040/pio_asm.h | 98 + .../src/platforms/arm/rp2040/pio_gen.h | 57 + .../FastLED/src/platforms/arm/sam/README.md | 23 + .../src/platforms/arm/sam/clockless_arm_sam.h | 122 + .../arm/sam/clockless_block_arm_sam.h | 183 + .../src/platforms/arm/sam/fastled_arm_sam.h | 10 + .../src/platforms/arm/sam/fastpin_arm_sam.h | 139 + .../src/platforms/arm/sam/fastspi_arm_sam.h | 163 + .../platforms/arm/sam/led_sysdefs_arm_sam.h | 46 + .../FastLED/src/platforms/arm/stm32/README.md | 25 + .../FastLED/src/platforms/arm/stm32/armpin.h | 71 + .../platforms/arm/stm32/clockless_arm_stm32.h | 133 + .../src/platforms/arm/stm32/cm3_regs.h | 63 + .../platforms/arm/stm32/fastled_arm_stm32.h | 9 + .../platforms/arm/stm32/fastpin_arm_stm32.h | 27 + .../arm/stm32/fastpin_arm_stm_legacy.h | 274 + .../platforms/arm/stm32/fastpin_arm_stm_new.h | 161 + .../arm/stm32/led_sysdefs_arm_stm32.h | 97 + .../FastLED/src/platforms/assert_defs.h | 33 + .../esp01_1m/FastLED/src/platforms/audio.h | 23 + .../src/platforms/audio_input_null.hpp | 30 + .../FastLED/src/platforms/avr/README.md | 51 + .../FastLED/src/platforms/avr/avr_compile.hpp | 10 + .../avr/avr_millis_timer0_impl_source.hpp | 120 + .../avr/avr_millis_timer_null_counter.hpp | 23 + .../platforms/avr/avr_millis_timer_source.cpp | 34 + .../FastLED/src/platforms/avr/avr_pin.h | 33 + .../src/platforms/avr/clockless_trinket.h | 602 ++ .../src/platforms/avr/compile_test.hpp | 43 + .../FastLED/src/platforms/avr/fastled_avr.h | 13 + .../FastLED/src/platforms/avr/fastpin_avr.h | 18 + .../platforms/avr/fastpin_avr_atmega4809.h | 114 + .../src/platforms/avr/fastpin_avr_legacy.h | 501 + .../platforms/avr/fastpin_avr_nano_every.h | 101 + .../FastLED/src/platforms/avr/fastspi_avr.h | 842 ++ .../esp01_1m/FastLED/src/platforms/avr/int.h | 17 + .../FastLED/src/platforms/avr/io_avr.h | 148 + .../src/platforms/avr/io_avr_lowlevel.h | 66 + .../src/platforms/avr/led_sysdefs_avr.h | 73 + .../platforms/chipsets_specialized_ws2812.h | 50 + .../FastLED/src/platforms/compile_test.cpp | 91 + .../FastLED/src/platforms/esp/32/README.md | 180 + .../src/platforms/esp/32/audio/audio.cpp | 14 + .../src/platforms/esp/32/audio/audio_impl.hpp | 38 + .../platforms/esp/32/audio/devices/i2s.hpp | 109 + .../esp/32/audio/devices/idf4_i2s_context.hpp | 122 + .../esp/32/audio/devices/idf5_i2s_context.hpp | 167 + .../src/platforms/esp/32/audio/sound_util.cpp | 66 + .../src/platforms/esp/32/audio/sound_util.h | 17 + .../src/platforms/esp/32/clock_cycles.h | 50 + .../platforms/esp/32/clockless_block_esp32.h | 205 + .../platforms/esp/32/clockless_i2s_esp32.h | 344 + .../esp/32/clockless_i2s_esp32s3.cpp | 202 + .../platforms/esp/32/clockless_i2s_esp32s3.h | 107 + .../platforms/esp/32/clockless_rmt_esp32.h | 41 + .../platforms/esp/32/clockless_spi_esp32.h | 73 + .../src/platforms/esp/32/esp_log_control.h | 77 + .../src/platforms/esp/32/fastled_esp32.h | 37 + .../src/platforms/esp/32/fastpin_esp32.h | 189 + .../src/platforms/esp/32/fastspi_esp32.h | 251 + .../src/platforms/esp/32/i2s/i2s_esp32dev.cpp | 565 ++ .../src/platforms/esp/32/i2s/i2s_esp32dev.h | 112 + .../esp/32/interrupts/INVESTIGATE.md | 220 + .../src/platforms/esp/32/interrupts/riscv.hpp | 855 ++ .../esp/32/interrupts/xtensa_lx6.hpp | 523 ++ .../esp/32/interrupts/xtensa_lx7.hpp | 511 + .../src/platforms/esp/32/led_sysdefs_esp32.h | 50 + .../esp/32/rmt_4/idf4_clockless_rmt_esp32.h | 109 + .../src/platforms/esp/32/rmt_4/idf4_rmt.cpp | 112 + .../src/platforms/esp/32/rmt_4/idf4_rmt.h | 166 + .../platforms/esp/32/rmt_4/idf4_rmt_impl.cpp | 973 ++ .../platforms/esp/32/rmt_4/idf4_rmt_impl.h | 179 + .../esp/32/rmt_5/README_WORKER_POOL.md | 205 + .../esp/32/rmt_5/idf5_clockless_rmt_esp32.h | 57 + .../src/platforms/esp/32/rmt_5/idf5_rmt.cpp | 94 + .../src/platforms/esp/32/rmt_5/idf5_rmt.h | 52 + .../src/platforms/esp/32/rmt_5/strip_rmt.cpp | 189 + .../src/platforms/esp/32/rmt_5/strip_rmt.h | 42 + .../platforms/esp/32/spi_ws2812/strip_spi.cpp | 267 + .../platforms/esp/32/spi_ws2812/strip_spi.h | 70 + .../FastLED/src/platforms/esp/8266/README.md | 39 + .../esp/8266/clockless_block_esp8266.h | 169 + .../platforms/esp/8266/clockless_esp8266.h | 166 + .../src/platforms/esp/8266/fastled_esp8266.h | 10 + .../src/platforms/esp/8266/fastpin_esp8266.h | 103 + .../src/platforms/esp/8266/fastspi_esp8266.h | 147 + .../platforms/esp/8266/led_sysdefs_esp8266.h | 38 + .../src/platforms/esp/8266/progmem_esp8266.h | 14 + .../FastLED/src/platforms/esp/README.md | 57 + .../src/platforms/esp/compile_test.hpp | 106 + .../FastLED/src/platforms/esp/esp_assert.h | 17 + .../FastLED/src/platforms/esp/esp_compile.hpp | 10 + .../FastLED/src/platforms/esp/esp_version.h | 61 + .../esp01_1m/FastLED/src/platforms/esp/int.h | 20 + .../FastLED/src/platforms/esp/io_esp.h | 46 + .../FastLED/src/platforms/esp/print_esp.h | 22 + .../src/platforms/fastspi_ardunio_core.h | 107 + .../src/platforms/fs_sdcard_arduino.hpp | 176 + .../esp01_1m/FastLED/src/platforms/int.h | 22 + .../FastLED/src/platforms/io_arduino.h | 47 + .../FastLED/src/platforms/io_native.h | 49 + .../esp01_1m/FastLED/src/platforms/io_null.h | 40 + .../FastLED/src/platforms/io_teensy.h | 62 + .../FastLED/src/platforms/io_teensy_lc.h | 89 + .../src/platforms/neopixelbus/README.md | 40 + .../src/platforms/neopixelbus/clockless.h | 418 + .../FastLED/src/platforms/null_progmem.h | 49 + .../FastLED/src/platforms/posix/README.md | 17 + .../src/platforms/posix/socket_posix.cpp | 152 + .../src/platforms/posix/socket_posix.h | 106 + .../FastLED/src/platforms/print_arduino.h | 25 + .../FastLED/src/platforms/print_native.h | 35 + .../esp01_1m/FastLED/src/platforms/readme.md | 233 + .../FastLED/src/platforms/shared/README.md | 33 + .../active_strip_data/active_strip_data.cpp | 130 + .../active_strip_data/active_strip_data.h | 68 + .../FastLED/src/platforms/shared/int.h | 17 + .../src/platforms/shared/ui/json/audio.cpp | 73 + .../src/platforms/shared/ui/json/audio.h | 54 + .../platforms/shared/ui/json/audio_buffer.h | 13 + .../shared/ui/json/audio_internal.cpp | 64 + .../platforms/shared/ui/json/audio_internal.h | 29 + .../src/platforms/shared/ui/json/button.cpp | 101 + .../src/platforms/shared/ui/json/button.h | 51 + .../src/platforms/shared/ui/json/checkbox.cpp | 96 + .../src/platforms/shared/ui/json/checkbox.h | 39 + .../platforms/shared/ui/json/description.cpp | 85 + .../platforms/shared/ui/json/description.h | 36 + .../src/platforms/shared/ui/json/dropdown.cpp | 166 + .../src/platforms/shared/ui/json/dropdown.h | 52 + .../src/platforms/shared/ui/json/help.cpp | 83 + .../src/platforms/shared/ui/json/help.h | 42 + .../platforms/shared/ui/json/json_console.cpp | 344 + .../platforms/shared/ui/json/json_console.h | 113 + .../platforms/shared/ui/json/number_field.cpp | 130 + .../platforms/shared/ui/json/number_field.h | 45 + .../src/platforms/shared/ui/json/readme.md | 183 + .../src/platforms/shared/ui/json/slider.cpp | 155 + .../src/platforms/shared/ui/json/slider.h | 45 + .../src/platforms/shared/ui/json/title.cpp | 89 + .../src/platforms/shared/ui/json/title.h | 43 + .../src/platforms/shared/ui/json/ui.cpp | 142 + .../FastLED/src/platforms/shared/ui/json/ui.h | 49 + .../platforms/shared/ui/json/ui_internal.cpp | 51 + .../platforms/shared/ui/json/ui_internal.h | 51 + .../platforms/shared/ui/json/ui_manager.cpp | 221 + .../src/platforms/shared/ui/json/ui_manager.h | 59 + .../FastLED/src/platforms/sketch_fake.hpp | 27 + .../FastLED/src/platforms/socket_platform.h | 33 + .../FastLED/src/platforms/stub/Arduino.cpp | 12 + .../FastLED/src/platforms/stub/Arduino.h | 256 + .../FastLED/src/platforms/stub/README.md | 30 + .../src/platforms/stub/clockless_stub.h | 9 + .../platforms/stub/clockless_stub_generic.h | 23 + .../src/platforms/stub/compile_test.hpp | 32 + .../FastLED/src/platforms/stub/fastled_stub.h | 18 + .../FastLED/src/platforms/stub/fastspi_stub.h | 10 + .../src/platforms/stub/fastspi_stub_generic.h | 28 + .../stub/generic/led_sysdefs_generic.hpp | 19 + .../src/platforms/stub/led_sysdefs_stub.cpp | 14 + .../src/platforms/stub/led_sysdefs_stub.h | 7 + .../platforms/stub/led_sysdefs_stub_generic.h | 65 + .../FastLED/src/platforms/stub/time_stub.cpp | 86 + .../FastLED/src/platforms/stub/time_stub.h | 18 + .../FastLED/src/platforms/stub_main.hpp | 12 + .../esp01_1m/FastLED/src/platforms/ui_defs.h | 50 + .../FastLED/src/platforms/wasm/README.md | 36 + .../src/platforms/wasm/active_strip_data.cpp | 33 + .../src/platforms/wasm/active_strip_data.h | 15 + .../FastLED/src/platforms/wasm/clockless.h | 59 + .../src/platforms/wasm/compiler/Arduino.h | 7 + .../platforms/wasm/compiler/build_flags.toml | 382 + .../src/platforms/wasm/compiler/index.css | 1669 ++++ .../src/platforms/wasm/compiler/index.html | 559 ++ .../src/platforms/wasm/compiler/index.js | 1073 +++ .../src/platforms/wasm/compiler/jsconfig.json | 36 + .../wasm/compiler/modules/audio_manager.js | 1755 ++++ .../modules/audio_worklet_processor.js | 126 + .../wasm/compiler/modules/column_validator.js | 567 ++ .../modules/fastled_async_controller.js | 578 ++ .../compiler/modules/fastled_callbacks.js | 344 + .../compiler/modules/fastled_debug_logger.js | 76 + .../wasm/compiler/modules/fastled_events.js | 376 + .../wasm/compiler/modules/graphics_manager.js | 518 ++ .../modules/graphics_manager_threejs.js | 965 ++ .../wasm/compiler/modules/graphics_utils.js | 285 + .../wasm/compiler/modules/json_inspector.css | 252 + .../wasm/compiler/modules/json_inspector.js | 258 + .../compiler/modules/layout_state_manager.js | 487 + .../compiler/modules/resize_coordinator.js | 416 + .../modules/ui_layout_placement_manager.js | 873 ++ .../wasm/compiler/modules/ui_manager.js | 2321 +++++ .../wasm/compiler/modules/ui_playback.js | 599 ++ .../wasm/compiler/modules/ui_recorder.js | 522 ++ .../wasm/compiler/modules/ui_recorder_test.js | 318 + .../wasm/compiler/modules/video_recorder.js | 652 ++ .../src/platforms/wasm/compiler/types.d.ts | 339 + .../src/platforms/wasm/engine_listener.cpp | 47 + .../src/platforms/wasm/engine_listener.h | 33 + .../src/platforms/wasm/entry_point.cpp | 171 + .../src/platforms/wasm/fastspi_wasm.cpp | 81 + .../FastLED/src/platforms/wasm/fastspi_wasm.h | 44 + .../FastLED/src/platforms/wasm/fs_wasm.cpp | 342 + .../FastLED/src/platforms/wasm/fs_wasm.h | 30 + .../esp01_1m/FastLED/src/platforms/wasm/int.h | 18 + .../FastLED/src/platforms/wasm/io_wasm.h | 31 + .../FastLED/src/platforms/wasm/js.cpp | 107 + .../esp01_1m/FastLED/src/platforms/wasm/js.h | 24 + .../FastLED/src/platforms/wasm/js_assert.h | 12 + .../src/platforms/wasm/js_bindings.cpp | 429 + .../FastLED/src/platforms/wasm/js_bindings.h | 89 + .../FastLED/src/platforms/wasm/js_fetch.cpp | 158 + .../FastLED/src/platforms/wasm/js_fetch.h | 46 + .../src/platforms/wasm/js_fetch_readme.md | 230 + .../FastLED/src/platforms/wasm/js_progmem.h | 9 + .../src/platforms/wasm/led_sysdefs_wasm.h | 54 + .../FastLED/src/platforms/wasm/print_wasm.h | 19 + .../FastLED/src/platforms/wasm/readme | 44 + .../platforms/wasm/socket_wasm.cpp.disabled | 915 ++ .../FastLED/src/platforms/wasm/socket_wasm.h | 305 + .../FastLED/src/platforms/wasm/strip_id_map.h | 127 + .../FastLED/src/platforms/wasm/timer.cpp | 114 + .../FastLED/src/platforms/wasm/types.d.ts | 155 + .../FastLED/src/platforms/wasm/ui.cpp | 216 + .../esp01_1m/FastLED/src/platforms/wasm/ui.h | 34 + .../src/platforms/wasm/wasm_compile.hpp | 10 + .../FastLED/src/platforms/win/README.md | 24 + .../FastLED/src/platforms/win/socket_win.cpp | 318 + .../FastLED/src/platforms/win/socket_win.h | 209 + .../esp01_1m/FastLED/src/power_mgt.cpp | 196 + .pio/libdeps/esp01_1m/FastLED/src/power_mgt.h | 106 + .pio/libdeps/esp01_1m/FastLED/src/rgbw.h | 23 + .../esp01_1m/FastLED/src/sensors/button.cpp | 120 + .../esp01_1m/FastLED/src/sensors/button.h | 102 + .../FastLED/src/sensors/digital_pin.cpp | 106 + .../FastLED/src/sensors/digital_pin.h | 39 + .../esp01_1m/FastLED/src/sensors/pir.cpp | 63 + .../esp01_1m/FastLED/src/sensors/pir.h | 75 + .pio/libdeps/esp01_1m/FastLED/src/simplex.cpp | 469 + .../src/third_party/arduinojson/json.h | 86 + .../src/third_party/arduinojson/json.hpp | 8222 +++++++++++++++++ .../FastLED/src/third_party/cq_kernel/LICENSE | 201 + .../src/third_party/cq_kernel/Makefile | 4 + .../src/third_party/cq_kernel/README.md | 80 + .../third_party/cq_kernel/_kiss_fft_guts.h | 160 + .../src/third_party/cq_kernel/cq_kernel.cpp | 154 + .../src/third_party/cq_kernel/cq_kernel.h | 110 + .../third_party/cq_kernel/example.c.disabled | 79 + .../cq_kernel/example_out_chart.png | Bin 0 -> 347414 bytes .../src/third_party/cq_kernel/kiss_fft.cpp | 423 + .../src/third_party/cq_kernel/kiss_fft.h | 145 + .../src/third_party/cq_kernel/kiss_fftr.cpp | 159 + .../src/third_party/cq_kernel/kiss_fftr.h | 54 + .../third_party/espressif/led_strip/readme | 28 + .../espressif/led_strip/src/enabled.h | 72 + .../espressif/led_strip/src/led_strip.h | 112 + .../espressif/led_strip/src/led_strip_api.c | 118 + .../led_strip/src/led_strip_interface.h | 99 + .../espressif/led_strip/src/led_strip_rmt.h | 48 + .../led_strip/src/led_strip_rmt_dev.c | 247 + .../led_strip/src/led_strip_rmt_encoder.c | 195 + .../led_strip/src/led_strip_rmt_encoder.h | 52 + .../espressif/led_strip/src/led_strip_spi.h | 47 + .../led_strip/src/led_strip_spi_dev.c | 302 + .../espressif/led_strip/src/led_strip_types.h | 85 + .../src/third_party/object_fled/readme | 6 + .../third_party/object_fled/src/ObjectFLED.h | 206 + .../third_party/object_fled/src/OjectFLED.cpp | 656 ++ .../yves/I2SClockLessLedDriveresp32s3/_readme | 3 + .../I2SClockLessLedDriveresp32s3/driver.h | 11 + .../src/I2SClockLessLedDriveresp32s3.h | 562 ++ .../src/___pixeltypes.h | 334 + .../FastLED/src/transpose8x1_noinline.cpp | 35 + .../FastLED/src/transpose8x1_noinline.h | 5 + .pio/libdeps/esp01_1m/FastLED/src/wiring.cpp | 242 + .pio/libdeps/esp01_1m/FastLED/test.py | 411 + .pio/libdeps/esp01_1m/FastLED/tests/AGENTS.md | 276 + .../esp01_1m/FastLED/tests/crash_handler.h | 34 + .../FastLED/tests/crash_handler_execinfo.h | 61 + .../FastLED/tests/crash_handler_libunwind.h | 68 + .../FastLED/tests/crash_handler_noop.h | 40 + .../FastLED/tests/crash_handler_win.h | 431 + .pio/libdeps/esp01_1m/FastLED/tests/doctest.h | 7108 ++++++++++++++ .../esp01_1m/FastLED/tests/doctest_main.cpp | 51 + .pio/libdeps/esp01_1m/FastLED/tests/readme | 3 + .../FastLED/tests/sketch_runner_demo.cpp | 63 + .pio/libdeps/esp01_1m/FastLED/tests/test.h | 121 + .../tests/test_active_strip_data_json.cpp | 124 + .../esp01_1m/FastLED/tests/test_algorithm.cpp | 1068 +++ .../FastLED/tests/test_alignment_asan.pdb | Bin 0 -> 8376320 bytes .../esp01_1m/FastLED/tests/test_allocator.cpp | 161 + .../FastLED/tests/test_allocator_inlined.cpp | 234 + .../tests/test_allocator_inlined_slab.cpp | 87 + .../FastLED/tests/test_allocator_slab.cpp | 146 + .../esp01_1m/FastLED/tests/test_async.cpp | 51 + .../esp01_1m/FastLED/tests/test_atomic.cpp | 16 + .../tests/test_audio_reactive_simple.cpp | 342 + .../esp01_1m/FastLED/tests/test_await.cpp | 191 + .../FastLED/tests/test_bitcast_asan.pdb | Bin 0 -> 8400896 bytes .../esp01_1m/FastLED/tests/test_bitset.cpp | 449 + .../FastLED/tests/test_bytestream.cpp | 261 + .../FastLED/tests/test_circular_buffer.cpp | 524 ++ .../esp01_1m/FastLED/tests/test_corkscrew.cpp | 658 ++ .../esp01_1m/FastLED/tests/test_dbg.cpp | 20 + .../esp01_1m/FastLED/tests/test_deque.cpp | 411 + .../esp01_1m/FastLED/tests/test_downscale.cpp | 127 + .../esp01_1m/FastLED/tests/test_easing.cpp | 474 + .../tests/test_example_compilation.cpp | 26 + .../esp01_1m/FastLED/tests/test_fastled.cpp | 21 + .../esp01_1m/FastLED/tests/test_fft.cpp | 142 + .../esp01_1m/FastLED/tests/test_fixed_set.cpp | 97 + .../tests/test_fl_string_comprehensive.cpp | 771 ++ .../esp01_1m/FastLED/tests/test_frame.cpp | 52 + .../FastLED/tests/test_frame_tracker.cpp | 27 + .../esp01_1m/FastLED/tests/test_function.cpp | 123 + .../esp01_1m/FastLED/tests/test_fx.cpp | 32 + .../FastLED/tests/test_fx2d_blend.cpp | 187 + .../esp01_1m/FastLED/tests/test_fx_engine.cpp | 210 + .../esp01_1m/FastLED/tests/test_fx_time.cpp | 60 + .../esp01_1m/FastLED/tests/test_grid.cpp | 24 + .../esp01_1m/FastLED/tests/test_hashmap.cpp | 219 + .../FastLED/tests/test_hashmap_lru.cpp | 151 + .../esp01_1m/FastLED/tests/test_hsv16.cpp | 393 + .../tests/test_hsv_conversion_accuracy.cpp | 250 + .../esp01_1m/FastLED/tests/test_intmap.cpp | 27 + .../esp01_1m/FastLED/tests/test_invoke.cpp | 280 + .../esp01_1m/FastLED/tests/test_istream.cpp | 686 ++ .../esp01_1m/FastLED/tests/test_json.cpp | 1362 +++ .../FastLED/tests/test_json_roundtrip.cpp | 41 + .../tests/test_line_simplification.cpp | 207 + .../esp01_1m/FastLED/tests/test_lut.cpp | 43 + .../FastLED/tests/test_malloc_hooks.cpp | 286 + .../esp01_1m/FastLED/tests/test_map.cpp | 450 + .../esp01_1m/FastLED/tests/test_map_range.cpp | 54 + .../esp01_1m/FastLED/tests/test_math.cpp | 268 + .../esp01_1m/FastLED/tests/test_memory.cpp | 172 + .../esp01_1m/FastLED/tests/test_mutex.cpp | 18 + .../FastLED/tests/test_noise_range.cpp | 255 + .../esp01_1m/FastLED/tests/test_ostream.cpp | 69 + .../esp01_1m/FastLED/tests/test_pixelview.cpp | 100 + .../tests/test_platformio_ini_typed.py | 486 + .../esp01_1m/FastLED/tests/test_point.cpp | 46 + .../esp01_1m/FastLED/tests/test_printf.cpp | 714 ++ .../FastLED/tests/test_priority_queue.cpp | 103 + .../esp01_1m/FastLED/tests/test_promise.cpp | 743 ++ .../esp01_1m/FastLED/tests/test_queue.cpp | 244 + .../esp01_1m/FastLED/tests/test_raster.cpp | 32 + .../esp01_1m/FastLED/tests/test_rbtree.cpp | 977 ++ .../FastLED/tests/test_rectangular_buffer.cpp | 205 + .../esp01_1m/FastLED/tests/test_screenmap.cpp | 160 + .../tests/test_screenmap_serialization.cpp | 51 + .../FastLED/tests/test_set_inlined.cpp | 245 + .../FastLED/tests/test_shared_ptr.cpp | 469 + .../FastLED/tests/test_sketch_runner.cpp | 73 + .../FastLED/tests/test_slab_multi_alloc.cpp | 124 + .../esp01_1m/FastLED/tests/test_slice.cpp | 615 ++ .../FastLED/tests/test_span_conversions.cpp | 153 + .../esp01_1m/FastLED/tests/test_splat.cpp | 151 + .../esp01_1m/FastLED/tests/test_str.cpp | 198 + .../FastLED/tests/test_strip_id_map.cpp | 61 + .../esp01_1m/FastLED/tests/test_strstream.cpp | 66 + .../esp01_1m/FastLED/tests/test_task.cpp | 276 + .../FastLED/tests/test_thread_local.cpp | 355 + .../esp01_1m/FastLED/tests/test_tile2x2.cpp | 242 + .../esp01_1m/FastLED/tests/test_time.cpp | 247 + .../esp01_1m/FastLED/tests/test_transform.cpp | 74 + .../FastLED/tests/test_transition_ramp.cpp | 72 + .../FastLED/tests/test_traverse_grid.cpp | 92 + .../esp01_1m/FastLED/tests/test_tuple.cpp | 37 + .../FastLED/tests/test_type_traits.cpp | 650 ++ .../esp01_1m/FastLED/tests/test_ui.cpp | 804 ++ .../esp01_1m/FastLED/tests/test_ui_help.cpp | 194 + .../FastLED/tests/test_ui_title_bug.cpp | 119 + .../FastLED/tests/test_unordered_set.cpp | 416 + .../esp01_1m/FastLED/tests/test_variant.cpp | 342 + .../esp01_1m/FastLED/tests/test_vector.cpp | 499 + .../esp01_1m/FastLED/tests/test_video.cpp | 232 + .../FastLED/tests/test_videofx_wrapper.cpp | 53 + .../esp01_1m/FastLED/tests/test_weak_ptr.cpp | 571 ++ .../esp01_1m/FastLED/tests/test_xymap.cpp | 178 + .../esp01_1m/FastLED/tests/test_xypath.cpp | 323 + .pio/libdeps/esp01_1m/FastLED/tidy.sh | 55 + .pio/libdeps/esp01_1m/FastLED/uno | 5 + .../esp01_1m/FastLED/validate_build_system.py | 57 + .pio/libdeps/esp01_1m/FastLED/wasm | 23 + .pio/libdeps/esp01_1m/integrity.dat | 2 + .vscode/extensions.json | 10 + .vscode/launch.json | 44 + src/main.cpp | 240 +- 1061 files changed, 225150 insertions(+), 96 deletions(-) create mode 100644 .pio/build/esp01_1m/idedata.json create mode 100644 .pio/build/project.checksum create mode 100644 .pio/libdeps/esp01_1m/ArtnetWifi/.gitignore create mode 100644 .pio/libdeps/esp01_1m/ArtnetWifi/.piopm create mode 100644 .pio/libdeps/esp01_1m/ArtnetWifi/LICENSE create mode 100644 .pio/libdeps/esp01_1m/ArtnetWifi/README.md create mode 100644 .pio/libdeps/esp01_1m/ArtnetWifi/examples/ArtnetWifiDebug/ArtnetWifiDebug.ino create mode 100644 .pio/libdeps/esp01_1m/ArtnetWifi/examples/ArtnetWifiDebug2/ArtnetWifiDebug2.ino create mode 100644 .pio/libdeps/esp01_1m/ArtnetWifi/examples/ArtnetWifiFastLED/ArtnetWifiFastLED.ino create mode 100644 .pio/libdeps/esp01_1m/ArtnetWifi/examples/ArtnetWifiNeoPixel/ArtnetWifiNeoPixel.ino create mode 100644 .pio/libdeps/esp01_1m/ArtnetWifi/examples/ArtnetWifiTransmit/ArtnetWifiTransmit.ino create mode 100644 .pio/libdeps/esp01_1m/ArtnetWifi/keywords.txt create mode 100644 .pio/libdeps/esp01_1m/ArtnetWifi/library.properties create mode 100644 .pio/libdeps/esp01_1m/ArtnetWifi/src/ArtnetWifi.cpp create mode 100644 .pio/libdeps/esp01_1m/ArtnetWifi/src/ArtnetWifi.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/.piopm create mode 100644 .pio/libdeps/esp01_1m/FastLED/ADVANCED_DEVELOPMENT.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/APA102.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/BACKGROUND_AGENT_TESTING_REQUIREMENTS.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/CLAUDE.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/CMakeLists.txt create mode 100644 .pio/libdeps/esp01_1m/FastLED/CONTRIBUTING.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/CORKSCREW.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/FEATURE.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/FEATURE_PACKAGE_JSON.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/FEATURE_RMT5_POOL.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/GEMINI.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/LAYOUT.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/LICENSE create mode 100644 .pio/libdeps/esp01_1m/FastLED/PORTING.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/QWEN.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/RELEASE.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/RMT.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/TESTCASE_INSTRUCTIONS.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/TODO.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/VIDEO.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/apa102fix.md create mode 100755 .pio/libdeps/esp01_1m/FastLED/clean create mode 100644 .pio/libdeps/esp01_1m/FastLED/code_of_conduct.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/component.mk create mode 100644 .pio/libdeps/esp01_1m/FastLED/cool_projects.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/debug_test.html create mode 100755 .pio/libdeps/esp01_1m/FastLED/dev.sh create mode 100644 .pio/libdeps/esp01_1m/FastLED/dev/dev.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/AGENTS.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/AdafruitBridge/AdafruitBridge.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/AnalogOutput/AnalogOutput.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/AnalogOutput/compat.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Animartrix/Animartrix.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Apa102/Apa102.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Apa102HD/Apa102HD.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Apa102HDOverride/Apa102HDOverride.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Async/Async.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Async/Async.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Audio/Audio.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Audio/advanced/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Audio/advanced/advanced.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Audio/simple/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Audio/simple/fx_audio.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Audio/simple/simple.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/AudioInput/AudioInput.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/AudioInput/AudioInput.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Blink/Blink.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/BlinkParallel/BlinkParallel.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Blur/Blur.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Blur2d/Blur2d.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Chromancer/Chromancer.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Chromancer/detail.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Chromancer/gary_woos_wled_port/gary_woos_wled_ledmap.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Chromancer/gary_woos_wled_port/presets.json create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Chromancer/gary_woos_wled_port/presets.min.json create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Chromancer/gen.py create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Chromancer/mapping.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Chromancer/output.json create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Chromancer/ripple.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Chromancer/screenmap.json.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/ColorBoost/ColorBoost.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/ColorBoost/ColorBoost.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/ColorPalette/ColorPalette.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/ColorTemperature/ColorTemperature.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/CompileTest/apollo3_test.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/CompileTest/arm_test.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/CompileTest/avr_test.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/CompileTest/wasm_test.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Corkscrew/Corkscrew.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Corkscrew/Corkscrew.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Cylon/Cylon.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/DemoReel100/DemoReel100.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Downscale/Downscale.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Downscale/Downscale.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Downscale/src/wave.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Downscale/src/wave.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Downscale/src/xypaths.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Downscale/src/xypaths.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/EaseInOut/EaseInOut.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/EaseInOut/EaseInOut.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Esp32S3I2SDemo/Esp32S3I2SDemo.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Esp32S3I2SDemo/Esp32S3I2SDemo.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/EspI2SDemo/EspI2SDemo.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/EspI2SDemo/EspI2SDemo.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FestivalStick/FestivalStick.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FestivalStick/curr.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FestivalStick/old.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Fire2012/Fire2012.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Fire2012WithPalette/Fire2012WithPalette.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Fire2023/Fire2023.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Fire2023/Fire2023.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FireCylinder/FireCylinder.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FireCylinder/FireCylinder.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FireMatrix/FireMatrix.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FireMatrix/FireMatrix.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FirstLight/FirstLight.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FxCylon/FxCylon.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FxDemoReel100/FxDemoReel100.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FxDemoReel100/defs.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FxEngine/FxEngine.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FxFire2012/FxFire2012.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FxGfx2Video/FxGfx2Video.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FxNoisePlusPalette/FxNoisePlusPalette.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FxNoiseRing/FxNoiseRing.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FxNoiseRing/FxNoiseRing.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FxNoiseRing/NOISE_RING_IDEAS.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FxNoiseRing/simple_timer.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FxPacifica/FxPacifica.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FxPacifica/defs.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FxPride2015/FxPride2015.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FxSdCard/FxSdCard.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FxSdCard/data/color_line_bubbles.rgb create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FxSdCard/data/readme.txt create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FxSdCard/data/screenmap.json create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FxSdCard/data/video.rgb create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FxTwinkleFox/FxTwinkleFox.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FxWater/FxWater.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FxWater/FxWater.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FxWave2d/FxWave2d.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FxWave2d/wavefx.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/FxWave2d/wavefx.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/HD107/HD107.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/HSVTest/HSVTest.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/HSVTest/HSVTest.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Json/Json.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Json/JsonSketch.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/LuminescentGrand.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/arduino/LedRopeTCL.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/arduino/LedRopeTCL.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/arduino/MIDI.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/arduino/MIDI.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/arduino/MIDI.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/arduino/buttons.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/arduino/midi_Defs.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/arduino/midi_Message.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/arduino/midi_Namespace.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/arduino/midi_Platform.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/arduino/midi_Settings.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/arduino/serialMIDI.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/arduino/ui_state.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/arduino/ui_state.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/shared/ApproximatingFunction.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/shared/Keyboard.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/shared/Keyboard.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/shared/Painter.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/shared/Painter.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/shared/color.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/shared/color.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/shared/color_mapper.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/shared/color_mapper.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/shared/defs.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/shared/dprint.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/shared/dprint.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/shared/framebuffer.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/shared/framebuffer.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/shared/led_layout_array.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/shared/led_layout_array.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/shared/led_rope_interface.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/shared/settings.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/shared/util.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/LuminescentGrand/shared/util.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Luminova/Luminova.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Luminova/Luminova.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Multiple/ArrayOfLedArrays/ArrayOfLedArrays.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Multiple/MirroringSample/MirroringSample.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Multiple/MultiArrays/MultiArrays.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Multiple/MultipleStripsInOneArray/MultipleStripsInOneArray.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Multiple/OctoWS2811Demo/OctoWS2811Demo.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Multiple/OctoWS2811Demo/OctoWS2811Demo.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Multiple/ParallelOutputDemo/ParallelOutputDemo.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Multiple/ParallelOutputDemo/ParallelOutputDemo.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/NetTest/NetTest.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/NetTest/NetTestReal.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Noise/Noise.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/NoisePlayground/NoisePlayground.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/NoisePlayground/NoisePlayground.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/NoisePlusPalette/NoisePlusPalette.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/NoisePlusPalette/NoisePlusPalette.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/OctoWS2811/OctoWS2811.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/OctoWS2811/OctoWS2811_impl.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Overclock/Overclock.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Pacifica/Pacifica.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/PinMode/PinMode.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Pintest/Pintest.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Pintest/Pintest.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Ports/PJRCSpectrumAnalyzer/PJRCSpectrumAnalyzer.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Ports/PJRCSpectrumAnalyzer/PJRCSpectrumAnalyzer.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Pride2015/Pride2015.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/RGBCalibrate/RGBCalibrate.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/RGBSetDemo/RGBSetDemo.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/RGBW/RGBW.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/RGBWEmulated/RGBWEmulated.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/SmartMatrix/SmartMatrix.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/SmartMatrix/SmartMatrixSketch.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/TeensyMassiveParallel/TeensyMassiveParallel.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/TeensyMassiveParallel/TeensyMassiveParallel.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/TeensyParallel/TeensyParallel.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/TwinkleFox/TwinkleFox.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/UITest/UITest.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/WS2816/WS2816.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/WasmScreenCoords/WasmScreenCoords.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Wave/Wave.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Wave/Wave.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Wave2d/Wave2d.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/Wave2d/Wave2d.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/XYMatrix/XYMatrix.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/XYPath/XYPath.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/XYPath/complex.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/XYPath/direct.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/XYPath/simple.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/XYPath/src/wave.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/XYPath/src/wave.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/XYPath/src/xypaths.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/XYPath/src/xypaths.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/wasm/wasm.ino create mode 100644 .pio/libdeps/esp01_1m/FastLED/examples/wasm/wasm_impl.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/fastled4.md create mode 100755 .pio/libdeps/esp01_1m/FastLED/generate_compile_commands.sh create mode 100755 .pio/libdeps/esp01_1m/FastLED/inspect create mode 100755 .pio/libdeps/esp01_1m/FastLED/install create mode 100644 .pio/libdeps/esp01_1m/FastLED/keywords.txt create mode 100644 .pio/libdeps/esp01_1m/FastLED/legacy_index.js create mode 100644 .pio/libdeps/esp01_1m/FastLED/library.json create mode 100644 .pio/libdeps/esp01_1m/FastLED/library.properties create mode 100644 .pio/libdeps/esp01_1m/FastLED/mcp_server.py create mode 100644 .pio/libdeps/esp01_1m/FastLED/pyproject.toml create mode 100644 .pio/libdeps/esp01_1m/FastLED/release_notes.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/scripts/all_source_build.py.disabled create mode 100644 .pio/libdeps/esp01_1m/FastLED/scripts/disable_all_source_build.py.disabled create mode 100644 .pio/libdeps/esp01_1m/FastLED/scripts/enhance-js-typing.py create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/CMakeLists.txt create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/FastLED.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/FastLED.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/_readme create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/bitswap.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/bitswap.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/chipsets.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/chsv.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/cled_controller.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/cled_controller.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/color.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/colorpalettes.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/colorpalettes.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/colorutils.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/controller.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/cpixel_ledcontroller.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/cpp_compat.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/crgb.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/crgb.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/crgb.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/dither_mode.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/dmx.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/eorder.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fastled_config.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fastled_delay.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fastled_progmem.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fastpin.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fastspi.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fastspi_bitbang.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fastspi_dma.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fastspi_nop.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fastspi_ref.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fastspi_types.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/_readme create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/algorithm.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/align.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/allocator.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/allocator.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/array.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/assert.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/async.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/async.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/atomic.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/audio.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/audio.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/audio_input.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/audio_input.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/audio_reactive.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/audio_reactive.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/avr_disallowed.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/bit_cast.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/bitset.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/bitset.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/bitset_dynamic.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/blur.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/blur.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/bytestream.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/bytestreammemory.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/bytestreammemory.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/circular_buffer.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/clamp.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/clear.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/colorutils.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/colorutils.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/colorutils_misc.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/comparators.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/compiler_control.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/convert.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/corkscrew.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/corkscrew.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/crgb_hsv16.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/cstddef.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/dbg.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/deprecated.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/deque.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/dll.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/downscale.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/downscale.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/draw_mode.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/draw_visitor.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/ease.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/ease.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/engine_events.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/engine_events.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/eorder.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/export.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/fetch.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/fetch.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/fft.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/fft.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/fft_impl.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/fft_impl.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/file_system.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/file_system.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/fill.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/fill.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/five_bit_hd_gamma.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/force_inline.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/function.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/function_list.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/functional.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/gamma.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/gamma.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/geometry.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/gradient.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/gradient.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/grid.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/has_include.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/hash.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/hash_map.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/hash_map_lru.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/hash_set.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/hsv.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/hsv16.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/hsv16.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/id_tracker.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/id_tracker.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/initializer_list.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/inplacenew.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/insert_result.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/int.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/io.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/io.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/iostream.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/istream.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/istream.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/json.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/json.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/leds.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/leds.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/line_simplification.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/line_simplification.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/lut.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/map.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/map_range.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/math.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/math_macros.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/memfill.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/memory.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/move.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/mutex.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/namespace.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/noise_woryley.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/noise_woryley.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/optional.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/ostream.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/ostream.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/pair.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/point.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/printf.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/priority_queue.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/promise.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/promise_result.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/ptr.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/ptr.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/ptr_impl.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/queue.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/random.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/random.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/range_access.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/raster.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/raster_sparse.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/raster_sparse.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/rbtree.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/rectangular_draw_buffer.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/rectangular_draw_buffer.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/referent.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/referent.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/register.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/rgbw.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/rgbw.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/scoped_array.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/scoped_ptr.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/screenmap.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/screenmap.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/set.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/shared_ptr.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/sin32.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/sin32.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/singleton.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/sketch_macros.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/slice.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/span.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/splat.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/splat.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/sstream.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/stdint.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/str.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/str.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/str_ui.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/string.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/strstream.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/strstream.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/stub_main.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/supersample.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/task.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/task.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/template_magic.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/thread.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/thread_local.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/tile2x2.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/tile2x2.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/time.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/time.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/time_alpha.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/time_alpha.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/trace.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/transform.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/transform.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/traverse_grid.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/tuple.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/type_traits.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/type_traits.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/types.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/ui.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/ui.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/ui_impl.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/unique_ptr.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/unordered_set.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/unused.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/upscale.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/upscale.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/utility.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/variant.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/vector.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/virtual_if_not_avr.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/warn.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/wave_simulation.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/wave_simulation.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/wave_simulation_real.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/wave_simulation_real.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/weak_ptr.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/xmap.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/xmap.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/xymap.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/xymap.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/xypath.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/xypath.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/xypath_impls.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/xypath_impls.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/xypath_renderer.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fl/xypath_renderer.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fonts/_readme create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fonts/console_font_4x6.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fonts/console_font_5x12.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fonts/console_font_5x8.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fonts/console_font_6x8.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fonts/console_font_7x9.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/1d/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/1d/cylon.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/1d/demoreel100.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/1d/fire2012.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/1d/noisewave.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/1d/pacifica.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/1d/pride2015.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/1d/twinklefox.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/2d/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/2d/animartrix.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/2d/animartrix_detail.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/2d/blend.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/2d/blend.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/2d/luminova.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/2d/luminova.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/2d/noisepalette.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/2d/noisepalette.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/2d/redsquare.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/2d/scale_up.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/2d/scale_up.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/2d/wave.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/2d/wave.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/detail/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/detail/draw_context.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/detail/fx_compositor.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/detail/fx_layer.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/detail/fx_layer.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/detail/transition.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/frame.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/frame.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/fx.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/fx1d.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/fx2d.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/fx_engine.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/fx_engine.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/readme create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/time.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/time.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/video.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/video.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/video/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/video/frame_interpolator.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/video/frame_interpolator.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/video/frame_tracker.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/video/frame_tracker.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/video/pixel_stream.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/video/pixel_stream.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/video/video_impl.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/fx/video/video_impl.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/hsv2rgb.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/hsv2rgb.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/led_sysdefs.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/lib8tion.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/lib8tion.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/lib8tion/config.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/lib8tion/intmap.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/lib8tion/lib8static.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/lib8tion/math8.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/lib8tion/memmove.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/lib8tion/qfx.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/lib8tion/random8.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/lib8tion/scale8.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/lib8tion/trig8.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/lib8tion/types.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/noise.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/noise.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/noisegen.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/pixel_controller.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/pixel_iterator.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/pixelset.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/pixeltypes.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/adafruit/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/adafruit/clockless.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/adafruit/clockless.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/adafruit/clockless_fake.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/adafruit/clockless_real.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/adafruit/driver.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/apollo3/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/apollo3/clockless_apollo3.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/apollo3/compile_test.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/apollo3/fastled_apollo3.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/apollo3/fastpin_apollo3.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/apollo3/fastspi_apollo3.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/apollo3/led_sysdefs_apollo3.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arduino/audio_input.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/arm_compile.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/common/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/common/m0clockless.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/compile_test.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/d21/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/d21/clockless_arm_d21.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/d21/fastled_arm_d21.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/d21/fastpin_arm_d21.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/d21/led_sysdefs_arm_d21.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/d51/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/d51/README.txt create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/d51/clockless_arm_d51.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/d51/fastled_arm_d51.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/d51/fastpin_arm_d51.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/d51/led_sysdefs_arm_d51.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/giga/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/giga/armpin.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/giga/clockless_arm_giga.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/giga/fastled_arm_giga.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/giga/fastpin_arm_giga.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/giga/led_sysdef_arm_giga.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/int.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/is_arm.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/k20/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/k20/clockless_arm_k20.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/k20/clockless_block_arm_k20.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/k20/clockless_objectfled.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/k20/clockless_objectfled.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/k20/fastled_arm_k20.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/k20/fastpin_arm_k20.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/k20/fastspi_arm_k20.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/k20/led_sysdefs_arm_k20.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/k20/octows2811_controller.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/k20/smartmatrix_t3.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/k20/ws2812serial_controller.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/k66/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/k66/clockless_arm_k66.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/k66/clockless_block_arm_k66.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/k66/fastled_arm_k66.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/k66/fastpin_arm_k66.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/k66/fastspi_arm_k66.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/k66/led_sysdefs_arm_k66.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/kl26/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/kl26/clockless_arm_kl26.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/kl26/fastled_arm_kl26.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/kl26/fastpin_arm_kl26.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/kl26/fastspi_arm_kl26.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/kl26/led_sysdefs_arm_kl26.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/mgm240/clockless_arm_mgm240.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/mgm240/fastled_arm_mgm240.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/mgm240/fastpin_arm_mgm240.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/mgm240/fastpin_arm_mgm240.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/mgm240/led_sysdefs_arm_mgm240.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/mxrt1062/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/mxrt1062/block_clockless_arm_mxrt1062.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/mxrt1062/clockless_arm_mxrt1062.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/mxrt1062/fastled_arm_mxrt1062.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/mxrt1062/fastpin_arm_mxrt1062.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/mxrt1062/fastspi_arm_mxrt1062.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/mxrt1062/led_sysdefs_arm_mxrt1062.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/mxrt1062/octows2811_controller.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/nrf51/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/nrf51/clockless_arm_nrf51.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/nrf51/fastled_arm_nrf51.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/nrf51/fastpin_arm_nrf51.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/nrf51/fastspi_arm_nrf51.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/nrf51/led_sysdefs_arm_nrf51.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/nrf52/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/nrf52/arbiter_nrf52.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/nrf52/clockless_arm_nrf52.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/nrf52/fastled_arm_nrf52.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/nrf52/fastpin_arm_nrf52.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/nrf52/fastpin_arm_nrf52_variants.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/nrf52/fastspi_arm_nrf52.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/nrf52/led_sysdefs_arm_nrf52.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/renesas/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/renesas/clockless_arm_renesas.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/renesas/fastled_arm_renesas.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/renesas/fastpin_arm_renesas.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/renesas/led_sysdef_arm_renesas.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/rp2040/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/rp2040/clockless_arm_rp2040.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/rp2040/fastled_arm_rp2040.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/rp2040/fastpin_arm_rp2040.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/rp2040/led_sysdefs_arm_rp2040.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/rp2040/pio_asm.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/rp2040/pio_gen.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/sam/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/sam/clockless_arm_sam.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/sam/clockless_block_arm_sam.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/sam/fastled_arm_sam.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/sam/fastpin_arm_sam.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/sam/fastspi_arm_sam.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/sam/led_sysdefs_arm_sam.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/stm32/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/stm32/armpin.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/stm32/clockless_arm_stm32.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/stm32/cm3_regs.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/stm32/fastled_arm_stm32.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/stm32/fastpin_arm_stm32.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/stm32/fastpin_arm_stm_legacy.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/stm32/fastpin_arm_stm_new.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/arm/stm32/led_sysdefs_arm_stm32.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/assert_defs.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/audio.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/audio_input_null.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/avr/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/avr/avr_compile.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/avr/avr_millis_timer0_impl_source.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/avr/avr_millis_timer_null_counter.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/avr/avr_millis_timer_source.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/avr/avr_pin.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/avr/clockless_trinket.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/avr/compile_test.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/avr/fastled_avr.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/avr/fastpin_avr.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/avr/fastpin_avr_atmega4809.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/avr/fastpin_avr_legacy.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/avr/fastpin_avr_nano_every.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/avr/fastspi_avr.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/avr/int.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/avr/io_avr.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/avr/io_avr_lowlevel.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/avr/led_sysdefs_avr.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/chipsets_specialized_ws2812.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/compile_test.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/audio/audio.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/audio/audio_impl.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/audio/devices/i2s.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/audio/devices/idf4_i2s_context.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/audio/devices/idf5_i2s_context.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/audio/sound_util.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/audio/sound_util.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/clock_cycles.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/clockless_block_esp32.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/clockless_i2s_esp32.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/clockless_i2s_esp32s3.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/clockless_i2s_esp32s3.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/clockless_rmt_esp32.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/clockless_spi_esp32.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/esp_log_control.h create mode 100755 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/fastled_esp32.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/fastpin_esp32.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/fastspi_esp32.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/i2s/i2s_esp32dev.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/i2s/i2s_esp32dev.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/interrupts/INVESTIGATE.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/interrupts/riscv.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/interrupts/xtensa_lx6.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/interrupts/xtensa_lx7.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/led_sysdefs_esp32.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/rmt_4/idf4_clockless_rmt_esp32.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/rmt_4/idf4_rmt.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/rmt_4/idf4_rmt.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/rmt_4/idf4_rmt_impl.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/rmt_4/idf4_rmt_impl.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/rmt_5/README_WORKER_POOL.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/rmt_5/idf5_clockless_rmt_esp32.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/rmt_5/idf5_rmt.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/rmt_5/idf5_rmt.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/rmt_5/strip_rmt.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/rmt_5/strip_rmt.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/spi_ws2812/strip_spi.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/32/spi_ws2812/strip_spi.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/8266/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/8266/clockless_block_esp8266.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/8266/clockless_esp8266.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/8266/fastled_esp8266.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/8266/fastpin_esp8266.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/8266/fastspi_esp8266.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/8266/led_sysdefs_esp8266.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/8266/progmem_esp8266.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/compile_test.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/esp_assert.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/esp_compile.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/esp_version.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/int.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/io_esp.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/esp/print_esp.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/fastspi_ardunio_core.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/fs_sdcard_arduino.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/int.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/io_arduino.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/io_native.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/io_null.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/io_teensy.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/io_teensy_lc.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/neopixelbus/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/neopixelbus/clockless.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/null_progmem.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/posix/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/posix/socket_posix.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/posix/socket_posix.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/print_arduino.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/print_native.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/readme.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/active_strip_data/active_strip_data.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/active_strip_data/active_strip_data.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/int.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/audio.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/audio.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/audio_buffer.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/audio_internal.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/audio_internal.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/button.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/button.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/checkbox.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/checkbox.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/description.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/description.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/dropdown.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/dropdown.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/help.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/help.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/json_console.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/json_console.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/number_field.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/number_field.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/readme.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/slider.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/slider.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/title.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/title.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/ui.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/ui.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/ui_internal.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/ui_internal.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/ui_manager.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/shared/ui/json/ui_manager.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/sketch_fake.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/socket_platform.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/stub/Arduino.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/stub/Arduino.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/stub/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/stub/clockless_stub.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/stub/clockless_stub_generic.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/stub/compile_test.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/stub/fastled_stub.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/stub/fastspi_stub.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/stub/fastspi_stub_generic.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/stub/generic/led_sysdefs_generic.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/stub/led_sysdefs_stub.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/stub/led_sysdefs_stub.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/stub/led_sysdefs_stub_generic.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/stub/time_stub.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/stub/time_stub.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/stub_main.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/ui_defs.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/active_strip_data.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/active_strip_data.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/clockless.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/Arduino.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/build_flags.toml create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/index.css create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/index.html create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/index.js create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/jsconfig.json create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/modules/audio_manager.js create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/modules/audio_worklet_processor.js create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/modules/column_validator.js create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/modules/fastled_async_controller.js create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/modules/fastled_callbacks.js create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/modules/fastled_debug_logger.js create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/modules/fastled_events.js create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/modules/graphics_manager.js create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/modules/graphics_manager_threejs.js create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/modules/graphics_utils.js create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/modules/json_inspector.css create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/modules/json_inspector.js create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/modules/layout_state_manager.js create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/modules/resize_coordinator.js create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/modules/ui_layout_placement_manager.js create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/modules/ui_manager.js create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/modules/ui_playback.js create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/modules/ui_recorder.js create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/modules/ui_recorder_test.js create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/modules/video_recorder.js create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/compiler/types.d.ts create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/engine_listener.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/engine_listener.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/entry_point.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/fastspi_wasm.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/fastspi_wasm.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/fs_wasm.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/fs_wasm.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/int.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/io_wasm.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/js.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/js.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/js_assert.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/js_bindings.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/js_bindings.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/js_fetch.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/js_fetch.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/js_fetch_readme.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/js_progmem.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/led_sysdefs_wasm.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/print_wasm.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/readme create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/socket_wasm.cpp.disabled create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/socket_wasm.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/strip_id_map.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/timer.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/types.d.ts create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/ui.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/ui.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/wasm/wasm_compile.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/win/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/win/socket_win.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/platforms/win/socket_win.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/power_mgt.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/power_mgt.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/rgbw.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/sensors/button.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/sensors/button.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/sensors/digital_pin.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/sensors/digital_pin.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/sensors/pir.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/sensors/pir.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/simplex.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/arduinojson/json.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/arduinojson/json.hpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/cq_kernel/LICENSE create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/cq_kernel/Makefile create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/cq_kernel/README.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/cq_kernel/_kiss_fft_guts.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/cq_kernel/cq_kernel.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/cq_kernel/cq_kernel.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/cq_kernel/example.c.disabled create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/cq_kernel/example_out_chart.png create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/cq_kernel/kiss_fft.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/cq_kernel/kiss_fft.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/cq_kernel/kiss_fftr.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/cq_kernel/kiss_fftr.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/espressif/led_strip/readme create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/espressif/led_strip/src/enabled.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/espressif/led_strip/src/led_strip.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/espressif/led_strip/src/led_strip_api.c create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/espressif/led_strip/src/led_strip_interface.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/espressif/led_strip/src/led_strip_rmt.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/espressif/led_strip/src/led_strip_rmt_dev.c create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/espressif/led_strip/src/led_strip_rmt_encoder.c create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/espressif/led_strip/src/led_strip_rmt_encoder.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/espressif/led_strip/src/led_strip_spi.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/espressif/led_strip/src/led_strip_spi_dev.c create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/espressif/led_strip/src/led_strip_types.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/object_fled/readme create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/object_fled/src/ObjectFLED.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/object_fled/src/OjectFLED.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/yves/I2SClockLessLedDriveresp32s3/_readme create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/yves/I2SClockLessLedDriveresp32s3/driver.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/yves/I2SClockLessLedDriveresp32s3/src/I2SClockLessLedDriveresp32s3.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/third_party/yves/I2SClockLessLedDriveresp32s3/src/___pixeltypes.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/transpose8x1_noinline.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/transpose8x1_noinline.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/src/wiring.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/test.py create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/AGENTS.md create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/crash_handler.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/crash_handler_execinfo.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/crash_handler_libunwind.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/crash_handler_noop.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/crash_handler_win.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/doctest.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/doctest_main.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/readme create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/sketch_runner_demo.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test.h create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_active_strip_data_json.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_algorithm.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_alignment_asan.pdb create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_allocator.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_allocator_inlined.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_allocator_inlined_slab.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_allocator_slab.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_async.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_atomic.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_audio_reactive_simple.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_await.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_bitcast_asan.pdb create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_bitset.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_bytestream.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_circular_buffer.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_corkscrew.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_dbg.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_deque.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_downscale.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_easing.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_example_compilation.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_fastled.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_fft.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_fixed_set.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_fl_string_comprehensive.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_frame.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_frame_tracker.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_function.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_fx.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_fx2d_blend.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_fx_engine.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_fx_time.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_grid.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_hashmap.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_hashmap_lru.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_hsv16.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_hsv_conversion_accuracy.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_intmap.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_invoke.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_istream.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_json.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_json_roundtrip.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_line_simplification.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_lut.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_malloc_hooks.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_map.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_map_range.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_math.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_memory.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_mutex.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_noise_range.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_ostream.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_pixelview.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_platformio_ini_typed.py create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_point.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_printf.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_priority_queue.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_promise.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_queue.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_raster.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_rbtree.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_rectangular_buffer.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_screenmap.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_screenmap_serialization.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_set_inlined.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_shared_ptr.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_sketch_runner.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_slab_multi_alloc.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_slice.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_span_conversions.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_splat.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_str.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_strip_id_map.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_strstream.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_task.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_thread_local.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_tile2x2.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_time.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_transform.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_transition_ramp.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_traverse_grid.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_tuple.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_type_traits.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_ui.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_ui_help.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_ui_title_bug.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_unordered_set.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_variant.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_vector.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_video.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_videofx_wrapper.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_weak_ptr.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_xymap.cpp create mode 100644 .pio/libdeps/esp01_1m/FastLED/tests/test_xypath.cpp create mode 100755 .pio/libdeps/esp01_1m/FastLED/tidy.sh create mode 100755 .pio/libdeps/esp01_1m/FastLED/uno create mode 100644 .pio/libdeps/esp01_1m/FastLED/validate_build_system.py create mode 100755 .pio/libdeps/esp01_1m/FastLED/wasm create mode 100644 .pio/libdeps/esp01_1m/integrity.dat create mode 100644 .vscode/extensions.json create mode 100644 .vscode/launch.json diff --git a/.pio/build/esp01_1m/idedata.json b/.pio/build/esp01_1m/idedata.json new file mode 100644 index 0000000..e232763 --- /dev/null +++ b/.pio/build/esp01_1m/idedata.json @@ -0,0 +1 @@ +{"build_type": "release", "env_name": "esp01_1m", "libsource_dirs": ["/home/linus/Gitea/fahnen_esp32/lib", "/home/linus/Gitea/fahnen_esp32/.pio/libdeps/esp01_1m", "/home/linus/.platformio/lib", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries"], "defines": ["PLATFORMIO=60118", "ESP8266", "ARDUINO_ARCH_ESP8266", "ARDUINO_ESP8266_ESP01", "F_CPU=80000000L", "__ets__", "ICACHE_FLASH", "_GNU_SOURCE", "ARDUINO=10805", "ARDUINO_BOARD=\"PLATFORMIO_ESP01_1M\"", "ARDUINO_BOARD_ID=\"esp01_1m\"", "FLASHMODE_QIO", "LWIP_OPEN_SRC", "NONOSDK22x_190703=1", "TCP_MSS=536", "LWIP_FEATURES=1", "LWIP_IPV6=0", "VTABLES_IN_FLASH", "MMU_IRAM_SIZE=0x8000", "MMU_ICACHE_SIZE=0x8000"], "includes": {"build": ["/home/linus/Gitea/fahnen_esp32/include", "/home/linus/Gitea/fahnen_esp32/src", "/home/linus/Gitea/fahnen_esp32/.pio/libdeps/esp01_1m/FastLED/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/SD/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/SDFS/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/ESP8266SdFat/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/I2S/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/SPI", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/SoftwareSerial/src", "/home/linus/Gitea/fahnen_esp32/.pio/libdeps/esp01_1m/ArtnetWifi/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/ESP8266WiFi/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/tools/sdk/include", "/home/linus/.platformio/packages/framework-arduinoespressif8266/cores/esp8266", "/home/linus/.platformio/packages/toolchain-xtensa/include", "/home/linus/.platformio/packages/framework-arduinoespressif8266/tools/sdk/lwip2/include", "/home/linus/.platformio/packages/framework-arduinoespressif8266/variants/generic"], "compatlib": ["/home/linus/Gitea/fahnen_esp32/.pio/libdeps/esp01_1m/ArtnetWifi/src", "/home/linus/Gitea/fahnen_esp32/.pio/libdeps/esp01_1m/FastLED/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/SD/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/SDFS/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/ESP8266SdFat/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/I2S/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/SPI", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/SoftwareSerial/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/ESP8266SdFat/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/ESP8266WiFi/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/I2S/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/SD/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/SDFS/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/SPI", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/SoftwareSerial/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/ArduinoOTA", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/DNSServer/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/EEPROM", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/ESP8266AVRISP/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/ESP8266HTTPClient/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/ESP8266HTTPUpdateServer/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/ESP8266LLMNR", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/ESP8266NetBIOS", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/ESP8266SSDP", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/ESP8266WebServer/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/ESP8266WiFiMesh/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/ESP8266httpUpdate/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/ESP8266mDNS/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/Ethernet/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/FSTools", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/GDBStub/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/Hash/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/LittleFS/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/Netdump/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/SPISlave/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/Servo/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/TFT_Touch_Shield_V2", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/Ticker/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/Wire", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/esp8266/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/lwIP_Ethernet/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/lwIP_PPP/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/lwIP_enc28j60/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/lwIP_w5100/src", "/home/linus/.platformio/packages/framework-arduinoespressif8266/libraries/lwIP_w5500/src"], "toolchain": ["/home/linus/.platformio/packages/toolchain-xtensa/xtensa-lx106-elf/include/c++/10.3.0", "/home/linus/.platformio/packages/toolchain-xtensa/xtensa-lx106-elf/include/c++/10.3.0/xtensa-lx106-elf", "/home/linus/.platformio/packages/toolchain-xtensa/lib/gcc/xtensa-lx106-elf/10.3.0/include-fixed", "/home/linus/.platformio/packages/toolchain-xtensa/lib/gcc/xtensa-lx106-elf/10.3.0/include", "/home/linus/.platformio/packages/toolchain-xtensa/xtensa-lx106-elf/include"]}, "cc_flags": ["-std=gnu17", "-Wpointer-arith", "-Wno-implicit-function-declaration", "-Wl,-EL", "-fno-inline-functions", "-nostdlib", "-Os", "-mlongcalls", "-mtext-section-literals", "-falign-functions=4", "-U__STRICT_ANSI__", "-ffunction-sections", "-fdata-sections", "-Wall", "-Werror=return-type", "-free", "-fipa-pta"], "cxx_flags": ["-fno-rtti", "-std=gnu++17", "-fno-exceptions", "-Os", "-mlongcalls", "-mtext-section-literals", "-falign-functions=4", "-U__STRICT_ANSI__", "-ffunction-sections", "-fdata-sections", "-Wall", "-Werror=return-type", "-free", "-fipa-pta"], "cc_path": "/home/linus/.platformio/packages/toolchain-xtensa/bin/xtensa-lx106-elf-gcc", "cxx_path": "/home/linus/.platformio/packages/toolchain-xtensa/bin/xtensa-lx106-elf-g++", "gdb_path": "/home/linus/.platformio/packages/toolchain-xtensa/bin/xtensa-lx106-elf-gdb", "prog_path": "/home/linus/Gitea/fahnen_esp32/.pio/build/esp01_1m/firmware.elf", "svd_path": null, "compiler_type": "gcc", "targets": [{"name": "buildfs", "title": "Build Filesystem Image", "description": null, "group": "Platform"}, {"name": "size", "title": "Program Size", "description": "Calculate program size", "group": "Platform"}, {"name": "upload", "title": "Upload", "description": null, "group": "Platform"}, {"name": "uploadfs", "title": "Upload Filesystem Image", "description": null, "group": "Platform"}, {"name": "uploadfsota", "title": "Upload Filesystem Image OTA", "description": null, "group": "Platform"}, {"name": "erase", "title": "Erase Flash", "description": null, "group": "Platform"}], "extra": {"flash_images": []}} \ No newline at end of file diff --git a/.pio/build/project.checksum b/.pio/build/project.checksum new file mode 100644 index 0000000..a22f68d --- /dev/null +++ b/.pio/build/project.checksum @@ -0,0 +1 @@ +accde1a8736a436d123393d8d11a0e7301cdf78d \ No newline at end of file diff --git a/.pio/libdeps/esp01_1m/ArtnetWifi/.gitignore b/.pio/libdeps/esp01_1m/ArtnetWifi/.gitignore new file mode 100644 index 0000000..69d73a9 --- /dev/null +++ b/.pio/libdeps/esp01_1m/ArtnetWifi/.gitignore @@ -0,0 +1,23 @@ +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app + +*~ diff --git a/.pio/libdeps/esp01_1m/ArtnetWifi/.piopm b/.pio/libdeps/esp01_1m/ArtnetWifi/.piopm new file mode 100644 index 0000000..83c3802 --- /dev/null +++ b/.pio/libdeps/esp01_1m/ArtnetWifi/.piopm @@ -0,0 +1 @@ +{"type": "library", "name": "ArtnetWifi", "version": "1.6.2", "spec": {"owner": "rstephan", "id": 6328, "name": "ArtnetWifi", "requirements": null, "uri": null}} \ No newline at end of file diff --git a/.pio/libdeps/esp01_1m/ArtnetWifi/LICENSE b/.pio/libdeps/esp01_1m/ArtnetWifi/LICENSE new file mode 100644 index 0000000..2813452 --- /dev/null +++ b/.pio/libdeps/esp01_1m/ArtnetWifi/LICENSE @@ -0,0 +1,25 @@ +The MIT License (MIT) + +Copyright (c) 2014 Nathanaël Lécaudé +https://github.com/natcl/Artnet, http://forum.pjrc.com/threads/24688-Artnet-to-OctoWS2811 + +Copyright (c) 2016 Stephan Ruloff +https://github.com/rstephan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/.pio/libdeps/esp01_1m/ArtnetWifi/README.md b/.pio/libdeps/esp01_1m/ArtnetWifi/README.md new file mode 100644 index 0000000..529939c --- /dev/null +++ b/.pio/libdeps/esp01_1m/ArtnetWifi/README.md @@ -0,0 +1,91 @@ +# ArtnetWifi + +[![arduino-library-badge](https://www.ardu-badge.com/badge/ArtnetWifi.svg?)](https://www.ardu-badge.com/ArtnetWifi) + +An Art-Net library for Wifi-Arduino's. Tested on ESP8266, ESP32, Pi Pico W, WiFi101 (e.g. MKR1000) and WiFiNINA (e.g. NANO 33 IoT) devices. + +Note: this library assumes you are using a wifi module. + +Based on https://github.com/natcl/Artnet [master](https://github.com/natcl/Artnet/archive/master.zip) + +## Installation + +### Arduino IDE + +Navigate to **Sketch** -> **Include Library** -> **Manage Libraries...**, +then search for `ArtnetWifi` and the library will show up. Click **Install** and the library is ready to use. + +### PlatformIO Core (CLI) + +``` +$ pio init --board nodemcuv2 +$ pio lib install artnetwifi +``` + +### Manual + +Place this in your `~/Documents/Arduino/libraries` folder. + +## Examples + +Different examples are provided, here is a summary of what each example does. + +### ArtnetWifiDebug + +Simple test for WiFi, serial and Art-Net. + +Example output (Serial Monitor, 115200 Baud): +``` +DMX: Univ: 0, Seq: 0, Data (48): 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... +``` + +If this example is not working, don't try anything else! + +### ArtnetWifiDebug2 (ArtnetWifiDebug with C++11 style) + +See **ArtnetWifiDebug**. + +**Note:** Not all controllers support this type of code! + +### ArtnetWifiFastLED + +This example will receive multiple universes via Art-Net and control a strip of WS2812 LEDs via the [FastLED library](https://github.com/FastLED/FastLED). It is similar to the NeoPixel example but it will work on the ESP32 and the ESP8266 controller as well. + +### ArtnetWifiNeoPixel + +This example will receive multiple universes via Art-Net and control a strip of WS2811 LEDs via Adafruit's [NeoPixel library](https://github.com/adafruit/Adafruit_NeoPixel). + +### ArtnetWifiTransmit + +This is a simple transmitter. Send 3 byte over into the Art-Net, to make a RGB light ramp-up in white. + + +### Notes + +The examples `FastLED` and `NeoPixel` can utilize many universes to light up hundreds of LEDs. +Normaly Art-Net frame can handle 512 bytes. Divide this by 3 colors, so a single universe can +have 170.66 LEDs. For easy access, only 170 LEDs are used. The last 2 byte per universe are "lost". + +**Example:** 240 LEDs, 720 Byte, 2 Universes + +**Universe "1"** + +|Byte | 1| 2| 3|...|508|509|510|511|512| +|:----|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|Color| R| G| B|...| R| G| B| x | x | +|LED | 1| 1| 1|...|170|170|170| | | + +**Universe "2"** + +|Byte | 1| 2| 3|...|208|209|210| +|:----|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|Color| R| G| B|...| R| G| B| +|LED |171|171|171|...|240|240|240| + +*You only have to send 510 byte DMX-data per frame. Extra byte(s) at the end will be ignored!* + +# Art-Net + +Art-Net(tm) is a trademark of Artistic Licence Holdings Ltd. The Art-Net protocol and associated documentation is copyright Artistic Licence Holdings Ltd. + +[Art-Net](http://www.artisticlicence.com/WebSiteMaster/User%20Guides/art-net.pdf) diff --git a/.pio/libdeps/esp01_1m/ArtnetWifi/examples/ArtnetWifiDebug/ArtnetWifiDebug.ino b/.pio/libdeps/esp01_1m/ArtnetWifi/examples/ArtnetWifiDebug/ArtnetWifiDebug.ino new file mode 100644 index 0000000..e815cce --- /dev/null +++ b/.pio/libdeps/esp01_1m/ArtnetWifi/examples/ArtnetWifiDebug/ArtnetWifiDebug.ino @@ -0,0 +1,95 @@ +/* +Example, transmit all received ArtNet messages (DMX) out of the serial port in plain text. + +Stephan Ruloff 2016,2019 +https://github.com/rstephan +*/ +#include +#include + +//Wifi settings +const char* ssid = "ssid"; +const char* password = "pAsSwOrD"; + +WiFiUDP UdpSend; +ArtnetWifi artnet; + +// connect to wifi – returns true if successful or false if not +bool ConnectWifi(void) +{ + bool state = true; + int i = 0; + + WiFi.begin(ssid, password); + Serial.println(""); + Serial.println("Connecting to WiFi"); + + // Wait for connection + Serial.print("Connecting"); + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + if (i > 20){ + state = false; + break; + } + i++; + } + if (state) { + Serial.println(""); + Serial.print("Connected to "); + Serial.println(ssid); + Serial.print("IP address: "); + Serial.println(IPAddress(WiFi.localIP())); + } else { + Serial.println(""); + Serial.println("Connection failed."); + } + + return state; +} + +void onDmxFrame(uint16_t universe, uint16_t length, uint8_t sequence, uint8_t* data) +{ + bool tail = false; + + Serial.print("DMX: Univ: "); + Serial.print(universe, DEC); + Serial.print(", Seq: "); + Serial.print(sequence, DEC); + Serial.print(", Data ("); + Serial.print(length, DEC); + Serial.print("): "); + + if (length > 16) { + length = 16; + tail = true; + } + // send out the buffer + for (uint16_t i = 0; i < length; i++) + { + Serial.print(data[i], HEX); + Serial.print(" "); + } + if (tail) { + Serial.print("..."); + } + Serial.println(); +} + +void setup() +{ + // set-up serial for debug output + Serial.begin(115200); + ConnectWifi(); + + // this will be called for each packet received + artnet.setArtDmxCallback(onDmxFrame); + artnet.begin(); +} + +void loop() +{ + // we call the read function inside the loop + artnet.read(); +} diff --git a/.pio/libdeps/esp01_1m/ArtnetWifi/examples/ArtnetWifiDebug2/ArtnetWifiDebug2.ino b/.pio/libdeps/esp01_1m/ArtnetWifi/examples/ArtnetWifiDebug2/ArtnetWifiDebug2.ino new file mode 100644 index 0000000..5d1eb0e --- /dev/null +++ b/.pio/libdeps/esp01_1m/ArtnetWifi/examples/ArtnetWifiDebug2/ArtnetWifiDebug2.ino @@ -0,0 +1,96 @@ +/* +Example, transmit all received ArtNet messages (Op-Code DMX) out of the +serial port in plain text. +Function pointer with the C++11 function-object "std::function". + +Stephan Ruloff 2019 +https://github.com/rstephan/ArtnetWifi +*/ +#if defined(ARDUINO_AVR_UNO_WIFI_REV2) +#error "No C++11 support! Use a more powerful controller or the other 'ArtnetWifiDebug' example, sorry." +#endif +#include +#include + +//Wifi settings +const char* ssid = "ssid"; +const char* password = "pAsSwOrD"; + +WiFiUDP UdpSend; +ArtnetWifi artnet; + +// connect to wifi – returns true if successful or false if not +bool ConnectWifi(void) +{ + bool state = true; + int i = 0; + + WiFi.begin(ssid, password); + Serial.println(""); + Serial.println("Connecting to WiFi"); + + // Wait for connection + Serial.print("Connecting"); + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + if (i > 20){ + state = false; + break; + } + i++; + } + if (state) { + Serial.println(""); + Serial.print("Connected to "); + Serial.println(ssid); + Serial.print("IP address: "); + Serial.println(WiFi.localIP()); + } else { + Serial.println(""); + Serial.println("Connection failed."); + } + + return state; +} + +void setup() +{ + // set-up serial for debug output + Serial.begin(115200); + ConnectWifi(); + + // this will be called for each packet received + artnet.setArtDmxFunc([](DMX_FUNC_PARAM){ + bool tail = false; + + Serial.print("DMX: Univ: "); + Serial.print(universe, DEC); + Serial.print(", Seq: "); + Serial.print(sequence, DEC); + Serial.print(", Data ("); + Serial.print(length, DEC); + Serial.print("): "); + + if (length > 16) { + length = 16; + tail = true; + } + // send out the buffer + for (uint16_t i = 0; i < length; i++) { + Serial.print(data[i], HEX); + Serial.print(" "); + } + if (tail) { + Serial.print("..."); + } + Serial.println(); + }); + artnet.begin(); +} + +void loop() +{ + // we call the read function inside the loop + artnet.read(); +} diff --git a/.pio/libdeps/esp01_1m/ArtnetWifi/examples/ArtnetWifiFastLED/ArtnetWifiFastLED.ino b/.pio/libdeps/esp01_1m/ArtnetWifi/examples/ArtnetWifiFastLED/ArtnetWifiFastLED.ino new file mode 100644 index 0000000..006324e --- /dev/null +++ b/.pio/libdeps/esp01_1m/ArtnetWifi/examples/ArtnetWifiFastLED/ArtnetWifiFastLED.ino @@ -0,0 +1,165 @@ +/* +This example will receive multiple universes via Art-Net and control a strip of +WS2812 LEDs via the FastLED library: https://github.com/FastLED/FastLED +This example may be copied under the terms of the MIT license, see the LICENSE file for details +*/ +#include +#include +#include + +// Wifi settings +const char* ssid = "ssid"; +const char* password = "pAsSwOrD"; + +// LED settings +const int numLeds = 8; // CHANGE FOR YOUR SETUP +const int numberOfChannels = numLeds * 3; // Total number of channels you want to receive (1 led = 3 channels) +const byte dataPin = 2; +CRGB leds[numLeds]; + +// Art-Net settings +ArtnetWifi artnet; +const int startUniverse = 0; // CHANGE FOR YOUR SETUP most software this is 1, some software send out artnet first universe as 0. + +// Check if we got all universes +const int maxUniverses = numberOfChannels / 510 + ((numberOfChannels % 510) ? 1 : 0); +bool universesReceived[maxUniverses]; +bool sendFrame = 1; + + +// connect to wifi – returns true if successful or false if not +bool ConnectWifi(void) +{ + bool state = true; + int i = 0; + + WiFi.begin(ssid, password); + Serial.println(""); + Serial.println("Connecting to WiFi"); + + // Wait for connection + Serial.print("Connecting"); + while (WiFi.status() != WL_CONNECTED) + { + delay(500); + Serial.print("."); + if (i > 20) + { + state = false; + break; + } + i++; + } + if (state) + { + Serial.println(""); + Serial.print("Connected to "); + Serial.println(ssid); + Serial.print("IP address: "); + Serial.println(WiFi.localIP()); + } + else + { + Serial.println(""); + Serial.println("Connection failed."); + } + + return state; +} + +void initTest() +{ + for (int i = 0 ; i < numLeds ; i++) + { + leds[i] = CRGB(127, 0, 0); + } + FastLED.show(); + delay(500); + for (int i = 0 ; i < numLeds ; i++) + { + leds[i] = CRGB(0, 127, 0); + } + FastLED.show(); + delay(500); + for (int i = 0 ; i < numLeds ; i++) + { + leds[i] = CRGB(0, 0, 127); + } + FastLED.show(); + delay(500); + for (int i = 0 ; i < numLeds ; i++) + { + leds[i] = CRGB(0, 0, 0); + } + FastLED.show(); +} + +void onDmxFrame(uint16_t universe, uint16_t length, uint8_t sequence, uint8_t* data) +{ + sendFrame = 1; + // set brightness of the whole strip + if (universe == 15) + { + FastLED.setBrightness(data[0]); + FastLED.show(); + } + + // range check + if (universe < startUniverse) + { + return; + } + uint8_t index = universe - startUniverse; + if (index >= maxUniverses) + { + return; + } + + // Store which universe has got in + universesReceived[index] = true; + + for (int i = 0 ; i < maxUniverses ; i++) + { + if (!universesReceived[i]) + { + sendFrame = 0; + break; + } + } + + // read universe and put into the right part of the display buffer + for (int i = 0; i < length / 3; i++) + { + int led = i + (index * 170); + if (led < numLeds) + { + leds[led] = CRGB(data[i * 3], data[i * 3 + 1], data[i * 3 + 2]); + } + } + + if (sendFrame) + { + FastLED.show(); + // Reset universeReceived to 0 + memset(universesReceived, 0, maxUniverses); + } +} + +void setup() +{ + Serial.begin(115200); + ConnectWifi(); + artnet.begin(); + FastLED.addLeds(leds, numLeds); + initTest(); + + memset(universesReceived, 0, maxUniverses); + // this will be called for each packet received + artnet.setArtDmxCallback(onDmxFrame); +} + +void loop() +{ + // we call the read function inside the loop + artnet.read(); +} diff --git a/.pio/libdeps/esp01_1m/ArtnetWifi/examples/ArtnetWifiNeoPixel/ArtnetWifiNeoPixel.ino b/.pio/libdeps/esp01_1m/ArtnetWifi/examples/ArtnetWifiNeoPixel/ArtnetWifiNeoPixel.ino new file mode 100644 index 0000000..59141c6 --- /dev/null +++ b/.pio/libdeps/esp01_1m/ArtnetWifi/examples/ArtnetWifiNeoPixel/ArtnetWifiNeoPixel.ino @@ -0,0 +1,141 @@ +/* +This example will receive multiple universes via Artnet and control a strip of ws2811 leds via +Adafruit's NeoPixel library: https://github.com/adafruit/Adafruit_NeoPixel +This example may be copied under the terms of the MIT license, see the LICENSE file for details +*/ +#include +#include +#include + +//Wifi settings +const char* ssid = "ssid"; +const char* password = "pAsSwOrD"; + +// Neopixel settings +const int numLeds = 240; // change for your setup +const int numberOfChannels = numLeds * 3; // Total number of channels you want to receive (1 led = 3 channels) +const byte dataPin = 2; +Adafruit_NeoPixel leds = Adafruit_NeoPixel(numLeds, dataPin, NEO_GRB + NEO_KHZ800); + +// Artnet settings +ArtnetWifi artnet; +const int startUniverse = 0; // CHANGE FOR YOUR SETUP most software this is 1, some software send out artnet first universe as 0. + +// Check if we got all universes +const int maxUniverses = numberOfChannels / 512 + ((numberOfChannels % 512) ? 1 : 0); +bool universesReceived[maxUniverses]; +bool sendFrame = 1; +int previousDataLength = 0; + +// connect to wifi – returns true if successful or false if not +bool ConnectWifi(void) +{ + bool state = true; + int i = 0; + + WiFi.begin(ssid, password); + Serial.println(""); + Serial.println("Connecting to WiFi"); + + // Wait for connection + Serial.print("Connecting"); + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + if (i > 20){ + state = false; + break; + } + i++; + } + if (state){ + Serial.println(""); + Serial.print("Connected to "); + Serial.println(ssid); + Serial.print("IP address: "); + Serial.println(WiFi.localIP()); + } else { + Serial.println(""); + Serial.println("Connection failed."); + } + + return state; +} + +void initTest() +{ + for (int i = 0 ; i < numLeds ; i++) + leds.setPixelColor(i, 127, 0, 0); + leds.show(); + delay(500); + for (int i = 0 ; i < numLeds ; i++) + leds.setPixelColor(i, 0, 127, 0); + leds.show(); + delay(500); + for (int i = 0 ; i < numLeds ; i++) + leds.setPixelColor(i, 0, 0, 127); + leds.show(); + delay(500); + for (int i = 0 ; i < numLeds ; i++) + leds.setPixelColor(i, 0, 0, 0); + leds.show(); +} + +void onDmxFrame(uint16_t universe, uint16_t length, uint8_t sequence, uint8_t* data) +{ + sendFrame = 1; + // set brightness of the whole strip + if (universe == 15) + { + leds.setBrightness(data[0]); + leds.show(); + } + + // Store which universe has got in + if ((universe - startUniverse) < maxUniverses) + universesReceived[universe - startUniverse] = 1; + + for (int i = 0 ; i < maxUniverses ; i++) + { + if (universesReceived[i] == 0) + { + //Serial.println("Broke"); + sendFrame = 0; + break; + } + } + + // read universe and put into the right part of the display buffer + for (int i = 0; i < length / 3; i++) + { + int led = i + (universe - startUniverse) * (previousDataLength / 3); + if (led < numLeds) + leds.setPixelColor(led, data[i * 3], data[i * 3 + 1], data[i * 3 + 2]); + } + previousDataLength = length; + + if (sendFrame) + { + leds.show(); + // Reset universeReceived to 0 + memset(universesReceived, 0, maxUniverses); + } +} + +void setup() +{ + Serial.begin(115200); + ConnectWifi(); + artnet.begin(); + leds.begin(); + initTest(); + + // this will be called for each packet received + artnet.setArtDmxCallback(onDmxFrame); +} + +void loop() +{ + // we call the read function inside the loop + artnet.read(); +} diff --git a/.pio/libdeps/esp01_1m/ArtnetWifi/examples/ArtnetWifiTransmit/ArtnetWifiTransmit.ino b/.pio/libdeps/esp01_1m/ArtnetWifi/examples/ArtnetWifiTransmit/ArtnetWifiTransmit.ino new file mode 100644 index 0000000..5d32ecb --- /dev/null +++ b/.pio/libdeps/esp01_1m/ArtnetWifi/examples/ArtnetWifiTransmit/ArtnetWifiTransmit.ino @@ -0,0 +1,75 @@ +/* +This example will transmit a universe via Art-Net into the Network. +This example may be copied under the terms of the MIT license, see the LICENSE file for details +*/ +#include +#include + +//Wifi settings +const char* ssid = "ssid"; // CHANGE FOR YOUR SETUP +const char* password = "pAsSwOrD"; // CHANGE FOR YOUR SETUP + +// Artnet settings +ArtnetWifi artnet; +const int startUniverse = 0; // CHANGE FOR YOUR SETUP most software this is 1, some software send out artnet first universe as 0. +const char host[] = "2.1.1.1"; // CHANGE FOR YOUR SETUP your destination + +// connect to wifi – returns true if successful or false if not +bool ConnectWifi(void) +{ + bool state = true; + int i = 0; + + WiFi.begin(ssid, password); + Serial.println(""); + Serial.println("Connecting to WiFi"); + + // Wait for connection + Serial.print("Connecting"); + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + if (i > 20){ + state = false; + break; + } + i++; + } + if (state){ + Serial.println(""); + Serial.print("Connected to "); + Serial.println(ssid); + Serial.print("IP address: "); + Serial.println(WiFi.localIP()); + } else { + Serial.println(""); + Serial.println("Connection failed."); + } + + return state; +} + +void setup() +{ + Serial.begin(115200); + ConnectWifi(); + artnet.begin(host); + artnet.setLength(3); + artnet.setUniverse(startUniverse); +} + +void loop() +{ + uint8_t i; + uint8_t j; + + // set the first 3 byte to all the same value. A RGB lamp will show a ramp-up white. + for (j = 0; j < 255; j++) { + for (i = 0; i < 3; i++) { + artnet.setByte(i, j); + } + // send out the Art-Net DMX data + artnet.write(); + delay(100); + } +} diff --git a/.pio/libdeps/esp01_1m/ArtnetWifi/keywords.txt b/.pio/libdeps/esp01_1m/ArtnetWifi/keywords.txt new file mode 100644 index 0000000..bd362d7 --- /dev/null +++ b/.pio/libdeps/esp01_1m/ArtnetWifi/keywords.txt @@ -0,0 +1,21 @@ +# Datatypes + +ArtnetWifi KEYWORD1 + +# Methods + +begin KEYWORD2 +read KEYWORD2 +write KEYWORD2 +setByte KEYWORD2 +printPacketHeader KEYWORD2 +printPacketContent KEYWORD2 +getDmxFrame KEYWORD2 +getOpcode KEYWORD2 +getSequence KEYWORD2 +getUniverse KEYWORD2 +setUniverse KEYWORD2 +setPhysical KEYWORD2 +getLength KEYWORD2 +setLength KEYWORD2 +setArtDmxCallback KEYWORD2 diff --git a/.pio/libdeps/esp01_1m/ArtnetWifi/library.properties b/.pio/libdeps/esp01_1m/ArtnetWifi/library.properties new file mode 100644 index 0000000..a001e46 --- /dev/null +++ b/.pio/libdeps/esp01_1m/ArtnetWifi/library.properties @@ -0,0 +1,9 @@ +name=ArtnetWifi +version=1.6.2 +author=Nathanaël Lécaudé,Stephan Ruloff +maintainer=Stephan Ruloff +sentence=ArtNet with the ESP8266, ESP32, RP2040 and more. +paragraph=Send and receive Art-Net frames using WiFi. Tested on ESP8266, ESP32, Pi Pico W, AmebaD, WiFi101 and WiFiNINA devices. +category=Communication +url=https://github.com/rstephan/ArtnetWifi +architectures=esp8266,esp32,samd,rp2040,megaavr,AmebaD diff --git a/.pio/libdeps/esp01_1m/ArtnetWifi/src/ArtnetWifi.cpp b/.pio/libdeps/esp01_1m/ArtnetWifi/src/ArtnetWifi.cpp new file mode 100644 index 0000000..0a7617e --- /dev/null +++ b/.pio/libdeps/esp01_1m/ArtnetWifi/src/ArtnetWifi.cpp @@ -0,0 +1,169 @@ +/*The MIT License (MIT) + +Copyright (c) 2014 Nathanaël Lécaudé +https://github.com/natcl/Artnet, http://forum.pjrc.com/threads/24688-Artnet-to-OctoWS2811 + +Copyright (c) 2016,2019 Stephan Ruloff +https://github.com/rstephan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +#include + + +const char ArtnetWifi::artnetId[] = ART_NET_ID; + +ArtnetWifi::ArtnetWifi() : artDmxCallback(nullptr) {} + +void ArtnetWifi::begin(String hostname) +{ + Udp.begin(ART_NET_PORT); + host = hostname; + sequence = 1; + physical = 0; +} + +void ArtnetWifi::stop(void) +{ + Udp.stop(); +} + +uint16_t ArtnetWifi::read(void) +{ + packetSize = Udp.parsePacket(); + + if (packetSize <= MAX_BUFFER_ARTNET && packetSize > 0) + { + senderIp = Udp.remoteIP(); + Udp.read(artnetPacket, MAX_BUFFER_ARTNET); + + // Check that packetID is "Art-Net" else ignore + if (memcmp(artnetPacket, artnetId, sizeof(artnetId)) != 0) { + return 0; + } + + opcode = artnetPacket[8] | artnetPacket[9] << 8; + + if (opcode == ART_DMX) + { + sequence = artnetPacket[12]; + incomingUniverse = artnetPacket[14] | artnetPacket[15] << 8; + dmxDataLength = artnetPacket[17] | artnetPacket[16] << 8; + + if (artDmxCallback) (*artDmxCallback)(incomingUniverse, dmxDataLength, sequence, artnetPacket + ART_DMX_START); +#if !defined(ARDUINO_AVR_UNO_WIFI_REV2) + if (artDmxFunc) { + artDmxFunc(incomingUniverse, dmxDataLength, sequence, artnetPacket + ART_DMX_START); + } +#endif + return ART_DMX; + } + if (opcode == ART_POLL) + { + return ART_POLL; + } + if (opcode == ART_SYNC) + { + return ART_SYNC; + } + } + + return 0; +} + +uint16_t ArtnetWifi::makePacket(void) +{ + uint16_t len; + uint16_t version; + + memcpy(artnetPacket, artnetId, sizeof(artnetId)); + opcode = ART_DMX; + artnetPacket[8] = opcode; + artnetPacket[9] = opcode >> 8; + version = 14; + artnetPacket[11] = version; + artnetPacket[10] = version >> 8; + artnetPacket[12] = sequence; + sequence++; + if (!sequence) { + sequence = 1; + } + artnetPacket[13] = physical; + artnetPacket[14] = outgoingUniverse; + artnetPacket[15] = outgoingUniverse >> 8; + len = dmxDataLength + (dmxDataLength % 2); // make a even number + artnetPacket[17] = len; + artnetPacket[16] = len >> 8; + + return len; +} + +int ArtnetWifi::write(void) +{ + uint16_t len; + + len = makePacket(); + Udp.beginPacket(host.c_str(), ART_NET_PORT); + Udp.write(artnetPacket, ART_DMX_START + len); + + return Udp.endPacket(); +} + +int ArtnetWifi::write(IPAddress ip) +{ + uint16_t len; + + len = makePacket(); + Udp.beginPacket(ip, ART_NET_PORT); + Udp.write(artnetPacket, ART_DMX_START + len); + + return Udp.endPacket(); +} + +void ArtnetWifi::setByte(uint16_t pos, uint8_t value) +{ + if (pos > 512) { + return; + } + artnetPacket[ART_DMX_START + pos] = value; +} + +void ArtnetWifi::printPacketHeader(void) +{ + Serial.print("packet size = "); + Serial.print(packetSize); + Serial.print("\topcode = "); + Serial.print(opcode, HEX); + Serial.print("\tuniverse number = "); + Serial.print(incomingUniverse); + Serial.print("\tdata length = "); + Serial.print(dmxDataLength); + Serial.print("\tsequence n0. = "); + Serial.println(sequence); +} + +void ArtnetWifi::printPacketContent(void) +{ + for (uint16_t i = ART_DMX_START ; i < dmxDataLength ; i++){ + Serial.print(artnetPacket[i], DEC); + Serial.print(" "); + } + Serial.println('\n'); +} diff --git a/.pio/libdeps/esp01_1m/ArtnetWifi/src/ArtnetWifi.h b/.pio/libdeps/esp01_1m/ArtnetWifi/src/ArtnetWifi.h new file mode 100644 index 0000000..450c5dd --- /dev/null +++ b/.pio/libdeps/esp01_1m/ArtnetWifi/src/ArtnetWifi.h @@ -0,0 +1,173 @@ +/*The MIT License (MIT) + +Copyright (c) 2014 Nathanaël Lécaudé +https://github.com/natcl/Artnet, http://forum.pjrc.com/threads/24688-Artnet-to-OctoWS2811 + +Copyright (c) 2016,2019 Stephan Ruloff +https://github.com/rstephan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +#ifndef ARTNET_WIFI_H +#define ARTNET_WIFI_H + +#include +#if defined(ARDUINO_ARCH_ESP32) || defined(ESP32) || defined(ARDUINO_RASPBERRY_PI_PICO_W) || defined(ARDUINO_RASPBERRY_PI_PICO_2W) +#include +#include +#elif defined(ARDUINO_ARCH_ESP8266) +#include +#include +#elif defined(ARDUINO_ARCH_SAMD) +#if defined(ARDUINO_SAMD_MKR1000) +#include +#else +#include +#endif +#include +#elif defined(ARDUINO_AVR_UNO_WIFI_REV2) +#include +#elif defined(ARDUINO_ARCH_AMEBAD) +#include +#include +#else +#error "Architecture not supported!" +#endif +#include + +// UDP specific +#define ART_NET_PORT 6454 +// Opcodes +#define ART_POLL 0x2000 +#define ART_DMX 0x5000 +#define ART_SYNC 0x5200 +// Buffers +#define MAX_BUFFER_ARTNET 530 +// Packet +#define ART_NET_ID "Art-Net" +#define ART_DMX_START 18 + +#define DMX_FUNC_PARAM uint16_t universe, uint16_t length, uint8_t sequence, uint8_t* data +#if !defined(ARDUINO_AVR_UNO_WIFI_REV2) +typedef std::function StdFuncDmx_t; +#endif + +class ArtnetWifi +{ +public: + ArtnetWifi(); + + void begin(String hostname = ""); + uint16_t read(void); + /* returns 1 for Ok, or 0 on problem */ + int write(void); + int write(IPAddress ip); + void setByte(uint16_t pos, uint8_t value); + void printPacketHeader(void); + void printPacketContent(void); + + void stop(void); + + // Return a pointer to the start of the DMX data + inline uint8_t* getDmxFrame(void) + { + return artnetPacket + ART_DMX_START; + } + + inline uint16_t getOpcode(void) + { + return opcode; + } + + inline uint8_t getSequence(void) + { + return sequence; + } + + inline uint16_t getUniverse(void) + { + return incomingUniverse; + } + + inline void setUniverse(uint16_t universe) + { + outgoingUniverse = universe; + } + + inline void setPhysical(uint8_t port) + { + physical = port; + } + + [[deprecated]] + inline void setPhisical(uint8_t port) + { + setPhysical(port); + } + + inline uint16_t getLength(void) + { + return dmxDataLength; + } + + inline void setLength(uint16_t len) + { + dmxDataLength = len; + } + + inline void setArtDmxCallback(void (*fptr)(uint16_t universe, uint16_t length, uint8_t sequence, uint8_t* data)) + { + artDmxCallback = fptr; + } + +#if !defined(ARDUINO_AVR_UNO_WIFI_REV2) + inline void setArtDmxFunc(StdFuncDmx_t func) + { + artDmxFunc = func; + } +#endif + + inline IPAddress& getSenderIp() + { + return senderIp; + } + +private: + uint16_t makePacket(void); + + WiFiUDP Udp; + String host; + uint8_t artnetPacket[MAX_BUFFER_ARTNET]; + uint16_t packetSize; + uint16_t opcode; + uint8_t sequence; + uint8_t physical; + uint16_t incomingUniverse; + uint16_t outgoingUniverse; + uint16_t dmxDataLength; + void (*artDmxCallback)(uint16_t universe, uint16_t length, uint8_t sequence, uint8_t* data); +#if !defined(ARDUINO_AVR_UNO_WIFI_REV2) + StdFuncDmx_t artDmxFunc; +#endif + static const char artnetId[]; + IPAddress senderIp; +}; + +#endif diff --git a/.pio/libdeps/esp01_1m/FastLED/.piopm b/.pio/libdeps/esp01_1m/FastLED/.piopm new file mode 100644 index 0000000..03b9819 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/.piopm @@ -0,0 +1 @@ +{"type": "library", "name": "FastLED", "version": "3.10.3", "spec": {"owner": "fastled", "id": 126, "name": "FastLED", "requirements": null, "uri": null}} \ No newline at end of file diff --git a/.pio/libdeps/esp01_1m/FastLED/ADVANCED_DEVELOPMENT.md b/.pio/libdeps/esp01_1m/FastLED/ADVANCED_DEVELOPMENT.md new file mode 100644 index 0000000..b864198 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/ADVANCED_DEVELOPMENT.md @@ -0,0 +1,66 @@ +# Advanced Development with FastLED + + +![perpetualmaniac_neo_giving_two_pills _one_of_them_is_black_and__4b145870-9ead-4976-b031-f4df3f2bfbe1](https://github.com/user-attachments/assets/9bba6113-688f-469f-8b51-bcb4fea910e5) + + +## GDB On Unit Tests + +Yes, we have step through debugging with FastLED. + + * VSCode + * Install Plugin: GDB Debugger - Beyond + * Navigate to one of the tests in `tests/` and open in + * Hit `F5` + +If the Python Debugger pops up, then manually switch the VSCode debugger using `Launch(gdb)` + +![image](https://github.com/user-attachments/assets/c1246803-df4b-4583-8c11-8243c084afc5) + + + +## Enabling 3-second compile times using our `web-compiler` + + * You must have `docker` installed for fastest compile times. It's free. + * `cd ` + * `pip install fastled` + * `fastled examples/Blink/Blink.ino` + * Cpp changes to the fastled source can be compiled by the live fastled compiler. + +## Testing your changes + +Most of this is in the basic CONTRIBUTING.md guide. But as a reminder + * Unit Testing: `./test` + * Linting: `./lint` + * Compiling on platforms `./compile uno,teensy41,esp32s3 --examples Blink,Apa102HD` + +## Enabling AI coding + +`aider.chat` is available for advanced and high velocity coding with FastLED. To use it, have your open-ai or Anthropic api key ready. It's recommended to use Anthropic as it's performance is much better than Open-AI for coding. + +At the root of the project type: + +`./ai` and follow the prompts. Once the key is installed you will get a prompt that looks like this: + +```bash +architect> +``` + +There are two modes to use this AI, a watch mode which watches your files for changes and launches automatically, and a slow way which you add target files then instruct it to make changes: + + * watch mode (best for implimenting a function or two) + * Edit any file in the repo. Add a comment with `AI!` at the end. The ai will see this and start implementing what you just typed. + * Example: Edit `src/fl/vector.h` and put in a comment `// Add more comments AI!`, then say yes to the changes in the prompt. + * Slow mode (much better for bigger changes across the file or several) + * While you are in the `architect> ` prompt you will add a file to the chat + * `/add src/fl/vector.h` + * Now tell the AI what you want it to do, and it will do it. + * Making the AI fix it's own problems it introduced. + * At the AI command prompt, have it run the following + * Linux/Mac: `/run ./test` + * On Windows: `/run uv run test.py` + * After the test concludes, the AI will ask you if you want to add the output back into the chat, agree to it then let it try to correct it's mistakes. + +Every single time you do a change, make sure and thoroughly check it. I recommend VSCodes built in git diff tool. + +Although the AI is pretty amazing, it will inject entropy into your code and this is the source of a lot of problems. So watch all changes it makes very thoroughly. Under almost all circumstances you will have to revert unnecessary changes (like comments) line by line. diff --git a/.pio/libdeps/esp01_1m/FastLED/APA102.md b/.pio/libdeps/esp01_1m/FastLED/APA102.md new file mode 100644 index 0000000..3d530d1 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/APA102.md @@ -0,0 +1,73 @@ +# Special Notes on APA102 and the 'High Definition' Mode in FastLED + +The APA102 LED driver includes a 5-bit per-LED brightness component. Previously, this feature was not fully utilized, except through a workaround that defined a global brightness affecting all LEDs uniformly rather than individually. + +In FastLED the APA102 chipset will have extra resolution in comparison to the WS2812 RGB8 mode. + +There are two modes: + * APA102 "Regular Mode" + * Has enhanced color resolution when using the "global brightness" factor + * APA102HD Mode + * Applies automatic gamma correction at the driver level using "pseudo 13-bit" color mixing. + +**APA102HD Mode** + +[example: examples/APA102HD](examples/Apa102HD/) + +By introducing a 5-bit gamma bit-shift algorithm, we now effectively leverage this per-LED brightness control. Faced with the decision to either rewrite the entire `CRGB` library to expose the 5-bit brightness—including adaptations for formats like RGBW—or to retain the existing RGB8 format used by FastLED and implement the enhancement at the driver level, the latter option was chosen. This approach avoids widespread changes and maintains compatibility; if RGB8 suffices for game development, it is adequate for LED development as well. + +The term "Pseudo-13-bit" arises because the additional resolution becomes significant only when all color components are at low values. For example, colors like `CRGB(255, 255, 254)` or `CRGB(255, 1, 1)` do not benefit from increased resolution due to the dominance of the brighter components. However, in low-light conditions with colors such as `CRGB(8, 8, 8)`, where the maximum component value is low, the pseudo-13-bit algorithm significantly enhances resolution—precisely where increased resolution is most desired. + +Gamma correction is applied to preserve the RGB8 format and because future LEDs are expected to support gamma correction inherently. In game development, the 0-255 color values are based on the gamma scale rather than the linear power scale. LEDs like the WS2812 operate on a linear power scale, which results in washed-out, undersaturated colors when displaying captured video directly. Implementing software gamma correction for RGB8 severely reduces color resolution. + +To address this, an internal gamma scale mapping is applied: + +``` +RGB8 → RGB16 + 5-bit gamma → RGB8 + 5-bit gamma +``` + +During the conversion back to RGB8, the brightness from the 5-bit gamma is optimally distributed using a closed-form mathematical algorithm. Rather than the iterative bit-shifting approach used in earlier versions, the current implementation uses a sophisticated quantization and scaling method that provides superior accuracy. + +**Closed-Form Algorithm (Current Implementation)** + +The algorithm works by: + +1. **Finding the maximum component**: Determines which RGB component requires the highest brightness level +2. **Quantizing to 5-bit scale**: Computes the optimal 5-bit brightness value that accommodates the maximum component +3. **Applying pre-computed scaling**: Uses a lookup table of precise scaling factors to convert the 16-bit gamma-corrected values back to 8-bit RGB components + +The key insight is the quantization formula: +``` +scale = (max_component + (2047 - (max_component >> 5))) >> 11 +``` + +This ensures the 5-bit brightness value is always sufficient to represent the maximum component while minimizing quantization error. + +The scaling factors in the lookup table are computed as: +``` +bright_scale[i] = (i/31) * (255/65536) * 256 +``` + +These pre-computed values eliminate floating-point arithmetic while maintaining precision. The final RGB values are calculated with proper rounding: +``` +rgb_out = (rgb16 * scale_factor + 0x808000) >> 24 +``` + +**Algorithm Performance** + +This closed-form approach delivers exceptional accuracy: +- **Worst-case error**: 0.2% over the full 16-bit input range +- **Average error**: 0.05% across the range +- **Perfect match**: to floating-point reference implementation + +By eliminating iterative bit-shifting, this method also provides consistent performance regardless of input values and significantly reduces code size on embedded platforms. + +**Version History** + +In version 3.9.0, the algorithm was completely rewritten to function natively on 8-bit controllers like the `__AVR__` chipsets without significant performance loss. The current closed-form implementation replaced the previous iterative approach, providing both better accuracy and smaller code footprint. + +**Further Enhancements in Version 3.9.0** + +Additionally, version 3.9.0 separated the color temperature from the global brightness scale. Before this update, global brightness was pre-mixed with the component scales—a method suitable for the WS2812's RGB8 format but not for the APA102's RGB8 plus 5-bit brightness. The update saw the global brightness and color scales separated for non-AVR chipsets. While the WS2812 continues to use pre-mixed values for performance reasons on AVR chipsets, the APA102 now performs component mixing within the "pseudo-13-bit space." + +Although APA102HD mode offers the highest dynamic range, the standard APA102 mode also benefits from increased resolution when adjusting global brightness. In this mode, instead of pre-mixing scales and multiplying them against each `CRGB` value, the global brightness is applied to the 5-bit brightness component, and only the color scales are multiplied against the `CRGB` values. This approach is superior because each component of the color scale typically exceeds 127, providing ample high-order bits to preserve color information. diff --git a/.pio/libdeps/esp01_1m/FastLED/BACKGROUND_AGENT_TESTING_REQUIREMENTS.md b/.pio/libdeps/esp01_1m/FastLED/BACKGROUND_AGENT_TESTING_REQUIREMENTS.md new file mode 100644 index 0000000..d8610c7 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/BACKGROUND_AGENT_TESTING_REQUIREMENTS.md @@ -0,0 +1,168 @@ +# 🚨🚨🚨 **CRITICAL REQUIREMENTS FOR BACKGROUND AGENTS** 🚨🚨🚨 + +# ⚠️ **STOP! READ THIS FIRST!** ⚠️ + +## **MANDATORY TESTING REQUIREMENT - NO EXCEPTIONS!** + +### 🔥 **RULE #1: ALWAYS RUN `bash test` BEFORE COMPLETION** 🔥 + +**THIS IS THE MOST IMPORTANT RULE FOR BACKGROUND AGENTS:** + +- **🚨 EVERY BACKGROUND AGENT MUST RUN `bash test` BEFORE SAYING THEY ARE DONE** +- **🚨 NO EXCEPTIONS - THIS IS MANDATORY AND NON-NEGOTIABLE** +- **🚨 IF YOU DON'T RUN `bash test`, YOUR WORK IS INCOMPLETE** +- **🚨 SAYING "DONE" WITHOUT RUNNING `bash test` IS BREAKING THE RULES** + +### **WHY THIS IS CRITICAL:** +- The `bash test` command runs the full test suite including unit tests and compilation checks +- It catches breaking changes, compilation errors, and regressions +- It ensures the codebase remains stable and functional +- **WITHOUT THIS, YOU WILL BREAK THE PROJECT** + +### **WHAT `bash test` DOES:** +- Runs all C++ unit tests +- Runs Python linting and formatting checks +- Validates code compilation across platforms +- Checks for syntax errors and warnings +- Ensures all examples still compile + +### 🚨 **MANDATORY STEPS FOR COMPLETION - FOLLOW EXACTLY:** 🚨 + +1. **🔥 RUN `bash test` COMMAND** + - Execute: `bash test` + - Wait for ALL tests to complete + - Check that ALL tests PASS + +2. **🔥 VERIFY TEST RESULTS** + - If ANY test fails, you MUST fix the issues + - Do NOT ignore warnings or errors + - Do NOT proceed until ALL tests pass + +3. **🔥 USE MCP SERVER VALIDATION (RECOMMENDED)** + - Use the `validate_completion` tool from MCP server: `uv run mcp_server.py` + - This tool runs `bash test` and validates results + - Only indicate completion if this tool returns SUCCESS + +4. **🔥 ZERO TOLERANCE FOR FAILURES** + - If ANY test fails, the background agent MUST fix the issues + - Do NOT indicate completion with failing tests + - Do NOT ignore test errors or warnings + - Fix the code and re-run `bash test` until ALL tests pass + +### **COMPLETION CHECKLIST - MUST COMPLETE ALL ITEMS:** +- [ ] ✅ All code changes have been made +- [ ] ✅ **`bash test` has been run and ALL tests PASS** +- [ ] ✅ No compilation errors or warnings remain +- [ ] ✅ MCP server `validate_completion` tool shows SUCCESS (if used) +- [ ] ✅ All test output has been reviewed for any issues +- [ ] ✅ **ONLY THEN** indicate task completion + +### 🔥 **CONSEQUENCES OF NOT FOLLOWING THIS RULE:** 🔥 + +- **YOUR CHANGES WILL BREAK THE PROJECT** +- **OTHER DEVELOPERS WILL HAVE TO FIX YOUR MISTAKES** +- **THE CONTINUOUS INTEGRATION SYSTEM WILL FAIL** +- **YOU WILL CAUSE REGRESSIONS AND BUGS** + +### 🚨 **FINAL WARNING:** 🚨 + +**IF YOU ARE A BACKGROUND AGENT AND YOU INDICATE COMPLETION WITHOUT RUNNING `bash test`, YOU HAVE FAILED TO FOLLOW THE MOST BASIC REQUIREMENT OF THIS PROJECT.** + +**NO EXCEPTIONS. NO SHORTCUTS. ALWAYS RUN `bash test` FIRST.** + +--- + +## **Examples of CORRECT Background Agent Behavior:** + +### ✅ **GOOD Example:** +``` +1. Made code changes +2. Ran `bash test` +3. All tests passed +4. Indicated completion: "Task completed successfully. All tests pass." +``` + +### ❌ **BAD Example:** +``` +1. Made code changes +2. Skipped running tests +3. Indicated completion: "Task completed successfully." +``` +**^ THIS IS WRONG AND BREAKS THE PROJECT** + +### ✅ **GOOD Example with Test Failures:** +``` +1. Made code changes +2. Ran `bash test` +3. Some tests failed +4. Fixed the failing code +5. Ran `bash test` again +6. All tests passed +7. Indicated completion: "Task completed successfully. All tests pass." +``` + +### ❌ **BAD Example with Test Failures:** +``` +1. Made code changes +2. Ran `bash test` +3. Some tests failed +4. Ignored failures and indicated completion anyway +``` +**^ THIS IS WRONG AND BREAKS THE PROJECT** + +--- + +## **HOW TO RUN `bash test`:** + +### **Command:** +```bash +bash test +``` + +### **Expected Output (Success):** +``` +Running C++ tests... +All C++ tests passed ✅ +Running Python linting... +All Python checks passed ✅ +Running compilation checks... +All compilation checks passed ✅ +``` + +### **What to do if tests fail:** +1. **READ THE ERROR MESSAGES CAREFULLY** +2. **FIX THE CODE THAT'S CAUSING THE FAILURES** +3. **RUN `bash test` AGAIN** +4. **REPEAT UNTIL ALL TESTS PASS** +5. **ONLY THEN INDICATE COMPLETION** + +--- + +## **MCP SERVER VALIDATION TOOL:** + +### **How to use:** +```bash +# Start MCP server +uv run mcp_server.py + +# Use the validate_completion tool +# This automatically runs `bash test` and validates results +``` + +### **Benefits:** +- Automatically runs `bash test` +- Provides clear pass/fail results +- Ensures you don't forget to run tests +- **RECOMMENDED FOR ALL BACKGROUND AGENTS** + +--- + +## 🚨 **REMEMBER: THIS IS NOT OPTIONAL** 🚨 + +**EVERY BACKGROUND AGENT WORKING ON THIS PROJECT MUST:** +1. **RUN `bash test` BEFORE COMPLETION** +2. **ENSURE ALL TESTS PASS** +3. **FIX ANY FAILURES** +4. **ONLY THEN INDICATE COMPLETION** + +**NO SHORTCUTS. NO EXCEPTIONS. ALWAYS TEST FIRST.** diff --git a/.pio/libdeps/esp01_1m/FastLED/CLAUDE.md b/.pio/libdeps/esp01_1m/FastLED/CLAUDE.md new file mode 100644 index 0000000..9507af4 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/CLAUDE.md @@ -0,0 +1,47 @@ +# FastLED AI Agent Guidelines + +## Quick Reference + +This project uses directory-specific agent guidelines. See: + +- **CI/Build Tasks**: `ci/AGENTS.md` - Python build system, compilation, MCP server tools +- **Testing**: `tests/AGENTS.md` - Unit tests, test execution, validation requirements +- **Examples**: `examples/AGENTS.md` - Arduino sketch compilation, .ino file rules + +## Key Commands + +- `uv run test.py` - Run all tests +- `uv run test.py --cpp` - Run C++ tests only +- `uv run test.py TestName` - Run specific C++ test (e.g., `uv run test.py xypath`) +- `bash lint` - Run code formatting/linting +- `uv run ci/ci-compile.py uno --examples Blink` - Compile examples for specific platform +- `uv run ci/wasm_compile.py examples/Blink --just-compile` - Compile Arduino sketches to WASM +- `uv run mcp_server.py` - Start MCP server for advanced tools + +### QEMU Commands +- `uv run ci/install-qemu.py` - Install QEMU for ESP32 emulation (standalone) +- `uv run test.py --qemu esp32s3` - Run QEMU tests (installs QEMU automatically) +- `FASTLED_QEMU_SKIP_INSTALL=true uv run test.py --qemu esp32s3` - Skip QEMU installation step + +## Core Rules + +### Command Execution (ALL AGENTS) +- **Python**: Always use `uv run python script.py` (never just `python`) +- **Stay in project root** - never `cd` to subdirectories +- **Git-bash compatibility**: Prefix commands with space: `bash test` + +### C++ Code Standards +- **Use `fl::` namespace** instead of `std::` +- **If you want to use a stdlib header like , look check for equivalent in `fl/type_traits.h` +- **Use proper warning macros** from `fl/compiler_control.h` +- **Follow existing code patterns** and naming conventions + +### JavaScript Code Standards +- **After modifying any JavaScript files**: Always run `bash lint --js` to ensure proper formatting + +### Memory Refresh Rule +**🚨 ALL AGENTS: Read the relevant AGENTS.md file before concluding work to refresh memory about current project rules and requirements.** + +--- + +*This file intentionally kept minimal. Detailed guidelines are in directory-specific AGENTS.md files.* \ No newline at end of file diff --git a/.pio/libdeps/esp01_1m/FastLED/CMakeLists.txt b/.pio/libdeps/esp01_1m/FastLED/CMakeLists.txt new file mode 100644 index 0000000..8362792 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/CMakeLists.txt @@ -0,0 +1,26 @@ +# FastLED +# https://github.com/FastLED/FastLED +# MIT License + +cmake_minimum_required(VERSION 3.5) + +# Collect all source files +file(GLOB FastLED_SRCS "src/*.cpp") +file(GLOB FastLED_FL_SRCS "src/fl/*.cpp") +file(GLOB FastLED_SENSORS_SRCS "src/sensors/*.cpp") +file(GLOB FastLED_PLATFORM_ARDUINO_SRCS "src/platforms/arduino/*.cpp") +file(GLOB FastLED_FX_SRCS "src/fx/*.cpp" "src/fx/**/*.cpp") + +file(GLOB ESP32_SRCS "src/platforms/esp/32/*.cpp" "src/platforms/esp/32/rmt_5/*.cpp") +file(GLOB ESP32_THIRD_PARTY_SRCS "src/third_party/**/src/*.c" "src/third_party/**/src/*.cpp") +file(GLOB ESP32_LED_STRIP_SRCS "src/third_party/espressif/led_strip/src/*.c") + +# Combine all source files into a single list +list(APPEND FastLED_SRCS ${FastLED_FL_SRCS} ${FastLED_SENSORS_SRCS} ${FastLED_FX_SRCS} ${ESP32_SRCS} ${ESP32_THIRD_PARTY_SRCS} ${ESP32_LED_STRIP_SRCS} ${FastLED_PLATFORM_ARDUINO_SRCS}) + +# Register the component with ESP-IDF +idf_component_register(SRCS ${FastLED_SRCS} + INCLUDE_DIRS "src" "src/third_party/espressif/led_strip/src" + REQUIRES arduino-esp32 esp_driver_rmt esp_lcd driver) + +project(FastLED) diff --git a/.pio/libdeps/esp01_1m/FastLED/CONTRIBUTING.md b/.pio/libdeps/esp01_1m/FastLED/CONTRIBUTING.md new file mode 100644 index 0000000..c437495 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/CONTRIBUTING.md @@ -0,0 +1,243 @@ +## Contributing + +The most important part about contributing to FastLED is knowing how to test your changes. + +The FastLED library includes a powerful cli that can compile to any device. It will run if you have either [python](https://www.python.org/downloads/) or [uv](https://github.com/astral-sh/uv) installed on the system. + +## FastLED compiler cli + +[![clone and compile](https://github.com/FastLED/FastLED/actions/workflows/build_clone_and_compile.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_clone_and_compile.yml) + +The FastLED compiler cli can be invoked at the project root. + +```bash (MacOS/Linux, windows us git-bsh or compile.bat) +git clone https://github.com/fastled/fastled +cd fastled +./compile uno --examples Blink # linux/macos/git-bash +# compile.bat # Windows. +``` + +## Linting and Unit Testing + +```bash +./lint +./test # runs unit tests +# Note that you do NOT need to install the C++ compiler toolchain +# for compiling + running unit tests via ./test. If `gcc` is not +# found in your system `PATH` then the `ziglang` clang compiler +# will be swapped in automatically. +```` + + +### Testing a bunch of platforms at once. + +``` +./compile teensy41,teensy40 --examples Blink +./compile esp32dev,esp32s3,esp32c3,esp32c6,esp32s2 --examples Blink,Apa102HD +./compiles uno,digix,attiny85 --examples Blink,Apa102HD +``` + +## Unit Tests + +Shared code is unit-tested on the host machine. They can be found at `tests/` at the root of the repo. Unit testing only requires either `python` or `uv` to be installed. The C++ compiler toolchain will be installed automatically. + +The easiest way to run the tests is just use `./test` + +Alternatively, tests can be built and run for your development machine with CMake: + +```bash +cmake -S tests -B tests/.build +ctest --test-dir tests/.build --output-on-failure +# Not that this will fail if you do not have gcc installed. When in doubt +# use ./test to compile the unit tests, as a compiler is guaranteed to be +# available via this tool. +``` + +## QEMU Emulation Testing + +FastLED supports testing ESP32-S3 examples in QEMU emulation, providing a powerful way to validate code without physical hardware. + +### Running ESP32-S3 Examples in QEMU + +```bash +# Test default examples (BlinkParallel, RMT5WorkerPool) +./test --qemu esp32s3 + +# Test specific examples +./test --qemu esp32s3 BlinkParallel +./test --qemu esp32s3 RMT5WorkerPool BlinkParallel + +# Quick validation test (setup verification only) +FASTLED_QEMU_QUICK_TEST=true ./test --qemu esp32s3 +``` + +### What QEMU Testing Does + +1. **Automatic QEMU Installation**: Downloads and sets up ESP32-S3 QEMU emulator +2. **Cross-Platform Compilation**: Builds examples for ESP32-S3 target architecture +3. **Emulated Execution**: Runs compiled firmware in QEMU virtual environment +4. **Automated Validation**: Monitors execution for success/failure indicators + +### QEMU Test Output + +The QEMU tests provide detailed feedback: +- **Build Status**: Compilation success/failure for each example +- **Execution Results**: Runtime behavior in emulated environment +- **Summary Statistics**: Pass/fail counts and timing information +- **Error Details**: Specific failure reasons when tests don't pass + +### Supported Platforms + +Currently supported QEMU platforms: +- **esp32s3**: ESP32-S3 SoC emulation + +Future platforms may include additional ESP32 variants as QEMU support expands. + +### Advanced QEMU Usage + +```bash +# Run with verbose output to see detailed build and execution logs +./test --qemu esp32s3 --verbose + +# Test in non-interactive mode (useful for CI/CD) +./test --qemu esp32s3 --no-interactive +``` + +## VSCode + +We also support VSCode and IntelliSense auto-completion when the free [platformio](https://marketplace.visualstudio.com/items?itemName=platformio.platformio-ide) extension is installed. The development sketch to test library changes can be found at [dev/dev.ino](dev/dev.ino). + + * Make sure you have [platformio](https://marketplace.visualstudio.com/items?itemName=platformio.platformio-ide) installed. + * Click the compile button. + +![image](https://github.com/user-attachments/assets/616cc35b-1736-4bb0-b53c-468580be66f4) +*Changes in non platform specific code can be tested quickly in our webcompiler by invoking the script `./wasm` at the project root* + +## VSCode Debugging Guide + +FastLED includes comprehensive VSCode debugging support with GDB and Clang-generated debug symbols, providing professional-grade step-through debugging capabilities for the test suite. + +### Quick Start + +1. **Prerequisites**: Ensure you have VSCode with the C/C++ extension installed +2. **Open a test file**: e.g., `tests/test_allocator.cpp` +3. **Set breakpoints**: Click the left margin next to line numbers +4. **Press F5**: Automatically debugs the corresponding test executable +5. **Debug**: Use F10 (step over), F11 (step into), F5 (continue) + +### Available Debug Configurations + +#### 🎯 **"Debug FastLED Test (Current File)"** ⭐ *Most Common* +- **When to use**: When you have any test file open (e.g., `test_allocator.cpp`) +- **What it does**: Automatically detects and debugs the corresponding test executable +- **How to use**: Open any `test_*.cpp` file and press `F5` + +#### 🔧 **Specific Test Configurations** +- **"Debug test_allocator"** - Memory allocation and deallocation debugging +- **"Debug test_math"** - Mathematical functions and color calculations +- **"Debug test_fastled"** - Core FastLED functionality and API +- **"Debug test_hsv16"** - Color space conversions and accuracy +- **"Debug test_corkscrew"** - LED layout and geometric calculations + +#### 🎛️ **Advanced Configurations** +- **"Debug with Specific Test Filter"** - Run only specific test cases + - Example: Filter "allocator_inlined" to debug only those tests +- **"Debug with Custom Args"** - Pass custom command-line arguments + - Example: `--verbose`, `--list-test-cases`, etc. + +### Debugging Features + +#### Step Commands +- **F5**: Continue execution +- **F10**: Step over (execute current line) +- **F11**: Step into (enter function calls) +- **Shift+F11**: Step out (exit current function) +- **Ctrl+Shift+F5**: Restart debugging +- **Shift+F5**: Stop debugging + +#### Variable Inspection +- **Variables panel**: See all local variables and their values +- **Watch panel**: Add expressions to monitor continuously +- **Hover inspection**: Hover over variables to see values +- **Debug console**: Type expressions to evaluate + +### Build Tasks for Debugging + +Access via `Ctrl+Shift+P` → "Tasks: Run Task": + +- **"Build FastLED Tests"** - Quick incremental build (default: `Ctrl+Shift+B`) +- **"Build FastLED Tests (Full)"** - Complete build including Python tests +- **"Build Single Test"** - Build and run specific test only +- **"Clean Build"** - Remove all build artifacts and rebuild + +### Debugging Tips for FastLED + +#### Memory Issues +```cpp +// Use test_allocator for memory debugging +// Set breakpoints on allocate/deallocate functions +// Watch pointer values in Variables panel +// Monitor memory patterns for corruption +``` + +#### Color Conversion Issues +```cpp +// Use test_hsv16 for color space debugging +// Watch RGB/HSV values during conversion +// Step through algorithms with F11 +// Compare expected vs actual in Watch panel +``` + +#### Template Debugging +```cpp +// Clang generates excellent template debug info +// Step into template functions with F11 +// Watch template parameters in Variables panel +// Use Call Stack to understand instantiation chain +``` + +### Technical Setup + +#### Clang + GDB Benefits +This setup provides the **best of both worlds**: +- **Clang's superior symbol generation**: Better template debugging, modern C++ support +- **GDB's mature debugging features**: Robust breakpoint handling, memory inspection +- **Cross-platform compatibility**: Works on Linux, macOS, Windows +- **FastLED optimization**: Unified compilation testing with `FASTLED_ALL_SRC=1` + +#### Debug Build Configuration +The FastLED test system automatically uses optimal debug settings: +- **Compiler**: Clang (when available) or GCC fallback +- **Debug info**: `-g3` (full debug information including macros) +- **Optimization**: `-O0` (no optimization for accurate debugging) +- **Frame pointers**: `-fno-omit-frame-pointer` (for accurate stack traces) + +### Troubleshooting + +#### "Program not found" Error +1. **Build first**: Run "Build FastLED Tests" task +2. **Check executable exists**: `ls tests/.build/bin/test_*` +3. **Verify path**: Ensure executable path in launch.json is correct + +#### Breakpoints Not Hit +1. **Check file paths**: Ensure source file matches executable +2. **Verify compilation**: Code might be optimized out +3. **Try function breakpoints**: Sometimes more reliable than line breakpoints + +#### Variables Show "Optimized Out" +1. **Use debug build**: Already configured with `-O0` (no optimization) +2. **Check variable scope**: Variable might be out of scope +3. **Try different breakpoint**: Move breakpoint to where variable is active + +For complete debugging documentation, see [DEBUGGING.md](DEBUGGING.md). + + +## Once you are done + * run `./test` + * run `./lint` + * Then submit your code via a git pull request. + + +## Going deeper + +[ADVANCED_DEVELOPMENT.md](https://github.com/FastLED/FastLED/blob/master/ADVANCED_DEVELOPMENT.md) diff --git a/.pio/libdeps/esp01_1m/FastLED/CORKSCREW.md b/.pio/libdeps/esp01_1m/FastLED/CORKSCREW.md new file mode 100644 index 0000000..89868a2 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/CORKSCREW.md @@ -0,0 +1,203 @@ +# Corkscrew Pipeline: computeTile and multiSample Integration + +## Overview + +The FastLED corkscrew allows the user to write to a regular rectangular buffer and have it displayd on a dense corkscrew of LEDs. + +Dense 144LED @ 3.28 are cheap and readily avialable. They are cheap, have high density. + +## Pipeline Components + +### 1. User Paints to XY Grid + +Users create patterns on a 2D rectangular grid (`fl::Grid`) using standard XY coordinates. + +```cpp +// Grid dimensions calculated from corkscrew parameters +uint16_t width = input.calculateWidth(); // LEDs per turn +uint16_t height = input.calculateHeight(); // Total vertical segments +fl::Grid sourceGrid(width, height); +``` + +### 2. LED Projection: Corkscrew → XY Grid + +Each LED in the corkscrew has a corresponding floating-point position on the XY grid: + +```cpp +// From corkscrew.cpp - calculateLedPositionExtended +vec2f calculateLedPosition(uint16_t ledIndex, uint16_t numLeds, uint16_t width) { + const float ledProgress = static_cast(ledIndex) / static_cast(numLeds - 1); + const uint16_t row = ledIndex / width; // Which turn (vertical position) + const uint16_t remainder = ledIndex % width; // Position within turn + const float alpha = static_cast(remainder) / static_cast(width); + + const float width_pos = ledProgress * numLeds; + const float height_pos = static_cast(row) + alpha; + + return vec2f(width_pos, height_pos); +} +``` + +### 3. computeTile: Splat Pixel Rendering + +The `splat` function implements the "computeTile" concept by converting floating-point positions to `Tile2x2_u8` structures representing neighbor intensities: + +```cpp +// From splat.cpp +Tile2x2_u8 splat(vec2f xy) { + // 1) Get integer cell indices + int16_t cx = static_cast(floorf(xy.x)); + int16_t cy = static_cast(floorf(xy.y)); + + // 2) Calculate fractional offsets [0..1) + float fx = xy.x - cx; + float fy = xy.y - cy; + + // 3) Compute bilinear weights for 4 neighbors + float w_ll = (1 - fx) * (1 - fy); // lower-left + float w_lr = fx * (1 - fy); // lower-right + float w_ul = (1 - fx) * fy; // upper-left + float w_ur = fx * fy; // upper-right + + // 4) Build Tile2x2_u8 with weights as intensities [0..255] + Tile2x2_u8 out(vec2(cx, cy)); + out.lower_left() = to_uint8(w_ll); + out.lower_right() = to_uint8(w_lr); + out.upper_left() = to_uint8(w_ul); + out.upper_right() = to_uint8(w_ur); + + return out; +} +``` + +### 4. Tile2x2_u8: Neighbor Intensity Representation + +The `Tile2x2_u8` structure represents the sampling strength from the four nearest neighbors: + +```cpp +class Tile2x2_u8 { + uint8_t mTile[2][2]; // 4 neighbor intensities [0..255] + vec2 mOrigin; // Base grid coordinate (cx, cy) + + // Access methods for the 4 neighbors: + uint8_t& lower_left(); // (0,0) - weight for pixel at (cx, cy) + uint8_t& lower_right(); // (1,0) - weight for pixel at (cx+1, cy) + uint8_t& upper_left(); // (0,1) - weight for pixel at (cx, cy+1) + uint8_t& upper_right(); // (1,1) - weight for pixel at (cx+1, cy+1) +}; +``` + +### 5. Cylindrical Wrapping with Tile2x2_u8_wrap + +For corkscrew mapping, the tile needs cylindrical wrapping: + +```cpp +// From corkscrew.cpp - at_wrap() +Tile2x2_u8_wrap Corkscrew::at_wrap(float i) const { + Tile2x2_u8 tile = at_splat_extrapolate(i); // Get base tile + Tile2x2_u8_wrap::Entry data[2][2]; + vec2i16 origin = tile.origin(); + + for (uint8_t x = 0; x < 2; x++) { + for (uint8_t y = 0; y < 2; y++) { + vec2i16 pos = origin + vec2i16(x, y); + // Apply cylindrical wrapping to x-coordinate + pos.x = fmodf(pos.x, static_cast(mState.width)); + data[x][y] = {pos, tile.at(x, y)}; // {position, intensity} + } + } + return Tile2x2_u8_wrap(data); +} +``` + +### 6. multiSample: Weighted Color Sampling + +The `readFromMulti` method implements the "multiSample" concept by using tile intensities to determine sampling strength: + +```cpp +// From corkscrew.cpp - readFromMulti() +void Corkscrew::readFromMulti(const fl::Grid& source_grid) const { + for (size_t led_idx = 0; led_idx < mInput.numLeds; ++led_idx) { + // Get wrapped tile for this LED position + Tile2x2_u8_wrap tile = at_wrap(static_cast(led_idx)); + + uint32_t r_accum = 0, g_accum = 0, b_accum = 0; + uint32_t total_weight = 0; + + // Sample from each of the 4 neighbors + for (uint8_t x = 0; x < 2; x++) { + for (uint8_t y = 0; y < 2; y++) { + const auto& entry = tile.at(x, y); + vec2i16 pos = entry.first; // Grid position + uint8_t weight = entry.second; // Sampling intensity [0..255] + + if (inBounds(source_grid, pos)) { + CRGB sample_color = source_grid.at(pos.x, pos.y); + + // Weighted accumulation + r_accum += static_cast(sample_color.r) * weight; + g_accum += static_cast(sample_color.g) * weight; + b_accum += static_cast(sample_color.b) * weight; + total_weight += weight; + } + } + } + + // Final color = weighted average + CRGB final_color = CRGB::Black; + if (total_weight > 0) { + final_color.r = static_cast(r_accum / total_weight); + final_color.g = static_cast(g_accum / total_weight); + final_color.b = static_cast(b_accum / total_weight); + } + + mCorkscrewLeds[led_idx] = final_color; + } +} +``` + +## Complete Pipeline Flow + +``` +1. User draws → XY Grid (CRGB values at integer coordinates) + ↓ +2. LED projection → vec2f position on grid (floating-point) + ↓ +3. computeTile → Tile2x2_u8 (4 neighbor intensities) + (splat) ↓ +4. Wrap for → Tile2x2_u8_wrap (cylindrical coordinates + intensities) + cylinder ↓ +5. multiSample → Weighted sampling from 4 neighbors + (readFromMulti) ↓ +6. Final LED color → CRGB value for corkscrew LED +``` + +## Key Insights + +### Sub-Pixel Accuracy +The system achieves sub-pixel accuracy by: +- Using floating-point LED positions on the grid +- Converting to bilinear weights for 4 nearest neighbors +- Performing weighted color sampling instead of nearest-neighbor + +### Cylindrical Mapping +- X-coordinates wrap around the cylinder circumference +- Y-coordinates represent vertical position along the helix +- Width = LEDs per turn, Height = total vertical segments + +### Anti-Aliasing +The weighted sampling naturally provides anti-aliasing: +- Sharp grid patterns become smoothly interpolated on the corkscrew +- Reduces visual artifacts from the discrete→continuous→discrete mapping + +## Performance Characteristics + +- **Memory**: O(W×H) for grid (O(N) for corkscrew LEDs where O(N) <= O(WxH) == O(WxW)) +- **Computation**: O(N) with 4 samples per LED (constant factor) +- **Quality**: Sub-pixel accurate with built-in anti-aliasing + + +## Future Work + +Often led strips are soldered together. These leaves a gap between the other +leds on the strip. This gab should be accounted for to maximize spatial accuracy with rendering straight lines (e.g. text). diff --git a/.pio/libdeps/esp01_1m/FastLED/FEATURE.md b/.pio/libdeps/esp01_1m/FastLED/FEATURE.md new file mode 100644 index 0000000..d20b860 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/FEATURE.md @@ -0,0 +1,368 @@ +# FastLED Audio Reactive Component Analysis & Improvement Recommendations + +## Executive Summary + +After comprehensive analysis of the FastLED codebase's audio reactive components and research into industry best practices, significant opportunities exist to enhance performance, accuracy, and musical responsiveness. The current implementation provides a solid foundation but lacks advanced algorithms for rhythm analysis, perceptual audio weighting, and embedded system optimization. + +## Current Implementation Analysis + +### Strengths + +**1. Clean Architecture** +- Well-structured `AudioReactive` class with clear separation of concerns +- WLED-compatible 16-bin frequency analysis +- Proper attack/decay smoothing with configurable parameters +- Support for various audio input sources through `AudioSample` abstraction + +**2. Core Processing Pipeline** +- FFT-based frequency analysis using optimized KissFFT implementation +- Automatic Gain Control (AGC) with sensitivity adjustment +- Volume and peak detection with RMS computation +- Basic beat detection with cooldown period + +**3. Embedded-Friendly Design** +- Fixed-size frequency bins (16 channels) +- Stack-allocated FFT buffers using appropriate FastLED containers +- No dynamic memory allocation in audio processing path +- Configurable sample rates and processing parameters + +### Critical Limitations + +**1. Primitive Beat Detection Algorithm** +```cpp +// Current implementation (lines 184-214 in audio_reactive.cpp) +void AudioReactive::detectBeat(fl::u32 currentTimeMs) { + // Simple threshold-based detection + if (currentVolume > mPreviousVolume + mVolumeThreshold && + currentVolume > 5.0f) { + mCurrentData.beatDetected = true; + } +} +``` +This approach suffers from: +- False positives on sustained loud passages +- Poor detection of complex rhythmic patterns +- No tempo tracking or beat prediction +- Inability to distinguish kick drums from other transients + +**2. Lack of Perceptual Audio Weighting** +- No psychoacoustic modeling for human auditory perception +- Linear frequency binning doesn't match musical octaves +- Missing A-weighting or loudness compensation +- No consideration of critical bands or masking effects + +**3. Limited Spectral Analysis** +- Fixed 16-bin resolution may miss important frequency details +- No spectral flux calculation for onset detection +- Missing harmonic analysis for musical note detection +- No adaptive frequency mapping based on musical content + +**4. Insufficient Real-Time Optimization** +- Missing SIMD optimization for FFT calculations +- No circular buffer implementation for streaming +- Potential cache misses in frequency bin processing +- No memory layout optimization for embedded constraints + +## Industry Best Practices Research + +### Advanced Beat Detection Algorithms + +**1. Spectral Flux-Based Onset Detection** +- Analyzes changes in frequency domain magnitude over time +- Significantly more accurate than simple amplitude thresholding +- Reduces false positives by 60-80% compared to current method + +**2. Multi-Band Onset Detection** +- Separate onset detection for bass, mid, and treble frequencies +- Enables detection of polyrhythmic patterns +- Better handling of complex musical arrangements + +**3. Tempo Tracking & Beat Prediction** +- Autocorrelation-based tempo estimation +- Predictive beat scheduling for smoother visual sync +- Adaptive tempo tracking for live performances + +### Perceptual Audio Processing + +**1. Psychoacoustic Weighting** +- Equal-loudness contours (ISO 226) for frequency weighting +- Critical band analysis matching human auditory filters +- Masking models to emphasize perceptually significant content + +**2. Musical Frequency Mapping** +- Logarithmic frequency scales matching musical octaves +- Mel-scale or bark-scale frequency distribution +- Adaptive binning based on musical key detection + +### Embedded System Optimization + +**1. Memory Management** +- Circular buffers for audio streaming (single-threaded) +- Stack-allocated processing with compile-time sizing +- Preallocated object pools for temporary calculations +- Memory alignment for efficient access patterns + +**2. Platform-Specific Optimization** +- ARM DSP instructions for FFT acceleration (Teensy 3.x) +- AVR assembly optimizations for 8-bit platforms +- ESP32 dual-core utilization for audio processing isolation +- Cache-friendly data structures for modern ARM cores + +## Specific Improvement Recommendations + +### Phase 1: Enhanced Beat Detection (High Impact, Low Risk) + +**1. Implement Spectral Flux Algorithm** +```cpp +class SpectralFluxDetector { +#ifdef SKETCH_HAS_LOTS_OF_MEMORY + fl::array mPreviousMagnitudes; + fl::array mFluxHistory; // For advanced smoothing +#else + fl::array mPreviousMagnitudes; + // No history on memory-constrained platforms +#endif + float mFluxThreshold; + + bool detectOnset(const FFTBins& current, const FFTBins& previous); + float calculateSpectralFlux(const FFTBins& current, const FFTBins& previous); +}; +``` + +**2. Multi-Band Beat Detection** +```cpp +struct BeatDetectors { +#ifdef SKETCH_HAS_LOTS_OF_MEMORY + SpectralFluxDetector bass; // 20-200 Hz + SpectralFluxDetector mid; // 200-2000 Hz + SpectralFluxDetector treble; // 2000-20000 Hz +#else + SpectralFluxDetector combined; // Single detector for memory-constrained +#endif +}; +``` + +**3. Adaptive Threshold Algorithm** +- Dynamic threshold based on recent audio history +- Separate thresholds for different frequency bands +- Tempo-aware cooldown periods + +### Phase 2: Perceptual Audio Enhancement (Medium Impact, Medium Risk) + +**1. A-Weighting Implementation** +```cpp +class PerceptualWeighting { + static constexpr fl::array A_WEIGHTING_COEFFS = { + // Frequency-dependent weighting factors + }; + +#ifdef SKETCH_HAS_LOTS_OF_MEMORY + fl::array mLoudnessHistory; // For dynamic compensation +#endif + + void applyAWeighting(AudioData& data) const; + void applyLoudnessCompensation(AudioData& data, float referenceLevel) const; +}; +``` + +**2. Musical Frequency Mapping** +- Replace linear frequency bins with logarithmic musical scale +- Implement note detection and harmonic analysis +- Add chord progression recognition for advanced effects + +**3. Dynamic Range Enhancement** +- Intelligent compression based on musical content +- Frequency-dependent AGC with musical awareness +- Adaptive noise gate with spectral subtraction + +### Phase 3: Embedded Performance Optimization (High Impact, Medium Risk) + +**1. SIMD Acceleration** +```cpp +#ifdef ARM_NEON +void processFFTBins_NEON(const FFTBins& input, AudioData& output); +#endif + +#ifdef __AVR__ +void processFFTBins_AVR_ASM(const FFTBins& input, AudioData& output); +#endif +``` + +**2. Circular Buffer for Audio Streaming** +```cpp +template +class CircularBuffer { + fl::size mWriteIndex{0}; + fl::size mReadIndex{0}; + fl::array mBuffer; + +#ifdef SKETCH_HAS_LOTS_OF_MEMORY + fl::array mBackupBuffer; // For advanced buffering strategies +#endif + + public: + void push(const T& item); + bool pop(T& item); + bool full() const; + bool empty() const; +}; +``` + +**3. Cache-Friendly Data Layout** +```cpp +// Structure of Arrays for better cache locality +struct AudioDataSoA { + alignas(32) fl::array frequencyBins; + alignas(32) fl::array previousBins; + +#ifdef SKETCH_HAS_LOTS_OF_MEMORY + alignas(32) fl::array spectralFlux; + alignas(32) fl::array tempoHistory; +#endif +}; +``` + +### Phase 4: Advanced Features (Variable Impact, High Risk) + +**1. Machine Learning Integration** (Only available with `SKETCH_HAS_LOTS_OF_MEMORY`) +- Lightweight neural network for beat classification +- Real-time genre detection for adaptive processing +- Learned tempo tracking with user feedback + +**2. Multi-Channel Analysis** +- Stereo phase analysis for spatial effects +- Mid/Side processing for enhanced separation +- Cross-correlation for echo and reverb detection + +**3. Musical Structure Analysis** +- Verse/chorus detection for macro-level effects +- Build-up and drop detection for electronic music +- Key and chord progression analysis + +## Implementation Priority Matrix + +| Feature | Impact | Embedded Feasibility | Implementation Risk | Priority | +|---------|--------|---------------------|-------------------|----------| +| Spectral Flux Beat Detection | High | High | Low | 1 | +| Multi-Band Onset Detection | High | High | Low | 2 | +| A-Weighting & Loudness | Medium | High | Low | 3 | +| SIMD Optimization | High | Medium | Medium | 4 | +| Musical Frequency Mapping | Medium | Medium | Medium | 5 | +| Lock-Free Buffers | High | Medium | High | 6 | +| Tempo Tracking | Medium | Medium | High | 7 | +| Machine Learning Features | Low | Low | High | 8 | + +## Technical Specifications + +### Memory Requirements +- **Current**: ~2KB for AudioReactive instance +- **Phase 1**: +1KB for enhanced beat detection +- **Phase 2**: +2KB for perceptual processing +- **Phase 3**: +4KB for optimization buffers + +### Performance Targets +- **Current**: ~200 MIPS on ARM Cortex-M4 +- **Optimized**: <150 MIPS with platform-specific optimizations +- **Latency**: <5ms end-to-end processing (single-threaded) +- **Beat Detection Accuracy**: >90% (vs ~60% current) + +### Platform Compatibility +- **Platforms with `SKETCH_HAS_LOTS_OF_MEMORY`**: Full feature support including ML and advanced buffering + - ESP32, Teensy 4.x, STM32F4+ with sufficient RAM +- **Memory-Constrained Platforms**: Basic feature set optimized for minimal memory usage + - Arduino UNO, ATtiny, basic STM32, older Teensy models +- **Feature Selection**: Automatic based on `SKETCH_HAS_LOTS_OF_MEMORY` define rather than manual platform detection + +## Conclusion + +The FastLED audio reactive component has solid foundations but significant room for improvement. The recommended phased approach balances feature enhancement with embedded system constraints, prioritizing high-impact, low-risk improvements first. Implementation of spectral flux-based beat detection alone would dramatically improve musical responsiveness while maintaining compatibility with existing hardware platforms. + +The proposed enhancements align with industry best practices for real-time audio processing while respecting the unique constraints of embedded LED controller applications. Each phase provides measurable improvements in audio analysis accuracy and visual synchronization quality. + +## C++ Design Audit Findings + +### Critical Design Issues Identified + +**1. Namespace and Container Usage Corrections** +- **Issue**: Original recommendations used `std::` containers instead of FastLED's `fl::` namespace +- **Fix**: All code examples now use `fl::array` instead of `std::array` +- **Impact**: Ensures compatibility with FastLED's embedded-optimized container implementations + +**2. Single-Threaded Architecture Recognition** +- **Issue**: Original document included lock-free and atomic programming recommendations inappropriate for single-threaded embedded systems +- **Fix**: Removed `std::atomic` and lock-free suggestions, replaced with single-threaded circular buffers +- **Impact**: Reduces complexity and memory overhead while matching actual deployment constraints + +**3. Platform-Specific Optimization Alignment** +- **Issue**: Recommended AVX2 optimizations not available on embedded platforms +- **Fix**: Focused on ARM DSP instructions (Teensy 3.x) and AVR assembly optimizations +- **Impact**: Provides realistic performance improvements for actual target hardware + +**4. Memory Management Best Practices** +- **Issue**: Initial recommendations didn't fully leverage FastLED's memory management patterns +- **Fix**: Emphasized `fl::array` for fixed-size allocations and proper alignment macros +- **Impact**: Better cache performance and reduced memory fragmentation + +### Recommended Design Patterns + +**1. Memory-Aware Container Strategy** +```cpp +// Preferred: Fixed-size arrays for predictable memory usage +fl::array mFrequencyBins; + +#ifdef SKETCH_HAS_LOTS_OF_MEMORY +// Advanced features with additional memory +fl::array mExtendedHistory; +#endif + +// Avoid: Dynamic vectors in real-time audio path +// fl::vector mFrequencyBins; // Don't use for real-time +``` + +**2. Memory-Based Feature Selection** +```cpp +#ifdef SKETCH_HAS_LOTS_OF_MEMORY + // Full feature set for high-memory platforms + #define AUDIO_ENABLE_SPECTRAL_FLUX 1 + #define AUDIO_ENABLE_MULTI_BAND 1 + #define AUDIO_ENABLE_TEMPO_TRACKING 1 +#else + // Basic features only for memory-constrained platforms + #define AUDIO_ENABLE_SPECTRAL_FLUX 0 + #define AUDIO_ENABLE_MULTI_BAND 0 + #define AUDIO_ENABLE_TEMPO_TRACKING 0 +#endif +``` + +**3. Memory-Aligned Data Structures** +```cpp +struct AudioProcessingData { + alignas(32) fl::array frequencyBins; + alignas(16) fl::array previousBins; + +#ifdef SKETCH_HAS_LOTS_OF_MEMORY + alignas(32) fl::array spectralFluxBuffer; + alignas(16) fl::array tempoTracker; +#endif + // Alignment ensures efficient memory access patterns +}; +``` + +### Implementation Priority Adjustments + +| Original Priority | Adjusted Priority | Reason | +|------------------|------------------|---------| +| Lock-Free Buffers (6) | Removed | Single-threaded architecture | +| SIMD Optimization (4) | Platform-Specific Opt (4) | Match actual hardware capabilities | +| Machine Learning (8) | Simplified ML (8) | Embedded memory constraints | + +### Final Recommendations + +**1. Use `SKETCH_HAS_LOTS_OF_MEMORY` for all feature gating instead of platform-specific defines** +**2. Start with Phase 1 implementations using FastLED containers** +**3. Leverage existing FastLED SIMD patterns from `lib8tion` for guidance** +**4. Test on memory-constrained platforms (Arduino UNO) first to ensure baseline functionality** +**5. Use ESP32 dual-core architecture for audio processing isolation when available** +**6. Always provide fallback implementations for memory-constrained platforms** + +The corrected design approach ensures all recommendations are implementable within FastLED's existing architecture while providing meaningful performance improvements for real-world embedded applications. diff --git a/.pio/libdeps/esp01_1m/FastLED/FEATURE_PACKAGE_JSON.md b/.pio/libdeps/esp01_1m/FastLED/FEATURE_PACKAGE_JSON.md new file mode 100644 index 0000000..ceb6abf --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/FEATURE_PACKAGE_JSON.md @@ -0,0 +1,494 @@ +# FastLED Native Platform Configuration + +## Overview + +This document describes the comprehensive `platform.json` configuration for FastLED's native build platform. The design leverages the Python `ziglang` package to provide a unified, cross-platform compilation environment that integrates seamlessly with the existing `build_unit.toml` structure. + +## Key Design Principles + +### 1. **Unified Toolchain Integration** +- **Ziglang Foundation**: Uses `python -m ziglang` commands matching the current `build_unit.toml` configuration +- **Cross-Platform Consistency**: Single toolchain across Linux, macOS, Windows with automatic target detection +- **Direct TOML Mapping**: Toolchain commands directly map between `platform.json` and `build_unit.toml` + +### 2. **Comprehensive Architecture Support** +- **x86_64 Targets**: Linux, macOS, Windows with appropriate system-specific flags +- **ARM64 Targets**: Linux (generic), macOS (Apple Silicon), Windows with optimized CPU settings +- **RISC-V 64**: Linux support for emerging architecture +- **Auto-Detection**: Intelligent target selection for simplified development workflow + +### 3. **Arduino Package Format Compliance** +- **PlatformIO Integration**: Full compatibility with PlatformIO package management +- **Framework Support**: Both FastLED-stub and Arduino-stub frameworks +- **Package Dependencies**: Proper toolchain, framework, and tool dependency management +- **Versioning Strategy**: Semantic versioning with appropriate version constraints + +### 4. **Build System Flexibility** +- **Flag Inheritance**: Base, debug, release, and test flag configurations +- **Platform-Specific Linking**: Automatic application of OS-specific link flags +- **Compiler Caching**: Optional ccache/sccache integration for performance +- **Build System Support**: CMake, Ninja, and direct compilation compatibility + +## Complete Platform.json Structure + +The full `platform.json` includes: + +1. **Board Definitions** (8 comprehensive targets): + - `native-x64-linux`, `native-x64-macos`, `native-x64-windows` + - `native-arm64-linux`, `native-arm64-macos`, `native-arm64-windows` + - `native-riscv64-linux`, `native-auto` (intelligent detection) + +2. **Toolchain Configuration**: + - Complete ziglang tool mapping (CC, CXX, AR, LD, etc.) + - Build flag hierarchies (base, debug, release, test) + - Platform-specific link flags for each OS + +3. **Package Management**: + - Toolchain dependencies with proper versioning + - Optional tool packages (cmake, ninja, caching) + - Framework packages for Arduino compatibility + +4. **Development Features**: + - Integrated debugger support (GDB for Linux/Windows, LLDB for macOS) + - Environment variable customization support + - Target compatibility specifications + +## Platform.json Configuration + +The complete platform.json follows Arduino package format with these key sections: + +### Core Metadata +```json +{ + "name": "FastLED Native Platform", + "title": "Native Host Platform with Zig Toolchain", + "description": "Cross-platform native compilation using Zig's bundled Clang", + "version": "1.0.0", + "packageType": "platform", + "spec": { + "owner": "fastled", + "id": "native-zig", + "name": "native-zig" + } +} +``` + +### Framework Definitions +```json +{ + "frameworks": { + "fastled-stub": { + "package": "framework-fastled-stub", + "script": "builder/frameworks/fastled-stub.py" + }, + "arduino-stub": { + "package": "framework-arduino-stub", + "script": "builder/frameworks/arduino-stub.py" + } + } +} +``` + +### Board Configurations +Each board includes complete configuration: +- **Hardware specs**: MCU, RAM, Flash, CPU frequency +- **Target triple**: Zig compilation target +- **Build flags**: Platform-specific preprocessor defines +- **Debug tools**: Appropriate debugger (GDB/LLDB) configuration +- **Framework support**: Compatible frameworks list + +Example board definition: +```json +{ + "native-x64-linux": { + "name": "Native x86_64 Linux", + "mcu": "x86_64", + "fcpu": "3000000000L", + "ram": 17179869184, + "flash": 1099511627776, + "vendor": "Generic", + "product": "Native x86_64", + "frameworks": ["fastled-stub", "arduino-stub"], + "build": { + "target": "x86_64-linux-gnu", + "toolchain": "ziglang", + "cpu": "x86_64", + "mcu": "native", + "f_cpu": "3000000000L", + "extra_flags": [ + "-DNATIVE_PLATFORM=1", + "-DSTUB_PLATFORM=1", + "-DFASTLED_NATIVE_X64=1", + "-DFASTLED_NATIVE_LINUX=1" + ] + }, + "upload": { "protocol": "native" }, + "debug": { + "tools": { + "gdb": { + "server": { + "executable": "gdb", + "arguments": ["$PROG_PATH"] + } + } + } + } + } +} +``` + +### Toolchain Mapping +Direct integration with ziglang commands: +```json +{ + "toolchain-ziglang": { + "CC": "python -m ziglang cc", + "CXX": "python -m ziglang c++", + "AR": "python -m ziglang ar", + "LD": "python -m ziglang c++", + "OBJCOPY": "python -m ziglang objcopy", + "NM": "python -m ziglang nm", + "STRIP": "python -m ziglang strip", + "RANLIB": "python -m ziglang ranlib" + } +} +``` + +### Build Flag Hierarchies +```json +{ + "build_flags": { + "base": [ + "-std=gnu++17", + "-fpermissive", + "-Wall", + "-Wextra", + "-Wno-deprecated-register", + "-Wno-backslash-newline-escape", + "-fno-exceptions", + "-fno-rtti", + "-DSTUB_PLATFORM=1", + "-DNATIVE_PLATFORM=1" + ], + "debug": [ + "-g3", + "-Og", + "-DDEBUG=1", + "-DFASTLED_DEBUG=1" + ], + "release": [ + "-O3", + "-DNDEBUG=1", + "-flto" + ], + "test": [ + "-DFASTLED_UNIT_TEST=1", + "-DFASTLED_FORCE_NAMESPACE=1", + "-DFASTLED_TESTING=1", + "-DFASTLED_USE_PROGMEM=0", + "-DARDUINO=10808", + "-DFASTLED_USE_STUB_ARDUINO=1", + "-DSKETCH_HAS_LOTS_OF_MEMORY=1", + "-DFASTLED_STUB_IMPL=1", + "-DFASTLED_USE_JSON_UI=1", + "-DFASTLED_NO_AUTO_NAMESPACE=1", + "-DFASTLED_NO_PINMAP=1", + "-DHAS_HARDWARE_PIN_SUPPORT=1", + "-DFASTLED_DEBUG_LEVEL=1", + "-DFASTLED_NO_ATEXIT=1", + "-DDOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS=1" + ] + } +} +``` + +### Platform-Specific Linking +```json +{ + "link_flags": { + "base": [], + "linux": [ + "-pthread", + "-lm", + "-ldl" + ], + "macos": [ + "-pthread", + "-lm" + ], + "windows": [ + "-mconsole", + "-nodefaultlibs", + "-unwindlib=libunwind", + "-nostdlib++", + "-lc++", + "-lkernel32", + "-luser32", + "-lgdi32", + "-ladvapi32" + ] + } +} +``` + +## Integration with build_unit.toml + +The `platform.json` is designed to seamlessly integrate with the existing `build_unit.toml` configuration: + +### Toolchain Mapping + +The `[tools]` section in `build_unit.toml` directly maps to the ziglang toolchain defined in `platform.json`: + +- `cpp_compiler = ["python", "-m", "ziglang", "c++"]` → `CXX: "python -m ziglang c++"` +- `linker = ["python", "-m", "ziglang", "c++"]` → `LD: "python -m ziglang c++"` +- `archiver = ["python", "-m", "ziglang", "ar"]` → `AR: "python -m ziglang ar"` + +### Build Flag Integration + +The platform flags complement the TOML configuration: + +- **Base flags**: Defined in both `platform.json` and `build_unit.toml` for consistency +- **Platform-specific flags**: Windows-specific flags from TOML are automatically applied +- **Test flags**: Unit test defines from TOML are included in the platform test configuration + +### Target Selection + +The platform supports automatic target detection or explicit target selection: + +```bash +# Auto-detect target +platformio run -e native-auto + +# Explicit target selection +platformio run -e native-x64-linux +platformio run -e native-arm64-macos +platformio run -e native-x64-windows +``` + +## Integration Benefits + +### Seamless TOML Integration +The design ensures perfect compatibility with existing `build_unit.toml`: +- Toolchain commands match exactly: `["python", "-m", "ziglang", "c++"]` +- Build flags complement rather than duplicate TOML configuration +- Platform-specific flags automatically applied based on detection + +### Enhanced Development Workflow +- **Single Command Compilation**: `platformio run -e native-auto` +- **Cross-Compilation Support**: Build for different targets from any host +- **Testing Integration**: Full unit test support with proper namespace isolation +- **Debug Builds**: Integrated debugging with platform-appropriate tools + +### Future-Proof Architecture +- **Extensible Design**: Easy addition of new architectures and targets +- **WebAssembly Ready**: Structure supports future WASM integration +- **Container Builds**: Foundation for Docker/Podman integration +- **Static Analysis**: Framework for clang-tidy and analyzer integration + +## Usage Examples + +### Basic Compilation + +```bash +# Compile for current platform (auto-detect) +platformio run -e native-auto + +# Compile for specific platform +platformio run -e native-x64-linux +``` + +### Testing + +```bash +# Run unit tests +platformio test -e native-auto + +# Run tests with specific build flags +platformio test -e native-x64-linux --test-port=native +``` + +### Cross-Compilation + +```bash +# Compile for ARM64 Linux from x86_64 +platformio run -e native-arm64-linux + +# Compile for Windows from Linux +platformio run -e native-x64-windows +``` + +### Debug Builds + +```bash +# Debug build with symbols +platformio run -e native-auto --build-type=debug + +# Release build with optimization +platformio run -e native-auto --build-type=release +``` + +## Advanced Configuration + +### Custom Board Definition + +```json +{ + "native-custom": { + "name": "Custom Native Target", + "mcu": "custom", + "build": { + "target": "x86_64-linux-musl", + "extra_flags": [ + "-DCUSTOM_DEFINE=1", + "-static" + ] + } + } +} +``` + +### Environment Variables + +The platform respects environment variables for customization: + +- `ZIG_TARGET`: Override target triple (e.g., `x86_64-linux-musl`) +- `ZIG_CPU`: Override CPU type (e.g., `x86_64_v3`) +- `FASTLED_NATIVE_FLAGS`: Additional compiler flags + +### Build System Integration + +The platform integrates with multiple build systems: + +- **PlatformIO**: Primary integration with comprehensive board support +- **CMake**: Compatible with existing CMake configurations +- **Direct Compilation**: Can be used directly with ziglang commands + +## Complete Board Definitions + +The platform.json includes 8 comprehensive board definitions: + +1. **native-x64-linux**: x86_64 Linux with GNU target +2. **native-x64-macos**: x86_64 macOS with Apple-specific configuration +3. **native-x64-windows**: x86_64 Windows with MinGW compatibility +4. **native-arm64-linux**: ARM64 Linux with Cortex-A76 optimization +5. **native-arm64-macos**: ARM64 macOS with Apple M1 optimization +6. **native-arm64-windows**: ARM64 Windows with appropriate runtime +7. **native-riscv64-linux**: RISC-V 64-bit Linux support +8. **native-auto**: Automatic target detection and selection + +## Tool Dependencies + +The platform includes comprehensive tool support: + +```json +{ + "tools": { + "python-ziglang": { + "type": "compiler", + "version": "^0.13.0", + "description": "Zig toolchain with bundled Clang/LLVM", + "install": { "pip": "ziglang" } + }, + "cmake": { + "type": "build-system", + "version": "^3.21.0", + "optional": true + }, + "ninja": { + "type": "build-system", + "version": "^1.11.0", + "optional": true + }, + "ccache": { + "type": "compiler-cache", + "version": "^4.0.0", + "optional": true + }, + "sccache": { + "type": "compiler-cache", + "version": "^0.7.0", + "optional": true + } + } +} +``` + +## Target Compatibility + +Platform compatibility specifications ensure proper deployment: + +```json +{ + "target_compatibility": { + "x86_64-linux-gnu": { + "glibc": ">=2.31", + "kernel": ">=5.4.0" + }, + "x86_64-macos-none": { + "macos": ">=11.0" + }, + "x86_64-windows-gnu": { + "windows": ">=10" + }, + "aarch64-linux-gnu": { + "glibc": ">=2.31", + "kernel": ">=5.4.0" + }, + "aarch64-macos-none": { + "macos": ">=11.0" + }, + "aarch64-windows-gnu": { + "windows": ">=10" + }, + "riscv64-linux-gnu": { + "glibc": ">=2.31", + "kernel": ">=5.10.0" + } + } +} +``` + +## Troubleshooting + +### Common Issues + +1. **Ziglang not found**: Ensure `ziglang` Python package is installed +2. **Target not supported**: Check `zig targets` for available targets +3. **Linking errors**: Verify platform-specific link flags in configuration + +### Debug Information + +```bash +# Check available targets +zig targets + +# Verify toolchain installation +python -m ziglang version + +# Test compilation +python -m ziglang c++ --version +``` + +## Implementation Status + +This design is **ready for implementation** and provides: +- ✅ **Complete board definitions** for all major native platforms +- ✅ **Full toolchain integration** with existing ziglang setup +- ✅ **Comprehensive build configurations** for all use cases +- ✅ **Arduino package format compliance** for PlatformIO compatibility +- ✅ **Debug and development tool integration** for professional development +- ✅ **Future-proof extensible architecture** for additional platforms + +The configuration can be deployed alongside the existing build system for gradual validation and testing before full migration. + +## Future Enhancements + +- **WebAssembly Support**: Integration with FastLED WASM compilation +- **Static Analysis**: Integration with clang-tidy and static analyzers +- **Performance Profiling**: Built-in profiling support for optimization +- **Container Builds**: Docker/Podman integration for reproducible builds +- **Package Registry**: Publication to Arduino package index for distribution + +## Conclusion + +This platform.json design provides a comprehensive, production-ready configuration for FastLED's native build platform. It seamlessly integrates with the existing `build_unit.toml` while providing the standardized Arduino package format required for broader ecosystem compatibility. The design is thoroughly tested conceptually and ready for implementation with proper validation and testing procedures. diff --git a/.pio/libdeps/esp01_1m/FastLED/FEATURE_RMT5_POOL.md b/.pio/libdeps/esp01_1m/FastLED/FEATURE_RMT5_POOL.md new file mode 100644 index 0000000..5e59643 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/FEATURE_RMT5_POOL.md @@ -0,0 +1,1172 @@ +# RMT5 Worker Pool Implementation + +## Problem Statement + +ESP32 RMT5 has hardware limitations on the number of LED strips it can control simultaneously: +- **ESP32**: 8 RMT channels maximum +- **ESP32-S2/S3**: 4 RMT channels maximum +- **ESP32-C3/H2**: 2 RMT channels maximum + +Currently, FastLED's RMT5 implementation creates a one-to-one mapping between `RmtController5` instances and RMT hardware channels. This means you can only control K strips simultaneously, where K is the hardware limit. + +**Goal**: Implement a worker pool system to support N strips where N > K, allowing any reasonable number of LED strips to be controlled by recycling RMT workers. + +## Current RMT5 Architecture + +### Class Hierarchy +```cpp +ClocklessController + └── RmtController5 (mRMTController) + └── IRmtStrip* (mLedStrip) + └── RmtStrip (concrete implementation) + └── led_strip_handle_t (mStrip) // ESP-IDF handle + └── rmt_channel_handle_t // Hardware channel +``` + +### Current Flow +1. `RmtController5::loadPixelData()` creates `IRmtStrip` on first call +2. `IRmtStrip::Create()` calls `led_strip_new_rmt_device()` which allocates a hardware RMT channel +3. Channel remains allocated until `RmtStrip` destructor calls `led_strip_del()` +4. No sharing or pooling exists + +## RMT4 Worker Pool Reference + +RMT4 implements a sophisticated worker pool system: + +### Key Components +- **`gControllers[FASTLED_RMT_MAX_CONTROLLERS]`**: Array of all registered controllers +- **`gOnChannel[FASTLED_RMT_MAX_CHANNELS]`**: Currently active controllers per channel +- **Global counters**: `gNumStarted`, `gNumDone`, `gNext` for coordination +- **Semaphore coordination**: `gTX_sem` for synchronization + +### RMT4 Worker Pool Flow +1. All controllers register in `gControllers[]` during construction +2. `showPixels()` triggers batch processing when `gNumStarted == gNumControllers` +3. First K controllers start immediately on available channels +4. Remaining controllers queue until channels become available +5. `doneOnChannel()` callback releases channels and starts next queued controller +6. Process continues until all controllers complete + +## Proposed RMT5 Worker Pool Architecture + +### Core Design Principles + +1. **Backward Compatibility**: Existing `RmtController5` API remains unchanged +2. **Transparent Pooling**: Controllers don't know they're sharing workers +3. **Automatic Resource Management**: Workers handle setup/teardown automatically +4. **Thread Safety**: Pool operations are atomic and interrupt-safe + +### New Components + +#### 1. RmtWorkerPool (Singleton) +```cpp +class RmtWorkerPool { +public: + static RmtWorkerPool& getInstance(); + + // Worker management + RmtWorker* acquireWorker(const RmtWorkerConfig& config); + void releaseWorker(RmtWorker* worker); + + // Coordination + void registerController(RmtController5* controller); + void unregisterController(RmtController5* controller); + void executeDrawCycle(); + +private: + fl::vector mAvailableWorkers; + fl::vector mBusyWorkers; + fl::vector mRegisteredControllers; + + // Synchronization + SemaphoreHandle_t mPoolMutex; + SemaphoreHandle_t mDrawSemaphore; + + // State tracking + int mActiveDrawCount; + int mCompletedDrawCount; +}; +``` + +#### 2. RmtWorker (Replaceable RMT Resource) +```cpp +class RmtWorker { +public: + // Configuration for worker setup + struct Config { + int pin; + uint32_t ledCount; + bool isRgbw; + uint32_t t0h, t0l, t1h, t1l, reset; + IRmtStrip::DmaMode dmaMode; + }; + + // Worker lifecycle + bool configure(const Config& config); + void loadPixelData(fl::PixelIterator& pixels); + void startTransmission(); + void waitForCompletion(); + + // State management + bool isAvailable() const; + bool isConfiguredFor(const Config& config) const; + void reset(); + + // Callbacks + void onTransmissionComplete(); + +private: + IRmtStrip* mCurrentStrip; + Config mCurrentConfig; + bool mIsAvailable; + bool mTransmissionActive; + RmtWorkerPool* mPool; // Back reference for release +}; +``` + +#### 3. Modified RmtController5 +```cpp +class RmtController5 { +public: + // Existing API unchanged + RmtController5(int DATA_PIN, int T1, int T2, int T3, DmaMode dma_mode); + void loadPixelData(PixelIterator &pixels); + void showPixels(); + +private: + // New pooled implementation + RmtWorkerConfig mWorkerConfig; + fl::vector mPixelBuffer; // Persistent buffer + bool mRegisteredWithPool; + + // Remove direct IRmtStrip ownership + // IRmtStrip *mLedStrip = nullptr; // REMOVED +}; +``` + +### Worker Pool Operation Flow + +#### Registration Phase (Constructor) +```cpp +RmtController5::RmtController5(int DATA_PIN, int T1, int T2, int T3, DmaMode dma_mode) + : mPin(DATA_PIN), mT1(T1), mT2(T2), mT3(T3), mDmaMode(dma_mode) { + + // Configure worker requirements + mWorkerConfig = {DATA_PIN, 0, false, t0h, t0l, t1h, t1l, 280, convertDmaMode(dma_mode)}; + + // Register with pool + RmtWorkerPool::getInstance().registerController(this); + mRegisteredWithPool = true; +} +``` + +#### Data Loading Phase +```cpp +void RmtController5::loadPixelData(PixelIterator &pixels) { + // Update worker config with actual pixel count + mWorkerConfig.ledCount = pixels.size(); + mWorkerConfig.isRgbw = pixels.get_rgbw().active(); + + // Store pixel data in persistent buffer + storePixelData(pixels); +} + +void RmtController5::storePixelData(PixelIterator &pixels) { + const int bytesPerPixel = mWorkerConfig.isRgbw ? 4 : 3; + const int bufferSize = mWorkerConfig.ledCount * bytesPerPixel; + + mPixelBuffer.resize(bufferSize); + + // Copy pixel data to persistent buffer + uint8_t* bufPtr = mPixelBuffer.data(); + if (mWorkerConfig.isRgbw) { + while (pixels.has(1)) { + uint8_t r, g, b, w; + pixels.loadAndScaleRGBW(&r, &g, &b, &w); + *bufPtr++ = r; *bufPtr++ = g; *bufPtr++ = b; *bufPtr++ = w; + pixels.advanceData(); + pixels.stepDithering(); + } + } else { + while (pixels.has(1)) { + uint8_t r, g, b; + pixels.loadAndScaleRGB(&r, &g, &b); + *bufPtr++ = r; *bufPtr++ = g; *bufPtr++ = b; + pixels.advanceData(); + pixels.stepDithering(); + } + } +} +``` + +#### Execution Phase (Coordinated Draw) +```cpp +void RmtController5::showPixels() { + // Trigger coordinated draw cycle + RmtWorkerPool::getInstance().executeDrawCycle(); +} + +void RmtWorkerPool::executeDrawCycle() { + // Similar to RMT4 coordination logic + mActiveDrawCount = 0; + mCompletedDrawCount = 0; + + // Take draw semaphore + xSemaphoreTake(mDrawSemaphore, portMAX_DELAY); + + // Start as many controllers as we have workers + int startedCount = 0; + for (auto* controller : mRegisteredControllers) { + if (startedCount < mAvailableWorkers.size()) { + startController(controller); + startedCount++; + } + } + + // Wait for all controllers to complete + while (mCompletedDrawCount < mRegisteredControllers.size()) { + xSemaphoreTake(mDrawSemaphore, portMAX_DELAY); + + // Start next queued controller if workers available + startNextQueuedController(); + + xSemaphoreGive(mDrawSemaphore); + } +} + +void RmtWorkerPool::startController(RmtController5* controller) { + // Acquire worker from pool + RmtWorker* worker = acquireWorker(controller->getWorkerConfig()); + if (!worker) { + // This should not happen if pool is sized correctly + return; + } + + // Configure worker for this controller + worker->configure(controller->getWorkerConfig()); + + // Load pixel data from controller's persistent buffer + loadPixelDataToWorker(worker, controller); + + // Start transmission + worker->startTransmission(); + + mActiveDrawCount++; +} + +void RmtWorkerPool::onWorkerComplete(RmtWorker* worker) { + // Called from worker's completion callback + mCompletedDrawCount++; + + // Release worker back to pool + releaseWorker(worker); + + // Signal main thread + xSemaphoreGive(mDrawSemaphore); +} +``` + +### Worker Reconfiguration Strategy + +#### Efficient Worker Reuse +```cpp +bool RmtWorker::configure(const Config& newConfig) { + // Check if reconfiguration is needed + if (isConfiguredFor(newConfig)) { + return true; // Already configured correctly + } + + // Tear down current configuration + if (mCurrentStrip) { + // Wait for any pending transmission + if (mTransmissionActive) { + mCurrentStrip->waitDone(); + } + + // Clean shutdown + delete mCurrentStrip; + mCurrentStrip = nullptr; + } + + // Create new strip with new configuration + mCurrentStrip = IRmtStrip::Create( + newConfig.pin, newConfig.ledCount, newConfig.isRgbw, + newConfig.t0h, newConfig.t0l, newConfig.t1h, newConfig.t1l, + newConfig.reset, newConfig.dmaMode + ); + + if (!mCurrentStrip) { + return false; + } + + mCurrentConfig = newConfig; + return true; +} +``` + +#### Pin State Management +```cpp +void RmtWorker::reset() { + if (mCurrentStrip) { + // Ensure transmission is complete + if (mTransmissionActive) { + mCurrentStrip->waitDone(); + } + + // Set pin to safe state before teardown + gpio_set_level((gpio_num_t)mCurrentConfig.pin, 0); + gpio_set_direction((gpio_num_t)mCurrentConfig.pin, GPIO_MODE_OUTPUT); + + // Clean up strip + delete mCurrentStrip; + mCurrentStrip = nullptr; + } + + mTransmissionActive = false; + mIsAvailable = true; +} +``` + +### Memory Management Strategy + +#### Persistent Pixel Buffers +Each `RmtController5` maintains its own pixel buffer to avoid data races: + +```cpp +class RmtController5 { +private: + fl::vector mPixelBuffer; // Persistent storage + RmtWorkerConfig mWorkerConfig; // Configuration cache + + void storePixelData(PixelIterator& pixels); + void restorePixelData(RmtWorker* worker); +}; +``` + +#### Worker Pool Sizing +```cpp +void RmtWorkerPool::initialize() { + // Determine hardware channel count + int maxChannels = getHardwareChannelCount(); + + // Create one worker per hardware channel + mAvailableWorkers.reserve(maxChannels); + for (int i = 0; i < maxChannels; i++) { + mAvailableWorkers.push_back(new RmtWorker()); + } +} + +int RmtWorkerPool::getHardwareChannelCount() { +#if CONFIG_IDF_TARGET_ESP32 + return 8; +#elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 + return 4; +#elif CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32H2 + return 2; +#else + return 2; // Conservative default +#endif +} +``` + +## Key Implementation Insights + +### Critical Async Decision Point +The worker pool must make a **per-controller decision** at `showPixels()` time: + +```cpp +void RmtController5::showPixels() { + RmtWorkerPool& pool = RmtWorkerPool::getInstance(); + + // CRITICAL: This decision determines async vs blocking behavior + if (pool.hasAvailableWorker()) { + // ASYNC PATH: Start immediately and return + pool.startControllerImmediate(this); + return; // Returns immediately - preserves async! + } else { + // BLOCKING PATH: This specific controller must wait + pool.startControllerQueued(this); // May block with polling + } +} +``` + +### ESP-IDF RMT Channel Management +Direct integration with ESP-IDF RMT5 APIs instead of using led_strip wrapper: + +```cpp +class RmtWorker { +private: + rmt_channel_handle_t mChannel; + rmt_encoder_handle_t mEncoder; + +public: + // Direct RMT channel creation for maximum control + bool createChannel(int pin) { + rmt_tx_channel_config_t config = { + .gpio_num = pin, + .clk_src = RMT_CLK_SRC_DEFAULT, + .resolution_hz = 10000000, + .mem_block_symbols = 64, + .trans_queue_depth = 1, // Single transmission per worker + }; + + ESP_ERROR_CHECK(rmt_new_tx_channel(&config, &mChannel)); + + // Register callback for async completion + rmt_tx_event_callbacks_t callbacks = { + .on_trans_done = onTransComplete, + }; + ESP_ERROR_CHECK(rmt_tx_register_event_callbacks(mChannel, &callbacks, this)); + + return true; + } + + void transmitAsync(uint8_t* pixelData, size_t dataSize) { + // Direct transmission - bypasses led_strip wrapper + ESP_ERROR_CHECK(rmt_enable(mChannel)); + ESP_ERROR_CHECK(rmt_transmit(mChannel, mEncoder, pixelData, dataSize, &mTxConfig)); + // Returns immediately - async transmission started + } +}; +``` + +### Polling Strategy Implementation +Use `delayMicroseconds(100)` only for queued controllers: + +```cpp +void RmtWorkerPool::startControllerQueued(RmtController5* controller) { + // Add to queue + mQueuedControllers.push_back(controller); + + // Poll until this controller gets a worker + while (true) { + if (RmtWorker* worker = tryAcquireWorker()) { + // Remove from queue and start + mQueuedControllers.remove(controller); + startControllerImmediate(controller, worker); + break; + } + + // Brief delay to prevent busy-wait + delayMicroseconds(100); + + // Yield periodically for FreeRTOS + static uint32_t pollCount = 0; + if (++pollCount % 50 == 0) { + yield(); + } + } +} +``` + +## Implementation Plan + +### Phase 1: Core Infrastructure +1. **Create `RmtWorkerPool` singleton** + - Basic worker management (acquire/release) + - Controller registration system + - Thread-safe operations with mutexes + +2. **Implement `RmtWorker` class** + - Worker lifecycle management + - Configuration and reconfiguration logic + - Completion callbacks + +3. **Modify `RmtController5`** + - Add persistent pixel buffer + - Integrate with worker pool + - Maintain backward-compatible API + +### Phase 2: Coordination Logic +1. **Implement coordinated draw cycle** + - Batch processing similar to RMT4 + - Semaphore-based synchronization + - Queue management for excess controllers + +2. **Add worker completion handling** + - Async completion callbacks + - Automatic worker recycling + - Next controller startup + +### Phase 3: Optimization & Safety +1. **Optimize worker reconfiguration** + - Minimize teardown/setup when possible + - Cache compatible configurations + - Efficient pin state management + +2. **Add error handling** + - Worker allocation failures + - Transmission errors + - Recovery mechanisms + +3. **Memory optimization** + - Minimize buffer copying + - Efficient pixel data transfer + - Memory pool for workers + +### Phase 4: Testing & Integration +1. **Unit tests** + - Worker pool operations + - Controller coordination + - Error scenarios + +2. **Integration testing** + - Multiple strip configurations + - High load scenarios + - Hardware limit validation + +3. **Performance benchmarking** + - Throughput comparison with RMT4 + - Memory usage analysis + - Latency measurements + +## CRITICAL: Async Behavior Preservation + +**Key Requirement**: RMT5 currently provides async drawing where `endShowLeds()` returns immediately without waiting. This must be preserved when N ≤ K, and only use polling/waiting when N > K. + +### Current RMT5 Async Flow +```cpp +// Current behavior - MUST PRESERVE when N ≤ K +void ClocklessController::endShowLeds(void *data) { + CPixelLEDController::endShowLeds(data); + mRMTController.showPixels(); // Calls drawAsync() - returns immediately! +} +``` + +### Async Strategy for Worker Pool + +#### When N ≤ K (Preserve Full Async) +- **Direct Assignment**: Each controller gets dedicated worker immediately +- **No Waiting**: `endShowLeds()` returns immediately after starting transmission +- **Callback-Driven**: Use ESP-IDF `rmt_tx_event_callbacks_t::on_trans_done` for completion +- **Zero Overhead**: Maintain current performance characteristics + +#### When N > K (Controlled Polling) +- **Immediate Start**: First K controllers start immediately (async) +- **Queue Remaining**: Controllers K+1 through N queue for workers +- **Polling Strategy**: Use `delayMicroseconds(100)` polling for queued controllers +- **Callback Coordination**: Workers signal completion via callbacks to start next queued controller + +## ESP-IDF RMT5 Callback Integration + +### Callback Registration Pattern +```cpp +class RmtWorker { +private: + rmt_channel_handle_t mRmtChannel; + RmtWorkerPool* mPool; + + static bool IRAM_ATTR onTransmissionComplete( + rmt_channel_handle_t channel, + const rmt_tx_done_event_data_t *edata, + void *user_data) { + + RmtWorker* worker = static_cast(user_data); + worker->handleTransmissionComplete(); + return false; // No high-priority task woken + } + +public: + bool initialize() { + // Create RMT channel + rmt_tx_channel_config_t tx_config = { + .gpio_num = mPin, + .clk_src = RMT_CLK_SRC_DEFAULT, + .resolution_hz = 10000000, // 10MHz + .mem_block_symbols = 64, + .trans_queue_depth = 4, + }; + + if (rmt_new_tx_channel(&tx_config, &mRmtChannel) != ESP_OK) { + return false; + } + + // Register completion callback + rmt_tx_event_callbacks_t callbacks = { + .on_trans_done = onTransmissionComplete, + }; + + return rmt_tx_register_event_callbacks(mRmtChannel, &callbacks, this) == ESP_OK; + } + + void handleTransmissionComplete() { + // Signal pool that this worker is available + mPool->onWorkerComplete(this); + } +}; +``` + +## Revised Worker Pool Architecture + +### Async-Aware Worker Pool +```cpp +class RmtWorkerPool { +public: + enum class DrawMode { + ASYNC_ONLY, // N ≤ K: All controllers async + MIXED_MODE // N > K: Some async, some polled + }; + + void executeDrawCycle() { + const int numControllers = mRegisteredControllers.size(); + const int numWorkers = mAvailableWorkers.size(); + + if (numControllers <= numWorkers) { + // ASYNC_ONLY mode - preserve full async behavior + executeAsyncOnlyMode(); + } else { + // MIXED_MODE - async for first K, polling for rest + executeMixedMode(); + } + } + +private: + void executeAsyncOnlyMode() { + // Start all controllers immediately - full async behavior preserved + for (auto* controller : mRegisteredControllers) { + RmtWorker* worker = acquireWorker(controller->getWorkerConfig()); + startControllerAsync(controller, worker); + } + // Return immediately - no waiting! + } + + void executeMixedMode() { + // Start first K controllers immediately (async) + int startedCount = 0; + for (auto* controller : mRegisteredControllers) { + if (startedCount < mAvailableWorkers.size()) { + RmtWorker* worker = acquireWorker(controller->getWorkerConfig()); + startControllerAsync(controller, worker); + startedCount++; + } else { + // Queue remaining controllers + mQueuedControllers.push_back(controller); + } + } + + // Poll for completion of queued controllers + while (!mQueuedControllers.empty()) { + delayMicroseconds(100); // Non-blocking poll interval + // Callback-driven worker completion will process queue + } + } + + void onWorkerComplete(RmtWorker* worker) { + // Called from ISR context via callback + releaseWorker(worker); + + // Start next queued controller if available + if (!mQueuedControllers.empty()) { + RmtController5* nextController = mQueuedControllers.front(); + mQueuedControllers.pop_front(); + + // Reconfigure worker and start transmission + startControllerAsync(nextController, worker); + } + } +}; +``` + +### Modified RmtController5 for Async Preservation +```cpp +class RmtController5 { +public: + void showPixels() { + // This method MUST return immediately when N ≤ K + // Only block when this specific controller is queued (N > K) + + RmtWorkerPool& pool = RmtWorkerPool::getInstance(); + + if (pool.canStartImmediately(this)) { + // Async path - return immediately + pool.startControllerImmediate(this); + } else { + // This controller is queued - must wait for worker + pool.startControllerQueued(this); + } + } +}; +``` + +## Polling Strategy Details + +### Microsecond Polling Pattern +```cpp +void RmtWorkerPool::waitForQueuedControllers() { + while (!mQueuedControllers.empty()) { + // Non-blocking check for available workers + if (hasAvailableWorker()) { + processNextQueuedController(); + } else { + // Short delay to prevent busy-waiting + delayMicroseconds(100); // 100μs polling interval + } + + // Yield to other tasks periodically + static uint32_t pollCount = 0; + if (++pollCount % 50 == 0) { // Every 5ms (50 * 100μs) + yield(); + } + } +} +``` + +### Callback-Driven Queue Processing +```cpp +void RmtWorker::handleTransmissionComplete() { + // Called from ISR context - keep minimal + BaseType_t xHigherPriorityTaskWoken = pdFALSE; + + // Signal completion to pool + xSemaphoreGiveFromISR(mPool->getCompletionSemaphore(), &xHigherPriorityTaskWoken); + + portYIELD_FROM_ISR(xHigherPriorityTaskWoken); +} + +void RmtWorkerPool::processCompletionEvents() { + // Called from main task context + while (xSemaphoreTake(mCompletionSemaphore, 0) == pdTRUE) { + // Process one completion event + if (!mQueuedControllers.empty()) { + RmtController5* nextController = mQueuedControllers.front(); + mQueuedControllers.pop_front(); + + // Find available worker and start next transmission + RmtWorker* worker = findAvailableWorker(); + if (worker) { + startControllerAsync(nextController, worker); + } + } + } +} +``` + +## Benefits + +1. **Async Preservation**: Full async behavior maintained when N ≤ K +2. **Scalability**: Support unlimited LED strips (within memory constraints) +3. **Backward Compatibility**: Existing code works unchanged +4. **Resource Efficiency**: Optimal use of limited RMT hardware +5. **Controlled Blocking**: Only blocks when specific controller is queued +6. **Callback Efficiency**: ISR-driven completion for minimal latency +7. **Polling Optimization**: 100μs intervals prevent busy-waiting + +## Considerations + +1. **Memory Usage**: Each controller needs persistent pixel buffer +2. **Latency**: Worker switching adds small overhead +3. **Complexity**: More complex than direct mapping +4. **Debugging**: Pool coordination harder to debug than direct control + +## Migration Path + +The implementation maintains full backward compatibility. Existing code using `RmtController5` will automatically benefit from the worker pool without any changes required. + +## CRITICAL: LED Buffer Transfer Analysis - CORRECTED FINDINGS + +### ESP-IDF LED Buffer Management + +**Key Finding**: The ESP-IDF led_strip driver **supports external pixel buffers** and **buffer transfer IS possible through RMT channel recreation**. + +#### Current Buffer Architecture +```cpp +typedef struct { + led_strip_t base; + rmt_channel_handle_t rmt_chan; + rmt_encoder_handle_t strip_encoder; + uint8_t *pixel_buf; // ← Buffer pointer (fixed at creation) + bool pixel_buf_allocated_internally; // ← Ownership flag + // ... other fields +} led_strip_rmt_obj; +``` + +#### Buffer Creation Options +```cpp +led_strip_config_t strip_config = { + .strip_gpio_num = pin, + .max_leds = led_count, + .external_pixel_buf = external_buffer, // ← Can provide external buffer + // ... other config +}; +``` + +### Buffer Transfer Solution - RMT Channel Recreation + +**✅ POSSIBLE**: Buffer transfer through worker reconfiguration +- **Destroy existing RMT channel** when switching controllers +- **Create new RMT channel** with different external buffer +- **Worker pool manages appropriately-sized buffers** for each controller's requirements +- **RMT channels always use external buffers** owned by the worker pool + +### Critical Insight: Buffer Size Requirements + +**The Core Issue**: Different controllers need different buffer sizes: +- **Controller A**: 100 RGB LEDs → 300 bytes buffer +- **Controller B**: 200 RGBW LEDs → 800 bytes buffer +- **RMT Channel**: Must be recreated with appropriate buffer size for each controller + +**ESP-IDF led_strip_rmt_obj Structure:** +```cpp +typedef struct { + led_strip_t base; + rmt_channel_handle_t rmt_chan; + rmt_encoder_handle_t strip_encoder; + uint32_t strip_len; + uint8_t bytes_per_pixel; + led_color_component_format_t component_fmt; + uint8_t *pixel_buf; // ← MUST be external and pool-managed + bool pixel_buf_allocated_internally; // ← Always false for worker pool +} led_strip_rmt_obj; +``` + +**Available Buffer APIs (Complete List):** +- `led_strip_set_pixel()` - Writes to existing buffer +- `led_strip_set_pixel_rgbw()` - Writes to existing buffer +- `led_strip_clear()` - Zeros existing buffer +- `led_strip_refresh_async()` - Transmits from existing buffer +- **KEY**: `led_strip_del()` does NOT free external buffers (pixel_buf_allocated_internally = false) + +**Confirmed Solution**: Buffer transfer achieved through: +1. **Worker pool owns all RMT buffers** +2. **RMT channels destroyed/recreated** with appropriate buffer sizes +3. **External buffer management** prevents buffer deallocation during RMT destruction + +### Buffer Transfer Solution: Worker Pool Buffer Management + +**CORRECTED APPROACH**: Worker pool manages all RMT buffers and handles buffer sizing for different controllers. + +#### Worker Pool Buffer Management Strategy +```cpp +class RmtWorkerPool { +private: + struct WorkerState { + IRmtStrip* strip; + uint8_t* worker_buffer; // Pool-owned buffer for this worker + size_t buffer_capacity; // Current buffer size + WorkerConfig current_config; + bool is_available; + bool transmission_active; + }; + + fl::vector mWorkers; + + // Buffer pool for different sizes + fl::map> mBuffersBySize; + +public: + bool assignWorkerToController(RmtController5* controller) { + const WorkerConfig& config = controller->getWorkerConfig(); + const size_t requiredBufferSize = config.led_count * (config.is_rgbw ? 4 : 3); + + // Find available worker + WorkerState* worker = findAvailableWorker(); + if (!worker) return false; + + // Get appropriately sized buffer from pool + uint8_t* workerBuffer = acquireBuffer(requiredBufferSize); + if (!workerBuffer) return false; + + // CRITICAL: Wait for any active transmission to complete + if (worker->strip && worker->transmission_active) { + worker->strip->waitDone(); + worker->transmission_active = false; + } + + // Destroy existing RMT channel if configuration changed + if (worker->strip && (!configCompatible(worker->current_config, config) || + worker->buffer_capacity < requiredBufferSize)) { + delete worker->strip; // Destroy old RMT channel + worker->strip = nullptr; + + // Release old buffer + releaseBuffer(worker->worker_buffer, worker->buffer_capacity); + } + + // Copy controller's pixel data to worker's buffer + memcpy(workerBuffer, controller->getPixelBuffer(), controller->getBufferSize()); + + // Create new RMT channel with worker's external buffer + if (!worker->strip) { + worker->strip = IRmtStrip::CreateWithExternalBuffer( + config.pin, config.led_count, config.is_rgbw, + config.t0h, config.t0l, config.t1h, config.t1l, config.reset, + workerBuffer, // Worker's buffer, not controller's buffer + config.dma_mode + ); + + if (!worker->strip) { + releaseBuffer(workerBuffer, requiredBufferSize); + return false; + } + } + + worker->worker_buffer = workerBuffer; + worker->buffer_capacity = requiredBufferSize; + worker->current_config = config; + worker->is_available = false; + + // Start transmission + worker->strip->drawAsync(); + worker->transmission_active = true; + return true; + } + + void onWorkerComplete(WorkerState* worker) { + // Transmission complete - RMT hardware done with buffer + worker->transmission_active = false; + + if (!mQueuedControllers.empty()) { + // Assign to next waiting controller + RmtController5* nextController = mQueuedControllers.front(); + mQueuedControllers.pop_front(); + + const WorkerConfig& nextConfig = nextController->getWorkerConfig(); + const size_t nextBufferSize = nextConfig.led_count * (nextConfig.is_rgbw ? 4 : 3); + + if (worker->buffer_capacity >= nextBufferSize && + configCompatible(worker->current_config, nextConfig)) { + + // OPTIMIZATION: Reuse existing buffer and RMT channel + memcpy(worker->worker_buffer, nextController->getPixelBuffer(), nextController->getBufferSize()); + worker->strip->drawAsync(); + worker->transmission_active = true; + + } else { + // RECONFIGURE: Need different buffer size or RMT configuration + + // Release current buffer + releaseBuffer(worker->worker_buffer, worker->buffer_capacity); + + // Destroy RMT channel + delete worker->strip; + worker->strip = nullptr; + + // Get new appropriately-sized buffer + worker->worker_buffer = acquireBuffer(nextBufferSize); + if (!worker->worker_buffer) return; // Failed to get buffer + + // Copy next controller's data + memcpy(worker->worker_buffer, nextController->getPixelBuffer(), nextController->getBufferSize()); + + // Create new RMT channel with new buffer + worker->strip = IRmtStrip::CreateWithExternalBuffer( + nextConfig.pin, nextConfig.led_count, nextConfig.is_rgbw, + nextConfig.t0h, nextConfig.t0l, nextConfig.t1h, nextConfig.t1l, nextConfig.reset, + worker->worker_buffer, // New worker buffer + nextConfig.dma_mode + ); + + worker->buffer_capacity = nextBufferSize; + worker->current_config = nextConfig; + + // Start transmission + worker->strip->drawAsync(); + worker->transmission_active = true; + } + } else { + // No waiting controllers - worker becomes available + worker->is_available = true; + // Keep buffer and RMT channel configured for potential reuse + } + } + +private: + uint8_t* acquireBuffer(size_t size) { + // Round up to nearest power of 2 for efficient pooling + size_t poolSize = nextPowerOf2(size); + + auto& buffers = mBuffersBySize[poolSize]; + if (!buffers.empty()) { + uint8_t* buffer = buffers.back(); + buffers.pop_back(); + return buffer; + } + + // Allocate new buffer + return (uint8_t*)malloc(poolSize); + } + + void releaseBuffer(uint8_t* buffer, size_t size) { + size_t poolSize = nextPowerOf2(size); + mBuffersBySize[poolSize].push_back(buffer); + } +}; +``` + +#### Simplified Controller Implementation +```cpp +class RmtController5 { +private: + fl::vector mPixelBuffer; // Controller maintains its own data + WorkerConfig mWorkerConfig; + +public: + void loadPixelData(PixelIterator& pixels) { + // Store pixel data in persistent buffer (unchanged) + const int bytesPerPixel = mWorkerConfig.is_rgbw ? 4 : 3; + const int bufferSize = pixels.size() * bytesPerPixel; + + mPixelBuffer.resize(bufferSize); + + // Load pixel data into our persistent buffer + uint8_t* bufPtr = mPixelBuffer.data(); + if (mWorkerConfig.is_rgbw) { + while (pixels.has(1)) { + uint8_t r, g, b, w; + pixels.loadAndScaleRGBW(&r, &g, &b, &w); + *bufPtr++ = r; *bufPtr++ = g; *bufPtr++ = b; *bufPtr++ = w; + pixels.advanceData(); + pixels.stepDithering(); + } + } else { + while (pixels.has(1)) { + uint8_t r, g, b; + pixels.loadAndScaleRGB(&r, &g, &b); + *bufPtr++ = r; *bufPtr++ = g; *bufPtr++ = b; + pixels.advanceData(); + pixels.stepDithering(); + } + } + } + + void showPixels() { + // Pool handles all buffer management internally + RmtWorkerPool::getInstance().assignWorkerToController(this); + } + + // Provide buffer access for pool management + uint8_t* getPixelBuffer() { return mPixelBuffer.data(); } + size_t getBufferSize() const { return mPixelBuffer.size(); } +}; +``` + +### Optimized Teardown Strategy + +**Key Insight**: RMT strip teardown should be **conditional** based on worker pool demand: + +#### When N ≤ K (No Queued Controllers) +```cpp +void onWorkerComplete(RmtWorker* worker) { + if (mQueuedControllers.empty()) { + // NO TEARDOWN - keep worker configured and ready + // Worker maintains its led_strip configuration + // Optimizes for next frame if same controller used again + releaseWorker(worker); + } +} +``` + +#### When N > K (Queued Controllers Waiting) +```cpp +void onWorkerComplete(RmtWorker* worker) { + if (!mQueuedControllers.empty()) { + // IMMEDIATE TEARDOWN AND RECONFIGURATION + // Next controller is waiting - reconfigure immediately + RmtController5* nextController = mQueuedControllers.front(); + mQueuedControllers.pop_front(); + + // This triggers teardown in reconfigure() + startController(nextController, worker); + } +} +``` + +#### Buffer Change Requirement +**CRITICAL**: Even with identical pin/LED count/timing configuration, **teardown is always required** when switching between different controller buffers: + +```cpp +// Controller A has buffer at 0x12345678 +// Controller B has buffer at 0x87654321 +// Even if both have same pin/count/timing: +// - led_strip object MUST be recreated to use new buffer pointer +// - ESP-IDF has no API to change pixel_buf after creation +``` + +### Buffer Transfer Implementation Details + +#### Memory Safety +- **Controller Ownership**: Each `RmtController5` owns its persistent buffer +- **External Buffer Contract**: ESP-IDF won't free external buffers +- **Worker Lifecycle**: Workers destroy/recreate led_strip objects as needed +- **Buffer Validity**: Controllers must keep buffers valid during transmission + +#### Performance Considerations +- **Reconfiguration Cost**: Creating new led_strip objects has overhead +- **Buffer Copying**: No copying needed - workers use external buffers directly +- **Memory Efficiency**: Only one buffer per controller (no duplication) + +#### Error Handling +- **Reconfiguration Failures**: Handle led_strip creation failures gracefully +- **Buffer Size Mismatches**: Validate buffer sizes during reconfiguration +- **Transmission Errors**: Proper cleanup on transmission failures + +### Buffer Transfer Summary - CORRECTED + +**✅ SOLUTION**: Worker pool buffer management with RMT channel recreation +1. **Worker pool owns all RMT buffers** sized appropriately for each controller +2. **Controllers maintain their own pixel data** in persistent buffers +3. **Buffer copying required** from controller buffer to worker buffer +4. **RMT channels destroyed/recreated** with appropriately-sized external buffers +5. **ESP-IDF transmits from worker's external buffer** (not controller's buffer) + +**✅ POSSIBLE**: Buffer transfer through worker reconfiguration +- RMT channels can be destroyed and recreated with different external buffers +- Worker pool manages buffer allocation and sizing +- External buffers are not freed by ESP-IDF when RMT channels are destroyed + +**🔧 IMPLEMENTATION REQUIREMENTS**: +- Worker pool must manage buffers of different sizes +- RMT channel recreation required for buffer size changes +- Transmission completion synchronization before reconfiguration +- Buffer copying from controller to worker buffers + +## CORRECTED CONCLUSIONS AND RECOMMENDATIONS + +### Key Corrections to Original Analysis + +1. **Buffer Transfer IS Possible**: The original "NOT POSSIBLE" assessment was incorrect. Buffer transfer can be achieved through RMT channel recreation with appropriately-sized external buffers. + +2. **Worker Pool Must Manage Buffers**: The critical insight is that different controllers need different buffer sizes (RGB vs RGBW, different LED counts), so the worker pool must own and manage all RMT buffers. + +3. **Buffer Copying Required**: Unlike the original zero-copy approach, buffer copying from controller to worker is necessary to handle different buffer size requirements. + +4. **RMT Channel Recreation**: Workers must destroy and recreate RMT channels when switching between controllers with different requirements. + +### Recommended Implementation Strategy + +**✅ RECOMMENDED**: Worker Pool Buffer Management +- **Worker pool owns all RMT buffers** sized for different controller requirements +- **RMT channels use external buffers** managed by the worker pool +- **Buffer copying** from controller persistent buffers to worker buffers +- **RMT channel recreation** when buffer size or configuration changes +- **Transmission synchronization** to ensure safe reconfiguration + +### Benefits of Corrected Approach + +- ✅ **Supports Variable Buffer Sizes**: Handles different LED counts and RGB/RGBW modes +- ✅ **Proper Resource Management**: Worker pool manages buffer allocation/deallocation +- ✅ **Clean Separation**: Controllers focus on pixel data, workers handle hardware +- ✅ **Scalable Design**: Pool can optimize buffer reuse and minimize allocations +- ✅ **Thread Safe**: Proper synchronization prevents buffer access conflicts + +### Performance Considerations + +- ❌ **Buffer Copying Overhead**: Required due to different controller buffer sizes +- ✅ **Buffer Reuse Optimization**: Pool can reuse buffers for compatible configurations +- ✅ **Minimal RMT Recreation**: Only when buffer size or configuration changes +- ✅ **Efficient Memory Usage**: Pool manages buffer sizes optimally + +### Implementation Priority + +1. **Phase 1**: Implement basic worker pool with buffer management +2. **Phase 2**: Add buffer size optimization and reuse logic +3. **Phase 3**: Implement transmission synchronization and callbacks +4. **Phase 4**: Add performance optimizations and error handling + +## Future Enhancements + +1. **Priority System**: Allow high-priority strips to get workers first +2. **Smart Batching**: Group compatible strips to minimize reconfiguration +3. **Dynamic Scaling**: Adjust worker count based on usage patterns +4. **Metrics**: Add performance monitoring and statistics +5. **Buffer Pool Optimization**: Advanced buffer size prediction and caching \ No newline at end of file diff --git a/.pio/libdeps/esp01_1m/FastLED/GEMINI.md b/.pio/libdeps/esp01_1m/FastLED/GEMINI.md new file mode 100644 index 0000000..948d0e1 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/GEMINI.md @@ -0,0 +1,1739 @@ +# FastLED Project Rules for Cursor + +## Cursor Configuration + +### Post-Change Hooks +Run linting after every code change: +```yaml +post_change_hooks: + - command: "bash lint" + description: "Run code formatting and linting" + working_directory: "." +``` + +## MCP Server Configuration +This project includes a custom MCP server (`mcp_server.py`) that provides tools for: +- Running tests with various options +- Compiling examples for different platforms +- Code fingerprinting and change detection +- Linting and formatting +- Project information and status +- **Build info analysis for platform-specific defines, compiler flags, and toolchain information** +- **Symbol analysis for binary optimization (all platforms)** +- Stack trace setup for enhanced debugging +- **🌐 FastLED Web Compiler with Playwright (FOREGROUND AGENTS ONLY)** +- **🚨 CRITICAL: `validate_completion` tool for background agents** + +To use the MCP server, run: `uv run mcp_server.py` + +**BACKGROUND AGENTS:** The MCP server includes a mandatory `validate_completion` tool that MUST be used before indicating task completion. This tool runs `bash test` and ensures all tests pass. + +### FastLED Web Compiler (FOREGROUND AGENTS ONLY) + +**🌐 FOR INTERACTIVE DEVELOPMENT:** The MCP server includes a `run_fastled_web_compiler` tool that: + +**Note:** For direct command-line WASM compilation, see the **WASM Sketch Compilation** section below. + +- **Compiles Arduino sketches to WASM** for browser execution +- **Captures console.log output** with playwright automation +- **Takes screenshots** of running visualizations +- **Monitors FastLED_onFrame calls** to verify proper initialization +- **Provides detailed analysis** of errors and performance + +**PREREQUISITES:** +- `pip install fastled` - FastLED web compiler +- `pip install playwright` - Browser automation (included in pyproject.toml) +- Docker (optional, for faster compilation) + +**USAGE EXAMPLES:** +```python +# Via MCP Server - Basic usage +use run_fastled_web_compiler tool with: +- example_path: "examples/Audio" +- capture_duration: 30 +- headless: false +- save_screenshot: true + +# Via MCP Server - Different examples +use run_fastled_web_compiler tool with: +- example_path: "examples/Blink" +- capture_duration: 15 +- headless: true + +# Via MCP Server - Quick test +use run_fastled_web_compiler tool with: +- example_path: "examples/wasm" +- capture_duration: 10 +``` + +**KEY FEATURES:** +- **Automatic browser installation:** Installs Chromium via playwright +- **Console.log capture:** Records all browser console output with timestamps +- **Error detection:** Identifies compilation failures and runtime errors +- **FastLED monitoring:** Tracks `FastLED_onFrame` calls to verify functionality +- **Screenshot capture:** Saves visualization images with timestamps +- **Docker detection:** Checks for Docker availability for faster builds +- **Background agent protection:** Automatically disabled for CI/background environments + +**🚫 BACKGROUND AGENT RESTRICTION:** +This tool is **COMPLETELY DISABLED** for background agents and CI environments. Background agents attempting to use this tool will receive an error message. This is intentional to prevent: +- Hanging processes in automated environments +- Resource conflicts in CI/CD pipelines +- Interactive browser windows in headless environments + +**CONSOLE.LOG CAPTURE PATTERN:** +The tool follows the pattern established in `ci/wasm_test.py` and `ci/ci/scrapers/`: +```javascript +// Example captured console.log patterns: +[14:25:30] log: FastLED_onFrame called: {"frame":1,"leds":100} +[14:25:30] log: Audio worklet initialized +[14:25:31] error: Missing audio_worklet_processor.js +[14:25:31] warning: WebGL context lost +``` + +**INTEGRATION WITH EXISTING CI:** +- Complements existing `ci/wasm_test.py` functionality +- Uses same playwright patterns as `ci/ci/scrapers/` +- Leverages existing pyproject.toml dependencies +- Compatible with existing Docker-based compilation workflow + +## Project Structure +- `src/` - Main FastLED library source code +- `examples/` - Arduino examples demonstrating FastLED usage +- `tests/` - Test files and infrastructure +- `ci/` - Continuous integration scripts +- `docs/` - Documentation + +## Key Commands +- `uv run test.py` - Run all tests +- `uv run test.py --cpp` - Run C++ tests only +- `uv run test.py TestName` - Run specific C++ test + - For example: running test_xypath.cpp would be uv run test.py xypath +- `./lint` - Run code formatting/linting +- `uv run ci/ci-compile.py uno --examples Blink` - Compile examples for specific platform + - For example (uno): `uv run ci/ci-compile.py uno --examples Blink` + - For example (esp32dev): `uv run ci/ci-compile.py esp32dev --examples Blink` + - For example (esp8266): `uv run ci/ci-compile.py esp01 --examples Blink` + - For example (teensy31): `uv run ci/ci-compile.py teensy31 --examples Blink` +- **WASM Compilation** - Compile Arduino sketches to run in web browsers: + - `uv run ci/wasm_compile.py examples/Blink -b --open` - Compile Blink to WASM and open browser + - `uv run ci/wasm_compile.py path/to/your/sketch -b --open` - Compile any sketch to WASM +- **Symbol Analysis** - Analyze binary size and optimization opportunities: + - `uv run ci/ci/symbol_analysis.py --board uno` - Analyze UNO platform + - `uv run ci/ci/symbol_analysis.py --board esp32dev` - Analyze ESP32 platform + - `uv run ci/demo_symbol_analysis.py` - Analyze all available platforms + +## 🤖 AI AGENT LINTING GUIDELINES + +### FOREGROUND AGENTS (Interactive Development) +**🚨 ALWAYS USE `bash lint` - DO NOT RUN INDIVIDUAL LINTING SCRIPTS** + +- **✅ CORRECT:** `bash lint` +- **❌ FORBIDDEN:** `./lint-js`, `./check-js`, `python3 scripts/enhance-js-typing.py` +- **❌ FORBIDDEN:** `uv run ruff check`, `uv run black`, individual tools + +**WHY:** `bash lint` provides: +- **Comprehensive coverage** - Python, C++, JavaScript, and enhancement analysis +- **Consistent workflow** - Single command for all linting needs +- **Proper sequencing** - Runs tools in the correct order with dependencies +- **Clear output** - Organized sections showing what's being checked +- **Agent guidance** - Shows proper usage for AI agents + +### BACKGROUND AGENTS (Automated/CI Environments) +**CAN USE FINE-GRAINED LINTING FOR SPECIFIC NEEDS** + +Background agents may use individual linting scripts when needed: +- `./lint-js` - JavaScript-only linting +- `./check-js` - JavaScript type checking +- `python3 scripts/enhance-js-typing.py` - JavaScript enhancement analysis +- `uv run ruff check` - Python linting only +- MCP server `lint_code` tool - Programmatic access + +**BUT STILL PREFER `bash lint` FOR COMPREHENSIVE CHECKING** + +### Linting Script Integration + +The `bash lint` command now includes: +1. **📝 Python Linting** - ruff, black, isort, pyright +2. **🔧 C++ Linting** - clang-format (when enabled) +3. **🌐 JavaScript Linting** - Deno lint, format check, type checking +4. **🔍 JavaScript Enhancement** - Analysis and recommendations +5. **💡 AI Agent Guidance** - Clear instructions for proper usage + +### When to Use Individual Scripts + +**FOREGROUND AGENTS:** Never. Always use `bash lint`. + +**BACKGROUND AGENTS:** Only when: +- **Debugging specific issues** with one language/tool +- **Testing incremental changes** to linting configuration +- **Running targeted analysis** for specific files +- **Integrating with automated workflows** via MCP server + +## Development Guidelines +- Follow existing code style and patterns +- Run tests before committing changes +- Use the MCP server tools for common tasks +- Check examples when making API changes + +## 🚨 CRITICAL: .INO FILE CREATION RULES 🚨 + +### ⚠️ THINK BEFORE CREATING .INO FILES ⚠️ + +**.ino files should be created SPARINGLY and ONLY when truly justified.** + +### 🚫 WHEN NOT TO CREATE .INO FILES: +- **Testing minor code changes** - Use existing test files or unit tests +- **Quick API validation** - Use unit tests or modify existing examples +- **Debugging specific functions** - Use test files, not new sketches +- **One-off experiments** - Create temporary test files instead +- **Small feature tests** - Extend existing relevant examples + +### ✅ WHEN TO CREATE .INO FILES: + +#### 1. **Temporary Testing (.ino)** +**Use Pattern:** `temp_.ino` or `test_.ino` +```cpp +// temp_json_api.ino - Testing new JSON fetch functionality +// test_networking.ino - Validating network stack changes +``` +- ✅ **FOR:** Testing new APIs during development +- ✅ **FOR:** Quick prototyping and validation +- ✅ **DELETE AFTER USE** - These are temporary by design + +#### 2. **Significant New Feature Examples** +**Use Pattern:** `examples//.ino` +```cpp +// examples/JsonFetchApi/JsonFetchApi.ino - Comprehensive JSON API example +// examples/NetworkStack/NetworkStack.ino - Major networking features +``` +- ✅ **FOR:** Large, comprehensive new features +- ✅ **FOR:** APIs that warrant dedicated examples +- ✅ **FOR:** Features that users will commonly implement +- ✅ **PERMANENT** - These become part of the example library + +### 📋 CREATION CHECKLIST: + +**Before creating ANY .ino file, ask:** + +1. **🤔 Is this testing a new API?** + - YES → Create `temp_.ino`, delete after testing + - NO → Consider alternatives + +2. **🤔 Is this a significant new feature that users will commonly use?** + - YES → Create `examples//.ino` + - NO → Use existing examples or test files + +3. **🤔 Can I modify an existing example instead?** + - YES → Extend existing example rather than creating new + - NO → Proceed with creation + +4. **🤔 Is this just for debugging/validation?** + - YES → Use unit tests or temporary test files + - NO → Consider if it meets the "significant feature" criteria + +### 🔍 REVIEW CRITERIA: + +**For Feature Examples (.ino files that stay):** +- ✅ **Demonstrates complete, real-world usage patterns** +- ✅ **Covers multiple aspects of the feature comprehensively** +- ✅ **Provides educational value for users** +- ✅ **Shows best practices and common use cases** +- ✅ **Is likely to be referenced by multiple users** + +**For Temporary Testing (.ino files that get deleted):** +- ✅ **Clearly named as temporary (temp_*, test_*)** +- ✅ **Focused on specific API validation** +- ✅ **Will be deleted after development cycle** +- ✅ **Too complex for unit test framework** + +### ❌ EXAMPLES OF WHAT NOT TO CREATE: +- `test_basic_led.ino` - Use existing Blink example +- `debug_colors.ino` - Use existing ColorPalette example +- `quick_brightness.ino` - Use unit tests or modify existing example +- `validate_pins.ino` - Use PinTest example or unit tests + +### ✅ EXAMPLES OF JUSTIFIED CREATIONS: +- `temp_new_wifi_api.ino` - Testing major new WiFi functionality (temporary) +- `examples/MachineLearning/MachineLearning.ino` - New ML integration feature (permanent) +- `temp_performance_test.ino` - Validating optimization changes (temporary) + +### 🧹 CLEANUP RESPONSIBILITY: +- **Temporary files:** Creator must delete when testing is complete +- **Feature examples:** Must be maintained and updated as API evolves +- **Abandoned files:** Regular cleanup reviews to remove unused examples + +**Remember: The examples directory is user-facing documentation. Every .ino file should provide clear value to FastLED users.** + +### Memory Management with Smart Pointers and Moveable Objects +**🚨 CRITICAL: Always use proper RAII patterns - smart pointers, moveable objects, or wrapper classes instead of raw pointers for resource management.** + +**Resource Management Options:** +- ✅ **PREFERRED**: `fl::shared_ptr` for shared ownership (multiple references to same object) +- ✅ **PREFERRED**: `fl::unique_ptr` for exclusive ownership (single owner, automatic cleanup) +- ✅ **PREFERRED**: Moveable wrapper objects (like `fl::promise`) for safe copying and transferring of unique resources +- ✅ **ACCEPTABLE**: `fl::vector` storing objects by value when objects support move/copy semantics +- ❌ **AVOID**: `fl::vector` storing raw pointers - use `fl::vector>` or `fl::vector>` +- ❌ **AVOID**: Manual `new`/`delete` - use `fl::make_shared()` or `fl::make_unique()` + +**Moveable Wrapper Pattern:** +When you have a unique resource (like a future, file handle, or network connection) that needs to be passed around easily, create a moveable wrapper class that: +- Internally manages the unique resource (often with `fl::unique_ptr` or similar) +- Provides copy semantics through shared implementation details +- Maintains clear ownership semantics +- Allows safe transfer between contexts + +**Examples:** +```cpp +// ✅ GOOD - Using smart pointers +fl::vector> mActiveClients; +auto client = fl::make_shared(); +mActiveClients.push_back(client); + +// ✅ GOOD - Using unique_ptr for exclusive ownership +fl::unique_ptr client = fl::make_unique(); + +// ✅ GOOD - Moveable wrapper objects (fl::promise example) +fl::vector> mActivePromises; // Copyable wrapper around unique future +fl::promise promise = fetch.get(url).execute(); +mActivePromises.push_back(promise); // Safe copy, shared internal state + +// ✅ GOOD - Objects stored by value (if copyable/moveable) +fl::vector mRequests; // When Request supports copy/move + +// ❌ BAD - Raw pointers require manual memory management +fl::vector mActivePromises; // Memory leaks possible +Promise* promise = new Promise(); // Who calls delete? +``` + +**fl::promise as Moveable Wrapper Example:** +```cpp +// fl::promise wraps a unique fl::future but provides copyable semantics +class promise { + fl::shared_ptr> mImpl; // Shared wrapper around unique resource +public: + promise(const promise& other) : mImpl(other.mImpl) {} // Safe copying + promise(promise&& other) : mImpl(fl::move(other.mImpl)) {} // Move support + // ... wrapper delegates to internal future +}; + +// Usage - can be copied and passed around safely +fl::promise promise = http_get_promise("https://api.example.com"); +someContainer.push_back(promise); // Copy is safe +processAsync(promise); // Can pass to multiple places +``` + +**Why This Pattern:** +- **Automatic cleanup** - No memory leaks from forgotten `delete` calls +- **Exception safety** - Resources automatically freed even if exceptions occur +- **Clear ownership** - Code clearly shows who owns what objects +- **Thread safety** - Smart pointers provide atomic reference counting +- **Easy sharing** - Moveable wrappers allow safe copying of unique resources +- **API flexibility** - Can pass resources between different contexts safely + +## 🔧 CMAKE BUILD SYSTEM ARCHITECTURE (DEPRECATED - NO LONGER USED) + +**⚠️ IMPORTANT: CMake build system is no longer used. FastLED now uses a Python-based build system.** + +### Build System Overview (Historical Reference) +FastLED previously used a sophisticated CMake build system located in `tests/cmake/` with modular configuration: + +**Core Build Files:** +- `tests/CMakeLists.txt` - Main CMake entry point +- `tests/cmake/` - Modular CMake configuration directory + +**Key CMake Modules:** +- `LinkerCompatibility.cmake` - **🚨 CRITICAL for linker issues** - GNU↔MSVC flag translation, lld-link compatibility, warning suppression +- `CompilerDetection.cmake` - Compiler identification and toolchain setup +- `CompilerFlags.cmake` - Compiler-specific flag configuration +- `DebugSettings.cmake` - Debug symbol and optimization configuration +- `OptimizationSettings.cmake` - LTO and performance optimization settings +- `ParallelBuild.cmake` - Parallel compilation and linker selection (mold, lld) +- `TestConfiguration.cmake` - Test target setup and configuration +- `BuildOptions.cmake` - Build option definitions and defaults + +### Linker Configuration (Most Important for Build Issues) + +**🎯 PRIMARY LOCATION for linker problems: `tests/cmake/LinkerCompatibility.cmake`** + +**Key Functions:** +- `apply_linker_compatibility()` - **Main entry point** - auto-detects lld-link and applies compatibility +- `translate_gnu_to_msvc_linker_flags()` - Converts GNU-style flags to MSVC-style for lld-link +- `get_dead_code_elimination_flags()` - Platform-specific dead code elimination +- `get_debug_flags()` - Debug information configuration +- `get_optimization_flags()` - Performance optimization flags + +**Linker Detection Logic:** +```cmake +if(WIN32 AND CMAKE_CXX_COMPILER_ID MATCHES "Clang") + find_program(LLDLINK_EXECUTABLE lld-link) + if(LLDLINK_EXECUTABLE) + # Apply lld-link compatibility automatically + endif() +endif() +``` + +**Common Linker Issues & Solutions:** +- **lld-link warnings**: Suppressed via `/ignore:4099` in `apply_linker_compatibility()` +- **GNU→MSVC flag translation**: Automatic in `translate_gnu_to_msvc_linker_flags()` +- **Dead code elimination**: Platform-specific via `get_dead_code_elimination_flags()` +- **Debug symbol conflicts**: Handled in `get_debug_flags()` + +### Compiler Configuration + +**Compiler Detection**: `tests/cmake/CompilerDetection.cmake` +- Auto-detects Clang, GCC, MSVC +- Sets up toolchain-specific configurations +- Handles cross-compilation scenarios + +**Compiler Flags**: `tests/cmake/CompilerFlags.cmake` +- Warning configurations per compiler +- Optimization level management +- Platform-specific adjustments + +### Build Options & Configuration + +**Available Build Options** (defined in `BuildOptions.cmake`): +- `FASTLED_DEBUG_LEVEL` - Debug information level (NONE, MINIMAL, STANDARD, FULL) +- `FASTLED_OPTIMIZATION_LEVEL` - Optimization (O0, O1, O2, O3, Os, Ofast) +- `FASTLED_ENABLE_LTO` - Link-time optimization +- `FASTLED_ENABLE_PARALLEL_BUILD` - Parallel compilation +- `FASTLED_STATIC_RUNTIME` - Static runtime linking + +### Testing Infrastructure + +**Test Configuration**: `tests/cmake/TestConfiguration.cmake` +- Defines test targets and dependencies +- Configures test execution parameters +- Sets up coverage and profiling + +**Test Execution**: +- `bash test` - Comprehensive test runner (preferred) +- `uv run test.py` - Python test interface +- Individual test executables in `.build/bin/` + +### Build Troubleshooting Guide + +**For Linker Issues:** +1. **Check `tests/cmake/LinkerCompatibility.cmake` first** +2. Look for lld-link detection and compatibility functions +3. Check GNU→MSVC flag translation logic +4. Verify warning suppression settings + +**For Compiler Issues:** +1. Check `tests/cmake/CompilerDetection.cmake` for detection logic +2. Review `tests/cmake/CompilerFlags.cmake` for flag conflicts +3. Verify optimization settings in `OptimizationSettings.cmake` + +**For Build Performance:** +1. Check `tests/cmake/ParallelBuild.cmake` for parallel settings +2. Review LTO configuration in `OptimizationSettings.cmake` +3. Verify linker selection (mold, lld, default) + + + + +## 🚨 CRITICAL REQUIREMENTS FOR ALL AGENTS (FOREGROUND & BACKGROUND) 🚨 + +## 🚨 MANDATORY COMMAND EXECUTION RULES 🚨 + +### FOREGROUND AGENTS (Interactive Development) + +**FOREGROUND AGENTS MUST FOLLOW THESE COMMAND EXECUTION PATTERNS:** + +#### Python Code Execution: +- ❌ **NEVER run Python code directly** +- ✅ **ALWAYS create/modify tmp.py** with your code +- ✅ **ALWAYS run: `uv run tmp.py`** + +#### Shell Command Execution: +- ❌ **NEVER run shell commands directly** +- ✅ **ALWAYS create/modify tmp.sh** with your commands +- ✅ **ALWAYS run: `bash tmp.sh`** + +#### Command Execution Examples: + +**Python Code Pattern:** +```python +# tmp.py +import subprocess +result = subprocess.run(['git', 'status'], capture_output=True, text=True) +print(result.stdout) +``` +Then run: `uv run tmp.py` + +**Shell Commands Pattern:** +```bash +# tmp.sh +#!/bin/bash +git status +ls -la +uv run ci/ci-compile.py uno --examples Blink +``` +Then run: `bash tmp.sh` + +### BACKGROUND AGENTS (Automated/CI Environments) + +**BACKGROUND AGENTS MUST FOLLOW THESE RESTRICTED COMMAND EXECUTION PATTERNS:** + +#### Python Code Execution: +- ❌ **NEVER run Python code directly** +- ❌ **NEVER create/use tmp.py files** (forbidden for background agents) +- ✅ **ALWAYS use `uv run` with existing scripts** (e.g., `uv run test.py`, `uv run ci/ci-compile.py`) +- ✅ **ALWAYS use MCP server tools** for programmatic operations when available + +#### Shell Command Execution: +- ❌ **NEVER run shell commands directly** +- ❌ **NEVER create/use tmp.sh files** (forbidden for background agents) +- ✅ **ALWAYS use existing bash scripts** (e.g., `bash test`, `bash lint`) +- ✅ **ALWAYS use `uv run` for Python scripts** with proper arguments +- ✅ **ALWAYS use MCP server tools** for complex operations when available + +#### Background Agent Command Examples: + +**✅ ALLOWED - Using existing scripts:** +```bash +bash test +bash lint +uv run test.py audio_json_parsing +uv run ci/ci-compile.py uno --examples Blink +``` + +**❌ FORBIDDEN - Creating temporary files:** +```bash +# DON'T DO THIS - tmp.sh is forbidden for background agents +echo "git status" > tmp.sh +bash tmp.sh +``` + +**✅ PREFERRED - Using MCP server tools:** +```bash +uv run mcp_server.py +# Then use appropriate MCP tools like: validate_completion, symbol_analysis, etc. +``` + +### DELETE Operations - DANGER ZONE (ALL AGENTS): +- 🚨 **STOP and ask for permission** before ANY delete operations +- ✅ **EXCEPTION:** Single files that you just created are OK to delete +- ❌ **NEVER delete multiple files** without explicit permission +- ❌ **NEVER delete directories** without explicit permission +- ❌ **NEVER delete system files or project files** without permission + +### Git-Bash Terminal Truncation Issue +**🚨 IMPORTANT: Git-Bash terminal may truncate the first character of commands** + +**Problem:** The git-bash terminal on Windows sometimes truncates the first character of commands, causing them to fail or execute incorrectly. + +**Solution:** Pre-pend commands with an additional space when using git-bash: +- ✅ **CORRECT**: ` bash test` (note the leading space) +- ❌ **INCORRECT**: `bash test` (may get truncated to `ash test`) + +**Examples:** +```bash +# Good - with leading space for git-bash compatibility + bash test + uv run test.py + bash lint + +# Bad - may get truncated in git-bash +bash test +uv run test.py +bash lint +``` + +**Why:** This ensures commands work reliably across all terminal environments, especially git-bash on Windows systems. + +### Why These Rules Exist: +- **Ensures all operations are reviewable and traceable** +- **Prevents accidental destructive operations in automated environments** +- **Allows for better debugging and error handling** +- **Maintains consistency across different agent types** +- **Provides audit trail for all system modifications** +- **Prevents background agents from creating unnecessary temporary files** + +**These command execution rules apply to ALL operations including but not limited to:** +- File system operations (creating, modifying, deleting files) +- Git operations (commits, pushes, branch changes) +- Package installations and updates +- Build and compilation commands +- Test execution and validation +- System configuration changes + + +### MANDATORY MEMORY REFRESH BEFORE COMPLETION +**🚨 ALL AGENTS MUST REFRESH THEIR MEMORY BEFORE CONCLUDING WORK:** + +- **The AI shall read the cursor rules again to find out what to do before task is considered complete** + - This is MANDATORY for both foreground and background agents + - Reading the cursor rules refreshes your memory about the latest project rules, coding standards, and requirements + - This ensures you have current information about testing procedures, validation tools, and completion requirements + - Do NOT indicate your work is "done" until you have refreshed your memory by reading the cursor rules + +## 🚨 CRITICAL REQUIREMENTS FOR BACKGROUND AGENTS 🚨 + +### MANDATORY PRE-COMPLETION VALIDATION +**ALL BACKGROUND AGENTS MUST FOLLOW THESE REQUIREMENTS BEFORE INDICATING COMPLETION:** + +1. **🚨 ALWAYS RUN `bash test` BEFORE INDICATING COMPLETION** + - This is MANDATORY and NON-NEGOTIABLE for all background agents + - The command `bash test` runs the full test suite including unit tests and compilation checks + - Background agents MUST NOT indicate they are "done" until ALL tests pass + +2. **🚨 USE MCP SERVER VALIDATION TOOL** + - Use the `validate_completion` tool from the MCP server: `uv run mcp_server.py` + - This tool runs `bash test` and validates that all tests pass + - Only indicate completion if this validation tool returns success + +3. **🚨 ZERO TOLERANCE FOR TEST FAILURES** + - If ANY test fails, the background agent MUST fix the issues before completion + - Do NOT indicate completion with failing tests + - Do NOT ignore test errors or warnings + +### Background Agent Completion Checklist: +- [ ] All code changes have been made +- [ ] `bash test` has been run and ALL tests pass +- [ ] No compilation errors or warnings +- [ ] MCP server `validate_completion` tool shows success +- [ ] Only then indicate task completion + +**FAILURE TO FOLLOW THESE REQUIREMENTS WILL RESULT IN BROKEN CODE SUBMISSIONS.** + +### C++ Design Patterns +**Shared Implementation Pattern:** When writing a lot of code that applies the same operation on a bunch of C++ objects, try and determine if those objects share a common base class or internal object. If so consider whether it's appropriate to move the implementation into a shared space. + +## Code Standards + +### Avoid std:: Prefixed Functions +**DO NOT use `std::` prefixed functions or headers in the codebase.** This project provides its own STL-equivalent implementations under the `fl::` namespace. + +**Examples of what to avoid and use instead:** + +**Headers:** + +**Core Language Support:** +- ❌ `#include ` → ✅ `#include "fl/type_traits.h"` +- ❌ `#include ` → ✅ `#include "fl/algorithm.h"` +- ❌ `#include ` → ✅ `#include "fl/functional.h"` +- ❌ `#include ` → ✅ `#include "fl/initializer_list.h"` + +**Containers:** +- ❌ `#include ` → ✅ `#include "fl/vector.h"` +- ❌ `#include ` → ✅ `#include "fl/map.h"` +- ❌ `#include ` → ✅ `#include "fl/hash_map.h"` +- ❌ `#include ` → ✅ `#include "fl/hash_set.h"` +- ❌ `#include ` → ✅ `#include "fl/set.h"` +- ❌ `#include ` → ✅ `#include "fl/slice.h"` + +**Utilities & Smart Types:** +- ❌ `#include ` → ✅ `#include "fl/optional.h"` +- ❌ `#include ` → ✅ `#include "fl/variant.h"` +- ❌ `#include ` → ✅ `#include "fl/pair.h"` (for std::pair) +- ❌ `#include ` → ✅ `#include "fl/string.h"` +- ❌ `#include ` → ✅ `#include "fl/scoped_ptr.h"` or `#include "fl/ptr.h"` + +**Stream/IO:** +- ❌ `#include ` → ✅ `#include "fl/sstream.h"` + +**Threading:** +- ❌ `#include ` → ✅ `#include "fl/thread.h"` + +**Math & System:** +- ❌ `#include ` → ✅ `#include "fl/math.h"` +- ❌ `#include ` → ✅ `#include "fl/stdint.h"` + +**Functions and classes:** +- ❌ `std::move()` → ✅ `fl::move()` +- ❌ `std::forward()` → ✅ `fl::forward()` +- ❌ `std::vector` → ✅ `fl::vector` +- ❌ `std::enable_if` → ✅ `fl::enable_if` + +**Why:** The project maintains its own implementations to ensure compatibility across all supported platforms and to avoid bloating the library with unnecessary STL dependencies. + +**Before using any standard library functionality, check if there's a `fl::` equivalent in the `src/fl/` directory first.** + +### Compiler Warning Suppression +**ALWAYS use the FastLED compiler control macros from `fl/compiler_control.h` for warning suppression.** This ensures consistent cross-compiler support and proper handling of platform differences. + +**Correct Warning Suppression Pattern:** +```cpp +#include "fl/compiler_control.h" + +// Suppress specific warning around problematic code +FL_DISABLE_WARNING_PUSH +FL_DISABLE_FORMAT_TRUNCATION // Use specific warning macros +// ... code that triggers warnings ... +FL_DISABLE_WARNING_POP +``` + +**Available Warning Suppression Macros:** +- ✅ `FL_DISABLE_WARNING_PUSH` / `FL_DISABLE_WARNING_POP` - Standard push/pop pattern +- ✅ `FL_DISABLE_WARNING(warning_name)` - Generic warning suppression (use sparingly) +- ✅ `FL_DISABLE_WARNING_GLOBAL_CONSTRUCTORS` - Clang global constructor warnings +- ✅ `FL_DISABLE_WARNING_SELF_ASSIGN_OVERLOADED` - Clang self-assignment warnings +- ✅ `FL_DISABLE_FORMAT_TRUNCATION` - GCC format truncation warnings + +**What NOT to do:** +- ❌ **NEVER use raw `#pragma` directives** - they don't handle compiler differences +- ❌ **NEVER write manual `#ifdef __clang__` / `#ifdef __GNUC__` blocks** - use the macros +- ❌ **NEVER ignore warnings without suppression** - fix the issue or suppress appropriately + +**Examples:** +```cpp +// ✅ CORRECT - Using FastLED macros +#include "fl/compiler_control.h" + +FL_DISABLE_WARNING_PUSH +FL_DISABLE_FORMAT_TRUNCATION +// Code that triggers format truncation warnings +sprintf(small_buffer, "Very long format string %d", value); +FL_DISABLE_WARNING_POP + +// ❌ INCORRECT - Raw pragma directives +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-truncation" +sprintf(small_buffer, "Very long format string %d", value); +#pragma GCC diagnostic pop +``` + +**Why:** The FastLED compiler control system automatically handles: +- **Compiler detection** (GCC vs Clang vs MSVC) +- **Version compatibility** (warnings that don't exist on older compilers) +- **Platform specifics** (AVR, ESP32, ARM, etc.) +- **Consistent naming** across different compiler warning systems + +### Debug Printing +**Use `FL_WARN` for debug printing throughout the codebase.** This ensures consistent debug output that works in both unit tests and live application testing. + +**Usage:** +- ✅ `FL_WARN("Debug message: " << message);` +- ❌ `FL_WARN("Value: %d", value);` + +**Why:** `FL_WARN` provides a unified logging interface that works across all platforms and testing environments, including unit tests and Arduino sketches. + +### Emoticon and Emoji Usage Policy +**NO emoticons or emoji characters are allowed in C++ source files.** This ensures professional, maintainable code that works correctly across all platforms and development environments. + +**Prohibited in C++ Files:** +- ❌ **C++ source files** (*.cpp, *.c) +- ❌ **C++ header files** (*.h, *.hpp) +- ❌ **Comments in C++ files** - use clear text instead +- ❌ **String literals in C++ code** - use descriptive text +- ❌ **Log messages in C++ code** - use text prefixes like "SUCCESS:", "ERROR:", "WARNING:" + +**Examples of what NOT to do in C++ files:** +```cpp +// ❌ BAD - Emoticons in comments +// 🎯 This function handles user input + +// ❌ BAD - Emoticons in log messages +FL_WARN("✅ Operation successful!"); +FL_WARN("❌ Error occurred: " << error_msg); + +// ❌ BAD - Emoticons in string literals +const char* status = "🔄 Processing..."; +``` + +**Examples of correct alternatives in C++ files:** +```cpp +// ✅ GOOD - Clear text in comments +// TUTORIAL: This function handles user input + +// ✅ GOOD - Text prefixes in log messages +FL_WARN("SUCCESS: Operation completed successfully!"); +FL_WARN("ERROR: Failed to process request: " << error_msg); + +// ✅ GOOD - Descriptive text in string literals +const char* status = "PROCESSING: Request in progress..."; +``` + +**Allowed in Python Files:** +- ✅ **Python source files** (*.py) - emoticons are acceptable for build scripts, tools, and utilities +- ✅ **Python comments and docstrings** - can use emoticons for clarity in development tools +- ✅ **Python log messages** - emoticons OK in build/test output for visual distinction + +**Why:** +- **Cross-platform compatibility** - Some compilers/platforms have issues with Unicode characters +- **Professional codebase** - Maintains serious, enterprise-grade appearance +- **Accessibility** - Screen readers and text-based tools work better with plain text +- **Consistency** - Ensures uniform code style across all C++ files +- **Debugging** - Text-based prefixes are easier to search and filter in logs + +**Before adding any visual indicators to C++ code, use text-based alternatives like "TODO:", "NOTE:", "WARNING:", "SUCCESS:", "ERROR:" prefixes.** + +### Naming Conventions +**Follow these naming conventions for consistency across the codebase:** + +**Simple Objects:** +- ✅ Use lowercase class names for simple objects (e.g., `fl::vec2f`, `fl::point`, `fl::rect`) +- ❌ Avoid: `fl::Vec2f`, `fl::Point`, `fl::Rect` + +**Complex Objects:** +- ✅ Use CamelCase with uppercase first character for complex objects (e.g., `Raster`, `Controller`, `Canvas`) +- ❌ Avoid: `raster`, `controller`, `canvas` + +**Pixel Types:** +- ✅ Use ALL CAPS for pixel types (e.g., `CRGB`, `CHSV`, `HSV16`, `RGB24`) +- ❌ Avoid: `crgb`, `Crgb`, `chsv`, `Chsv` + +**Member Variables and Functions:** + +**Complex Classes/Objects:** +- ✅ **Member variables:** Use `mVariableName` format (e.g., `mPixelCount`, `mBufferSize`, `mCurrentIndex`) +- ✅ **Member functions:** Use camelCase (e.g., `getValue()`, `setPixelColor()`, `updateBuffer()`) +- ❌ Avoid: `m_variable_name`, `variableName`, `GetValue()`, `set_pixel_color()` + +**Simple Classes/Structs:** +- ✅ **Member variables:** Use lowercase snake_case (e.g., `x`, `y`, `width`, `height`, `pixel_count`) +- ✅ **Member functions:** Use camelCase (e.g., `getValue()`, `setPosition()`, `normalize()`) +- ❌ Avoid: `mX`, `mY`, `get_value()`, `set_position()` + +**Examples:** + +```cpp +// Complex class - use mVariableName for members +class Controller { +private: + int mPixelCount; // ✅ Complex class member variable + uint8_t* mBuffer; // ✅ Complex class member variable + bool mIsInitialized; // ✅ Complex class member variable + +public: + void setPixelCount(int count); // ✅ Complex class member function + int getPixelCount() const; // ✅ Complex class member function + void updateBuffer(); // ✅ Complex class member function +}; + +// Simple struct - use snake_case for members +struct vec2 { + int x; // ✅ Simple struct member variable + int y; // ✅ Simple struct member variable + + float magnitude() const; // ✅ Simple struct member function + void normalize(); // ✅ Simple struct member function +}; + +struct point { + float x; // ✅ Simple struct member variable + float y; // ✅ Simple struct member variable + float z; // ✅ Simple struct member variable + + void setPosition(float x, float y, float z); // ✅ Simple struct member function + float distanceTo(const point& other) const; // ✅ Simple struct member function +}; +``` + +**Why:** These conventions help distinguish between different categories of objects and maintain consistency with existing FastLED patterns. Complex classes use Hungarian notation for member variables to clearly distinguish them from local variables, while simple structs use concise snake_case for lightweight data containers. + +### Container Parameter Types +**Prefer `fl::span` over `fl::vector` or arrays for function parameters.** `fl::span` provides a non-owning view that automatically converts from various container types, making APIs more flexible and efficient. + +**Examples:** +- ✅ `void processData(fl::span data)` - accepts arrays, vectors, and other containers +- ❌ `void processData(fl::vector& data)` - only accepts fl::Vector +- ❌ `void processData(uint8_t* data, size_t length)` - requires manual length tracking + +**Benefits:** +- **Automatic conversion:** `fl::span` can automatically convert from `fl::vector`, C-style arrays, and other container types +- **Type safety:** Maintains compile-time type checking while being more flexible than raw pointers +- **Performance:** Zero-cost abstraction that avoids unnecessary copying or allocation +- **Consistency:** Provides a uniform interface for working with contiguous data + +**When to use `fl::vector` instead:** +- When you need ownership and dynamic resizing capabilities +- When storing data as a class member that needs to persist + +**Why:** Using `fl::span` for parameters makes functions more reusable and avoids forcing callers to convert their data to specific container types. + +### Exception Handling +**DO NOT use try-catch blocks or C++ exception handling in the codebase.** FastLED is designed to work on embedded systems like Arduino where exception handling may not be available or desired due to memory and performance constraints. + +**Examples of what to avoid and use instead:** + +**Avoid Exception Handling:** +- ❌ `try { ... } catch (const std::exception& e) { ... }` - Exception handling not available on many embedded platforms +- ❌ `throw std::runtime_error("error message")` - Throwing exceptions not supported +- ❌ `#include ` or `#include ` - Exception headers not needed + +**Use Error Handling Alternatives:** +- ✅ **Return error codes:** `bool function() { return false; }` or custom error enums +- ✅ **Optional types:** `fl::optional` for functions that may not return a value +- ✅ **Assertions:** `FL_ASSERT(condition)` for debug-time validation +- ✅ **Early returns:** `if (!valid) return false;` for error conditions +- ✅ **Status objects:** Custom result types that combine success/failure with data + +**Examples of proper error handling:** +```cpp +// Good: Using return codes +bool initializeHardware() { + if (!setupPins()) { + FL_WARN("Failed to setup pins"); + return false; + } + return true; +} + +// Good: Using fl::optional +fl::optional calculateValue(int input) { + if (input < 0) { + return fl::nullopt; // No value, indicates error + } + return fl::make_optional(sqrt(input)); +} + +// Good: Using early returns +void processData(const uint8_t* data, size_t len) { + if (!data || len == 0) { + FL_WARN("Invalid input data"); + return; // Early return on error + } + // Process data... +} +``` + +**Why:** Many embedded platforms (especially Arduino-compatible boards) don't support C++ exceptions or have them disabled to save memory and improve performance. FastLED must work reliably across all supported platforms. + +### JSON Usage - Ideal API Patterns +**🎯 PREFERRED: Use the modern `fl::Json` class for all JSON operations.** FastLED provides an ideal JSON API that prioritizes type safety, ergonomics, and crash-proof operation. + +**✅ IDIOMATIC JSON USAGE:** +```cpp +// NEW: Clean, safe, idiomatic API +fl::Json json = fl::Json::parse(jsonStr); +int brightness = json["config"]["brightness"] | 128; // Gets value or 128 default +string name = json["device"]["name"] | string("default"); // Type-safe with default +bool enabled = json["features"]["networking"] | false; // Never crashes + +// Array operations +if (json["effects"].contains("rainbow")) { + // Safe array checking +} +``` + +**❌ DISCOURAGED: Verbose legacy API:** +```cpp +// OLD: Verbose, error-prone API (still works, but not recommended) +fl::JsonDocument doc; +fl::string error; +fl::parseJson(jsonStr, &doc, &error); +int brightness = doc["config"]["brightness"].as(); // Can crash if missing +``` + +**Key Benefits of Ideal API:** +- **🛡️ Type Safety** - No crashes on missing fields or type mismatches +- **🎯 Default Values** - Clean `json["key"] | default` syntax +- **📖 Readable Code** - 50% less boilerplate for common operations +- **🚀 Testing** - Easy test data construction with `JsonBuilder` + +**📚 Reference Example:** See `examples/Json/Json.ino` for comprehensive usage patterns and API comparison. + +**Testing with JsonBuilder:** +```cpp +// Easy test data construction +auto json = JsonBuilder() + .set("brightness", 128) + .set("enabled", true) + .set("name", "test_device") + .build(); + +// Type-safe testing +CHECK_EQ(json["brightness"] | 0, 128); +CHECK(json["enabled"] | false); +``` + +**🎯 GUIDELINE:** Always prefer the ideal `fl::Json` API for new code. The legacy `fl::parseJson` API remains available for backward compatibility but should be avoided in new implementations. + +## ⚠️ CRITICAL WARNING: C++ ↔ JavaScript Bindings + +**🚨 EXTREMELY IMPORTANT: DO NOT MODIFY FUNCTION SIGNATURES IN WEBASSEMBLY BINDINGS WITHOUT EXTREME CAUTION! 🚨** + +The FastLED project includes WebAssembly (WASM) bindings that bridge C++ and JavaScript code. **Changing function signatures in these bindings is a major source of runtime errors and build failures.** + +### Key Binding Files (⚠️ HIGH RISK ZONE ⚠️): +- `src/platforms/wasm/js_bindings.cpp` - Main JavaScript interface via EM_ASM +- `src/platforms/wasm/ui.cpp` - UI update bindings with extern "C" wrappers +- `src/platforms/wasm/active_strip_data.cpp` - Strip data bindings via EMSCRIPTEN_BINDINGS +- `src/platforms/wasm/fs_wasm.cpp` - File system bindings via EMSCRIPTEN_BINDINGS + +### Before Making ANY Changes to These Files: + +1. **🛑 STOP and consider if the change is absolutely necessary** +2. **📖 Read the warning comments at the top of each binding file** +3. **🧪 Test extensively on WASM target after any changes** +4. **🔗 Verify both C++ and JavaScript sides remain synchronized** +5. **📝 Update corresponding JavaScript code if function signatures change** + +### Common Binding Errors: +- **Parameter type mismatches** (e.g., `const char*` vs `std::string`) +- **Return type changes** that break JavaScript expectations +- **Function name changes** without updating JavaScript calls +- **Missing `extern "C"` wrappers** for EMSCRIPTEN_KEEPALIVE functions +- **EMSCRIPTEN_BINDINGS macro changes** without updating JS Module calls + +### If You Must Modify Bindings: +1. **Update BOTH sides simultaneously** (C++ and JavaScript) +2. **Maintain backward compatibility** when possible +3. **Add detailed comments** explaining the interface contract +4. **Test thoroughly** with real WASM builds, not just compilation +5. **Update documentation** and interface specs + +**Remember: The bindings are a CONTRACT between C++ and JavaScript. Breaking this contract causes silent failures and mysterious bugs that are extremely difficult to debug.** + +## 🚨 WASM PLATFORM SPECIFIC RULES 🚨 + +### WASM Unified Build Awareness + +**🚨 CRITICAL: WASM builds use unified compilation when `FASTLED_ALL_SRC=1` is enabled (automatic for Clang builds)** + +**Root Cause**: Multiple .cpp files are compiled together in a single compilation unit, causing: +- Duplicate function definitions +- Type signature conflicts +- Symbol redefinition errors + +**MANDATORY RULES:** +- **ALWAYS check for unified builds** when modifying WASM platform files +- **NEVER create duplicate function definitions** across WASM .cpp files +- **USE `EMSCRIPTEN_KEEPALIVE` functions as canonical implementations** +- **MATCH Emscripten header signatures exactly** for external C functions +- **REMOVE conflicting implementations** and add explanatory comments + +**Fix Pattern Example:** +```cpp +// In timer.cpp (CANONICAL) +extern "C" { +EMSCRIPTEN_KEEPALIVE uint32_t millis() { + // Implementation +} +} + +// In js.cpp (FIXED) +extern "C" { +// NOTE: millis() and micros() functions are defined in timer.cpp with EMSCRIPTEN_KEEPALIVE +// to avoid duplicate definitions in unified builds +} +``` + +### WASM Async Platform Pump Pattern + +**🚨 CRITICAL: Avoid long blocking sleeps that prevent responsive async processing** + +**MANDATORY RULES:** +- **AVOID long blocking sleeps** (e.g., `emscripten_sleep(100)`) in main loops +- **USE short sleep intervals** (1ms) for responsive yielding in main loops +- **ALLOW JavaScript to control timing** via extern functions rather than blocking C++ loops + +**Correct Implementation:** +```cpp +// ✅ GOOD - responsive yielding without blocking +while (true) { + // Keep pthread alive for extern function calls + // Use short sleep for responsiveness + emscripten_sleep(1); // 1ms yield for responsiveness +} +``` + +**Why This Matters:** +- Long blocking sleeps prevent responsive browser interaction +- JavaScript should control FastLED timing via requestAnimationFrame +- Short sleep intervals maintain responsiveness while allowing other threads to work + +### WASM Function Signature Matching + +**🚨 CRITICAL: External C function declarations must match Emscripten headers exactly** + +**Common Error Pattern:** +```cpp +// ❌ WRONG - causes compilation error +extern "C" void emscripten_sleep(int ms); + +// ✅ CORRECT - matches official Emscripten header +extern "C" void emscripten_sleep(unsigned int ms); +``` + +**MANDATORY RULES:** +- **ALWAYS verify against official Emscripten header signatures** +- **NEVER assume parameter types** - check the actual headers +- **UPDATE signatures immediately** when compilation errors occur + +### WASM Sketch Compilation + +**🎯 HOW TO COMPILE ANY ARDUINO SKETCH TO WASM:** + +**Basic Compilation Commands:** +```bash +# Compile any sketch directory to WASM +uv run ci/wasm_compile.py path/to/your/sketch + +# Compile with build and open browser automatically +uv run ci/wasm_compile.py path/to/your/sketch -b --open + +# Compile examples/Blink to WASM +uv run ci/wasm_compile.py examples/Blink -b --open + +# Compile examples/DemoReel100 to WASM +uv run ci/wasm_compile.py examples/DemoReel100 -b --open +``` + +**Output:** Creates `fastled_js/` folder with: +- `fastled.js` - JavaScript loader +- `fastled.wasm` - WebAssembly binary +- `index.html` - HTML page to run the sketch + +**Run in Browser:** +```bash +# Simple HTTP server to test +cd fastled_js +python -m http.server 8000 +# Open http://localhost:8000 +``` + +**🚨 REQUIREMENTS:** +- **Docker must be installed and running** +- **Internet connection** (for Docker image download on first run) +- **~1GB RAM** for Docker container during compilation + +### WASM Testing Requirements + +**🚨 MANDATORY: Always test WASM compilation after platform file changes** + +**Platform Testing Commands:** +```bash +# Test WASM platform changes (for platform developers) +uv run ci/wasm_compile.py -b examples/wasm + +# Quick test without full build +uv run ci/wasm_compile.py examples/wasm --quick +``` + +**Watch For These Error Patterns:** +- `error: conflicting types for 'function_name'` +- `error: redefinition of 'function_name'` +- `warning: attribute declaration must precede definition` +- `RuntimeError: unreachable` (often async-related) + +**MANDATORY RULES:** +- **ALWAYS test WASM compilation** after modifying any WASM platform files +- **USE `uv run ci/wasm_compile.py` for validation** +- **WATCH for unified build conflicts** in compilation output +- **VERIFY async operations work properly** in browser environment + +### WASM Platform File Organization + +**Best Practices for WASM platform files:** +- ✅ **Use `timer.cpp` for canonical timing functions** with `EMSCRIPTEN_KEEPALIVE` +- ✅ **Use `entry_point.cpp` for main() and setup/loop coordination** with async pumping +- ✅ **Use `js.cpp` for JavaScript utility functions** without duplicating timer functions +- ✅ **Include proper async infrastructure** (`fl/async.h`) in entry points +- ✅ **Comment when removing duplicate implementations** to explain unified build conflicts + +## Testing +The project uses a comprehensive test suite including: +- C++ unit tests +- Platform compilation tests +- Code quality checks (ruff, clang-format) +- Example compilation verification + +### Test Assertion Macros +**🚨 CRITICAL: Always use the proper assertion macros for better error messages and debugging:** + +**Equality Assertions:** +- ✅ **CORRECT**: `CHECK_EQ(A, B)` - for equality comparisons +- ❌ **INCORRECT**: `CHECK(A == B)` - provides poor error messages + +**Inequality Assertions:** +- ✅ **CORRECT**: `CHECK_LT(A, B)` - for less than comparisons +- ✅ **CORRECT**: `CHECK_LE(A, B)` - for less than or equal comparisons +- ✅ **CORRECT**: `CHECK_GT(A, B)` - for greater than comparisons +- ✅ **CORRECT**: `CHECK_GE(A, B)` - for greater than or equal comparisons +- ❌ **INCORRECT**: `CHECK(A < B)`, `CHECK(A <= B)`, `CHECK(A > B)`, `CHECK(A >= B)` + +**Boolean Assertions:** +- ✅ **CORRECT**: `CHECK_TRUE(condition)` - for true conditions +- ✅ **CORRECT**: `CHECK_FALSE(condition)` - for false conditions +- ❌ **INCORRECT**: `CHECK(condition)` - for boolean checks + +**String Assertions:** +- ✅ **CORRECT**: `CHECK_STREQ(str1, str2)` - for string equality +- ✅ **CORRECT**: `CHECK_STRNE(str1, str2)` - for string inequality +- ❌ **INCORRECT**: `CHECK(str1 == str2)` - for string comparisons + +**Floating Point Assertions:** +- ✅ **CORRECT**: `CHECK_DOUBLE_EQ(a, b)` - for floating point equality +- ✅ **CORRECT**: `CHECK_DOUBLE_NE(a, b)` - for floating point inequality +- ❌ **INCORRECT**: `CHECK(a == b)` - for floating point comparisons + +**Examples:** +```cpp +// Good assertion usage +CHECK_EQ(expected_value, actual_value); +CHECK_LT(current_index, max_index); +CHECK_GT(temperature, 0.0); +CHECK_TRUE(is_initialized); +CHECK_FALSE(has_error); +CHECK_STREQ("expected", actual_string); +CHECK_DOUBLE_EQ(3.14159, pi_value, 0.001); + +// Bad assertion usage +CHECK(expected_value == actual_value); // Poor error messages +CHECK(current_index < max_index); // Poor error messages +CHECK(is_initialized); // Unclear intent +CHECK("expected" == actual_string); // Wrong comparison type +``` + +**Why:** Using the proper assertion macros provides: +- **Better error messages** with actual vs expected values +- **Clearer intent** about what is being tested +- **Consistent debugging** across all test failures +- **Type safety** for different comparison types + +### Test File Creation Guidelines +**🚨 CRITICAL: Minimize test file proliferation - Consolidate tests whenever possible** + +**PREFERRED APPROACH:** +- ✅ **CONSOLIDATE:** Add new test cases to existing related test files +- ✅ **EXTEND:** Expand existing `TEST_CASE()` blocks with additional scenarios +- ✅ **REUSE:** Leverage existing test infrastructure and helper functions +- ✅ **COMPREHENSIVE:** Create single comprehensive test files that cover entire feature areas + +**CREATE NEW TEST FILES ONLY WHEN:** +- ✅ **Testing completely new subsystems** with no existing related tests +- ✅ **Isolated feature areas** that don't fit logically into existing test structure +- ✅ **Complex integration tests** that require dedicated setup/teardown + +**AVOID:** +- ❌ **Creating new test files for minor bug fixes** - add to existing tests +- ❌ **One test case per file** - consolidate related functionality +- ❌ **Duplicate test patterns** across multiple files +- ❌ **Scattered feature testing** - keep related tests together + +**EXAMPLES:** + +**✅ GOOD - Consolidation:** +```cpp +// Add to existing tests/test_json_comprehensive.cpp +TEST_CASE("JSON - New Feature Addition") { + // Add new functionality tests to existing comprehensive file +} +``` + +**❌ BAD - Proliferation:** +```cpp +// Don't create tests/test_json_new_feature.cpp for minor additions +// Instead add to existing comprehensive test file +``` + +**DEVELOPMENT WORKFLOW:** +1. **During Development/Bug Fixing:** Temporary test files are acceptable for rapid iteration +2. **Near Completion:** **MANDATORY** - Consolidate temporary tests into existing files +3. **Final Review:** Remove temporary test files and ensure comprehensive coverage in main test files + +**CONSOLIDATION CHECKLIST:** +- [ ] Can this test be added to an existing `TEST_CASE` in the same file? +- [ ] Does an existing test file cover the same functional area? +- [ ] Would this test fit better as a sub-section of a comprehensive test? +- [ ] Are there duplicate test patterns that can be eliminated? + +**Why:** Maintaining a clean, consolidated test suite: +- **Easier maintenance** - fewer files to manage and update +- **Better organization** - related functionality tested together +- **Faster builds** - fewer compilation units +- **Cleaner repository** - less file clutter +- **Improved discoverability** - easier to find existing test coverage + +### Test Execution Format +**🚨 CRITICAL: Always use the correct test execution format:** +- ✅ **CORRECT**: `bash test ` (e.g., `bash test audio_json_parsing`) +- ❌ **INCORRECT**: `./.build/bin/test_.exe` +- ❌ **INCORRECT**: Running executables directly + +**Examples:** +- `bash test` - Run all tests (includes debug symbols) +- `bash test audio_json_parsing` - Run specific test +- `bash test xypath` - Run test_xypath.cpp +- `bash compile uno --examples Blink` - Compile examples + +**Quick Build Options:** +- `bash test --quick --cpp` - Quick C++ tests only (when no *.py changes) +- `bash test --quick` - Quick tests including Python (when *.py changes) + +**Why:** The `bash test` wrapper handles platform differences, environment setup, and proper test execution across all supported systems. + +Use `bash test` as specified in user rules for running unit tests. For compilation tests, use `bash compile --examples ` (e.g., `bash compile uno --examples Blink`). + +**🚨 FOR BACKGROUND AGENTS:** Running `bash test` is MANDATORY before indicating completion. Use the MCP server `validate_completion` tool to ensure all tests pass before completing any task. + +## Debugging and Stack Traces + +### Stack Trace Setup +The FastLED project supports enhanced debugging through stack trace functionality for crash analysis and debugging. + +**For Background Agents**: Use the MCP server tool `setup_stack_traces` to automatically install and configure stack trace support: + +```bash +# Via MCP server (recommended for background agents) +uv run mcp_server.py +# Then use setup_stack_traces tool with method: "auto" +``` + +**Manual Installation**: + +**Ubuntu/Debian**: +```bash +sudo apt-get update +sudo apt-get install -y libunwind-dev build-essential +``` + +**CentOS/RHEL/Fedora**: +```bash +sudo yum install -y libunwind-devel gcc-c++ # CentOS/RHEL +sudo dnf install -y libunwind-devel gcc-c++ # Fedora +``` + +**macOS**: +```bash +brew install libunwind +``` + +### Available Stack Trace Methods +1. **LibUnwind** (Recommended) - Enhanced stack traces with symbol resolution +2. **Execinfo** (Fallback) - Basic stack traces using standard glibc +3. **Windows** (On Windows) - Windows-specific debugging APIs +4. **No-op** (Last resort) - Minimal crash handling + +The build system automatically detects and configures the best available option. + +### Testing Stack Traces +```bash +# Note: Stack trace testing now uses Python build system +# CMake commands are deprecated +cd tests +cmake . && make crash_test_standalone crash_test_execinfo # DEPRECATED + +# Test libunwind version +./.build/bin/crash_test_standalone manual # Manual stack trace +./.build/bin/crash_test_standalone nullptr # Crash test + +# Test execinfo version +./.build/bin/crash_test_execinfo manual # Manual stack trace +./.build/bin/crash_test_execinfo nullptr # Crash test +``` + +### Using in Code +```cpp +#include "tests/crash_handler.h" + +int main() { + setup_crash_handler(); // Enable crash handling + // Your code here... + return 0; +} +``` + +**For Background Agents**: Always run the `setup_stack_traces` MCP tool when setting up a new environment to ensure proper debugging capabilities are available. + +## Platform Build Information Analysis + +The FastLED project includes comprehensive tools for analyzing platform-specific build information, including preprocessor defines, compiler flags, and toolchain paths from `build_info.json` files generated during compilation. + +### Overview + +Platform build information is stored in `.build/{platform}/build_info.json` files that are automatically generated when compiling for any platform. These files contain: + +- **Platform Defines** - Preprocessor definitions (`#define` values) specific to each platform +- **Compiler Information** - Paths, flags, and types for C/C++ compilers +- **Toolchain Aliases** - Tool paths for gcc, g++, ar, objcopy, nm, etc. +- **Build Configuration** - Framework, build type, and other settings + +### Quick Start + +#### 1. Generate Build Information + +Before analyzing, ensure you have compiled the platform: + +```bash +# Compile a platform to generate build_info.json +uv run ci/ci-compile.py uno --examples Blink +uv run ci/ci-compile.py esp32dev --examples Blink +``` + +This creates `.build/{platform}/build_info.json` with all platform information. + +#### 2. Analyze Platform Defines + +**Get platform-specific preprocessor defines:** +```bash +# Command line tool +python3 ci/ci/build_info_analyzer.py --board uno --show-defines + +# Via MCP server +uv run mcp_server.py +# Use build_info_analysis tool with: board="uno", show_defines=true +``` + +**Example output for UNO:** +``` +📋 Platform Defines for UNO: + PLATFORMIO=60118 + ARDUINO_AVR_UNO + F_CPU=16000000L + ARDUINO_ARCH_AVR + ARDUINO=10808 + __AVR_ATmega328P__ +``` + +**Example output for ESP32:** +``` +📋 Platform Defines for ESP32DEV: + ESP32=ESP32 + ESP_PLATFORM + F_CPU=240000000L + ARDUINO_ARCH_ESP32 + IDF_VER="v5.3.2-174-g083aad99cf-dirty" + ARDUINO_ESP32_DEV + # ... and 23 more defines +``` + +#### 3. Compare Platforms + +**Compare defines between platforms:** +```bash +# Command line +python3 ci/ci/build_info_analyzer.py --compare uno esp32dev + +# Via MCP +# Use build_info_analysis tool with: board="uno", compare_with="esp32dev" +``` + +Shows differences and commonalities between platform defines. + +### Available Tools + +#### Command Line Tool + +**Basic Usage:** +```bash +# List available platforms +python3 ci/ci/build_info_analyzer.py --list-boards + +# Show platform defines +python3 ci/ci/build_info_analyzer.py --board uno --show-defines + +# Show compiler information +python3 ci/ci/build_info_analyzer.py --board esp32dev --show-compiler + +# Show toolchain aliases +python3 ci/ci/build_info_analyzer.py --board teensy31 --show-toolchain + +# Show everything +python3 ci/ci/build_info_analyzer.py --board digix --show-all + +# Compare platforms +python3 ci/ci/build_info_analyzer.py --compare uno esp32dev + +# JSON output for automation +python3 ci/ci/build_info_analyzer.py --board uno --show-defines --json +``` + +#### MCP Server Tool + +**For Background Agents**, use the MCP server `build_info_analysis` tool: + +```bash +# Start MCP server +uv run mcp_server.py + +# Use build_info_analysis tool with parameters: +# - board: "uno", "esp32dev", "teensy31", etc. or "list" to see available +# - show_defines: true/false (default: true) +# - show_compiler: true/false +# - show_toolchain: true/false +# - show_all: true/false +# - compare_with: "other_board_name" for comparison +# - output_json: true/false for programmatic use +``` + +### Supported Platforms + +The build info analysis works with **ANY platform** that generates a `build_info.json` file: + +**Embedded Platforms:** +- ✅ **UNO (AVR)** - 8-bit microcontroller (6 defines) +- ✅ **ESP32DEV** - WiFi-enabled 32-bit platform (29 defines) +- ✅ **ESP32S3, ESP32C3, ESP32C6** - All ESP32 variants +- ✅ **TEENSY31, TEENSYLC** - ARM Cortex-M platforms +- ✅ **DIGIX, BLUEPILL** - ARM Cortex-M3 platforms +- ✅ **STM32, NRF52** - Various ARM platforms +- ✅ **RPIPICO, RPIPICO2** - Raspberry Pi Pico platforms +- ✅ **ATTINY85, ATTINY1616** - Small AVR microcontrollers + +### Use Cases + +#### For Code Development + +**Understanding Platform Differences:** +```bash +# See what defines are available for conditional compilation +python3 ci/ci/build_info_analyzer.py --board esp32dev --show-defines + +# Compare two platforms to understand differences +python3 ci/ci/build_info_analyzer.py --compare uno esp32dev +``` + +**Compiler and Toolchain Information:** +```bash +# Get compiler paths and flags for debugging builds +python3 ci/ci/build_info_analyzer.py --board teensy31 --show-compiler + +# Get toolchain paths for symbol analysis +python3 ci/ci/build_info_analyzer.py --board digix --show-toolchain +``` + +#### For Automation + +**JSON output for scripts:** +```bash +# Get defines as JSON for processing +python3 ci/ci/build_info_analyzer.py --board uno --show-defines --json + +# Get all build info as JSON +python3 ci/ci/build_info_analyzer.py --board esp32dev --show-all --json +``` + +### Integration with Other Tools + +Build info analysis integrates with other FastLED tools: + +1. **Symbol Analysis** - Uses build_info.json to find toolchain paths +2. **Compilation** - Generated automatically during example compilation +3. **Testing** - Provides platform context for test results + +### Troubleshooting + +**Common Issues:** + +1. **"No boards with build_info.json found"** + - **Solution:** Compile a platform first: `uv run ci/ci-compile.py {board} --examples Blink` + +2. **"Board key not found in build_info.json"** + - **Solution:** Check available boards: `python3 ci/ci/build_info_analyzer.py --list-boards` + +3. **"Build info not found for platform"** + - **Solution:** Ensure the platform compiled successfully and check `.build/{board}/build_info.json` exists + +### Best Practices + +1. **Always compile first** before analyzing build information +2. **Use comparison feature** to understand platform differences +3. **Check defines** when adding platform-specific code +4. **Use JSON output** for automated processing and CI/CD +5. **Combine with symbol analysis** for complete platform understanding + +**For Background Agents:** Use the MCP server `build_info_analysis` tool for consistent access to platform build information and proper error handling. + +## Symbol Analysis for Binary Optimization + +The FastLED project includes comprehensive symbol analysis tools to identify optimization opportunities and understand binary size allocation across all supported platforms. + +### Overview + +Symbol analysis examines compiled ELF files to: +- **Identify large symbols** that may be optimization targets +- **Understand memory allocation** across different code sections +- **Find unused features** that can be eliminated to reduce binary size +- **Compare symbol sizes** between different builds or platforms +- **Provide optimization recommendations** based on actual usage patterns + +### Supported Platforms + +The symbol analysis tools work with **ANY platform** that generates a `build_info.json` file, including: + +**Embedded Platforms:** +- ✅ **UNO (AVR)** - Small 8-bit microcontroller (typically ~3-4KB symbols) +- ✅ **ESP32DEV (Xtensa)** - WiFi-enabled 32-bit platform (typically ~200-300KB symbols) +- ✅ **ESP32S3, ESP32C3, ESP32C6, etc.** - All ESP32 variants supported + +**ARM Platforms:** +- ✅ **TEENSY31 (ARM Cortex-M4)** - High-performance 32-bit (typically ~10-15KB symbols) +- ✅ **TEENSYLC (ARM Cortex-M0+)** - Low-power ARM platform (typically ~8-10KB symbols) +- ✅ **DIGIX (ARM Cortex-M3)** - Arduino Due compatible (typically ~15-20KB symbols) +- ✅ **STM32 (ARM Cortex-M3)** - STMicroelectronics platform (typically ~12-18KB symbols) + +**And many more!** Any platform with toolchain support and `build_info.json` generation. + +### Quick Start + +#### 1. Prerequisites + +Before running symbol analysis, ensure you have compiled the platform: + +```bash +# Compile platform first (required step) +uv run ci/ci-compile.py uno --examples Blink +uv run ci/ci-compile.py esp32dev --examples Blink +uv run ci/ci-compile.py teensy31 --examples Blink +``` + +This generates the required `.build/{platform}/build_info.json` file and ELF binary. + +#### 2. Run Symbol Analysis + +**Analyze specific platform:** +```bash +uv run ci/ci/symbol_analysis.py --board uno +uv run ci/ci/symbol_analysis.py --board esp32dev +uv run ci/ci/symbol_analysis.py --board teensy31 +``` + +**Analyze all available platforms at once:** +```bash +uv run ci/demo_symbol_analysis.py +``` + +**Using MCP Server (Recommended for Background Agents):** +```bash +# Use MCP server tools +uv run mcp_server.py +# Then use symbol_analysis tool with board: "uno" or "auto" +# Or use symbol_analysis tool with run_all_platforms: true +``` + +### Analysis Output + +Symbol analysis provides detailed reports including: + +**Summary Information:** +- **Total symbols count** and **total size** +- **Symbol type breakdown** (text, data, bss, etc.) +- **Platform-specific details** (toolchain, ELF file location) + +**Largest Symbols List:** +- **Top symbols by size** for optimization targeting +- **Demangled C++ names** for easy identification +- **Size in bytes** and **percentage of total** + +**Optimization Recommendations:** +- **Feature analysis** - unused features that can be disabled +- **Size impact estimates** - potential savings from removing features +- **Platform-specific suggestions** based on symbol patterns + +### Example Analysis Results + +**UNO Platform (Small embedded):** +``` +================================================================================ +UNO SYMBOL ANALYSIS REPORT +================================================================================ + +SUMMARY: + Total symbols: 51 + Total symbol size: 3767 bytes (3.7 KB) + +LARGEST SYMBOLS (sorted by size): + 1. 1204 bytes - ClocklessController<...>::showPixels(...) + 2. 572 bytes - CFastLED::show(unsigned char) + 3. 460 bytes - main + 4. 204 bytes - CPixelLEDController<...>::show(...) +``` + +**ESP32 Platform (Feature-rich):** +``` +================================================================================ +ESP32DEV SYMBOL ANALYSIS REPORT +================================================================================ + +SUMMARY: + Total symbols: 2503 + Total symbol size: 237092 bytes (231.5 KB) + +LARGEST SYMBOLS (sorted by size): + 1. 12009 bytes - _vfprintf_r + 2. 11813 bytes - _svfprintf_r + 3. 8010 bytes - _vfiprintf_r + 4. 4192 bytes - port_IntStack +``` + +### Advanced Features + +#### JSON Output +Save detailed analysis results for programmatic processing: +```bash +uv run symbol_analysis.py --board esp32dev --output-json +# Results saved to: .build/esp32dev_symbol_analysis.json +``` + +#### Batch Analysis +Analyze multiple platforms in sequence: +```bash +for board in uno esp32dev teensy31; do + uv run symbol_analysis.py --board $board +done +``` + +#### Integration with Build Systems +The symbol analysis can be integrated into automated build processes: +```python +# In your Python build script +import subprocess +result = subprocess.run(['uv', 'run', 'symbol_analysis.py', '--board', 'uno'], + capture_output=True, text=True) +``` + +### MCP Server Tools + +**For Background Agents**, use the MCP server tools for symbol analysis: + +1. **Generic Symbol Analysis** (`symbol_analysis` tool): + - Works with **any platform** (UNO, ESP32, Teensy, STM32, etc.) + - Auto-detects available platforms from `.build/` directory + - Can analyze single platform or all platforms simultaneously + - Provides comprehensive usage instructions + +2. **ESP32-Specific Analysis** (`esp32_symbol_analysis` tool): + - **ESP32 platforms only** with FastLED-focused filtering + - Includes feature analysis and optimization recommendations + - FastLED-specific symbol identification and grouping + +**Usage via MCP:** +```bash +# Start MCP server +uv run mcp_server.py + +# Use symbol_analysis tool with parameters: +# - board: "uno", "esp32dev", or "auto" +# - run_all_platforms: true/false +# - output_json: true/false +``` + +### Troubleshooting + +**Common Issues:** + +1. **"build_info.json not found"** + - **Solution:** Compile the platform first: `uv run ci/ci-compile.py {board} --examples Blink` + +2. **"ELF file not found"** + - **Solution:** Ensure compilation completed successfully and check `.build/{board}/` directory + +3. **"Tool not found"** (nm, c++filt, etc.) + - **Solution:** The platform toolchain isn't installed or configured properly + - **Check:** Verify PlatformIO platform installation: `uv run pio platform list` + +4. **"No symbols found"** + - **Solution:** The ELF file may be stripped or compilation failed + - **Check:** Verify ELF file exists and has debug symbols + +**Debug Mode:** +```bash +# Run with verbose Python output for debugging +uv run python -v ci/ci/symbol_analysis.py --board uno +``` + +### Best Practices + +1. **Always compile first** before running symbol analysis +2. **Use consistent examples** (like Blink) for size comparisons +3. **Run analysis on clean builds** to avoid cached/incremental build artifacts +4. **Compare results across platforms** to understand feature scaling +5. **Focus on the largest symbols first** for maximum optimization impact +6. **Use JSON output for automated processing** and trend analysis + +**For Background Agents:** Always use the MCP server `symbol_analysis` tool for consistent results and proper error handling. diff --git a/.pio/libdeps/esp01_1m/FastLED/LAYOUT.md b/.pio/libdeps/esp01_1m/FastLED/LAYOUT.md new file mode 100644 index 0000000..d891042 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/LAYOUT.md @@ -0,0 +1,414 @@ +# FastLED UI Layout Management System Design + +## Overview + +This document outlines the design for a comprehensive, responsive UI layout management system for the FastLED WebAssembly compiler interface. The system provides dynamic layout calculation, state management, and container coordination to ensure optimal UI presentation across different screen sizes and orientations. + +## Architecture + +### Core Components + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ UILayoutPlacementManager │ +│ (Main Orchestrator) │ +├─────────────────────────────────────────────────────────────────┤ +│ • Coordinates all layout operations │ +│ • Applies CSS styling and grid layouts │ +│ • Handles layout mode transitions │ +│ • Manages container visibility │ +└─────────────────────────────────────────────────────────────────┘ + │ + ┌───────────────┼───────────────┐ + │ │ │ + ▼ ▼ ▼ +┌─────────────────────┐ ┌─────────────────┐ ┌─────────────────────┐ +│ LayoutStateManager │ │ ResizeCoordinator│ │ ColumnValidator │ +│ (State & Logic) │ │ (Event Handling) │ │ (Optimization) │ +├─────────────────────┤ ├─────────────────┤ ├─────────────────────┤ +│ • Viewport tracking │ │ • Resize events │ │ • Layout validation │ +│ • Layout calculation│ │ • Debouncing │ │ • Performance check │ +│ • State transitions │ │ • Event dispatch │ │ • Efficiency metrics│ +│ • Container states │ │ • Coordination │ │ • Optimization hints│ +└─────────────────────┘ └─────────────────┘ └─────────────────────┘ +``` + +## Component Specifications + +### 1. UILayoutPlacementManager + +**Purpose**: Main orchestrator for all layout operations +**Location**: `src/platforms/wasm/compiler/modules/ui_layout_placement_manager.js` + +**Key Responsibilities:** +- Apply layout styles to DOM elements +- Coordinate between state manager and UI components +- Handle layout mode transitions (mobile, tablet, desktop, ultrawide) +- Manage container visibility and grid configurations + +**Public API:** +```javascript +class UILayoutPlacementManager { + constructor() + applyLayout() + forceLayoutUpdate() + validateAndOptimizeLayout() + getLayoutInfo() + updateContentMetrics(totalGroups, totalElements) +} +``` + +### 2. LayoutStateManager + +**Purpose**: Unified state management for layout calculations +**Location**: `src/platforms/wasm/compiler/modules/layout_state_manager.js` + +**Key Features:** +- Centralized layout state storage +- Viewport and breakpoint detection +- Canvas and UI column calculations +- Container state tracking +- Atomic state updates with change events + +**State Schema:** +```javascript +{ + mode: 'mobile' | 'tablet' | 'desktop' | 'ultrawide', + viewportWidth: number, + availableWidth: number, + canvasSize: number, + uiColumns: number, + uiColumnWidth: number, + uiTotalWidth: number, + canExpand: boolean, + container2Visible: boolean, + totalGroups: number, + totalElements: number +} +``` + +### 3. ResizeCoordinator + +**Purpose**: Coordinated resize event handling +**Location**: `src/platforms/wasm/compiler/modules/resize_coordinator.js` + +**Features:** +- Debounced resize event handling +- Cross-component resize coordination +- Performance-optimized event dispatch +- Race condition prevention + +### 4. ColumnValidator + +**Purpose**: Layout optimization and validation +**Location**: `src/platforms/wasm/compiler/modules/column_validator.js` + +**Capabilities:** +- Layout efficiency analysis +- Column width optimization +- Content density validation +- Performance recommendations + +## Layout Modes + +### Mobile (≤ 768px) +- **Layout**: Single column (1×N grid) +- **Canvas**: Full width, centered +- **UI**: Stacked below canvas +- **Containers**: Only primary UI container visible + +### Tablet (769px - 1199px) +- **Layout**: Two columns (2×N grid) +- **Canvas**: Left side, fixed width +- **UI**: Right side, flexible width +- **Containers**: Primary UI container only + +### Desktop (1200px - 1599px) +- **Layout**: Two columns (2×N grid) +- **Canvas**: Left side, larger fixed width +- **UI**: Right side, flexible width +- **Containers**: Primary UI container only + +### Ultrawide (≥ 1600px) +- **Layout**: Three columns (3×N grid) +- **Canvas**: Center, fixed width +- **UI**: Left and right sides, flexible widths +- **Containers**: Both primary and secondary UI containers + +## Configuration + +### Layout Constants +```javascript +{ + minCanvasSize: 320, + maxCanvasSize: 800, + minUIColumnWidth: 280, + maxUIColumnWidth: 400, + horizontalGap: 40, + verticalGap: 20, + containerPadding: 40, + maxUIColumns: 3, + preferredUIColumnWidth: 320, + canvasExpansionRatio: 0.6, + minContentRatio: 0.4 +} +``` + +### Breakpoints +```javascript +{ + mobile: { max: 768 }, + tablet: { min: 769, max: 1199 }, + desktop: { min: 1200, max: 1599 }, + ultrawide: { min: 1600 } +} +``` + +## Implementation Todos + +### Phase 1: Core Infrastructure ✅ +- [x] Create LayoutStateManager with unified state handling +- [x] Implement ResizeCoordinator for event management +- [x] Build ColumnValidator for layout optimization +- [x] Refactor UILayoutPlacementManager to use new components + +### Phase 2: State Management ✅ +- [x] Implement atomic state updates with change events +- [x] Add container state tracking and visibility management +- [x] Create viewport detection and breakpoint handling +- [x] Add content metrics tracking (groups, elements) + +### Phase 3: Layout Calculation ✅ +- [x] Implement responsive canvas sizing algorithms +- [x] Add dynamic UI column width calculation +- [x] Create layout mode transition logic +- [x] Add grid template generation for CSS + +### Phase 4: Event Coordination ✅ +- [x] Implement debounced resize handling +- [x] Add cross-component event coordination +- [x] Create performance-optimized event dispatch +- [x] Add race condition prevention + +### Phase 5: Optimization & Validation ✅ +- [x] Create layout efficiency analysis +- [x] Implement column width optimization +- [x] Add content density validation +- [x] Create performance monitoring and recommendations + +### Phase 6: Integration & Polish ✅ +- [x] Integrate with existing UI manager +- [x] Add backward compatibility for legacy APIs +- [x] Implement proper error handling and fallbacks +- [x] Add comprehensive logging and debugging support + +### Phase 7: Testing & Documentation +- [ ] Create comprehensive unit tests for all components +- [ ] Add integration tests for layout scenarios +- [ ] Create visual regression tests for different screen sizes +- [ ] Add performance benchmarks and optimization tests +- [ ] Document API usage and configuration options + +### Phase 8: Advanced Features +- [ ] Add animation support for layout transitions +- [ ] Implement custom breakpoint configuration +- [ ] Add layout templates and presets +- [ ] Create advanced grid layout options +- [ ] Add accessibility features and ARIA support + +### Phase 9: Performance Optimization +- [ ] Implement layout caching for repeated calculations +- [ ] Add virtual scrolling for large UI element lists +- [ ] Optimize DOM manipulation and CSS application +- [ ] Add lazy loading for non-visible UI components +- [ ] Implement progressive enhancement for slower devices + +### Phase 10: Extensibility +- [ ] Create plugin system for custom layout algorithms +- [ ] Add theme and styling customization APIs +- [ ] Implement layout export/import functionality +- [ ] Create developer tools for layout debugging +- [ ] Add real-time layout editing capabilities + +## Benefits + +### Performance +- **Debounced Events**: Prevents excessive layout recalculations +- **Atomic Updates**: Eliminates partial state inconsistencies +- **Efficient DOM**: Minimizes CSS recalculations and reflows +- **Optimized Calculations**: Smart caching and memoization + +### Maintainability +- **Separation of Concerns**: Each component has a single responsibility +- **Unified State**: Single source of truth for layout information +- **Modular Design**: Components can be tested and modified independently +- **Clear APIs**: Well-defined interfaces between components + +### User Experience +- **Responsive Design**: Seamless adaptation to any screen size +- **Smooth Transitions**: Coordinated layout changes without flicker +- **Optimal Layouts**: Intelligent space utilization across devices +- **Fast Rendering**: Performance-optimized for real-time applications + +### Developer Experience +- **Type Safety**: Comprehensive JSDoc annotations for IDE support +- **Debugging Tools**: Built-in logging and state inspection +- **Extensible**: Easy to add new layout modes and features +- **Documentation**: Clear API documentation and usage examples + +## JSON UI Persistent State + +### State Management Architecture +The system now includes comprehensive JSON-based state persistence implemented in commit `86d9b7d5d`. This enables: + +- **Persistent Layout State**: All layout configurations stored as JSON with atomic updates +- **UI Element State Tracking**: Complete state management for UI elements with change events +- **Recording/Playback System**: Full UI interaction recording and replay capabilities +- **Container State Management**: Visibility and configuration state for all UI containers + +### Core State Components + +#### LayoutStateManager +**Location**: `src/platforms/wasm/compiler/modules/layout_state_manager.js:487` + +Provides centralized JSON state management with: +```javascript +{ + mode: 'mobile' | 'tablet' | 'desktop' | 'ultrawide', + viewportWidth: number, + availableWidth: number, + canvasSize: number, + uiColumns: number, + uiColumnWidth: number, + uiTotalWidth: number, + canExpand: boolean, + container2Visible: boolean, + totalGroups: number, + totalElements: number, + containers: { + 'ui-controls': { visible: boolean, columns: number, width: number }, + 'ui-controls-2': { visible: boolean, columns: number, width: number } + } +} +``` + +#### UIRecorder +**Location**: `src/platforms/wasm/compiler/modules/ui_recorder.js:517` + +Records UI state changes as JSON events: +```javascript +{ + recording: { + version: "1.0", + startTime: "ISO8601", + endTime: "ISO8601", + metadata: { recordingId: string, layoutMode: string, totalDuration: number } + }, + events: [ + { + timestamp: number, + type: 'add' | 'update' | 'remove', + elementId: string, + data: { elementType?: string, value?: any, previousValue?: any, elementConfig?: Object } + } + ] +} +``` + +#### UIPlayback +**Location**: `src/platforms/wasm/compiler/modules/ui_playback.js:596` + +Reconstructs UI from JSON state with: +- Event-by-event playback with timing control +- Speed control and pause/resume functionality +- Element state validation and restoration +- Progress tracking and timeline navigation + +### UI Reconstruction Benefits + +Instead of manipulating DOM objects directly, the JSON state system enables: + +1. **State-Driven Reconstruction**: Rebuild entire UI from current JSON state +2. **Atomic Updates**: All changes applied atomically to prevent inconsistencies +3. **Time Travel**: Navigate to any point in UI history via recorded states +4. **State Validation**: Verify UI consistency against recorded state +5. **Reproducible Layouts**: Exact recreation of UI configurations + +### Usage Pattern for Reconstruction + +```javascript +// Get current UI state +const currentState = layoutManager.stateManager.getState(); + +// Reconstruct UI from state instead of DOM manipulation +function reconstructUI(state) { + // Clear existing UI + clearAllContainers(); + + // Rebuild from JSON state + applyLayoutFromState(state); + recreateElementsFromState(state); + restoreContainerVisibility(state); +} + +// Apply state changes +layoutManager.stateManager.updateState(newStateData); +``` + +## Integration Points + +### UI Manager Integration +```javascript +// In JsonUiManager constructor +this.layoutManager = new UILayoutPlacementManager(); + +// Listen for layout changes +this.layoutManager.stateManager.addStateChangeListener((changeEvent) => { + const { state } = changeEvent; + this.onLayoutChange(state.mode); +}); +``` + +### Container Management +```javascript +// Check container visibility before placing elements +const container2State = this.layoutManager.stateManager.getContainerState('ui-controls-2'); +if (container2State && container2State.visible) { + // Use multi-container layout +} else { + // Use single-container layout +} +``` + +### Content Updates +```javascript +// Update content metrics when UI elements change +this.layoutManager.updateContentMetrics(totalGroups, totalElements); + +// Force layout recalculation when needed +this.layoutManager.forceLayoutUpdate(); +``` + +## Future Enhancements + +### Advanced Layout Modes +- **Split-screen**: Side-by-side canvas and code editor +- **Picture-in-picture**: Floating canvas with overlay UI +- **Full-screen**: Immersive canvas mode with minimal UI +- **Multi-monitor**: Extended layout across multiple displays + +### Dynamic Content +- **Adaptive UI**: UI elements that resize based on content +- **Collapsible sections**: Expandable/collapsible UI groups +- **Floating panels**: Draggable and dockable UI components +- **Custom layouts**: User-defined layout configurations + +### Accessibility +- **Screen reader support**: Proper ARIA labels and navigation +- **Keyboard navigation**: Full keyboard accessibility +- **High contrast**: Theme support for visual accessibility +- **Responsive text**: Scalable fonts and UI elements + +--- + +*This design provides a robust foundation for responsive UI layout management in the FastLED WebAssembly compiler, ensuring optimal user experience across all device types and screen sizes.* \ No newline at end of file diff --git a/.pio/libdeps/esp01_1m/FastLED/LICENSE b/.pio/libdeps/esp01_1m/FastLED/LICENSE new file mode 100644 index 0000000..ebe4763 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013 FastLED + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/.pio/libdeps/esp01_1m/FastLED/PORTING.md b/.pio/libdeps/esp01_1m/FastLED/PORTING.md new file mode 100644 index 0000000..f90ea47 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/PORTING.md @@ -0,0 +1,56 @@ +Platform Porting Guide +========================== + +# Fast porting for a new board on existing hardware + +Sometimes "porting" FastLED simply consists of supplying new pin definitions for the given platform. For example, platforms/avr/fastpin_avr.h contains various pin definitions for all the AVR variant chipsets/boards that FastLED supports. Defining a set of pins involves setting up a set of definitions - for example here's one full set from the avr fastpin file: + +``` +#elif defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644P__) + +_FL_IO(A); _FL_IO(B); _FL_IO(C); _FL_IO(D); + +#define MAX_PIN 31 +_FL_DEFPIN(0, 0, B); _FL_DEFPIN(1, 1, B); _FL_DEFPIN(2, 2, B); _FL_DEFPIN(3, 3, B); +_FL_DEFPIN(4, 4, B); _FL_DEFPIN(5, 5, B); _FL_DEFPIN(6, 6, B); _FL_DEFPIN(7, 7, B); +_FL_DEFPIN(8, 0, D); _FL_DEFPIN(9, 1, D); _FL_DEFPIN(10, 2, D); _FL_DEFPIN(11, 3, D); +_FL_DEFPIN(12, 4, D); _FL_DEFPIN(13, 5, D); _FL_DEFPIN(14, 6, D); _FL_DEFPIN(15, 7, D); +_FL_DEFPIN(16, 0, C); _FL_DEFPIN(17, 1, C); _FL_DEFPIN(18, 2, C); _FL_DEFPIN(19, 3, C); +_FL_DEFPIN(20, 4, C); _FL_DEFPIN(21, 5, C); _FL_DEFPIN(22, 6, C); _FL_DEFPIN(23, 7, C); +_FL_DEFPIN(24, 0, A); _FL_DEFPIN(25, 1, A); _FL_DEFPIN(26, 2, A); _FL_DEFPIN(27, 3, A); +_FL_DEFPIN(28, 4, A); _FL_DEFPIN(29, 5, A); _FL_DEFPIN(30, 6, A); _FL_DEFPIN(31, 7, A); + +#define HAS_HARDWARE_PIN_SUPPORT 1 +``` + +The ```_FL_IO``` macro is used to define the port registers for the platform while the ```_FL_DEFPIN``` macro is used to define pins. The parameters to the macro are the pin number, the bit on the port that represents that pin, and the port identifier itself. On some platforms, like the AVR, ports are identified by letter. On other platforms, like arm, ports are identified by number. + +The ```HAS_HARDWARE_PIN_SUPPORT``` define tells the rest of the FastLED library that there is hardware pin support available. There may be other platform specific defines for things like hardware SPI ports and such. + +## Setting up the basic files/folders + +* Create platform directory (e.g. platforms/arm/kl26) +* Create configuration header led_sysdefs_arm_kl26.h: + * Define platform flags (like FASTLED_ARM/FASTLED_TEENSY) + * Define configuration parameters re: interrupts, or clock doubling + * Include extar system header files if needed +* Create main platform include, fastled_arm_kl26.h + * Include the various other header files as needed +* Modify led_sysdefs.h to conditionally include platform sysdefs header file +* Modify platforms.h to conditionally include platform fastled header + +## Porting fastpin.h + +The heart of the FastLED library is the fast pin access. This is a templated class that provides 1-2 cycle pin access, bypassing digital write and other such things. As such, this will usually be the first bit of the library that you will want to port when moving to a new platform. Once you have FastPIN up and running then you can do some basic work like testing toggles or running bit-bang'd SPI output. + +There's two low level FastPin classes. There's the base FastPIN template class, and then there is FastPinBB which is for bit-banded access on those MCUs that support bitbanding. Note that the bitband class is optional and primarily useful in the implementation of other functionality internal to the platform. This file is also where you would do the pin to port/bit mapping defines. + +Explaining how the macros work and should be used is currently beyond the scope of this document. + +## Porting fastspi.h + +This is where you define the low level interface to the hardware SPI system (including a writePixels method that does a bunch of housekeeping for writing led data). Use the fastspi_nop.h file as a reference for the methods that need to be implemented. There are ofteh other useful methods that can help with the internals of the SPI code, I recommend taking a look at how the various platforms implement their SPI classes. + +## Porting clockless.h + +This is where you define the code for the clockless controllers. Across ARM platforms this will usually be fairly similar - though different arm platforms will have different clock sources that you can/should use. diff --git a/.pio/libdeps/esp01_1m/FastLED/QWEN.md b/.pio/libdeps/esp01_1m/FastLED/QWEN.md new file mode 100644 index 0000000..a3604fd --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/QWEN.md @@ -0,0 +1,1744 @@ +# FastLED Project Rules for Cursor + +## Cursor Configuration + +### Post-Change Hooks +Run linting after every code change: +```yaml +post_change_hooks: + - command: "bash lint" + description: "Run code formatting and linting" + working_directory: "." +``` + +## MCP Server Configuration +This project includes a custom MCP server (`mcp_server.py`) that provides tools for: +- Running tests with various options +- Compiling examples for different platforms +- Code fingerprinting and change detection +- Linting and formatting +- Project information and status +- **Build info analysis for platform-specific defines, compiler flags, and toolchain information** +- **Symbol analysis for binary optimization (all platforms)** +- Stack trace setup for enhanced debugging +- **🌐 FastLED Web Compiler with Playwright (FOREGROUND AGENTS ONLY)** +- **🚨 CRITICAL: `validate_completion` tool for background agents** + +To use the MCP server, run: `uv run mcp_server.py` + +**BACKGROUND AGENTS:** The MCP server includes a mandatory `validate_completion` tool that MUST be used before indicating task completion. This tool runs `bash test` and ensures all tests pass. + +### FastLED Web Compiler (FOREGROUND AGENTS ONLY) + +**🌐 FOR INTERACTIVE DEVELOPMENT:** The MCP server includes a `run_fastled_web_compiler` tool that: + +**Note:** For direct command-line WASM compilation, see the **WASM Sketch Compilation** section below. + +- **Compiles Arduino sketches to WASM** for browser execution +- **Captures console.log output** with playwright automation +- **Takes screenshots** of running visualizations +- **Monitors FastLED_onFrame calls** to verify proper initialization +- **Provides detailed analysis** of errors and performance + +**PREREQUISITES:** +- `pip install fastled` - FastLED web compiler +- `pip install playwright` - Browser automation (included in pyproject.toml) +- Docker (optional, for faster compilation) + +**USAGE EXAMPLES:** +```python +# Via MCP Server - Basic usage +use run_fastled_web_compiler tool with: +- example_path: "examples/Audio" +- capture_duration: 30 +- headless: false +- save_screenshot: true + +# Via MCP Server - Different examples +use run_fastled_web_compiler tool with: +- example_path: "examples/Blink" +- capture_duration: 15 +- headless: true + +# Via MCP Server - Quick test +use run_fastled_web_compiler tool with: +- example_path: "examples/wasm" +- capture_duration: 10 +``` + +**KEY FEATURES:** +- **Automatic browser installation:** Installs Chromium via playwright +- **Console.log capture:** Records all browser console output with timestamps +- **Error detection:** Identifies compilation failures and runtime errors +- **FastLED monitoring:** Tracks `FastLED_onFrame` calls to verify functionality +- **Screenshot capture:** Saves visualization images with timestamps +- **Docker detection:** Checks for Docker availability for faster builds +- **Background agent protection:** Automatically disabled for CI/background environments + +**🚫 BACKGROUND AGENT RESTRICTION:** +This tool is **COMPLETELY DISABLED** for background agents and CI environments. Background agents attempting to use this tool will receive an error message. This is intentional to prevent: +- Hanging processes in automated environments +- Resource conflicts in CI/CD pipelines +- Interactive browser windows in headless environments + +**CONSOLE.LOG CAPTURE PATTERN:** +The tool follows the pattern established in `ci/wasm_test.py` and `ci/ci/scrapers/`: +```javascript +// Example captured console.log patterns: +[14:25:30] log: FastLED_onFrame called: {"frame":1,"leds":100} +[14:25:30] log: Audio worklet initialized +[14:25:31] error: Missing audio_worklet_processor.js +[14:25:31] warning: WebGL context lost +``` + +**INTEGRATION WITH EXISTING CI:** +- Complements existing `ci/wasm_test.py` functionality +- Uses same playwright patterns as `ci/ci/scrapers/` +- Leverages existing pyproject.toml dependencies +- Compatible with existing Docker-based compilation workflow + +## Project Structure +- `src/` - Main FastLED library source code +- `examples/` - Arduino examples demonstrating FastLED usage +- `tests/` - Test files and infrastructure +- `ci/` - Continuous integration scripts +- `docs/` - Documentation + +## Key Commands +- `uv run test.py` - Run all tests +- `uv run test.py --cpp` - Run C++ tests only +- `uv run test.py TestName` - Run specific C++ test + - For example: running test_xypath.cpp would be uv run test.py xypath +- `./lint` - Run code formatting/linting +- `uv run ci/ci-compile.py uno --examples Blink` - Compile examples for specific platform + - For example (uno): `uv run ci/ci-compile.py uno --examples Blink` + - For example (esp32dev): `uv run ci/ci-compile.py esp32dev --examples Blink` + - For example (esp8266): `uv run ci/ci-compile.py esp01 --examples Blink` + - For example (teensy31): `uv run ci/ci-compile.py teensy31 --examples Blink` +- **WASM Compilation** - Compile Arduino sketches to run in web browsers: + - `uv run ci/wasm_compile.py examples/Blink -b --open` - Compile Blink to WASM and open browser + - `uv run ci/wasm_compile.py path/to/your/sketch -b --open` - Compile any sketch to WASM +- **Symbol Analysis** - Analyze binary size and optimization opportunities: + - `uv run ci/ci/symbol_analysis.py --board uno` - Analyze UNO platform + - `uv run ci/ci/symbol_analysis.py --board esp32dev` - Analyze ESP32 platform + - `uv run ci/demo_symbol_analysis.py` - Analyze all available platforms + +## 🤖 AI AGENT LINTING GUIDELINES + +### FOREGROUND AGENTS (Interactive Development) +**🚨 ALWAYS USE `bash lint` - DO NOT RUN INDIVIDUAL LINTING SCRIPTS** + +- **✅ CORRECT:** `bash lint` +- **❌ FORBIDDEN:** `./lint-js`, `./check-js`, `python3 scripts/enhance-js-typing.py` +- **❌ FORBIDDEN:** `uv run ruff check`, `uv run black`, individual tools + +**WHY:** `bash lint` provides: +- **Comprehensive coverage** - Python, C++, JavaScript, and enhancement analysis +- **Consistent workflow** - Single command for all linting needs +- **Proper sequencing** - Runs tools in the correct order with dependencies +- **Clear output** - Organized sections showing what's being checked +- **Agent guidance** - Shows proper usage for AI agents + +### BACKGROUND AGENTS (Automated/CI Environments) +**CAN USE FINE-GRAINED LINTING FOR SPECIFIC NEEDS** + +Background agents may use individual linting scripts when needed: +- `./lint-js` - JavaScript-only linting +- `./check-js` - JavaScript type checking +- `python3 scripts/enhance-js-typing.py` - JavaScript enhancement analysis +- `uv run ruff check` - Python linting only +- MCP server `lint_code` tool - Programmatic access + +**BUT STILL PREFER `bash lint` FOR COMPREHENSIVE CHECKING** + +### Linting Script Integration + +The `bash lint` command now includes: +1. **📝 Python Linting** - ruff, black, isort, pyright +2. **🔧 C++ Linting** - clang-format (when enabled) +3. **🌐 JavaScript Linting** - Deno lint, format check, type checking +4. **🔍 JavaScript Enhancement** - Analysis and recommendations +5. **💡 AI Agent Guidance** - Clear instructions for proper usage + +### When to Use Individual Scripts + +**FOREGROUND AGENTS:** Never. Always use `bash lint`. + +**BACKGROUND AGENTS:** Only when: +- **Debugging specific issues** with one language/tool +- **Testing incremental changes** to linting configuration +- **Running targeted analysis** for specific files +- **Integrating with automated workflows** via MCP server + +## Development Guidelines +- Follow existing code style and patterns +- Run tests before committing changes +- Use the MCP server tools for common tasks +- Check examples when making API changes + +## 🚨 CRITICAL: .INO FILE CREATION RULES 🚨 + +### ⚠️ THINK BEFORE CREATING .INO FILES ⚠️ + +**.ino files should be created SPARINGLY and ONLY when truly justified.** + +### 🚫 WHEN NOT TO CREATE .INO FILES: +- **Testing minor code changes** - Use existing test files or unit tests +- **Quick API validation** - Use unit tests or modify existing examples +- **Debugging specific functions** - Use test files, not new sketches +- **One-off experiments** - Create temporary test files instead +- **Small feature tests** - Extend existing relevant examples + +### ✅ WHEN TO CREATE .INO FILES: + +#### 1. **Temporary Testing (.ino)** +**Use Pattern:** `temp_.ino` or `test_.ino` +```cpp +// temp_json_api.ino - Testing new JSON fetch functionality +// test_networking.ino - Validating network stack changes +``` +- ✅ **FOR:** Testing new APIs during development +- ✅ **FOR:** Quick prototyping and validation +- ✅ **DELETE AFTER USE** - These are temporary by design + +#### 2. **Significant New Feature Examples** +**Use Pattern:** `examples//.ino` +```cpp +// examples/JsonFetchApi/JsonFetchApi.ino - Comprehensive JSON API example +// examples/NetworkStack/NetworkStack.ino - Major networking features +``` +- ✅ **FOR:** Large, comprehensive new features +- ✅ **FOR:** APIs that warrant dedicated examples +- ✅ **FOR:** Features that users will commonly implement +- ✅ **PERMANENT** - These become part of the example library + +### 📋 CREATION CHECKLIST: + +**Before creating ANY .ino file, ask:** + +1. **🤔 Is this testing a new API?** + - YES → Create `temp_.ino`, delete after testing + - NO → Consider alternatives + +2. **🤔 Is this a significant new feature that users will commonly use?** + - YES → Create `examples//.ino` + - NO → Use existing examples or test files + +3. **🤔 Can I modify an existing example instead?** + - YES → Extend existing example rather than creating new + - NO → Proceed with creation + +4. **🤔 Is this just for debugging/validation?** + - YES → Use unit tests or temporary test files + - NO → Consider if it meets the "significant feature" criteria + +### 🔍 REVIEW CRITERIA: + +**For Feature Examples (.ino files that stay):** +- ✅ **Demonstrates complete, real-world usage patterns** +- ✅ **Covers multiple aspects of the feature comprehensively** +- ✅ **Provides educational value for users** +- ✅ **Shows best practices and common use cases** +- ✅ **Is likely to be referenced by multiple users** + +**For Temporary Testing (.ino files that get deleted):** +- ✅ **Clearly named as temporary (temp_*, test_*)** +- ✅ **Focused on specific API validation** +- ✅ **Will be deleted after development cycle** +- ✅ **Too complex for unit test framework** + +### ❌ EXAMPLES OF WHAT NOT TO CREATE: +- `test_basic_led.ino` - Use existing Blink example +- `debug_colors.ino` - Use existing ColorPalette example +- `quick_brightness.ino` - Use unit tests or modify existing example +- `validate_pins.ino` - Use PinTest example or unit tests + +### ✅ EXAMPLES OF JUSTIFIED CREATIONS: +- `temp_new_wifi_api.ino` - Testing major new WiFi functionality (temporary) +- `examples/MachineLearning/MachineLearning.ino` - New ML integration feature (permanent) +- `temp_performance_test.ino` - Validating optimization changes (temporary) + +### 🧹 CLEANUP RESPONSIBILITY: +- **Temporary files:** Creator must delete when testing is complete +- **Feature examples:** Must be maintained and updated as API evolves +- **Abandoned files:** Regular cleanup reviews to remove unused examples + +**Remember: The examples directory is user-facing documentation. Every .ino file should provide clear value to FastLED users.** + +### Memory Management with Smart Pointers and Moveable Objects +**🚨 CRITICAL: Always use proper RAII patterns - smart pointers, moveable objects, or wrapper classes instead of raw pointers for resource management.** + +**Resource Management Options:** +- ✅ **PREFERRED**: `fl::shared_ptr` for shared ownership (multiple references to same object) +- ✅ **PREFERRED**: `fl::unique_ptr` for exclusive ownership (single owner, automatic cleanup) +- ✅ **PREFERRED**: Moveable wrapper objects (like `fl::promise`) for safe copying and transferring of unique resources +- ✅ **ACCEPTABLE**: `fl::vector` storing objects by value when objects support move/copy semantics +- ❌ **AVOID**: `fl::vector` storing raw pointers - use `fl::vector>` or `fl::vector>` +- ❌ **AVOID**: Manual `new`/`delete` - use `fl::make_shared()` or `fl::make_unique()` + +**Moveable Wrapper Pattern:** +When you have a unique resource (like a future, file handle, or network connection) that needs to be passed around easily, create a moveable wrapper class that: +- Internally manages the unique resource (often with `fl::unique_ptr` or similar) +- Provides copy semantics through shared implementation details +- Maintains clear ownership semantics +- Allows safe transfer between contexts + +**Examples:** +```cpp +// ✅ GOOD - Using smart pointers +fl::vector> mActiveClients; +auto client = fl::make_shared(); +mActiveClients.push_back(client); + +// ✅ GOOD - Using unique_ptr for exclusive ownership +fl::unique_ptr client = fl::make_unique(); + +// ✅ GOOD - Moveable wrapper objects (fl::promise example) +fl::vector> mActivePromises; // Copyable wrapper around unique future +fl::promise promise = fetch.get(url).execute(); +mActivePromises.push_back(promise); // Safe copy, shared internal state + +// ✅ GOOD - Objects stored by value (if copyable/moveable) +fl::vector mRequests; // When Request supports copy/move + +// ❌ BAD - Raw pointers require manual memory management +fl::vector mActivePromises; // Memory leaks possible +Promise* promise = new Promise(); // Who calls delete? +``` + +**fl::promise as Moveable Wrapper Example:** +```cpp +// fl::promise wraps a unique fl::future but provides copyable semantics +class promise { + fl::shared_ptr> mImpl; // Shared wrapper around unique resource +public: + promise(const promise& other) : mImpl(other.mImpl) {} // Safe copying + promise(promise&& other) : mImpl(fl::move(other.mImpl)) {} // Move support + // ... wrapper delegates to internal future +}; + +// Usage - can be copied and passed around safely +fl::promise promise = http_get_promise("https://api.example.com"); +someContainer.push_back(promise); // Copy is safe +processAsync(promise); // Can pass to multiple places +``` + +**Why This Pattern:** +- **Automatic cleanup** - No memory leaks from forgotten `delete` calls +- **Exception safety** - Resources automatically freed even if exceptions occur +- **Clear ownership** - Code clearly shows who owns what objects +- **Thread safety** - Smart pointers provide atomic reference counting +- **Easy sharing** - Moveable wrappers allow safe copying of unique resources +- **API flexibility** - Can pass resources between different contexts safely + +## 🔧 CMAKE BUILD SYSTEM ARCHITECTURE (DEPRECATED - NO LONGER USED) + +**⚠️ IMPORTANT: CMake build system is no longer used. FastLED now uses a Python-based build system.** + +### Build System Overview (Historical Reference) +FastLED previously used a sophisticated CMake build system located in `tests/cmake/` with modular configuration: + +**Core Build Files:** +- `tests/CMakeLists.txt` - Main CMake entry point +- `tests/cmake/` - Modular CMake configuration directory + +**Key CMake Modules:** +- `LinkerCompatibility.cmake` - **🚨 CRITICAL for linker issues** - GNU↔MSVC flag translation, lld-link compatibility, warning suppression +- `CompilerDetection.cmake` - Compiler identification and toolchain setup +- `CompilerFlags.cmake` - Compiler-specific flag configuration +- `DebugSettings.cmake` - Debug symbol and optimization configuration +- `OptimizationSettings.cmake` - LTO and performance optimization settings +- `ParallelBuild.cmake` - Parallel compilation and linker selection (mold, lld) +- `TestConfiguration.cmake` - Test target setup and configuration +- `BuildOptions.cmake` - Build option definitions and defaults + +### Linker Configuration (Most Important for Build Issues) + +**🎯 PRIMARY LOCATION for linker problems: `tests/cmake/LinkerCompatibility.cmake`** + +**Key Functions:** +- `apply_linker_compatibility()` - **Main entry point** - auto-detects lld-link and applies compatibility +- `translate_gnu_to_msvc_linker_flags()` - Converts GNU-style flags to MSVC-style for lld-link +- `get_dead_code_elimination_flags()` - Platform-specific dead code elimination +- `get_debug_flags()` - Debug information configuration +- `get_optimization_flags()` - Performance optimization flags + +**Linker Detection Logic:** +```cmake +if(WIN32 AND CMAKE_CXX_COMPILER_ID MATCHES "Clang") + find_program(LLDLINK_EXECUTABLE lld-link) + if(LLDLINK_EXECUTABLE) + # Apply lld-link compatibility automatically + endif() +endif() +``` + +**Common Linker Issues & Solutions:** +- **lld-link warnings**: Suppressed via `/ignore:4099` in `apply_linker_compatibility()` +- **GNU→MSVC flag translation**: Automatic in `translate_gnu_to_msvc_linker_flags()` +- **Dead code elimination**: Platform-specific via `get_dead_code_elimination_flags()` +- **Debug symbol conflicts**: Handled in `get_debug_flags()` + +### Compiler Configuration + +**Compiler Detection**: `tests/cmake/CompilerDetection.cmake` +- Auto-detects Clang, GCC, MSVC +- Sets up toolchain-specific configurations +- Handles cross-compilation scenarios + +**Compiler Flags**: `tests/cmake/CompilerFlags.cmake` +- Warning configurations per compiler +- Optimization level management +- Platform-specific adjustments + +### Build Options & Configuration + +**Available Build Options** (defined in `BuildOptions.cmake`): +- `FASTLED_DEBUG_LEVEL` - Debug information level (NONE, MINIMAL, STANDARD, FULL) +- `FASTLED_OPTIMIZATION_LEVEL` - Optimization (O0, O1, O2, O3, Os, Ofast) +- `FASTLED_ENABLE_LTO` - Link-time optimization +- `FASTLED_ENABLE_PARALLEL_BUILD` - Parallel compilation +- `FASTLED_STATIC_RUNTIME` - Static runtime linking + +### Testing Infrastructure + +**Test Configuration**: `tests/cmake/TestConfiguration.cmake` +- Defines test targets and dependencies +- Configures test execution parameters +- Sets up coverage and profiling + +**Test Execution**: +- `bash test` - Comprehensive test runner (preferred) +- `uv run test.py` - Python test interface +- Individual test executables in `.build/bin/` + +### Build Troubleshooting Guide + +**For Linker Issues:** +1. **Check `tests/cmake/LinkerCompatibility.cmake` first** +2. Look for lld-link detection and compatibility functions +3. Check GNU→MSVC flag translation logic +4. Verify warning suppression settings + +**For Compiler Issues:** +1. Check `tests/cmake/CompilerDetection.cmake` for detection logic +2. Review `tests/cmake/CompilerFlags.cmake` for flag conflicts +3. Verify optimization settings in `OptimizationSettings.cmake` + +**For Build Performance:** +1. Check `tests/cmake/ParallelBuild.cmake` for parallel settings +2. Review LTO configuration in `OptimizationSettings.cmake` +3. Verify linker selection (mold, lld, default) + + + + +## 🚨 CRITICAL REQUIREMENTS FOR ALL AGENTS (FOREGROUND & BACKGROUND) 🚨 + +## 🚨 MANDATORY COMMAND EXECUTION RULES 🚨 + +### FOREGROUND AGENTS (Interactive Development) + +**FOREGROUND AGENTS MUST FOLLOW THESE COMMAND EXECUTION PATTERNS:** + +#### Python Code Execution: +- ❌ **NEVER run Python code directly** +- ✅ **ALWAYS create/modify tmp.py** with your code +- ✅ **ALWAYS run: `uv run tmp.py`** + +#### Shell Command Execution: +- ❌ **NEVER run shell commands directly** +- ✅ **ALWAYS create/modify tmp.sh** with your commands +- ✅ **ALWAYS run: `bash tmp.sh`** + +#### Command Execution Examples: + +**Python Code Pattern:** +```python +# tmp.py +import subprocess +result = subprocess.run(['git', 'status'], capture_output=True, text=True) +print(result.stdout) +``` +Then run: `uv run tmp.py` + +**Shell Commands Pattern:** +```bash +# tmp.sh +#!/bin/bash +git status +ls -la +uv run ci/ci-compile.py uno --examples Blink +``` +Then run: `bash tmp.sh` + +### BACKGROUND AGENTS (Automated/CI Environments) + +**BACKGROUND AGENTS MUST FOLLOW THESE RESTRICTED COMMAND EXECUTION PATTERNS:** + +#### Python Code Execution: +- ❌ **NEVER run Python code directly** +- ❌ **NEVER create/use tmp.py files** (forbidden for background agents) +- ✅ **ALWAYS use `uv run` with existing scripts** (e.g., `uv run test.py`, `uv run ci/ci-compile.py`) +- ✅ **ALWAYS use MCP server tools** for programmatic operations when available + +#### Shell Command Execution: +- ❌ **NEVER run shell commands directly** +- ❌ **NEVER create/use tmp.sh files** (forbidden for background agents) +- ✅ **ALWAYS use existing bash scripts** (e.g., `bash test`, `bash lint`) +- ✅ **ALWAYS use `uv run` for Python scripts** with proper arguments +- ✅ **ALWAYS use MCP server tools** for complex operations when available + +#### Background Agent Command Examples: + +**✅ ALLOWED - Using existing scripts:** +```bash +bash test +bash lint +uv run test.py audio_json_parsing +uv run ci/ci-compile.py uno --examples Blink +``` + +**❌ FORBIDDEN - Creating temporary files:** +```bash +# DON'T DO THIS - tmp.sh is forbidden for background agents +echo "git status" > tmp.sh +bash tmp.sh +``` + +**✅ PREFERRED - Using MCP server tools:** +```bash +uv run mcp_server.py +# Then use appropriate MCP tools like: validate_completion, symbol_analysis, etc. +``` + +### DELETE Operations - DANGER ZONE (ALL AGENTS): +- 🚨 **STOP and ask for permission** before ANY delete operations +- ✅ **EXCEPTION:** Single files that you just created are OK to delete +- ❌ **NEVER delete multiple files** without explicit permission +- ❌ **NEVER delete directories** without explicit permission +- ❌ **NEVER delete system files or project files** without permission + +### Git-Bash Terminal Truncation Issue +**🚨 IMPORTANT: Git-Bash terminal may truncate the first character of commands** + +**Problem:** The git-bash terminal on Windows sometimes truncates the first character of commands, causing them to fail or execute incorrectly. + +**Solution:** Pre-pend commands with an additional space when using git-bash: +- ✅ **CORRECT**: ` bash test` (note the leading space) +- ❌ **INCORRECT**: `bash test` (may get truncated to `ash test`) + +**Examples:** +```bash +# Good - with leading space for git-bash compatibility + bash test + uv run test.py + bash lint + +# Bad - may get truncated in git-bash +bash test +uv run test.py +bash lint +``` + +**Why:** This ensures commands work reliably across all terminal environments, especially git-bash on Windows systems. + +### Why These Rules Exist: +- **Ensures all operations are reviewable and traceable** +- **Prevents accidental destructive operations in automated environments** +- **Allows for better debugging and error handling** +- **Maintains consistency across different agent types** +- **Provides audit trail for all system modifications** +- **Prevents background agents from creating unnecessary temporary files** + +**These command execution rules apply to ALL operations including but not limited to:** +- File system operations (creating, modifying, deleting files) +- Git operations (commits, pushes, branch changes) +- Package installations and updates +- Build and compilation commands +- Test execution and validation +- System configuration changes + + +### MANDATORY MEMORY REFRESH BEFORE COMPLETION +**🚨 ALL AGENTS MUST REFRESH THEIR MEMORY BEFORE CONCLUDING WORK:** + +- **The AI shall read the cursor rules again to find out what to do before task is considered complete** + - This is MANDATORY for both foreground and background agents + - Reading the cursor rules refreshes your memory about the latest project rules, coding standards, and requirements + - This ensures you have current information about testing procedures, validation tools, and completion requirements + - Do NOT indicate your work is "done" until you have refreshed your memory by reading the cursor rules + +## 🚨 CRITICAL REQUIREMENTS FOR BACKGROUND AGENTS 🚨 + +### MANDATORY PRE-COMPLETION VALIDATION +**ALL BACKGROUND AGENTS MUST FOLLOW THESE REQUIREMENTS BEFORE INDICATING COMPLETION:** + +1. **🚨 ALWAYS RUN `bash test` BEFORE INDICATING COMPLETION** + - This is MANDATORY and NON-NEGOTIABLE for all background agents + - The command `bash test` runs the full test suite including unit tests and compilation checks + - Background agents MUST NOT indicate they are "done" until ALL tests pass + +2. **🚨 USE MCP SERVER VALIDATION TOOL** + - Use the `validate_completion` tool from the MCP server: `uv run mcp_server.py` + - This tool runs `bash test` and validates that all tests pass + - Only indicate completion if this validation tool returns success + +3. **🚨 ZERO TOLERANCE FOR TEST FAILURES** + - If ANY test fails, the background agent MUST fix the issues before completion + - Do NOT indicate completion with failing tests + - Do NOT ignore test errors or warnings + +### Background Agent Completion Checklist: +- [ ] All code changes have been made +- [ ] `bash test` has been run and ALL tests pass +- [ ] No compilation errors or warnings +- [ ] MCP server `validate_completion` tool shows success +- [ ] Only then indicate task completion + +**FAILURE TO FOLLOW THESE REQUIREMENTS WILL RESULT IN BROKEN CODE SUBMISSIONS.** + +### C++ Design Patterns +**Shared Implementation Pattern:** When writing a lot of code that applies the same operation on a bunch of C++ objects, try and determine if those objects share a common base class or internal object. If so consider whether it's appropriate to move the implementation into a shared space. + +## Code Standards + +### Avoid std:: Prefixed Functions +**DO NOT use `std::` prefixed functions or headers in the codebase.** This project provides its own STL-equivalent implementations under the `fl::` namespace. + +**Examples of what to avoid and use instead:** + +**Headers:** + +**Core Language Support:** +- ❌ `#include ` → ✅ `#include "fl/type_traits.h"` +- ❌ `#include ` → ✅ `#include "fl/algorithm.h"` +- ❌ `#include ` → ✅ `#include "fl/functional.h"` +- ❌ `#include ` → ✅ `#include "fl/initializer_list.h"` + +**Containers:** +- ❌ `#include ` → ✅ `#include "fl/vector.h"` +- ❌ `#include ` → ✅ `#include "fl/map.h"` +- ❌ `#include ` → ✅ `#include "fl/hash_map.h"` +- ❌ `#include ` → ✅ `#include "fl/hash_set.h"` +- ❌ `#include ` → ✅ `#include "fl/set.h"` +- ❌ `#include ` → ✅ `#include "fl/slice.h"` + +**Utilities & Smart Types:** +- ❌ `#include ` → ✅ `#include "fl/optional.h"` +- ❌ `#include ` → ✅ `#include "fl/variant.h"` +- ❌ `#include ` → ✅ `#include "fl/pair.h"` (for std::pair) +- ❌ `#include ` → ✅ `#include "fl/string.h"` +- ❌ `#include ` → ✅ `#include "fl/scoped_ptr.h"` or `#include "fl/ptr.h"` + +**Stream/IO:** +- ❌ `#include ` → ✅ `#include "fl/sstream.h"` + +**Threading:** +- ❌ `#include ` → ✅ `#include "fl/thread.h"` + +**Math & System:** +- ❌ `#include ` → ✅ `#include "fl/math.h"` +- ❌ `#include ` → ✅ `#include "fl/stdint.h"` + +**Functions and classes:** +- ❌ `std::move()` → ✅ `fl::move()` +- ❌ `std::forward()` → ✅ `fl::forward()` +- ❌ `std::vector` → ✅ `fl::vector` +- ❌ `std::enable_if` → ✅ `fl::enable_if` + +**Why:** The project maintains its own implementations to ensure compatibility across all supported platforms and to avoid bloating the library with unnecessary STL dependencies. + +**Before using any standard library functionality, check if there's a `fl::` equivalent in the `src/fl/` directory first.** + +### Compiler Warning Suppression +**ALWAYS use the FastLED compiler control macros from `fl/compiler_control.h` for warning suppression.** This ensures consistent cross-compiler support and proper handling of platform differences. + +**Correct Warning Suppression Pattern:** +```cpp +#include "fl/compiler_control.h" + +// Suppress specific warning around problematic code +FL_DISABLE_WARNING_PUSH +FL_DISABLE_FORMAT_TRUNCATION // Use specific warning macros +// ... code that triggers warnings ... +FL_DISABLE_WARNING_POP +``` + +**Available Warning Suppression Macros:** +- ✅ `FL_DISABLE_WARNING_PUSH` / `FL_DISABLE_WARNING_POP` - Standard push/pop pattern +- ✅ `FL_DISABLE_WARNING(warning_name)` - Generic warning suppression (use sparingly) +- ✅ `FL_DISABLE_WARNING_GLOBAL_CONSTRUCTORS` - Clang global constructor warnings +- ✅ `FL_DISABLE_WARNING_SELF_ASSIGN_OVERLOADED` - Clang self-assignment warnings +- ✅ `FL_DISABLE_FORMAT_TRUNCATION` - GCC format truncation warnings + +**What NOT to do:** +- ❌ **NEVER use raw `#pragma` directives** - they don't handle compiler differences +- ❌ **NEVER write manual `#ifdef __clang__` / `#ifdef __GNUC__` blocks** - use the macros +- ❌ **NEVER ignore warnings without suppression** - fix the issue or suppress appropriately + +**Examples:** +```cpp +// ✅ CORRECT - Using FastLED macros +#include "fl/compiler_control.h" + +FL_DISABLE_WARNING_PUSH +FL_DISABLE_FORMAT_TRUNCATION +// Code that triggers format truncation warnings +sprintf(small_buffer, "Very long format string %d", value); +FL_DISABLE_WARNING_POP + +// ❌ INCORRECT - Raw pragma directives +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-truncation" +sprintf(small_buffer, "Very long format string %d", value); +#pragma GCC diagnostic pop +``` + +**Why:** The FastLED compiler control system automatically handles: +- **Compiler detection** (GCC vs Clang vs MSVC) +- **Version compatibility** (warnings that don't exist on older compilers) +- **Platform specifics** (AVR, ESP32, ARM, etc.) +- **Consistent naming** across different compiler warning systems + +### Debug Printing +**Use `FL_WARN` for debug printing throughout the codebase.** This ensures consistent debug output that works in both unit tests and live application testing. + +**Usage:** +- ✅ `FL_WARN("Debug message: " << message);` +- ❌ `FL_WARN("Value: %d", value);` + +**Why:** `FL_WARN` provides a unified logging interface that works across all platforms and testing environments, including unit tests and Arduino sketches. + +### Emoticon and Emoji Usage Policy +**NO emoticons or emoji characters are allowed in C++ source files.** This ensures professional, maintainable code that works correctly across all platforms and development environments. + +**Prohibited in C++ Files:** +- ❌ **C++ source files** (*.cpp, *.c) +- ❌ **C++ header files** (*.h, *.hpp) +- ❌ **Comments in C++ files** - use clear text instead +- ❌ **String literals in C++ code** - use descriptive text +- ❌ **Log messages in C++ code** - use text prefixes like "SUCCESS:", "ERROR:", "WARNING:" + +**Examples of what NOT to do in C++ files:** +```cpp +// ❌ BAD - Emoticons in comments +// 🎯 This function handles user input + +// ❌ BAD - Emoticons in log messages +FL_WARN("✅ Operation successful!"); +FL_WARN("❌ Error occurred: " << error_msg); + +// ❌ BAD - Emoticons in string literals +const char* status = "🔄 Processing..."; +``` + +**Examples of correct alternatives in C++ files:** +```cpp +// ✅ GOOD - Clear text in comments +// TUTORIAL: This function handles user input + +// ✅ GOOD - Text prefixes in log messages +FL_WARN("SUCCESS: Operation completed successfully!"); +FL_WARN("ERROR: Failed to process request: " << error_msg); + +// ✅ GOOD - Descriptive text in string literals +const char* status = "PROCESSING: Request in progress..."; +``` + +**Allowed in Python Files:** +- ✅ **Python source files** (*.py) - emoticons are acceptable for build scripts, tools, and utilities +- ✅ **Python comments and docstrings** - can use emoticons for clarity in development tools +- ✅ **Python log messages** - emoticons OK in build/test output for visual distinction + +**Why:** +- **Cross-platform compatibility** - Some compilers/platforms have issues with Unicode characters +- **Professional codebase** - Maintains serious, enterprise-grade appearance +- **Accessibility** - Screen readers and text-based tools work better with plain text +- **Consistency** - Ensures uniform code style across all C++ files +- **Debugging** - Text-based prefixes are easier to search and filter in logs + +**Before adding any visual indicators to C++ code, use text-based alternatives like "TODO:", "NOTE:", "WARNING:", "SUCCESS:", "ERROR:" prefixes.** + +### Naming Conventions +**Follow these naming conventions for consistency across the codebase:** + +**Simple Objects:** +- ✅ Use lowercase class names for simple objects (e.g., `fl::vec2f`, `fl::point`, `fl::rect`) +- ❌ Avoid: `fl::Vec2f`, `fl::Point`, `fl::Rect` + +**Complex Objects:** +- ✅ Use CamelCase with uppercase first character for complex objects (e.g., `Raster`, `Controller`, `Canvas`) +- ❌ Avoid: `raster`, `controller`, `canvas` + +**Pixel Types:** +- ✅ Use ALL CAPS for pixel types (e.g., `CRGB`, `CHSV`, `HSV16`, `RGB24`) +- ❌ Avoid: `crgb`, `Crgb`, `chsv`, `Chsv` + +**Member Variables and Functions:** + +**Complex Classes/Objects:** +- ✅ **Member variables:** Use `mVariableName` format (e.g., `mPixelCount`, `mBufferSize`, `mCurrentIndex`) +- ✅ **Member functions:** Use camelCase (e.g., `getValue()`, `setPixelColor()`, `updateBuffer()`) +- ❌ Avoid: `m_variable_name`, `variableName`, `GetValue()`, `set_pixel_color()` + +**Simple Classes/Structs:** +- ✅ **Member variables:** Use lowercase snake_case (e.g., `x`, `y`, `width`, `height`, `pixel_count`) +- ✅ **Member functions:** Use camelCase (e.g., `getValue()`, `setPosition()`, `normalize()`) +- ❌ Avoid: `mX`, `mY`, `get_value()`, `set_position()` + +**Examples:** + +```cpp +// Complex class - use mVariableName for members +class Controller { +private: + int mPixelCount; // ✅ Complex class member variable + uint8_t* mBuffer; // ✅ Complex class member variable + bool mIsInitialized; // ✅ Complex class member variable + +public: + void setPixelCount(int count); // ✅ Complex class member function + int getPixelCount() const; // ✅ Complex class member function + void updateBuffer(); // ✅ Complex class member function +}; + +// Simple struct - use snake_case for members +struct vec2 { + int x; // ✅ Simple struct member variable + int y; // ✅ Simple struct member variable + + float magnitude() const; // ✅ Simple struct member function + void normalize(); // ✅ Simple struct member function +}; + +struct point { + float x; // ✅ Simple struct member variable + float y; // ✅ Simple struct member variable + float z; // ✅ Simple struct member variable + + void setPosition(float x, float y, float z); // ✅ Simple struct member function + float distanceTo(const point& other) const; // ✅ Simple struct member function +}; +``` + +**Why:** These conventions help distinguish between different categories of objects and maintain consistency with existing FastLED patterns. Complex classes use Hungarian notation for member variables to clearly distinguish them from local variables, while simple structs use concise snake_case for lightweight data containers. + +### Container Parameter Types +**Prefer `fl::span` over `fl::vector` or arrays for function parameters.** `fl::span` provides a non-owning view that automatically converts from various container types, making APIs more flexible and efficient. + +**Examples:** +- ✅ `void processData(fl::span data)` - accepts arrays, vectors, and other containers +- ❌ `void processData(fl::vector& data)` - only accepts fl::Vector +- ❌ `void processData(uint8_t* data, size_t length)` - requires manual length tracking + +**Benefits:** +- **Automatic conversion:** `fl::span` can automatically convert from `fl::vector`, C-style arrays, and other container types +- **Type safety:** Maintains compile-time type checking while being more flexible than raw pointers +- **Performance:** Zero-cost abstraction that avoids unnecessary copying or allocation +- **Consistency:** Provides a uniform interface for working with contiguous data + +**When to use `fl::vector` instead:** +- When you need ownership and dynamic resizing capabilities +- When storing data as a class member that needs to persist + +**Why:** Using `fl::span` for parameters makes functions more reusable and avoids forcing callers to convert their data to specific container types. + +### Exception Handling +**DO NOT use try-catch blocks or C++ exception handling in the codebase.** FastLED is designed to work on embedded systems like Arduino where exception handling may not be available or desired due to memory and performance constraints. + +**Examples of what to avoid and use instead:** + +**Avoid Exception Handling:** +- ❌ `try { ... } catch (const std::exception& e) { ... }` - Exception handling not available on many embedded platforms +- ❌ `throw std::runtime_error("error message")` - Throwing exceptions not supported +- ❌ `#include ` or `#include ` - Exception headers not needed + +**Use Error Handling Alternatives:** +- ✅ **Return error codes:** `bool function() { return false; }` or custom error enums +- ✅ **Optional types:** `fl::optional` for functions that may not return a value +- ✅ **Assertions:** `FL_ASSERT(condition)` for debug-time validation +- ✅ **Early returns:** `if (!valid) return false;` for error conditions +- ✅ **Status objects:** Custom result types that combine success/failure with data + +**Examples of proper error handling:** +```cpp +// Good: Using return codes +bool initializeHardware() { + if (!setupPins()) { + FL_WARN("Failed to setup pins"); + return false; + } + return true; +} + +// Good: Using fl::optional +fl::optional calculateValue(int input) { + if (input < 0) { + return fl::nullopt; // No value, indicates error + } + return fl::make_optional(sqrt(input)); +} + +// Good: Using early returns +void processData(const uint8_t* data, size_t len) { + if (!data || len == 0) { + FL_WARN("Invalid input data"); + return; // Early return on error + } + // Process data... +} +``` + +**Why:** Many embedded platforms (especially Arduino-compatible boards) don't support C++ exceptions or have them disabled to save memory and improve performance. FastLED must work reliably across all supported platforms. + +### JSON Usage - Ideal API Patterns +**🎯 PREFERRED: Use the modern `fl::Json` class for all JSON operations.** FastLED provides an ideal JSON API that prioritizes type safety, ergonomics, and crash-proof operation. + +**✅ IDIOMATIC JSON USAGE:** +```cpp +// NEW: Clean, safe, idiomatic API +fl::Json json = fl::Json::parse(jsonStr); +int brightness = json["config"]["brightness"] | 128; // Gets value or 128 default +string name = json["device"]["name"] | string("default"); // Type-safe with default +bool enabled = json["features"]["networking"] | false; // Never crashes + +// Array operations +if (json["effects"].contains("rainbow")) { + // Safe array checking +} +``` + +**❌ DISCOURAGED: Verbose legacy API:** +```cpp +// OLD: Verbose, error-prone API (still works, but not recommended) +fl::JsonDocument doc; +fl::string error; +fl::parseJson(jsonStr, &doc, &error); +int brightness = doc["config"]["brightness"].as(); // Can crash if missing +``` + +**Key Benefits of Ideal API:** +- **🛡️ Type Safety** - No crashes on missing fields or type mismatches +- **🎯 Default Values** - Clean `json["key"] | default` syntax +- **📖 Readable Code** - 50% less boilerplate for common operations +- **🚀 Testing** - Easy test data construction with `JsonBuilder` + +**📚 Reference Example:** See `examples/Json/Json.ino` for comprehensive usage patterns and API comparison. + +**Testing with JsonBuilder:** +```cpp +// Easy test data construction +auto json = JsonBuilder() + .set("brightness", 128) + .set("enabled", true) + .set("name", "test_device") + .build(); + +// Type-safe testing +CHECK_EQ(json["brightness"] | 0, 128); +CHECK(json["enabled"] | false); +``` + +**🎯 GUIDELINE:** Always prefer the ideal `fl::Json` API for new code. The legacy `fl::parseJson` API remains available for backward compatibility but should be avoided in new implementations. + +## ⚠️ CRITICAL WARNING: C++ ↔ JavaScript Bindings + +**🚨 EXTREMELY IMPORTANT: DO NOT MODIFY FUNCTION SIGNATURES IN WEBASSEMBLY BINDINGS WITHOUT EXTREME CAUTION! 🚨** + +The FastLED project includes WebAssembly (WASM) bindings that bridge C++ and JavaScript code. **Changing function signatures in these bindings is a major source of runtime errors and build failures.** + +### Key Binding Files (⚠️ HIGH RISK ZONE ⚠️): +- `src/platforms/wasm/js_bindings.cpp` - Main JavaScript interface via EM_ASM +- `src/platforms/wasm/ui.cpp` - UI update bindings with extern "C" wrappers +- `src/platforms/wasm/active_strip_data.cpp` - Strip data bindings via EMSCRIPTEN_BINDINGS +- `src/platforms/wasm/fs_wasm.cpp` - File system bindings via EMSCRIPTEN_BINDINGS + +### Before Making ANY Changes to These Files: + +1. **🛑 STOP and consider if the change is absolutely necessary** +2. **📖 Read the warning comments at the top of each binding file** +3. **🧪 Test extensively on WASM target after any changes** +4. **🔗 Verify both C++ and JavaScript sides remain synchronized** +5. **📝 Update corresponding JavaScript code if function signatures change** + +### Common Binding Errors: +- **Parameter type mismatches** (e.g., `const char*` vs `std::string`) +- **Return type changes** that break JavaScript expectations +- **Function name changes** without updating JavaScript calls +- **Missing `extern "C"` wrappers** for EMSCRIPTEN_KEEPALIVE functions +- **EMSCRIPTEN_BINDINGS macro changes** without updating JS Module calls + +### If You Must Modify Bindings: +1. **Update BOTH sides simultaneously** (C++ and JavaScript) +2. **Maintain backward compatibility** when possible +3. **Add detailed comments** explaining the interface contract +4. **Test thoroughly** with real WASM builds, not just compilation +5. **Update documentation** and interface specs + +**Remember: The bindings are a CONTRACT between C++ and JavaScript. Breaking this contract causes silent failures and mysterious bugs that are extremely difficult to debug.** + +## 🚨 WASM PLATFORM SPECIFIC RULES 🚨 + +### WASM Unified Build Awareness + +**🚨 CRITICAL: WASM builds use unified compilation when `FASTLED_ALL_SRC=1` is enabled (automatic for Clang builds)** + +**Root Cause**: Multiple .cpp files are compiled together in a single compilation unit, causing: +- Duplicate function definitions +- Type signature conflicts +- Symbol redefinition errors + +**MANDATORY RULES:** +- **ALWAYS check for unified builds** when modifying WASM platform files +- **NEVER create duplicate function definitions** across WASM .cpp files +- **USE `EMSCRIPTEN_KEEPALIVE` functions as canonical implementations** +- **MATCH Emscripten header signatures exactly** for external C functions +- **REMOVE conflicting implementations** and add explanatory comments + +**Fix Pattern Example:** +```cpp +// In timer.cpp (CANONICAL) +extern "C" { +EMSCRIPTEN_KEEPALIVE uint32_t millis() { + // Implementation +} +} + +// In js.cpp (FIXED) +extern "C" { +// NOTE: millis() and micros() functions are defined in timer.cpp with EMSCRIPTEN_KEEPALIVE +// to avoid duplicate definitions in unified builds +} +``` + +### WASM Async Platform Pump Pattern + +**🚨 CRITICAL: Avoid long blocking sleeps that prevent responsive async processing** + +**MANDATORY RULES:** +- **AVOID long blocking sleeps** (e.g., `emscripten_sleep(100)`) in main loops +- **USE short sleep intervals** (1ms) for responsive yielding in main loops +- **ALLOW JavaScript to control timing** via extern functions rather than blocking C++ loops + +**Correct Implementation:** +```cpp +// ✅ GOOD - responsive yielding without blocking +while (true) { + // Keep pthread alive for extern function calls + // Use short sleep for responsiveness + emscripten_sleep(1); // 1ms yield for responsiveness +} +``` + +**Why This Matters:** +- Long blocking sleeps prevent responsive browser interaction +- JavaScript should control FastLED timing via requestAnimationFrame +- Short sleep intervals maintain responsiveness while allowing other threads to work + +### WASM Function Signature Matching + +**🚨 CRITICAL: External C function declarations must match Emscripten headers exactly** + +**Common Error Pattern:** +```cpp +// ❌ WRONG - causes compilation error +extern "C" void emscripten_sleep(int ms); + +// ✅ CORRECT - matches official Emscripten header +extern "C" void emscripten_sleep(unsigned int ms); +``` + +**MANDATORY RULES:** +- **ALWAYS verify against official Emscripten header signatures** +- **NEVER assume parameter types** - check the actual headers +- **UPDATE signatures immediately** when compilation errors occur + +### WASM Sketch Compilation + +**🎯 HOW TO COMPILE ANY ARDUINO SKETCH TO WASM:** + +**Basic Compilation Commands:** +```bash +# Compile any sketch directory to WASM +uv run ci/wasm_compile.py path/to/your/sketch + +# Compile with build and open browser automatically +uv run ci/wasm_compile.py path/to/your/sketch -b --open + +# Compile examples/Blink to WASM +uv run ci/wasm_compile.py examples/Blink -b --open + +# Compile examples/DemoReel100 to WASM +uv run ci/wasm_compile.py examples/DemoReel100 -b --open +``` + +**Output:** Creates `fastled_js/` folder with: +- `fastled.js` - JavaScript loader +- `fastled.wasm` - WebAssembly binary +- `index.html` - HTML page to run the sketch + +**Run in Browser:** +```bash +# Simple HTTP server to test +cd fastled_js +python -m http.server 8000 +# Open http://localhost:8000 +``` + +**🚨 REQUIREMENTS:** +- **Docker must be installed and running** +- **Internet connection** (for Docker image download on first run) +- **~1GB RAM** for Docker container during compilation + +### WASM Testing Requirements + +**🚨 MANDATORY: Always test WASM compilation after platform file changes** + +**Platform Testing Commands:** +```bash +# Test WASM platform changes (for platform developers) +uv run ci/wasm_compile.py -b examples/wasm + +# Quick test without full build +uv run ci/wasm_compile.py examples/wasm --quick +``` + +**Watch For These Error Patterns:** +- `error: conflicting types for 'function_name'` +- `error: redefinition of 'function_name'` +- `warning: attribute declaration must precede definition` +- `RuntimeError: unreachable` (often async-related) + +**MANDATORY RULES:** +- **ALWAYS test WASM compilation** after modifying any WASM platform files +- **USE `uv run ci/wasm_compile.py` for validation** +- **WATCH for unified build conflicts** in compilation output +- **VERIFY async operations work properly** in browser environment + +### WASM Platform File Organization + +**Best Practices for WASM platform files:** +- ✅ **Use `timer.cpp` for canonical timing functions** with `EMSCRIPTEN_KEEPALIVE` +- ✅ **Use `entry_point.cpp` for main() and setup/loop coordination** with async pumping +- ✅ **Use `js.cpp` for JavaScript utility functions** without duplicating timer functions +- ✅ **Include proper async infrastructure** (`fl/async.h`) in entry points +- ✅ **Comment when removing duplicate implementations** to explain unified build conflicts + +## Testing +The project uses a comprehensive test suite including: +- C++ unit tests +- Platform compilation tests +- Code quality checks (ruff, clang-format) +- Example compilation verification + +**🚨 CRITICAL: Manual compiling of tests should never be attempted.** Always put tests in `tests/test_.cpp` and run with `bash test `. + +The `bash test` command now automatically detects when test files are added or removed and will clean the build accordingly. + +### Test Assertion Macros +**🚨 CRITICAL: Always use the proper assertion macros for better error messages and debugging:** + +**Equality Assertions:** +- ✅ **CORRECT**: `CHECK_EQ(A, B)` - for equality comparisons +- ❌ **INCORRECT**: `CHECK(A == B)` - provides poor error messages + +**Inequality Assertions:** +- ✅ **CORRECT**: `CHECK_LT(A, B)` - for less than comparisons +- ✅ **CORRECT**: `CHECK_LE(A, B)` - for less than or equal comparisons +- ✅ **CORRECT**: `CHECK_GT(A, B)` - for greater than comparisons +- ✅ **CORRECT**: `CHECK_GE(A, B)` - for greater than or equal comparisons +- ❌ **INCORRECT**: `CHECK(A < B)`, `CHECK(A <= B)`, `CHECK(A > B)`, `CHECK(A >= B)` + +**Boolean Assertions:** +- ✅ **CORRECT**: `CHECK_TRUE(condition)` - for true conditions +- ✅ **CORRECT**: `CHECK_FALSE(condition)` - for false conditions +- ❌ **INCORRECT**: `CHECK(condition)` - for boolean checks + +**String Assertions:** +- ✅ **CORRECT**: `CHECK_STREQ(str1, str2)` - for string equality +- ✅ **CORRECT**: `CHECK_STRNE(str1, str2)` - for string inequality +- ❌ **INCORRECT**: `CHECK(str1 == str2)` - for string comparisons + +**Floating Point Assertions:** +- ✅ **CORRECT**: `CHECK_DOUBLE_EQ(a, b)` - for floating point equality +- ✅ **CORRECT**: `CHECK_DOUBLE_NE(a, b)` - for floating point inequality +- ❌ **INCORRECT**: `CHECK(a == b)` - for floating point comparisons + +**Examples:** +```cpp +// Good assertion usage +CHECK_EQ(expected_value, actual_value); +CHECK_LT(current_index, max_index); +CHECK_GT(temperature, 0.0); +CHECK_TRUE(is_initialized); +CHECK_FALSE(has_error); +CHECK_STREQ("expected", actual_string); +CHECK_DOUBLE_EQ(3.14159, pi_value, 0.001); + +// Bad assertion usage +CHECK(expected_value == actual_value); // Poor error messages +CHECK(current_index < max_index); // Poor error messages +CHECK(is_initialized); // Unclear intent +CHECK("expected" == actual_string); // Wrong comparison type +``` + +**Why:** Using the proper assertion macros provides: +- **Better error messages** with actual vs expected values +- **Clearer intent** about what is being tested +- **Consistent debugging** across all test failures +- **Type safety** for different comparison types + +### Test File Creation Guidelines +**🚨 CRITICAL: Minimize test file proliferation - Consolidate tests whenever possible** + +**PREFERRED APPROACH:** +- ✅ **CONSOLIDATE:** Add new test cases to existing related test files +- ✅ **EXTEND:** Expand existing `TEST_CASE()` blocks with additional scenarios +- ✅ **REUSE:** Leverage existing test infrastructure and helper functions +- ✅ **COMPREHENSIVE:** Create single comprehensive test files that cover entire feature areas + +**CREATE NEW TEST FILES ONLY WHEN:** +- ✅ **Testing completely new subsystems** with no existing related tests +- ✅ **Isolated feature areas** that don't fit logically into existing test structure +- ✅ **Complex integration tests** that require dedicated setup/teardown + +**AVOID:** +- ❌ **Creating new test files for minor bug fixes** - add to existing tests +- ❌ **One test case per file** - consolidate related functionality +- ❌ **Duplicate test patterns** across multiple files +- ❌ **Scattered feature testing** - keep related tests together + +**EXAMPLES:** + +**✅ GOOD - Consolidation:** +```cpp +// Add to existing tests/test_json_comprehensive.cpp +TEST_CASE("JSON - New Feature Addition") { + // Add new functionality tests to existing comprehensive file +} +``` + +**❌ BAD - Proliferation:** +```cpp +// Don't create tests/test_json_new_feature.cpp for minor additions +// Instead add to existing comprehensive test file +``` + +**DEVELOPMENT WORKFLOW:** +1. **During Development/Bug Fixing:** Temporary test files are acceptable for rapid iteration +2. **Near Completion:** **MANDATORY** - Consolidate temporary tests into existing files +3. **Final Review:** Remove temporary test files and ensure comprehensive coverage in main test files + +**CONSOLIDATION CHECKLIST:** +- [ ] Can this test be added to an existing `TEST_CASE` in the same file? +- [ ] Does an existing test file cover the same functional area? +- [ ] Would this test fit better as a sub-section of a comprehensive test? +- [ ] Are there duplicate test patterns that can be eliminated? + +**Why:** Maintaining a clean, consolidated test suite: +- **Easier maintenance** - fewer files to manage and update +- **Better organization** - related functionality tested together +- **Faster builds** - fewer compilation units +- **Cleaner repository** - less file clutter +- **Improved discoverability** - easier to find existing test coverage + +### Test Execution Format +**🚨 CRITICAL: Always use the correct test execution format:** +- ✅ **CORRECT**: `bash test ` (e.g., `bash test audio_json_parsing`) +- ❌ **INCORRECT**: `./.build/bin/test_.exe` +- ❌ **INCORRECT**: Running executables directly +- ❌ **INCORRECT**: Manual compilation of tests + +**Examples:** +- `bash test` - Run all tests (includes debug symbols) +- `bash test audio_json_parsing` - Run specific test +- `bash test xypath` - Run test_xypath.cpp +- `bash compile uno --examples Blink` - Compile examples + +**Quick Build Options:** +- `bash test --quick --cpp` - Quick C++ tests only (when no *.py changes) +- `bash test --quick` - Quick tests including Python (when *.py changes) + +**Why:** The `bash test` wrapper handles platform differences, environment setup, and proper test execution across all supported systems. + +Use `bash test` as specified in user rules for running unit tests. For compilation tests, use `bash compile --examples ` (e.g., `bash compile uno --examples Blink`). + +**🚨 FOR BACKGROUND AGENTS:** Running `bash test` is MANDATORY before indicating completion. Use the MCP server `validate_completion` tool to ensure all tests pass before completing any task. + +## Debugging and Stack Traces + +### Stack Trace Setup +The FastLED project supports enhanced debugging through stack trace functionality for crash analysis and debugging. + +**For Background Agents**: Use the MCP server tool `setup_stack_traces` to automatically install and configure stack trace support: + +```bash +# Via MCP server (recommended for background agents) +uv run mcp_server.py +# Then use setup_stack_traces tool with method: "auto" +``` + +**Manual Installation**: + +**Ubuntu/Debian**: +```bash +sudo apt-get update +sudo apt-get install -y libunwind-dev build-essential +``` + +**CentOS/RHEL/Fedora**: +```bash +sudo yum install -y libunwind-devel gcc-c++ # CentOS/RHEL +sudo dnf install -y libunwind-devel gcc-c++ # Fedora +``` + +**macOS**: +```bash +brew install libunwind +``` + +### Available Stack Trace Methods +1. **LibUnwind** (Recommended) - Enhanced stack traces with symbol resolution +2. **Execinfo** (Fallback) - Basic stack traces using standard glibc +3. **Windows** (On Windows) - Windows-specific debugging APIs +4. **No-op** (Last resort) - Minimal crash handling + +The build system automatically detects and configures the best available option. + +### Testing Stack Traces +```bash +# Note: Stack trace testing now uses Python build system +# CMake commands are deprecated +cd tests +cmake . && make crash_test_standalone crash_test_execinfo # DEPRECATED + +# Test libunwind version +./.build/bin/crash_test_standalone manual # Manual stack trace +./.build/bin/crash_test_standalone nullptr # Crash test + +# Test execinfo version +./.build/bin/crash_test_execinfo manual # Manual stack trace +./.build/bin/crash_test_execinfo nullptr # Crash test +``` + +### Using in Code +```cpp +#include "tests/crash_handler.h" + +int main() { + setup_crash_handler(); // Enable crash handling + // Your code here... + return 0; +} +``` + +**For Background Agents**: Always run the `setup_stack_traces` MCP tool when setting up a new environment to ensure proper debugging capabilities are available. + +## Platform Build Information Analysis + +The FastLED project includes comprehensive tools for analyzing platform-specific build information, including preprocessor defines, compiler flags, and toolchain paths from `build_info.json` files generated during compilation. + +### Overview + +Platform build information is stored in `.build/{platform}/build_info.json` files that are automatically generated when compiling for any platform. These files contain: + +- **Platform Defines** - Preprocessor definitions (`#define` values) specific to each platform +- **Compiler Information** - Paths, flags, and types for C/C++ compilers +- **Toolchain Aliases** - Tool paths for gcc, g++, ar, objcopy, nm, etc. +- **Build Configuration** - Framework, build type, and other settings + +### Quick Start + +#### 1. Generate Build Information + +Before analyzing, ensure you have compiled the platform: + +```bash +# Compile a platform to generate build_info.json +uv run ci/ci-compile.py uno --examples Blink +uv run ci/ci-compile.py esp32dev --examples Blink +``` + +This creates `.build/{platform}/build_info.json` with all platform information. + +#### 2. Analyze Platform Defines + +**Get platform-specific preprocessor defines:** +```bash +# Command line tool +python3 ci/ci/build_info_analyzer.py --board uno --show-defines + +# Via MCP server +uv run mcp_server.py +# Use build_info_analysis tool with: board="uno", show_defines=true +``` + +**Example output for UNO:** +``` +📋 Platform Defines for UNO: + PLATFORMIO=60118 + ARDUINO_AVR_UNO + F_CPU=16000000L + ARDUINO_ARCH_AVR + ARDUINO=10808 + __AVR_ATmega328P__ +``` + +**Example output for ESP32:** +``` +📋 Platform Defines for ESP32DEV: + ESP32=ESP32 + ESP_PLATFORM + F_CPU=240000000L + ARDUINO_ARCH_ESP32 + IDF_VER="v5.3.2-174-g083aad99cf-dirty" + ARDUINO_ESP32_DEV + # ... and 23 more defines +``` + +#### 3. Compare Platforms + +**Compare defines between platforms:** +```bash +# Command line +python3 ci/ci/build_info_analyzer.py --compare uno esp32dev + +# Via MCP +# Use build_info_analysis tool with: board="uno", compare_with="esp32dev" +``` + +Shows differences and commonalities between platform defines. + +### Available Tools + +#### Command Line Tool + +**Basic Usage:** +```bash +# List available platforms +python3 ci/ci/build_info_analyzer.py --list-boards + +# Show platform defines +python3 ci/ci/build_info_analyzer.py --board uno --show-defines + +# Show compiler information +python3 ci/ci/build_info_analyzer.py --board esp32dev --show-compiler + +# Show toolchain aliases +python3 ci/ci/build_info_analyzer.py --board teensy31 --show-toolchain + +# Show everything +python3 ci/ci/build_info_analyzer.py --board digix --show-all + +# Compare platforms +python3 ci/ci/build_info_analyzer.py --compare uno esp32dev + +# JSON output for automation +python3 ci/ci/build_info_analyzer.py --board uno --show-defines --json +``` + +#### MCP Server Tool + +**For Background Agents**, use the MCP server `build_info_analysis` tool: + +```bash +# Start MCP server +uv run mcp_server.py + +# Use build_info_analysis tool with parameters: +# - board: "uno", "esp32dev", "teensy31", etc. or "list" to see available +# - show_defines: true/false (default: true) +# - show_compiler: true/false +# - show_toolchain: true/false +# - show_all: true/false +# - compare_with: "other_board_name" for comparison +# - output_json: true/false for programmatic use +``` + +### Supported Platforms + +The build info analysis works with **ANY platform** that generates a `build_info.json` file: + +**Embedded Platforms:** +- ✅ **UNO (AVR)** - 8-bit microcontroller (6 defines) +- ✅ **ESP32DEV** - WiFi-enabled 32-bit platform (29 defines) +- ✅ **ESP32S3, ESP32C3, ESP32C6** - All ESP32 variants +- ✅ **TEENSY31, TEENSYLC** - ARM Cortex-M platforms +- ✅ **DIGIX, BLUEPILL** - ARM Cortex-M3 platforms +- ✅ **STM32, NRF52** - Various ARM platforms +- ✅ **RPIPICO, RPIPICO2** - Raspberry Pi Pico platforms +- ✅ **ATTINY85, ATTINY1616** - Small AVR microcontrollers + +### Use Cases + +#### For Code Development + +**Understanding Platform Differences:** +```bash +# See what defines are available for conditional compilation +python3 ci/ci/build_info_analyzer.py --board esp32dev --show-defines + +# Compare two platforms to understand differences +python3 ci/ci/build_info_analyzer.py --compare uno esp32dev +``` + +**Compiler and Toolchain Information:** +```bash +# Get compiler paths and flags for debugging builds +python3 ci/ci/build_info_analyzer.py --board teensy31 --show-compiler + +# Get toolchain paths for symbol analysis +python3 ci/ci/build_info_analyzer.py --board digix --show-toolchain +``` + +#### For Automation + +**JSON output for scripts:** +```bash +# Get defines as JSON for processing +python3 ci/ci/build_info_analyzer.py --board uno --show-defines --json + +# Get all build info as JSON +python3 ci/ci/build_info_analyzer.py --board esp32dev --show-all --json +``` + +### Integration with Other Tools + +Build info analysis integrates with other FastLED tools: + +1. **Symbol Analysis** - Uses build_info.json to find toolchain paths +2. **Compilation** - Generated automatically during example compilation +3. **Testing** - Provides platform context for test results + +### Troubleshooting + +**Common Issues:** + +1. **"No boards with build_info.json found"** + - **Solution:** Compile a platform first: `uv run ci/ci-compile.py {board} --examples Blink` + +2. **"Board key not found in build_info.json"** + - **Solution:** Check available boards: `python3 ci/ci/build_info_analyzer.py --list-boards` + +3. **"Build info not found for platform"** + - **Solution:** Ensure the platform compiled successfully and check `.build/{board}/build_info.json` exists + +### Best Practices + +1. **Always compile first** before analyzing build information +2. **Use comparison feature** to understand platform differences +3. **Check defines** when adding platform-specific code +4. **Use JSON output** for automated processing and CI/CD +5. **Combine with symbol analysis** for complete platform understanding + +**For Background Agents:** Use the MCP server `build_info_analysis` tool for consistent access to platform build information and proper error handling. + +## Symbol Analysis for Binary Optimization + +The FastLED project includes comprehensive symbol analysis tools to identify optimization opportunities and understand binary size allocation across all supported platforms. + +### Overview + +Symbol analysis examines compiled ELF files to: +- **Identify large symbols** that may be optimization targets +- **Understand memory allocation** across different code sections +- **Find unused features** that can be eliminated to reduce binary size +- **Compare symbol sizes** between different builds or platforms +- **Provide optimization recommendations** based on actual usage patterns + +### Supported Platforms + +The symbol analysis tools work with **ANY platform** that generates a `build_info.json` file, including: + +**Embedded Platforms:** +- ✅ **UNO (AVR)** - Small 8-bit microcontroller (typically ~3-4KB symbols) +- ✅ **ESP32DEV (Xtensa)** - WiFi-enabled 32-bit platform (typically ~200-300KB symbols) +- ✅ **ESP32S3, ESP32C3, ESP32C6, etc.** - All ESP32 variants supported + +**ARM Platforms:** +- ✅ **TEENSY31 (ARM Cortex-M4)** - High-performance 32-bit (typically ~10-15KB symbols) +- ✅ **TEENSYLC (ARM Cortex-M0+)** - Low-power ARM platform (typically ~8-10KB symbols) +- ✅ **DIGIX (ARM Cortex-M3)** - Arduino Due compatible (typically ~15-20KB symbols) +- ✅ **STM32 (ARM Cortex-M3)** - STMicroelectronics platform (typically ~12-18KB symbols) + +**And many more!** Any platform with toolchain support and `build_info.json` generation. + +### Quick Start + +#### 1. Prerequisites + +Before running symbol analysis, ensure you have compiled the platform: + +```bash +# Compile platform first (required step) +uv run ci/ci-compile.py uno --examples Blink +uv run ci/ci-compile.py esp32dev --examples Blink +uv run ci/ci-compile.py teensy31 --examples Blink +``` + +This generates the required `.build/{platform}/build_info.json` file and ELF binary. + +#### 2. Run Symbol Analysis + +**Analyze specific platform:** +```bash +uv run ci/ci/symbol_analysis.py --board uno +uv run ci/ci/symbol_analysis.py --board esp32dev +uv run ci/ci/symbol_analysis.py --board teensy31 +``` + +**Analyze all available platforms at once:** +```bash +uv run ci/demo_symbol_analysis.py +``` + +**Using MCP Server (Recommended for Background Agents):** +```bash +# Use MCP server tools +uv run mcp_server.py +# Then use symbol_analysis tool with board: "uno" or "auto" +# Or use symbol_analysis tool with run_all_platforms: true +``` + +### Analysis Output + +Symbol analysis provides detailed reports including: + +**Summary Information:** +- **Total symbols count** and **total size** +- **Symbol type breakdown** (text, data, bss, etc.) +- **Platform-specific details** (toolchain, ELF file location) + +**Largest Symbols List:** +- **Top symbols by size** for optimization targeting +- **Demangled C++ names** for easy identification +- **Size in bytes** and **percentage of total** + +**Optimization Recommendations:** +- **Feature analysis** - unused features that can be disabled +- **Size impact estimates** - potential savings from removing features +- **Platform-specific suggestions** based on symbol patterns + +### Example Analysis Results + +**UNO Platform (Small embedded):** +``` +================================================================================ +UNO SYMBOL ANALYSIS REPORT +================================================================================ + +SUMMARY: + Total symbols: 51 + Total symbol size: 3767 bytes (3.7 KB) + +LARGEST SYMBOLS (sorted by size): + 1. 1204 bytes - ClocklessController<...>::showPixels(...) + 2. 572 bytes - CFastLED::show(unsigned char) + 3. 460 bytes - main + 4. 204 bytes - CPixelLEDController<...>::show(...) +``` + +**ESP32 Platform (Feature-rich):** +``` +================================================================================ +ESP32DEV SYMBOL ANALYSIS REPORT +================================================================================ + +SUMMARY: + Total symbols: 2503 + Total symbol size: 237092 bytes (231.5 KB) + +LARGEST SYMBOLS (sorted by size): + 1. 12009 bytes - _vfprintf_r + 2. 11813 bytes - _svfprintf_r + 3. 8010 bytes - _vfiprintf_r + 4. 4192 bytes - port_IntStack +``` + +### Advanced Features + +#### JSON Output +Save detailed analysis results for programmatic processing: +```bash +uv run symbol_analysis.py --board esp32dev --output-json +# Results saved to: .build/esp32dev_symbol_analysis.json +``` + +#### Batch Analysis +Analyze multiple platforms in sequence: +```bash +for board in uno esp32dev teensy31; do + uv run symbol_analysis.py --board $board +done +``` + +#### Integration with Build Systems +The symbol analysis can be integrated into automated build processes: +```python +# In your Python build script +import subprocess +result = subprocess.run(['uv', 'run', 'symbol_analysis.py', '--board', 'uno'], + capture_output=True, text=True) +``` + +### MCP Server Tools + +**For Background Agents**, use the MCP server tools for symbol analysis: + +1. **Generic Symbol Analysis** (`symbol_analysis` tool): + - Works with **any platform** (UNO, ESP32, Teensy, STM32, etc.) + - Auto-detects available platforms from `.build/` directory + - Can analyze single platform or all platforms simultaneously + - Provides comprehensive usage instructions + +2. **ESP32-Specific Analysis** (`esp32_symbol_analysis` tool): + - **ESP32 platforms only** with FastLED-focused filtering + - Includes feature analysis and optimization recommendations + - FastLED-specific symbol identification and grouping + +**Usage via MCP:** +```bash +# Start MCP server +uv run mcp_server.py + +# Use symbol_analysis tool with parameters: +# - board: "uno", "esp32dev", or "auto" +# - run_all_platforms: true/false +# - output_json: true/false +``` + +### Troubleshooting + +**Common Issues:** + +1. **"build_info.json not found"** + - **Solution:** Compile the platform first: `uv run ci/ci-compile.py {board} --examples Blink` + +2. **"ELF file not found"** + - **Solution:** Ensure compilation completed successfully and check `.build/{board}/` directory + +3. **"Tool not found"** (nm, c++filt, etc.) + - **Solution:** The platform toolchain isn't installed or configured properly + - **Check:** Verify PlatformIO platform installation: `uv run pio platform list` + +4. **"No symbols found"** + - **Solution:** The ELF file may be stripped or compilation failed + - **Check:** Verify ELF file exists and has debug symbols + +**Debug Mode:** +```bash +# Run with verbose Python output for debugging +uv run python -v ci/ci/symbol_analysis.py --board uno +``` + +### Best Practices + +1. **Always compile first** before running symbol analysis +2. **Use consistent examples** (like Blink) for size comparisons +3. **Run analysis on clean builds** to avoid cached/incremental build artifacts +4. **Compare results across platforms** to understand feature scaling +5. **Focus on the largest symbols first** for maximum optimization impact +6. **Use JSON output for automated processing** and trend analysis + +**For Background Agents:** Always use the MCP server `symbol_analysis` tool for consistent results and proper error handling. diff --git a/.pio/libdeps/esp01_1m/FastLED/README.md b/.pio/libdeps/esp01_1m/FastLED/README.md new file mode 100644 index 0000000..5b005f1 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/README.md @@ -0,0 +1,510 @@ +# FastLED - The Universal LED Library + +**Transform any microcontroller into an LED powerhouse.** + +Drive **30,000+ LEDs** on high-end devices • **Sub-$1 compatibility** on tiny chips • **Background rendering** for responsive apps • **Nearly every LED chipset supported** • [**#2 most popular Arduino library**](https://docs.arduino.cc/libraries/) + +[![Arduino's 2nd Most Popular Library](https://www.ardu-badge.com/badge/FastLED.svg)](https://www.ardu-badge.com/FastLED) [![Build Status](https://github.com/FastLED/FastLED/workflows/build/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build.yml) [![Unit Tests](https://github.com/FastLED/FastLED/actions/workflows/build_unit_test.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_unit_test.yml) [![Documentation](https://img.shields.io/badge/Docs-Doxygen-blue.svg)](http://fastled.io/docs) [![Community](https://img.shields.io/badge/reddit-/r/FastLED-orange.svg?logo=reddit)](https://www.reddit.com/r/FastLED/) + + +## ⚡ Get Blinking in 30 Seconds + +```cpp +#include +#define NUM_LEDS 60 +CRGB leds[NUM_LEDS]; + +void setup() { + FastLED.addLeds(leds, NUM_LEDS); +} + +void loop() { + leds[0] = CRGB::Red; FastLED.show(); delay(500); + leds[0] = CRGB::Blue; FastLED.show(); delay(500); +} +``` + +**✅ Works on Arduino, ESP32, Teensy, Raspberry Pi, and 50+ other platforms** + +## 🚀 Why FastLED? + +| **Massive Scale** | **Tiny Footprint** | **Background Rendering** | **Universal** | +|-------------------|---------------------|--------------------------|---------------| +| Drive 30,000 LEDs on Teensy 4.1 | Runs on $0.50 ATtiny chips | ESP32/Teensy render while you code | Works on 50+ platforms | +| 50 parallel strips on Teensy | <2KB on Arduino Uno | Never miss user input | Nearly every LED chipset | + +**🎯 Performance**: Zero-cost global brightness • High-performance 8-bit math, memory efficient on platforms that need it. +**🔧 Developer Experience**: Quick platform switching • Extensive examples • Active community support + +## Table of Contents + +- [🆕 Latest Feature](#-latest-feature) +- [⭐ Community Growth](#-community-growth) +- [🆕 Latest Features](#-latest-features) +- [🌍 Platform Support](#-platform-support) +- [📦 Installation](#-installation) +- [📚 Documentation & Support](#-documentation--support) +- [🎮 Advanced Features](#-advanced-features) +- [🤝 Contributing](#-contributing) + +📊 Detailed Build Status + +### Arduino Family +**Core Boards:** [![uno](https://github.com/FastLED/FastLED/actions/workflows/build_uno.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_uno.yml) [![nano_every](https://github.com/FastLED/FastLED/actions/workflows/build_nano_every.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_nano_every.yml) [![uno_r4_wifi](https://github.com/FastLED/FastLED/actions/workflows/build_uno_r4_wifif.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_uno_r4_wifif.yml) [![yun](https://github.com/FastLED/FastLED/actions/workflows/build_yun.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_yun.yml) + +**ARM Boards:** [![due](https://github.com/FastLED/FastLED/actions/workflows/build_due.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_due.yml) [![digix](https://github.com/FastLED/FastLED/actions/workflows/build_digix.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_digix.yml) [![Arduino Giga-R1](https://github.com/FastLED/FastLED/actions/workflows/build_giga_r1.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_giga_r1.yml)* + +**ATtiny Series:** [![attiny85](https://github.com/FastLED/FastLED/actions/workflows/build_attiny85.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_attiny85.yml) [![attiny88](https://github.com/FastLED/FastLED/actions/workflows/build_attiny88.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_attiny88.yml) [![attiny1604](https://github.com/FastLED/FastLED/actions/workflows/build_attiny1604.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_attiny1604.yml) [![attiny1616](https://github.com/FastLED/FastLED/actions/workflows/build_attiny1616.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_attiny1616.yml) [![attiny4313](https://github.com/FastLED/FastLED/actions/workflows/build_attiny4313.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_attiny4313.yml)** + +*Notes: * Giga-R1 support added in 3.9.14 • ** ATtiny4313 has limited memory (WS2812 Blink + APA102 examples only) + +### Teensy Series +**Standard Models:** [![teensy30](https://github.com/FastLED/FastLED/actions/workflows/build_teensy30.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_teensy30.yml) [![teensy31](https://github.com/FastLED/FastLED/actions/workflows/build_teensy31.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_teensy31.yml) [![teensyLC](https://github.com/FastLED/FastLED/actions/workflows/build_teensyLC.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_teensyLC.yml) [![teensy40](https://github.com/FastLED/FastLED/actions/workflows/build_teensy40.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_teensy40.yml) [![teensy41](https://github.com/FastLED/FastLED/actions/workflows/build_teensy41.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_teensy41.yml) + +**Special Features:** [![teensy_octoWS2811](https://github.com/FastLED/FastLED/actions/workflows/build_teensy_octo.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_teensy_octo.yml) [![teensy41 ObjectFLED](https://github.com/FastLED/FastLED/actions/workflows/build_teensy41_ofled.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_teensy41_ofled.yml) + +### NRF52 (Nordic) +[![nrf52840_sense](https://github.com/FastLED/FastLED/actions/workflows/build_adafruit_feather_nrf52840_sense.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_adafruit_feather_nrf52840_sense.yml) [![nordicnrf52_dk](https://github.com/FastLED/FastLED/actions/workflows/build_nrf52840_dk.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_nrf52840_dk.yml) [![adafruit_xiaoblesense](https://github.com/FastLED/FastLED/actions/workflows/build_adafruit_xiaoblesense.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_adafruit_xiaoblesense.yml) [![nrf52_xiaoblesense](https://github.com/FastLED/FastLED/actions/workflows/build_nrf52_xiaoblesense.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_nrf52_xiaoblesense.yml) + +*Note: NRF52 XiaoBLE board has mbed engine but doesn't compile against Arduino.h for unknown reasons. + +### Apollo3 (Ambiq) +[![apollo3_red](https://github.com/FastLED/FastLED/actions/workflows/build_apollo3_red.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_apollo3_red.yml) [![apollo3_thing_explorable](https://github.com/FastLED/FastLED/actions/workflows/build_apollo3_thing_explorable.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_apollo3_thing_explorable.yml) + +*Beta support added in 3.10.2 + +### STM32 (STMicroelectronics) +[![Bluepill (STM32F103C8)](https://github.com/FastLED/FastLED/actions/workflows/build_bluepill.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_bluepill.yml) [![Blackpill (STM32F411CE)](https://github.com/FastLED/FastLED/actions/workflows/build_blackpill_stm32f4.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_blackpill_stm32f4.yml) [![Maple Mini (STM32F103CB)](https://github.com/FastLED/FastLED/actions/workflows/build_maple_map.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_maple_map.yml) [![stm103tb](https://github.com/FastLED/FastLED/actions/workflows/build_stm103tb.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_stm103tb.yml) + +*Note: STM103TB has limited PlatformIO support + +### Silicon Labs (SiLabs) +[![ThingPlusMatter_mgm240s](https://github.com/FastLED/FastLED/actions/workflows/build_mgm240s_thingplusmatter.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_mgm240s_thingplusmatter.yml) + +*MGM240 (EFR32MG24) support for Arduino Nano Matter and SparkFun Thing Plus Matter boards + +### Raspberry Pi Pico +[![rp2040](https://github.com/FastLED/FastLED/actions/workflows/build_rp2040.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_rp2040.yml) [![rp2350](https://github.com/FastLED/FastLED/actions/workflows/build_rp2350.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_rp2350.yml) [![rp2350B SparkfunXRP](https://github.com/FastLED/FastLED/actions/workflows/build_rp2350B.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_rp2350B.yml) + +### ESP32 (Espressif) +**ESP8266:** [![esp32-8266](https://github.com/FastLED/FastLED/actions/workflows/build_esp8622.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_esp8622.yml) + +**ESP32 Classic:** [![esp32dev](https://github.com/FastLED/FastLED/actions/workflows/build_esp32dev.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_esp32dev.yml) [![esp32wroom](https://github.com/FastLED/FastLED/actions/workflows/build_esp32wroom.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_esp32wroom.yml) + +**ESP32 S-Series:** [![esp32s2](https://github.com/FastLED/FastLED/actions/workflows/build_esp32s2.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_esp32s2.yml) [![esp32s3](https://github.com/FastLED/FastLED/actions/workflows/build_esp32s3.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_esp32s3.yml) + +**ESP32 C-Series:** [![esp32c2](https://github.com/FastLED/FastLED/actions/workflows/build_esp32c2.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_esp32c2.yml)* [![esp32c3](https://github.com/FastLED/FastLED/actions/workflows/build_esp32c3.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_esp32c3.yml) [![esp32c5](https://github.com/FastLED/FastLED/actions/workflows/build_esp32c5.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_esp32c5.yml)[![esp32c6](https://github.com/FastLED/FastLED/actions/workflows/build_esp32c6.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_esp32c6.yml) + +**ESP32 Advanced:** [![esp32h2](https://github.com/FastLED/FastLED/actions/workflows/build_esp32h2.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_esp32h2.yml) [![esp32p4](https://github.com/FastLED/FastLED/actions/workflows/build_esp32p4.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_esp32p4.yml) + +**Special Features:** [![esp32_i2s_ws2812](https://github.com/FastLED/FastLED/actions/workflows/build_esp32_i2s_ws2812.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_esp32_i2s_ws2812.yml) [![esp32 extra libs](https://github.com/FastLED/FastLED/actions/workflows/build_esp_extra_libs.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_esp_extra_libs.yml) [![esp32dev_namespace](https://github.com/FastLED/FastLED/actions/workflows/build_esp32dev_namespace.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_esp32dev_namespace.yml) + +**QEMU Tests:** [![ESP32-DEV QEMU Test](https://github.com/FastLED/FastLED/actions/workflows/qemu_esp32dev_test.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/qemu_esp32dev_test.yml) [![ESP32-C3 QEMU Test](https://github.com/FastLED/FastLED/actions/workflows/qemu_esp32c3_test.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/qemu_esp32c3_test.yml) [![ESP32-S3 QEMU Test](https://github.com/FastLED/FastLED/actions/workflows/qemu_esp32s3_test.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/qemu_esp32s3_test.yml) + +**Legacy:** [![esp32dev-idf3.3-lts](https://github.com/FastLED/FastLED/actions/workflows/build_esp32dev_idf3.3.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_esp32dev_idf3.3.yml) + +*Notes: * ESP32-C2 support added in 3.9.10 • [Espressif compatibility evaluation](https://github.com/espressif/arduino-esp32/blob/gh-pages/LIBRARIES_TEST.md) + +### Specialty Platforms +**x86:** [![linux_native](https://github.com/FastLED/FastLED/actions/workflows/build_linux.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_linux.yml) + +**WebAssembly:** [![wasm](https://github.com/FastLED/FastLED/actions/workflows/build_wasm.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_wasm.yml) [![wasm_compile_test](https://github.com/FastLED/FastLED/actions/workflows/build_wasm_compilers.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_wasm_compilers.yml) + +### Library Size Validation +**Core Platforms:** [![attiny85_binary_size](https://github.com/FastLED/FastLED/actions/workflows/check_attiny85.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/check_attiny85.yml) [![uno_binary_size](https://github.com/FastLED/FastLED/actions/workflows/check_uno_size.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/check_uno_size.yml) [![esp32dev_binary_size](https://github.com/FastLED/FastLED/actions/workflows/check_esp32_size.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/check_esp32_size.yml) + +**Teensy Platforms:** [![check_teensylc_size](https://github.com/FastLED/FastLED/actions/workflows/check_teensylc_size.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/check_teensylc_size.yml) [![check_teensy30_size](https://github.com/FastLED/FastLED/actions/workflows/check_teensy30_size.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/check_teensy30_size.yml) [![check_teensy31_size](https://github.com/FastLED/FastLED/actions/workflows/check_teensy31_size.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/check_teensy31_size.yml) [![teensy41_binary_size](https://github.com/FastLED/FastLED/actions/workflows/check_teensy41_size.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/check_teensy41_size.yml) + + +## ⭐ Community Growth + + + + + + Star History Chart + + + +## 🆕 Latest Features + +## **FastLED 3.10.2: Corkscrew Mapping** + +See [examples/FestivalStick/FestivalStick.ino](examples/FestivalStick/FestivalStick.ino) + +https://github.com/user-attachments/assets/19af4b54-c189-482b-b13b-2d7f73efa4e0 + +### **FastLED 3.10.0: Animartrix Out of Beta** +Advanced animation framework for complex LED visualizations and effects. + +[![FastLED Animartrix Demo](https://fastled.github.io/assets/fastled_3_10_animartrix.jpg)](https://fastled.github.io/assets/fastled_3_10_animartrix.mp4) + +### **FastLED 3.9.16: WaveFx / Multi Layer Compositing** +Multi-layer compositing & time-based animation control for tech-artists. + + +https://github.com/user-attachments/assets/ff8e0432-3e0d-47cc-a444-82ce27f562af + +| **3.9.13** | **3.9.10** | **3.9.8** | **3.9.2** | +|------------|------------|-----------|-----------| +| [**HD107 Turbo**](#new-in-3913-hd107-turbo-40mhz-led-support)
40MHz LED support | [**ESP32 SPI**](#new-in-3910-super-stable-ws2812-spi-driver-for-esp32)
Super stable WS2812 driver | [**Massive Teensy**](#new-in-398---massive-teensy-41--40-ws2812-led-output)
50 parallel pins on 4.1 | [**WS2812 Overclock**](#new-in-392---overclocking-of-ws2812)
Up to 70% speed boost | + +| **3.7.7** | **More Features** | +|-----------|-------------------| +| [**RGBW Support**](#new-in-377---rgbw-led-strip-support)
White channel LED strips | [📋 Full Changelog](https://github.com/FastLED/FastLED/releases)
[📺 Demo Videos](https://zackees.github.io/fastled-wasm/) | + +[**📺 Live Demos**](https://zackees.github.io/fastled-wasm/) • [**📋 Full Changelog**](https://github.com/FastLED/FastLED/releases) + +
+📖 Detailed Feature Information (Click to expand) + +## New in 3.10.2: Corkscrew Mapping + +See [examples/FestivalStick/FestivalStick.ino](examples/FestivalStick/FestivalStick.ino) + +https://github.com/user-attachments/assets/19af4b54-c189-482b-b13b-2d7f73efa4e0 + +## New in 3.10.0: Animartrix out of beta + +[![FastLED 3.10 Animartrix](https://fastled.github.io/assets/fastled_3_10_animartrix.jpg)](https://fastled.github.io/assets/fastled_3_10_animartrix.mp4) + + +## New in 3.9.16: WaveFx / Multi Layer Compositing / Time-based animation control + +Video: + + + +https://github.com/user-attachments/assets/ff8e0432-3e0d-47cc-a444-82ce27f562af + + + +#### Major release for tech-artists! + +Lots of improvements in this release, read the full [change list here](https://github.com/FastLED/FastLED/releases/tag/3.9.16) + +#### Links + + * This demo -> [FxWave2d](https://github.com/FastLED/FastLED/blob/master/examples/FxWave2d/FxWave2d.ino) + * [Wave Simulation Library](https://github.com/FastLED/FastLED/blob/master/src/fl/wave_simulation.h) + * [FireCylinder](https://github.com/FastLED/FastLED/blob/master/examples/FireCylinder/FireCylinder.ino) + * Wraps around so that (0,y) ~= (width-1,y) + * [TimeAlpha](https://github.com/FastLED/FastLED/blob/master/src/fl/time_alpha.h) + * Precision control of animations with time-based alpha transition. + + + +## New in 3.9.13: HD107 "Turbo" 40Mhz LED Support + +![image](https://github.com/user-attachments/assets/9684ab7d-2eaa-40df-a00d-0dff18098917) + +## New in 3.9.12: WS2816 "HD" LED support + +![image](https://github.com/user-attachments/assets/258ec44c-af82-44b7-ad7b-fac08daa9bcb) + +## New in 3.9.10: Super Stable WS2812 SPI driver for ESP32 + +![image (2)](https://github.com/user-attachments/assets/b3c5801c-66df-40af-a6b8-bbd1520fbb36) + +## New in 3.9.9: 16-way Yves I2S parallel driver for the ESP32-S3 + +![perpetualmaniac_an_led_display_in_a_room_lots_of_refaction_of_t_eb7c170a-7b2c-404a-b114-d33794b4954b](https://github.com/user-attachments/assets/982571fc-9b8d-4e58-93be-5bed76a0c53d) + +*Note some users find that newer versions of the ESP32 Arduino core (3.10) don't work very well, but older versions do, see [issue 1903](https://github.com/FastLED/FastLED/issues/1903) + +## New in 3.9.8 - Massive Teensy 4.1 & 4.0 WS2812 LED output + + * *Teensy 4.1: 50 parallel pins* + * *Teensy 4.0: 42 parallel pins* + +![New Project](https://github.com/user-attachments/assets/79dc2801-5161-4d5a-90a2-0126403e215f) + + + + +## New in 3.9.2 - Overclocking of WS2812 +![image](https://github.com/user-attachments/assets/be98fbe6-0ec7-492d-8ed1-b7eb6c627e86) +Update: max overclock has been reported at +70%: https://www.reddit.com/r/FastLED/comments/1gkcb6m/fastled_FASTLED_OVERCLOCK_17/ + +### New in 3.7.7 - RGBW LED Strip Support + +![image (1)](https://github.com/user-attachments/assets/d4892626-3dc6-4d6d-a740-49ddad495fa5) + +
+ +## 🌍 Platform Support + +### Platform Categories +| **Arduino Family** | **ESP32 Series** | **Teensy** | **ARM** | **Specialty** | +|--------------------|------------------|------------|---------|---------------| +| Uno, Nano, Mega
Due, Giga R1, R4 | ESP32, S2, S3, C3
C6, H2, P4 | 3.0, 3.1, 4.0, 4.1
LC + OctoWS2811 | STM32, NRF52
Apollo3, Silicon Labs | Raspberry Pi
WASM, x86 | + +**FastLED supports 50+ platforms!** From sub-$1 ATtiny chips to high-end Teensy 4.1 with 50 parallel outputs. + +## 📦 Installation + +### Quick Install Options + +| **Arduino IDE** | **PlatformIO** | **Package Managers** | +|-----------------|----------------|----------------------| +| Library Manager → Search "FastLED" → Install | `lib_deps = fastled/FastLED` | `pio pkg install --library "fastled/FastLED"` | +| Or install [latest release .zip](https://github.com/FastLED/FastLED/releases/latest/) | Add to `platformio.ini` | Command line installation | + +### Template Projects + +- **🎯 [Arduino + PlatformIO Starter](https://github.com/FastLED/PlatformIO-Starter)** - Best of both worlds, works with both IDEs +- **🚀 [FastLED Examples](examples)** - 100+ ready-to-run demos +- **🌐 [Web Compiler](https://zackees.github.io/fastled-wasm/)** - Test in your browser + +
+Arduino IDE Setup Instructions (Click to expand) + +After installing the Arduino IDE, add FastLED through the Library Manager: + +![Arduino IDE Library Manager](https://github.com/user-attachments/assets/b1c02cf9-aba6-4f80-851e-78df914e2501) + +![FastLED Library Search](https://github.com/user-attachments/assets/508eb700-7dd4-4901-a901-68c56cc4d0e1) + +
+ + +## 📚 Documentation & Support + +| **📖 Documentation** | **💬 Community** | **🐛 Issues** | **📺 Examples** | +|---------------------|------------------|---------------|-----------------| +| [API Reference](http://fastled.io/docs) | [Reddit r/FastLED](https://www.reddit.com/r/FastLED/) | [GitHub Issues](http://fastled.io/issues) | [Live Demos](https://zackees.github.io/fastled-wasm/) | +| [Doxygen Docs](https://fastled.io/docs/files.html) | 1000s of users & solutions | Bug reports & feature requests | [GitHub Examples](examples) | + +**Need Help?** Visit [r/FastLED](https://reddit.com/r/FastLED) - thousands of knowledgeable users and extensive solution history! + +## 🎮 Advanced Features + +### Performance Leaders: Parallel Output Records + +| **Platform** | **Max Parallel Outputs** | **Performance Notes** | +|--------------|---------------------------|----------------------| +| **Teensy 4.1** | 50 parallel strips | Current record holder - [Example](examples/TeensyMassiveParallel/TeensyMassiveParallel.ino) | +| **Teensy 4.0** | 42 parallel strips | High-performance ARM Cortex-M7 | +| **ESP32DEV** | 24 via I2S + 8 via RMT | [I2S Example](examples/EspI2SDemo/EspI2SDemo.ino) | +| **ESP32-S3** | 16 via I2S + 4 via RMT | [S3 Example](examples/Esp32S3I2SDemo/Esp32S3I2SDemo.ino) | + +*Note: Some ESP32 Arduino core versions (3.10+) have compatibility issues. Older versions work better - see [issue #1903](https://github.com/FastLED/FastLED/issues/1903)* + +### Exotic Setups (120+ Outputs!) +**Custom shift register boards** can achieve extreme parallel output: +- **ESP32DEV**: [120-output virtual driver](https://github.com/hpwit/I2SClocklessVirtualLedDriver) +- **ESP32-S3**: [120-output S3 driver](https://github.com/hpwit/I2SClockLessLedVirtualDriveresp32s3) + +### Parallel WS2812 Drivers + +FastLED supports several drivers for parallel WS2812 output. + +#### Teensy + +The following drivers are available for Teensy boards: + +##### WS2812Serial driver + +The `WS2812Serial` driver leverages serial ports for LED data transmission on Teensy boards. + +###### Usage +To use this driver, you must define `USE_WS2812SERIAL` before including the FastLED header. + +```cpp +#define USE_WS2812SERIAL +#include +``` + +Then, use `WS2812SERIAL` as the chipset type in your `addLeds` call. The data pin is not used for this driver. + +```cpp +FastLED.addLeds(leds, NUM_LEDS); +``` + +###### Supported Pins & Serial Ports + +| Port | Teensy LC | Teensy 3.2 | Teensy 3.5 | Teensy 3.6 | Teensy 4.0 | Teensy 4.1 | +| :------ | :---------: | :--------: | :--------: | :--------: | :--------: | :--------: | +| Serial1 | 1, 4, 5, 24 | 1, 5 | 1, 5, 26 | 1, 5, 26 | 1 | 1, 53 | +| Serial2 | | 10, 31 | 10 | 10 | 8 | 8 | +| Serial3 | | 8 | 8 | 8 | 14 | 14 | +| Serial4 | | | 32 | 32 | 17 | 17 | +| Serial5 | | | 33 | 33 | 20, 39 | 20, 47 | +| Serial6 | | | 48 | | 24 | 24 | +| Serial7 | | | | | 29 | 29 | +| Serial8 | | | | | | 35 | + +##### ObjectFLED Driver + +The `ObjectFLED` driver is an advanced parallel output driver specifically optimized for Teensy 4.0 and 4.1 boards when using WS2812 LEDs. It is designed to provide high-performance, multi-pin output. + +By default, FastLED automatically uses the `ObjectFLED` driver for WS2812 LEDs on Teensy 4.0/4.1 boards. + +###### Disabling ObjectFLED (Reverting to Legacy Driver) +If you encounter compatibility issues or wish to use the standard clockless driver instead of `ObjectFLED`, you can disable it by defining `FASTLED_NOT_USES_OBJECTFLED` before including the FastLED header: + +```cpp +#define FASTLED_NOT_USES_OBJECTFLED +#include +``` + +###### Re-enabling ObjectFLED (Explicitly) +While `ObjectFLED` is the default for Teensy 4.0/4.1, you can explicitly enable it (though not strictly necessary) using: + +```cpp +#define FASTLED_USES_OBJECTFLED +#include +``` + +#### ESP32 + +The following drivers are available for ESP32 boards: + +##### ESP32-S3 I2S Driver + +The `ESP32-S3 I2S` driver leverages the I2S peripheral for high-performance parallel WS2812 output on ESP32-S3 boards. This driver is a dedicated clockless implementation. + +###### Usage +To use this driver, you must define `FASTLED_USES_ESP32S3_I2S` before including the FastLED header. + +```cpp +#define FASTLED_USES_ESP32S3_I2S +#include +``` + +Then, use `WS2812` as the chipset type in your `addLeds` call. The data pin will be configured by the I2S driver. + +```cpp +FastLED.addLeds(leds, NUM_LEDS); +``` + +**Note:** This driver requires a compatible Arduino-ESP32 core/IDF. + +##### Generic ESP32 I2S Driver + +The generic `ESP32 I2S` driver provides parallel WS2812 output for various ESP32 boards (e.g., ESP32-DevKitC). It uses the I2S peripheral for efficient data transmission. + +###### Usage +To use this driver, you must define `FASTLED_ESP32_I2S` before including the FastLED header. + +```cpp +#define FASTLED_ESP32_I2S +#include +``` + +Then, use `WS2812` as the chipset type in your `addLeds` call. The data pin will be configured by the I2S driver. + +```cpp +FastLED.addLeds(leds, NUM_LEDS); +``` + +###### DMA Buffer Configuration +For improved resilience under interrupt load (e.g., Wi-Fi activity), you can increase the number of I2S DMA buffers by defining `FASTLED_ESP32_I2S_NUM_DMA_BUFFERS`. A value of `4` is often recommended. + +```cpp +#define FASTLED_ESP32_I2S_NUM_DMA_BUFFERS 4 +``` + +**Note:** All I2S lanes must share the same chipset/timings. If per-lane timing differs, consider using the RMT driver instead. + +### Supported LED Chipsets + +FastLED supports virtually every LED chipset available: + +| **Clockless (3-wire)** | **SPI-based (4-wire)** | **Specialty** | +|------------------------|------------------------|---------------| +| **WS281x Family**: WS2811, WS2812 (NeoPixel), WS2812-V5B, WS2815 | **APA102 / DotStars**: Including HD107s (40MHz turbo) | **SmartMatrix Panels** | +| **TM180x Series**: TM1809/4, TM1803 | **High-Speed SPI**: LPD8806, WS2801, SM16716 | **DMX Output** | +| **Other 3-wire**: UCS1903, GW6205, SM16824E | **APA102HD**: Driver-level gamma correction | **P9813 Total Control** | + +**RGBW Support**: WS2816 and other white-channel LED strips • **Overclocking**: WS2812 up to 70% speed boost + +More details: [Chipset Reference Wiki](https://github.com/FastLED/FastLED/wiki/Chipset-reference) + +### APA102 High Definition Mode +```cpp +#define LED_TYPE APA102HD // Enables hardware gamma correction +void setup() { + FastLED.addLeds(leds, NUM_LEDS); +} +``` + +![APA102HD Comparison](https://github.com/user-attachments/assets/999e68ce-454f-4f15-9590-a8d2e8d47a22) + +Read more: [APA102 HD Documentation](APA102.md) • [Rust Implementation](https://docs.rs/apa102-spi/latest/apa102_spi/) + +## 🛠️ Development & Contributing + +[![clone and compile](https://github.com/FastLED/FastLED/actions/workflows/build_clone_and_compile.yml/badge.svg)](https://github.com/FastLED/FastLED/actions/workflows/build_clone_and_compile.yml) + +**Ready to contribute?** FastLED welcomes code contributions, platform testing, documentation improvements, and community support. + +
+🔧 Development Setup & Contributing Guide (Click to expand) + +### Quick Development Setup +Zero pain setup - can be done from command line in seconds with `uv` or `python`: + +![FastLED Development Setup](https://github.com/user-attachments/assets/f409120e-be6f-4158-81b5-d4bf935833b2) + +**Steps:** +1. Fork the repository on GitHub +2. Clone your fork locally: `git clone https://github.com/yourusername/FastLED.git` +3. Test compilation: `bash compile` (select your target platform) +4. Make your changes and test +5. Push to your fork and create a pull request + +**See our detailed [Contributing Guide](CONTRIBUTING.md) for more information.** + +### Testing Other Devices +Use the `compile` script to test on 20+ platforms: +- Teensy series, ESP32 variants, Arduino family, ARM boards, and more +- Automated testing ensures compatibility across all supported platforms + +### How to Help + +| **📋 How to Help** | **🔗 Resources** | +|-------------------|------------------| +| **Code contributions**: Bug fixes, new features, optimizations | [Contributing Guide](CONTRIBUTING.md) | +| **Platform support**: Help test on new/existing platforms | [Platform Testing](compile) | +| **Documentation**: Improve examples, fix typos, add tutorials | [Documentation](http://fastled.io/docs) | +| **Community**: Answer questions on Reddit, report issues | [r/FastLED](https://reddit.com/r/FastLED) | + +**Platform Porting**: Information on porting FastLED to new platforms: [PORTING.md](PORTING.md) + +### About FastLED + +**What's in the name?** Originally "FastSPI_LED" focused on high-speed SPI, but evolved to support all LED types and became "FastLED" - everything fast, for LEDs. + +**Official Site**: [fastled.io](http://fastled.io) - documentation, issues, and news + +
+ +--- + +## Daniel Garcia, Founder of FastLED + +In Memory of Daniel Garcia +Daniel Garcia, the brilliant founder of FastLED, tragically passed away in September 2019 in the Conception dive boat fire alongside his partner, Yulia. This heartbreaking loss was felt deeply by the maker and developer community, where Daniel's contributions had left an indelible mark. + +Daniel was more than just a talented programmer; he was a passionate innovator who transformed the way creators interacted with LED technology. His work on FastLED brought high-performance LED control to countless projects, empowering developers to craft breathtaking installations. + +In his personal life, Daniel was known for his kindness and creativity. His pride in FastLED and the vibrant community it fostered was a testament to his dedication to open-source development and his commitment to helping others bring light into the world. + +While Daniel is no longer with us, his legacy continues through the FastLED library and the countless makers who use it. The community he built serves as a living tribute to his ingenuity, generosity, and the joy he found in sharing his work with the world. + +## About the Current Contributor + +Zach Vorhies, the current main contributor to FastLED, briefly worked with Dan in 2014 in San Francisco and was an avid user of the FastLED library for over 13 years. After Daniel Garcia’s untimely passing, Zach stepped up to ensure FastLED’s continued growth and development. + +Zach has this to say about FastLED: + +*"The true power of FastLED lies in its ability to transform programmers into LED artists. Free space becomes their canvas; bending light is their medium. FastLED is a collective effort by programmers who want to manifest the world that science fiction writers promised us. -- To contribute code to FastLED is to leave behind a piece of something immortal."* + + +--- + +**💫 In memory of Daniel Garcia and the vision that transforms programmers into LED artists** + +*To stay updated on the latest feature releases, please click the `Watch` button in the upper right* +"" diff --git a/.pio/libdeps/esp01_1m/FastLED/RELEASE.md b/.pio/libdeps/esp01_1m/FastLED/RELEASE.md new file mode 100644 index 0000000..a2e0ab9 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/RELEASE.md @@ -0,0 +1,39 @@ +# FastLED Release howto + +*Pushing a fastled release, the short version, last updated May 2024* + +## Example + +https://github.com/FastLED/FastLED/commit/4444758ffaf853ba4f8deb973532548c9c1ee231 + +## How to + +Edit these files to update the version number + * library.json + * library.properties + * src/FastLED.h + * docs/Doxyfile + * RELEASE.md + * This file: update instructions with the current release. + + +Edit this file with release notes and version number. + * release_notes.md + +Release notes should list highlight changes (not necessarily all minor bug fixes) and thank people for their help. + +Git commands to commit and tag release' +```bash +$ git commit -am "Rev 3.10.3" +$ git tag 3.10.3 master +$ git push +$ git push origin 3.10.3 +``` + +Then use the GitHub UI to make a new “Release”: + +https://github.com/FastLED/FastLED/releases/new + +Announce new version on subreddit, highlighting major changes and thanking people for helping. + +That’s it. diff --git a/.pio/libdeps/esp01_1m/FastLED/RMT.md b/.pio/libdeps/esp01_1m/FastLED/RMT.md new file mode 100644 index 0000000..8edf6ad --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/RMT.md @@ -0,0 +1,806 @@ +Do a deep research on fastled's RMT5 driver and the persistance of flickering. + +The RMT4 driver is MORE resistant to flickering. The RMT5 driver is pretty bad. + +Cause: WIFI takes high prioritiy interrupts and starves the the RMT driver. + +Potention solutions: + +create an interrupt than level 3, but this requires us to create a asm shim to trampoline into the c function handler and do proper stack cleanup. + +ESP32 & ESp32c3 and esp32s3 might have different cores. ones an xtensa, whats the other? + +list them. + +Another solution is to try and ping pong the rmt buffer like we do on the rmt4. However we must have better documentation +to see if this is even possible. + +Investigate the documentation and list it here on the RMT device for idf 5 and higher. + +Then do a feasability status to see if the ping pong is p0ossible. + +These are the two solutions. Both need to be investigated. But your investigation into RMT5.md + + +## Deep Research results + +FastLED RMT5 Driver Flickering Investigation +Background: FastLED’s original ESP32 driver (“RMT4”) used Espressif’s low-level RMT APIs, with one RMT memory block per channel and built‐in double-buffering for non-PSRAM chips. The newer “RMT5” driver (used on ESP32-S3, C3, etc.) wraps Espressif’s led_strip component (IDF’s higher-level RMT LED driver) +GitHub +. Under heavy Wi‑Fi load, the RMT5 approach has proven much more prone to gaps: Wi‑Fi interrupts at high priority can delay the RMT ISR, causing the RMT buffer to run dry and LEDs to flicker +esp32.com +esp-idf-lib.readthedocs.io +. (Indeed, the esp-idf led_strip documentation warns that “simultaneous use with Wi‑Fi” causes RMT bugs +esp-idf-lib.readthedocs.io +.) +ESP32 Core Architectures +The ESP32 family spans multiple architectures: classic ESP32 and ESP32-S3 use Tensilica Xtensa cores, while newer chips like ESP32-C3/C6/H2 use 32-bit RISC‑V cores +en.wikipedia.org +. For example, the ESP32-S3 is a dual-core Xtensa LX7, whereas the ESP32-C3 is a single-core RISC‑V. This matters for RMT timing (the underlying CPU instruction timing differs), but the flicker issue itself arises on any core when Wi‑Fi interrupts interfere with the RMT ISR. +RMT Peripheral (IDF v5+) Documentation +Espressif’s IDF documentation describes the RMT as a hardware peripheral that transmits sequences of “symbols” via GPIO, optionally using DMA. Because the RMT memory block is limited, long data transfers are split in a ping-pong fashion: the encoder callback can be invoked multiple times to refill the buffer as it empties +docs.espressif.com +. The docs note that these encoders run in ISR context and must be IRAM-safe (so that cache-disabled delays do not postpone interrupts) +docs.espressif.com +docs.espressif.com +. In particular, IDF has a CONFIG_RMT_ISR_IRAM_SAFE option that ensures RMT ISRs can run even when flash cache is off, to avoid unpredictable timing when using ping-pong buffering +docs.espressif.com +. The RMT API also allows setting the ISR priority explicitly: in rmt_tx_channel_config_t, the field intr_priority chooses the interrupt level (default “0” picks a medium priority 1–3) or a user-specified priority +docs.espressif.com +. This means one can elevate the RMT interrupt to a higher level (4 or 5) than Wi‑Fi (which normally runs at a high but fixed level). +Flickering Issue – Interrupt Starvation +Users consistently report that with RMT5, enabling Wi‑Fi causes periodic color glitches. Under a light web server load, one user measured ~50 µs jitter in what should be a ~35 µs ISR interval +esp32.com +, due to Wi‑Fi activity stealing CPU time. When this jitter exceeds the tolerance of the WS2812 timing, the LED strip “runs out” of data and flickers +esp32.com +. In contrast, the older RMT4 code (especially when using two memory blocks) could often absorb such delays. Espressif’s community notes that any Wi‑Fi use with the RMT LED driver can trigger glitches, and one workaround is to run the RMT tasks on the second CPU core +esp-idf-lib.readthedocs.io +. In practice, however, the flicker appears because high-priority Wi‑Fi interrupts delay the RMT driver’s buffer refill callbacks. +Potential Solutions +Increase RMT ISR Priority: Configure the RMT channel to use a higher interrupt level than Wi‑Fi. In IDF, setting intr_priority=4 or 5 in rmt_tx_channel_config_t will raise the ISR above normal Wi‑Fi interrupts +docs.espressif.com +. This requires writing the RMT encoding callback in IRAM and may require an assembly shim if using priority 5. (On Xtensa, level‑5 interrupts cannot call C routines directly, so one writes a small ASM stub that calls into a safe C function.) The FastLED RMT code would need to initialize the RMT channel with a high intr_priority and mark its handler IRAM-safe (via CONFIG_RMT_ISR_IRAM_SAFE) +docs.espressif.com +. A community example confirms that raising to level‑5 can eliminate most Wi‑Fi jitter, but notes you must modify the ISR entry (often with inline ASM) to avoid stack/ISR constraints +esp32.com +. +Ping-Pong (Double-Buffer) Mode: Use two RMT memory blocks per channel so the peripheral can alternate between them, thus buffering extra data. The IDF RMT encoder model explicitly supports ping‑pong buffering: the encoder callback is invoked each time a block fills, allowing the next symbols to be written +docs.espressif.com +. In FastLED, one enables this by allocating 2 blocks (e.g. setting mem_block_symbols to twice the usual) or enabling MEM_BLOCK_NUM=2. In practice, simply doubling the memory (using two blocks) absorbs Wi‑Fi-induced gaps: a forum user found that switching from 1 to 2 blocks removed all LED glitches by covering up ~120 µs of jitter +esp32.com +. The FastLED release notes even mention this behavior: on non-DMA chips (ESP32, C3, etc.), the RMT5 driver is configured to “double its memory” (i.e. use 2 blocks) by default, mimicking RMT4’s approach +GitHub +. Thus, ping-pong is technically supported. It requires verifying that the FastLED led_strip setup indeed uses two blocks (and if not, forcing it via FASTLED_RMT5_RECYCLE=0 or similar flags). +Feasibility and Status +Both strategies have merit. High-Priority ISR: requires low-level tweaking (setting intr_priority and possibly writing an IRAM ISR shim). This could be complex (especially on Xtensa) but would ensure timely buffer refills. Espressif docs confirm the ability to change RMT interrupt level +docs.espressif.com + and their IRAM-safe option mitigates deferred ISRs +docs.espressif.com +. However, once set, the interrupt priority can’t be changed without deleting the channel +docs.espressif.com +, so it must be done at RMT init. Ping-Pong Buffering: is simpler to implement since it leverages the existing RMT mechanism. The IDF RMT hardware natively supports multi-block transfers +docs.espressif.com +, and FastLED’s own code (via the led_strip component) already allows mem_block_symbols setting. Doubling the blocks is a one-line config change and was empirically validated by users +esp32.com +. FastLED even defaults to 2 blocks on chips without external RAM +GitHub +. In summary, raising the interrupt level could almost eliminate flicker at its source, but is invasive; enabling double-buffering is much easier and likely sufficient to cover typical Wi‑Fi spikes. Sources: Espressif’s RMT documentation (IDF v5+) and community forums provide detailed guidance on interrupt priorities, IRAM-safe handlers, and ping-pong transfers +docs.espressif.com +docs.espressif.com +docs.espressif.com +. FastLED release notes and forum tests confirm that Wi‑Fi interrupts cause RMT underruns and that using two RMT blocks removes glitches +esp32.com +esp32.com +GitHub +. Core architectures are listed for completeness +en.wikipedia.org +. +Citations +GitHub +idf5_rmt.cpp + +https://github.com/chaosgoo/mcompass/blob/d9d37398995c8e2b1806a6c90af03a1b8bc1c47e/Firmware/lib/FastLED/src/platforms/esp/32/idf5_rmt.cpp#L70-L78 +Amount of jitter on LEVEL3 interrupt? - ESP32 Forum + +https://esp32.com/viewtopic.php?t=17206 + +led_strip - RMT-based driver for WS2812B/SK6812/APA106 LED strips — esp-idf-lib 1.0 documentation + +https://esp-idf-lib.readthedocs.io/en/latest/groups/led_strip.html + +ESP32 - Wikipedia + +https://en.wikipedia.org/wiki/ESP32 + +Remote Control Transceiver (RMT) - ESP32 - — ESP-IDF Programming Guide v5.0 documentation + +https://docs.espressif.com/projects/esp-idf/en/v5.0/esp32/api-reference/peripherals/rmt.html + +Remote Control Transceiver (RMT) - ESP32 - — ESP-IDF Programming Guide v5.0 documentation + +https://docs.espressif.com/projects/esp-idf/en/v5.0/esp32/api-reference/peripherals/rmt.html + +Remote Control Transceiver (RMT) - ESP32 - — ESP-IDF Programming Guide v5.0 documentation + +https://docs.espressif.com/projects/esp-idf/en/v5.0/esp32/api-reference/peripherals/rmt.html + +Remote Control Transceiver (RMT) - ESP32 - — ESP-IDF Programming Guide v5.5.1 documentation + +https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/peripherals/rmt.html +Amount of jitter on LEVEL3 interrupt? - ESP32 Forum + +https://esp32.com/viewtopic.php?t=17206 +Amount of jitter on LEVEL3 interrupt? - ESP32 Forum + +https://esp32.com/viewtopic.php?t=17206 +GitHub +release_notes.md + +https://github.com/FastLED/FastLED/blob/0c22d156836639119fd6d0dc84d3c42f8bca7e0f/release_notes.md#L42-L47 +All Sources + +## Audit Comments and Criticisms (2025-09-16) + +### Structural Issues + +1. **Incomplete Research Questions**: The initial questions (lines 1-23) remain unanswered in parts: + - The ASM shim solution for level 5 interrupts is mentioned but lacks implementation details + - Core architectures are listed but the impact on RMT timing differences isn't fully explored + +2. **Missing Concrete Implementation Path**: While two solutions are proposed (high-priority ISR and ping-pong buffering), there's no clear recommendation on which to pursue first or implementation timeline. + +3. **Documentation Gaps**: + - No code examples showing how to implement either solution in FastLED + - Missing comparison table of RMT4 vs RMT5 architectural differences + - No benchmarks showing actual flicker frequency/severity metrics + +### Technical Concerns + +4. **Incomplete Testing Coverage**: + - No mention of testing methodology to validate fixes + - Missing list of affected board configurations (which ESP32 variants + which IDF versions) + - No quantification of "pretty bad" flickering (frequency, duration, visual impact) + +5. **Risk Assessment Missing**: + - Level 5 interrupt solution needs warning about potential system stability impacts + - No discussion of power consumption implications of either solution + - Missing compatibility matrix with other FastLED features + +### Content Issues + +6. **Redundant Citations**: Multiple duplicate citations to the same ESP32 forum thread and documentation pages (lines 103-140) + +7. **Inconsistent Formatting**: + - Mix of bullet points and paragraph styles in solutions section + - Inconsistent use of technical terms (RMT4 vs "RMT4", Wi-Fi vs WiFi) + +### Missing Critical Information + +8. **User Impact Analysis**: + - No guidance on which use cases are most affected + - Missing workaround recommendations for users experiencing issues now + - No mention of whether this affects all LED types or specific protocols + +9. **Configuration Details**: + - The ping-pong solution mentions "FASTLED_RMT5_RECYCLE=0" but doesn't explain what this does + - No clear documentation of all relevant FastLED compile-time flags + +10. **Priority and Severity**: + - No clear statement on whether this is a critical bug or edge case + - Missing timeline for fix deployment + - No mention of whether this is a regression from previous versions + +### Recommendations for Next Steps + +1. **Immediate**: Test ping-pong buffering solution as it's simpler and less risky +2. **Short-term**: Create reproducible test case with measurable flicker metrics +3. **Medium-term**: Document all FastLED RMT configuration options in one place +4. **Long-term**: Consider abstracting RMT driver to allow runtime switching between implementations + +### New Issues Identified + +- **Thread Safety**: No discussion of thread safety when RMT ISR runs at different priority levels +- **Memory Usage**: No analysis of memory impact when doubling RMT blocks +- **Backwards Compatibility**: No mention of how fixes will affect existing code using RMT5 +- **Error Handling**: No discussion of graceful degradation when solutions fail + +--- + +## QEMU TESTING FRAMEWORK (2025-09-16) + +### Overview +This section outlines comprehensive test criteria for validating RMT interrupt solutions using QEMU emulation on ESP32-S3 and ESP32-C3 platforms. QEMU provides a controlled environment to reproduce Wi-Fi interference patterns and measure interrupt latency without physical hardware variations. + +### Test Infrastructure Requirements + +#### QEMU Setup Commands +```bash +# Install QEMU for ESP32 emulation +uv run ci/install-qemu.py + +# Run QEMU tests with ESP32-S3 (Xtensa) +uv run test.py --qemu esp32s3 + +# Run QEMU tests with ESP32-C3 (RISC-V) +uv run test.py --qemu esp32c3 + +# Skip QEMU installation if already present +FASTLED_QEMU_SKIP_INSTALL=true uv run test.py --qemu esp32s3 +``` + +#### Platform Coverage Matrix + +| Platform | Architecture | RMT Version | Max Official Priority | Max Custom Priority | Test Priority | +|----------|-------------|-------------|----------------------|-------------------|---------------| +| ESP32-S3 | Xtensa LX7 | RMT5 | 3 | 5 | High | +| ESP32-C3 | RISC-V | RMT5 | 3 | 7 | High | +| ESP32-C6 | RISC-V | RMT5 | 3 | 7 | Medium | +| ESP32 | Xtensa LX6 | RMT4 | N/A | N/A | Reference | + +### Test Scenarios + +#### 1. Baseline RMT Timing Tests +**Objective**: Establish baseline RMT performance without interference + +**Test Cases**: +- **T1.1**: RMT5 default priority (level 3) LED refresh timing +- **T1.2**: Memory buffer utilization patterns (single vs double block) +- **T1.3**: WS2812B timing compliance under no-load conditions +- **T1.4**: Multiple channel simultaneous operation + +**Success Criteria**: +- WS2812B timing within ±150ns tolerance +- Zero dropped frames for 300 LED array +- Consistent ~35µs refresh intervals +- No interrupt overruns in baseline conditions + +**QEMU Implementation**: +```cpp +// Test harness in tests/qemu_rmt_baseline.cpp +void test_rmt_baseline_timing() { + // Configure RMT channel with default priority 3 + rmt_channel_config_t config = { + .gpio_num = TEST_GPIO_PIN, + .clk_div = 2, + .mem_block_num = 1, // Single block baseline + .intr_priority = 3 // Official maximum + }; + + // Measure timing consistency across 1000 refresh cycles + for (int i = 0; i < 1000; i++) { + uint64_t start = esp_timer_get_time(); + fastled_rmt_refresh_leds(test_pattern, 300); + uint64_t elapsed = esp_timer_get_time() - start; + + // Verify timing bounds + assert(elapsed >= 34500 && elapsed <= 35500); // ±500µs tolerance + } +} +``` + +#### 2. Wi-Fi Interference Simulation +**Objective**: Reproduce the Wi-Fi starvation issue that causes RMT5 flickering + +**Test Cases**: +- **T2.1**: Simulated Wi-Fi interrupt bursts at level 4 priority +- **T2.2**: Sustained Wi-Fi traffic during LED refresh cycles +- **T2.3**: Timing jitter measurement under interference +- **T2.4**: Buffer underrun detection and quantification + +**QEMU Wi-Fi Simulation**: +```cpp +// Simulate Wi-Fi interrupt load in QEMU +void simulate_wifi_interference() { + // Install level 4 interrupt to simulate Wi-Fi + esp_intr_alloc(ETS_WIFI_MAC_INTR_SOURCE, + ESP_INTR_FLAG_LEVEL4 | ESP_INTR_FLAG_IRAM, + wifi_interference_isr, NULL, &wifi_handle); + + // Generate periodic 40-50µs interrupt bursts + esp_timer_create(&wifi_timer_config, &wifi_timer); + esp_timer_start_periodic(wifi_timer, 100); // 100µs period +} + +void IRAM_ATTR wifi_interference_isr(void* arg) { + // Simulate 40µs Wi-Fi processing time + uint64_t start = esp_timer_get_time(); + while ((esp_timer_get_time() - start) < 40) { + // Busy wait to consume CPU time + __asm__ volatile ("nop"); + } +} +``` + +**Success Criteria for Problem Reproduction**: +- Measured jitter > ±10µs with Wi-Fi simulation active +- Buffer underruns detected in RMT interrupt handler +- Visual flicker correlation with Wi-Fi interrupt timing + +#### 3. High-Priority Interrupt Solution Validation +**Objective**: Test level 4/5 interrupt priority solutions + +**Test Cases**: +- **T3.1**: ESP32-S3 level 4 interrupt implementation (experimental) +- **T3.2**: ESP32-S3 level 5 interrupt with assembly shim +- **T3.3**: ESP32-C3 level 4-7 interrupt testing (RISC-V advantage) +- **T3.4**: Interrupt latency measurement and comparison + +**Implementation Reference**: `src/platforms/esp/32/interrupts/esp32_s3.hpp:149-161` + +**Test Implementation**: +```cpp +// Test level 5 interrupt solution (ESP32-S3 only) +void test_level5_interrupt_solution() { + // Use custom high-priority RMT initialization + esp_err_t err = fastled_esp32s3_rmt_init_custom( + RMT_CHANNEL_0, + TEST_GPIO_PIN, + 40000000, // 40MHz resolution + 128, // Single block + 5 // Level 5 priority - EXPERIMENTAL + ); + + assert(err == ESP_OK); + + // Activate Wi-Fi interference simulation + simulate_wifi_interference(); + + // Measure timing stability with level 5 priority + for (int i = 0; i < 1000; i++) { + uint64_t start = esp_timer_get_time(); + fastled_rmt_refresh_leds(test_pattern, 300); + uint64_t elapsed = esp_timer_get_time() - start; + + // Level 5 should maintain tight timing despite Wi-Fi + assert(elapsed >= 34800 && elapsed <= 35200); // ±200µs tolerance + } +} +``` + +#### 4. Double-Buffer Solution Validation +**Objective**: Test ping-pong buffering approaches (limited by LED strip API) + +**Test Cases**: +- **T4.1**: Memory block doubling via `mem_block_symbols` parameter +- **T4.2**: Custom low-level RMT implementation with true ping-pong +- **T4.3**: Buffer refill timing analysis +- **T4.4**: Comparison with RMT4 dual-buffer behavior + +**Critical Finding**: LED strip API limitation prevents true ping-pong (`RMT.md:254-258`) + +**Test Implementation**: +```cpp +// Test doubled memory blocks (not true ping-pong) +void test_doubled_memory_blocks() { + rmt_channel_config_t config = { + .gpio_num = TEST_GPIO_PIN, + .clk_div = 2, + .mem_block_num = 2, // Double the memory + .intr_priority = 3 + }; + + // This creates larger buffer, NOT ping-pong + // Test if larger buffer helps with Wi-Fi jitter + simulate_wifi_interference(); + + // Measure improvement (if any) + uint32_t underrun_count = 0; + for (int i = 0; i < 1000; i++) { + if (fastled_rmt_refresh_with_underrun_detection(test_pattern, 300)) { + underrun_count++; + } + } + + // Expect fewer underruns than single block, but not elimination + printf("Double block underruns: %lu (should be < single block)\n", underrun_count); +} +``` + +#### 5. Cross-Architecture Comparison Tests +**Objective**: Compare RMT behavior between Xtensa and RISC-V cores + +**Test Cases**: +- **T5.1**: Identical test patterns on ESP32-S3 (Xtensa) vs ESP32-C3 (RISC-V) +- **T5.2**: Interrupt latency differences between architectures +- **T5.3**: Assembly shim requirement validation (Xtensa only) +- **T5.4**: Priority level effectiveness comparison + +**Architecture-Specific Considerations**: +- **Xtensa (ESP32-S3)**: Requires assembly shims for level 4+ (`esp32_s3.hpp:316-368`) +- **RISC-V (ESP32-C3)**: C handlers work at all priority levels (`esp32_c3_c6.hpp:180-194`) + +### Automated Test Execution + +#### Test Harness Integration +```bash +# Add to existing test framework +uv run test.py RMTInterruptValidation --qemu esp32s3 +uv run test.py RMTInterruptValidation --qemu esp32c3 + +# Specific test scenarios +uv run test.py RMTBaseline --qemu esp32s3 +uv run test.py RMTWiFiInterference --qemu esp32s3 +uv run test.py RMTHighPriority --qemu esp32s3 +uv run test.py RMTDoubleBuffer --qemu esp32s3 +``` + +#### Expected Test Results + +| Test Scenario | ESP32-S3 Expected | ESP32-C3 Expected | Pass/Fail Criteria | +|---------------|-------------------|-------------------|-------------------| +| T1.1 Baseline | ±200µs jitter | ±200µs jitter | PASS if within tolerance | +| T2.1 Wi-Fi Interference | ±10-50µs jitter | ±10-50µs jitter | PASS if problem reproduced | +| T3.1 Level 4 Priority | ±500µs improvement | ±500µs improvement | PASS if jitter reduced | +| T3.2 Level 5 Priority | ±1000µs improvement | N/A (max level 7) | PASS if jitter eliminated | +| T4.1 Double Buffer | Partial improvement | Partial improvement | PASS if some reduction | + +#### Performance Benchmarks + +**Target Metrics**: +- **Baseline RMT5**: 35±10µs refresh time (no Wi-Fi) +- **RMT5 + Wi-Fi**: 35±50µs refresh time (problem case) +- **Level 5 Priority**: 35±2µs refresh time (solution target) +- **Double Buffer**: 35±20µs refresh time (partial solution) + +### Test Data Collection + +#### Logging and Metrics +```cpp +// Timing data collection structure +typedef struct { + uint64_t timestamp; + uint32_t refresh_time_us; + uint32_t interrupt_latency_us; + uint8_t priority_level; + bool wifi_active; + bool buffer_underrun; +} rmt_timing_sample_t; + +// Collect 10,000 samples per test scenario +#define TIMING_SAMPLES 10000 +rmt_timing_sample_t timing_data[TIMING_SAMPLES]; +``` + +#### Statistical Analysis +- **Mean refresh time** and standard deviation +- **95th percentile latency** measurements +- **Buffer underrun frequency** (occurrences per 1000 refreshes) +- **Jitter distribution** histograms + +### QEMU Limitations and Considerations + +#### QEMU Timing Accuracy +- QEMU provides relative timing comparison, not absolute accuracy +- Interrupt priority simulation may not perfectly match hardware +- Focus on comparative analysis between configurations + +#### Hardware Validation Requirements +- QEMU results must be validated on physical ESP32-S3/C3 hardware +- Real Wi-Fi interference patterns may differ from simulation +- Oscilloscope measurements required for WS2812B timing verification + +--- + +## FEASIBILITY AUDIT (2025-09-16) + +### Executive Summary +After analyzing the FastLED RMT5 driver implementation and ESP32 IDF documentation, **both proposed solutions are technically feasible**. The ping-pong buffering approach is recommended as the primary solution due to its simplicity and proven effectiveness. + +### Core Architecture Analysis + +#### ESP32 Variants and Impact +- **ESP32/ESP32-S3**: Xtensa LX6/LX7 cores - Support level 5 interrupts but require ASM shims +- **ESP32-C3/C6**: RISC-V cores - Different interrupt architecture but same priority levels +- **Impact on RMT**: Core architecture affects interrupt entry overhead (~10-15% difference) but doesn't fundamentally change the Wi-Fi starvation issue + +### Solution 1: High-Priority Interrupt (Level 5) + +#### Current State +- FastLED RMT5 currently uses default priority 3 (found in `strip_rmt.cpp:31`) +- Wi-Fi typically runs at priority 4, causing starvation +- Infrastructure exists: `interrupt_priority` parameter already plumbed through (`strip_rmt.h:23`) + +#### Implementation Requirements +1. **Xtensa ASM Shim** (ESP32/S3): + ```asm + ; Required for level 5 interrupts on Xtensa + ; Must save/restore registers manually + ; Call C handler with proper stack alignment + ``` +2. **IRAM Safety**: All ISR code must be marked `IRAM_ATTR` +3. **Configuration**: Set `CONFIG_RMT_ISR_IRAM_SAFE=y` in IDF + +#### Feasibility: **MEDIUM COMPLEXITY** +- ✅ Technically possible - IDF supports priority levels 1-5 +- ✅ Infrastructure partially exists +- ⚠️ Requires platform-specific ASM code +- ⚠️ Risk of system instability if not done correctly +- ⚠️ Cannot change priority after initialization + +### Solution 2: Ping-Pong Buffering (Double Memory Blocks) + +#### Current State +- RMT5 uses ESP-IDF's `led_strip` API which abstracts away direct RMT control +- `mem_block_symbols` parameter increases buffer size but **NOT true ping-pong** +- RMT4 had direct access to RMT hardware registers for manual buffer switching +- LED strip API handles encoding internally, no access to `fillNext()` mechanism + +#### Critical Issue: **LED Strip API Limitation** +The `led_strip` API in IDF v5 doesn't expose ping-pong buffer control: +- RMT4: Direct hardware access, manual buffer refill via `fillNext()` interrupt +- RMT5: High-level API, encoder runs in ISR but no manual buffer control +- Increasing `mem_block_symbols` just makes a larger single buffer +- **This is NOT equivalent to RMT4's dual-buffer ping-pong** + +#### Implementation Challenges +1. **No Manual Buffer Control**: + ```cpp + // RMT4 had this in interrupt handler: + pController->fillNext(true); // Manually refill next buffer half + + // RMT5 LED strip API has no equivalent + led_strip_refresh_async(); // Fire and forget, no buffer control + ``` + +2. **Encoder Abstraction**: + - Encoder callback runs automatically in ISR context + - No way to manually trigger buffer refills + - Can't implement true ping-pong without bypassing LED strip API + +#### Feasibility: **COMPLEX - REQUIRES MAJOR REFACTOR** +- ❌ NOT a simple one-line change +- ❌ LED strip API doesn't support true ping-pong +- ⚠️ Would need to bypass LED strip API entirely +- ⚠️ Requires reimplementing low-level RMT control like RMT4 +- ⚠️ Loses benefits of IDF's maintained LED strip driver + +### Memory Impact Analysis + +#### Current Memory Usage +- **Without DMA**: 48-64 symbols × 4 bytes = 192-256 bytes per channel +- **With DMA**: 1024 symbols × 4 bytes = 4KB per channel + +#### With Double Buffering +- **Without DMA**: 384-512 bytes per channel (+192-256 bytes) +- **With DMA**: No change (already large) + +For typical 8-channel setup: +1.5-2KB total RAM usage + +### Testing Validation Required + +1. **Reproduce Issue**: + - Enable Wi-Fi AP mode + web server + - Drive 300+ LEDs on multiple pins + - Measure flicker frequency with oscilloscope + +2. **Validate Fix**: + - Test both solutions independently + - Measure interrupt latency improvement + - Verify no regressions on non-Wi-Fi use cases + +### Implementation Priority + +1. **Phase 1 (Immediate)**: Implement ping-pong buffering + - Low risk, high reward + - Can ship in patch release + +2. **Phase 2 (Future)**: Consider high-priority ISR for extreme cases + - Only if ping-pong proves insufficient + - Requires extensive platform testing + +### Configuration Recommendations + +Add these defines to allow user tuning: +```cpp +#define FASTLED_RMT5_MEM_BLOCKS_MULTIPLIER 2 // Double buffer by default +#define FASTLED_RMT5_INTERRUPT_PRIORITY 3 // Keep default, allow override +#define FASTLED_RMT5_FORCE_IRAM_SAFE 0 // Optional IRAM safety +``` + +### Solution 3: Bypass LED Strip API (Use Low-Level RMT) + +#### Approach +- Abandon `led_strip` API entirely +- Use IDF v5's low-level RMT TX API directly +- Implement custom encoder with manual buffer management +- Port RMT4's `fillNext()` logic to IDF v5 RMT API + +#### Implementation Requirements +```cpp +// Use raw RMT API instead of led_strip +rmt_new_tx_channel(&config, &channel); +rmt_new_bytes_encoder(&encoder_config, &encoder); +// Implement custom ISR with buffer refill logic +``` + +#### Feasibility: **MODERATE - MOST VIABLE** +- ✅ Gives full control over buffer management +- ✅ Can implement true ping-pong like RMT4 +- ⚠️ Requires significant code rewrite +- ⚠️ Must maintain custom encoder implementation +- ✅ Proven approach (RMT4 uses this successfully) + +### Revised Conclusion + +**The initial assessment was incorrect.** The LED strip API abstraction in RMT5 fundamentally prevents implementing true ping-pong buffering as a "simple one-line change." + +**Recommended approach:** +1. **Immediate**: Increase interrupt priority (Solution 1) - simplest to implement +2. **Short-term**: Bypass LED strip API and use low-level RMT (Solution 3) - most effective +3. **Long-term**: Work with Espressif to add ping-pong support to LED strip API + +The flickering issue is real and significant, but the solution requires more substantial changes than initially thought. Simply increasing `mem_block_symbols` only creates a larger buffer, not the dual-buffer ping-pong mechanism that made RMT4 resistant to Wi-Fi interference. + +--- + +## INTERRUPT IMPLEMENTATION ANALYSIS (2025-09-16) + +### Overview of Current FastLED Interrupt Infrastructure + +Based on analysis of the interrupt header files (`src/platforms/esp/32/interrupts/`), FastLED has already implemented comprehensive infrastructure for high-priority interrupt handling on both Xtensa (ESP32-S3) and RISC-V (ESP32-C3/C6) architectures. + +### Architecture-Specific Implementations + +#### ESP32-S3 (Xtensa LX7) - `esp32_s3.hpp` + +**Key Capabilities**: +- **Official Support**: Priority levels 1-3 via `rmt_tx_channel_config_t` +- **Experimental Support**: Priority levels 4-5 with custom assembly shims +- **Assembly Trampoline Macro**: `FASTLED_ESP_XTENSA_ASM_INTERRUPT_TRAMPOLINE` (`esp32_s3.hpp:316-368`) +- **Interrupt Installation Functions**: Pre-built helpers for level 3-5 priority installation + +**Critical Requirements for Level 4-5 Implementation**: +```cpp +// Level 5 interrupt requires assembly shim (lines 149-161) +extern void xt_highint5(void); +void IRAM_ATTR fastled_esp32s3_level5_handler(void); + +// Installation helper already available +esp_err_t fastled_esp32s3_install_level5_interrupt( + int source, void *arg, esp_intr_handle_t *handle); +``` + +**Build Configuration Required**: +- `CONFIG_RMT_ISR_IRAM_SAFE=y` +- Assembly `.S` files in build system +- `-mlongcalls` compiler flag + +#### ESP32-C3/C6 (RISC-V) - `esp32_c3_c6.hpp` + +**Key Advantages**: +- **Simplified Implementation**: C handlers work at any priority level (1-7) +- **No Assembly Required**: Standard `IRAM_ATTR` functions sufficient +- **PLIC Integration**: Platform-Level Interrupt Controller handles arbitration +- **Maximum Priority**: Level 7 (vs. Xtensa level 5) + +**Implementation Benefits**: +```cpp +// RISC-V can use C handlers directly at high priority +void IRAM_ATTR fastled_riscv_experimental_handler(void *arg); + +// Simpler installation (lines 286-292) +esp_err_t fastled_riscv_install_interrupt( + int source, int priority, void (*handler)(void *), + void *arg, esp_intr_handle_t *handle); +``` + +### Testing Infrastructure Integration + +#### Current Test Framework Compatibility + +The interrupt implementations are designed to integrate with the existing QEMU test infrastructure: + +```bash +# ESP32-S3 Xtensa testing +uv run test.py --qemu esp32s3 + +# ESP32-C3 RISC-V testing +uv run test.py --qemu esp32c3 +``` + +#### Proposed Test Case Implementation + +Based on the interrupt header analysis, the test framework should include: + +1. **Level 3 Baseline Tests** (Official FastLED support) + - Verify standard `rmt_tx_channel_config_t` integration + - Test maximum officially supported priority + - Validate against existing FastLED RMT driver + +2. **Level 4-5 Experimental Tests** (ESP32-S3) + - Test assembly shim functionality (`FASTLED_ESP_XTENSA_ASM_INTERRUPT_TRAMPOLINE`) + - Validate custom RMT initialization bypassing official driver + - Measure Wi-Fi interference immunity + +3. **Level 4-7 RISC-V Tests** (ESP32-C3/C6) + - Test C handler high-priority interrupts + - Compare RISC-V vs Xtensa interrupt latency + - Validate PLIC priority arbitration + +### Implementation Readiness Assessment + +#### What's Already Available + +**✅ Complete Infrastructure**: +- Assembly trampoline macros for Xtensa high-priority interrupts +- C handler support for RISC-V high-priority interrupts +- Interrupt installation helper functions for both architectures +- Build configuration documentation +- IRAM safety considerations documented + +**✅ Test Integration Points**: +- QEMU support for both ESP32-S3 and ESP32-C3 +- Existing test framework can be extended +- Performance measurement infrastructure available + +#### What Needs Implementation + +**🔨 RMT Driver Integration**: +- `fastled_esp32s3_rmt_init_custom()` function implementation +- `fastled_riscv_rmt_init_experimental()` function implementation +- Bridge between interrupt infrastructure and RMT hardware configuration + +**🔨 Custom RMT Control**: +- Bypass LED strip API for true ping-pong buffering +- Low-level RMT register manipulation +- Custom encoder implementation for buffer management + +### Recommended Implementation Sequence + +#### Phase 1: High-Priority Interrupt (Ready to Implement) +```cpp +// ESP32-S3 Level 5 Implementation - infrastructure exists +void IRAM_ATTR rmt_level5_handler(void *arg) { + // Custom RMT buffer refill logic + // Bypass official LED strip API +} + +// Use existing trampoline macro +FASTLED_ESP_XTENSA_ASM_INTERRUPT_TRAMPOLINE(rmt_level5_isr, rmt_level5_handler) + +// Install with existing helper +fastled_esp32s3_install_level5_interrupt(ETS_RMT_INTR_SOURCE, NULL, &handle); +``` + +#### Phase 2: Custom RMT Implementation +```cpp +// Bypass led_strip API entirely - use raw RMT API +rmt_new_tx_channel(&channel_config, &channel); +rmt_new_bytes_encoder(&encoder_config, &encoder); + +// Implement custom buffer management +// Port RMT4 fillNext() logic to IDF v5 RMT API +``` + +#### Phase 3: QEMU Validation +- Implement test cases in `tests/qemu_rmt_interrupts.cpp` +- Validate both Xtensa and RISC-V implementations +- Performance comparison and regression testing + +### Risk Assessment + +**Low Risk (High-Priority Interrupts)**: +- Infrastructure already exists and documented +- Clear implementation path with existing helpers +- QEMU testing available for validation + +**Medium Risk (Custom RMT Implementation)**: +- Requires bypassing official LED strip API +- Must maintain custom encoder implementation +- Compatibility with future IDF versions uncertain + +**Critical Success Factors**: +1. **IRAM Safety**: All high-priority code must be IRAM-resident +2. **Timing Validation**: QEMU + hardware oscilloscope verification +3. **Regression Testing**: Ensure no impact on normal priority operation +4. **Documentation**: Clear usage guidelines for different priority levels + +### Conclusion + +The interrupt infrastructure analysis reveals that FastLED already has **comprehensive, production-ready infrastructure** for high-priority interrupt implementation on both Xtensa and RISC-V architectures. The main implementation work required is: + +1. **Integration layer** between interrupt infrastructure and RMT hardware +2. **Custom RMT driver** that bypasses LED strip API limitations +3. **Test validation** using existing QEMU framework + +This significantly reduces the implementation complexity compared to the initial assessment. The high-priority interrupt solution is **immediately implementable** using existing infrastructure, while the ping-pong buffering solution requires the more substantial custom RMT driver development. \ No newline at end of file diff --git a/.pio/libdeps/esp01_1m/FastLED/TESTCASE_INSTRUCTIONS.md b/.pio/libdeps/esp01_1m/FastLED/TESTCASE_INSTRUCTIONS.md new file mode 100644 index 0000000..94b6d7b --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/TESTCASE_INSTRUCTIONS.md @@ -0,0 +1,261 @@ +# FastLED TEST_CASE Execution Guide + +## Overview + +FastLED uses the **doctest** framework for C++ unit testing. Tests are organized in files named `test_*.cpp` in the `tests/` directory. Each file can contain multiple `TEST_CASE` macros that define individual test functions. + +## Test Structure + +- **Test Files**: Located in `tests/test_*.cpp` (e.g., `test_algorithm.cpp`, `test_easing.cpp`) +- **TEST_CASEs**: Individual test functions defined with `TEST_CASE("name")` macro +- **SUBCASEs**: Nested test sections within TEST_CASEs using `SUBCASE("name")` +- **Assertions**: `CHECK()`, `CHECK_EQ()`, `CHECK_LT()`, etc. for validation + +## Quick Start + +### Using the MCP Server (Recommended) + +1. **Start the MCP server:** + ```bash + uv run mcp_server.py + ``` + +2. **Available MCP tools:** + - `run_tests`: Run tests with various options + - `list_test_cases`: List available TEST_CASEs + - `test_instructions`: Show detailed instructions + +### Command Line Usage + +1. **Run all tests:** + ```bash + uv run test.py + # or using the user rule: + bash test + ``` + +2. **Run only C++ tests:** + ```bash + uv run test.py --cpp + ``` + +3. **Run specific test file:** + ```bash + uv run test.py --cpp algorithm + # This runs test_algorithm.cpp + ``` + +## Running Specific TEST_CASEs + +### Method 1: Direct Executable (Most Precise) + +First, compile the tests, then run the specific executable with doctest filtering: + +```bash +# 1. Compile the test (if not already compiled) +uv run test.py --cpp algorithm + +# 2. Run specific TEST_CASE +./tests/.build/bin/test_algorithm --test-case="reverse an int list" + +# 3. Run with verbose output +./tests/.build/bin/test_algorithm --test-case="reverse an int list" --verbose +``` + +### Method 2: Using MCP Server + +Use the `run_tests` tool with specific parameters: +- `test_type`: "specific" +- `specific_test`: "algorithm" (without test_ prefix) +- `test_case`: "reverse an int list" +- `verbose`: true (optional) + +### Method 3: List Available TEST_CASEs First + +```bash +# Using MCP list_test_cases tool, or manually: +grep -r "TEST_CASE" tests/test_algorithm.cpp +``` + +## Common Test Files and Their Purpose + +| File | Purpose | Example TEST_CASEs | +|------|---------|-------------------| +| `test_algorithm.cpp` | Algorithm utilities | "reverse an int list" | +| `test_easing.cpp` | Easing functions | "8-bit easing functions", "easeInOutQuad16" | +| `test_hsv16.cpp` | HSV color space | "HSV to RGB conversion", "HSV hue wraparound" | +| `test_math.cpp` | Mathematical functions | "sin32 accuracy", "random number generation" | +| `test_vector.cpp` | Vector container | "vector push_back", "vector iteration" | +| `test_fx.cpp` | Effects framework | "fx engine initialization" | +| `test_apa102_hd.cpp` | APA102 HD driver | "APA102 color mapping" | +| `test_bitset.cpp` | Bitset operations | "bitset operations" | + +## Example Workflows + +### Debug a Failing Test + +1. **List TEST_CASEs in a specific file:** + ```bash + # Using MCP server list_test_cases tool with test_file: "easing" + ``` + +2. **Run with verbose output:** + ```bash + uv run test.py --cpp easing --verbose + ``` + +3. **Run specific failing TEST_CASE:** + ```bash + ./tests/.build/bin/test_easing --test-case="8-bit easing functions" --verbose + ``` + +### Test Development Workflow + +1. **Clean build and run:** + ```bash + uv run test.py --cpp mytest --clean --verbose + ``` + +2. **Run only failed tests:** + ```bash + cd tests/.build && ctest --rerun-failed + ``` + +3. **Test with different compilers:** + ```bash + uv run test.py --cpp mytest --clang + ``` + +### Finding Specific Tests + +1. **Search for TEST_CASEs by pattern:** + ```bash + # Using MCP list_test_cases tool with search_pattern: "easing" + ``` + +2. **Manual search:** + ```bash + grep -r "TEST_CASE.*easing" tests/ + ``` + +## Doctest Command Line Options + +When running test executables directly, you can use these doctest options: + +- `--test-case=`: Run specific TEST_CASE +- `--test-case-exclude=`: Exclude specific TEST_CASE +- `--subcase=`: Run specific SUBCASE +- `--subcase-exclude=`: Exclude specific SUBCASE +- `--list-test-cases`: List all TEST_CASEs in the executable +- `--list-test-suites`: List all test suites +- `--verbose`: Show detailed output including successful assertions +- `--success`: Show successful assertions too +- `--no-colors`: Disable colored output +- `--force-colors`: Force colored output +- `--no-breaks`: Disable breaking into debugger +- `--no-skip`: Don't skip any tests + +### Examples: + +```bash +# List all TEST_CASEs in a test file +./tests/.build/bin/test_easing --list-test-cases + +# Run multiple TEST_CASEs with pattern +./tests/.build/bin/test_easing --test-case="*quad*" + +# Exclude specific TEST_CASEs +./tests/.build/bin/test_easing --test-case-exclude="*16-bit*" + +# Run with full verbose output +./tests/.build/bin/test_easing --success --verbose +``` + +## Understanding Test Output + +### Successful Test: +``` +[doctest] run with "--help" for options +=============================================================================== +TEST_CASE: reverse an int list +=============================================================================== +tests/test_algorithm.cpp:12 +all tests passed! +=============================================================================== +[doctest] test cases: 1 | 1 passed | 0 failed | 0 skipped +[doctest] assertions: 5 | 5 passed | 0 failed | +[doctest] Status: SUCCESS! +``` + +### Failed Test: +``` +=============================================================================== +TEST_CASE: reverse an int list +=============================================================================== +tests/test_algorithm.cpp:12 +tests/test_algorithm.cpp:20: ERROR: CHECK_EQ(vec[0], 6) is NOT correct! + values: CHECK_EQ(5, 6) + +=============================================================================== +[doctest] test cases: 1 | 0 passed | 1 failed | 0 skipped +[doctest] assertions: 5 | 4 passed | 1 failed | +[doctest] Status: FAILURE! +``` + +## Tips and Best Practices + +1. **Use `--verbose`** to see detailed test output and assertions +2. **Use `--clean`** when testing after significant code changes +3. **List TEST_CASEs first** to see what's available before running specific tests +4. **Individual TEST_CASE execution** is useful for debugging specific functionality +5. **Check test output carefully** - doctest provides detailed failure information with line numbers +6. **Use pattern matching** with `--test-case="*pattern*"` to run related tests +7. **Combine with debugger** - tests are compiled with debug symbols (`-g3`) + +## Environment Setup + +- Tests are compiled with Debug flags (`-g3`, `-O0`) for better debugging +- GDB integration available for crash analysis +- Static analysis warnings enabled as errors +- Cross-platform support (Linux, macOS, Windows) +- Uses zig/clang as the default compiler for consistency + +## Troubleshooting + +### Common Issues: + +1. **Test executable not found:** + ```bash + # Make sure tests are compiled first + uv run test.py --cpp + ``` + +2. **TEST_CASE name not found:** + ```bash + # List available TEST_CASEs + ./tests/.build/bin/test_ --list-test-cases + ``` + +3. **Compilation errors:** + ```bash + # Clean build + uv run test.py --cpp --clean + ``` + +4. **Permission denied on executable:** + ```bash + chmod +x tests/.build/bin/test_ + ``` + +## Integration with Development + +### Git Hooks +Consider adding a pre-commit hook to run relevant tests: +```bash +#!/bin/bash +# Run tests for changed files +uv run test.py --cpp +``` + +### IDE Integration +Most IDEs can be configured to run individual TEST_CASEs directly from the editor by configuring the test executable path and doctest arguments. \ No newline at end of file diff --git a/.pio/libdeps/esp01_1m/FastLED/TODO.md b/.pio/libdeps/esp01_1m/FastLED/TODO.md new file mode 100644 index 0000000..9c309cf --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/TODO.md @@ -0,0 +1,47 @@ +# Testing + + * REPO SYNC MODE: When there is a compiler error there isn't a hard failure. The compiler error needs to get propagate back to the top. + + + * Esp32 testing + * https://github.com/marketplace/actions/esp32-qemu-runner will run a sketch for X seconds and see's if it crashes + * There's specific tests we'd like to run with this including the WS2812 and APA102 tests to test the clockless and clocked drivers + +# Feature Enhancements + + [ ] Adafruit converter driver + [ ] NeoPixel converter driver + + * I2S driver for ESP32 WS2812 + * https://github.com/hpwit/I2SClocklessLedDriver + * Our copy is here: https://github.com/FastLED/FastLED/blob/master/src/platforms/esp/32/clockless_i2s_esp32.h + * S3: + * https://github.com/hpwit/I2SClockLessLedDriveresp32s3 + * Apparently, this driver allows MASSIVE parallelization for WS2812 + * Timing guide for reducing RMT frequency https://github.com/Makuna/NeoPixelBus/pull/795 + * ESp32 LED guide + * web: https://components.espressif.com/components/espressif/led_strip + * repo: https://github.com/espressif/idf-extra-components/tree/60c14263f3b69ac6e98ecae79beecbe5c18d5596/led_strip + * adafruit conversation on RMT progress: https://github.com/adafruit/Adafruit_NeoPixel/issues/375 + + + * MIT Licensed SdFat library + * https://github.com/greiman/SdFat + * YVes LittleFS implementation for ESP + * https://github.com/hpwit/ledOS/blob/main/src/fileSystem.h + + * NimBLE for Arduino + * https://github.com/h2zero/NimBLE-Arduino?tab=readme-ov-file + + * Arduino test compile + * https://github.com/hpwit/arduino-test-compile/blob/master/arduino-test-compile.sh + + +# Misc: + + * sutaburosu's guide to playing around with FastLED 4 + * https://github.com/sutaburosu/FastLED4-ESP32-playpen + + +# Animartrix: try using sinf, cosf and other found trip instead of trying to go +full double precision. diff --git a/.pio/libdeps/esp01_1m/FastLED/VIDEO.md b/.pio/libdeps/esp01_1m/FastLED/VIDEO.md new file mode 100644 index 0000000..871d03d --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/VIDEO.md @@ -0,0 +1,352 @@ +# Video Recording Feature for FastLED Web App + +## Implementation Status: ✅ COMPLETE - FULLY IMPLEMENTED + +**Last Updated**: September 18, 2025 +**Commit**: Refactored video recording code to fix bugs and improve reliability + +### Overview +A video recording feature has been implemented for the FastLED web application in `src/platforms/wasm/compiler/`. This feature allows users to capture both the canvas animations and audio output to create high-quality video recordings. + +## Features Implemented + +### 1. Recording Button UI +- **Location**: Upper right corner of the canvas +- **Visual States**: + - **Idle**: Gray circular button with a record icon (⚫) + - **Recording**: Red pulsing button with a stop icon (⬛) +- **Animation**: Smooth pulse effect when recording +- **Note**: Stdout button should be moved to upper left of canvas to avoid conflict with record button placement + +### 2. Video Capture Specifications +- **Default Format**: MP4 with H.264 video codec and AAC audio codec +- **Fallback Formats**: WebM with VP9/VP8 video codec and Opus audio codec (auto-detected based on browser support) +- **Video Bitrate**: 10 Mbps (high quality) +- **Audio Bitrate**: 128 kbps +- **Frame Rate**: 30 FPS default (configurable to 60 FPS) +- **Resolution**: Captures at canvas native resolution +- **Frame Logging**: Each frame insertion is logged to console (e.g., "frame 16") +- **Automatic File Extension**: Correct file extension (.mp4 or .webm) based on selected codec +- **Recording Statistics**: Logs frame count, duration, FPS, and file size upon completion +- **Improved Error Handling**: Graceful fallback when MediaRecorder is unavailable + +### 3. Audio Capture +- **Source**: Web Audio API AudioContext +- **Integration**: Automatically captures audio if AudioContext is available +- **MP3 Player Integration**: + - Captures audio from the existing MP3 player module + - Audio streams from MP3 playback are routed through the AudioContext + - Mixed audio (synthesized + MP3) is captured in the recording +- **Audio Mixing**: Combines all audio sources (synthesized sounds + MP3 playback) into a single stream +- **Fallback**: Records video-only if audio is unavailable +- **Sync**: Audio and video are automatically synchronized + +### 4. User Interaction +- **Start Recording**: Click the record button or press `Ctrl+R` / `Cmd+R` +- **Stop Recording**: Click the button again (now showing stop icon) +- **File Save**: Automatic download prompt when recording stops +- **Filename Format**: `fastled-recording-YYYY-MM-DD-HH-MM-SS.{mp4|webm}` (extension matches codec) +- **Graceful Degradation**: Record button automatically hidden if MediaRecorder unsupported + +## Frame Handling & Encoder Optimizations + +### Dropped Frame Detection & Recovery +The video recording system implements comprehensive dropped frame handling: + +#### Detection Methods +- **Frame Counter Monitoring**: Tracks expected vs. actual frame sequence +- **Timestamp Analysis**: Compares MediaRecorder timestamps with canvas refresh rate +- **Performance Observer**: Monitors frame presentation delays and skips + +#### Recovery Strategies +```javascript +// Dropped frame detection +let expectedFrameCount = 0; +let actualFrameCount = 0; +const frameDropThreshold = 2; // Allow 2 consecutive drops before intervention + +mediaRecorder.addEventListener('dataavailable', (event) => { + actualFrameCount++; + const timestamp = performance.now(); + const expectedTimestamp = startTime + (expectedFrameCount * (1000 / fps)); + + if (timestamp - expectedTimestamp > frameDropThreshold * (1000 / fps)) { + console.warn(`Dropped frames detected: expected ${expectedFrameCount}, got ${actualFrameCount}`); + // Trigger recovery actions + handleDroppedFrames(expectedFrameCount - actualFrameCount); + } + + console.log(`frame ${actualFrameCount}`); + expectedFrameCount++; +}); + +function handleDroppedFrames(droppedCount) { + // Option 1: Duplicate last frame to maintain timing + // Option 2: Reduce capture frame rate temporarily + // Option 3: Skip frame interpolation for smooth playback +} +``` + +### Duplicate Frame Optimization + +#### H.264 Encoder Optimizations +The H.264 encoder in MP4 format provides several optimizations for static or repetitive content: + +- **P-frames (Predicted frames)**: Encode only differences from previous frames +- **B-frames (Bidirectional frames)**: Reference both previous and future frames for maximum compression +- **Temporal Compression**: Automatically detects static regions and encodes efficiently +- **Rate Control**: Adjusts bitrate dynamically based on content complexity + +#### Implementation Details +```javascript +// Configure encoder for optimal duplicate frame handling +const encoderConfig = { + mimeType: 'video/mp4;codecs=h264,aac', + videoBitsPerSecond: 10000000, + audioBitsPerSecond: 128000, + // H.264 specific optimizations + keyFrameInterval: 30, // I-frame every 30 frames (1 second at 30fps) + frameSkipping: true, // Allow encoder to skip identical frames + contentHint: 'motion' // Optimize for animation content +}; + +// Monitor encoding efficiency +mediaRecorder.addEventListener('start', () => { + console.log('Encoder supports duplicate frame optimization: ', + mediaRecorder.mimeType.includes('h264')); +}); +``` + +#### Fallback Encoder Behavior +When MP4/H.264 is not available, the system falls back to WebM/VP9: + +- **VP9 Optimization**: Similar temporal compression but different algorithm +- **Opus Audio**: Efficient silence detection and compression +- **WebM Container**: Supports variable frame rates for dropped frame scenarios + +#### Performance Monitoring +```javascript +// Track encoding performance +const encodingStats = { + framesEncoded: 0, + framesDuplicated: 0, + bytesGenerated: 0, + compressionRatio: 0 +}; + +mediaRecorder.addEventListener('dataavailable', (event) => { + encodingStats.bytesGenerated += event.data.size; + encodingStats.framesEncoded++; + + // Estimate duplicate frame optimization + const expectedSize = (canvas.width * canvas.height * 3) / 8; // RGB to bytes + const actualSize = event.data.size; + const efficiency = 1 - (actualSize / expectedSize); + + if (efficiency > 0.8) { + encodingStats.framesDuplicated++; + console.log(`High compression frame ${encodingStats.framesEncoded} (${efficiency.toFixed(2)} efficiency)`); + } +}); +``` + +## Technical Implementation + +### Files Created/Modified + +1. **`modules/video_recorder.js`** (NEW) + - Core VideoRecorder class + - MediaRecorder API integration + - Canvas stream capture + - Audio context integration with MP3 player support + - Mixed audio capture (MP3 + synthesized sounds) + - File save functionality + +2. **`index.html`** (MODIFIED) + - Added record button HTML structure + - SVG icons for record/stop states + +3. **`index.css`** (MODIFIED) + - Record button styling + - Animation effects (pulse, hover) + - State transitions + +4. **`index.js`** (MODIFIED) + - Video recorder initialization + - Button event handling + - Keyboard shortcut support + - Global debug functions + +## API Documentation + +### MediaRecorder API Usage + +```javascript +// Canvas capture +canvas.captureStream(fps) // Creates MediaStream from canvas + +// Audio capture with MP3 mixing +audioContext.createMediaStreamDestination() // Creates audio destination node + +// MP3 player audio routing +mp3Player.connect(audioDestination) // Route MP3 audio to recording destination +synthesizer.connect(audioDestination) // Route synthesized audio to destination + +// Combined stream with mixed audio +new MediaStream([ + ...videoStream.getVideoTracks(), + ...audioDestination.stream.getAudioTracks() // Contains mixed audio from all sources +]) + +// Recording with mixed audio +mediaRecorder = new MediaRecorder(stream, { + mimeType: 'video/mp4;codecs=h264,aac', // Default: MP4 with H.264 video and AAC audio + videoBitsPerSecond: 10000000, + audioBitsPerSecond: 128000 // Captures all mixed audio sources +}) + +// Frame logging during recording +mediaRecorder.addEventListener('dataavailable', (event) => { + console.log(`frame ${++frameCounter}`); // Logs each frame insertion +}); +``` + +### Key Design Decisions + +1. **File Save Timing**: Files are saved AFTER recording stops (not when it starts) + - Ensures precise start/stop timing for A/V sync + - User sees save dialog after recording completes + - No filename prompt interrupts recording start + +2. **High Bitrate Choice**: 10 Mbps video bitrate + - Ensures high quality capture + - Suitable for 60 FPS content + - Can be compressed later if needed + +3. **MP4/H.264 Format**: Primary codec choice + - Universal browser support for high-quality video + - Good compression efficiency with AAC audio + - Supports both video and audio tracks + - WebM/VP9 fallback for browsers with limited MP4 support + +## Usage Instructions + +### For Users +1. Click the gray record button in the upper-right corner of the canvas +2. Button turns red and pulses to indicate recording +3. Perform your LED animation +4. Click the red button to stop recording +5. Browser will prompt to save the video file + +### For Developers + +#### Global Functions (Console Access) +```javascript +// Get recorder instance +window.getVideoRecorder() + +// Start recording programmatically +window.startVideoRecording() + +// Stop recording programmatically +window.stopVideoRecording() +``` + +#### Keyboard Shortcuts +- `Ctrl+R` / `Cmd+R`: Toggle recording on/off + +## Browser Compatibility + +- ✅ Chrome/Chromium (Full support) +- ✅ Firefox (Full support) +- ✅ Edge (Full support) +- ⚠️ Safari (Limited codec support, uses fallback) + +## Recent Bug Fixes & Improvements + +### September 18, 2025 Refactor +- **Fixed codec configuration**: Changed default from VP9 to H.264/MP4 for better compatibility +- **Improved audio routing**: Enhanced audio connection logic for more reliable audio capture +- **Dynamic file extensions**: Automatically uses correct extension (.mp4 or .webm) based on codec +- **Enhanced error handling**: Added graceful fallback when MediaRecorder API is unavailable +- **Better resource cleanup**: Improved disposal method to prevent memory leaks +- **Frame logging implementation**: Added proper frame counting and logging as documented +- **Recording statistics**: Added comprehensive logging of recording metrics (duration, FPS, file size) +- **Canvas content detection**: Improved blank canvas detection without interfering with actual content +- **UI positioning fix**: Moved stdout label to upper left to avoid conflicts with record button + +### Bug Fixes Addressed +1. **Inconsistent codec defaults** - Now prioritizes H.264/MP4 over VP9/WebM +2. **Audio connection failures** - Improved audio routing with better error handling +3. **Wrong file extensions** - Files now use correct extension matching the codec +4. **Missing frame logging** - Frame counter now properly logs each frame +5. **Memory leaks** - Enhanced cleanup in disposal and error scenarios +6. **Canvas interference** - Removed test pattern drawing that could interfere with content +7. **MediaRecorder detection** - Added proper feature detection and graceful degradation + +## Future Enhancements (Optional) + +- [ ] Settings menu for quality presets +- [ ] Frame rate selector (30/60 FPS toggle) +- [ ] Recording timer display +- [ ] Pause/resume functionality +- [ ] Custom filename input +- [ ] Multiple format export options +- [ ] Recording preview before save +- [ ] Audio level meters for MP3 and synthesized audio +- [ ] Separate audio track controls (mute individual sources) +- [ ] Audio normalization for mixed sources + +## Troubleshooting + +### No Audio in Recording +- Check if browser has microphone permissions +- Verify AudioContext is initialized +- Some browsers require user interaction to start AudioContext +- Ensure MP3 player audio nodes are properly connected to the recording destination +- Verify that audio mixing is working (check browser console for audio node errors) + +### Recording Button Not Appearing +- Check browser console for errors +- Verify canvas element exists with ID "myCanvas" +- Ensure JavaScript modules are loading correctly + +### Low Quality Video +- Browser may be using fallback codec +- Check available disk space +- Try different browser for VP9 support + +### Dropped Frames Issues +- **High CPU Usage**: Reduce canvas complexity or frame rate +- **Memory Pressure**: Monitor browser memory usage, restart if needed +- **Background Tabs**: Ensure recording tab has focus for optimal performance +- **Hardware Acceleration**: Enable GPU acceleration in browser settings + +### Encoder Optimization Not Working +- **H.264 Unavailable**: Check browser codec support with `MediaRecorder.isTypeSupported()` +- **Poor Compression**: Verify content has static regions for optimization +- **Frame Skipping Disabled**: Some browsers may not support frameSkipping parameter +- **Content Hint Ignored**: Fallback to default encoding if contentHint not supported + +## Testing Checklist + +### Basic Functionality +- [x] Record button appears in correct position +- [x] Button changes color when recording +- [x] Pulse animation works during recording +- [x] Canvas content is captured correctly +- [x] Audio is captured (when available) +- [x] File saves with correct timestamp +- [x] Keyboard shortcut works +- [x] Multiple start/stop cycles work correctly +- [x] Memory is properly released after recording + +### Frame Handling & Optimization +- [x] Frame logging appears in console during recording +- [x] Dropped frame detection triggers warnings when appropriate +- [x] Static content shows high compression efficiency +- [x] H.264 encoder optimization is active when supported +- [x] Fallback to WebM/VP9 works when MP4 unavailable +- [x] Performance monitoring tracks encoding statistics +- [x] Recovery strategies activate during frame drops +- [x] Variable frame rate handling works under load \ No newline at end of file diff --git a/.pio/libdeps/esp01_1m/FastLED/apa102fix.md b/.pio/libdeps/esp01_1m/FastLED/apa102fix.md new file mode 100644 index 0000000..a6c1453 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/apa102fix.md @@ -0,0 +1,57 @@ +I was dissatisfied with a gamma corrected ramp using the APA102HD mode (it seemed to visibly step at one or more points), and some analysis of the 8 bit rgb + 5 bit brightness function showed why: +https://www.argyllcms.com/APA102_loglog.svg. + +So here is a suggested replacement for five_bit_bitshift() in fl/five_bit_hd_gamma.cpp, that fixed the problem for me: + +// Improved FastLED five_bit_bitshift() function +// This appears to exactly match the floating point reference, +// with a worst case resulting error of 0.2% over the full 16 bit input range, +// and an average error of 0.05% over that range. Errors scale with maximum +// magnitude. + +// ix/31 * 255/65536 * 256 scaling factors, valid for indexes 1..31 +static uint32_t bright_scale[32] = { + 0, 2023680, 1011840, 674560, 505920, 404736, 337280, 289097, + 252960, 224853, 202368, 183971, 168640, 155668, 144549, 134912, + 126480, 119040, 112427, 106509, 101184, 96366, 91985, 87986, + 84320, 80947, 77834, 74951, 72274, 69782, 67456, 65280 +}; + +// Since the return value wasn't used, it has been omitted. +// It's not clear what scale brightness is, or how it is to be applied, +// so we assume 8 bits applied over the given rgb values. +void five_bit_bitshift(uint16_t r16, uint16_t g16, uint16_t b16, uint8_t brightness, + CRGB *out, uint8_t *out_power_5bit) { + uint8_t r8 = 0, g8 = 0, b8 = 0; + + // Apply any brightness setting (we assume brightness is 0..255) + if (brightness != 0xff) { + r16 = scale16by8(r16, brightness); + g16 = scale16by8(g16, brightness); + b16 = scale16by8(b16, brightness); + } + + // Locate the largest value to set the brightness/scale factor + uint16_t scale = max3(r16, g16, b16); + + if (scale == 0) { + *out = CRGB(0, 0, 0); + *out_power_5bit = 0; + return; + } else { + uint32_t scalef; + + // Compute 5 bit quantized scale that is at or above the maximum value. + scale = (scale + (2047 - (scale >> 5))) >> 11; + + // Adjust the 16 bit values to account for the scale, then round to 8 bits + scalef = bright_scale[scale]; + r8 = (r16 * scalef + 0x808000) >> 24; + g8 = (g16 * scalef + 0x808000) >> 24; + b8 = (b16 * scalef + 0x808000) >> 24; + + *out = CRGB(r8, g8, b8); + *out_power_5bit = scale; + return; + } +} \ No newline at end of file diff --git a/.pio/libdeps/esp01_1m/FastLED/clean b/.pio/libdeps/esp01_1m/FastLED/clean new file mode 100755 index 0000000..a5a78a6 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/clean @@ -0,0 +1,47 @@ +#!/bin/bash +# Ensure UTF-8 everywhere (console and Python), including on Windows msys/cygwin +case "$OSTYPE" in + msys*|cygwin*) + if command -v chcp.com >/dev/null 2>&1; then + chcp.com 65001 >NUL 2>NUL || chcp.com 65001 >/dev/null 2>&1 + fi + ;; + *) + : + ;; +esac +export LANG=C.UTF-8 +export LC_ALL=C.UTF-8 +export PYTHONUTF8=1 +export PYTHONIOENCODING=UTF-8 + +set -x + +# cd to the directory of the script +cd "$(dirname "$0")" + +rm -rf .venv +rm -rf .build +rm -rf .pio +rm -rf .pio_cache +rm -rf ci/tmp +rm -rf tests/.build + +rm -rf .*_cache +rm -rf __pycache__ +rm -rf .tools + +# JavaScript linting cleanup +rm -rf .js-tools + +rm -rf ci/__pycache__ +rm -rf ci/.*_cache + + + +# remove any CMakeCache.txt files +find . -name "CMakeCache.txt" -type f -delete +rm -f uv.lock + +# Remove generated compile_commands.json +rm -f compile_commands.json diff --git a/.pio/libdeps/esp01_1m/FastLED/code_of_conduct.md b/.pio/libdeps/esp01_1m/FastLED/code_of_conduct.md new file mode 100644 index 0000000..441741c --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/code_of_conduct.md @@ -0,0 +1,134 @@ + +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, caste, color, religion, or sexual identity +and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the + overall community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or + advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email + address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting +* "Trolling" and excessive complaints without the due benefit of contributing code. + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders via a bug report with the title [CODE OF CONDUCT] as the beginning text. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series +of actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, available at +[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0]. + +Community Impact Guidelines were inspired by +[Mozilla's code of conduct enforcement ladder][Mozilla CoC]. + +For answers to common questions about this code of conduct, see the FAQ at +[https://www.contributor-covenant.org/faq][FAQ]. Translations are available +at [https://www.contributor-covenant.org/translations][translations]. + +[homepage]: https://www.contributor-covenant.org +[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html +[Mozilla CoC]: https://github.com/mozilla/diversity +[FAQ]: https://www.contributor-covenant.org/faq +[translations]: https://www.contributor-covenant.org/translations + diff --git a/.pio/libdeps/esp01_1m/FastLED/component.mk b/.pio/libdeps/esp01_1m/FastLED/component.mk new file mode 100644 index 0000000..874ca9b --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/component.mk @@ -0,0 +1,2 @@ +COMPONENT_ADD_INCLUDEDIRS := ./src src/platforms/esp/32 +COMPONENT_SRCDIRS := ./src src/platforms/esp/32 diff --git a/.pio/libdeps/esp01_1m/FastLED/cool_projects.md b/.pio/libdeps/esp01_1m/FastLED/cool_projects.md new file mode 100644 index 0000000..82dd4fa --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/cool_projects.md @@ -0,0 +1,34 @@ + * Advanced Color Gradient using online version of FastLED. + * https://wokwi.com/projects/285170662915441160 + * LedMapper tool for irregular shapes + * https://github.com/jasoncoon/led-mapper + * list of projects on reddit: + * https://www.reddit.com/r/FastLED/wiki/index/user_examples/ + * mesh networked esp32 with mutli wifi connections for redundancy + + * https://github.com/Souravgoswami/Arduino-FastLED-Cool-Effects + * FastLED-IR: https://github.com/marcmerlin/FastLED-IR + * https://github.com/marcmerlin/NeoMatrix-FastLED-IR?tab=readme-ov-file + + * Tree IR: + * https://www.evilgeniuslabs.org/tree-v2 + + * Esp32 server for fastled + * https://github.com/jasoncoon/esp32-fastled-webserver + + * Strip tease - cool fx for strips + * https://github.com/lpaolini/Striptease?tab=readme-ov-file + + +* Soulematelights: + * https://editor.soulmatelights.com/gallery + + +* https://github.com/marcmerlin/FastLED_NeoMatrix_SmartMatrix_LEDMatrix_GFX_Demos/blob/master/LEDMatrix/Table_Mark_Estes/Table_Mark_Estes.ino + + +* AMAZING processing.js artist + * https://x.com/Hau_kun + +* llm-min.txt + * https://github.com/marv1nnnnn/llm-min.txt \ No newline at end of file diff --git a/.pio/libdeps/esp01_1m/FastLED/debug_test.html b/.pio/libdeps/esp01_1m/FastLED/debug_test.html new file mode 100644 index 0000000..4c16ca4 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/debug_test.html @@ -0,0 +1,220 @@ + + + + FastLED Pure JavaScript Architecture Debug Test + + + +

FastLED Pure JavaScript Architecture Debug Test

+ +
+

Module Loading Status

+
Loading...
+
+ +
+

Debug Controls

+ + + + +
+ +
+

Debug Console Output

+
+
+ + + + diff --git a/.pio/libdeps/esp01_1m/FastLED/dev.sh b/.pio/libdeps/esp01_1m/FastLED/dev.sh new file mode 100755 index 0000000..e7a9f2e --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/dev.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +uv run dev/dev.py \ No newline at end of file diff --git a/.pio/libdeps/esp01_1m/FastLED/dev/dev.ino b/.pio/libdeps/esp01_1m/FastLED/dev/dev.ino new file mode 100644 index 0000000..401ef48 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/dev/dev.ino @@ -0,0 +1,17 @@ + + +#if defined(ESP32) + +#include "esp_log.h" + +// use gcc intialize constructor +// to set log level to ESP_LOG_VERBOSE +// before setup() is called +__attribute__((constructor)) +void on_startup() { + esp_log_level_set("*", ESP_LOG_VERBOSE); // set all components to ERROR level +} + +#endif // ESP32 + +#include "../examples/FestivalStick/FestivalStick.ino" diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/AGENTS.md b/.pio/libdeps/esp01_1m/FastLED/examples/AGENTS.md new file mode 100644 index 0000000..505b232 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/AGENTS.md @@ -0,0 +1,356 @@ +# FastLED Examples Agent Guidelines + +## 🚨 CRITICAL: .INO FILE CREATION RULES + +### ⚠️ THINK BEFORE CREATING .INO FILES ⚠️ + +**.ino files should be created SPARINGLY and ONLY when truly justified.** + +### 🚫 WHEN NOT TO CREATE .INO FILES: +- **Testing minor code changes** - Use existing test files or unit tests +- **Quick API validation** - Use unit tests or modify existing examples +- **Debugging specific functions** - Use test files, not new sketches +- **One-off experiments** - Create temporary test files instead +- **Small feature tests** - Extend existing relevant examples + +### ✅ WHEN TO CREATE .INO FILES: + +#### 1. **Temporary Testing (.ino)** +**Use Pattern:** `temp_.ino` or `test_.ino` +```cpp +// temp_json_api.ino - Testing new JSON fetch functionality +// test_networking.ino - Validating network stack changes +``` +- ✅ **FOR:** Testing new APIs during development +- ✅ **FOR:** Quick prototyping and validation +- ✅ **DELETE AFTER USE** - These are temporary by design + +#### 2. **Significant New Feature Examples** +**Use Pattern:** `examples//.ino` +```cpp +// examples/JsonFetchApi/JsonFetchApi.ino - Comprehensive JSON API example +// examples/NetworkStack/NetworkStack.ino - Major networking features +``` +- ✅ **FOR:** Large, comprehensive new features +- ✅ **FOR:** APIs that warrant dedicated examples +- ✅ **FOR:** Features that users will commonly implement +- ✅ **PERMANENT** - These become part of the example library + +### 📋 CREATION CHECKLIST: + +**Before creating ANY .ino file, ask:** + +1. **🤔 Is this testing a new API?** + - YES → Create `temp_.ino`, delete after testing + - NO → Consider alternatives + +2. **🤔 Is this a significant new feature that users will commonly use?** + - YES → Create `examples//.ino` + - NO → Use existing examples or test files + +3. **🤔 Can I modify an existing example instead?** + - YES → Extend existing example rather than creating new + - NO → Proceed with creation + +4. **🤔 Is this just for debugging/validation?** + - YES → Use unit tests or temporary test files + - NO → Consider if it meets the "significant feature" criteria + +### 🔍 REVIEW CRITERIA: + +**For Feature Examples (.ino files that stay):** +- ✅ **Demonstrates complete, real-world usage patterns** +- ✅ **Covers multiple aspects of the feature comprehensively** +- ✅ **Provides educational value for users** +- ✅ **Shows best practices and common use cases** +- ✅ **Is likely to be referenced by multiple users** + +**For Temporary Testing (.ino files that get deleted):** +- ✅ **Clearly named as temporary (temp_*, test_*)** +- ✅ **Focused on specific API validation** +- ✅ **Will be deleted after development cycle** +- ✅ **Too complex for unit test framework** + +### ❌ EXAMPLES OF WHAT NOT TO CREATE: +- `test_basic_led.ino` - Use existing Blink example +- `debug_colors.ino` - Use existing ColorPalette example +- `quick_brightness.ino` - Use unit tests or modify existing example +- `validate_pins.ino` - Use PinTest example or unit tests + +### ✅ EXAMPLES OF JUSTIFIED CREATIONS: +- `temp_new_wifi_api.ino` - Testing major new WiFi functionality (temporary) +- `examples/MachineLearning/MachineLearning.ino` - New ML integration feature (permanent) +- `temp_performance_test.ino` - Validating optimization changes (temporary) + +### 🧹 CLEANUP RESPONSIBILITY: +- **Temporary files:** Creator must delete when testing is complete +- **Feature examples:** Must be maintained and updated as API evolves +- **Abandoned files:** Regular cleanup reviews to remove unused examples + +**Remember: The examples directory is user-facing documentation. Every .ino file should provide clear value to FastLED users.** + +## Code Standards for Examples + +### Use fl:: Namespace (Not std::) +**DO NOT use `std::` prefixed functions or headers in examples.** This project provides its own STL-equivalent implementations under the `fl::` namespace. + +**Examples of what to avoid and use instead:** + +**Headers:** +- ❌ `#include ` → ✅ `#include "fl/vector.h"` +- ❌ `#include ` → ✅ `#include "fl/string.h"` +- ❌ `#include ` → ✅ `#include "fl/optional.h"` +- ❌ `#include ` → ✅ `#include "fl/scoped_ptr.h"` or `#include "fl/ptr.h"` + +**Functions and classes:** +- ❌ `std::move()` → ✅ `fl::move()` +- ❌ `std::vector` → ✅ `fl::vector` +- ❌ `std::string` → ✅ `fl::string` + +**Why:** The project maintains its own implementations to ensure compatibility across all supported platforms and to avoid bloating the library with unnecessary STL dependencies. + +### Memory Management +**🚨 CRITICAL: Always use proper RAII patterns - smart pointers, moveable objects, or wrapper classes instead of raw pointers for resource management.** + +**Resource Management Options:** +- ✅ **PREFERRED**: `fl::shared_ptr` for shared ownership (multiple references to same object) +- ✅ **PREFERRED**: `fl::unique_ptr` for exclusive ownership (single owner, automatic cleanup) +- ✅ **PREFERRED**: Moveable wrapper objects (like `fl::promise`) for safe copying and transferring of unique resources +- ✅ **ACCEPTABLE**: `fl::vector` storing objects by value when objects support move/copy semantics +- ❌ **AVOID**: `fl::vector` storing raw pointers - use `fl::vector>` or `fl::vector>` +- ❌ **AVOID**: Manual `new`/`delete` - use `fl::make_shared()` or `fl::make_unique()` + +**Examples:** +```cpp +// ✅ GOOD - Using smart pointers +fl::vector> mActiveClients; +auto client = fl::make_shared(); +mActiveClients.push_back(client); + +// ✅ GOOD - Using unique_ptr for exclusive ownership +fl::unique_ptr client = fl::make_unique(); + +// ✅ GOOD - Moveable wrapper objects (fl::promise example) +fl::vector> mActivePromises; // Copyable wrapper around unique future +fl::promise promise = fetch.get(url).execute(); +mActivePromises.push_back(promise); // Safe copy, shared internal state + +// ❌ BAD - Raw pointers require manual memory management +fl::vector mActivePromises; // Memory leaks possible +Promise* promise = new Promise(); // Who calls delete? +``` + +### Debug Printing +**Use `FL_WARN` for debug printing in examples.** This ensures consistent debug output that works in both unit tests and live application testing. + +**Usage:** +- ✅ `FL_WARN("Debug message: " << message);` +- ❌ `FL_WARN("Value: %d", value);` + +### No Emoticons or Emojis +**NO emoticons or emoji characters are allowed in C++ source files.** This ensures professional, maintainable code that works correctly across all platforms and development environments. + +**Examples of what NOT to do in .ino files:** +```cpp +// ❌ BAD - Emoticons in comments +// 🎯 This function handles user input + +// ❌ BAD - Emoticons in log messages +FL_WARN("✅ Operation successful!"); +FL_WARN("❌ Error occurred: " << error_msg); + +// ❌ BAD - Emoticons in string literals +const char* status = "🔄 Processing..."; +``` + +**Examples of correct alternatives:** +```cpp +// ✅ GOOD - Clear text in comments +// TUTORIAL: This function handles user input + +// ✅ GOOD - Text prefixes in log messages +FL_WARN("SUCCESS: Operation completed successfully!"); +FL_WARN("ERROR: Failed to process request: " << error_msg); + +// ✅ GOOD - Descriptive text in string literals +const char* status = "PROCESSING: Request in progress..."; +``` + +### JSON Usage - Ideal API Patterns +**🎯 PREFERRED: Use the modern `fl::Json` class for all JSON operations.** FastLED provides an ideal JSON API that prioritizes type safety, ergonomics, and crash-proof operation. + +**✅ IDIOMATIC JSON USAGE:** +```cpp +// NEW: Clean, safe, idiomatic API +fl::Json json = fl::Json::parse(jsonStr); +int brightness = json["config"]["brightness"] | 128; // Gets value or 128 default +string name = json["device"]["name"] | string("default"); // Type-safe with default +bool enabled = json["features"]["networking"] | false; // Never crashes + +// Array operations +if (json["effects"].contains("rainbow")) { + // Safe array checking +} +``` + +**❌ DISCOURAGED: Verbose legacy API:** +```cpp +// OLD: Verbose, error-prone API (still works, but not recommended) +fl::JsonDocument doc; +fl::string error; +fl::parseJson(jsonStr, &doc, &error); +int brightness = doc["config"]["brightness"].as(); // Can crash if missing +``` + +**📚 Reference Example:** See `examples/Json/Json.ino` for comprehensive usage patterns and API comparison. + +## Example Compilation Commands + +### Platform Compilation +```bash +# Compile examples for specific platforms +uv run ci/ci-compile.py uno --examples Blink +uv run ci/ci-compile.py esp32dev --examples Blink +uv run ci/ci-compile.py teensy31 --examples Blink +bash compile uno --examples Blink +``` + +### WASM Compilation +**🎯 HOW TO COMPILE ANY ARDUINO SKETCH TO WASM:** + +**Basic Compilation Commands:** +```bash +# Compile any sketch directory to WASM +uv run ci/wasm_compile.py path/to/your/sketch + +# Quick compile test (compile only, no browser) +uv run ci/wasm_compile.py path/to/your/sketch --just-compile + +# Compile examples/Blink to WASM +uv run ci/wasm_compile.py examples/Blink --just-compile + +# Compile examples/NetTest to WASM (test fetch API) +uv run ci/wasm_compile.py examples/NetTest --just-compile + +# Compile examples/DemoReel100 to WASM +uv run ci/wasm_compile.py examples/DemoReel100 --just-compile +``` + +**Output:** Creates `fastled_js/` folder with: +- `fastled.js` - JavaScript loader +- `fastled.wasm` - WebAssembly binary +- `index.html` - HTML page to run the sketch + +**Run in Browser:** +```bash +# Simple HTTP server to test +cd fastled_js +python -m http.server 8000 +# Open http://localhost:8000 +``` + +**🚨 REQUIREMENTS:** +- **Docker must be installed and running** +- **Internet connection** (for Docker image download on first run) +- **~1GB RAM** for Docker container during compilation + +### WASM Testing Requirements + +**🚨 MANDATORY: Always test WASM compilation after platform file changes** + +**Platform Testing Commands:** +```bash +# Test WASM platform changes (for platform developers) +uv run ci/wasm_compile.py examples/wasm --just-compile + +# Quick compile test for any sketch (compile only, no browser) +uv run ci/wasm_compile.py examples/Blink --just-compile + +# Quick compile test for NetTest example +uv run ci/wasm_compile.py examples/NetTest --just-compile + +# Quick test without full build +uv run ci/wasm_compile.py examples/wasm --quick +``` + +**Watch For These Error Patterns:** +- `error: conflicting types for 'function_name'` +- `error: redefinition of 'function_name'` +- `warning: attribute declaration must precede definition` +- `RuntimeError: unreachable` (often async-related) + +**MANDATORY RULES:** +- **ALWAYS test WASM compilation** after modifying any WASM platform files +- **USE `uv run ci/wasm_compile.py` for validation** +- **WATCH for unified build conflicts** in compilation output +- **VERIFY async operations work properly** in browser environment + +## Compiler Warning Suppression + +**ALWAYS use the FastLED compiler control macros from `fl/compiler_control.h` for warning suppression.** This ensures consistent cross-compiler support and proper handling of platform differences. + +**Correct Warning Suppression Pattern:** +```cpp +#include "fl/compiler_control.h" + +// Suppress specific warning around problematic code +FL_DISABLE_WARNING_PUSH +FL_DISABLE_FORMAT_TRUNCATION // Use specific warning macros +// ... code that triggers warnings ... +FL_DISABLE_WARNING_POP +``` + +**Available Warning Suppression Macros:** +- ✅ `FL_DISABLE_WARNING_PUSH` / `FL_DISABLE_WARNING_POP` - Standard push/pop pattern +- ✅ `FL_DISABLE_WARNING(warning_name)` - Generic warning suppression (use sparingly) +- ✅ `FL_DISABLE_WARNING_GLOBAL_CONSTRUCTORS` - Clang global constructor warnings +- ✅ `FL_DISABLE_WARNING_SELF_ASSIGN_OVERLOADED` - Clang self-assignment warnings +- ✅ `FL_DISABLE_FORMAT_TRUNCATION` - GCC format truncation warnings + +**What NOT to do:** +- ❌ **NEVER use raw `#pragma` directives** - they don't handle compiler differences +- ❌ **NEVER write manual `#ifdef __clang__` / `#ifdef __GNUC__` blocks** - use the macros +- ❌ **NEVER ignore warnings without suppression** - fix the issue or suppress appropriately + +## Exception Handling + +**DO NOT use try-catch blocks or C++ exception handling in examples.** FastLED is designed to work on embedded systems like Arduino where exception handling may not be available or desired due to memory and performance constraints. + +**Use Error Handling Alternatives:** +- ✅ **Return error codes:** `bool function() { return false; }` or custom error enums +- ✅ **Optional types:** `fl::optional` for functions that may not return a value +- ✅ **Assertions:** `FL_ASSERT(condition)` for debug-time validation +- ✅ **Early returns:** `if (!valid) return false;` for error conditions +- ✅ **Status objects:** Custom result types that combine success/failure with data + +**Examples of proper error handling:** +```cpp +// Good: Using return codes +bool initializeHardware() { + if (!setupPins()) { + FL_WARN("Failed to setup pins"); + return false; + } + return true; +} + +// Good: Using fl::optional +fl::optional calculateValue(int input) { + if (input < 0) { + return fl::nullopt; // No value, indicates error + } + return fl::make_optional(sqrt(input)); +} + +// Good: Using early returns +void processData(const uint8_t* data, size_t len) { + if (!data || len == 0) { + FL_WARN("Invalid input data"); + return; // Early return on error + } + // Process data... +} +``` + +## Memory Refresh Rule +**🚨 ALL AGENTS: Read examples/AGENTS.md before concluding example work to refresh memory about .ino file creation rules and example coding standards.** \ No newline at end of file diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/AdafruitBridge/AdafruitBridge.ino b/.pio/libdeps/esp01_1m/FastLED/examples/AdafruitBridge/AdafruitBridge.ino new file mode 100644 index 0000000..a15bca2 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/AdafruitBridge/AdafruitBridge.ino @@ -0,0 +1,27 @@ +// Simple Adafruit Bridge Demo +// +// This example shows how to use the Adafruit_NeoPixel library with FastLED. +// As long as the Adafruit_NeoPixel library is installed (that is #include +// is present), this example will work. Otherwise you'll get warnings about a missing driver. + +#define FASTLED_USE_ADAFRUIT_NEOPIXEL +#include "FastLED.h" + +#define DATA_PIN 3 +#define NUM_LEDS 10 + +CRGB leds[NUM_LEDS]; +uint8_t hue = 0; + +void setup() { + FastLED.addLeds(leds, NUM_LEDS); + FastLED.setBrightness(50); +} + +void loop() { + fill_rainbow(leds, NUM_LEDS, hue, 255/NUM_LEDS); + FastLED.show(); + + hue++; + delay(50); +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/AnalogOutput/AnalogOutput.ino b/.pio/libdeps/esp01_1m/FastLED/examples/AnalogOutput/AnalogOutput.ino new file mode 100644 index 0000000..19dffad --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/AnalogOutput/AnalogOutput.ino @@ -0,0 +1,72 @@ +/// @file AnalogOutput.ino +/// @brief Demonstrates how to use FastLED color functions even without a "pixel-addressible" smart LED strip. +/// @example AnalogOutput.ino + +#include +#include +#include "./compat.h" + + + +// Example showing how to use FastLED color functions +// even when you're NOT using a "pixel-addressible" smart LED strip. +// +// This example is designed to control an "analog" RGB LED strip +// (or a single RGB LED) being driven by Arduino PWM output pins. +// So this code never calls FastLED.addLEDs() or FastLED.show(). +// +// This example illustrates one way you can use just the portions +// of FastLED that you need. In this case, this code uses just the +// fast HSV color conversion code. +// +// In this example, the RGB values are output on three separate +// 'analog' PWM pins, one for red, one for green, and one for blue. + +#define REDPIN 5 +#define GREENPIN 6 +#define BLUEPIN 3 + +// showAnalogRGB: this is like FastLED.show(), but outputs on +// analog PWM output pins instead of sending data to an intelligent, +// pixel-addressable LED strip. +// +// This function takes the incoming RGB values and outputs the values +// on three analog PWM output pins to the r, g, and b values respectively. +void showAnalogRGB( const CRGB& rgb) +{ + analogWrite(REDPIN, rgb.r ); + analogWrite(GREENPIN, rgb.g ); + analogWrite(BLUEPIN, rgb.b ); +} + + + +// colorBars: flashes Red, then Green, then Blue, then Black. +// Helpful for diagnosing if you've mis-wired which is which. +void colorBars() +{ + showAnalogRGB( CRGB::Red ); delay(500); + showAnalogRGB( CRGB::Green ); delay(500); + showAnalogRGB( CRGB::Blue ); delay(500); + showAnalogRGB( CRGB::Black ); delay(500); +} + +void loop() +{ + static uint8_t hue; + hue = hue + 1; + // Use FastLED automatic HSV->RGB conversion + showAnalogRGB( CHSV( hue, 255, 255) ); + + delay(20); +} + + +void setup() { + pinMode(REDPIN, OUTPUT); + pinMode(GREENPIN, OUTPUT); + pinMode(BLUEPIN, OUTPUT); + + // Flash the "hello" color sequence: R, G, B, black. + colorBars(); +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/AnalogOutput/compat.h b/.pio/libdeps/esp01_1m/FastLED/examples/AnalogOutput/compat.h new file mode 100644 index 0000000..73ac60f --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/AnalogOutput/compat.h @@ -0,0 +1,42 @@ + + +#ifdef ARDUINO_ESP32_DEV +#include "fl/compiler_control.h" + +#include "platforms/esp/esp_version.h" +#include "driver/ledc.h" +#include "esp32-hal-ledc.h" + +// Ancient versions of ESP32 on Arduino (IDF < 4.0) did not have analogWrite() defined. +// IDF 4.4 and 5.0+ both have analogWrite() available, so this polyfill is only needed +// for very old IDF versions. We use a weak symbol so it auto-disables on newer platforms. +#if !ESP_IDF_VERSION_4_OR_HIGHER +FL_LINK_WEAK void analogWrite(uint8_t pin, int value) { + // Setup PWM channel for the pin if not already done + static bool channels_setup[16] = {false}; // ESP32 has 16 PWM channels + static uint8_t channel_counter = 0; + + // Find or assign channel for this pin + static uint8_t pin_to_channel[40] = {255}; // ESP32 has up to 40 GPIO pins, 255 = unassigned + if (pin_to_channel[pin] == 255) { + pin_to_channel[pin] = channel_counter++; + if (channel_counter > 15) channel_counter = 0; // Wrap around + } + + uint8_t channel = pin_to_channel[pin]; + + // Setup channel if not already done + if (!channels_setup[channel]) { + ledcSetup(channel, 5000, 8); // 5kHz frequency, 8-bit resolution + ledcAttachPin(pin, channel); + channels_setup[channel] = true; + } + + // Write PWM value (0-255 for 8-bit resolution) + ledcWrite(channel, value); +} +#endif // !ESP_IDF_VERSION_4_OR_HIGHER + + + +#endif // ESP32 diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Animartrix/Animartrix.ino b/.pio/libdeps/esp01_1m/FastLED/examples/Animartrix/Animartrix.ino new file mode 100644 index 0000000..76ef414 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Animartrix/Animartrix.ino @@ -0,0 +1,158 @@ +/// @file Animartrix.ino +/// @brief Demo of the Animatrix effects +/// @example Animartrix.ino +/// +/// This sketch is fully compatible with the FastLED web compiler. To use it do the following: +/// 1. Install Fastled: `pip install fastled` +/// 2. cd into this examples page. +/// 3. Run the FastLED web compiler at root: `fastled` +/// 4. When the compiler is done a web page will open. +/// +/// @author Stefan Petrick +/// @author Zach Vorhies (FastLED adaptation) +/// + +/* +This demo is best viewed using the FastLED compiler. + +Windows/MacOS binaries: https://github.com/FastLED/FastLED/releases + +Python + +Install: pip install fastled +Run: fastled +This will compile and preview the sketch in the browser, and enable +all the UI elements you see below. + + + +OVERVIEW: +This is the famouse Animartrix demo by Stefan Petrick. The effects are generated +using polor polar coordinates. The effects are very complex and powerful. +*/ + +#define FL_ANIMARTRIX_USES_FAST_MATH 1 + +/* +Performence notes @64x64: + * ESP32-S3: + * FL_ANIMARTRIX_USES_FAST_MATH 0: 143ms + * FL_ANIMARTRIX_USES_FAST_MATH 1: 90ms +*/ + +#include "FastLED.h" + +#if !SKETCH_HAS_LOTS_OF_MEMORY +// Platform does not have enough memory +void setup() {} +void loop() {} +#else + + +// DRAW TIME: 7ms + + +#include +#include "fl/json.h" +#include "fl/slice.h" +#include "fx/fx_engine.h" + +#include "fx/2d/animartrix.hpp" +#include "fl/ui.h" + +using namespace fl; + + +#define LED_PIN 3 +#define BRIGHTNESS 32 +#define COLOR_ORDER GRB + +#define MATRIX_WIDTH 64 +#define MATRIX_HEIGHT 64 + +#define NUM_LEDS (MATRIX_WIDTH * MATRIX_HEIGHT) + +#define FIRST_ANIMATION POLAR_WAVES + +// This is purely use for the web compiler to display the animartrix effects. +// This small led was chosen because otherwise the bloom effect is too strong. +#define LED_DIAMETER 0.15 // .15 cm or 1.5mm + + +#define POWER_LIMITER_ACTIVE +#define POWER_VOLTS 5 +#define POWER_MILLIAMPS 2000 + + +CRGB leds[NUM_LEDS]; +XYMap xyMap = XYMap::constructRectangularGrid(MATRIX_WIDTH, MATRIX_HEIGHT); + + +UITitle title("Animartrix"); +UIDescription description("Demo of the Animatrix effects. @author of fx is StefanPetrick"); + +UISlider brightness("Brightness", BRIGHTNESS, 0, 255); +UINumberField fxIndex("Animartrix - index", 0, 0, NUM_ANIMATIONS - 1); +UINumberField colorOrder("Color Order", 0, 0, 5); +UISlider timeSpeed("Time Speed", 1, -10, 10, .1); + + + +Animartrix animartrix(xyMap, FIRST_ANIMATION); +FxEngine fxEngine(NUM_LEDS); + +const bool kPowerLimiterActive = false; + +void setup_max_power() { + if (kPowerLimiterActive) { + FastLED.setMaxPowerInVoltsAndMilliamps(POWER_VOLTS, POWER_MILLIAMPS); // Set max power to 2 amps + } +} + + +void setup() { + Serial.begin(115200); + FL_WARN("*** SETUP ***"); + + auto screen_map = xyMap.toScreenMap(); + screen_map.setDiameter(LED_DIAMETER); + FastLED.addLeds(leds, NUM_LEDS) + .setCorrection(TypicalLEDStrip) + .setScreenMap(screen_map); + FastLED.setBrightness(brightness); + setup_max_power(); + fxEngine.addFx(animartrix); + + colorOrder.onChanged([](int value) { + switch(value) { + case 0: value = RGB; break; + case 1: value = RBG; break; + case 2: value = GRB; break; + case 3: value = GBR; break; + case 4: value = BRG; break; + case 5: value = BGR; break; + } + animartrix.setColorOrder(static_cast(value)); + }); +} + +void loop() { + FL_WARN("*** LOOP ***"); + uint32_t start = millis(); + FastLED.setBrightness(brightness); + fxEngine.setSpeed(timeSpeed); + static int lastFxIndex = -1; + if (fxIndex.value() != lastFxIndex) { + lastFxIndex = fxIndex; + animartrix.fxSet(fxIndex); + } + fxEngine.draw(millis(), leds); + uint32_t end = millis(); + FL_WARN("*** DRAW TIME: " << int(end - start) << "ms"); + FastLED.show(); + uint32_t end2 = millis(); + FL_WARN("*** SHOW + DRAW TIME: " << int(end2 - start) << "ms"); +} + + +#endif // __AVR__ diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Apa102/Apa102.ino b/.pio/libdeps/esp01_1m/FastLED/examples/Apa102/Apa102.ino new file mode 100644 index 0000000..00d8b4c --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Apa102/Apa102.ino @@ -0,0 +1,38 @@ + +#include +#include +#include + +#define NUM_LEDS 20 + +#define STRIP_DATA_PIN 1 +#define STRIP_CLOCK_PIN 2 + +CRGB leds[NUM_LEDS] = {0}; // Software gamma mode. + +void setup() { + delay(500); // power-up safety delay + // Two strips of LEDs, one in HD mode, one in software gamma mode. + FastLED.addLeds(leds, NUM_LEDS); +} + +uint8_t wrap_8bit(int i) { + // Modulo % operator here wraps a large "i" so that it is + // always in [0, 255] range when returned. For example, if + // "i" is 256, then this will return 0. If "i" is 257, + // then this will return 1. No matter how big the "i" is, the + // output range will always be [0, 255] + return i % 256; +} + +void loop() { + // Draw a linear ramp of brightnesses to showcase the difference between + // the HD and non-HD mode. + for (int i = 0; i < NUM_LEDS; i++) { + uint8_t brightness = map(i, 0, NUM_LEDS - 1, 0, 255); + CRGB c(brightness, brightness, brightness); // Just make a shade of white. + leds[i] = c; + } + FastLED.show(); // All LEDs are now displayed. + delay(8); // Wait 8 milliseconds until the next frame. +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Apa102HD/Apa102HD.ino b/.pio/libdeps/esp01_1m/FastLED/examples/Apa102HD/Apa102HD.ino new file mode 100644 index 0000000..b053537 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Apa102HD/Apa102HD.ino @@ -0,0 +1,88 @@ +/// @file Apa102HD.ino +/// @brief Example showing how to use the APA102HD gamma correction. +/// +/// In this example we compare two strips of LEDs. +/// One strip is in HD mode, the other is in software gamma mode. +/// +/// Each strip is a linear ramp of brightnesses, from 0 to 255. +/// Showcasing all the different brightnesses. +/// +/// Why do we love gamma correction? Gamma correction more closely +/// matches how humans see light. Led values are measured in fractions +/// of max power output (1/255, 2/255, etc.), while humans see light +/// in a logarithmic way. Gamma correction converts to this eye friendly +/// curve. Gamma correction wants a LED with a high bit depth. The APA102 +/// gives us the standard 3 components (red, green, blue) with 8 bits each, it +/// *also* has a 5 bit brightness component. This gives us a total of 13 bits, +/// which allows us to achieve a higher dynamic range. This means deeper fades. +/// +/// Example: +/// CRGB leds[NUM_LEDS] = {0}; +/// void setup() { +/// FastLED.addLeds< +/// APA102HD, // <--- This selects HD mode. +/// STRIP_0_DATA_PIN, +/// STRIP_0_CLOCK_PIN, +/// RGB +/// >(leds, NUM_LEDS); +/// } + + +#include +#include +#include + +#define NUM_LEDS 20 +// uint8_t DATA_PIN, uint8_t CLOCK_PIN, + +#define STRIP_0_DATA_PIN 1 +#define STRIP_0_CLOCK_PIN 2 +#define STRIP_1_DATA_PIN 3 +#define STRIP_1_CLOCK_PIN 4 + + +CRGB leds_hd[NUM_LEDS] = {0}; // HD mode implies gamma. +CRGB leds[NUM_LEDS] = {0}; // Software gamma mode. + +// This is the regular gamma correction function that we used to have +// to do. It's used here to showcase the difference between APA102HD +// mode which does the gamma correction for you. +CRGB software_gamma(const CRGB& in) { + CRGB out; + // dim8_raw are the old gamma correction functions. + out.r = dim8_raw(in.r); + out.g = dim8_raw(in.g); + out.b = dim8_raw(in.b); + return out; +} + +void setup() { + delay(500); // power-up safety delay + // Two strips of LEDs, one in HD mode, one in software gamma mode. + FastLED.addLeds(leds_hd, NUM_LEDS); + FastLED.addLeds(leds, NUM_LEDS); +} + +uint8_t wrap_8bit(int i) { + // Module % operator here wraps a large "i" so that it is + // always in [0, 255] range when returned. For example, if + // "i" is 256, then this will return 0. If "i" is 257 + // then this will return 1. No matter how big the "i" is, the + // output range will always be [0, 255] + return i % 256; +} + +void loop() { + // Draw a a linear ramp of brightnesses to showcase the difference between + // the HD and non-HD mode. + for (int i = 0; i < NUM_LEDS; i++) { + uint8_t brightness = map(i, 0, NUM_LEDS - 1, 0, 255); + CRGB c(brightness, brightness, brightness); // Just make a shade of white. + leds_hd[i] = c; // The APA102HD leds do their own gamma correction. + CRGB c_gamma_corrected = software_gamma(c); + leds[i] = c_gamma_corrected; // Set the software gamma corrected + // values to the other strip. + } + FastLED.show(); // All leds are now written out. + delay(8); // Wait 8 milliseconds until the next frame. +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Apa102HDOverride/Apa102HDOverride.ino b/.pio/libdeps/esp01_1m/FastLED/examples/Apa102HDOverride/Apa102HDOverride.ino new file mode 100644 index 0000000..4b43aa9 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Apa102HDOverride/Apa102HDOverride.ino @@ -0,0 +1,50 @@ +/// @file Apa102HD.ino +/// @brief Example showing how to use the APA102HD gamma correction with user override. + +#define FASTLED_FIVE_BIT_HD_BITSHIFT_FUNCTION_OVERRIDE + +#include +#include +#include + +#define NUM_LEDS 20 +// uint8_t DATA_PIN, uint8_t CLOCK_PIN, + +#define STRIP_0_DATA_PIN 1 +#define STRIP_0_CLOCK_PIN 2 +#define STRIP_1_DATA_PIN 3 +#define STRIP_1_CLOCK_PIN 4 + +void fl::five_bit_hd_gamma_bitshift(CRGB colors, + CRGB scale, + uint8_t global_brightness, + CRGB* out_colors, + uint8_t *out_power_5bit) { + // all 0 values for output + *out_colors = CRGB(0, 0, 0); + *out_power_5bit = 0; + Serial.println("Override function called"); +} + +CRGB leds_hd[NUM_LEDS] = {0}; // HD mode implies gamma. + + +void setup() { + delay(500); // power-up safety delay + // Two strips of LEDs, one in HD mode, one in software gamma mode. + FastLED.addLeds( + leds_hd, NUM_LEDS); +} + +void loop() { + // Draw a a linear ramp of brightnesses to showcase the difference between + // the HD and non-HD mode. + for (int i = 0; i < NUM_LEDS; i++) { + uint8_t brightness = map(i, 0, NUM_LEDS - 1, 0, 255); + CRGB c(brightness, brightness, + brightness); // Just make a shade of white. + leds_hd[i] = c; // The APA102HD leds do their own gamma correction. + } + FastLED.show(); // All leds are now written out. + delay(8); // Wait 8 milliseconds until the next frame. +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Async/Async.h b/.pio/libdeps/esp01_1m/FastLED/examples/Async/Async.h new file mode 100644 index 0000000..876e731 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Async/Async.h @@ -0,0 +1,35 @@ +// @file examples/TaskExample/TaskExample.ino +// @brief Example showing how to use the fl::task API + +#include "FastLED.h" +#include "fl/task.h" +#include "fl/async.h" + +#define NUM_LEDS 60 +#define DATA_PIN 5 + +CRGB leds[NUM_LEDS]; +CRGB current_color = CRGB::Black; + +void setup() { + FastLED.addLeds(leds, NUM_LEDS); + FastLED.setBrightness(16); + + // Create a task that runs every 100ms to change color + auto colorPicker = fl::task::every_ms(100, FL_TRACE) + .then([] { + current_color = CHSV(random8(), 255, 255); + }); + + // Create a task that runs at 60fps to update the LEDs + auto displayTask = fl::task::at_framerate(60, FL_TRACE) + .then([] { + fill_solid(leds, NUM_LEDS, current_color); + FastLED.show(); + }); +} + +void loop() { + // Yield to allow other operations to run + fl::async_run(); +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Async/Async.ino b/.pio/libdeps/esp01_1m/FastLED/examples/Async/Async.ino new file mode 100644 index 0000000..287280a --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Async/Async.ino @@ -0,0 +1,19 @@ +#include +#include "fl/sketch_macros.h" + +#if SKETCH_HAS_LOTS_OF_MEMORY + +#include "./Async.h" + +#else + +void setup() { + Serial.begin(9600); +} + +void loop() { + Serial.println("Not enough memory"); + delay(1000); +} + +#endif diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Audio/Audio.ino b/.pio/libdeps/esp01_1m/FastLED/examples/Audio/Audio.ino new file mode 100644 index 0000000..d46057b --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Audio/Audio.ino @@ -0,0 +1,39 @@ +/// @file Audio.ino +/// @brief Audio visualization example with XY mapping +/// @example Audio.ino +/// +/// This sketch is fully compatible with the FastLED web compiler. To use it do the following: +/// 1. Install Fastled: `pip install fastled` +/// 2. cd into this examples page. +/// 3. Run the FastLED web compiler at root: `fastled` +/// 4. When the compiler is done a web page will open. + +/* +This demo is best viewed using the FastLED compiler. + +Windows/MacOS binaries: https://github.com/FastLED/FastLED/releases + +Python + +Install: pip install fastled +Run: fastled +This will compile and preview the sketch in the browser, and enable +all the UI elements you see below. +*/ + +// #define SIMPLE_EXAMPLE + + +#include + +#if !SKETCH_HAS_LOTS_OF_MEMORY +// Platform does not have enough memory +void setup() {} +void loop() {} +#else +#ifdef SIMPLE_EXAMPLE +#include "simple/simple.h" +#else +#include "advanced/advanced.h" +#endif +#endif diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Audio/advanced/README.md b/.pio/libdeps/esp01_1m/FastLED/examples/Audio/advanced/README.md new file mode 100644 index 0000000..f8f775b --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Audio/advanced/README.md @@ -0,0 +1,148 @@ +# Audio Reactive Visualizations + +This example demonstrates various audio-reactive visualization modes using FastLED. It processes real-time audio input and creates stunning visual effects synchronized to music. + +## Features + +### Visualization Modes + +1. **Spectrum Bars** - Classic frequency spectrum analyzer with vertical bars +2. **Radial Spectrum** - Circular frequency visualization radiating from center +3. **Waveform** - Real-time audio waveform display +4. **VU Meter** - Traditional volume unit meter with RMS and peak levels +5. **Matrix Rain** - Audio-reactive digital rain effect +6. **Fire Effect** - Flame simulation that responds to audio intensity +7. **Plasma Wave** - Animated plasma patterns modulated by audio + +### Audio Processing + +- **Real-time FFT Analysis** - Frequency spectrum analysis +- **Beat Detection** - Automatic beat detection with adjustable sensitivity +- **Auto Gain Control** - Automatically adjusts to varying audio levels +- **Noise Floor Filtering** - Removes background noise +- **Peak Detection** - Tracks audio peaks with smoothing + +### Visual Controls + +- **7 Color Palettes** - Rainbow, Heat, Ocean, Forest, Party, Lava, Cloud +- **Brightness Control** - Adjustable LED brightness +- **Fade Speed** - Control trail/persistence effects +- **Mirror Mode** - Create symmetrical displays +- **Beat Flash** - Visual feedback on beat detection + +## Hardware Requirements + +- **Controller**: ESP32, Teensy, or other platform with sufficient memory +- **LED Matrix**: 100x100 pixels (10,000 LEDs total) +- **Memory**: Requires `SKETCH_HAS_LOTS_OF_MEMORY` (not suitable for Arduino UNO) +- **Audio Input**: Microphone or line-in audio source + +## Wiring + +``` +LED Matrix: +- Data Pin: GPIO 3 (configurable via LED_PIN) +- Power: 5V (ensure adequate power supply for 10,000 LEDs!) +- Ground: Common ground with controller + +Audio Input: +- Follow your platform's audio input configuration +``` + +## Configuration + +### Display Settings +```cpp +#define WIDTH 100 // Matrix width +#define HEIGHT 100 // Matrix height +#define LED_PIN 3 // Data pin for LEDs +#define LED_TYPE WS2812B // LED chipset +#define COLOR_ORDER GRB // Color order +``` + +### Audio Settings +```cpp +#define SAMPLE_RATE 44100 // Audio sample rate +#define FFT_SIZE 512 // FFT size for frequency analysis +``` + +## UI Controls + +### Master Controls +- **Enable Audio** - Toggle audio processing on/off +- **Visualization Mode** - Select from 7 different modes + +### Audio Controls +- **Audio Gain** - Manual gain adjustment (0.1 - 5.0) +- **Noise Floor** - Background noise threshold (0.0 - 1.0) +- **Auto Gain** - Enable automatic gain control + +### Visual Controls +- **Brightness** - LED brightness (0 - 255) +- **Fade Speed** - Trail effect speed (0 - 255) +- **Color Palette** - Choose color scheme +- **Mirror Mode** - Enable symmetrical display + +### Beat Detection +- **Beat Detection** - Enable/disable beat detection +- **Beat Sensitivity** - Adjust detection threshold (0.5 - 3.0) +- **Beat Flash** - Enable visual flash on beats + +## Usage + +1. Upload the sketch to your controller +2. Connect your LED matrix +3. Provide audio input (microphone or line-in) +4. Use the web UI to control visualizations +5. Select different modes and adjust parameters in real-time + +## Performance Tips + +- This example requires significant processing power +- Reduce matrix size if experiencing lag +- Disable beat detection for lower CPU usage +- Use simpler visualization modes on slower processors + +## Customization + +### Adding New Visualizations + +1. Add your mode name to the `visualMode` dropdown +2. Create a new `drawYourMode()` function +3. Add a case in the main switch statement +4. Implement your visualization logic + +### Modifying Color Palettes + +Edit the `getCurrentPalette()` function to add custom palettes: +```cpp +case 7: return YourCustomPalette_p; +``` + +### Adjusting Matrix Size + +For different matrix sizes, modify: +```cpp +#define WIDTH your_width +#define HEIGHT your_height +``` + +## Memory Usage + +This example uses approximately: +- 30KB for LED buffer (100x100 RGB) +- 2KB for FFT data +- 1KB for audio buffers +- Additional memory for effect buffers + +## Troubleshooting + +- **No visualization**: Check audio input and "Enable Audio" setting +- **Choppy animation**: Reduce matrix size or disable some features +- **No beat detection**: Increase beat sensitivity or check audio levels +- **Dim display**: Increase brightness or check power supply +- **Compilation error**: Ensure platform has sufficient memory + +## Credits + +This example demonstrates the audio processing capabilities of FastLED, including FFT analysis, beat detection, and various visualization techniques suitable for LED art installations, music visualizers, and interactive displays. diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Audio/advanced/advanced.h b/.pio/libdeps/esp01_1m/FastLED/examples/Audio/advanced/advanced.h new file mode 100644 index 0000000..7249994 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Audio/advanced/advanced.h @@ -0,0 +1,562 @@ +/// @file AudioReactive.ino +/// @brief Audio reactive visualization with multiple modes +/// @example AudioReactive.ino + +#include +#include + + + +#include "fl/ui.h" +#include "fl/audio.h" +#include "fl/fft.h" +#include "fl/xymap.h" +#include "fl/math.h" +#include "fl/math_macros.h" + +#include "fl/compiler_control.h" + +// This is used by fastled because we have extremely strict compiler settings. +// Stock Arduino/Platformio does not need these. +FL_DISABLE_WARNING_PUSH +FL_DISABLE_WARNING(float-conversion) +FL_DISABLE_WARNING(sign-conversion) + + +using namespace fl; + +// Display configuration +// For WebAssembly, use a smaller display to avoid memory issues +#ifdef __EMSCRIPTEN__ +#define WIDTH 32 +#define HEIGHT 32 +#else +#define WIDTH 64 +#define HEIGHT 64 +#endif +#define NUM_LEDS (WIDTH * HEIGHT) +#define LED_PIN 3 +#define LED_TYPE WS2812B +#define COLOR_ORDER GRB + +// Audio configuration +#define SAMPLE_RATE 44100 +#define FFT_SIZE 512 + +// UI Elements +UITitle title("Audio Reactive Visualizations"); +UIDescription description("Real-time audio visualizations with beat detection and multiple modes"); + +// Master controls +UICheckbox enableAudio("Enable Audio", true); +UIDropdown visualMode("Visualization Mode", + {"Spectrum Bars", "Radial Spectrum", "Waveform", "VU Meter", "Matrix Rain", "Fire Effect", "Plasma Wave"}); + +// Audio controls +UISlider audioGain("Audio Gain", 1.0f, 0.1f, 5.0f, 0.1f); +UISlider noiseFloor("Noise Floor", 0.1f, 0.0f, 1.0f, 0.01f); +UICheckbox autoGain("Auto Gain", true); + +// Visual controls +UISlider brightness("Brightness", 128, 0, 255, 1); +UISlider fadeSpeed("Fade Speed", 20, 0, 255, 1); +UIDropdown colorPalette("Color Palette", + {"Rainbow", "Heat", "Ocean", "Forest", "Party", "Lava", "Cloud"}); +UICheckbox mirrorMode("Mirror Mode", false); + +// Beat detection +UICheckbox beatDetect("Beat Detection", true); +UISlider beatSensitivity("Beat Sensitivity", 1.5f, 0.5f, 3.0f, 0.1f); +UICheckbox beatFlash("Beat Flash", true); + +// Audio input +UIAudio audio("Audio Input"); + +// Global variables +CRGB leds[NUM_LEDS]; +XYMap xyMap(WIDTH, HEIGHT, false); +SoundLevelMeter soundMeter(0.0, 0.0); + +// Audio processing variables - keep these smaller for WebAssembly +static const int NUM_BANDS = 16; // Reduced from 32 +float fftSmooth[NUM_BANDS] = {0}; +float beatHistory[20] = {0}; // Reduced from 43 +int beatHistoryIndex = 0; +float beatAverage = 0; +float beatVariance = 0; +uint32_t lastBeatTime = 0; +bool isBeat = false; +float autoGainValue = 1.0f; +float peakLevel = 0; + +// Visual effect variables +uint8_t hue = 0; +// Remove large static arrays for WebAssembly +#ifndef __EMSCRIPTEN__ +float plasma[WIDTH][HEIGHT] = {{0}}; +uint8_t fireBuffer[WIDTH][HEIGHT] = {{0}}; +#endif + +// Get current color palette +CRGBPalette16 getCurrentPalette() { + switch(colorPalette.as_int()) { + case 0: return CRGBPalette16(RainbowColors_p); + case 1: return CRGBPalette16(HeatColors_p); + case 2: return CRGBPalette16(OceanColors_p); + case 3: return CRGBPalette16(ForestColors_p); + case 4: return CRGBPalette16(PartyColors_p); + case 5: return CRGBPalette16(LavaColors_p); + case 6: return CRGBPalette16(CloudColors_p); + default: return CRGBPalette16(RainbowColors_p); + } +} + +// Beat detection algorithm +bool detectBeat(float energy) { + beatHistory[beatHistoryIndex] = energy; + beatHistoryIndex = (beatHistoryIndex + 1) % 20; + + // Calculate average + beatAverage = 0; + for (int i = 0; i < 20; i++) { + beatAverage += beatHistory[i]; + } + beatAverage /= 20.0f; + + // Calculate variance + beatVariance = 0; + for (int i = 0; i < 20; i++) { + float diff = beatHistory[i] - beatAverage; + beatVariance += diff * diff; + } + beatVariance /= 20.0f; + + // Detect beat + float threshold = beatAverage + (beatSensitivity.value() * sqrt(beatVariance)); + uint32_t currentTime = millis(); + + if (energy > threshold && (currentTime - lastBeatTime) > 80) { + lastBeatTime = currentTime; + return true; + } + return false; +} + +// Update auto gain +void updateAutoGain(float level) { + if (!autoGain) { + autoGainValue = 1.0f; + return; + } + + static float targetLevel = 0.7f; + static float avgLevel = 0.0f; + + avgLevel = avgLevel * 0.95f + level * 0.05f; + + if (avgLevel > 0.01f) { + float gainAdjust = targetLevel / avgLevel; + gainAdjust = fl::clamp(gainAdjust, 0.5f, 2.0f); + autoGainValue = autoGainValue * 0.9f + gainAdjust * 0.1f; + } +} + +// Clear display +void clearDisplay() { + if (fadeSpeed.as_int() == 0) { + fill_solid(leds, NUM_LEDS, CRGB::Black); + } else { + fadeToBlackBy(leds, NUM_LEDS, fadeSpeed.as_int()); + } +} + +// Visualization: Spectrum Bars +void drawSpectrumBars(FFTBins* fft, float /* peak */) { + clearDisplay(); + CRGBPalette16 palette = getCurrentPalette(); + + int barWidth = WIDTH / NUM_BANDS; + + for (size_t band = 0; band < NUM_BANDS && band < fft->bins_db.size(); band++) { + float magnitude = fft->bins_db[band]; + + // Apply noise floor + magnitude = magnitude / 100.0f; // Normalize from dB + magnitude = MAX(0.0f, magnitude - noiseFloor.value()); + + // Smooth the FFT + fftSmooth[band] = fftSmooth[band] * 0.8f + magnitude * 0.2f; + magnitude = fftSmooth[band]; + + // Apply gain + magnitude *= audioGain.value() * autoGainValue; + magnitude = fl::clamp(magnitude, 0.0f, 1.0f); + + int barHeight = magnitude * HEIGHT; + int xStart = band * barWidth; + + for (int x = 0; x < barWidth - 1; x++) { + for (int y = 0; y < barHeight; y++) { + uint8_t colorIndex = fl::map_range( + float(y) / HEIGHT, 0, 1, 0, 255 + ); + CRGB color = ColorFromPalette(palette, colorIndex + hue); + + int ledIndex = xyMap(xStart + x, y); + if (ledIndex >= 0 && ledIndex < NUM_LEDS) { + leds[ledIndex] = color; + } + + if (mirrorMode) { + int mirrorIndex = xyMap(WIDTH - 1 - (xStart + x), y); + if (mirrorIndex >= 0 && mirrorIndex < NUM_LEDS) { + leds[mirrorIndex] = color; + } + } + } + } + } +} + +// Visualization: Radial Spectrum +void drawRadialSpectrum(FFTBins* fft, float /* peak */) { + clearDisplay(); + CRGBPalette16 palette = getCurrentPalette(); + + int centerX = WIDTH / 2; + int centerY = HEIGHT / 2; + + for (size_t angle = 0; angle < 360; angle += 6) { // Reduced resolution + size_t band = (angle / 6) % NUM_BANDS; + if (band >= fft->bins_db.size()) continue; + + float magnitude = fft->bins_db[band] / 100.0f; + magnitude = MAX(0.0f, magnitude - noiseFloor.value()); + magnitude *= audioGain.value() * autoGainValue; + magnitude = fl::clamp(magnitude, 0.0f, 1.0f); + + int radius = magnitude * (MIN(WIDTH, HEIGHT) / 2); + + for (int r = 0; r < radius; r++) { + int x = centerX + (r * cosf(angle * PI / 180.0f)); + int y = centerY + (r * sinf(angle * PI / 180.0f)); + + if (x >= 0 && x < WIDTH && y >= 0 && y < HEIGHT) { + uint8_t colorIndex = fl::map_range(r, 0, radius, 255, 0); + int ledIndex = xyMap(x, y); + if (ledIndex >= 0 && ledIndex < NUM_LEDS) { + leds[ledIndex] = ColorFromPalette(palette, colorIndex + hue); + } + } + } + } +} + +// Visualization: Logarithmic Waveform (prevents saturation) +void drawWaveform(const Slice& pcm, float /* peak */) { + clearDisplay(); + CRGBPalette16 palette = getCurrentPalette(); + + int samplesPerPixel = pcm.size() / WIDTH; + int centerY = HEIGHT / 2; + + for (size_t x = 0; x < WIDTH; x++) { + size_t sampleIndex = x * samplesPerPixel; + if (sampleIndex >= pcm.size()) break; + + // Get the raw sample value + float sample = float(pcm[sampleIndex]) / 32768.0f; // Normalize to -1.0 to 1.0 + + // Apply logarithmic scaling to prevent saturation + float absSample = fabsf(sample); + float logAmplitude = 0.0f; + + if (absSample > 0.001f) { // Avoid log(0) + // Logarithmic compression: log10(1 + gain * sample) + float scaledSample = absSample * audioGain.value() * autoGainValue; + logAmplitude = log10f(1.0f + scaledSample * 9.0f) / log10f(10.0f); // Normalize to 0-1 + } + + // Apply smooth sensitivity curve + logAmplitude = powf(logAmplitude, 0.7f); // Gamma correction for better visual response + + // Calculate amplitude in pixels + int amplitude = int(logAmplitude * (HEIGHT / 2)); + amplitude = fl::clamp(amplitude, 0, HEIGHT / 2); + + // Preserve the sign for proper waveform display + if (sample < 0) amplitude = -amplitude; + + // Color mapping based on amplitude intensity + uint8_t colorIndex = fl::map_range(abs(amplitude), 0, HEIGHT/2, 40, 255); + CRGB color = ColorFromPalette(palette, colorIndex + hue); + + // Apply brightness scaling for low amplitudes + if (abs(amplitude) < HEIGHT / 4) { + color.fadeToBlackBy(128 - (abs(amplitude) * 512 / HEIGHT)); + } + + // Draw vertical line from center + if (amplitude == 0) { + // Draw center point for zero amplitude + int ledIndex = xyMap(x, centerY); + if (ledIndex >= 0 && ledIndex < NUM_LEDS) { + leds[ledIndex] = color.fadeToBlackBy(200); + } + } else { + // Draw line from center to amplitude + int startY = (amplitude > 0) ? centerY : centerY + amplitude; + int endY = (amplitude > 0) ? centerY + amplitude : centerY; + + for (int y = startY; y <= endY; y++) { + if (y >= 0 && y < HEIGHT) { + int ledIndex = xyMap(x, y); + if (ledIndex >= 0 && ledIndex < NUM_LEDS) { + // Fade edges for smoother appearance + CRGB pixelColor = color; + if (y == startY || y == endY) { + pixelColor.fadeToBlackBy(100); + } + leds[ledIndex] = pixelColor; + } + } + } + } + } +} + +// Visualization: VU Meter +void drawVUMeter(float rms, float peak) { + clearDisplay(); + CRGBPalette16 palette = getCurrentPalette(); + + // RMS level bar + int rmsWidth = rms * WIDTH * audioGain.value() * autoGainValue; + rmsWidth = MIN(rmsWidth, WIDTH); + + for (int x = 0; x < rmsWidth; x++) { + for (int y = HEIGHT/3; y < 2*HEIGHT/3; y++) { + uint8_t colorIndex = fl::map_range(x, 0, WIDTH, 0, 255); + int ledIndex = xyMap(x, y); + if (ledIndex >= 0 && ledIndex < NUM_LEDS) { + leds[ledIndex] = ColorFromPalette(palette, colorIndex); + } + } + } + + // Peak indicator + int peakX = peak * WIDTH * audioGain.value() * autoGainValue; + peakX = MIN(peakX, WIDTH - 1); + + for (int y = HEIGHT/4; y < 3*HEIGHT/4; y++) { + int ledIndex = xyMap(peakX, y); + if (ledIndex >= 0 && ledIndex < NUM_LEDS) { + leds[ledIndex] = CRGB::White; + } + } + + // Beat indicator + if (isBeat && beatFlash) { + for (int x = 0; x < WIDTH; x++) { + int ledIndex1 = xyMap(x, 0); + int ledIndex2 = xyMap(x, HEIGHT - 1); + if (ledIndex1 >= 0 && ledIndex1 < NUM_LEDS) leds[ledIndex1] = CRGB::White; + if (ledIndex2 >= 0 && ledIndex2 < NUM_LEDS) leds[ledIndex2] = CRGB::White; + } + } +} + +// Visualization: Matrix Rain +void drawMatrixRain(float peak) { + // Shift everything down + for (int x = 0; x < WIDTH; x++) { + for (int y = HEIGHT - 1; y > 0; y--) { + int currentIndex = xyMap(x, y); + int aboveIndex = xyMap(x, y - 1); + if (currentIndex >= 0 && currentIndex < NUM_LEDS && + aboveIndex >= 0 && aboveIndex < NUM_LEDS) { + leds[currentIndex] = leds[aboveIndex]; + leds[currentIndex].fadeToBlackBy(40); + } + } + } + + // Add new drops based on audio + int numDrops = peak * WIDTH * audioGain.value() * autoGainValue; + for (int i = 0; i < numDrops; i++) { + int x = random(WIDTH); + int ledIndex = xyMap(x, 0); + if (ledIndex >= 0 && ledIndex < NUM_LEDS) { + leds[ledIndex] = CHSV(96, 255, 255); // Green + } + } +} + +// Visualization: Fire Effect (simplified for WebAssembly) +void drawFireEffect(float peak) { + // Simple fire effect without buffer + clearDisplay(); + + // Add heat at bottom based on audio + int heat = 100 + (peak * 155 * audioGain.value() * autoGainValue); + heat = MIN(heat, 255); + + for (int x = 0; x < WIDTH; x++) { + for (int y = 0; y < HEIGHT; y++) { + // Simple gradient from bottom to top + int heatLevel = heat * (HEIGHT - y) / HEIGHT; + heatLevel = heatLevel * random(80, 120) / 100; // Add randomness + heatLevel = MIN(heatLevel, 255); + + int ledIndex = xyMap(x, y); + if (ledIndex >= 0 && ledIndex < NUM_LEDS) { + leds[ledIndex] = HeatColor(heatLevel); + } + } + } +} + +// Visualization: Plasma Wave +void drawPlasmaWave(float peak) { + static float time = 0; + time += 0.05f + (peak * 0.2f); + + CRGBPalette16 palette = getCurrentPalette(); + + for (int x = 0; x < WIDTH; x++) { + for (int y = 0; y < HEIGHT; y++) { + float value = sinf(x * 0.1f + time) + + sinf(y * 0.1f - time) + + sinf((x + y) * 0.1f + time) + + sinf(sqrtf(x * x + y * y) * 0.1f - time); + + value = (value + 4) / 8; // Normalize to 0-1 + value *= audioGain.value() * autoGainValue; + + uint8_t colorIndex = value * 255; + int ledIndex = xyMap(x, y); + if (ledIndex >= 0 && ledIndex < NUM_LEDS) { + leds[ledIndex] = ColorFromPalette(palette, colorIndex + hue); + } + } + } +} + +void setup() { + Serial.begin(115200); + delay(1000); + + Serial.println("Audio Reactive Visualizations"); + Serial.println("Initializing..."); + Serial.print("Display size: "); + Serial.print(WIDTH); + Serial.print("x"); + Serial.println(HEIGHT); + + // Initialize LEDs + FastLED.addLeds(leds, NUM_LEDS); + FastLED.setBrightness(brightness.as_int()); + FastLED.clear(); + FastLED.show(); + + // Set up UI callbacks + brightness.onChanged([](float value) { + FastLED.setBrightness(value); + }); + + Serial.println("Setup complete!"); +} + +void loop() { + // Check if audio is enabled + if (!enableAudio) { + // Show a simple test pattern + fill_rainbow(leds, NUM_LEDS, hue++, 7); + FastLED.show(); + delay(20); + return; + } + + // Process only one audio sample per frame to avoid accumulation + AudioSample sample = audio.next(); + if (sample.isValid()) { + // Update sound meter + soundMeter.processBlock(sample.pcm()); + + // Get audio levels + float rms = sample.rms() / 32768.0f; + + // Calculate peak + int32_t maxSample = 0; + for (size_t i = 0; i < sample.pcm().size(); i++) { + int32_t absSample = fabsf(sample.pcm()[i]); + if (absSample > maxSample) { + maxSample = absSample; + } + } + float peak = float(maxSample) / 32768.0f; + peakLevel = peakLevel * 0.9f + peak * 0.1f; // Smooth peak + + // Update auto gain + updateAutoGain(rms); + + // Beat detection + if (beatDetect) { + isBeat = detectBeat(peak); + } + + // Get FFT data - create local FFTBins to avoid accumulation + FFTBins fftBins(NUM_BANDS); + sample.fft(&fftBins); + + // Update color animation + hue += 1; + + // Apply beat flash + if (isBeat && beatFlash) { + for (int i = 0; i < NUM_LEDS; i++) { + leds[i].fadeLightBy(-50); // Make brighter + } + } + + // Draw selected visualization + switch (visualMode.as_int()) { + case 0: // Spectrum Bars + drawSpectrumBars(&fftBins, peakLevel); + break; + + case 1: // Radial Spectrum + drawRadialSpectrum(&fftBins, peakLevel); + break; + + case 2: // Waveform + drawWaveform(sample.pcm(), peakLevel); + break; + + case 3: // VU Meter + drawVUMeter(rms, peakLevel); + break; + + case 4: // Matrix Rain + drawMatrixRain(peakLevel); + break; + + case 5: // Fire Effect + drawFireEffect(peakLevel); + break; + + case 6: // Plasma Wave + drawPlasmaWave(peakLevel); + break; + } + } + + FastLED.show(); + + // Add a small delay to prevent tight loops in WebAssembly + #ifdef __EMSCRIPTEN__ + delay(1); + #endif +} + +FL_DISABLE_WARNING_POP diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Audio/simple/README.md b/.pio/libdeps/esp01_1m/FastLED/examples/Audio/simple/README.md new file mode 100644 index 0000000..1cf0423 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Audio/simple/README.md @@ -0,0 +1,157 @@ +# Audio Reactive Visualization Example + +This example demonstrates advanced audio reactive visualization capabilities using FastLED. It processes real-time audio input and creates stunning visual effects synchronized to music. + +## Features + +### Visualization Modes + +1. **Spectrum Analyzer** - Classic frequency spectrum display with customizable colors +2. **Waveform** - Real-time audio waveform visualization +3. **VU Meter** - Traditional volume unit meter with RMS and peak indicators +4. **Spectrogram** - Scrolling frequency analysis over time +5. **Combined** - Split-screen showing both spectrum and waveform +6. **Reactive Patterns** - Dynamic patterns that respond to audio energy and beats + +### Audio Processing + +- **Real-time FFT** - Fast Fourier Transform for frequency analysis +- **Beat Detection** - Automatic beat detection with adjustable sensitivity +- **Auto Gain Control (AGC)** - Automatically adjusts to varying audio levels +- **Noise Floor Filtering** - Removes background noise for cleaner visuals +- **Attack/Decay/Sustain** - Professional audio envelope controls + +### Visual Controls + +- **Multiple Color Palettes** - Heat, Rainbow, Ocean, Forest, Lava, Cloud, Party +- **Mirror Mode** - Creates symmetrical displays +- **Brightness Control** - Adjustable LED brightness +- **Fade Effects** - Smooth transitions with adjustable fade time +- **Color Animation** - Animated color cycling with speed control +- **Smoothing** - Optional smoothing for less jittery displays + +### Advanced Features + +- **Frequency Band Analysis** - 8-band frequency analyzer for detailed audio analysis +- **FFT Smoothing** - Temporal smoothing of frequency data +- **Logarithmic Scale** - Optional log scale for frequency display +- **Freeze Frame** - Pause the visualization at any moment +- **Frame Advance** - Step through frozen frames + +## UI Controls + +### Main Controls +- **Enable Audio Reactive Mode** - Master on/off switch for audio processing +- **Visualization Mode** - Dropdown to select visualization type + +### Audio Processing Group +- **Fade Time** - How quickly levels decay (0-4 seconds) +- **Attack Time** - How quickly levels rise (0-4 seconds) +- **Output Smoothing** - Final output smoothing (0-2 seconds) +- **Audio Gain** - Manual gain adjustment (0.1-5.0) +- **Noise Floor** - Background noise threshold (-80 to -20 dB) + +### Visual Controls Group +- **Fade to Black** - Trail/persistence effect (0-50) +- **Brightness** - LED brightness (0-255) +- **Color Speed** - Animation speed (0.1-5.0) +- **Color Palette** - Choose from 7 palettes +- **Mirror Mode** - Enable symmetrical display +- **Smoothing** - Enable temporal smoothing + +### FFT Controls Group +- **Min Frequency** - Lower frequency bound (20-1000 Hz) +- **Max Frequency** - Upper frequency bound (1000-20000 Hz) +- **Logarithmic Scale** - Use log scale for frequency +- **FFT Smoothing** - Smoothing factor (0-0.95) + +### Advanced Controls Group +- **Freeze Frame** - Pause visualization +- **Advance Frame** - Step forward when frozen +- **Beat Detection** - Enable beat detection +- **Beat Sensitivity** - Beat detection threshold (0.5-3.0) +- **Auto Gain Control** - Enable automatic gain adjustment + +## Hardware Setup + +### LED Configuration +- Default: 128x128 LED matrix (16,384 LEDs) +- Downscaled to 64x64 for output (4,096 LEDs) +- Data pin: GPIO 3 (configurable) +- LED type: WS2812B (Neopixel) + +### Audio Input +The example uses the FastLED audio system which can accept input from: +- Microphone (real-time audio capture) +- Audio file playback +- System audio (on supported platforms) + +## Usage + +1. **Basic Operation** + - Upload the sketch to your controller + - Connect your LED matrix + - Provide audio input + - Use the web UI to control visualization + +2. **Optimizing for Your Setup** + - Adjust the noise floor if visualization is too sensitive/insensitive + - Use AGC for varying audio levels + - Tune beat sensitivity for your music style + - Experiment with different color palettes and speeds + +3. **Performance Tips** + - Reduce matrix size for slower controllers + - Disable smoothing for more responsive display + - Use simpler visualization modes for lower CPU usage + +## Code Structure + +### Main Components + +1. **Audio Processing Pipeline** + ```cpp + AudioSample → FFT → Band Analysis → Beat Detection → Visualization + ``` + +2. **Visualization Functions** + - `drawSpectrumAnalyzer()` - Frequency spectrum bars + - `drawWaveform()` - Audio waveform display + - `drawVUMeter()` - Volume meter visualization + - `drawSpectrogram()` - Time-frequency plot + - `drawReactivePatterns()` - Beat-reactive patterns + +3. **Audio Analysis Classes** + - `MaxFadeTracker` - Smooth peak tracking with attack/decay + - `BeatDetector` - Energy-based beat detection + - `FrequencyBandAnalyzer` - 8-band frequency analysis + +## Customization + +### Adding New Visualizations +1. Create a new draw function +2. Add it to the visualization mode dropdown +3. Add a case in the main switch statement + +### Modifying Color Palettes +Edit the `getCurrentPalette()` function to add custom palettes. + +### Adjusting Frequency Bands +Modify the `FrequencyBandAnalyzer` constructor to change band boundaries. + +## Troubleshooting + +- **No visualization**: Check audio input and ensure "Enable Audio Reactive Mode" is on +- **Too dim/bright**: Adjust brightness control +- **Choppy animation**: Increase smoothing or reduce matrix size +- **No beat detection**: Adjust beat sensitivity or check audio levels +- **Visualization too sensitive**: Increase noise floor value + +## Memory Requirements + +This example requires significant memory for: +- Framebuffer: 128×128×3 = 49,152 bytes +- LED buffer: 64×64×3 = 12,288 bytes +- Audio buffers and FFT data + +Platforms with limited memory may need to reduce the matrix size. diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Audio/simple/fx_audio.h b/.pio/libdeps/esp01_1m/FastLED/examples/Audio/simple/fx_audio.h new file mode 100644 index 0000000..0e31401 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Audio/simple/fx_audio.h @@ -0,0 +1,64 @@ +#pragma once +#include "fl/time_alpha.h" +#include "fl/math_macros.h" + +/// Tracks a smoothed peak with attack, decay, and output-inertia time-constants. +class MaxFadeTracker { +public: + /// @param attackTimeSec τ₁: how quickly to rise toward a new peak. + /// @param decayTimeSec τ₂: how quickly to decay to 1/e of value. + /// @param outputTimeSec τ₃: how quickly the returned value follows currentLevel_. + /// @param sampleRate audio sample rate (e.g. 44100 or 48000). + MaxFadeTracker(float attackTimeSec, + float decayTimeSec, + float outputTimeSec, + float sampleRate) + : attackRate_(1.0f / attackTimeSec) + , decayRate_(1.0f / decayTimeSec) + , outputRate_(1.0f / outputTimeSec) + , sampleRate_(sampleRate) + , currentLevel_(0.0f) + , smoothedOutput_(0.0f) + {} + + void setAttackTime(float t){ attackRate_ = 1.0f/t; } + void setDecayTime (float t){ decayRate_ = 1.0f/t; } + void setOutputTime(float t){ outputRate_ = 1.0f/t; } + + /// Process one 512-sample block; returns [0…1] with inertia. + float operator()(const int16_t* samples, size_t length) { + assert(length == 512); + // 1) block peak + float peak = 0.0f; + for (size_t i = 0; i < length; ++i) { + float v = ABS(samples[i]) * (1.0f/32768.0f); + peak = MAX(peak, v); + } + + // 2) time delta + float dt = static_cast(length) / sampleRate_; + + // 3) update currentLevel_ with attack/decay + if (peak > currentLevel_) { + float riseFactor = 1.0f - fl::exp(-attackRate_ * dt); + currentLevel_ += (peak - currentLevel_) * riseFactor; + } else { + float decayFactor = fl::exp(-decayRate_ * dt); + currentLevel_ *= decayFactor; + } + + // 4) output inertia: smooth smoothedOutput_ → currentLevel_ + float outFactor = 1.0f - fl::exp(-outputRate_ * dt); + smoothedOutput_ += (currentLevel_ - smoothedOutput_) * outFactor; + + return smoothedOutput_; + } + +private: + float attackRate_; // = 1/τ₁ + float decayRate_; // = 1/τ₂ + float outputRate_; // = 1/τ₃ + float sampleRate_; + float currentLevel_; // instantaneous peak with attack/decay + float smoothedOutput_; // returned value with inertia +}; diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Audio/simple/simple.h b/.pio/libdeps/esp01_1m/FastLED/examples/Audio/simple/simple.h new file mode 100644 index 0000000..bf07749 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Audio/simple/simple.h @@ -0,0 +1,253 @@ +/// @file Audio.ino +/// @brief Audio visualization example with XY mapping +/// @example Audio.ino +/// +/// This sketch is fully compatible with the FastLED web compiler. To use it do the following: +/// 1. Install Fastled: `pip install fastled` +/// 2. cd into this examples page. +/// 3. Run the FastLED web compiler at root: `fastled` +/// 4. When the compiler is done a web page will open. + +/* +This demo is best viewed using the FastLED compiler. + +Windows/MacOS binaries: https://github.com/FastLED/FastLED/releases + +Python + +Install: pip install fastled +Run: fastled +This will compile and preview the sketch in the browser, and enable +all the UI elements you see below. +*/ + +#include +#include + +#include "fl/audio.h" +#include "fl/downscale.h" +#include "fl/draw_visitor.h" +#include "fl/fft.h" +#include "fl/math.h" +#include "fl/math_macros.h" +#include "fl/raster.h" +#include "fl/time_alpha.h" +#include "fl/ui.h" +#include "fl/xypath.h" +#include "fl/unused.h" +#include "fx/time.h" +#include "fl/function.h" + +// Sketch. +#include "fx_audio.h" + +#include "fl/memfill.h" +using namespace fl; + +#define HEIGHT 128 +#define WIDTH 128 +#define NUM_LEDS ((WIDTH) * (HEIGHT)) +#define IS_SERPINTINE false +#define TIME_ANIMATION 1000 // ms +#define PIN_DATA 3 + +UITitle title("Simple control of an xy path"); +UIDescription description("This is more of a test for new features."); +UICheckbox enableVolumeVis("Enable volume visualization", false); +UICheckbox enableRMS("Enable RMS visualization", false); +UICheckbox enableFFT("Enable FFT visualization", true); +UICheckbox freeze("Freeze frame", false); +UIButton advanceFrame("Advance frame"); +UISlider decayTimeSeconds("Fade time Seconds", .1, 0, 4, .02); +UISlider attackTimeSeconds("Attack time Seconds", .1, 0, 4, .02); +UISlider outputTimeSec("outputTimeSec", .17, 0, 2, .01); + +UIAudio audio("Audio"); +UISlider fadeToBlack("Fade to black by", 5, 0, 20, 1); + +// Group related UI elements using UIGroup template multi-argument constructor +UIGroup visualizationControls("Visualization", enableVolumeVis, enableRMS, enableFFT); +UIGroup audioProcessingControls("Audio Processing", decayTimeSeconds, attackTimeSeconds, outputTimeSec); +UIGroup generalControls("General Controls", freeze, advanceFrame, fadeToBlack); + +MaxFadeTracker audioFadeTracker(attackTimeSeconds.value(), + decayTimeSeconds.value(), outputTimeSec.value(), + 44100); + +CRGB framebuffer[NUM_LEDS]; +XYMap frameBufferXY(WIDTH, HEIGHT, IS_SERPINTINE); + +CRGB leds[NUM_LEDS / 4]; // Downscaled buffer +XYMap ledsXY(WIDTH / 2, HEIGHT / 2, + IS_SERPINTINE); // Framebuffer is regular rectangle LED matrix. + +FFTBins fftOut(WIDTH); // 2x width due to super sampling. + +// CRGB framebuffer[NUM_LEDS]; +// CRGB framebuffer[WIDTH_2X * HEIGHT_2X]; // 2x super sampling. +// XYMap frameBufferXY(WIDTH, HEIGHT, IS_SERPINTINE); // LED output, serpentine +// as is common for LED matrices. XYMap xyMap_2X(WIDTH_2X, HEIGHT_2X, false); // +// Framebuffer is regular rectangle LED matrix. + +int x = 0; +int y = 0; +bool triggered = false; + +SoundLevelMeter soundLevelMeter(.0, 0.0); + +float rms(Slice data) { + double sumSq = 0.0; + const int N = data.size(); + for (int i = 0; i < N; ++i) { + int32_t x32 = int32_t(data[i]); + sumSq += x32 * x32; + } + float rms = sqrt(float(sumSq) / N); + return rms; +} + +void setup() { + Serial.begin(115200); + // auto screenmap = frameBufferXY.toScreenMap(); + // screenmap.setDiameter(.2); + // FastLED.addLeds(framebuffer, + // NUM_LEDS).setScreenMap(screenmap); + auto screenmap = ledsXY.toScreenMap(); + screenmap.setDiameter(.2); + + decayTimeSeconds.onChanged([](float value) { + audioFadeTracker.setDecayTime(value); + FASTLED_WARN("Fade time seconds: " << value); + }); + attackTimeSeconds.onChanged([](float value) { + audioFadeTracker.setAttackTime(value); + FASTLED_WARN("Attack time seconds: " << value); + }); + outputTimeSec.onChanged([](float value) { + audioFadeTracker.setOutputTime(value); + FASTLED_WARN("Output time seconds: " << value); + }); + FastLED.addLeds(leds, ledsXY.getTotal()) + .setScreenMap(screenmap); +} + +void shiftUp() { + // fade each led by 1% + if (fadeToBlack.as_int()) { + + for (int i = 0; i < NUM_LEDS; ++i) { + auto &c = framebuffer[i]; + c.fadeToBlackBy(fadeToBlack.as_int()); + } + } + + for (int y = HEIGHT - 1; y > 0; --y) { + CRGB* row1 = &framebuffer[frameBufferXY(0, y)]; + CRGB* row2 = &framebuffer[frameBufferXY(0, y - 1)]; + memcpy(row1, row2, WIDTH * sizeof(CRGB)); + } + CRGB* row = &framebuffer[frameBufferXY(0, 0)]; + fl::memfill(row, 0, sizeof(CRGB) * WIDTH); +} + + +bool doFrame() { + if (!freeze) { + return true; + } + if (advanceFrame.isPressed()) { + return true; + } + return false; +} + +void loop() { + if (triggered) { + FASTLED_WARN("Triggered"); + } + + // x = pointX.as_int(); + y = HEIGHT / 2; + + bool do_frame = doFrame(); + + while (AudioSample sample = audio.next()) { + if (!do_frame) { + continue; + } + float fade = audioFadeTracker(sample.pcm().data(), sample.pcm().size()); + shiftUp(); + // FASTLED_WARN("Audio sample size: " << sample.pcm().size()); + soundLevelMeter.processBlock(sample.pcm()); + // FASTLED_WARN("") + auto dbfs = soundLevelMeter.getDBFS(); + FASTLED_UNUSED(dbfs); + // FASTLED_WARN("getDBFS: " << dbfs); + int32_t max = 0; + for (size_t i = 0; i < sample.pcm().size(); ++i) { + int32_t x = ABS(sample.pcm()[i]); + if (x > max) { + max = x; + } + } + float anim = + fl::map_range(max, 0.0f, 32768.0f, 0.0f, 1.0f); + anim = fl::clamp(anim, 0.0f, 1.0f); + + x = fl::map_range(anim, 0.0f, 1.0f, 0.0f, WIDTH - 1); + // FASTLED_WARN("x: " << x); + + // fft.run(sample.pcm(), &fftOut); + sample.fft(&fftOut); + + // FASTLED_ASSERT(fftOut.bins_raw.size() == WIDTH_2X, + // "FFT bins size mismatch"); + + if (enableFFT) { + auto max_x = fftOut.bins_raw.size() - 1; + FASTLED_UNUSED(max_x); + for (size_t i = 0; i < fftOut.bins_raw.size(); ++i) { + auto x = i; + auto v = fftOut.bins_db[i]; + // Map audio intensity to a position in the heat palette (0-255) + v = fl::map_range(v, 45, 70, 0, 1.f); + v = fl::clamp(v, 0.0f, 1.0f); + uint8_t heatIndex = + fl::map_range(v, 0, 1, 0, 255); + + // FASTLED_WARN(v); + + // Use FastLED's built-in HeatColors palette + auto c = ColorFromPalette(HeatColors_p, heatIndex); + c.fadeToBlackBy(255 - heatIndex); + framebuffer[frameBufferXY(x, 0)] = c; + // FASTLED_WARN("y: " << i << " b: " << b); + } + } + + if (enableVolumeVis) { + framebuffer[frameBufferXY(x, HEIGHT / 2)] = CRGB(0, 255, 0); + } + + if (enableRMS) { + float rms = sample.rms(); + FASTLED_WARN("RMS: " << rms); + rms = fl::map_range(rms, 0.0f, 32768.0f, 0.0f, 1.0f); + rms = fl::clamp(rms, 0.0f, 1.0f) * WIDTH; + framebuffer[frameBufferXY(rms, HEIGHT * 3 / 4)] = CRGB(0, 0, 255); + } + if (true) { + uint16_t fade_width = fade * (WIDTH - 1); + uint16_t h = HEIGHT / 4; + // yellow + int index = frameBufferXY(fade_width, h); + auto c = CRGB(255, 255, 0); + framebuffer[index] = c; + } + } + + // now downscale the framebuffer to the led matrix + downscale(framebuffer, frameBufferXY, leds, ledsXY); + + FastLED.show(); +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/AudioInput/AudioInput.h b/.pio/libdeps/esp01_1m/FastLED/examples/AudioInput/AudioInput.h new file mode 100644 index 0000000..598279f --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/AudioInput/AudioInput.h @@ -0,0 +1,99 @@ +// I2S Audio Example for ESP32 +// This example demonstrates using I2S audio input to control FastLED strips +// Based on audio levels from microphone or line input +// +// This example uses the extremely popular (as of 2025-September) INMP441 microphone. +// Notes: +// - Connect L/R to PWR so it's recognized as a right channel microphone. + +#include +#include + +#include "fl/sstream.h" +#include "fl/type_traits.h" + +#include "fl/audio_input.h" + +#include "platforms/esp/32/audio/sound_util.h" + +using fl::i16; + +// I2S Configuration +#define I2S_WS_PIN 7 // Word Select (LRCLK) +#define I2S_SD_PIN 8 // Serial Data (DIN) +#define I2S_CLK_PIN 4 // Serial Clock (BCLK) +#define I2S_CHANNEL fl::Right + +fl::AudioConfig config = fl::AudioConfig::CreateInmp441(I2S_WS_PIN, I2S_SD_PIN, I2S_CLK_PIN, I2S_CHANNEL); +fl::shared_ptr audioSource; + +void setup() { + Serial.begin(115200); + + Serial.println("I2S Audio FastLED Example"); + Serial.println("Waiting 5000ms for audio device to stdout initialization..."); + delay(5000); + + // Initialize I2S Audio + fl::string errorMsg; + audioSource = fl::IAudioInput::create(config, &errorMsg); + + if (!audioSource) { + Serial.print("Failed to create audio source: "); + Serial.println(errorMsg.c_str()); + return; + } + + + // Start audio capture + Serial.println("Starting audio capture..."); + audioSource->start(); + + // Check for start errors + fl::string startErrorMsg; + if (audioSource->error(&startErrorMsg)) { + Serial.print("Audio start error: "); + Serial.println(startErrorMsg.c_str()); + return; + } + + Serial.println("Audio capture started!"); +} + + +void loop() { + EVERY_N_MILLIS(1000) { Serial.println("loop active."); } + // Check if audio source is valid + if (!audioSource) { + Serial.println("Audio source is null!"); + delay(1000); + return; + } + + // Check for audio errors + fl::string errorMsg; + if (audioSource->error(&errorMsg)) { + Serial.print("Audio error: "); + Serial.println(errorMsg.c_str()); + delay(100); + return; + } + + // Read audio data + fl::AudioSample sample = audioSource->read(); + + if (sample.isValid()) { + EVERY_N_MILLIS(100) { + const auto& audioBuffer = sample.pcm(); + const i16* max_sample = fl::max_element(audioBuffer.begin(), audioBuffer.end()); + const i16* min_sample = fl::min_element(audioBuffer.begin(), audioBuffer.end()); + fl::sstream ss; + ss << "\nRead " << audioBuffer.size() << " samples, timestamp: " << sample.timestamp() << "ms\n"; + ss << "Max sample: " << *max_sample << "\n"; + ss << "Min sample: " << *min_sample << "\n"; + ss << "RMS: " << sample.rms() << "\n"; + ss << "ZCF: " << sample.zcf() << "\n"; + FL_WARN(ss.str()); + } + } +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/AudioInput/AudioInput.ino b/.pio/libdeps/esp01_1m/FastLED/examples/AudioInput/AudioInput.ino new file mode 100644 index 0000000..9c4f845 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/AudioInput/AudioInput.ino @@ -0,0 +1,11 @@ +// I2S Audio Example (for ESP32 as of 2025-September) +// This example demonstrates using I2S audio input to control FastLED strips +// Based on audio levels from microphone or line input + +#include "fl/audio_input.h" + +#if FASTLED_HAS_AUDIO_INPUT +#include "./AudioInput.h" +#else +#include "platforms/sketch_fake.hpp" +#endif // FASTLED_HAS_AUDIO_INPUT diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Blink/Blink.ino b/.pio/libdeps/esp01_1m/FastLED/examples/Blink/Blink.ino new file mode 100644 index 0000000..e83f5ec --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Blink/Blink.ino @@ -0,0 +1,83 @@ +/// @file Blink.ino +/// @brief Blink the first LED of an LED strip +/// @example Blink.ino + +#include +#include + +// How many leds in your strip? +#define NUM_LEDS 1 + +// For led chips like WS2812, which have a data line, ground, and power, you just +// need to define DATA_PIN. For led chipsets that are SPI based (four wires - data, clock, +// ground, and power), like the LPD8806 define both DATA_PIN and CLOCK_PIN +// Clock pin only needed for SPI based chipsets when not using hardware SPI +#define DATA_PIN 3 +#define CLOCK_PIN 13 + +// Define the array of leds +CRGB leds[NUM_LEDS]; + +void setup() { + //Serial.begin(9600); + //Serial.println("BLINK setup starting"); + + // Uncomment/edit one of the following lines for your leds arrangement. + // ## Clockless types ## + FastLED.addLeds(leds, NUM_LEDS); // GRB ordering is assumed + + //Serial.println("BLINK setup complete"); + // FastLED.addLeds(leds, NUM_LEDS); // RGB ordering (uses SM16824EController) + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); // GRB ordering is typical + // FastLED.addLeds(leds, NUM_LEDS); // GRB ordering is typical + // FastLED.addLeds(leds, NUM_LEDS); // GRB ordering is typical + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); // GRB ordering is typical + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // ## Clocked (SPI) types ## + // FastLED.addLeds(leds, NUM_LEDS); // GRB ordering is typical + // FastLED.addLeds(leds, NUM_LEDS); // GRB ordering is typical + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); // BGR ordering is typical + // FastLED.addLeds(leds, NUM_LEDS); // BGR ordering is typical + // FastLED.addLeds(leds, NUM_LEDS); // BGR ordering is typical + // FastLED.addLeds(leds, NUM_LEDS); // BGR ordering is typical +} + +void loop() { + //Serial.println("BLINK"); + + // Turn the LED on, then pause + leds[0] = CRGB::Red; + FastLED.show(); + delay(500); + + // Now turn the LED off, then pause + leds[0] = CRGB::Black; + FastLED.show(); + delay(500); +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/BlinkParallel/BlinkParallel.ino b/.pio/libdeps/esp01_1m/FastLED/examples/BlinkParallel/BlinkParallel.ino new file mode 100644 index 0000000..162187e --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/BlinkParallel/BlinkParallel.ino @@ -0,0 +1,96 @@ + +/// @file BlinkParallel.ino +/// @brief Shows parallel usage of WS2812 strips. Blinks once for red, twice for green, thrice for blue. +/// @example BlinkParallel.ino + +#include "FastLED.h" + + +#if SKETCH_HAS_LOTS_OF_MEMORY +// How many leds in your strip? +#define NUM_LEDS 256 +#else +#define NUM_LEDS 16 +#endif + +// Demo of driving multiple WS2812 strips on different pins + +// Define the array of leds +CRGB leds[NUM_LEDS]; // Yes, they all share a buffer. + +void setup() { + Serial.begin(115200); + + //FastLED.addLeds(leds, NUM_LEDS); // GRB ordering is assumed + FastLED.addLeds(leds, NUM_LEDS); // GRB ordering is assumed + FastLED.addLeds(leds, NUM_LEDS); // GRB ordering is assumed + FastLED.addLeds(leds, NUM_LEDS); // GRB ordering is assumed + FastLED.addLeds(leds, NUM_LEDS); // GRB ordering is assumed + + FL_WARN("Initialized 4 LED strips with " << NUM_LEDS << " LEDs each"); + FL_WARN("Setup complete - starting blink animation"); + + delay(1000); +} + +void fill(CRGB color) { + for (int i = 0; i < NUM_LEDS; i++) { + leds[i] = color; + } +} + +void blink(CRGB color, int times) { + for (int i = 0; i < times; i++) { + fill(color); + FastLED.show(); + delay(500); + fill(CRGB::Black); + FastLED.show(); + delay(500); + } +} + +void loop() { + static int loopCount = 0; + + EVERY_N_MILLISECONDS(1000) { // Every 1 second (faster for QEMU testing) + loopCount++; + FL_WARN("Starting loop iteration " << loopCount); + + // Add completion marker after a few loops for QEMU testing + if (loopCount >= 2) { // Complete after 2 iterations instead of 3 + FL_WARN("FL_WARN test finished - completed " << loopCount << " iterations"); + } + } + + // Turn the LED on, then pause + blink(CRGB(8,0,0), 1); // blink once for red + blink(CRGB(0,8,0), 2); // blink twice for green + blink(CRGB(0,0,8), 3); // blink thrice for blue + + delay(50); + + // now benchmark + uint32_t start = millis(); + fill(CRGB(8,8,8)); + FastLED.show(); + uint32_t diff = millis() - start; + + Serial.print("Time to fill and show for non blocking (ms): "); + Serial.println(diff); + + EVERY_N_MILLISECONDS(500) { // Every 0.5 seconds (faster for QEMU testing) + FL_WARN("FastLED.show() timing: " << diff << "ms"); + } + + delay(50); + + start = millis(); + fill(CRGB(8,8,8)); + FastLED.show(); + FastLED.show(); + + diff = millis() - start; + Serial.print("Time to fill and show for 2nd blocking (ms): "); + Serial.println(diff); +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Blur/Blur.ino b/.pio/libdeps/esp01_1m/FastLED/examples/Blur/Blur.ino new file mode 100644 index 0000000..a928bf5 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Blur/Blur.ino @@ -0,0 +1,32 @@ +// UIDescription: This example shows how to blur a strip of LEDs. It uses the blur1d function to blur the strip and fadeToBlackBy to dim the strip. A bright pixel moves along the strip. +// Author: Zach Vorhies + +#include + +#define NUM_LEDS 64 +#define DATA_PIN 3 // Change this to match your LED strip's data pin +#define BRIGHTNESS 255 + +CRGB leds[NUM_LEDS]; +uint8_t pos = 0; +bool toggle = false; + +void setup() { + FastLED.addLeds(leds, NUM_LEDS); + FastLED.setBrightness(BRIGHTNESS); +} + +void loop() { + // Add a bright pixel that moves + leds[pos] = CHSV(pos * 2, 255, 255); + // Blur the entire strip + blur1d(leds, NUM_LEDS, 172); + fadeToBlackBy(leds, NUM_LEDS, 16); + FastLED.show(); + // Move the position of the dot + if (toggle) { + pos = (pos + 1) % NUM_LEDS; + } + toggle = !toggle; + delay(20); +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Blur2d/Blur2d.ino b/.pio/libdeps/esp01_1m/FastLED/examples/Blur2d/Blur2d.ino new file mode 100644 index 0000000..c972112 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Blur2d/Blur2d.ino @@ -0,0 +1,65 @@ +/// @file Blur2d.ino +/// @brief Demonstrates 2D blur effects on LED matrix +/// @example Blur2d.ino +/// +/// This sketch is fully compatible with the FastLED web compiler. To use it do the following: +/// 1. Install Fastled: `pip install fastled` +/// 2. cd into this examples page. +/// 3. Run the FastLED web compiler at root: `fastled` +/// 4. When the compiler is done a web page will open. + +// UIDescription: This example shows how to blur a strip of LEDs in 2d. + +#include +#include + +#include "fl/ui.h" +#include "fl/xymap.h" + + +using namespace fl; + + +#if SKETCH_HAS_LOTS_OF_MEMORY +#define WIDTH 22 +#define HEIGHT 22 +#else +#define WIDTH 12 +#define HEIGHT 12 +#endif + +#define NUM_LEDS (WIDTH * HEIGHT) +#define BLUR_AMOUNT 172 +#define DATA_PIN 2 // Change this to match your LED strip's data pin +#define BRIGHTNESS 255 +#define SERPENTINE true + +CRGB leds[NUM_LEDS]; +uint8_t pos = 0; +bool toggle = false; +XYMap xymap(WIDTH, HEIGHT, SERPENTINE); + +void setup() { + FastLED.addLeds(leds, NUM_LEDS) + .setScreenMap(xymap); // Necessary when using the FastLED web compiler to display properly on a web page. + FastLED.setBrightness(BRIGHTNESS); + Serial.println("setup"); +} + +void loop() { + static int x = random(WIDTH); + static int y = random(HEIGHT); + static CRGB c = CRGB(0, 0, 0); + blur2d(leds, WIDTH, HEIGHT, BLUR_AMOUNT, xymap); + EVERY_N_MILLISECONDS(1000) { + x = random(WIDTH); + y = random(HEIGHT); + uint8_t r = random(255); + uint8_t g = random(255); + uint8_t b = random(255); + c = CRGB(r, g, b); + } + leds[xymap(x, y)] = c; + FastLED.show(); + delay(20); +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/Chromancer.ino b/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/Chromancer.ino new file mode 100644 index 0000000..7698c22 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/Chromancer.ino @@ -0,0 +1,607 @@ +/// @file Chromancer.ino +/// @brief Hexagonal LED display visualization +/// @example Chromancer.ino +/// +/// This sketch is fully compatible with the FastLED web compiler. To use it do the following: +/// 1. Install Fastled: `pip install fastled` +/// 2. cd into this examples page. +/// 3. Run the FastLED web compiler at root: `fastled` +/// 4. When the compiler is done a web page will open. + +/* + Original Source: https://github.com/ZackFreedman/Chromance + GaryWoo's Video: https://www.youtube.com/watch?v=-nSCtxa2Kp0 + GaryWoo's LedMap: https://gist.github.com/Garywoo/b6cd1ea90cb5e17cc60b01ae68a2b770 + GaryWoo's presets: https://gist.github.com/Garywoo/82fa67c6e1f9529dc16a01dd97d05d58 + Chromance wall hexagon source (emotion controlled w/ EmotiBit) + Partially cribbed from the DotStar example + I smooshed in the ESP32 BasicOTA sketch, too + + (C) Voidstar Lab 2021 +*/ + +#include "fl/sketch_macros.h" +#include "fl/warn.h" + +#if !SKETCH_HAS_LOTS_OF_MEMORY +// Platform does not have enough memory +// Other platforms have weird issues. Will revisit this later. +#include + +void setup() { + // Use Serial.println instead of FL_WARN to prevent optimization away + Serial.begin(115200); + Serial.println("Chromancer.ino: setup() - Platform has insufficient memory for full demo"); +} +void loop() { + // Use Serial.println instead of FL_WARN to prevent optimization away + Serial.println("Chromancer.ino: loop() - Platform has insufficient memory for full demo"); + delay(1000); // Prevent rapid printing +} +#else + + +#include + +#include "fl/screenmap.h" +#include "fl/math_macros.h" +#include "fl/json.h" +#include "fl/ui.h" +#include "fl/map.h" + +#include "fl/str.h" + +#include "./screenmap.json.h" +#include "./mapping.h" +#include "./ripple.h" +#include "./detail.h" + +using namespace fl; + +enum { + BlackStrip = 0, + GreenStrip = 1, + RedStrip = 2, + BlueStrip = 3, +}; + + +// Strips are different lengths because I am a dumb + +constexpr int lengths[] = { + 154, // Black strip + 168, // Green strip + 84, // Red strip + 154 // Blue strip +}; + + + + + + + +// non emscripten uses separate arrays for each strip. Eventually emscripten +// should support this as well but right now we don't +CRGB leds0[lengths[BlackStrip]] = {}; +CRGB leds1[lengths[GreenStrip]] = {}; +CRGB leds2[lengths[RedStrip]] = {}; // Red +CRGB leds3[lengths[BlueStrip]] = {}; +CRGB *leds[] = {leds0, leds1, leds2, leds3}; + + +byte ledColors[40][14][3]; // LED buffer - each ripple writes to this, then we + // write this to the strips +//float decay = 0.97; // Multiply all LED's by this amount each tick to create + // fancy fading tails + +UISlider sliderDecay("decay", .97f, .8, 1.0, .01); + +// These ripples are endlessly reused so we don't need to do any memory +// management +#define numberOfRipples 30 +Ripple ripples[numberOfRipples] = { + Ripple(0), Ripple(1), Ripple(2), Ripple(3), Ripple(4), Ripple(5), + Ripple(6), Ripple(7), Ripple(8), Ripple(9), Ripple(10), Ripple(11), + Ripple(12), Ripple(13), Ripple(14), Ripple(15), Ripple(16), Ripple(17), + Ripple(18), Ripple(19), Ripple(20), Ripple(21), Ripple(22), Ripple(23), + Ripple(24), Ripple(25), Ripple(26), Ripple(27), Ripple(28), Ripple(29), +}; + +// Biometric detection and interpretation +// IR (heartbeat) is used to fire outward ripples +float lastIrReading; // When our heart pumps, reflected IR drops sharply +float highestIrReading; // These vars let us detect this drop +unsigned long + lastHeartbeat; // Track last heartbeat so we can detect noise/disconnections +#define heartbeatLockout \ + 500 // Heartbeats that happen within this many milliseconds are ignored +#define heartbeatDelta 300 // Drop in reflected IR that constitutes a heartbeat + +// Heartbeat color ripples are proportional to skin temperature +#define lowTemperature 33.0 // Resting temperature +#define highTemperature 37.0 // Really fired up +float lastKnownTemperature = + (lowTemperature + highTemperature) / + 2.0; // Carries skin temperature from temperature callback to IR callback + +// EDA code was too unreliable and was cut. +// TODO: Rebuild EDA code + +// Gyroscope is used to reject data if you're moving too much +#define gyroAlpha 0.9 // Exponential smoothing constant +#define gyroThreshold \ + 300 // Minimum angular velocity total (X+Y+Z) that disqualifies readings +float gyroX, gyroY, gyroZ; + +// If you don't have an EmotiBit or don't feel like wearing it, that's OK +// We'll fire automatic pulses +#define randomPulsesEnabled true // Fire random rainbow pulses from random nodes +#define cubePulsesEnabled true // Draw cubes at random nodes +UICheckbox starburstPulsesEnabled("Starburst Pulses", true); +UICheckbox simulatedBiometricsEnabled("Simulated Biometrics", true); + +#define autoPulseTimeout \ + 5000 // If no heartbeat is received in this many ms, begin firing + // random/simulated pulses +#define randomPulseTime 2000 // Fire a random pulse every (this many) ms +unsigned long lastRandomPulse; +byte lastAutoPulseNode = 255; + +byte numberOfAutoPulseTypes = + randomPulsesEnabled + cubePulsesEnabled + int(starburstPulsesEnabled); +byte currentAutoPulseType = 255; +#define autoPulseChangeTime 30000 +unsigned long lastAutoPulseChange; + +#define simulatedHeartbeatBaseTime \ + 600 // Fire a simulated heartbeat pulse after at least this many ms +#define simulatedHeartbeatVariance \ + 200 // Add random jitter to simulated heartbeat +#define simulatedEdaBaseTime 1000 // Same, but for inward EDA pulses +#define simulatedEdaVariance 10000 +unsigned long nextSimulatedHeartbeat; +unsigned long nextSimulatedEda; + +// Helper function to check if a node is on the border +bool isNodeOnBorder(byte node) { + for (int i = 0; i < numberOfBorderNodes; i++) { + if (node == borderNodes[i]) { + return true; + } + } + return false; +} + +UITitle title("Chromancer"); +UIDescription description("Take 6 seconds to boot up. Chromancer is a wall-mounted hexagonal LED display that originally reacted to biometric data from an EmotiBit sensor. It visualizes your heartbeat, skin temperature, and movement in real-time. Chromancer also has a few built-in effects that can be triggered with the push of a button. Enjoy!"); +UICheckbox allWhite("All White", false); + +UIButton simulatedHeartbeat("Simulated Heartbeat"); +UIButton triggerStarburst("Trigger Starburst"); +UIButton triggerRainbowCube("Rainbow Cube"); +UIButton triggerBorderWave("Border Wave"); +UIButton triggerSpiral("Spiral Wave"); +bool wasHeartbeatClicked = false; +bool wasStarburstClicked = false; +bool wasRainbowCubeClicked = false; +bool wasBorderWaveClicked = false; +bool wasSpiralClicked = false; + +// Group related UI elements using UIGroup template multi-argument constructor +UIGroup effectTriggers("Effect Triggers", simulatedHeartbeat, triggerStarburst, triggerRainbowCube, triggerBorderWave, triggerSpiral); +UIGroup automationControls("Automation", starburstPulsesEnabled, simulatedBiometricsEnabled); +UIGroup displayControls("Display", sliderDecay, allWhite); + +void setup() { + Serial.begin(115200); + + Serial.println("*** LET'S GOOOOO ***"); + + Serial.println("JSON SCREENMAP"); + Serial.println(JSON_SCREEN_MAP); + + fl::fl_map segmentMaps; + ScreenMap::ParseJson(JSON_SCREEN_MAP, &segmentMaps); + + printf("Parsed %d segment maps\n", int(segmentMaps.size())); + for (auto kv : segmentMaps) { + Serial.print(kv.first.c_str()); + Serial.print(" "); + Serial.println(kv.second.getLength()); + } + + + // ScreenMap screenmaps[4]; + ScreenMap red, black, green, blue; + bool ok = true; + + auto red_it = segmentMaps.find("red_segment"); + ok = (red_it != segmentMaps.end()) && ok; + if (red_it != segmentMaps.end()) red = red_it->second; + + auto black_it = segmentMaps.find("back_segment"); + ok = (black_it != segmentMaps.end()) && ok; + if (black_it != segmentMaps.end()) black = black_it->second; + + auto green_it = segmentMaps.find("green_segment"); + ok = (green_it != segmentMaps.end()) && ok; + if (green_it != segmentMaps.end()) green = green_it->second; + + auto blue_it = segmentMaps.find("blue_segment"); + ok = (blue_it != segmentMaps.end()) && ok; + if (blue_it != segmentMaps.end()) blue = blue_it->second; + if (!ok) { + Serial.println("Failed to get all segment maps"); + return; + } + + + CRGB* red_leds = leds[RedStrip]; + CRGB* black_leds = leds[BlackStrip]; + CRGB* green_leds = leds[GreenStrip]; + CRGB* blue_leds = leds[BlueStrip]; + + FastLED.addLeds(black_leds, lengths[BlackStrip]).setScreenMap(black); + FastLED.addLeds(green_leds, lengths[GreenStrip]).setScreenMap(green); + FastLED.addLeds(red_leds, lengths[RedStrip]).setScreenMap(red); + FastLED.addLeds(blue_leds, lengths[BlueStrip]).setScreenMap(blue); + + FastLED.show(); +} + + +void loop() { + unsigned long benchmark = millis(); + FL_UNUSED(benchmark); + + // Fade all dots to create trails + for (int strip = 0; strip < 40; strip++) { + for (int led = 0; led < 14; led++) { + for (int i = 0; i < 3; i++) { + ledColors[strip][led][i] *= sliderDecay.value(); + } + } + } + + for (int i = 0; i < numberOfRipples; i++) { + ripples[i].advance(ledColors); + } + + for (int segment = 0; segment < 40; segment++) { + for (int fromBottom = 0; fromBottom < 14; fromBottom++) { + int strip = ledAssignments[segment][0]; + int led = round(fmap(fromBottom, 0, 13, ledAssignments[segment][2], + ledAssignments[segment][1])); + leds[strip][led] = CRGB(ledColors[segment][fromBottom][0], + ledColors[segment][fromBottom][1], + ledColors[segment][fromBottom][2]); + } + } + + if (allWhite) { + // for all strips + for (int i = 0; i < 4; i++) { + for (int j = 0; j < lengths[i]; j++) { + leds[i][j] = CRGB::White; + } + } + } + + FastLED.show(); + + + // Check if buttons were clicked + wasHeartbeatClicked = bool(simulatedHeartbeat); + wasStarburstClicked = bool(triggerStarburst); + wasRainbowCubeClicked = bool(triggerRainbowCube); + wasBorderWaveClicked = bool(triggerBorderWave); + wasSpiralClicked = bool(triggerSpiral); + + if (wasSpiralClicked) { + // Trigger spiral wave effect from center + unsigned int baseColor = random(0xFFFF); + byte centerNode = 15; // Center node + + // Create 6 ripples in a spiral pattern + for (int i = 0; i < 6; i++) { + if (nodeConnections[centerNode][i] >= 0) { + for (int j = 0; j < numberOfRipples; j++) { + if (ripples[j].state == dead) { + ripples[j].start( + centerNode, i, + Adafruit_DotStar_ColorHSV( + baseColor + (0xFFFF / 6) * i, 255, 255), + 0.3 + (i * 0.1), // Varying speeds creates spiral effect + 2000, + i % 2 ? alwaysTurnsLeft : alwaysTurnsRight); // Alternating turn directions + break; + } + } + } + } + lastHeartbeat = millis(); + } + + if (wasBorderWaveClicked) { + // Trigger immediate border wave effect + unsigned int baseColor = random(0xFFFF); + + // Start ripples from each border node in sequence + for (int i = 0; i < numberOfBorderNodes; i++) { + byte node = borderNodes[i]; + // Find an inward direction + for (int dir = 0; dir < 6; dir++) { + if (nodeConnections[node][dir] >= 0 && + !isNodeOnBorder(nodeConnections[node][dir])) { + for (int j = 0; j < numberOfRipples; j++) { + if (ripples[j].state == dead) { + ripples[j].start( + node, dir, + Adafruit_DotStar_ColorHSV( + baseColor + (0xFFFF / numberOfBorderNodes) * i, + 255, 255), + .4, 2000, 0); + break; + } + } + break; + } + } + } + lastHeartbeat = millis(); + } + + if (wasRainbowCubeClicked) { + // Trigger immediate rainbow cube effect + int node = cubeNodes[random(numberOfCubeNodes)]; + unsigned int baseColor = random(0xFFFF); + byte behavior = random(2) ? alwaysTurnsLeft : alwaysTurnsRight; + + for (int i = 0; i < 6; i++) { + if (nodeConnections[node][i] >= 0) { + for (int j = 0; j < numberOfRipples; j++) { + if (ripples[j].state == dead) { + ripples[j].start( + node, i, + Adafruit_DotStar_ColorHSV( + baseColor + (0xFFFF / 6) * i, 255, 255), + .5, 2000, behavior); + break; + } + } + } + } + lastHeartbeat = millis(); + } + + if (wasStarburstClicked) { + // Trigger immediate starburst effect + unsigned int baseColor = random(0xFFFF); + byte behavior = random(2) ? alwaysTurnsLeft : alwaysTurnsRight; + + for (int i = 0; i < 6; i++) { + for (int j = 0; j < numberOfRipples; j++) { + if (ripples[j].state == dead) { + ripples[j].start( + starburstNode, i, + Adafruit_DotStar_ColorHSV( + baseColor + (0xFFFF / 6) * i, 255, 255), + .65, 1500, behavior); + break; + } + } + } + lastHeartbeat = millis(); + } + + if (wasHeartbeatClicked) { + // Trigger immediate heartbeat effect + for (int i = 0; i < 6; i++) { + for (int j = 0; j < numberOfRipples; j++) { + if (ripples[j].state == dead) { + ripples[j].start(15, i, 0xEE1111, + float(random(100)) / 100.0 * .1 + .4, 1000, 0); + break; + } + } + } + lastHeartbeat = millis(); + } + + if (millis() - lastHeartbeat >= autoPulseTimeout) { + // When biometric data is unavailable, visualize at random + if (numberOfAutoPulseTypes && + millis() - lastRandomPulse >= randomPulseTime) { + unsigned int baseColor = random(0xFFFF); + + if (currentAutoPulseType == 255 || + (numberOfAutoPulseTypes > 1 && + millis() - lastAutoPulseChange >= autoPulseChangeTime)) { + byte possiblePulse = 255; + while (true) { + possiblePulse = random(3); + + if (possiblePulse == currentAutoPulseType) + continue; + + switch (possiblePulse) { + case 0: + if (!randomPulsesEnabled) + continue; + break; + + case 1: + if (!cubePulsesEnabled) + continue; + break; + + case 2: + if (!starburstPulsesEnabled) + continue; + break; + + default: + continue; + } + + currentAutoPulseType = possiblePulse; + lastAutoPulseChange = millis(); + break; + } + } + + switch (currentAutoPulseType) { + case 0: { + int node = 0; + bool foundStartingNode = false; + while (!foundStartingNode) { + node = random(25); + foundStartingNode = true; + for (int i = 0; i < numberOfBorderNodes; i++) { + // Don't fire a pulse on one of the outer nodes - it + // looks boring + if (node == borderNodes[i]) + foundStartingNode = false; + } + + if (node == lastAutoPulseNode) + foundStartingNode = false; + } + + lastAutoPulseNode = node; + + for (int i = 0; i < 6; i++) { + if (nodeConnections[node][i] >= 0) { + for (int j = 0; j < numberOfRipples; j++) { + if (ripples[j].state == dead) { + ripples[j].start( + node, i, + // strip0.ColorHSV(baseColor + // + (0xFFFF / 6) * i, + // 255, 255), + Adafruit_DotStar_ColorHSV(baseColor, 255, + 255), + float(random(100)) / 100.0 * .2 + .5, 3000, + 1); + + break; + } + } + } + } + break; + } + + case 1: { + int node = cubeNodes[random(numberOfCubeNodes)]; + + while (node == lastAutoPulseNode) + node = cubeNodes[random(numberOfCubeNodes)]; + + lastAutoPulseNode = node; + + byte behavior = random(2) ? alwaysTurnsLeft : alwaysTurnsRight; + + for (int i = 0; i < 6; i++) { + if (nodeConnections[node][i] >= 0) { + for (int j = 0; j < numberOfRipples; j++) { + if (ripples[j].state == dead) { + ripples[j].start( + node, i, + // strip0.ColorHSV(baseColor + // + (0xFFFF / 6) * i, + // 255, 255), + Adafruit_DotStar_ColorHSV(baseColor, 255, + 255), + .5, 2000, behavior); + + break; + } + } + } + } + break; + } + + case 2: { + byte behavior = random(2) ? alwaysTurnsLeft : alwaysTurnsRight; + + lastAutoPulseNode = starburstNode; + + for (int i = 0; i < 6; i++) { + for (int j = 0; j < numberOfRipples; j++) { + if (ripples[j].state == dead) { + ripples[j].start( + starburstNode, i, + Adafruit_DotStar_ColorHSV( + baseColor + (0xFFFF / 6) * i, 255, 255), + .65, 1500, behavior); + + break; + } + } + } + break; + } + + default: + break; + } + lastRandomPulse = millis(); + } + + if (simulatedBiometricsEnabled) { + // Simulated heartbeat + if (millis() >= nextSimulatedHeartbeat) { + for (int i = 0; i < 6; i++) { + for (int j = 0; j < numberOfRipples; j++) { + if (ripples[j].state == dead) { + ripples[j].start( + 15, i, 0xEE1111, + float(random(100)) / 100.0 * .1 + .4, 1000, 0); + + break; + } + } + } + + nextSimulatedHeartbeat = millis() + simulatedHeartbeatBaseTime + + random(simulatedHeartbeatVariance); + } + + // Simulated EDA ripples + if (millis() >= nextSimulatedEda) { + for (int i = 0; i < 10; i++) { + for (int j = 0; j < numberOfRipples; j++) { + if (ripples[j].state == dead) { + byte targetNode = + borderNodes[random(numberOfBorderNodes)]; + byte direction = 255; + + while (direction == 255) { + direction = random(6); + if (nodeConnections[targetNode][direction] < 0) + direction = 255; + } + + ripples[j].start( + targetNode, direction, 0x1111EE, + float(random(100)) / 100.0 * .5 + 2, 300, 2); + + break; + } + } + } + + nextSimulatedEda = millis() + simulatedEdaBaseTime + + random(simulatedEdaVariance); + } + } + } + + // Serial.print("Benchmark: "); + // Serial.println(millis() - benchmark); +} + +#endif // __AVR__ diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/detail.h b/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/detail.h new file mode 100644 index 0000000..af898d1 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/detail.h @@ -0,0 +1,80 @@ +#pragma once + +#include "fl/stdint.h" + + +inline uint32_t Adafruit_DotStar_ColorHSV(uint16_t hue, uint8_t sat, uint8_t val) { + + uint8_t r, g, b; + + // Remap 0-65535 to 0-1529. Pure red is CENTERED on the 64K rollover; + // 0 is not the start of pure red, but the midpoint...a few values above + // zero and a few below 65536 all yield pure red (similarly, 32768 is the + // midpoint, not start, of pure cyan). The 8-bit RGB hexcone (256 values + // each for red, green, blue) really only allows for 1530 distinct hues + // (not 1536, more on that below), but the full unsigned 16-bit type was + // chosen for hue so that one's code can easily handle a contiguous color + // wheel by allowing hue to roll over in either direction. + hue = (hue * 1530L + 32768) / 65536; + // Because red is centered on the rollover point (the +32768 above, + // essentially a fixed-point +0.5), the above actually yields 0 to 1530, + // where 0 and 1530 would yield the same thing. Rather than apply a + // costly modulo operator, 1530 is handled as a special case below. + + // So you'd think that the color "hexcone" (the thing that ramps from + // pure red, to pure yellow, to pure green and so forth back to red, + // yielding six slices), and with each color component having 256 + // possible values (0-255), might have 1536 possible items (6*256), + // but in reality there's 1530. This is because the last element in + // each 256-element slice is equal to the first element of the next + // slice, and keeping those in there this would create small + // discontinuities in the color wheel. So the last element of each + // slice is dropped...we regard only elements 0-254, with item 255 + // being picked up as element 0 of the next slice. Like this: + // Red to not-quite-pure-yellow is: 255, 0, 0 to 255, 254, 0 + // Pure yellow to not-quite-pure-green is: 255, 255, 0 to 1, 255, 0 + // Pure green to not-quite-pure-cyan is: 0, 255, 0 to 0, 255, 254 + // and so forth. Hence, 1530 distinct hues (0 to 1529), and hence why + // the constants below are not the multiples of 256 you might expect. + + // Convert hue to R,G,B (nested ifs faster than divide+mod+switch): + if (hue < 510) { // Red to Green-1 + b = 0; + if (hue < 255) { // Red to Yellow-1 + r = 255; + g = hue; // g = 0 to 254 + } else { // Yellow to Green-1 + r = 510 - hue; // r = 255 to 1 + g = 255; + } + } else if (hue < 1020) { // Green to Blue-1 + r = 0; + if (hue < 765) { // Green to Cyan-1 + g = 255; + b = hue - 510; // b = 0 to 254 + } else { // Cyan to Blue-1 + g = 1020 - hue; // g = 255 to 1 + b = 255; + } + } else if (hue < 1530) { // Blue to Red-1 + g = 0; + if (hue < 1275) { // Blue to Magenta-1 + r = hue - 1020; // r = 0 to 254 + b = 255; + } else { // Magenta to Red-1 + r = 255; + b = 1530 - hue; // b = 255 to 1 + } + } else { // Last 0.5 Red (quicker than % operator) + r = 255; + g = b = 0; + } + + // Apply saturation and value to R,G,B, pack into 32-bit result: + uint32_t v1 = 1 + val; // 1 to 256; allows >>8 instead of /255 + uint16_t s1 = 1 + sat; // 1 to 256; same reason + uint8_t s2 = 255 - sat; // 255 to 0 + return ((((((r * s1) >> 8) + s2) * v1) & 0xff00) << 8) | + (((((g * s1) >> 8) + s2) * v1) & 0xff00) | + (((((b * s1) >> 8) + s2) * v1) >> 8); +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/gary_woos_wled_port/gary_woos_wled_ledmap.h b/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/gary_woos_wled_port/gary_woos_wled_ledmap.h new file mode 100644 index 0000000..15df196 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/gary_woos_wled_port/gary_woos_wled_ledmap.h @@ -0,0 +1,47 @@ +#pragma once + + +const char JSON_MAP[] = R"({"map": [ + +406,407,408,409,410,411,412,413,414,415,416,417,418,419, +420,421,422,423,424,425,426,427,428,429,430,431,432,433, +434,435,436,437,438,439,440,441,442,443,444,445,446,447, +532,533,534,535,536,537,538,539,540,541,542,543,544,545, +546,547,548,549,550,551,552,553,554,555,556,557,558,559, +377,376,375,374,373,372,371,370,369,368,367,366,365,364, +363,362,361,360,359,358,357,356,355,354,353,352,351,350, +392,393,394,395,396,397,398,399,400,401,402,403,404,405, +223,222,221,220,219,218,217,216,215,214,213,212,211,210, +125,124,123,122,121,120,119,118,117,116,115,114,113,112, +111,110,109,108,107,106,105,104,103,102,101,100,99,98, +97,96,95,94,93,92,91,90,89,88,87,86,85,84, +168,169,170,171,172,173,174,175,176,177,178,179,180,181, +182,183,184,185,186,187,188,189,190,191,192,193,194,195, +196,197,198,199,200,201,202,203,204,205,206,207,208,209, +126,127,128,129,130,131,132,133,134,135,136,137,138,139, +307,306,305,304,303,302,301,300,299,298,297,296,295,294, +349,348,347,346,345,344,343,342,341,340,339,338,337,336, +391,390,389,388,387,386,385,384,383,382,381,380,379,378, +13,12,11,10,9,8,7,6,5,4,3,2,1,0, +461,460,459,458,457,456,455,454,453,452,451,450,449,448, +531,530,529,528,527,526,525,524,523,522,521,520,519,518, +517,516,515,514,513,512,511,510,509,508,507,506,505,504, +503,502,501,500,499,498,497,496,495,494,493,492,491,490, +476,477,478,479,480,481,482,483,484,485,486,487,488,489, +321,320,319,318,317,316,315,314,313,312,311,310,309,308, +153,152,151,150,149,148,147,146,145,144,143,142,141,140, +322,323,324,325,326,327,328,329,330,331,332,333,334,335, +475,474,473,472,471,470,469,468,467,466,465,464,463,462, +154,155,156,157,158,159,160,161,162,163,164,165,166,167, +14,15,16,17,18,19,20,21,22,23,24,25,26,27, +28,29,30,31,32,33,34,35,36,37,38,39,40,41, +42,43,44,45,46,47,48,49,50,51,52,53,54,55, +56,57,58,59,60,61,62,63,64,65,66,67,68,69, +70,71,72,73,74,75,76,77,78,79,80,81,82,83, +237,236,235,234,233,232,231,230,229,228,227,226,225,224, +238,239,240,241,242,243,244,245,246,247,248,249,250,251, +252,253,254,255,256,257,258,259,260,261,262,263,264,265, +266,267,268,269,270,271,272,273,274,275,276,277,278,279, +280,281,282,283,284,285,286,287,288,289,290,291,292,293 +]} +)"; \ No newline at end of file diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/gary_woos_wled_port/presets.json b/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/gary_woos_wled_port/presets.json new file mode 100644 index 0000000..54de1b9 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/gary_woos_wled_port/presets.json @@ -0,0 +1,6681 @@ +{ + "0": {}, + "1": { + "mainseg": 1, + "seg": [ + { + "id": 0, + "start": 0, + "stop": 168, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Big Hex", + "col": [ + [ + 255, + 255, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 44, + "sx": 0, + "ix": 0, + "pal": 11, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "id": 1, + "start": 168, + "stop": 336, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Star", + "col": [ + [ + 255, + 255, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 44, + "sx": 0, + "ix": 0, + "pal": 11, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "id": 2, + "start": 336, + "stop": 420, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Inner", + "col": [ + [ + 255, + 255, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 44, + "sx": 0, + "ix": 0, + "pal": 11, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "id": 3, + "start": 420, + "stop": 560, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Ears", + "col": [ + [ + 255, + 255, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 44, + "sx": 0, + "ix": 0, + "pal": 11, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + } + ], + "n": "Tetrix" + }, + "2": { + "mainseg": 1, + "seg": [ + { + "id": 0, + "start": 0, + "stop": 168, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Big Hex", + "col": [ + [ + 255, + 255, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 4, + "sx": 207, + "ix": 198, + "pal": 11, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": true, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "id": 1, + "start": 168, + "stop": 336, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Star", + "col": [ + [ + 255, + 255, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 4, + "sx": 207, + "ix": 198, + "pal": 11, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": true, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "id": 2, + "start": 336, + "stop": 420, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Inner", + "col": [ + [ + 255, + 255, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 4, + "sx": 207, + "ix": 198, + "pal": 11, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": true, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "id": 3, + "start": 420, + "stop": 560, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Ears", + "col": [ + [ + 255, + 255, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 4, + "sx": 207, + "ix": 198, + "pal": 11, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": true, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + } + ], + "n": "Wipe Random" + }, + "3": { + "mainseg": 1, + "seg": [ + { + "id": 0, + "start": 0, + "stop": 168, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Big Hex", + "col": [ + [ + 255, + 255, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 38, + "sx": 24, + "ix": 213, + "pal": 50, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": true, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 1, + "start": 168, + "stop": 336, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Star", + "col": [ + [ + 255, + 255, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 38, + "sx": 24, + "ix": 213, + "pal": 50, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": true, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 2, + "start": 336, + "stop": 420, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Inner", + "col": [ + [ + 255, + 255, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 38, + "sx": 24, + "ix": 213, + "pal": 50, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": true, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 3, + "start": 420, + "stop": 560, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Ears", + "col": [ + [ + 255, + 255, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 38, + "sx": 24, + "ix": 213, + "pal": 50, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": true, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + } + ], + "n": "Aurora Borealis" + }, + "4": { + "playlist": { + "ps": [ + 1, + 6, + 9, + 14, + 10, + 3, + 15, + 11, + 20, + 7, + 17, + 12, + 19, + 13, + 18, + 2 + ], + "dur": [ + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300 + ], + "transition": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "repeat": 0, + "end": 0, + "r": 1 + }, + "on": true, + "n": "Random", + "ql": "🔀" + }, + "5": { + "mainseg": 1, + "seg": [ + { + "id": 0, + "start": 0, + "stop": 168, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Big Hex", + "col": [ + [ + 255, + 0, + 0 + ], + [ + 255, + 255, + 255 + ], + [ + 255, + 255, + 255 + ] + ], + "fx": 37, + "sx": 0, + "ix": 255, + "pal": 2, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "id": 1, + "start": 168, + "stop": 336, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Star", + "col": [ + [ + 255, + 0, + 0 + ], + [ + 255, + 255, + 255 + ], + [ + 255, + 255, + 255 + ] + ], + "fx": 37, + "sx": 0, + "ix": 255, + "pal": 2, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "id": 2, + "start": 336, + "stop": 420, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Inner", + "col": [ + [ + 255, + 0, + 0 + ], + [ + 255, + 255, + 255 + ], + [ + 255, + 255, + 255 + ] + ], + "fx": 37, + "sx": 0, + "ix": 255, + "pal": 2, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "id": 3, + "start": 420, + "stop": 560, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Ears", + "col": [ + [ + 255, + 0, + 0 + ], + [ + 255, + 255, + 255 + ], + [ + 255, + 255, + 255 + ] + ], + "fx": 37, + "sx": 0, + "ix": 255, + "pal": 2, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + } + ], + "n": "Candy Cane" + }, + "6": { + "mainseg": 1, + "seg": [ + { + "id": 0, + "start": 0, + "stop": 168, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Big Hex", + "col": [ + [ + 255, + 160, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ] + ], + "fx": 5, + "sx": 85, + "ix": 128, + "pal": 0, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 1, + "start": 168, + "stop": 336, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Star", + "col": [ + [ + 255, + 160, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ] + ], + "fx": 5, + "sx": 85, + "ix": 128, + "pal": 0, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 2, + "start": 336, + "stop": 420, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Inner", + "col": [ + [ + 255, + 160, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ] + ], + "fx": 5, + "sx": 85, + "ix": 128, + "pal": 0, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 3, + "start": 420, + "stop": 560, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Ears", + "col": [ + [ + 255, + 160, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ] + ], + "fx": 5, + "sx": 85, + "ix": 128, + "pal": 0, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + } + ], + "n": "Random Colors" + }, + "7": { + "mainseg": 1, + "seg": [ + { + "id": 0, + "start": 0, + "stop": 168, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Big Hex", + "col": [ + [ + 255, + 3, + 158 + ], + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ] + ], + "fx": 108, + "sx": 49, + "ix": 21, + "pal": 2, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 1, + "start": 168, + "stop": 336, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Star", + "col": [ + [ + 255, + 3, + 158 + ], + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ] + ], + "fx": 108, + "sx": 49, + "ix": 21, + "pal": 2, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 2, + "start": 336, + "stop": 420, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Inner", + "col": [ + [ + 255, + 3, + 158 + ], + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ] + ], + "fx": 108, + "sx": 49, + "ix": 21, + "pal": 2, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 3, + "start": 420, + "stop": 560, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Ears", + "col": [ + [ + 255, + 3, + 158 + ], + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ] + ], + "fx": 108, + "sx": 49, + "ix": 21, + "pal": 2, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + } + ], + "n": "Sine" + }, + "8": { + "mainseg": 1, + "seg": [ + { + "id": 0, + "start": 0, + "stop": 168, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Big Hex", + "col": [ + [ + 3, + 255, + 3 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 30, + "sx": 56, + "ix": 255, + "pal": 0, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "id": 1, + "start": 168, + "stop": 336, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Star", + "col": [ + [ + 3, + 255, + 3 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 30, + "sx": 56, + "ix": 255, + "pal": 0, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "id": 2, + "start": 336, + "stop": 420, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Inner", + "col": [ + [ + 3, + 255, + 3 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 30, + "sx": 56, + "ix": 255, + "pal": 0, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "id": 3, + "start": 420, + "stop": 560, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Ears", + "col": [ + [ + 3, + 255, + 3 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 30, + "sx": 56, + "ix": 255, + "pal": 0, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + } + ], + "n": "Chase Rainbow" + }, + "9": { + "mainseg": 1, + "seg": [ + { + "id": 0, + "start": 0, + "stop": 168, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Big Hex", + "col": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 27, + "sx": 0, + "ix": 255, + "pal": 1, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "id": 1, + "start": 168, + "stop": 336, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Star", + "col": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 27, + "sx": 0, + "ix": 255, + "pal": 1, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "id": 2, + "start": 336, + "stop": 420, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Inner", + "col": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 27, + "sx": 0, + "ix": 255, + "pal": 1, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "id": 3, + "start": 420, + "stop": 560, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Ears", + "col": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 27, + "sx": 0, + "ix": 255, + "pal": 1, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + } + ], + "n": "Android" + }, + "10": { + "mainseg": 1, + "seg": [ + { + "id": 0, + "start": 0, + "stop": 168, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Big Hex", + "col": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 91, + "sx": 64, + "ix": 180, + "pal": 1, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "id": 1, + "start": 168, + "stop": 336, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Star", + "col": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 91, + "sx": 64, + "ix": 180, + "pal": 1, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "id": 2, + "start": 336, + "stop": 420, + "grp": 1, + "spc": 0, + "of": 0, + "on": false, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Inner", + "col": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 91, + "sx": 64, + "ix": 180, + "pal": 1, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "id": 3, + "start": 420, + "stop": 560, + "grp": 1, + "spc": 0, + "of": 0, + "on": false, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Ears", + "col": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 91, + "sx": 64, + "ix": 180, + "pal": 1, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + } + ], + "n": "Bouncing Balls" + }, + "11": { + "mainseg": 1, + "seg": [ + { + "id": 0, + "start": 0, + "stop": 168, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Big Hex", + "col": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 112, + "sx": 81, + "ix": 29, + "pal": 1, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 1, + "start": 168, + "stop": 336, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Star", + "col": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 112, + "sx": 81, + "ix": 29, + "pal": 1, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 2, + "start": 336, + "stop": 420, + "grp": 1, + "spc": 0, + "of": 0, + "on": false, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Inner", + "col": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 112, + "sx": 81, + "ix": 29, + "pal": 1, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 3, + "start": 420, + "stop": 560, + "grp": 1, + "spc": 0, + "of": 0, + "on": false, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Ears", + "col": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 112, + "sx": 81, + "ix": 29, + "pal": 1, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + } + ], + "n": "Dancing Shadows" + }, + "12": { + "mainseg": 1, + "seg": [ + { + "id": 0, + "start": 0, + "stop": 168, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Big Hex", + "col": [ + [ + 25, + 255, + 244 + ], + [ + 0, + 0, + 0 + ], + [ + 248, + 255, + 38 + ] + ], + "fx": 52, + "sx": 128, + "ix": 37, + "pal": 2, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 1, + "start": 168, + "stop": 336, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Star", + "col": [ + [ + 25, + 255, + 244 + ], + [ + 0, + 0, + 0 + ], + [ + 248, + 255, + 38 + ] + ], + "fx": 52, + "sx": 128, + "ix": 37, + "pal": 2, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": true, + "rev": true, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 2, + "start": 336, + "stop": 420, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Inner", + "col": [ + [ + 25, + 255, + 244 + ], + [ + 0, + 0, + 0 + ], + [ + 248, + 255, + 38 + ] + ], + "fx": 52, + "sx": 128, + "ix": 37, + "pal": 2, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 3, + "start": 420, + "stop": 560, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Ears", + "col": [ + [ + 25, + 255, + 244 + ], + [ + 0, + 0, + 0 + ], + [ + 248, + 255, + 38 + ] + ], + "fx": 52, + "sx": 128, + "ix": 37, + "pal": 2, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + } + ], + "n": "Running Dual" + }, + "13": { + "mainseg": 1, + "seg": [ + { + "id": 0, + "start": 0, + "stop": 168, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Big Hex", + "col": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 132, + "sx": 110, + "ix": 128, + "pal": 1, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 2 + }, + { + "id": 1, + "start": 168, + "stop": 336, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Star", + "col": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 132, + "sx": 110, + "ix": 128, + "pal": 1, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": true, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 2 + }, + { + "id": 2, + "start": 336, + "stop": 420, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Inner", + "col": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 132, + "sx": 110, + "ix": 128, + "pal": 1, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": true, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 2 + }, + { + "id": 3, + "start": 420, + "stop": 560, + "grp": 1, + "spc": 0, + "of": 0, + "on": false, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Ears", + "col": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 132, + "sx": 110, + "ix": 128, + "pal": 1, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 2 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + } + ], + "n": "Gravimeter (AR)" + }, + "14": { + "mainseg": 1, + "seg": [ + { + "id": 0, + "start": 0, + "stop": 168, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Big Hex", + "col": [ + [ + 255, + 0, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 76, + "sx": 16, + "ix": 63, + "pal": 50, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 1, + "m12": 2 + }, + { + "id": 1, + "start": 168, + "stop": 336, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Star", + "col": [ + [ + 255, + 0, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 76, + "sx": 16, + "ix": 63, + "pal": 50, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": true, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 1, + "m12": 2 + }, + { + "id": 2, + "start": 336, + "stop": 420, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Inner", + "col": [ + [ + 255, + 0, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 76, + "sx": 16, + "ix": 63, + "pal": 50, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": true, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 1, + "m12": 2 + }, + { + "id": 3, + "start": 420, + "stop": 560, + "grp": 1, + "spc": 0, + "of": 0, + "on": false, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Ears", + "col": [ + [ + 255, + 0, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 76, + "sx": 16, + "ix": 63, + "pal": 50, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 1, + "m12": 2 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + } + ], + "n": "Meteor" + }, + "15": { + "mainseg": 1, + "seg": [ + { + "id": 0, + "start": 0, + "stop": 168, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Big Hex", + "col": [ + [ + 255, + 0, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 95, + "sx": 128, + "ix": 128, + "pal": 70, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "id": 1, + "start": 168, + "stop": 336, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Star", + "col": [ + [ + 255, + 0, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 95, + "sx": 128, + "ix": 128, + "pal": 70, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": true, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "id": 2, + "start": 336, + "stop": 420, + "grp": 1, + "spc": 0, + "of": 0, + "on": false, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Inner", + "col": [ + [ + 255, + 0, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 95, + "sx": 128, + "ix": 128, + "pal": 70, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": true, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "id": 3, + "start": 420, + "stop": 560, + "grp": 1, + "spc": 0, + "of": 0, + "on": false, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Ears", + "col": [ + [ + 255, + 0, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 95, + "sx": 128, + "ix": 128, + "pal": 70, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + } + ], + "n": "Popcorn" + }, + "16": { + "on": true, + "bri": 32, + "transition": 7, + "mainseg": 1, + "seg": [ + { + "id": 0, + "start": 0, + "stop": 168, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Big Hex", + "col": [ + [ + 255, + 160, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ] + ], + "fx": 0, + "sx": 128, + "ix": 128, + "pal": 0, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "id": 1, + "start": 168, + "stop": 336, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Star", + "col": [ + [ + 255, + 160, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ] + ], + "fx": 0, + "sx": 128, + "ix": 128, + "pal": 0, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 2, + "start": 336, + "stop": 420, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Inner", + "col": [ + [ + 255, + 160, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ] + ], + "fx": 0, + "sx": 128, + "ix": 128, + "pal": 0, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "id": 3, + "start": 420, + "stop": 560, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Ears", + "col": [ + [ + 255, + 160, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ] + ], + "fx": 0, + "sx": 128, + "ix": 128, + "pal": 0, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 1 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + } + ], + "n": "Solid" + }, + "17": { + "mainseg": 1, + "seg": [ + { + "id": 0, + "start": 0, + "stop": 168, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Big Hex", + "col": [ + [ + 255, + 0, + 0 + ], + [ + 255, + 255, + 255 + ], + [ + 255, + 255, + 255 + ] + ], + "fx": 159, + "sx": 210, + "ix": 255, + "pal": 2, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 2 + }, + { + "id": 1, + "start": 168, + "stop": 336, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Star", + "col": [ + [ + 255, + 0, + 0 + ], + [ + 255, + 255, + 255 + ], + [ + 255, + 255, + 255 + ] + ], + "fx": 159, + "sx": 210, + "ix": 255, + "pal": 2, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 2 + }, + { + "id": 2, + "start": 336, + "stop": 420, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Inner", + "col": [ + [ + 255, + 0, + 0 + ], + [ + 255, + 255, + 255 + ], + [ + 255, + 255, + 255 + ] + ], + "fx": 159, + "sx": 210, + "ix": 255, + "pal": 2, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 2 + }, + { + "id": 3, + "start": 420, + "stop": 560, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "n": "Ears", + "col": [ + [ + 255, + 0, + 0 + ], + [ + 255, + 255, + 255 + ], + [ + 255, + 255, + 255 + ] + ], + "fx": 159, + "sx": 210, + "ix": 255, + "pal": 2, + "c1": 8, + "c2": 20, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 2 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + } + ], + "n": "DJ Light (AR)" + }, + "18": { + "mainseg": 2, + "seg": [ + { + "id": 0, + "start": 0, + "stop": 168, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Big Hex", + "col": [ + [ + 25, + 255, + 244 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 255 + ] + ], + "fx": 93, + "sx": 128, + "ix": 151, + "pal": 2, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": false, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 1, + "start": 168, + "stop": 336, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Star", + "col": [ + [ + 25, + 255, + 244 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 255 + ] + ], + "fx": 93, + "sx": 128, + "ix": 151, + "pal": 2, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": false, + "rev": true, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 2, + "start": 336, + "stop": 420, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Inner", + "col": [ + [ + 25, + 255, + 244 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 255 + ] + ], + "fx": 93, + "sx": 128, + "ix": 151, + "pal": 2, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": true, + "rev": true, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 3, + "start": 420, + "stop": 560, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Ears", + "col": [ + [ + 25, + 255, + 244 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 255 + ] + ], + "fx": 93, + "sx": 128, + "ix": 151, + "pal": 2, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": false, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + } + ], + "n": "Sinelon Dual" + }, + "19": { + "mainseg": 2, + "seg": [ + { + "id": 0, + "start": 0, + "stop": 168, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Big Hex", + "col": [ + [ + 255, + 61, + 135 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 255 + ] + ], + "fx": 65, + "sx": 128, + "ix": 128, + "pal": 0, + "c1": 128, + "c2": 128, + "c3": 0, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 1, + "start": 168, + "stop": 336, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Star", + "col": [ + [ + 255, + 61, + 135 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 255 + ] + ], + "fx": 65, + "sx": 128, + "ix": 128, + "pal": 0, + "c1": 128, + "c2": 128, + "c3": 0, + "sel": true, + "rev": true, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 2, + "start": 336, + "stop": 420, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Inner", + "col": [ + [ + 255, + 61, + 135 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 255 + ] + ], + "fx": 65, + "sx": 128, + "ix": 128, + "pal": 0, + "c1": 128, + "c2": 128, + "c3": 0, + "sel": true, + "rev": true, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 3, + "start": 420, + "stop": 560, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Ears", + "col": [ + [ + 255, + 61, + 135 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 255 + ] + ], + "fx": 65, + "sx": 128, + "ix": 128, + "pal": 0, + "c1": 128, + "c2": 128, + "c3": 0, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + } + ], + "n": "Palette" + }, + "20": { + "mainseg": 2, + "seg": [ + { + "id": 0, + "start": 0, + "stop": 168, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Big Hex", + "col": [ + [ + 255, + 255, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 255 + ] + ], + "fx": 16, + "sx": 75, + "ix": 56, + "pal": 11, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 1, + "start": 168, + "stop": 336, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Star", + "col": [ + [ + 255, + 255, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 255 + ] + ], + "fx": 16, + "sx": 75, + "ix": 56, + "pal": 11, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": true, + "rev": true, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 2, + "start": 336, + "stop": 420, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Inner", + "col": [ + [ + 255, + 255, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 255 + ] + ], + "fx": 16, + "sx": 75, + "ix": 56, + "pal": 11, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": true, + "rev": true, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 3, + "start": 420, + "stop": 560, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Ears", + "col": [ + [ + 255, + 255, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 255 + ] + ], + "fx": 16, + "sx": 75, + "ix": 56, + "pal": 11, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + } + ], + "n": "Saw" + }, + "21": { + "mainseg": 1, + "seg": [ + { + "id": 0, + "start": 0, + "stop": 168, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Big Hex", + "col": [ + [ + 255, + 38, + 60 + ], + [ + 95, + 95, + 95 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 131, + "sx": 252, + "ix": 129, + "pal": 50, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 1, + "m12": 2 + }, + { + "id": 1, + "start": 168, + "stop": 336, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Star", + "col": [ + [ + 255, + 38, + 60 + ], + [ + 95, + 95, + 95 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 131, + "sx": 252, + "ix": 129, + "pal": 50, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 1, + "m12": 2 + }, + { + "id": 2, + "start": 336, + "stop": 420, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Inner", + "col": [ + [ + 255, + 38, + 60 + ], + [ + 95, + 95, + 95 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 131, + "sx": 252, + "ix": 129, + "pal": 50, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": true, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 1, + "m12": 2 + }, + { + "id": 3, + "start": 420, + "stop": 560, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Ears", + "col": [ + [ + 255, + 38, + 60 + ], + [ + 95, + 95, + 95 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 131, + "sx": 252, + "ix": 129, + "pal": 50, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 1, + "m12": 2 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + } + ], + "n": "Matripix (AR)" + }, + "22": { + "mainseg": 1, + "seg": [ + { + "id": 0, + "start": 0, + "stop": 168, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Big Hex", + "col": [ + [ + 0, + 0, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 144, + "sx": 128, + "ix": 128, + "pal": 53, + "c1": 128, + "c2": 0, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 1, + "start": 168, + "stop": 336, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Star", + "col": [ + [ + 0, + 0, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 144, + "sx": 128, + "ix": 128, + "pal": 53, + "c1": 128, + "c2": 0, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 2, + "start": 336, + "stop": 420, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Inner", + "col": [ + [ + 0, + 0, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 144, + "sx": 128, + "ix": 128, + "pal": 53, + "c1": 128, + "c2": 0, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 3, + "start": 420, + "stop": 560, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Ears", + "col": [ + [ + 0, + 0, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 144, + "sx": 128, + "ix": 128, + "pal": 53, + "c1": 128, + "c2": 0, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + } + ], + "n": "Puddlepeak (AR)" + }, + "23": { + "mainseg": 1, + "seg": [ + { + "id": 0, + "start": 0, + "stop": 168, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Big Hex", + "col": [ + [ + 0, + 0, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 136, + "sx": 128, + "ix": 128, + "pal": 28, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 2 + }, + { + "id": 1, + "start": 168, + "stop": 336, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Star", + "col": [ + [ + 0, + 0, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 136, + "sx": 128, + "ix": 128, + "pal": 28, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 2 + }, + { + "id": 2, + "start": 336, + "stop": 420, + "grp": 1, + "spc": 0, + "of": 0, + "on": false, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Inner", + "col": [ + [ + 0, + 0, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 136, + "sx": 128, + "ix": 128, + "pal": 28, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 2 + }, + { + "id": 3, + "start": 420, + "stop": 560, + "grp": 1, + "spc": 0, + "of": 0, + "on": false, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Ears", + "col": [ + [ + 0, + 0, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 136, + "sx": 128, + "ix": 128, + "pal": 28, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 2 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + } + ], + "n": "Noisemeter (AR)" + }, + "24": { + "mainseg": 1, + "seg": [ + { + "id": 0, + "start": 0, + "stop": 168, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Big Hex", + "col": [ + [ + 0, + 0, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 134, + "sx": 128, + "ix": 128, + "pal": 40, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 1, + "start": 168, + "stop": 336, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Star", + "col": [ + [ + 0, + 0, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 134, + "sx": 128, + "ix": 128, + "pal": 40, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 2, + "start": 336, + "stop": 420, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Inner", + "col": [ + [ + 0, + 0, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 134, + "sx": 128, + "ix": 128, + "pal": 40, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "id": 3, + "start": 420, + "stop": 560, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Ears", + "col": [ + [ + 0, + 0, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 134, + "sx": 128, + "ix": 128, + "pal": 40, + "c1": 128, + "c2": 128, + "c3": 16, + "sel": true, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + } + ], + "n": "Puddles (AR)" + }, + "25": { + "mainseg": 1, + "seg": [ + { + "id": 0, + "start": 0, + "stop": 168, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Big Hex", + "col": [ + [ + 0, + 0, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 140, + "sx": 162, + "ix": 199, + "pal": 55, + "c1": 35, + "c2": 0, + "c3": 16, + "sel": false, + "rev": true, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 2 + }, + { + "id": 1, + "start": 168, + "stop": 336, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Star", + "col": [ + [ + 0, + 0, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 140, + "sx": 162, + "ix": 153, + "pal": 55, + "c1": 71, + "c2": 0, + "c3": 16, + "sel": true, + "rev": true, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 2 + }, + { + "id": 2, + "start": 336, + "stop": 420, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Inner", + "col": [ + [ + 0, + 0, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 140, + "sx": 162, + "ix": 199, + "pal": 55, + "c1": 35, + "c2": 0, + "c3": 16, + "sel": false, + "rev": false, + "mi": false, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 2 + }, + { + "id": 3, + "start": 420, + "stop": 560, + "grp": 1, + "spc": 0, + "of": 0, + "on": true, + "frz": false, + "bri": 255, + "cct": 127, + "set": 0, + "n": "Ears", + "col": [ + [ + 0, + 0, + 255 + ], + [ + 0, + 0, + 0 + ], + [ + 255, + 0, + 0 + ] + ], + "fx": 140, + "sx": 162, + "ix": 199, + "pal": 55, + "c1": 35, + "c2": 0, + "c3": 16, + "sel": false, + "rev": false, + "mi": true, + "o1": false, + "o2": false, + "o3": false, + "si": 0, + "m12": 2 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + }, + { + "stop": 0 + } + ], + "n": "Waterfall (AR)" + }, + "26": { + "playlist": { + "ps": [ + 23, + 25, + 22, + 21, + 13, + 24, + 17 + ], + "dur": [ + 300, + 300, + 300, + 300, + 300, + 300, + 300 + ], + "transition": [ + 7, + 7, + 7, + 7, + 7, + 7, + 7 + ], + "repeat": 0, + "end": 0, + "r": 1 + }, + "on": true, + "n": "Audio Reactive Only", + "ql": "🔈" + }, + "27": { + "playlist": { + "ps": [ + 11, + 12, + 15, + 3, + 9, + 2, + 6, + 7, + 18, + 14, + 10, + 1, + 19, + 20 + ], + "dur": [ + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300 + ], + "transition": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "repeat": 0, + "end": 0, + "r": 1 + }, + "on": true, + "n": "Random (Non Audio Reactive)", + "ql": "🔇" + } + } \ No newline at end of file diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/gary_woos_wled_port/presets.min.json b/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/gary_woos_wled_port/presets.min.json new file mode 100644 index 0000000..04df4af --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/gary_woos_wled_port/presets.min.json @@ -0,0 +1 @@ +{"0":{},"5":{"mainseg":1,"seg":[{"id":0,"start":0,"stop":168,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Big Hex","col":[[255,0,0],[255,255,255],[255,255,255]],"fx":37,"sx":0,"ix":255,"pal":2,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"id":1,"start":168,"stop":336,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Star","col":[[255,0,0],[255,255,255],[255,255,255]],"fx":37,"sx":0,"ix":255,"pal":2,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"id":2,"start":336,"stop":420,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Inner","col":[[255,0,0],[255,255,255],[255,255,255]],"fx":37,"sx":0,"ix":255,"pal":2,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"id":3,"start":420,"stop":560,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Ears","col":[[255,0,0],[255,255,255],[255,255,255]],"fx":37,"sx":0,"ix":255,"pal":2,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0}],"n":"Candy Cane"} ,"4":{"playlist":{"ps":[1,6,9,14,10,3,15,11,20,7,17,12,19,13,18,2],"dur":[300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300],"transition":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"repeat":0,"end":0,"r":1},"on":true,"n":"Random","ql":"🔀"},"27":{"playlist":{"ps":[11,12,15,3,9,2,6,7,18,14,10,1,19,20],"dur":[300,300,300,300,300,300,300,300,300,300,300,300,300,300],"transition":[0,0,0,0,0,0,0,0,0,0,0,0,0,0],"repeat":0,"end":0,"r":1},"on":true,"n":"Random (Non Audio Reactive)","ql":"🔇"} ,"26":{"playlist":{"ps":[23,25,22,21,13,24,17],"dur":[300,300,300,300,300,300,300],"transition":[7,7,7,7,7,7,7],"repeat":0,"end":0,"r":1},"on":true,"n":"Audio Reactive Only","ql":"🔈"} ,"16":{"on":true,"bri":32,"transition":7,"mainseg":1,"seg":[{"id":0,"start":0,"stop":168,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Big Hex","col":[[255,160,0],[0,0,0],[0,0,0]],"fx":0,"sx":128,"ix":128,"pal":0,"c1":128,"c2":128,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"id":1,"start":168,"stop":336,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Star","col":[[255,160,0],[0,0,0],[0,0,0]],"fx":0,"sx":128,"ix":128,"pal":0,"c1":128,"c2":128,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":2,"start":336,"stop":420,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Inner","col":[[255,160,0],[0,0,0],[0,0,0]],"fx":0,"sx":128,"ix":128,"pal":0,"c1":128,"c2":128,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"id":3,"start":420,"stop":560,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Ears","col":[[255,160,0],[0,0,0],[0,0,0]],"fx":0,"sx":128,"ix":128,"pal":0,"c1":128,"c2":128,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0}],"n":"Solid"},"6":{"mainseg":1,"seg":[{"id":0,"start":0,"stop":168,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Big Hex","col":[[255,160,0],[0,0,0],[0,0,0]],"fx":5,"sx":85,"ix":128,"pal":0,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":1,"start":168,"stop":336,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Star","col":[[255,160,0],[0,0,0],[0,0,0]],"fx":5,"sx":85,"ix":128,"pal":0,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":2,"start":336,"stop":420,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Inner","col":[[255,160,0],[0,0,0],[0,0,0]],"fx":5,"sx":85,"ix":128,"pal":0,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":3,"start":420,"stop":560,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Ears","col":[[255,160,0],[0,0,0],[0,0,0]],"fx":5,"sx":85,"ix":128,"pal":0,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0}],"n":"Random Colors"} ,"7":{"mainseg":1,"seg":[{"id":0,"start":0,"stop":168,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Big Hex","col":[[255,3,158],[0,0,0],[0,0,0]],"fx":108,"sx":49,"ix":21,"pal":2,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":1,"start":168,"stop":336,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Star","col":[[255,3,158],[0,0,0],[0,0,0]],"fx":108,"sx":49,"ix":21,"pal":2,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":2,"start":336,"stop":420,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Inner","col":[[255,3,158],[0,0,0],[0,0,0]],"fx":108,"sx":49,"ix":21,"pal":2,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":3,"start":420,"stop":560,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Ears","col":[[255,3,158],[0,0,0],[0,0,0]],"fx":108,"sx":49,"ix":21,"pal":2,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0}],"n":"Sine"} ,"8":{"mainseg":1,"seg":[{"id":0,"start":0,"stop":168,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Big Hex","col":[[3,255,3],[0,0,0],[255,0,0]],"fx":30,"sx":56,"ix":255,"pal":0,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"id":1,"start":168,"stop":336,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Star","col":[[3,255,3],[0,0,0],[255,0,0]],"fx":30,"sx":56,"ix":255,"pal":0,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"id":2,"start":336,"stop":420,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Inner","col":[[3,255,3],[0,0,0],[255,0,0]],"fx":30,"sx":56,"ix":255,"pal":0,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"id":3,"start":420,"stop":560,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Ears","col":[[3,255,3],[0,0,0],[255,0,0]],"fx":30,"sx":56,"ix":255,"pal":0,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0}],"n":"Chase Rainbow"} ,"9":{"mainseg":1,"seg":[{"id":0,"start":0,"stop":168,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Big Hex","col":[[0,0,0],[0,0,0],[255,0,0]],"fx":27,"sx":0,"ix":255,"pal":1,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"id":1,"start":168,"stop":336,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Star","col":[[0,0,0],[0,0,0],[255,0,0]],"fx":27,"sx":0,"ix":255,"pal":1,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"id":2,"start":336,"stop":420,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Inner","col":[[0,0,0],[0,0,0],[255,0,0]],"fx":27,"sx":0,"ix":255,"pal":1,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"id":3,"start":420,"stop":560,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Ears","col":[[0,0,0],[0,0,0],[255,0,0]],"fx":27,"sx":0,"ix":255,"pal":1,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0}],"n":"Android"} ,"10":{"mainseg":1,"seg":[{"id":0,"start":0,"stop":168,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Big Hex","col":[[0,0,0],[0,0,0],[255,0,0]],"fx":91,"sx":64,"ix":180,"pal":1,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"id":1,"start":168,"stop":336,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Star","col":[[0,0,0],[0,0,0],[255,0,0]],"fx":91,"sx":64,"ix":180,"pal":1,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"id":2,"start":336,"stop":420,"grp":1,"spc":0,"of":0,"on":false,"frz":false,"bri":255,"cct":127,"n":"Inner","col":[[0,0,0],[0,0,0],[255,0,0]],"fx":91,"sx":64,"ix":180,"pal":1,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"id":3,"start":420,"stop":560,"grp":1,"spc":0,"of":0,"on":false,"frz":false,"bri":255,"cct":127,"n":"Ears","col":[[0,0,0],[0,0,0],[255,0,0]],"fx":91,"sx":64,"ix":180,"pal":1,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0}],"n":"Bouncing Balls"} ,"11":{"mainseg":1,"seg":[{"id":0,"start":0,"stop":168,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Big Hex","col":[[0,0,0],[0,0,0],[255,0,0]],"fx":112,"sx":81,"ix":29,"pal":1,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":1,"start":168,"stop":336,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Star","col":[[0,0,0],[0,0,0],[255,0,0]],"fx":112,"sx":81,"ix":29,"pal":1,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":2,"start":336,"stop":420,"grp":1,"spc":0,"of":0,"on":false,"frz":false,"bri":255,"cct":127,"n":"Inner","col":[[0,0,0],[0,0,0],[255,0,0]],"fx":112,"sx":81,"ix":29,"pal":1,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":3,"start":420,"stop":560,"grp":1,"spc":0,"of":0,"on":false,"frz":false,"bri":255,"cct":127,"n":"Ears","col":[[0,0,0],[0,0,0],[255,0,0]],"fx":112,"sx":81,"ix":29,"pal":1,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0}],"n":"Dancing Shadows"},"19":{"mainseg":2,"seg":[{"id":0,"start":0,"stop":168,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Big Hex","col":[[255,61,135],[0,0,0],[255,0,255]],"fx":65,"sx":128,"ix":128,"pal":0,"c1":128,"c2":128,"c3":0,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":1,"start":168,"stop":336,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Star","col":[[255,61,135],[0,0,0],[255,0,255]],"fx":65,"sx":128,"ix":128,"pal":0,"c1":128,"c2":128,"c3":0,"sel":true,"rev":true,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":2,"start":336,"stop":420,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Inner","col":[[255,61,135],[0,0,0],[255,0,255]],"fx":65,"sx":128,"ix":128,"pal":0,"c1":128,"c2":128,"c3":0,"sel":true,"rev":true,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":3,"start":420,"stop":560,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Ears","col":[[255,61,135],[0,0,0],[255,0,255]],"fx":65,"sx":128,"ix":128,"pal":0,"c1":128,"c2":128,"c3":0,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0}],"n":"Palette"} ,"13":{"mainseg":1,"seg":[{"id":0,"start":0,"stop":168,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Big Hex","col":[[0,0,0],[0,0,0],[255,0,0]],"fx":132,"sx":110,"ix":128,"pal":1,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":2},{"id":1,"start":168,"stop":336,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Star","col":[[0,0,0],[0,0,0],[255,0,0]],"fx":132,"sx":110,"ix":128,"pal":1,"c1":8,"c2":20,"c3":16,"sel":true,"rev":true,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":2},{"id":2,"start":336,"stop":420,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Inner","col":[[0,0,0],[0,0,0],[255,0,0]],"fx":132,"sx":110,"ix":128,"pal":1,"c1":8,"c2":20,"c3":16,"sel":true,"rev":true,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":2},{"id":3,"start":420,"stop":560,"grp":1,"spc":0,"of":0,"on":false,"frz":false,"bri":255,"cct":127,"n":"Ears","col":[[0,0,0],[0,0,0],[255,0,0]],"fx":132,"sx":110,"ix":128,"pal":1,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":2},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0}],"n":"Gravimeter (AR)"} ,"14":{"mainseg":1,"seg":[{"id":0,"start":0,"stop":168,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Big Hex","col":[[255,0,0],[0,0,0],[255,0,0]],"fx":76,"sx":16,"ix":63,"pal":50,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":1,"m12":2},{"id":1,"start":168,"stop":336,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Star","col":[[255,0,0],[0,0,0],[255,0,0]],"fx":76,"sx":16,"ix":63,"pal":50,"c1":8,"c2":20,"c3":16,"sel":true,"rev":true,"mi":false,"o1":false,"o2":false,"o3":false,"si":1,"m12":2},{"id":2,"start":336,"stop":420,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Inner","col":[[255,0,0],[0,0,0],[255,0,0]],"fx":76,"sx":16,"ix":63,"pal":50,"c1":8,"c2":20,"c3":16,"sel":true,"rev":true,"mi":false,"o1":false,"o2":false,"o3":false,"si":1,"m12":2},{"id":3,"start":420,"stop":560,"grp":1,"spc":0,"of":0,"on":false,"frz":false,"bri":255,"cct":127,"n":"Ears","col":[[255,0,0],[0,0,0],[255,0,0]],"fx":76,"sx":16,"ix":63,"pal":50,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":1,"m12":2},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0}],"n":"Meteor"} ,"15":{"mainseg":1,"seg":[{"id":0,"start":0,"stop":168,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Big Hex","col":[[255,0,0],[0,0,0],[255,0,0]],"fx":95,"sx":128,"ix":128,"pal":70,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"id":1,"start":168,"stop":336,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Star","col":[[255,0,0],[0,0,0],[255,0,0]],"fx":95,"sx":128,"ix":128,"pal":70,"c1":8,"c2":20,"c3":16,"sel":true,"rev":true,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"id":2,"start":336,"stop":420,"grp":1,"spc":0,"of":0,"on":false,"frz":false,"bri":255,"cct":127,"n":"Inner","col":[[255,0,0],[0,0,0],[255,0,0]],"fx":95,"sx":128,"ix":128,"pal":70,"c1":8,"c2":20,"c3":16,"sel":true,"rev":true,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"id":3,"start":420,"stop":560,"grp":1,"spc":0,"of":0,"on":false,"frz":false,"bri":255,"cct":127,"n":"Ears","col":[[255,0,0],[0,0,0],[255,0,0]],"fx":95,"sx":128,"ix":128,"pal":70,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0}],"n":"Popcorn"},"20":{"mainseg":2,"seg":[{"id":0,"start":0,"stop":168,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Big Hex","col":[[255,255,255],[0,0,0],[255,0,255]],"fx":16,"sx":75,"ix":56,"pal":11,"c1":128,"c2":128,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":1,"start":168,"stop":336,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Star","col":[[255,255,255],[0,0,0],[255,0,255]],"fx":16,"sx":75,"ix":56,"pal":11,"c1":128,"c2":128,"c3":16,"sel":true,"rev":true,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":2,"start":336,"stop":420,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Inner","col":[[255,255,255],[0,0,0],[255,0,255]],"fx":16,"sx":75,"ix":56,"pal":11,"c1":128,"c2":128,"c3":16,"sel":true,"rev":true,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":3,"start":420,"stop":560,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Ears","col":[[255,255,255],[0,0,0],[255,0,255]],"fx":16,"sx":75,"ix":56,"pal":11,"c1":128,"c2":128,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0}],"n":"Saw"} ,"2":{"mainseg":1,"seg":[{"id":0,"start":0,"stop":168,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Big Hex","col":[[255,255,255],[0,0,0],[255,0,0]],"fx":4,"sx":207,"ix":198,"pal":11,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":true,"o1":true,"o2":false,"o3":false,"si":0,"m12":1},{"id":1,"start":168,"stop":336,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Star","col":[[255,255,255],[0,0,0],[255,0,0]],"fx":4,"sx":207,"ix":198,"pal":11,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":true,"o1":true,"o2":false,"o3":false,"si":0,"m12":1},{"id":2,"start":336,"stop":420,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Inner","col":[[255,255,255],[0,0,0],[255,0,0]],"fx":4,"sx":207,"ix":198,"pal":11,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":false,"o1":true,"o2":false,"o3":false,"si":0,"m12":1},{"id":3,"start":420,"stop":560,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Ears","col":[[255,255,255],[0,0,0],[255,0,0]],"fx":4,"sx":207,"ix":198,"pal":11,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":true,"o1":true,"o2":false,"o3":false,"si":0,"m12":1},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0}],"n":"Wipe Random"},"12":{"mainseg":1,"seg":[{"id":0,"start":0,"stop":168,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Big Hex","col":[[25,255,244],[0,0,0],[248,255,38]],"fx":52,"sx":128,"ix":37,"pal":2,"c1":128,"c2":128,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":1,"start":168,"stop":336,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Star","col":[[25,255,244],[0,0,0],[248,255,38]],"fx":52,"sx":128,"ix":37,"pal":2,"c1":128,"c2":128,"c3":16,"sel":true,"rev":true,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":2,"start":336,"stop":420,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Inner","col":[[25,255,244],[0,0,0],[248,255,38]],"fx":52,"sx":128,"ix":37,"pal":2,"c1":128,"c2":128,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":3,"start":420,"stop":560,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Ears","col":[[25,255,244],[0,0,0],[248,255,38]],"fx":52,"sx":128,"ix":37,"pal":2,"c1":128,"c2":128,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0}],"n":"Running Dual"} ,"1":{"mainseg":1,"seg":[{"id":0,"start":0,"stop":168,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Big Hex","col":[[255,255,255],[0,0,0],[255,0,0]],"fx":44,"sx":0,"ix":0,"pal":11,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"id":1,"start":168,"stop":336,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Star","col":[[255,255,255],[0,0,0],[255,0,0]],"fx":44,"sx":0,"ix":0,"pal":11,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"id":2,"start":336,"stop":420,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Inner","col":[[255,255,255],[0,0,0],[255,0,0]],"fx":44,"sx":0,"ix":0,"pal":11,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"id":3,"start":420,"stop":560,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Ears","col":[[255,255,255],[0,0,0],[255,0,0]],"fx":44,"sx":0,"ix":0,"pal":11,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":1},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0}],"n":"Tetrix"} ,"3":{"mainseg":1,"seg":[{"id":0,"start":0,"stop":168,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Big Hex","col":[[255,255,255],[0,0,0],[255,0,0]],"fx":38,"sx":24,"ix":213,"pal":50,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":true,"o1":true,"o2":false,"o3":false,"si":0,"m12":0},{"id":1,"start":168,"stop":336,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Star","col":[[255,255,255],[0,0,0],[255,0,0]],"fx":38,"sx":24,"ix":213,"pal":50,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":true,"o1":true,"o2":false,"o3":false,"si":0,"m12":0},{"id":2,"start":336,"stop":420,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Inner","col":[[255,255,255],[0,0,0],[255,0,0]],"fx":38,"sx":24,"ix":213,"pal":50,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":false,"o1":true,"o2":false,"o3":false,"si":0,"m12":0},{"id":3,"start":420,"stop":560,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Ears","col":[[255,255,255],[0,0,0],[255,0,0]],"fx":38,"sx":24,"ix":213,"pal":50,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":true,"o1":true,"o2":false,"o3":false,"si":0,"m12":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0}],"n":"Aurora Borealis"},"18":{"mainseg":2,"seg":[{"id":0,"start":0,"stop":168,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Big Hex","col":[[25,255,244],[0,0,0],[255,0,255]],"fx":93,"sx":128,"ix":151,"pal":2,"c1":128,"c2":128,"c3":16,"sel":false,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":1,"start":168,"stop":336,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Star","col":[[25,255,244],[0,0,0],[255,0,255]],"fx":93,"sx":128,"ix":151,"pal":2,"c1":128,"c2":128,"c3":16,"sel":false,"rev":true,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":2,"start":336,"stop":420,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Inner","col":[[25,255,244],[0,0,0],[255,0,255]],"fx":93,"sx":128,"ix":151,"pal":2,"c1":128,"c2":128,"c3":16,"sel":true,"rev":true,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":3,"start":420,"stop":560,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Ears","col":[[25,255,244],[0,0,0],[255,0,255]],"fx":93,"sx":128,"ix":151,"pal":2,"c1":128,"c2":128,"c3":16,"sel":false,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0}],"n":"Sinelon Dual"},"21":{"mainseg":1,"seg":[{"id":0,"start":0,"stop":168,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Big Hex","col":[[255,38,60],[95,95,95],[255,0,0]],"fx":131,"sx":252,"ix":129,"pal":50,"c1":128,"c2":128,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":1,"m12":2},{"id":1,"start":168,"stop":336,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Star","col":[[255,38,60],[95,95,95],[255,0,0]],"fx":131,"sx":252,"ix":129,"pal":50,"c1":128,"c2":128,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":1,"m12":2},{"id":2,"start":336,"stop":420,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Inner","col":[[255,38,60],[95,95,95],[255,0,0]],"fx":131,"sx":252,"ix":129,"pal":50,"c1":128,"c2":128,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":1,"m12":2},{"id":3,"start":420,"stop":560,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Ears","col":[[255,38,60],[95,95,95],[255,0,0]],"fx":131,"sx":252,"ix":129,"pal":50,"c1":128,"c2":128,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":1,"m12":2},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0}],"n":"Matripix (AR)"},"22":{"mainseg":1,"seg":[{"id":0,"start":0,"stop":168,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Big Hex","col":[[0,0,255],[0,0,0],[255,0,0]],"fx":144,"sx":128,"ix":128,"pal":53,"c1":128,"c2":0,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":1,"start":168,"stop":336,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Star","col":[[0,0,255],[0,0,0],[255,0,0]],"fx":144,"sx":128,"ix":128,"pal":53,"c1":128,"c2":0,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":2,"start":336,"stop":420,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Inner","col":[[0,0,255],[0,0,0],[255,0,0]],"fx":144,"sx":128,"ix":128,"pal":53,"c1":128,"c2":0,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":3,"start":420,"stop":560,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Ears","col":[[0,0,255],[0,0,0],[255,0,0]],"fx":144,"sx":128,"ix":128,"pal":53,"c1":128,"c2":0,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0}],"n":"Puddlepeak (AR)"},"23":{"mainseg":1,"seg":[{"id":0,"start":0,"stop":168,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Big Hex","col":[[0,0,255],[0,0,0],[255,0,0]],"fx":136,"sx":128,"ix":128,"pal":28,"c1":128,"c2":128,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":2},{"id":1,"start":168,"stop":336,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Star","col":[[0,0,255],[0,0,0],[255,0,0]],"fx":136,"sx":128,"ix":128,"pal":28,"c1":128,"c2":128,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":2},{"id":2,"start":336,"stop":420,"grp":1,"spc":0,"of":0,"on":false,"frz":false,"bri":255,"cct":127,"set":0,"n":"Inner","col":[[0,0,255],[0,0,0],[255,0,0]],"fx":136,"sx":128,"ix":128,"pal":28,"c1":128,"c2":128,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":2},{"id":3,"start":420,"stop":560,"grp":1,"spc":0,"of":0,"on":false,"frz":false,"bri":255,"cct":127,"set":0,"n":"Ears","col":[[0,0,255],[0,0,0],[255,0,0]],"fx":136,"sx":128,"ix":128,"pal":28,"c1":128,"c2":128,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":2},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0}],"n":"Noisemeter (AR)"},"24":{"mainseg":1,"seg":[{"id":0,"start":0,"stop":168,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Big Hex","col":[[0,0,255],[0,0,0],[255,0,0]],"fx":134,"sx":128,"ix":128,"pal":40,"c1":128,"c2":128,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":1,"start":168,"stop":336,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Star","col":[[0,0,255],[0,0,0],[255,0,0]],"fx":134,"sx":128,"ix":128,"pal":40,"c1":128,"c2":128,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":2,"start":336,"stop":420,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Inner","col":[[0,0,255],[0,0,0],[255,0,0]],"fx":134,"sx":128,"ix":128,"pal":40,"c1":128,"c2":128,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"id":3,"start":420,"stop":560,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Ears","col":[[0,0,255],[0,0,0],[255,0,0]],"fx":134,"sx":128,"ix":128,"pal":40,"c1":128,"c2":128,"c3":16,"sel":true,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0}],"n":"Puddles (AR)"},"25":{"mainseg":1,"seg":[{"id":0,"start":0,"stop":168,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Big Hex","col":[[0,0,255],[0,0,0],[255,0,0]],"fx":140,"sx":162,"ix":199,"pal":55,"c1":35,"c2":0,"c3":16,"sel":false,"rev":true,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":2},{"id":1,"start":168,"stop":336,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Star","col":[[0,0,255],[0,0,0],[255,0,0]],"fx":140,"sx":162,"ix":153,"pal":55,"c1":71,"c2":0,"c3":16,"sel":true,"rev":true,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":2},{"id":2,"start":336,"stop":420,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Inner","col":[[0,0,255],[0,0,0],[255,0,0]],"fx":140,"sx":162,"ix":199,"pal":55,"c1":35,"c2":0,"c3":16,"sel":false,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":2},{"id":3,"start":420,"stop":560,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"n":"Ears","col":[[0,0,255],[0,0,0],[255,0,0]],"fx":140,"sx":162,"ix":199,"pal":55,"c1":35,"c2":0,"c3":16,"sel":false,"rev":false,"mi":true,"o1":false,"o2":false,"o3":false,"si":0,"m12":2},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0}],"n":"Waterfall (AR)"},"17":{"mainseg":1,"seg":[{"id":0,"start":0,"stop":168,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Big Hex","col":[[255,0,0],[255,255,255],[255,255,255]],"fx":159,"sx":210,"ix":255,"pal":2,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":2},{"id":1,"start":168,"stop":336,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Star","col":[[255,0,0],[255,255,255],[255,255,255]],"fx":159,"sx":210,"ix":255,"pal":2,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":2},{"id":2,"start":336,"stop":420,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Inner","col":[[255,0,0],[255,255,255],[255,255,255]],"fx":159,"sx":210,"ix":255,"pal":2,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":2},{"id":3,"start":420,"stop":560,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"n":"Ears","col":[[255,0,0],[255,255,255],[255,255,255]],"fx":159,"sx":210,"ix":255,"pal":2,"c1":8,"c2":20,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":2},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0},{"stop":0}],"n":"DJ Light (AR)"}} \ No newline at end of file diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/gen.py b/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/gen.py new file mode 100644 index 0000000..dfdec68 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/gen.py @@ -0,0 +1,270 @@ +""" +Generates the hexegon using math. +""" + + +from dataclasses import dataclass +from enum import Enum +import json + + +from math import pi, cos, sin + +LED_PER_STRIP = 14 +SPACE_PER_LED = 30.0 # Increased for better visibility +LED_DIAMETER = SPACE_PER_LED / 4 +MIRROR_X = True # Diagramed from the reverse side. Reverse the x-axis + +SMALLEST_ANGLE = 360 / 6 + + +class HexagonAngle(Enum): + UP = 90 + DOWN = 270 + RIGHT_UP = 30 + RIGHT_DOWN = 360 - 30 + LEFT_UP = 150 # (RIGHT_DOWN + 180) % 360 + LEFT_DOWN = 210 # (RIGHT_UP + 180) % 360 + + +def toRads(angle: float) -> float: + return angle * (pi / 180) + + +@dataclass +class Point: + x: float + y: float + + @staticmethod + def toJson(points: list["Point"]) -> list[dict]: + x_values = [p.x for p in points] + y_values = [p.y for p in points] + # round + x_values = [round(x, 4) for x in x_values] + y_values = [round(y, 4) for y in y_values] + if MIRROR_X: + x_values = [-x for x in x_values] + + return {"x": x_values, "y": y_values, "diameter": LED_DIAMETER} + + def copy(self) -> "Point": + return Point(self.x, self.y) + + def __repr__(self) -> str: + x_rounded = round(self.x, 2) + y_rounded = round(self.y, 2) + return f"({x_rounded}, {y_rounded})" + + +def next_point(pos: Point, angle: HexagonAngle, space: float) -> Point: + degrees = angle.value + angle_rad = toRads(degrees) + x = pos.x + space * cos(angle_rad) + y = pos.y + space * sin(angle_rad) + return Point(x, y) + + +def gen_points( + input: list[HexagonAngle], leds_per_strip: int, startPos: Point, + exclude: list[int] | None = None, + add_last: bool = False +) -> list[Point]: + points: list[Point] = [] + if (not input) or (not leds_per_strip): + return points + exclude = exclude or [] + # Start FSM. Start pointer get's put into the accumulator. + curr_point: Point = Point(startPos.x, startPos.y) + # points.append(curr_point) + last_angle = input[0] + for i,angle in enumerate(input): + excluded = i in exclude + values = list(range(leds_per_strip)) + last_angle = angle + for v in values: + last_angle = angle + curr_point = next_point(curr_point, angle, SPACE_PER_LED) + if not excluded: + points.append(curr_point) + #if i == len(input) - 1: + # break + # Next starting point + curr_point = next_point(curr_point, last_angle, SPACE_PER_LED) + #if not excluded: + # points.append(curr_point) + if add_last: + points.append(curr_point) + return points + + + +def main() -> None: + startPos = Point(0, 0) + hexagon_angles = [ + HexagonAngle.UP, + HexagonAngle.RIGHT_UP, + HexagonAngle.RIGHT_DOWN, + HexagonAngle.DOWN, + HexagonAngle.LEFT_DOWN, + HexagonAngle.LEFT_UP, + ] + points = gen_points(hexagon_angles, LED_PER_STRIP, startPos) + + print(points) + + + +def simple_test() -> None: + startPos = Point(0, 0) + hexagon_angles = [ + HexagonAngle.UP, + ] + points = gen_points(hexagon_angles, LED_PER_STRIP, startPos) + print(points) + # assert len(points) == LED_PER_STRIP + 1 + +def two_angle_test() -> None: + startPos = Point(0, 0) + hexagon_angles = [ + HexagonAngle.UP, + HexagonAngle.UP, + ] + points = gen_points(hexagon_angles, LED_PER_STRIP, startPos) + print(points) + # assert len(points) == LED_PER_STRIP * 2, f"Expected {LED_PER_STRIP * 2} points, got {len(points)} points" + + + +def two_angle_test2() -> None: + print("two_angle_test2") + startPos = Point(0, 0) + hexagon_angles = [ + HexagonAngle.UP, + HexagonAngle.DOWN, + ] + points = gen_points(hexagon_angles, LED_PER_STRIP, startPos) + print(points) + # assert len(points) == LED_PER_STRIP * 2, f"Expected {LED_PER_STRIP * 2} points, got {len(points)} points" + +# Red is defined by this instruction tutorial: https://voidstar.dozuki.com/Guide/Chromance+Assembly+Instructions/6 +def find_red_anchor_point() -> list[Point]: + hexagon_angles = [ + HexagonAngle.LEFT_UP, + HexagonAngle.LEFT_UP, + HexagonAngle.UP, + HexagonAngle.RIGHT_UP, + ] + points = gen_points(hexagon_angles, LED_PER_STRIP, Point(0, 0), add_last=True) + return points + +def find_green_anchore_point() -> list[Point]: + hexagon_angles = [ + HexagonAngle.RIGHT_UP, + HexagonAngle.RIGHT_UP, + HexagonAngle.UP, + ] + points = gen_points(hexagon_angles, LED_PER_STRIP, Point(0, 0), add_last=True) + return points + + +RED_ANCHOR_POINT = find_red_anchor_point()[-1] +BLACK_ANCHOR_POINT = Point(0,0) # Black +GREEN_ANCHOR_POINT = find_green_anchore_point()[-1] +BLUE_ANCHOR_POINT = Point(0, 0) + + +def generate_red_points() -> list[Point]: + starting_point = RED_ANCHOR_POINT.copy() + hexagon_angles = [ + HexagonAngle.UP, + HexagonAngle.LEFT_UP, + HexagonAngle.LEFT_DOWN, + HexagonAngle.DOWN, + HexagonAngle.RIGHT_DOWN, + HexagonAngle.UP, + HexagonAngle.LEFT_UP + ] + points = gen_points(hexagon_angles, LED_PER_STRIP, starting_point, exclude=[5]) + return points + + +def generate_black_points() -> list[Point]: + starting_point = BLACK_ANCHOR_POINT.copy() + hexagon_angles = [ + HexagonAngle.LEFT_UP, + HexagonAngle.LEFT_UP, + HexagonAngle.UP, + HexagonAngle.RIGHT_UP, + HexagonAngle.RIGHT_DOWN, + HexagonAngle.DOWN, + HexagonAngle.LEFT_DOWN, + HexagonAngle.UP, + HexagonAngle.LEFT_UP, + HexagonAngle.UP, + HexagonAngle.RIGHT_UP, + ] + points = gen_points(hexagon_angles, LED_PER_STRIP, starting_point) + return points + + +def generate_green_points() -> list[Point]: + starting_point = GREEN_ANCHOR_POINT.copy() + hexagon_angles = [ + HexagonAngle.RIGHT_UP, + HexagonAngle.UP, + HexagonAngle.LEFT_UP, + HexagonAngle.LEFT_DOWN, + HexagonAngle.DOWN, + HexagonAngle.RIGHT_DOWN, # skip + HexagonAngle.LEFT_DOWN, # skip + HexagonAngle.LEFT_UP, + HexagonAngle.UP, + HexagonAngle.RIGHT_UP, + HexagonAngle.LEFT_UP, + HexagonAngle.LEFT_DOWN, + HexagonAngle.RIGHT_DOWN, + HexagonAngle.RIGHT_UP, # skip + HexagonAngle.RIGHT_DOWN, + ] + points = gen_points(hexagon_angles, LED_PER_STRIP, starting_point, exclude=[5,6,13]) + return points + +def generate_blue_points() -> list[Point]: + starting_point = BLUE_ANCHOR_POINT.copy() + hexagon_angles = [ + HexagonAngle.RIGHT_UP, + HexagonAngle.RIGHT_UP, + HexagonAngle.UP, + HexagonAngle.LEFT_UP, + HexagonAngle.LEFT_DOWN, + HexagonAngle.LEFT_DOWN, + HexagonAngle.RIGHT_DOWN, # skip + HexagonAngle.RIGHT_DOWN, + HexagonAngle.UP, + HexagonAngle.RIGHT_UP, + HexagonAngle.UP, + HexagonAngle.RIGHT_UP, + ] + points = gen_points(hexagon_angles, LED_PER_STRIP, starting_point, exclude=[6]) + return points + +def unit_test() -> None: + #simple_test() + #two_angle_test() + out = {} + map = out.setdefault("map", {}) + map.update({ + "red_segment": Point.toJson(generate_red_points()), + "back_segment": Point.toJson(generate_black_points()), + "green_segment": Point.toJson(generate_green_points()), + "blue_segment": Point.toJson(generate_blue_points()), + }) + print(json.dumps(out)) + # write it out to a file + with open("output.json", "w") as f: + f.write(json.dumps(out)) + + +if __name__ == "__main__": + unit_test() diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/mapping.h b/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/mapping.h new file mode 100644 index 0000000..c518149 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/mapping.h @@ -0,0 +1,158 @@ +/* + * Maps hex topology onto LED's + * (C) Voidstar Lab LLC 2021 + */ + +#ifndef MAPPING_H_ +#define MAPPING_H_ + +// I accidentally noted these down 1-indexed and I'm too tired to adjust them +#define headof(S) ((S - 1) * 14) +#define tailof(S) (headof(S) + 13) + +// Beam 0 is at 12:00 and advance clockwise +// -1 means nothing connected on that side +int nodeConnections[25][6] = { + {-1, -1, 1, -1, 0, -1}, + {-1, -1, 3, -1, 2, -1}, + {-1, -1, 5, -1, 4, -1}, + {-1, 0, 6, 12, -1, -1}, + {-1, 2, 8, 14, 7, 1}, + + {-1, 4, 10, 16, 9, 3}, + {-1, -1, -1, 18, 11, 5}, + {-1, 7, -1, 13, -1, 6}, + {-1, 9, -1, 15, -1, 8}, + {-1, 11, -1, 17, -1, 10}, + + {12, -1, 19, -1, -1, -1}, + {14, -1, 21, -1, 20, -1}, + {16, -1, 23, -1, 22, -1}, + {18, -1, -1, -1, 24, -1}, + {13, 20, 25, 29, -1, -1}, + + {15, 22, 27, 31, 26, 21}, + {17, 24, -1, 33, 28, 23}, + {-1, 26, -1, 30, -1, 25}, + {-1, 28, -1, 32, -1, 27}, + {29, -1, 34, -1, -1, -1}, + + {31, -1, 36, -1, 35, -1}, + {33, -1, -1, -1, 37, -1}, + {30, 35, 38, -1, -1, 34}, + {32, 37, -1, -1, 39, 36}, + {-1, 39, -1, -1, -1, 38} +}; + +// First member: Node closer to ceiling +// Second: Node closer to floor +int segmentConnections[40][2] = { + {0, 3}, + {0, 4}, + {1, 4}, + {1, 5}, + {2, 5}, + {2, 6}, + {3, 7}, + {4, 7}, + {4, 8}, + {5, 8}, + {5, 9}, + {6, 9}, // ayy + {3, 10}, + {7, 14}, + {4, 11}, + {8, 15}, + {5, 12}, + {9, 16}, + {6, 13}, + {10, 14}, + {11, 14}, + {11, 15}, + {12, 15}, + {12, 16}, + {13, 16}, + {14, 17}, + {15, 17}, + {15, 18}, + {16, 18}, + {14, 19}, + {17, 22}, + {15, 20}, + {18, 23}, + {16, 21}, + {19, 22}, + {20, 22}, + {20, 23}, + {21, 23}, + {22, 24}, + {23, 24} +}; + +// First member: Strip number +// Second: LED index closer to ceiling +// Third: LED index closer to floor +int ledAssignments[40][3] = { + {2, headof(3), tailof(3)}, + {2, tailof(2), headof(2)}, + {1, headof(10), tailof(10)}, + {1, tailof(9), headof(9)}, + {1, headof(4), tailof(4)}, + {1, tailof(3), headof(3)}, + + {2, tailof(6), headof(6)}, + {3, tailof(11), headof(11)}, + {1, headof(11), tailof(11)}, + {1, tailof(8), headof(8)}, + {1, headof(12), tailof(12)}, + {0, tailof(11), headof(11)}, + + {2, headof(4), tailof(4)}, + {3, tailof(10), headof(10)}, + {2, tailof(1), headof(1)}, + {1, tailof(7), headof(7)}, + {1, headof(5), tailof(5)}, + {0, tailof(10), headof(10)}, + {1, tailof(2), headof(2)}, + + {2, headof(5), tailof(5)}, + {3, tailof(4), headof(4)}, + {3, headof(5), tailof(5)}, + {0, headof(5), tailof(5)}, + {0, tailof(4), headof(4)}, + {1, tailof(1), headof(1)}, + + {3, tailof(9), headof(9)}, + {0, headof(6), tailof(6)}, + {1, tailof(6), headof(6)}, + {0, tailof(9), headof(9)}, + + {3, tailof(3), headof(3)}, + {3, tailof(8), headof(8)}, + {3, headof(6), tailof(6)}, + {0, tailof(8), headof(8)}, + {0, tailof(3), headof(3)}, + + {3, tailof(2), headof(2)}, + {3, headof(7), tailof(7)}, + {0, headof(7), tailof(7)}, + {0, tailof(2), headof(2)}, + + {3, tailof(1), headof(1)}, + {0, tailof(1), headof(1)} +}; + +// Border nodes are on the very edge of the network. +// Ripples fired here don't look very impressive. +int numberOfBorderNodes = 10; +int borderNodes[] = {0, 1, 2, 3, 6, 10, 13, 19, 21, 24}; + +// Cube nodes link three equiangular segments +// Firing ripples that always turn in one direction will draw a cube +int numberOfCubeNodes = 8; +int cubeNodes[] = {7, 8, 9, 11, 12, 17, 18}; + +// Firing ripples that always turn in one direction will draw a starburst +int starburstNode = 15; + +#endif diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/output.json b/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/output.json new file mode 100644 index 0000000..2aeab3b --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/output.json @@ -0,0 +1 @@ +{"map": {"red_segment": {"x": [389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 415.6922, 441.673, 467.6537, 493.6345, 519.6152, 545.596, 571.5768, 597.5575, 623.5383, 649.5191, 675.4998, 701.4806, 727.4613, 753.4421, 805.4036, 831.3844, 857.3651, 883.3459, 909.3267, 935.3074, 961.2882, 987.269, 1013.2497, 1039.2305, 1065.2112, 1091.192, 1117.1728, 1143.1535, 1169.1343, 1169.1343, 1169.1343, 1169.1343, 1169.1343, 1169.1343, 1169.1343, 1169.1343, 1169.1343, 1169.1343, 1169.1343, 1169.1343, 1169.1343, 1169.1343, 1143.1535, 1117.1728, 1091.192, 1065.2112, 1039.2305, 1013.2497, 987.269, 961.2882, 935.3074, 909.3267, 883.3459, 857.3651, 831.3844, 805.4036, 805.4036, 831.3844, 857.3651, 883.3459, 909.3267, 935.3074, 961.2882, 987.269, 1013.2497, 1039.2305, 1065.2112, 1091.192, 1117.1728, 1143.1535], "y": [1155.0, 1185.0, 1215.0, 1245.0, 1275.0, 1305.0, 1335.0, 1365.0, 1395.0, 1425.0, 1455.0, 1485.0, 1515.0, 1545.0, 1590.0, 1605.0, 1620.0, 1635.0, 1650.0, 1665.0, 1680.0, 1695.0, 1710.0, 1725.0, 1740.0, 1755.0, 1770.0, 1785.0, 1785.0, 1770.0, 1755.0, 1740.0, 1725.0, 1710.0, 1695.0, 1680.0, 1665.0, 1650.0, 1635.0, 1620.0, 1605.0, 1590.0, 1545.0, 1515.0, 1485.0, 1455.0, 1425.0, 1395.0, 1365.0, 1335.0, 1305.0, 1275.0, 1245.0, 1215.0, 1185.0, 1155.0, 1110.0, 1095.0, 1080.0, 1065.0, 1050.0, 1035.0, 1020.0, 1005.0, 990.0, 975.0, 960.0, 945.0, 930.0, 915.0, 1365.0, 1380.0, 1395.0, 1410.0, 1425.0, 1440.0, 1455.0, 1470.0, 1485.0, 1500.0, 1515.0, 1530.0, 1545.0, 1560.0], "diameter": 7.5}, "back_segment": {"x": [25.9808, 51.9615, 77.9423, 103.923, 129.9038, 155.8846, 181.8653, 207.8461, 233.8269, 259.8076, 285.7884, 311.7691, 337.7499, 363.7307, 415.6922, 441.673, 467.6537, 493.6345, 519.6152, 545.596, 571.5768, 597.5575, 623.5383, 649.5191, 675.4998, 701.4806, 727.4613, 753.4421, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 753.4421, 727.4613, 701.4806, 675.4998, 649.5191, 623.5383, 597.5575, 571.5768, 545.596, 519.6152, 493.6345, 467.6537, 441.673, 415.6922, 363.7307, 337.7499, 311.7691, 285.7884, 259.8076, 233.8269, 207.8461, 181.8653, 155.8846, 129.9038, 103.923, 77.9423, 51.9615, 25.9808, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 25.9808, 51.9615, 77.9423, 103.923, 129.9038, 155.8846, 181.8653, 207.8461, 233.8269, 259.8076, 285.7884, 311.7691, 337.7499, 363.7307, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 415.6922, 441.673, 467.6537, 493.6345, 519.6152, 545.596, 571.5768, 597.5575, 623.5383, 649.5191, 675.4998, 701.4806, 727.4613, 753.4421, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 753.4421, 727.4613, 701.4806, 675.4998, 649.5191, 623.5383, 597.5575, 571.5768, 545.596, 519.6152, 493.6345, 467.6537, 441.673, 415.6922], "y": [15.0, 30.0, 45.0, 60.0, 75.0, 90.0, 105.0, 120.0, 135.0, 150.0, 165.0, 180.0, 195.0, 210.0, 240.0, 255.0, 270.0, 285.0, 300.0, 315.0, 330.0, 345.0, 360.0, 375.0, 390.0, 405.0, 420.0, 435.0, 480.0, 510.0, 540.0, 570.0, 600.0, 630.0, 660.0, 690.0, 720.0, 750.0, 780.0, 810.0, 840.0, 870.0, 915.0, 930.0, 945.0, 960.0, 975.0, 990.0, 1005.0, 1020.0, 1035.0, 1050.0, 1065.0, 1080.0, 1095.0, 1110.0, 1110.0, 1095.0, 1080.0, 1065.0, 1050.0, 1035.0, 1020.0, 1005.0, 990.0, 975.0, 960.0, 945.0, 930.0, 915.0, 870.0, 840.0, 810.0, 780.0, 750.0, 720.0, 690.0, 660.0, 630.0, 600.0, 570.0, 540.0, 510.0, 480.0, 435.0, 420.0, 405.0, 390.0, 375.0, 360.0, 345.0, 330.0, 315.0, 300.0, 285.0, 270.0, 255.0, 240.0, 255.0, 285.0, 315.0, 345.0, 375.0, 405.0, 435.0, 465.0, 495.0, 525.0, 555.0, 585.0, 615.0, 645.0, 690.0, 705.0, 720.0, 735.0, 750.0, 765.0, 780.0, 795.0, 810.0, 825.0, 840.0, 855.0, 870.0, 885.0, 930.0, 960.0, 990.0, 1020.0, 1050.0, 1080.0, 1110.0, 1140.0, 1170.0, 1200.0, 1230.0, 1260.0, 1290.0, 1320.0, 1365.0, 1380.0, 1395.0, 1410.0, 1425.0, 1440.0, 1455.0, 1470.0, 1485.0, 1500.0, 1515.0, 1530.0, 1545.0, 1560.0], "diameter": 7.5}, "green_segment": {"x": [-805.4036, -831.3844, -857.3651, -883.3459, -909.3267, -935.3074, -961.2882, -987.269, -1013.2497, -1039.2305, -1065.2112, -1091.192, -1117.1728, -1143.1535, -1169.1343, -1169.1343, -1169.1343, -1169.1343, -1169.1343, -1169.1343, -1169.1343, -1169.1343, -1169.1343, -1169.1343, -1169.1343, -1169.1343, -1169.1343, -1169.1343, -1143.1535, -1117.1728, -1091.192, -1065.2112, -1039.2305, -1013.2497, -987.269, -961.2882, -935.3074, -909.3267, -883.3459, -857.3651, -831.3844, -805.4036, -753.4421, -727.4613, -701.4806, -675.4998, -649.5191, -623.5383, -597.5575, -571.5768, -545.596, -519.6152, -493.6345, -467.6537, -441.673, -415.6922, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -363.7307, -337.7499, -311.7691, -285.7884, -259.8076, -233.8269, -207.8461, -181.8653, -155.8846, -129.9038, -103.923, -77.9423, -51.9615, -25.9808, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -25.9808, -51.9615, -77.9423, -103.923, -129.9038, -155.8846, -181.8653, -207.8461, -233.8269, -259.8076, -285.7884, -311.7691, -337.7499, -363.7307, -363.7307, -337.7499, -311.7691, -285.7884, -259.8076, -233.8269, -207.8461, -181.8653, -155.8846, -129.9038, -103.923, -77.9423, -51.9615, -25.9808, 25.9808, 51.9615, 77.9423, 103.923, 129.9038, 155.8846, 181.8653, 207.8461, 233.8269, 259.8076, 285.7884, 311.7691, 337.7499, 363.7307, 363.7307, 337.7499, 311.7691, 285.7884, 259.8076, 233.8269, 207.8461, 181.8653, 155.8846, 129.9038, 103.923, 77.9423, 51.9615, 25.9808, -415.6922, -441.673, -467.6537, -493.6345, -519.6152, -545.596, -571.5768, -597.5575, -623.5383, -649.5191, -675.4998, -701.4806, -727.4613, -753.4421], "y": [915.0, 930.0, 945.0, 960.0, 975.0, 990.0, 1005.0, 1020.0, 1035.0, 1050.0, 1065.0, 1080.0, 1095.0, 1110.0, 1155.0, 1185.0, 1215.0, 1245.0, 1275.0, 1305.0, 1335.0, 1365.0, 1395.0, 1425.0, 1455.0, 1485.0, 1515.0, 1545.0, 1590.0, 1605.0, 1620.0, 1635.0, 1650.0, 1665.0, 1680.0, 1695.0, 1710.0, 1725.0, 1740.0, 1755.0, 1770.0, 1785.0, 1785.0, 1770.0, 1755.0, 1740.0, 1725.0, 1710.0, 1695.0, 1680.0, 1665.0, 1650.0, 1635.0, 1620.0, 1605.0, 1590.0, 1545.0, 1515.0, 1485.0, 1455.0, 1425.0, 1395.0, 1365.0, 1335.0, 1305.0, 1275.0, 1245.0, 1215.0, 1185.0, 1155.0, 690.0, 705.0, 720.0, 735.0, 750.0, 765.0, 780.0, 795.0, 810.0, 825.0, 840.0, 855.0, 870.0, 885.0, 930.0, 960.0, 990.0, 1020.0, 1050.0, 1080.0, 1110.0, 1140.0, 1170.0, 1200.0, 1230.0, 1260.0, 1290.0, 1320.0, 1365.0, 1380.0, 1395.0, 1410.0, 1425.0, 1440.0, 1455.0, 1470.0, 1485.0, 1500.0, 1515.0, 1530.0, 1545.0, 1560.0, 1590.0, 1605.0, 1620.0, 1635.0, 1650.0, 1665.0, 1680.0, 1695.0, 1710.0, 1725.0, 1740.0, 1755.0, 1770.0, 1785.0, 1785.0, 1770.0, 1755.0, 1740.0, 1725.0, 1710.0, 1695.0, 1680.0, 1665.0, 1650.0, 1635.0, 1620.0, 1605.0, 1590.0, 1560.0, 1545.0, 1530.0, 1515.0, 1500.0, 1485.0, 1470.0, 1455.0, 1440.0, 1425.0, 1410.0, 1395.0, 1380.0, 1365.0, 1560.0, 1545.0, 1530.0, 1515.0, 1500.0, 1485.0, 1470.0, 1455.0, 1440.0, 1425.0, 1410.0, 1395.0, 1380.0, 1365.0], "diameter": 7.5}, "blue_segment": {"x": [-25.9808, -51.9615, -77.9423, -103.923, -129.9038, -155.8846, -181.8653, -207.8461, -233.8269, -259.8076, -285.7884, -311.7691, -337.7499, -363.7307, -415.6922, -441.673, -467.6537, -493.6345, -519.6152, -545.596, -571.5768, -597.5575, -623.5383, -649.5191, -675.4998, -701.4806, -727.4613, -753.4421, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -753.4421, -727.4613, -701.4806, -675.4998, -649.5191, -623.5383, -597.5575, -571.5768, -545.596, -519.6152, -493.6345, -467.6537, -441.673, -415.6922, -363.7307, -337.7499, -311.7691, -285.7884, -259.8076, -233.8269, -207.8461, -181.8653, -155.8846, -129.9038, -103.923, -77.9423, -51.9615, -25.9808, 25.9808, 51.9615, 77.9423, 103.923, 129.9038, 155.8846, 181.8653, 207.8461, 233.8269, 259.8076, 285.7884, 311.7691, 337.7499, 363.7307, -25.9808, -51.9615, -77.9423, -103.923, -129.9038, -155.8846, -181.8653, -207.8461, -233.8269, -259.8076, -285.7884, -311.7691, -337.7499, -363.7307, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -415.6922, -441.673, -467.6537, -493.6345, -519.6152, -545.596, -571.5768, -597.5575, -623.5383, -649.5191, -675.4998, -701.4806, -727.4613, -753.4421, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -805.4036, -831.3844, -857.3651, -883.3459, -909.3267, -935.3074, -961.2882, -987.269, -1013.2497, -1039.2305, -1065.2112, -1091.192, -1117.1728, -1143.1535], "y": [15.0, 30.0, 45.0, 60.0, 75.0, 90.0, 105.0, 120.0, 135.0, 150.0, 165.0, 180.0, 195.0, 210.0, 240.0, 255.0, 270.0, 285.0, 300.0, 315.0, 330.0, 345.0, 360.0, 375.0, 390.0, 405.0, 420.0, 435.0, 480.0, 510.0, 540.0, 570.0, 600.0, 630.0, 660.0, 690.0, 720.0, 750.0, 780.0, 810.0, 840.0, 870.0, 915.0, 930.0, 945.0, 960.0, 975.0, 990.0, 1005.0, 1020.0, 1035.0, 1050.0, 1065.0, 1080.0, 1095.0, 1110.0, 1110.0, 1095.0, 1080.0, 1065.0, 1050.0, 1035.0, 1020.0, 1005.0, 990.0, 975.0, 960.0, 945.0, 930.0, 915.0, 885.0, 870.0, 855.0, 840.0, 825.0, 810.0, 795.0, 780.0, 765.0, 750.0, 735.0, 720.0, 705.0, 690.0, 435.0, 420.0, 405.0, 390.0, 375.0, 360.0, 345.0, 330.0, 315.0, 300.0, 285.0, 270.0, 255.0, 240.0, 255.0, 285.0, 315.0, 345.0, 375.0, 405.0, 435.0, 465.0, 495.0, 525.0, 555.0, 585.0, 615.0, 645.0, 690.0, 705.0, 720.0, 735.0, 750.0, 765.0, 780.0, 795.0, 810.0, 825.0, 840.0, 855.0, 870.0, 885.0, 930.0, 960.0, 990.0, 1020.0, 1050.0, 1080.0, 1110.0, 1140.0, 1170.0, 1200.0, 1230.0, 1260.0, 1290.0, 1320.0, 1365.0, 1380.0, 1395.0, 1410.0, 1425.0, 1440.0, 1455.0, 1470.0, 1485.0, 1500.0, 1515.0, 1530.0, 1545.0, 1560.0], "diameter": 7.5}}} \ No newline at end of file diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/ripple.h b/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/ripple.h new file mode 100644 index 0000000..a2b951e --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/ripple.h @@ -0,0 +1,426 @@ +/* + A dot animation that travels along rails + (C) Voidstar Lab LLC 2021 +*/ + +#ifndef RIPPLE_H_ +#define RIPPLE_H_ + +// WARNING: These slow things down enough to affect performance. Don't turn on unless you need them! +//#define DEBUG_ADVANCEMENT // Print debug messages about ripples' movement +//#define DEBUG_RENDERING // Print debug messages about translating logical to actual position + +#include "FastLED.h" +#include "mapping.h" + +enum rippleState { + dead, + withinNode, // Ripple isn't drawn as it passes through a node to keep the speed consistent + travelingUpwards, + travelingDownwards +}; + +enum rippleBehavior { + weaksauce = 0, + feisty = 1, + angry = 2, + alwaysTurnsRight = 3, + alwaysTurnsLeft = 4 +}; + +float fmap(float x, float in_min, float in_max, float out_min, float out_max) { + return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; +} + +class Ripple { + public: + Ripple(int id) : rippleId(id) { + Serial.print("Instanced ripple #"); + Serial.println(rippleId); + } + + rippleState state = dead; + unsigned long color; + + /* + If within a node: 0 is node, 1 is direction + If traveling, 0 is segment, 1 is LED position from bottom + */ + int position[2]; + + // Place the Ripple in a node + void start(byte n, byte d, unsigned long c, float s, unsigned long l, byte b) { + color = c; + speed = s; + lifespan = l; + behavior = b; + + birthday = millis(); + pressure = 0; + state = withinNode; + + position[0] = n; + position[1] = d; + + justStarted = true; + + Serial.print("Ripple "); + Serial.print(rippleId); + Serial.print(" starting at node "); + Serial.print(position[0]); + Serial.print(" direction "); + Serial.println(position[1]); + } + + void advance(byte ledColors[40][14][3]) { + unsigned long age = millis() - birthday; + + if (state == dead) + return; + + pressure += fmap(float(age), 0.0, float(lifespan), speed, 0.0); // Ripple slows down as it ages + // TODO: Motion of ripple is severely affected by loop speed. Make it time invariant + + if (pressure < 1 && (state == travelingUpwards || state == travelingDownwards)) { + // Ripple is visible but hasn't moved - render it to avoid flickering + renderLed(ledColors, age); + } + + while (pressure >= 1) { +#ifdef DEBUG_ADVANCEMENT + Serial.print("Ripple "); + Serial.print(rippleId); + Serial.println(" advancing:"); +#endif + + switch (state) { + case withinNode: { + if (justStarted) { + justStarted = false; + } + else { +#ifdef DEBUG_ADVANCEMENT + Serial.print(" Picking direction out of node "); + Serial.print(position[0]); + Serial.print(" with agr. "); + Serial.println(behavior); +#endif + + int newDirection = -1; + + int sharpLeft = (position[1] + 1) % 6; + int wideLeft = (position[1] + 2) % 6; + int forward = (position[1] + 3) % 6; + int wideRight = (position[1] + 4) % 6; + int sharpRight = (position[1] + 5) % 6; + + if (behavior <= 2) { // Semi-random aggressive turn mode + // The more aggressive a ripple, the tighter turns it wants to make. + // If there aren't any segments it can turn to, we need to adjust its behavior. + byte anger = behavior; + + while (newDirection < 0) { + if (anger == 0) { + int forwardConnection = nodeConnections[position[0]][forward]; + + if (forwardConnection < 0) { + // We can't go straight ahead - we need to take a more aggressive angle +#ifdef DEBUG_ADVANCEMENT + Serial.println(" Can't go straight - picking more agr. path"); +#endif + anger++; + } + else { +#ifdef DEBUG_ADVANCEMENT + Serial.println(" Going forward"); +#endif + newDirection = forward; + } + } + + if (anger == 1) { + int leftConnection = nodeConnections[position[0]][wideLeft]; + int rightConnection = nodeConnections[position[0]][wideRight]; + + if (leftConnection >= 0 && rightConnection >= 0) { +#ifdef DEBUG_ADVANCEMENT + Serial.println(" Turning left or right at random"); +#endif + newDirection = random(2) ? wideLeft : wideRight; + } + else if (leftConnection >= 0) { +#ifdef DEBUG_ADVANCEMENT + Serial.println(" Can only turn left"); +#endif + newDirection = wideLeft; + } + else if (rightConnection >= 0) { +#ifdef DEBUG_ADVANCEMENT + Serial.println(" Can only turn right"); +#endif + newDirection = wideRight; + } + else { +#ifdef DEBUG_ADVANCEMENT + Serial.println(" Can't make wide turn - picking more agr. path"); +#endif + anger++; // Can't take shallow turn - must become more aggressive + } + } + + if (anger == 2) { + int leftConnection = nodeConnections[position[0]][sharpLeft]; + int rightConnection = nodeConnections[position[0]][sharpRight]; + + if (leftConnection >= 0 && rightConnection >= 0) { +#ifdef DEBUG_ADVANCEMENT + Serial.println(" Turning left or right at random"); +#endif + newDirection = random(2) ? sharpLeft : sharpRight; + } + else if (leftConnection >= 0) { +#ifdef DEBUG_ADVANCEMENT + Serial.println(" Can only turn left"); +#endif + newDirection = sharpLeft; + } + else if (rightConnection >= 0) { +#ifdef DEBUG_ADVANCEMENT + Serial.println(" Can only turn right"); +#endif + newDirection = sharpRight; + } + else { +#ifdef DEBUG_ADVANCEMENT + Serial.println(" Can't make tight turn - picking less agr. path"); +#endif + anger--; // Can't take tight turn - must become less aggressive + } + } + + // Note that this can't handle some circumstances, + // like a node with segments in nothing but the 0 and 3 positions. + // Good thing we don't have any of those! + } + } + else if (behavior == alwaysTurnsRight) { + for (int i = 1; i < 6; i++) { + int possibleDirection = (position[1] + i) % 6; + + if (nodeConnections[position[0]][possibleDirection] >= 0) { + newDirection = possibleDirection; + break; + } + } + +#ifdef DEBUG_ADVANCEMENT + Serial.println(" Turning as rightward as possible"); +#endif + } + else if (behavior == alwaysTurnsLeft) { + for (int i = 5; i >= 1; i--) { + int possibleDirection = (position[1] + i) % 6; + + if (nodeConnections[position[0]][possibleDirection] >= 0) { + newDirection = possibleDirection; + break; + } + } + +#ifdef DEBUG_ADVANCEMENT + Serial.println(" Turning as leftward as possible"); +#endif + } + +#ifdef DEBUG_ADVANCEMENT + Serial.print(" Leaving node "); + Serial.print(position[0]); + Serial.print(" in direction "); + Serial.println(newDirection); +#endif + + position[1] = newDirection; + } + + position[0] = nodeConnections[position[0]][position[1]]; // Look up which segment we're on + +#ifdef DEBUG_ADVANCEMENT + Serial.print(" and entering segment "); + Serial.println(position[0]); +#endif + + if (position[1] == 5 || position[1] == 0 || position[1] == 1) { // Top half of the node +#ifdef DEBUG_ADVANCEMENT + Serial.println(" (starting at bottom)"); +#endif + state = travelingUpwards; + position[1] = 0; // Starting at bottom of segment + } + else { +#ifdef DEBUG_ADVANCEMENT + Serial.println(" (starting at top)"); +#endif + state = travelingDownwards; + position[1] = 13; // Starting at top of 14-LED-long strip + } + break; + } + + case travelingUpwards: { + position[1]++; + + if (position[1] >= 14) { + // We've reached the top! +#ifdef DEBUG_ADVANCEMENT + Serial.print(" Reached top of seg. "); + Serial.println(position[0]); +#endif + // Enter the new node. + int segment = position[0]; + position[0] = segmentConnections[position[0]][0]; + for (int i = 0; i < 6; i++) { + // Figure out from which direction the ripple is entering the node. + // Allows us to exit in an appropriately aggressive direction. + int incomingConnection = nodeConnections[position[0]][i]; + if (incomingConnection == segment) + position[1] = i; + } +#ifdef DEBUG_ADVANCEMENT + Serial.print(" Entering node "); + Serial.print(position[0]); + Serial.print(" from direction "); + Serial.println(position[1]); +#endif + state = withinNode; + } + else { +#ifdef DEBUG_ADVANCEMENT + Serial.print(" Moved up to seg. "); + Serial.print(position[0]); + Serial.print(" LED "); + Serial.println(position[1]); +#endif + } + break; + } + + case travelingDownwards: { + position[1]--; + if (position[1] < 0) { + // We've reached the bottom! +#ifdef DEBUG_ADVANCEMENT + Serial.print(" Reached bottom of seg. "); + Serial.println(position[0]); +#endif + // Enter the new node. + int segment = position[0]; + position[0] = segmentConnections[position[0]][1]; + for (int i = 0; i < 6; i++) { + // Figure out from which direction the ripple is entering the node. + // Allows us to exit in an appropriately aggressive direction. + int incomingConnection = nodeConnections[position[0]][i]; + if (incomingConnection == segment) + position[1] = i; + } +#ifdef DEBUG_ADVANCEMENT + Serial.print(" Entering node "); + Serial.print(position[0]); + Serial.print(" from direction "); + Serial.println(position[1]); +#endif + state = withinNode; + } + else { +#ifdef DEBUG_ADVANCEMENT + Serial.print(" Moved down to seg. "); + Serial.print(position[0]); + Serial.print(" LED "); + Serial.println(position[1]); +#endif + } + break; + } + + default: + break; + } + + pressure -= 1; + + if (state == travelingUpwards || state == travelingDownwards) { + // Ripple is visible - render it + renderLed(ledColors, age); + } + } + +#ifdef DEBUG_ADVANCEMENT + Serial.print(" Age is now "); + Serial.print(age); + Serial.print('/'); + Serial.println(lifespan); +#endif + + if (lifespan && age >= lifespan) { + // We dead +#ifdef DEBUG_ADVANCEMENT + Serial.println(" Lifespan is up! Ripple is dead."); +#endif + state = dead; + position[0] = position[1] = pressure = age = 0; + } + } + + private: + float speed; // Each loop, ripples move this many LED's. + unsigned long lifespan; // The ripple stops after this many milliseconds + + /* + 0: Always goes straight ahead if possible + 1: Can take 60-degree turns + 2: Can take 120-degree turns + */ + byte behavior; + + bool justStarted = false; + + float pressure; // When Pressure reaches 1, ripple will move + unsigned long birthday; // Used to track age of ripple + + static byte rippleCount; // Used to give them unique ID's + byte rippleId; // Used to identify this ripple in debug output + + void renderLed(byte ledColors[40][14][3], unsigned long age) { + int strip = ledAssignments[position[0]][0]; + int led = ledAssignments[position[0]][2] + position[1]; + FL_UNUSED(strip); + FL_UNUSED(led); + + int red = ledColors[position[0]][position[1]][0]; + int green = ledColors[position[0]][position[1]][1]; + int blue = ledColors[position[0]][position[1]][2]; + + ledColors[position[0]][position[1]][0] = byte(min(255, max(0, int(fmap(float(age), 0.0, float(lifespan), (color >> 8) & 0xFF, 0.0)) + red))); + ledColors[position[0]][position[1]][1] = byte(min(255, max(0, int(fmap(float(age), 0.0, float(lifespan), (color >> 16) & 0xFF, 0.0)) + green))); + ledColors[position[0]][position[1]][2] = byte(min(255, max(0, int(fmap(float(age), 0.0, float(lifespan), color & 0xFF, 0.0)) + blue))); + +#ifdef DEBUG_RENDERING + Serial.print("Rendering ripple position ("); + Serial.print(position[0]); + Serial.print(','); + Serial.print(position[1]); + Serial.print(") at Strip "); + Serial.print(strip); + Serial.print(", LED "); + Serial.print(led); + Serial.print(", color 0x"); + for (int i = 0; i < 3; i++) { + if (ledColors[position[0]][position[1]][i] <= 0x0F) + Serial.print('0'); + Serial.print(ledColors[position[0]][position[1]][i], HEX); + } + Serial.println(); +#endif + } +}; + +#endif diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/screenmap.json.h b/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/screenmap.json.h new file mode 100644 index 0000000..6c08d2b --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Chromancer/screenmap.json.h @@ -0,0 +1,4 @@ + +const char JSON_SCREEN_MAP[] = R"( +{"map": {"red_segment": {"x": [389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 415.6922, 441.673, 467.6537, 493.6345, 519.6152, 545.596, 571.5768, 597.5575, 623.5383, 649.5191, 675.4998, 701.4806, 727.4613, 753.4421, 805.4036, 831.3844, 857.3651, 883.3459, 909.3267, 935.3074, 961.2882, 987.269, 1013.2497, 1039.2305, 1065.2112, 1091.192, 1117.1728, 1143.1535, 1169.1343, 1169.1343, 1169.1343, 1169.1343, 1169.1343, 1169.1343, 1169.1343, 1169.1343, 1169.1343, 1169.1343, 1169.1343, 1169.1343, 1169.1343, 1169.1343, 1143.1535, 1117.1728, 1091.192, 1065.2112, 1039.2305, 1013.2497, 987.269, 961.2882, 935.3074, 909.3267, 883.3459, 857.3651, 831.3844, 805.4036, 805.4036, 831.3844, 857.3651, 883.3459, 909.3267, 935.3074, 961.2882, 987.269, 1013.2497, 1039.2305, 1065.2112, 1091.192, 1117.1728, 1143.1535], "y": [1155.0, 1185.0, 1215.0, 1245.0, 1275.0, 1305.0, 1335.0, 1365.0, 1395.0, 1425.0, 1455.0, 1485.0, 1515.0, 1545.0, 1590.0, 1605.0, 1620.0, 1635.0, 1650.0, 1665.0, 1680.0, 1695.0, 1710.0, 1725.0, 1740.0, 1755.0, 1770.0, 1785.0, 1785.0, 1770.0, 1755.0, 1740.0, 1725.0, 1710.0, 1695.0, 1680.0, 1665.0, 1650.0, 1635.0, 1620.0, 1605.0, 1590.0, 1545.0, 1515.0, 1485.0, 1455.0, 1425.0, 1395.0, 1365.0, 1335.0, 1305.0, 1275.0, 1245.0, 1215.0, 1185.0, 1155.0, 1110.0, 1095.0, 1080.0, 1065.0, 1050.0, 1035.0, 1020.0, 1005.0, 990.0, 975.0, 960.0, 945.0, 930.0, 915.0, 1365.0, 1380.0, 1395.0, 1410.0, 1425.0, 1440.0, 1455.0, 1470.0, 1485.0, 1500.0, 1515.0, 1530.0, 1545.0, 1560.0], "diameter": 7.5}, "back_segment": {"x": [25.9808, 51.9615, 77.9423, 103.923, 129.9038, 155.8846, 181.8653, 207.8461, 233.8269, 259.8076, 285.7884, 311.7691, 337.7499, 363.7307, 415.6922, 441.673, 467.6537, 493.6345, 519.6152, 545.596, 571.5768, 597.5575, 623.5383, 649.5191, 675.4998, 701.4806, 727.4613, 753.4421, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 753.4421, 727.4613, 701.4806, 675.4998, 649.5191, 623.5383, 597.5575, 571.5768, 545.596, 519.6152, 493.6345, 467.6537, 441.673, 415.6922, 363.7307, 337.7499, 311.7691, 285.7884, 259.8076, 233.8269, 207.8461, 181.8653, 155.8846, 129.9038, 103.923, 77.9423, 51.9615, 25.9808, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 25.9808, 51.9615, 77.9423, 103.923, 129.9038, 155.8846, 181.8653, 207.8461, 233.8269, 259.8076, 285.7884, 311.7691, 337.7499, 363.7307, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 389.7114, 415.6922, 441.673, 467.6537, 493.6345, 519.6152, 545.596, 571.5768, 597.5575, 623.5383, 649.5191, 675.4998, 701.4806, 727.4613, 753.4421, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 779.4229, 753.4421, 727.4613, 701.4806, 675.4998, 649.5191, 623.5383, 597.5575, 571.5768, 545.596, 519.6152, 493.6345, 467.6537, 441.673, 415.6922], "y": [15.0, 30.0, 45.0, 60.0, 75.0, 90.0, 105.0, 120.0, 135.0, 150.0, 165.0, 180.0, 195.0, 210.0, 240.0, 255.0, 270.0, 285.0, 300.0, 315.0, 330.0, 345.0, 360.0, 375.0, 390.0, 405.0, 420.0, 435.0, 480.0, 510.0, 540.0, 570.0, 600.0, 630.0, 660.0, 690.0, 720.0, 750.0, 780.0, 810.0, 840.0, 870.0, 915.0, 930.0, 945.0, 960.0, 975.0, 990.0, 1005.0, 1020.0, 1035.0, 1050.0, 1065.0, 1080.0, 1095.0, 1110.0, 1110.0, 1095.0, 1080.0, 1065.0, 1050.0, 1035.0, 1020.0, 1005.0, 990.0, 975.0, 960.0, 945.0, 930.0, 915.0, 870.0, 840.0, 810.0, 780.0, 750.0, 720.0, 690.0, 660.0, 630.0, 600.0, 570.0, 540.0, 510.0, 480.0, 435.0, 420.0, 405.0, 390.0, 375.0, 360.0, 345.0, 330.0, 315.0, 300.0, 285.0, 270.0, 255.0, 240.0, 255.0, 285.0, 315.0, 345.0, 375.0, 405.0, 435.0, 465.0, 495.0, 525.0, 555.0, 585.0, 615.0, 645.0, 690.0, 705.0, 720.0, 735.0, 750.0, 765.0, 780.0, 795.0, 810.0, 825.0, 840.0, 855.0, 870.0, 885.0, 930.0, 960.0, 990.0, 1020.0, 1050.0, 1080.0, 1110.0, 1140.0, 1170.0, 1200.0, 1230.0, 1260.0, 1290.0, 1320.0, 1365.0, 1380.0, 1395.0, 1410.0, 1425.0, 1440.0, 1455.0, 1470.0, 1485.0, 1500.0, 1515.0, 1530.0, 1545.0, 1560.0], "diameter": 7.5}, "green_segment": {"x": [-805.4036, -831.3844, -857.3651, -883.3459, -909.3267, -935.3074, -961.2882, -987.269, -1013.2497, -1039.2305, -1065.2112, -1091.192, -1117.1728, -1143.1535, -1169.1343, -1169.1343, -1169.1343, -1169.1343, -1169.1343, -1169.1343, -1169.1343, -1169.1343, -1169.1343, -1169.1343, -1169.1343, -1169.1343, -1169.1343, -1169.1343, -1143.1535, -1117.1728, -1091.192, -1065.2112, -1039.2305, -1013.2497, -987.269, -961.2882, -935.3074, -909.3267, -883.3459, -857.3651, -831.3844, -805.4036, -753.4421, -727.4613, -701.4806, -675.4998, -649.5191, -623.5383, -597.5575, -571.5768, -545.596, -519.6152, -493.6345, -467.6537, -441.673, -415.6922, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -363.7307, -337.7499, -311.7691, -285.7884, -259.8076, -233.8269, -207.8461, -181.8653, -155.8846, -129.9038, -103.923, -77.9423, -51.9615, -25.9808, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -25.9808, -51.9615, -77.9423, -103.923, -129.9038, -155.8846, -181.8653, -207.8461, -233.8269, -259.8076, -285.7884, -311.7691, -337.7499, -363.7307, -363.7307, -337.7499, -311.7691, -285.7884, -259.8076, -233.8269, -207.8461, -181.8653, -155.8846, -129.9038, -103.923, -77.9423, -51.9615, -25.9808, 25.9808, 51.9615, 77.9423, 103.923, 129.9038, 155.8846, 181.8653, 207.8461, 233.8269, 259.8076, 285.7884, 311.7691, 337.7499, 363.7307, 363.7307, 337.7499, 311.7691, 285.7884, 259.8076, 233.8269, 207.8461, 181.8653, 155.8846, 129.9038, 103.923, 77.9423, 51.9615, 25.9808, -415.6922, -441.673, -467.6537, -493.6345, -519.6152, -545.596, -571.5768, -597.5575, -623.5383, -649.5191, -675.4998, -701.4806, -727.4613, -753.4421], "y": [915.0, 930.0, 945.0, 960.0, 975.0, 990.0, 1005.0, 1020.0, 1035.0, 1050.0, 1065.0, 1080.0, 1095.0, 1110.0, 1155.0, 1185.0, 1215.0, 1245.0, 1275.0, 1305.0, 1335.0, 1365.0, 1395.0, 1425.0, 1455.0, 1485.0, 1515.0, 1545.0, 1590.0, 1605.0, 1620.0, 1635.0, 1650.0, 1665.0, 1680.0, 1695.0, 1710.0, 1725.0, 1740.0, 1755.0, 1770.0, 1785.0, 1785.0, 1770.0, 1755.0, 1740.0, 1725.0, 1710.0, 1695.0, 1680.0, 1665.0, 1650.0, 1635.0, 1620.0, 1605.0, 1590.0, 1545.0, 1515.0, 1485.0, 1455.0, 1425.0, 1395.0, 1365.0, 1335.0, 1305.0, 1275.0, 1245.0, 1215.0, 1185.0, 1155.0, 690.0, 705.0, 720.0, 735.0, 750.0, 765.0, 780.0, 795.0, 810.0, 825.0, 840.0, 855.0, 870.0, 885.0, 930.0, 960.0, 990.0, 1020.0, 1050.0, 1080.0, 1110.0, 1140.0, 1170.0, 1200.0, 1230.0, 1260.0, 1290.0, 1320.0, 1365.0, 1380.0, 1395.0, 1410.0, 1425.0, 1440.0, 1455.0, 1470.0, 1485.0, 1500.0, 1515.0, 1530.0, 1545.0, 1560.0, 1590.0, 1605.0, 1620.0, 1635.0, 1650.0, 1665.0, 1680.0, 1695.0, 1710.0, 1725.0, 1740.0, 1755.0, 1770.0, 1785.0, 1785.0, 1770.0, 1755.0, 1740.0, 1725.0, 1710.0, 1695.0, 1680.0, 1665.0, 1650.0, 1635.0, 1620.0, 1605.0, 1590.0, 1560.0, 1545.0, 1530.0, 1515.0, 1500.0, 1485.0, 1470.0, 1455.0, 1440.0, 1425.0, 1410.0, 1395.0, 1380.0, 1365.0, 1560.0, 1545.0, 1530.0, 1515.0, 1500.0, 1485.0, 1470.0, 1455.0, 1440.0, 1425.0, 1410.0, 1395.0, 1380.0, 1365.0], "diameter": 7.5}, "blue_segment": {"x": [-25.9808, -51.9615, -77.9423, -103.923, -129.9038, -155.8846, -181.8653, -207.8461, -233.8269, -259.8076, -285.7884, -311.7691, -337.7499, -363.7307, -415.6922, -441.673, -467.6537, -493.6345, -519.6152, -545.596, -571.5768, -597.5575, -623.5383, -649.5191, -675.4998, -701.4806, -727.4613, -753.4421, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -753.4421, -727.4613, -701.4806, -675.4998, -649.5191, -623.5383, -597.5575, -571.5768, -545.596, -519.6152, -493.6345, -467.6537, -441.673, -415.6922, -363.7307, -337.7499, -311.7691, -285.7884, -259.8076, -233.8269, -207.8461, -181.8653, -155.8846, -129.9038, -103.923, -77.9423, -51.9615, -25.9808, 25.9808, 51.9615, 77.9423, 103.923, 129.9038, 155.8846, 181.8653, 207.8461, 233.8269, 259.8076, 285.7884, 311.7691, 337.7499, 363.7307, -25.9808, -51.9615, -77.9423, -103.923, -129.9038, -155.8846, -181.8653, -207.8461, -233.8269, -259.8076, -285.7884, -311.7691, -337.7499, -363.7307, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -389.7114, -415.6922, -441.673, -467.6537, -493.6345, -519.6152, -545.596, -571.5768, -597.5575, -623.5383, -649.5191, -675.4998, -701.4806, -727.4613, -753.4421, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -779.4229, -805.4036, -831.3844, -857.3651, -883.3459, -909.3267, -935.3074, -961.2882, -987.269, -1013.2497, -1039.2305, -1065.2112, -1091.192, -1117.1728, -1143.1535], "y": [15.0, 30.0, 45.0, 60.0, 75.0, 90.0, 105.0, 120.0, 135.0, 150.0, 165.0, 180.0, 195.0, 210.0, 240.0, 255.0, 270.0, 285.0, 300.0, 315.0, 330.0, 345.0, 360.0, 375.0, 390.0, 405.0, 420.0, 435.0, 480.0, 510.0, 540.0, 570.0, 600.0, 630.0, 660.0, 690.0, 720.0, 750.0, 780.0, 810.0, 840.0, 870.0, 915.0, 930.0, 945.0, 960.0, 975.0, 990.0, 1005.0, 1020.0, 1035.0, 1050.0, 1065.0, 1080.0, 1095.0, 1110.0, 1110.0, 1095.0, 1080.0, 1065.0, 1050.0, 1035.0, 1020.0, 1005.0, 990.0, 975.0, 960.0, 945.0, 930.0, 915.0, 885.0, 870.0, 855.0, 840.0, 825.0, 810.0, 795.0, 780.0, 765.0, 750.0, 735.0, 720.0, 705.0, 690.0, 435.0, 420.0, 405.0, 390.0, 375.0, 360.0, 345.0, 330.0, 315.0, 300.0, 285.0, 270.0, 255.0, 240.0, 255.0, 285.0, 315.0, 345.0, 375.0, 405.0, 435.0, 465.0, 495.0, 525.0, 555.0, 585.0, 615.0, 645.0, 690.0, 705.0, 720.0, 735.0, 750.0, 765.0, 780.0, 795.0, 810.0, 825.0, 840.0, 855.0, 870.0, 885.0, 930.0, 960.0, 990.0, 1020.0, 1050.0, 1080.0, 1110.0, 1140.0, 1170.0, 1200.0, 1230.0, 1260.0, 1290.0, 1320.0, 1365.0, 1380.0, 1395.0, 1410.0, 1425.0, 1440.0, 1455.0, 1470.0, 1485.0, 1500.0, 1515.0, 1530.0, 1545.0, 1560.0], "diameter": 7.5}}} +)"; \ No newline at end of file diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/ColorBoost/ColorBoost.h b/.pio/libdeps/esp01_1m/FastLED/examples/ColorBoost/ColorBoost.h new file mode 100644 index 0000000..95402a4 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/ColorBoost/ColorBoost.h @@ -0,0 +1,148 @@ +/// @file ColorBoost.h +/// @brief Demo of CRGB::colorBoost() for video display on WS2812 LEDs using animated rainbow effect +/// (based on Pride2015 by Mark Kriegsman) +/// @example ColorBoost.ino +/// +/// This sketch is fully compatible with the FastLED web compiler. To use it do the following: +/// 1. Install Fastled: `pip install fastled` +/// 2. cd into this examples page. +/// 3. Run the FastLED web compiler at root: `fastled` +/// 4. When the compiler is done a web page will open. + +// This demo shows use of CRGB::colorBoost() to boost saturation for better LED display, compared to +// normal colors and colors adjusted with gamma correction. +// The demo involves animated, ever-changing rainbows (based on Pride2015 by Mark Kriegsman). + +#include "FastLED.h" +#include "fl/ease.h" + +using namespace fl; + +UITitle title("ColorBoost"); +UIDescription description("CRGB::colorBoost() is a function that boosts the saturation of a color without decimating the color from 8 bit -> gamma -> 8 bit (leaving only 8 colors for each component). Use the dropdown menus to select different easing functions for saturation and luminance. Use legacy gfx mode (?gfx=0) for best results."); + +UISlider satSlider("Saturation", 60, 0, 255, 1); + +// Create dropdown with descriptive ease function names +fl::string easeOptions[] = { + "None", + "In Quad", + "Out Quad", + "In-Out Quad", + "In Cubic", + "Out Cubic", + "In-Out Cubic", + "In Sine", + "Out Sine", + "In-Out Sine" +}; +UIDropdown saturationFunction("Saturation Function", easeOptions); +UIDropdown luminanceFunction("Luminance Function", easeOptions); + +// Group related color boost UI elements using UIGroup template multi-argument constructor +UIGroup colorBoostControls("Color Boost", satSlider, saturationFunction, luminanceFunction); + +#define DATA_PIN 2 +#define LED_TYPE WS2812 +#define COLOR_ORDER GRB +#define WIDTH 22 +#define HEIGHT 22 +#define NUM_LEDS (WIDTH * HEIGHT) +#define BRIGHTNESS 150 + +CRGB leds[NUM_LEDS]; + +// fl::ScreenMap screenmap(lut.data(), lut.size()); +// fl::ScreenMap screenmap(NUM_LEDS); +fl::XYMap xyMap = + fl::XYMap::constructRectangularGrid(WIDTH, HEIGHT); + +void setup() { + + // tell FastLED about the LED strip configuration + FastLED.addLeds(leds, NUM_LEDS) + .setCorrection(TypicalLEDStrip) + .setScreenMap(xyMap); + // set master brightness control + FastLED.setBrightness(BRIGHTNESS); + + // Set default dropdown selections + saturationFunction.setSelectedIndex(1); // "In Quad" + luminanceFunction.setSelectedIndex(0); // "None" +} + +EaseType getEaseType(int value) { + switch (value) { + case 0: return EASE_NONE; + case 1: return EASE_IN_QUAD; + case 2: return EASE_OUT_QUAD; + case 3: return EASE_IN_OUT_QUAD; + case 4: return EASE_IN_CUBIC; + case 5: return EASE_OUT_CUBIC; + case 6: return EASE_IN_OUT_CUBIC; + case 7: return EASE_IN_SINE; + case 8: return EASE_OUT_SINE; + case 9: return EASE_IN_OUT_SINE; + } + FL_ASSERT(false, "Invalid ease type"); + return EASE_NONE; +} + +// Animated rainbow wave effect (Pride2015), with matrix divided into three segments to compare: +// - Normal colors (top) +// - Colors optimized using colorBoost() (middle) +// - Colors adjusted using gamma correction (bottom) +void rainbowWave() { + // Use millis() for consistent timing across different devices + // Scale down millis() to get appropriate animation speed + uint16_t time = millis() / 16; // Adjust divisor to control wave speed + uint8_t hueOffset = millis() / 32; // Adjust divisor to control hue rotation speed + + // Iterate through the entire matrix + for (uint16_t y = 0; y < HEIGHT; y++) { + for (uint16_t x = 0; x < WIDTH; x++) { + // Create a wave pattern using sine function based on position and time + uint8_t wave = sin8(time + (x * 8)); + + // Calculate hue based on position and time for rainbow effect + uint8_t hue = hueOffset + (x * 255 / WIDTH); + + // Use wave for both saturation and brightness variation + // uint8_t sat = 255 - (wave / 4); // Subtle saturation variation + uint8_t bri = 128 + (wave / 2); // Brightness wave from 128 to 255 + + // Create the original color using HSV + CRGB original_color = CHSV(hue, satSlider.value(), bri); + + if (y > HEIGHT / 3 * 2) { + // Upper third - original colors + leds[xyMap(x, y)] = original_color; + } else if (y > HEIGHT / 3) { + // Middle third - colors transformed with colorBoost() + EaseType sat_ease = getEaseType(saturationFunction.as_int()); + EaseType lum_ease = getEaseType(luminanceFunction.as_int()); + leds[xyMap(x, y)] = original_color.colorBoost(sat_ease, lum_ease); + } else { + // Lower third - colors transformed using gamma correction + float r = original_color.r / 255.f; + float g = original_color.g / 255.f; + float b = original_color.b / 255.f; + + r = pow(r, 2.0); + g = pow(g, 2.0); + b = pow(b, 2.0); + + r = r * 255.f; + g = g * 255.f; + b = b * 255.f; + + leds[xyMap(x, y)] = CRGB(r, g, b); + } + } + } +} + +void loop() { + rainbowWave(); + FastLED.show(); +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/ColorBoost/ColorBoost.ino b/.pio/libdeps/esp01_1m/FastLED/examples/ColorBoost/ColorBoost.ino new file mode 100644 index 0000000..260fcad --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/ColorBoost/ColorBoost.ino @@ -0,0 +1,18 @@ +#include "fl/sketch_macros.h" + +#if SKETCH_HAS_LOTS_OF_MEMORY + +#include "./ColorBoost.h" + +#else + +void setup() { + Serial.begin(9600); +} + +void loop() { + Serial.println("Not enough memory"); + delay(1000); +} + +#endif diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/ColorPalette/ColorPalette.ino b/.pio/libdeps/esp01_1m/FastLED/examples/ColorPalette/ColorPalette.ino new file mode 100644 index 0000000..fda7cd0 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/ColorPalette/ColorPalette.ino @@ -0,0 +1,203 @@ +/// @file ColorPalette.ino +/// @brief Demonstrates how to use @ref ColorPalettes +/// @example ColorPalette.ino + +#include + +#define LED_PIN 5 +#define NUM_LEDS 50 +#define BRIGHTNESS 64 +#define LED_TYPE WS2811 +#define COLOR_ORDER GRB +CRGB leds[NUM_LEDS]; + +#define UPDATES_PER_SECOND 100 + +// This example shows several ways to set up and use 'palettes' of colors +// with FastLED. +// +// These compact palettes provide an easy way to re-colorize your +// animation on the fly, quickly, easily, and with low overhead. +// +// USING palettes is MUCH simpler in practice than in theory, so first just +// run this sketch, and watch the pretty lights as you then read through +// the code. Although this sketch has eight (or more) different color schemes, +// the entire sketch compiles down to about 6.5K on AVR. +// +// FastLED provides a few pre-configured color palettes, and makes it +// extremely easy to make up your own color schemes with palettes. +// +// Some notes on the more abstract 'theory and practice' of +// FastLED compact palettes are at the bottom of this file. + + + +CRGBPalette16 currentPalette; +TBlendType currentBlending; + +extern CRGBPalette16 myRedWhiteBluePalette; +extern const TProgmemPalette16 myRedWhiteBluePalette_p FL_PROGMEM; + +// If you are using the fastled compiler, then you must declare your functions +// before you use them. This is standard in C++ and C projects, but ino's are +// special in that they do this for you. Eventually we will try to emulate this +// feature ourselves but in the meantime you'll have to declare your functions +// before you use them if you want to use our compiler. +void ChangePalettePeriodically(); +void FillLEDsFromPaletteColors(uint8_t colorIndex); +void SetupPurpleAndGreenPalette(); +void SetupTotallyRandomPalette(); +void SetupBlackAndWhiteStripedPalette(); + + +void setup() { + delay( 3000 ); // power-up safety delay + FastLED.addLeds(leds, NUM_LEDS).setCorrection( TypicalLEDStrip ); + FastLED.setBrightness( BRIGHTNESS ); + + currentPalette = RainbowColors_p; + currentBlending = LINEARBLEND; +} + + +void loop() +{ + ChangePalettePeriodically(); + + static uint8_t startIndex = 0; + startIndex = startIndex + 1; /* motion speed */ + + FillLEDsFromPaletteColors( startIndex); + + FastLED.show(); + FastLED.delay(1000 / UPDATES_PER_SECOND); +} + +void FillLEDsFromPaletteColors( uint8_t colorIndex) +{ + uint8_t brightness = 255; + + for( int i = 0; i < NUM_LEDS; ++i) { + leds[i] = ColorFromPalette( currentPalette, colorIndex, brightness, currentBlending); + colorIndex += 3; + } +} + + +// There are several different palettes of colors demonstrated here. +// +// FastLED provides several 'preset' palettes: RainbowColors_p, RainbowStripeColors_p, +// OceanColors_p, CloudColors_p, LavaColors_p, ForestColors_p, and PartyColors_p. +// +// Additionally, you can manually define your own color palettes, or you can write +// code that creates color palettes on the fly. All are shown here. + +void ChangePalettePeriodically() +{ + uint8_t secondHand = (millis() / 1000) % 60; + static uint8_t lastSecond = 99; + + if( lastSecond != secondHand) { + lastSecond = secondHand; + if( secondHand == 0) { currentPalette = RainbowColors_p; currentBlending = LINEARBLEND; } + if( secondHand == 10) { currentPalette = RainbowStripeColors_p; currentBlending = NOBLEND; } + if( secondHand == 15) { currentPalette = RainbowStripeColors_p; currentBlending = LINEARBLEND; } + if( secondHand == 20) { SetupPurpleAndGreenPalette(); currentBlending = LINEARBLEND; } + if( secondHand == 25) { SetupTotallyRandomPalette(); currentBlending = LINEARBLEND; } + if( secondHand == 30) { SetupBlackAndWhiteStripedPalette(); currentBlending = NOBLEND; } + if( secondHand == 35) { SetupBlackAndWhiteStripedPalette(); currentBlending = LINEARBLEND; } + if( secondHand == 40) { currentPalette = CloudColors_p; currentBlending = LINEARBLEND; } + if( secondHand == 45) { currentPalette = PartyColors_p; currentBlending = LINEARBLEND; } + if( secondHand == 50) { currentPalette = myRedWhiteBluePalette_p; currentBlending = NOBLEND; } + if( secondHand == 55) { currentPalette = myRedWhiteBluePalette_p; currentBlending = LINEARBLEND; } + } +} + +// This function fills the palette with totally random colors. +void SetupTotallyRandomPalette() +{ + for( int i = 0; i < 16; ++i) { + currentPalette[i] = CHSV( random8(), 255, random8()); + } +} + +// This function sets up a palette of black and white stripes, +// using code. Since the palette is effectively an array of +// sixteen CRGB colors, the various fill_* functions can be used +// to set them up. +void SetupBlackAndWhiteStripedPalette() +{ + // 'black out' all 16 palette entries... + fill_solid( currentPalette, 16, CRGB::Black); + // and set every fourth one to white. + currentPalette[0] = CRGB::White; + currentPalette[4] = CRGB::White; + currentPalette[8] = CRGB::White; + currentPalette[12] = CRGB::White; + +} + +// This function sets up a palette of purple and green stripes. +void SetupPurpleAndGreenPalette() +{ + CRGB purple = CHSV( HUE_PURPLE, 255, 255); + CRGB green = CHSV( HUE_GREEN, 255, 255); + CRGB black = CRGB::Black; + + currentPalette = CRGBPalette16( + green, green, black, black, + purple, purple, black, black, + green, green, black, black, + purple, purple, black, black ); +} + + +// This example shows how to set up a static color palette +// which is stored in PROGMEM (flash), which is almost always more +// plentiful than RAM. A static PROGMEM palette like this +// takes up 64 bytes of flash. +const TProgmemPalette16 myRedWhiteBluePalette_p FL_PROGMEM = +{ + CRGB::Red, + CRGB::Gray, // 'white' is too bright compared to red and blue + CRGB::Blue, + CRGB::Black, + + CRGB::Red, + CRGB::Gray, + CRGB::Blue, + CRGB::Black, + + CRGB::Red, + CRGB::Red, + CRGB::Gray, + CRGB::Gray, + CRGB::Blue, + CRGB::Blue, + CRGB::Black, + CRGB::Black +}; + + + +// Additional notes on FastLED compact palettes: +// +// Normally, in computer graphics, the palette (or "color lookup table") +// has 256 entries, each containing a specific 24-bit RGB color. You can then +// index into the color palette using a simple 8-bit (one byte) value. +// A 256-entry color palette takes up 768 bytes of RAM, which on Arduino +// is quite possibly "too many" bytes. +// +// FastLED does offer traditional 256-element palettes, for setups that +// can afford the 768-byte cost in RAM. +// +// However, FastLED also offers a compact alternative. FastLED offers +// palettes that store 16 distinct entries, but can be accessed AS IF +// they actually have 256 entries; this is accomplished by interpolating +// between the 16 explicit entries to create fifteen intermediate palette +// entries between each pair. +// +// So for example, if you set the first two explicit entries of a compact +// palette to Green (0,255,0) and Blue (0,0,255), and then retrieved +// the first sixteen entries from the virtual palette (of 256), you'd get +// Green, followed by a smooth gradient from green-to-blue, and then Blue. diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/ColorTemperature/ColorTemperature.ino b/.pio/libdeps/esp01_1m/FastLED/examples/ColorTemperature/ColorTemperature.ino new file mode 100644 index 0000000..437929a --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/ColorTemperature/ColorTemperature.ino @@ -0,0 +1,89 @@ +/// @file ColorTemperature.ino +/// @brief Demonstrates how to use @ref ColorTemperature based color correction +/// @example ColorTemperature.ino + +#include + +#define LED_PIN 3 + +// Information about the LED strip itself +#define NUM_LEDS 60 +#define CHIPSET WS2811 +#define COLOR_ORDER GRB +CRGB leds[NUM_LEDS]; + +#define BRIGHTNESS 128 + + +// FastLED provides two color-management controls: +// (1) color correction settings for each LED strip, and +// (2) master control of the overall output 'color temperature' +// +// THIS EXAMPLE demonstrates the second, "color temperature" control. +// It shows a simple rainbow animation first with one temperature profile, +// and a few seconds later, with a different temperature profile. +// +// The first pixel of the strip will show the color temperature. +// +// HELPFUL HINTS for "seeing" the effect in this demo: +// * Don't look directly at the LED pixels. Shine the LEDs aganst +// a white wall, table, or piece of paper, and look at the reflected light. +// +// * If you watch it for a bit, and then walk away, and then come back +// to it, you'll probably be able to "see" whether it's currently using +// the 'redder' or the 'bluer' temperature profile, even not counting +// the lowest 'indicator' pixel. +// +// +// FastLED provides these pre-conigured incandescent color profiles: +// Candle, Tungsten40W, Tungsten100W, Halogen, CarbonArc, +// HighNoonSun, DirectSunlight, OvercastSky, ClearBlueSky, +// FastLED provides these pre-configured gaseous-light color profiles: +// WarmFluorescent, StandardFluorescent, CoolWhiteFluorescent, +// FullSpectrumFluorescent, GrowLightFluorescent, BlackLightFluorescent, +// MercuryVapor, SodiumVapor, MetalHalide, HighPressureSodium, +// FastLED also provides an "Uncorrected temperature" profile +// UncorrectedTemperature; + +#define TEMPERATURE_1 Tungsten100W +#define TEMPERATURE_2 OvercastSky + +// How many seconds to show each temperature before switching +#define DISPLAYTIME 20 +// How many seconds to show black between switches +#define BLACKTIME 3 + +void loop() +{ + // draw a generic, no-name rainbow + static uint8_t starthue = 0; + fill_rainbow( leds + 5, NUM_LEDS - 5, --starthue, 20); + + // Choose which 'color temperature' profile to enable. + uint8_t secs = (millis() / 1000) % (DISPLAYTIME * 2); + if( secs < DISPLAYTIME) { + FastLED.setTemperature( TEMPERATURE_1 ); // first temperature + leds[0] = TEMPERATURE_1; // show indicator pixel + } else { + FastLED.setTemperature( TEMPERATURE_2 ); // second temperature + leds[0] = TEMPERATURE_2; // show indicator pixel + } + + // Black out the LEDs for a few secnds between color changes + // to let the eyes and brains adjust + if( (secs % DISPLAYTIME) < BLACKTIME) { + memset8( leds, 0, NUM_LEDS * sizeof(CRGB)); + } + + FastLED.show(); + FastLED.delay(8); +} + +void setup() { + delay( 3000 ); // power-up safety delay + // It's important to set the color correction for your LED strip here, + // so that colors can be more accurately rendered through the 'temperature' profiles + FastLED.addLeds(leds, NUM_LEDS).setCorrection( TypicalSMD5050 ); + FastLED.setBrightness( BRIGHTNESS ); +} + diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/CompileTest/apollo3_test.h b/.pio/libdeps/esp01_1m/FastLED/examples/CompileTest/apollo3_test.h new file mode 100644 index 0000000..7b46804 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/CompileTest/apollo3_test.h @@ -0,0 +1,26 @@ +#pragma once + +#include "FastLED.h" + +void apollo3_tests() { +#if FASTLED_USE_PROGMEM != 0 +#error "FASTLED_USE_PROGMEM should be 0 for Apollo3" +#endif + +#if SKETCH_HAS_LOTS_OF_MEMORY != 1 +#error "SKETCH_HAS_LOTS_OF_MEMORY should be 1 for Apollo3" +#endif + +#if FASTLED_ALLOW_INTERRUPTS != 1 +#error "FASTLED_ALLOW_INTERRUPTS should be 1 for Apollo3" +#endif + +#ifndef F_CPU +#error "F_CPU should be defined for Apollo3" +#endif + +// Check that Apollo3-specific features are available +#ifndef APOLLO3 +#warning "APOLLO3 macro not defined - this may indicate platform detection issues" +#endif +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/CompileTest/arm_test.h b/.pio/libdeps/esp01_1m/FastLED/examples/CompileTest/arm_test.h new file mode 100644 index 0000000..57bde6f --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/CompileTest/arm_test.h @@ -0,0 +1,78 @@ +#pragma once + +#include "FastLED.h" + +void arm_tests() { +#ifndef FASTLED_ARM +#error "FASTLED_ARM should be defined for ARM platforms" +#endif + +#if FASTLED_USE_PROGMEM != 0 && FASTLED_USE_PROGMEM != 1 +#error "FASTLED_USE_PROGMEM should be either 0 or 1 for ARM platforms" +#endif + +#if defined(ARDUINO_TEENSYLC) || defined(ARDUINO_TEENSY30) || defined(__MK20DX128__) || defined(__MK20DX256__) || defined(ARDUINO_ARCH_RENESAS_UNO) || defined(STM32F1) + // Teensy LC, Teensy 3.0, Teensy 3.1/3.2, Renesas UNO, and STM32F1 have limited memory + #if SKETCH_HAS_LOTS_OF_MEMORY != 0 + #error "SKETCH_HAS_LOTS_OF_MEMORY should be 0 for Teensy LC, Teensy 3.0, Teensy 3.1/3.2, Renesas UNO, and STM32F1" + #endif +#else + // Most other ARM platforms have lots of memory + #if SKETCH_HAS_LOTS_OF_MEMORY != 1 + #error "SKETCH_HAS_LOTS_OF_MEMORY should be 1 for most ARM platforms" + #endif +#endif + +#if FASTLED_ALLOW_INTERRUPTS != 1 && FASTLED_ALLOW_INTERRUPTS != 0 +#error "FASTLED_ALLOW_INTERRUPTS should be either 0 or 1 for ARM platforms" +#endif + +// Check that F_CPU is defined +#ifndef F_CPU +#error "F_CPU should be defined for ARM platforms" +#endif + +// Specific ARM variant checks +#if defined(ARDUINO_ARCH_STM32) || defined(STM32F1) + #if FASTLED_ALLOW_INTERRUPTS != 0 + #error "STM32 platforms should have FASTLED_ALLOW_INTERRUPTS set to 0" + #endif + #if FASTLED_USE_PROGMEM != 0 + #error "STM32 platforms should have FASTLED_USE_PROGMEM set to 0" + #endif +#endif + +#if defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_RASPBERRY_PI_PICO) + #if FASTLED_USE_PROGMEM != 0 + #error "RP2040 platforms should have FASTLED_USE_PROGMEM set to 0" + #endif + #if FASTLED_ALLOW_INTERRUPTS != 1 + #error "RP2040 platforms should have FASTLED_ALLOW_INTERRUPTS set to 1" + #endif + #ifdef FASTLED_FORCE_SOFTWARE_SPI + // RP2040 forces software SPI - this is expected + #endif +#endif + +#if defined(__MK20DX128__) || defined(__MK20DX256__) || defined(__MK66FX1M0__) || defined(__IMXRT1062__) + // Teensy platforms that use PROGMEM + #if FASTLED_USE_PROGMEM != 1 + #error "Teensy K20/K66/MXRT1062 platforms should have FASTLED_USE_PROGMEM set to 1" + #endif +#endif + +#if defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_SAM_DUE) + #if FASTLED_USE_PROGMEM != 0 + #error "SAMD/SAM platforms should have FASTLED_USE_PROGMEM set to 0" + #endif +#endif + +#if defined(NRF52_SERIES) || defined(ARDUINO_ARCH_NRF52) + #if FASTLED_USE_PROGMEM != 0 + #error "NRF52 platforms should have FASTLED_USE_PROGMEM set to 0" + #endif + #ifndef CLOCKLESS_FREQUENCY + #error "NRF52 should have CLOCKLESS_FREQUENCY defined" + #endif +#endif +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/CompileTest/avr_test.h b/.pio/libdeps/esp01_1m/FastLED/examples/CompileTest/avr_test.h new file mode 100644 index 0000000..1172942 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/CompileTest/avr_test.h @@ -0,0 +1,40 @@ +#pragma once + +#include "FastLED.h" + +void avr_tests() { +#if FASTLED_USE_PROGMEM != 1 +#error "FASTLED_USE_PROGMEM should be 1 for AVR" +#endif + +#if SKETCH_HAS_LOTS_OF_MEMORY != 0 +#error "SKETCH_HAS_LOTS_OF_MEMORY should be 0 for AVR" +#endif + +#if FASTLED_ALLOW_INTERRUPTS != 0 +#error "FASTLED_ALLOW_INTERRUPTS should be 0 for AVR (default)" +#endif + +#ifndef FASTLED_AVR +#error "FASTLED_AVR should be defined for AVR platforms" +#endif + +#ifndef F_CPU +#error "F_CPU should be defined for AVR platforms" +#endif + +// AVR should have a reasonable F_CPU (typically 8MHz or 16MHz) +#if F_CPU < 1000000 || F_CPU > 32000000 +#warning "AVR F_CPU seems unusual - check if this is expected" +#endif + +// Check for Arduino environment on AVR +#ifndef ARDUINO +#warning "ARDUINO macro not defined - may not be in Arduino environment" +#endif + +// AVR-specific assembly optimizations should be enabled +#ifndef QADD8_AVRASM +#warning "AVR assembly optimizations may not be enabled" +#endif +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/CompileTest/wasm_test.h b/.pio/libdeps/esp01_1m/FastLED/examples/CompileTest/wasm_test.h new file mode 100644 index 0000000..ddfe03c --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/CompileTest/wasm_test.h @@ -0,0 +1,35 @@ +#pragma once + +#include "FastLED.h" + +void wasm_tests() { +#if FASTLED_USE_PROGMEM != 0 +#error "FASTLED_USE_PROGMEM should be 0 for WASM" +#endif + +#if SKETCH_HAS_LOTS_OF_MEMORY != 1 +#error "SKETCH_HAS_LOTS_OF_MEMORY should be 1 for WASM" +#endif + +#if FASTLED_ALLOW_INTERRUPTS != 1 +#error "FASTLED_ALLOW_INTERRUPTS should be 1 for WASM" +#endif + +#ifndef F_CPU +#error "F_CPU should be defined for WASM" +#endif + +// WASM should have a high F_CPU since it's not real hardware +#if F_CPU < 1000000 +#error "WASM F_CPU should be reasonably high (not real hardware constraint)" +#endif + +// Check WASM-specific defines +#ifndef FASTLED_STUB_IMPL +#error "FASTLED_STUB_IMPL should be defined for WASM" +#endif + +#ifndef digitalPinToBitMask +#error "digitalPinToBitMask should be defined for WASM" +#endif +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Corkscrew/Corkscrew.h b/.pio/libdeps/esp01_1m/FastLED/examples/Corkscrew/Corkscrew.h new file mode 100644 index 0000000..15ba7e1 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Corkscrew/Corkscrew.h @@ -0,0 +1,183 @@ +/* +Basic cork screw test. + +This test is forward mapping, in which we test that +the corkscrew is mapped to cylinder cartesian coordinates. + +Most of the time, you'll want the reverse mapping, that is +drawing to a rectangular grid, and then mapping that to a corkscrew. + +However, to make sure the above mapping works correctly, we have +to test that the forward mapping works correctly first. + +NEW: ScreenMap Support +===================== +You can now create a ScreenMap directly from a Corkscrew, which maps +each LED index to its exact position on the cylindrical surface. +This is useful for web interfaces and visualization: + +Example usage: +```cpp +// Create a corkscrew +Corkscrew corkscrew(totalTurns, numLeds); + +// Create ScreenMap with 0.5cm LED diameter +fl::ScreenMap screenMap = corkscrew.toScreenMap(0.5f); + +// Use with FastLED controller for web visualization +controller->setScreenMap(screenMap); +``` + +NEW: Rectangular Buffer Support +=============================== +You can now draw into a rectangular fl::Leds grid and read that +into the corkscrew's internal buffer for display: + +Example usage: +```cpp +// Create a rectangular grid to draw into +CRGB grid_buffer[width * height]; +fl::Leds grid(grid_buffer, width, height); + +// Draw your 2D patterns into the grid +grid(x, y) = CRGB::Red; // etc. + +// Draw patterns on the corkscrew's surface and map to LEDs +auto& surface = corkscrew.surface(); +// Draw your patterns on the surface, then call draw() to map to LEDs +corkscrew.draw(); + +// Access the LED pixel data +auto ledData = corkscrew.data(); // Or corkscrew.rawData() for pointer +// The LED data now contains the corkscrew mapping of your patterns +``` +*/ + +#include "fl/assert.h" +#include "fl/corkscrew.h" +#include "fl/grid.h" +#include "fl/leds.h" +#include "fl/screenmap.h" +#include "fl/sstream.h" +#include "fl/warn.h" +#include "noise.h" +#include +// #include "vec3.h" + +using namespace fl; + +#define PIN_DATA 9 + +#define NUM_LEDS 288 +#define CORKSCREW_TURNS 19 // Default to 19 turns + +// #define CM_BETWEEN_LEDS 1.0 // 1cm between LEDs +// #define CM_LED_DIAMETER 0.5 // 0.5cm LED diameter + +UITitle festivalStickTitle("Corkscrew"); +UIDescription festivalStickDescription( + "Tests the ability to map a cork screw onto a 2D cylindrical surface"); + +UISlider speed("Speed", 0.1f, 0.01f, 1.0f, 0.01f); + +UICheckbox allWhite("All White", false); +UICheckbox splatRendering("Splat Rendering", true); +UICheckbox cachingEnabled("Enable Tile Caching", true); + +// CRGB leds[NUM_LEDS]; + +// Tested on a 288 led (2x 144 max density led strip) with 19 turns +// Auto-calculates optimal grid dimensions from turns and LEDs +Corkscrew corkscrew(CORKSCREW_TURNS, // 19 turns + NUM_LEDS); // 288 leds + +// Create a corkscrew with: +// - 30cm total length (300mm) +// - 5cm width (50mm) +// - 2mm LED inner diameter +// - 24 LEDs per turn +// fl::ScreenMap screenMap = makeCorkScrew(NUM_LEDS, +// 300.0f, 50.0f, 2.0f, 24.0f); + +// fl::vector mapCorkScrew = makeCorkScrew(args); +fl::ScreenMap screenMap; +fl::Grid frameBuffer; + +void setup() { + int width = corkscrew.cylinderWidth(); + int height = corkscrew.cylinderHeight(); + + frameBuffer.reset(width, height); + XYMap xyMap = XYMap::constructRectangularGrid(width, height, 0); + + CRGB *leds = frameBuffer.data(); + size_t num_leds = frameBuffer.size(); + + CLEDController *controller = + &FastLED.addLeds(leds, num_leds); + + // NEW: Create ScreenMap directly from Corkscrew using toScreenMap() + // This maps each LED index to its exact position on the cylindrical surface + fl::ScreenMap corkscrewScreenMap = corkscrew.toScreenMap(0.2f); + + // Alternative: Create ScreenMap from rectangular XYMap (old way) + // fl::ScreenMap screenMap = xyMap.toScreenMap(); + // screenMap.setDiameter(.2f); + + // Set the corkscrew screen map for the controller + // This allows the web interface to display the actual corkscrew shape + controller->setScreenMap(corkscrewScreenMap); + + // Initialize caching based on UI setting + corkscrew.setCachingEnabled(cachingEnabled.value()); +} + +void loop() { + fl::clear(frameBuffer); + static float pos = 0; + pos += speed.value(); + if (pos > corkscrew.size() - 1) { + pos = 0; // Reset to the beginning + } + + // Update caching setting if it changed + static bool lastCachingState = cachingEnabled.value(); + if (lastCachingState != cachingEnabled.value()) { + corkscrew.setCachingEnabled(cachingEnabled.value()); + lastCachingState = cachingEnabled.value(); + } + + if (allWhite) { + for (size_t i = 0; i < frameBuffer.size(); ++i) { + frameBuffer.data()[i] = CRGB(8, 8, 8); + } + } + + if (splatRendering) { + Tile2x2_u8_wrap pos_tile = corkscrew.at_wrap(pos); + const CRGB color = CRGB::Blue; + // Draw each pixel in the 2x2 tile using the new wrapping API + for (int dx = 0; dx < 2; ++dx) { + for (int dy = 0; dy < 2; ++dy) { + auto data = pos_tile.at(dx, dy); + vec2 wrapped_pos = data.first; // Already wrapped position + uint8_t alpha = data.second; // Alpha value + + if (alpha > 0) { // Only draw if there's some alpha + CRGB c = color; + c.nscale8(alpha); // Scale the color by the alpha value + frameBuffer.at(wrapped_pos.x, wrapped_pos.y) = c; + } + } + } + } else { + // None splat rendering, looks aweful. + vec2f pos_vec2f = corkscrew.at_no_wrap(pos); + vec2 pos_i16 = vec2(round(pos_vec2f.x), round(pos_vec2f.y)); + // Now map the cork screw position to the cylindrical buffer that we + // will draw. + frameBuffer.at(pos_i16.x, pos_i16.y) = + CRGB::Blue; // Draw a blue pixel at (w, h) + } + FastLED.show(); +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Corkscrew/Corkscrew.ino b/.pio/libdeps/esp01_1m/FastLED/examples/Corkscrew/Corkscrew.ino new file mode 100644 index 0000000..d169a41 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Corkscrew/Corkscrew.ino @@ -0,0 +1,11 @@ +#include // Main FastLED library for controlling LEDs + +#if !SKETCH_HAS_LOTS_OF_MEMORY +// Don't compile this for AVR microcontrollers (like Arduino Uno) because they typically +// don't have enough memory to handle this complex animation. +// Instead, we provide empty setup/loop functions so the sketch will compile but do nothing. +void setup() {} +void loop() {} +#else // For all other platforms with more memory (ESP32, Teensy, etc.) +#include "Corkscrew.h" +#endif // End of the non-AVR code section diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Cylon/Cylon.ino b/.pio/libdeps/esp01_1m/FastLED/examples/Cylon/Cylon.ino new file mode 100644 index 0000000..e1193d2 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Cylon/Cylon.ino @@ -0,0 +1,60 @@ +/// @file Cylon.ino +/// @brief An animation that moves a single LED back and forth as the entire strip changes. +/// (Larson Scanner effect) +/// @example Cylon.ino + +#include + +using namespace fl; + +// How many leds in your strip? +#define NUM_LEDS 64 + +// For led chips like Neopixels, which have a data line, ground, and power, you just +// need to define DATA_PIN. For led chipsets that are SPI based (four wires - data, clock, +// ground, and power), like the LPD8806, define both DATA_PIN and CLOCK_PIN +#define DATA_PIN 2 +#define CLOCK_PIN 13 + +// Define the array of leds +CRGB leds[NUM_LEDS]; + +void setup() { + Serial.begin(57600); + Serial.println("resetting"); + FastLED.addLeds(leds,NUM_LEDS); + FastLED.setBrightness(84); +} + +void fadeall() { for(int i = 0; i < NUM_LEDS; i++) { leds[i].nscale8(250); } } + +void loop() { + static uint8_t hue = 0; + Serial.print("x"); + // First slide the led in one direction + for(int i = 0; i < NUM_LEDS; i++) { + // Set the i'th led to red + leds[i] = CHSV(hue++, 255, 255); + // Show the leds + FastLED.show(); + // now that we've shown the leds, reset the i'th led to black + // leds[i] = CRGB::Black; + fadeall(); + // Wait a little bit before we loop around and do it again + delay(10); + } + Serial.print("x"); + + // Now go in the other direction. + for(int i = (NUM_LEDS)-1; i >= 0; i--) { + // Set the i'th led to red + leds[i] = CHSV(hue++, 255, 255); + // Show the leds + FastLED.show(); + // now that we've shown the leds, reset the i'th led to black + // leds[i] = CRGB::Black; + fadeall(); + // Wait a little bit before we loop around and do it again + delay(10); + } +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/DemoReel100/DemoReel100.ino b/.pio/libdeps/esp01_1m/FastLED/examples/DemoReel100/DemoReel100.ino new file mode 100644 index 0000000..62b3db4 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/DemoReel100/DemoReel100.ino @@ -0,0 +1,133 @@ +/// @file DemoReel100.ino +/// @brief FastLED "100 lines of code" demo reel, showing off some effects +/// @example DemoReel100.ino + +#include + +// FastLED "100-lines-of-code" demo reel, showing just a few +// of the kinds of animation patterns you can quickly and easily +// compose using FastLED. +// +// This example also shows one easy way to define multiple +// animations patterns and have them automatically rotate. +// +// -Mark Kriegsman, December 2014 + + +#define DATA_PIN 3 +//#define CLK_PIN 4 +#define LED_TYPE WS2811 +#define COLOR_ORDER GRB +#define NUM_LEDS 64 +CRGB leds[NUM_LEDS]; + +#define BRIGHTNESS 96 +#define FRAMES_PER_SECOND 120 + +void setup() { + delay(3000); // 3 second delay for recovery + + // tell FastLED about the LED strip configuration + FastLED.addLeds(leds, NUM_LEDS).setCorrection(TypicalLEDStrip); + //FastLED.addLeds(leds, NUM_LEDS).setCorrection(TypicalLEDStrip); + + // set master brightness control + FastLED.setBrightness(BRIGHTNESS); +} + +// Forward declarations for pattern functions +void rainbow(); +void rainbowWithGlitter(); +void confetti(); +void sinelon(); +void juggle(); +void bpm(); +void nextPattern(); +void addGlitter(fract8 chanceOfGlitter); + +// List of patterns to cycle through. Each is defined as a separate function below. +typedef void (*SimplePatternList[])(); +SimplePatternList gPatterns = { rainbow, rainbowWithGlitter, confetti, sinelon, juggle, bpm }; + +uint8_t gCurrentPatternNumber = 0; // Index number of which pattern is current +uint8_t gHue = 0; // rotating "base color" used by many of the patterns + +void loop() +{ + // Call the current pattern function once, updating the 'leds' array + gPatterns[gCurrentPatternNumber](); + + // send the 'leds' array out to the actual LED strip + FastLED.show(); + // insert a delay to keep the framerate modest + FastLED.delay(1000/FRAMES_PER_SECOND); + + // do some periodic updates + EVERY_N_MILLISECONDS( 20 ) { gHue++; } // slowly cycle the "base color" through the rainbow + EVERY_N_SECONDS( 10 ) { nextPattern(); } // change patterns periodically +} + +#define ARRAY_SIZE(A) (sizeof(A) / sizeof((A)[0])) + +void nextPattern() +{ + // add one to the current pattern number, and wrap around at the end + gCurrentPatternNumber = (gCurrentPatternNumber + 1) % ARRAY_SIZE( gPatterns); +} + +void rainbow() +{ + // FastLED's built-in rainbow generator + fill_rainbow( leds, NUM_LEDS, gHue, 7); +} + +void rainbowWithGlitter() +{ + // built-in FastLED rainbow, plus some random sparkly glitter + rainbow(); + addGlitter(80); +} + +void addGlitter( fract8 chanceOfGlitter) +{ + if( random8() < chanceOfGlitter) { + leds[ random16(NUM_LEDS) ] += CRGB::White; + } +} + +void confetti() +{ + // random colored speckles that blink in and fade smoothly + fadeToBlackBy( leds, NUM_LEDS, 10); + int pos = random16(NUM_LEDS); + leds[pos] += CHSV( gHue + random8(64), 200, 255); +} + +void sinelon() +{ + // a colored dot sweeping back and forth, with fading trails + fadeToBlackBy( leds, NUM_LEDS, 20); + int pos = beatsin16( 13, 0, NUM_LEDS-1 ); + leds[pos] += CHSV( gHue, 255, 192); +} + +void bpm() +{ + // colored stripes pulsing at a defined Beats-Per-Minute (BPM) + uint8_t BeatsPerMinute = 62; + CRGBPalette16 palette = PartyColors_p; + uint8_t beat = beatsin8( BeatsPerMinute, 64, 255); + for( int i = 0; i < NUM_LEDS; i++) { //9948 + leds[i] = ColorFromPalette(palette, gHue+(i*2), beat-gHue+(i*10)); + } +} + +void juggle() { + // eight colored dots, weaving in and out of sync with each other + fadeToBlackBy( leds, NUM_LEDS, 20); + uint8_t dothue = 0; + for( int i = 0; i < 8; i++) { + leds[beatsin16( i+7, 0, NUM_LEDS-1 )] |= CHSV(dothue, 200, 255); + dothue += 32; + } +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Downscale/Downscale.h b/.pio/libdeps/esp01_1m/FastLED/examples/Downscale/Downscale.h new file mode 100644 index 0000000..4a84df8 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Downscale/Downscale.h @@ -0,0 +1,218 @@ + + +/* +This demo is best viewed using the FastLED compiler. + +Windows/MacOS binaries: https://github.com/FastLED/FastLED/releases + +Python + +Install: pip install fastled +Run: fastled +This will compile and preview the sketch in the browser, and enable +all the UI elements you see below. +*/ + +#include +#include + +#include "fl/downscale.h" +#include "fl/draw_visitor.h" +#include "fl/math_macros.h" +#include "fl/raster.h" +#include "fl/time_alpha.h" +#include "fl/ui.h" +#include "fl/xypath.h" +#include "fx/time.h" + +// Sketch. +#include "src/wave.h" +#include "src/xypaths.h" + +using namespace fl; + +#define HEIGHT 64 +#define WIDTH 64 +#define NUM_LEDS ((WIDTH) * (HEIGHT)) +#define TIME_ANIMATION 1000 // ms + +CRGB leds[NUM_LEDS]; +CRGB leds_downscaled[NUM_LEDS / 4]; // Downscaled buffer + +XYMap xyMap(WIDTH, HEIGHT, false); +XYMap xyMap_Dst(WIDTH / 2, HEIGHT / 2, + false); // Framebuffer is regular rectangle LED matrix. +// XYPathPtr shape = XYPath::NewRosePath(WIDTH, HEIGHT); + +// Speed up writing to the super sampled waveFx by writing +// to a raster. This will allow duplicate writes to be removed. + +WaveEffect wave_fx; // init in setup(). +fl::vector shapes = CreateXYPaths(WIDTH, HEIGHT); + +XYRaster raster(WIDTH, HEIGHT); +TimeWarp time_warp; + +XYPathPtr getShape(int which) { + int len = shapes.size(); + which = which % len; + if (which < 0) { + which += len; + } + return shapes[which]; +} + +//////////////////// UI Section ///////////////////////////// +UITitle title("XYPath Demo"); +UIDescription description("Use a path on the WaveFx"); +UIButton trigger("Trigger"); +UISlider whichShape("Which Shape", 0.0f, 0.0f, shapes.size() - 1, 1.0f); +UICheckbox useWaveFx("Use WaveFX", true); +UISlider transition("Transition", 0.0f, 0.0f, 1.0f, 0.01f); + +UISlider scale("Scale", 1.0f, 0.0f, 1.0f, 0.01f); +UISlider speed("Speed", 1.0f, -20.0f, 20.0f, 0.01f); +UISlider numberOfSteps("Number of Steps", 32.0f, 1.0f, 100.0f, 1.0f); +UISlider maxAnimation("Max Animation", 1.0f, 5.0f, 20.0f, 1.f); + +TimeClampedTransition shapeProgress(TIME_ANIMATION); + +void setupUiCallbacks() { + speed.onChanged([](UISlider& slider) { + time_warp.setSpeed(slider.value()); + }); + maxAnimation.onChanged( + [](UISlider& slider) { + shapeProgress.set_max_clamp(slider.value()); + }); + + trigger.onClicked([]() { + // shapeProgress.trigger(millis()); + FASTLED_WARN("Trigger pressed"); + }); + useWaveFx.onChanged([](fl::UICheckbox &checkbox) { + if (checkbox.value()) { + FASTLED_WARN("WaveFX enabled"); + } else { + FASTLED_WARN("WaveFX disabled"); + } + }); +} + +void setup() { + Serial.begin(115200); + auto screenmap = xyMap.toScreenMap(); + screenmap.setDiameter(.2); + FastLED.addLeds(leds, xyMap.getTotal()) + .setScreenMap(screenmap); + auto screenmap2 = xyMap_Dst.toScreenMap(); + screenmap.setDiameter(.5); + screenmap2.addOffsetY(-HEIGHT / 2); + FastLED.addLeds(leds_downscaled, xyMap_Dst.getTotal()) + .setScreenMap(screenmap2); + setupUiCallbacks(); + // Initialize wave simulation. Please don't use static constructors, keep it + // in setup(). + trigger.click(); + wave_fx = NewWaveSimulation2D(xyMap); +} + +//////////////////// LOOP SECTION ///////////////////////////// + +float getAnimationTime(uint32_t now) { + float pointf = shapeProgress.updatef(now); + return pointf + transition.value(); +} + +void clearLeds() { + fl::clear(leds); + fl::clear(leds_downscaled); +}; + +void loop() { + // Your code here + clearLeds(); + const uint32_t now = millis(); + uint32_t now_warped = time_warp.update(now); + + auto shape = getShape(whichShape.as()); + shape->setScale(scale.value()); + + float curr_alpha = getAnimationTime(now_warped); + static float s_prev_alpha = 0.0f; + + // unconditionally apply the circle. + if (trigger) { + // trigger the transition + time_warp.reset(now); + now_warped = time_warp.update(now); + shapeProgress.trigger(now_warped); + FASTLED_WARN("Transition triggered on " << shape->name()); + curr_alpha = getAnimationTime(now_warped); + s_prev_alpha = curr_alpha; + } + + clearLeds(); + const CRGB purple = CRGB(255, 0, 255); + const int number_of_steps = numberOfSteps.value(); + raster.reset(); + + float diff = curr_alpha - s_prev_alpha; + diff *= 1.0f; + float factor = MAX(s_prev_alpha - diff, 0.f); + + for (int i = 0; i < number_of_steps; ++i) { + float a = + fl::map_range(i, 0, number_of_steps - 1, factor, curr_alpha); + if (a < .04) { + // shorter tails at first. + a = map_range(a, 0.0f, .04f, 0.0f, .04f); + } + float diff_max_alpha = maxAnimation.value() - curr_alpha; + if (diff_max_alpha < 0.94) { + // shorter tails at the end. + a = map_range(a, curr_alpha, maxAnimation.value(), + curr_alpha, maxAnimation.value()); + } + uint8_t alpha = + fl::map_range(i, 0.0f, number_of_steps - 1, 64, 255); + Tile2x2_u8 subpixel = shape->at_subpixel(a); + subpixel.scale(alpha); + // subpixels.push_back(subpixel); + raster.rasterize(subpixel); + } + + s_prev_alpha = curr_alpha; + + if (useWaveFx) { + DrawRasterToWaveSimulator draw_wave_fx(&wave_fx); + raster.draw(xyMap, draw_wave_fx); + } else { + raster.draw(purple, xyMap, leds); + } + + int first = xyMap(1, 1); + int last = xyMap(WIDTH - 2, HEIGHT - 2); + + leds[first] = CRGB(255, 0, 0); + leds[last] = CRGB(0, 255, 0); + if (useWaveFx) { + // fxBlend.draw(Fx::DrawContext(now, leds)); + wave_fx.draw(Fx::DrawContext(now, leds)); + } + + // downscaleBilinear(leds, WIDTH, HEIGHT, leds_downscaled, WIDTH / 2, + // HEIGHT / 2); + + downscaleHalf(leds, xyMap, leds_downscaled, xyMap_Dst); + + // Print out the first 10 pixels of the original and downscaled + fl::vector_inlined downscaled_pixels; + fl::vector_inlined original_pixels; + for (int i = 0; i < 10; ++i) { + original_pixels.push_back(leds[i]); + downscaled_pixels.push_back(leds_downscaled[i]); + } + + FastLED.show(); +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Downscale/Downscale.ino b/.pio/libdeps/esp01_1m/FastLED/examples/Downscale/Downscale.ino new file mode 100644 index 0000000..d63a3a5 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Downscale/Downscale.ino @@ -0,0 +1,18 @@ + +#include +#include + +#if !SKETCH_HAS_LOTS_OF_MEMORY +// Platform does not have enough memory +void setup() { + Serial.println("setup"); +} +void loop() { + Serial.println("Downscale disabled"); + delay(1000); +} +#else + +#include "Downscale.h" + +#endif // SKETCH_HAS_LOTS_OF_MEMORY diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Downscale/src/wave.cpp b/.pio/libdeps/esp01_1m/FastLED/examples/Downscale/src/wave.cpp new file mode 100644 index 0000000..f7e661d --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Downscale/src/wave.cpp @@ -0,0 +1,65 @@ + +#include "wave.h" +#include "FastLED.h" + +DEFINE_GRADIENT_PALETTE(electricBlueFirePal){ + 0, 0, 0, 0, // Black + 32, 0, 0, 70, // Dark blue + 128, 20, 57, 255, // Electric blue + 255, 255, 255, 255 // White +}; + +DEFINE_GRADIENT_PALETTE(electricGreenFirePal){ + 0, 0, 0, 0, // black + 8, 128, 64, 64, // green + 16, 255, 222, 222, // red + 64, 255, 255, 255, // white + 255, 255, 255, 255 // white +}; + +WaveFx::Args CreateArgsLower() { + WaveFx::Args out; + out.factor = SuperSample::SUPER_SAMPLE_2X; + out.half_duplex = true; + out.auto_updates = true; + out.speed = 0.18f; + out.dampening = 9.0f; + out.crgbMap = fl::make_shared(electricBlueFirePal); + return out; +} + +WaveFx::Args CreateArgsUpper() { + WaveFx::Args out; + out.factor = SuperSample::SUPER_SAMPLE_2X; + out.half_duplex = true; + out.auto_updates = true; + out.speed = 0.25f; + out.dampening = 3.0f; + out.crgbMap = fl::make_shared(electricGreenFirePal); + return out; +} + +WaveEffect NewWaveSimulation2D(const XYMap& xymap) { + // only apply complex xymap as the last step after compositiing. + XYMap xy_rect = + XYMap::constructRectangularGrid(xymap.getWidth(), xymap.getHeight()); + Blend2dPtr fxBlend = + fl::make_shared(xymap); // Final transformation goes to the blend stack. + int width = xymap.getWidth(); + int height = xymap.getHeight(); + XYMap xyRect(width, height, false); + WaveFx::Args args_lower = CreateArgsLower(); + WaveFx::Args args_upper = CreateArgsUpper(); + WaveFxPtr wave_fx_low = fl::make_shared(xy_rect, args_lower); + WaveFxPtr wave_fx_high = fl::make_shared(xy_rect, args_upper); + Blend2dPtr blend_stack = fl::make_shared(xymap); + blend_stack->add(wave_fx_low); + blend_stack->add(wave_fx_high); + WaveEffect out = { + .wave_fx_low = wave_fx_low, + .wave_fx_high = wave_fx_high, + .blend_stack = blend_stack, + }; + + return out; +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Downscale/src/wave.h b/.pio/libdeps/esp01_1m/FastLED/examples/Downscale/src/wave.h new file mode 100644 index 0000000..c953700 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Downscale/src/wave.h @@ -0,0 +1,34 @@ + + +#pragma once + +#include "fx/2d/blend.h" +#include "fx/2d/wave.h" +#include "fx/fx2d.h" +#include "fl/raster.h" + +using namespace fl; + +struct WaveEffect { + WaveFxPtr wave_fx_low; + WaveFxPtr wave_fx_high; + Blend2dPtr blend_stack; + void draw(Fx::DrawContext context) { blend_stack->draw(context); } + void addf(size_t x, size_t y, float value) { + wave_fx_low->addf(x, y, value); + wave_fx_high->addf(x, y, value); + } +}; + +struct DrawRasterToWaveSimulator { + DrawRasterToWaveSimulator(WaveEffect* wave_fx) : mWaveFx(wave_fx) {} + void draw(const vec2 &pt, uint32_t /*index*/, uint8_t value) { + float valuef = value / 255.0f; + size_t xx = pt.x; + size_t yy = pt.y; + mWaveFx->addf(xx, yy, valuef); + } + WaveEffect* mWaveFx; +}; + +WaveEffect NewWaveSimulation2D(const XYMap& xymap); diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Downscale/src/xypaths.cpp b/.pio/libdeps/esp01_1m/FastLED/examples/Downscale/src/xypaths.cpp new file mode 100644 index 0000000..991490a --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Downscale/src/xypaths.cpp @@ -0,0 +1,41 @@ + + +#include "fl/xypath.h" +#include "fl/vector.h" +#include "fl/map_range.h" + + +#include "xypaths.h" + +using namespace fl; + +namespace { + fl::shared_ptr make_path(int width, int height) { + // make a triangle. + fl::shared_ptr params = fl::make_shared(); + vector_inlined points; + points.push_back(vec2f(0.0f, 0.0f)); + points.push_back(vec2f(width / 3, height / 2)); + points.push_back(vec2f(width - 3, height - 1)); + points.push_back(vec2f(0.0f, height - 1)); + points.push_back(vec2f(0.0f, 0.0f)); + for (auto &p : points) { + p.x = map_range(p.x, 0.0f, width - 1, -1.0f, 1.0f); + p.y = map_range(p.y, 0.0f, height - 1, -1.0f, 1.0f); + params->addPoint(p); + } + return params; + } +} + +fl::vector CreateXYPaths(int width, int height) { + fl::vector out; + out.push_back(XYPath::NewCirclePath(width, height)); + out.push_back(XYPath::NewRosePath(width, height)); + out.push_back(XYPath::NewHeartPath(width, height)); + out.push_back(XYPath::NewArchimedeanSpiralPath(width, height)); + out.push_back(XYPath::NewPhyllotaxisPath(width, height)); + out.push_back(XYPath::NewGielisCurvePath(width, height)); + out.push_back(XYPath::NewCatmullRomPath(width, height, make_path(width, height))); + return out; +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Downscale/src/xypaths.h b/.pio/libdeps/esp01_1m/FastLED/examples/Downscale/src/xypaths.h new file mode 100644 index 0000000..83bc79d --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Downscale/src/xypaths.h @@ -0,0 +1,10 @@ + + +#include "fl/xypath.h" +#include "fl/vector.h" + +using namespace fl; + + // XYPath::NewRosePath(WIDTH, HEIGHT); + +fl::vector CreateXYPaths(int width, int height); \ No newline at end of file diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/EaseInOut/EaseInOut.h b/.pio/libdeps/esp01_1m/FastLED/examples/EaseInOut/EaseInOut.h new file mode 100644 index 0000000..94699a0 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/EaseInOut/EaseInOut.h @@ -0,0 +1,129 @@ +/// @file EaseInOut.ino +/// @brief Demonstrates easing functions with visual curve display +/// @example EaseInOut.ino +/// +/// This sketch is fully compatible with the FastLED web compiler. To use it do the following: +/// 1. Install Fastled: `pip install fastled` +/// 2. cd into this examples page. +/// 3. Run the FastLED web compiler at root: `fastled` +/// 4. When the compiler is done a web page will open. + +#include +#include "fl/ease.h" +#include "fl/leds.h" + +using namespace fl; + +// Matrix configuration +#define MATRIX_WIDTH 100 +#define MATRIX_HEIGHT 100 +#define NUM_LEDS (MATRIX_WIDTH * MATRIX_HEIGHT) +#define DATA_PIN 3 +#define LED_TYPE WS2812B +#define COLOR_ORDER GRB +#define BRIGHTNESS 255 + + +#define MATRIX_SERPENTINE true + +// Use LedsXY for splat rendering instead of regular CRGB array +LedsXY leds; + +// Create XYMap for serpentine 100x100 matrix +XYMap xyMap = XYMap::constructSerpentine(MATRIX_WIDTH, MATRIX_HEIGHT); + +UITitle title("EaseInOut"); +UIDescription description("Use the xPosition slider to see the ease function curve. Use the Ease Type dropdown to select different easing functions. Use the 16-bit checkbox to toggle between 16-bit (checked) and 8-bit (unchecked) precision."); + +// UI Controls +UISlider xPosition("xPosition", 0.0f, 0.0f, 1.0f, 0.01f); + +// Create dropdown with descriptive ease function names +fl::string easeOptions[] = { + "None", + "In Quad", + "Out Quad", + "In-Out Quad", + "In Cubic", + "Out Cubic", + "In-Out Cubic", + "In Sine", + "Out Sine", + "In-Out Sine" +}; +UIDropdown easeTypeDropdown("Ease Type", easeOptions); + +UICheckbox use16Bit("16-bit", true); // Default checked for 16-bit precision + +EaseType getEaseType(int value) { + switch (value) { + case 0: return EASE_NONE; + case 1: return EASE_IN_QUAD; + case 2: return EASE_OUT_QUAD; + case 3: return EASE_IN_OUT_QUAD; + case 4: return EASE_IN_CUBIC; + case 5: return EASE_OUT_CUBIC; + case 6: return EASE_IN_OUT_CUBIC; + case 7: return EASE_IN_SINE; + case 8: return EASE_OUT_SINE; + case 9: return EASE_IN_OUT_SINE; + } + FL_ASSERT(false, "Invalid ease type"); + return EASE_IN_OUT_QUAD; +} + +void setup() { + Serial.begin(115200); + Serial.println("FastLED Ease16InOutQuad Demo - Simple Curve Visualization"); + + // Add LEDs and set screen map + auto *controller = + &FastLED.addLeds(leds, NUM_LEDS); + + // Convert XYMap to ScreenMap and set it on the controller + fl::ScreenMap screenMap = xyMap.toScreenMap(); + screenMap.setDiameter(.5); // Set LED diameter for visualization + controller->setScreenMap(screenMap); + + // Configure FastLED + FastLED.setBrightness(BRIGHTNESS); + FastLED.setCorrection(TypicalLEDStrip); + FastLED.setDither(BRIGHTNESS < 255); + + // Set default dropdown selection to "In-Out Quad" (index 3) + easeTypeDropdown.setSelectedIndex(3); +} + +void loop() { + // Clear the matrix using fl::clear for LedsXY + fl::clear(leds); + + // Get the current slider value (0.0 to 1.0) + float sliderValue = xPosition.value(); + + // Map slider value to X coordinate (0 to width-1) + uint8_t x = map(sliderValue * 1000, 0, 1000, 0, MATRIX_WIDTH - 1); + + // Get the selected ease type using the dropdown index + EaseType selectedEaseType = getEaseType(easeTypeDropdown.as_int()); + + uint8_t y; + if (use16Bit.value()) { + // Use 16-bit precision + uint16_t easeInput = map(sliderValue * 1000, 0, 1000, 0, 65535); + uint16_t easeOutput = ease16(selectedEaseType, easeInput); + y = map(easeOutput, 0, 65535, 0, MATRIX_HEIGHT - 1); + } else { + // Use 8-bit precision + uint8_t easeInput = map(sliderValue * 1000, 0, 1000, 0, 255); + uint8_t easeOutput = ease8(selectedEaseType, easeInput); + y = map(easeOutput, 0, 255, 0, MATRIX_HEIGHT - 1); + } + + // Draw white dot at the calculated position using splat rendering + if (x < MATRIX_WIDTH && y < MATRIX_HEIGHT) { + leds(x, y) = CRGB::White; + } + + FastLED.show(); +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/EaseInOut/EaseInOut.ino b/.pio/libdeps/esp01_1m/FastLED/examples/EaseInOut/EaseInOut.ino new file mode 100644 index 0000000..a0636ec --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/EaseInOut/EaseInOut.ino @@ -0,0 +1,9 @@ +#include "fl/sketch_macros.h" + +#if !SKETCH_HAS_LOTS_OF_MEMORY +// Platform does not have enough memory +void setup() {} +void loop() {} +#else +#include "EaseInOut.h" +#endif diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Esp32S3I2SDemo/Esp32S3I2SDemo.h b/.pio/libdeps/esp01_1m/FastLED/examples/Esp32S3I2SDemo/Esp32S3I2SDemo.h new file mode 100644 index 0000000..042a670 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Esp32S3I2SDemo/Esp32S3I2SDemo.h @@ -0,0 +1,205 @@ + +#ifdef ESP32 + +/// The Yves ESP32_S3 I2S driver is a driver that uses the I2S peripheral on the ESP32-S3 to drive leds. +/// Originally from: https://github.com/hpwit/I2SClockLessLedDriveresp32s3 +/// +/// +/// This is an advanced driver. It has certain ramifications. +/// - Once flashed, the ESP32-S3 might NOT want to be reprogrammed again. To get around +/// this hold the reset button and release when the flash tool is looking for an +/// an upload port. +/// - Put a delay in the setup function. This is to make it easier to flash the device during developement. +/// - Serial output will mess up the DMA controller. I'm not sure why this is happening +/// but just be aware of it. If your device suddenly stops working, remove the printfs and see if that fixes the problem. +/// +/// Is RGBW supported? Yes. +/// +/// Is Overclocking supported? Yes. Use this to bend the timeings to support other WS281X variants. Fun fact, just overclock the +/// chipset until the LED starts working. +/// +/// What about the new WS2812-5VB leds? Yes, they have 250us timing. +/// +/// Why use this? +/// Raw YVes driver needs a perfect parallel rectacngle buffer for operation. In this code we've provided FastLED +/// type bindings. +/// +// ArduinoIDE +// Should already be enabled. +// +// PLATFORMIO BUILD FLAGS: +// Define your platformio.ini like so: +// +// PlatformIO +// [env:esp32s3] +// platform = https://github.com/pioarduino/platform-espressif32/releases/download/54.03.20/platform-espressif32.zip +// framework = arduino +// board = seeed_xiao_esp32s3 + + +#define FASTLED_USES_ESP32S3_I2S // Must define this before including FastLED.h + + +#include "FastLED.h" +#include "fl/assert.h" + + +#define NUMSTRIPS 16 +#define NUM_LEDS_PER_STRIP 256 +#define NUM_LEDS (NUM_LEDS_PER_STRIP * NUMSTRIPS) + +// Note that you can use less strips than this. + +#define EXAMPLE_PIN_NUM_DATA0 19 // B0 +#define EXAMPLE_PIN_NUM_DATA1 45 // B1 +#define EXAMPLE_PIN_NUM_DATA2 21 // B2 +#define EXAMPLE_PIN_NUM_DATA3 6 // B3 +#define EXAMPLE_PIN_NUM_DATA4 7 // B4 +#define EXAMPLE_PIN_NUM_DATA5 8 // G0 +#define EXAMPLE_PIN_NUM_DATA6 9 // G1 +#define EXAMPLE_PIN_NUM_DATA7 10 // G2 +#define EXAMPLE_PIN_NUM_DATA8 11 // G3 +#define EXAMPLE_PIN_NUM_DATA9 12 // G4 +#define EXAMPLE_PIN_NUM_DATA10 13 // G5 +#define EXAMPLE_PIN_NUM_DATA11 14 // R0 +#define EXAMPLE_PIN_NUM_DATA12 15 // R1 +#define EXAMPLE_PIN_NUM_DATA13 16 // R2 +#define EXAMPLE_PIN_NUM_DATA14 17 // R3 +#define EXAMPLE_PIN_NUM_DATA15 18 // R4 + + +// Users say you can use a lot less strips. Experiment around and find out! +// Please comment at reddit.com/r/fastled and let us know if you have problems. +// Or send us a picture of your Triumps! +int PINS[] = { + EXAMPLE_PIN_NUM_DATA0, + EXAMPLE_PIN_NUM_DATA1, + EXAMPLE_PIN_NUM_DATA2, + EXAMPLE_PIN_NUM_DATA3, + EXAMPLE_PIN_NUM_DATA4, + EXAMPLE_PIN_NUM_DATA5, + EXAMPLE_PIN_NUM_DATA6, + EXAMPLE_PIN_NUM_DATA7, + EXAMPLE_PIN_NUM_DATA8, + EXAMPLE_PIN_NUM_DATA9, + EXAMPLE_PIN_NUM_DATA10, + EXAMPLE_PIN_NUM_DATA11, + EXAMPLE_PIN_NUM_DATA12, + EXAMPLE_PIN_NUM_DATA13, + EXAMPLE_PIN_NUM_DATA14, + EXAMPLE_PIN_NUM_DATA15 +}; + +CRGB leds[NUM_LEDS]; + +void setup_i2s() { + // Note, in this case we are using contingious memory for the leds. But this is not required. + // Each strip can be a different size and the FastLED api will upscale the smaller strips to the largest strip. + FastLED.addLeds( + leds + (0 * NUM_LEDS_PER_STRIP), NUM_LEDS_PER_STRIP + ); + FastLED.addLeds( + leds + (1 * NUM_LEDS_PER_STRIP), NUM_LEDS_PER_STRIP + ); + FastLED.addLeds( + leds + (2 * NUM_LEDS_PER_STRIP), NUM_LEDS_PER_STRIP + ); + FastLED.addLeds( + leds + (3 * NUM_LEDS_PER_STRIP), NUM_LEDS_PER_STRIP + ); + FastLED.addLeds( + leds + (4 * NUM_LEDS_PER_STRIP), NUM_LEDS_PER_STRIP + ); + FastLED.addLeds( + leds + (5 * NUM_LEDS_PER_STRIP), NUM_LEDS_PER_STRIP + ); + FastLED.addLeds( + leds + (6 * NUM_LEDS_PER_STRIP), NUM_LEDS_PER_STRIP + ); + FastLED.addLeds( + leds + (7 * NUM_LEDS_PER_STRIP), NUM_LEDS_PER_STRIP + ); + FastLED.addLeds( + leds + (8 * NUM_LEDS_PER_STRIP), NUM_LEDS_PER_STRIP + ); + FastLED.addLeds( + leds + (9 * NUM_LEDS_PER_STRIP), NUM_LEDS_PER_STRIP + ); + FastLED.addLeds( + leds + (10 * NUM_LEDS_PER_STRIP), NUM_LEDS_PER_STRIP + ); + FastLED.addLeds( + leds + (11 * NUM_LEDS_PER_STRIP), NUM_LEDS_PER_STRIP + ); + FastLED.addLeds( + leds + (12 * NUM_LEDS_PER_STRIP), NUM_LEDS_PER_STRIP + ); + FastLED.addLeds( + leds + (13 * NUM_LEDS_PER_STRIP), NUM_LEDS_PER_STRIP + ); + FastLED.addLeds( + leds + (14 * NUM_LEDS_PER_STRIP), NUM_LEDS_PER_STRIP + ); + FastLED.addLeds( + leds + (15 * NUM_LEDS_PER_STRIP), NUM_LEDS_PER_STRIP + ); +} + + + +void setup() { + // put your setup code here, to run once: + Serial.begin(57600); + + // This is used so that you can see if PSRAM is enabled. If not, we will crash in setup() or in loop(). + log_d("Total heap: %d", ESP.getHeapSize()); + log_d("Free heap: %d", ESP.getFreeHeap()); + log_d("Total PSRAM: %d", ESP.getPsramSize()); // If this prints out 0, then PSRAM is not enabled. + log_d("Free PSRAM: %d", ESP.getFreePsram()); + + log_d("waiting 6 seconds before startup"); + delay(6000); // The long reset time here is to make it easier to flash the device during the development process. + + setup_i2s(); + FastLED.setBrightness(32); + +} + +void fill_rainbow(CRGB* all_leds) { + static int s_offset = 0; + for (int j = 0; j < NUMSTRIPS; j++) { + for (int i = 0; i < NUM_LEDS_PER_STRIP; i++) { + int idx = (i + s_offset) % NUM_LEDS_PER_STRIP + NUM_LEDS_PER_STRIP * j; + all_leds[idx] = CHSV(i, 255, 255); + } + } + s_offset++; +} + +void loop() { + fill_rainbow(leds); + FastLED.show(); + +} + +#else // ESP32 + +// Non-ESP32 platform - provide minimal example for compilation testing +#include "FastLED.h" + +#define NUM_LEDS 16 +#define DATA_PIN 3 + +CRGB leds[NUM_LEDS]; + +void setup() { + FastLED.addLeds(leds, NUM_LEDS); +} + +void loop() { + fill_rainbow(leds, NUM_LEDS, 0, 7); + FastLED.show(); + delay(50); +} + +#endif // ESP32 diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Esp32S3I2SDemo/Esp32S3I2SDemo.ino b/.pio/libdeps/esp01_1m/FastLED/examples/Esp32S3I2SDemo/Esp32S3I2SDemo.ino new file mode 100644 index 0000000..c954df9 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Esp32S3I2SDemo/Esp32S3I2SDemo.ino @@ -0,0 +1,19 @@ + + +#ifndef ESP32 +#define IS_ESP32_S3 0 +#else +#include "sdkconfig.h" + +#ifdef CONFIG_IDF_TARGET_ESP32S3 +#define IS_ESP32_S3 1 +#else +#define IS_ESP32_S3 0 +#endif // CONFIG_IDF_TARGET_ESP32 +#endif // ESP32 + +#if IS_ESP32_S3 +#include "Esp32S3I2SDemo.h" +#else +#include "platforms/sketch_fake.hpp" +#endif diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/EspI2SDemo/EspI2SDemo.h b/.pio/libdeps/esp01_1m/FastLED/examples/EspI2SDemo/EspI2SDemo.h new file mode 100644 index 0000000..266fbab --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/EspI2SDemo/EspI2SDemo.h @@ -0,0 +1,74 @@ +// Simple test for the I2S on the ESP32dev board. +// IMPORTANT: +// This is using examples is built on esp-idf 4.x. This existed prior to Arduino Core 3.0.0. +// To use this example, you MUST downgrade to Arduino Core < 3.0.0 +// or it won't work on Arduino. + +#ifdef ESP32 + + + +#define FASTLED_ESP32_I2S +#include + +// How many leds in your strip? +#define NUM_LEDS 1 + +// For led chips like WS2812, which have a data line, ground, and power, you just +// need to define DATA_PIN. For led chipsets that are SPI based (four wires - data, clock, +// ground, and power), like the LPD8806 define both DATA_PIN and CLOCK_PIN +// Clock pin only needed for SPI based chipsets when not using hardware SPI +#define DATA_PIN 3 + +// Define the array of leds +CRGB leds[NUM_LEDS]; + +void setup() { + // Uncomment/edit one of the following lines for your leds arrangement. + // ## Clockless types ## + FastLED.addLeds(leds, NUM_LEDS); // GRB ordering is assumed +} + +void loop() { + // Turn the LED on, then pause + leds[0] = CRGB::Red; + FastLED.show(); + delay(500); + // Now turn the LED off, then pause + leds[0] = CRGB::Black; + FastLED.show(); + delay(500); + + // This is a no-op but tests that we have access to gCntBuffer, part of the + // i2s api. You can delete this in your own sketch. It's only here for testing + // purposes. + if (false) { + int value = gCntBuffer; + value++; + } +} + +#else // ESP32 + +// Non-ESP32 platform - provide minimal example for compilation testing +#include + +#define NUM_LEDS 1 +#define DATA_PIN 3 + +CRGB leds[NUM_LEDS]; + +void setup() { + FastLED.addLeds(leds, NUM_LEDS); +} + +void loop() { + leds[0] = CRGB::Red; + FastLED.show(); + delay(500); + leds[0] = CRGB::Black; + FastLED.show(); + delay(500); +} + +#endif // ESP32 diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/EspI2SDemo/EspI2SDemo.ino b/.pio/libdeps/esp01_1m/FastLED/examples/EspI2SDemo/EspI2SDemo.ino new file mode 100644 index 0000000..6fe1d33 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/EspI2SDemo/EspI2SDemo.ino @@ -0,0 +1,25 @@ + +#include "fl/has_include.h" + + +// Platform must be esp32. +#if !defined(ESP32) || !FL_HAS_INCLUDE("sdkconfig.h") +#define IS_ESP32_DEV 0 +#else + +#include "sdkconfig.h" + +#if CONFIG_IDF_TARGET_ESP32 +#define IS_ESP32_DEV 1 +#else +#define IS_ESP32_DEV 0 +#endif +#endif + + + +#if IS_ESP32_DEV +#include "EspI2SDemo.h" +#else +#include "platforms/sketch_fake.hpp" +#endif diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/FestivalStick/FestivalStick.ino b/.pio/libdeps/esp01_1m/FastLED/examples/FestivalStick/FestivalStick.ino new file mode 100644 index 0000000..fe3776f --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/FestivalStick/FestivalStick.ino @@ -0,0 +1,14 @@ +#include "FastLED.h" + + +#include "fl/sketch_macros.h" + +#if !SKETCH_HAS_LOTS_OF_MEMORY +// Platform does not have enough memory +void setup() {} +void loop() {} +#else + +#include "curr.h" + +#endif diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/FestivalStick/curr.h b/.pio/libdeps/esp01_1m/FastLED/examples/FestivalStick/curr.h new file mode 100644 index 0000000..f78acb2 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/FestivalStick/curr.h @@ -0,0 +1,811 @@ +/* +Festival Stick - Corkscrew LED Mapping Demo + +This example demonstrates proper corkscrew LED mapping for a festival stick +(19+ turns, 288 LEDs) using the new Corkscrew ScreenMap functionality. + +Key Features: +- Uses Corkscrew.toScreenMap() for accurate web interface visualization +- Draws patterns into a rectangular grid (frameBuffer) +- Maps the rectangular grid to the corkscrew LED positions using readFrom() +- Supports both noise patterns and manual LED positioning +- Proper color boost and brightness controls + +Workflow: +1. Draw patterns into frameBuffer (rectangular grid for easy 2D drawing) +2. Use corkscrew.readFrom(frameBuffer) to map grid to corkscrew LED positions +3. Display the corkscrew buffer directly via FastLED +4. Web interface shows actual corkscrew spiral shape via ScreenMap + +*/ + + +#include "FastLED.h" +#include "fl/compiler_control.h" + + +#include "fl/assert.h" +#include "fl/corkscrew.h" +#include "fl/grid.h" +#include "fl/leds.h" +#include "fl/screenmap.h" +#include "fl/sstream.h" +#include "fl/warn.h" +#include "noise.h" +#include "fl/array.h" +#include "fx/2d/wave.h" +#include "fx/2d/blend.h" +#include "fx/fx_engine.h" +#include "fx/2d/animartrix.hpp" + +// #include "vec3.h" + +using namespace fl; + + + +#ifndef PIN_DATA +#define PIN_DATA 1 // Universally available pin +#endif + +#ifndef PIN_CLOCK +#define PIN_CLOCK 2 // Universally available pin +#endif + + +#ifdef TEST +#define NUM_LEDS 4 +#define CORKSCREW_TURNS 2 // Default to 19 turns +#else +#define NUM_LEDS 288 +#define CORKSCREW_TURNS 19.25 // Default to 19 turns +#endif + +// #define CM_BETWEEN_LEDS 1.0 // 1cm between LEDs +// #define CM_LED_DIAMETER 0.5 // 0.5cm LED diameter + +UITitle festivalStickTitle("Festival Stick - Advanced Version"); +UIDescription festivalStickDescription( + "# Festival Stick Demo\n\n" + "This example demonstrates **proper corkscrew LED mapping** for a festival stick using FastLED's advanced mapping capabilities.\n\n" + "## Key Features\n" + "- **19+ turns** with 288 LEDs total\n" + "- Uses `Corkscrew.toScreenMap()` for accurate web interface visualization\n" + "- Multiple render modes: **Noise**, **Position**, **Fire**, **Wave**, and **Animartrix** effects\n" + "- Real-time cylindrical surface mapping\n" + "- **Wave mode**: Cylindrical 2D wave simulation with ripple effects and configurable blur\n" + "- **Animartrix mode**: Advanced 2D animation effects with polar coordinate patterns\n\n" + "## How It Works\n" + "1. Draws patterns into a rectangular grid (`frameBuffer`)\n" + "2. Maps the grid to corkscrew LED positions using `readFrom()`\n" + "3. Web interface shows the actual spiral shape via ScreenMap\n\n" + "*Select different render modes and adjust parameters to see various effects!*"); + +// UIHelp festivalStickHelp("Festival Stick - Advanced Guide"); + +// UIHelp corkscrewMappingHelp("Understanding Corkscrew Mapping"); + +// UIHelp uiControlsHelp("UI Controls Guide"); + + + +UISlider speed("Speed", 0.1f, 0.01f, 1.0f, 0.01f); +UISlider positionCoarse("Position Coarse (10x)", 0.0f, 0.0f, 1.0f, 0.01f); +UISlider positionFine("Position Fine (1x)", 0.0f, 0.0f, 0.1f, 0.001f); +UISlider positionExtraFine("Position Extra Fine (0.1x)", 0.0f, 0.0f, 0.01f, 0.0001f); +UISlider brightness("Brightness", 255, 0, 255, 1); + +UICheckbox autoAdvance("Auto Advance", true); +UICheckbox allWhite("All White", false); +UICheckbox splatRendering("Splat Rendering", true); + +// Noise controls (grouped under noiseGroup) + +UISlider noiseScale("Noise Scale", 100, 10, 200, 5); +UISlider noiseSpeed("Noise Speed", 4, 1, 100, 1); + +// UIDropdown examples - noise-related color palette +string paletteOptions[] = {"Party", "Heat", "Ocean", "Forest", "Rainbow"}; +string renderModeOptions[] = { "Wave", "Animartrix", "Noise", "Position", "Fire" }; + + +UIDropdown paletteDropdown("Color Palette", paletteOptions); +UIDropdown renderModeDropdown("Render Mode", renderModeOptions); + + +// fl::array> easeInfo = { +// pair(EASE_IN_QUAD, "EASE_IN_QUAD"), +// pair(EASE_OUT_QUAD, "EASE_OUT_QUAD"), +// pair(EASE_IN_OUT_QUAD, "EASE_IN_OUT_QUAD"), +// pair(EASE_IN_CUBIC, "EASE_IN_CUBIC"), +// pair(EASE_OUT_CUBIC, "EASE_OUT_CUBIC"), +// pair(EASE_IN_OUT_CUBIC, "EASE_IN_OUT_CUBIC"), +// pair(EASE_IN_SINE, "EASE_IN_SINE"), +// pair(EASE_OUT_SINE, "EASE_OUT_SINE"), +// pair(EASE_IN_OUT_SINE, "EASE_IN_OUT_SINE") +// }; + + +fl::vector easeInfo = { + "EASE_NONE", + "EASE_IN_QUAD", + "EASE_OUT_QUAD", + "EASE_IN_OUT_QUAD", + "EASE_IN_CUBIC", + "EASE_OUT_CUBIC", + "EASE_IN_OUT_CUBIC", + "EASE_IN_SINE", + "EASE_OUT_SINE", + "EASE_IN_OUT_SINE" +}; + +EaseType getEaseType(fl::string value) { + if (value == "EASE_NONE") { + return EASE_NONE; + } else if (value == "EASE_IN_QUAD") { + return EASE_IN_QUAD; + } else if (value == "EASE_OUT_QUAD") { + return EASE_OUT_QUAD; + } else if (value == "EASE_IN_OUT_QUAD") { + return EASE_IN_OUT_QUAD; + } else if (value == "EASE_IN_CUBIC") { + return EASE_IN_CUBIC; + } else if (value == "EASE_OUT_CUBIC") { + return EASE_OUT_CUBIC; + } else if (value == "EASE_IN_OUT_CUBIC") { + return EASE_IN_OUT_CUBIC; + } else if (value == "EASE_IN_SINE") { + return EASE_IN_SINE; + } else if (value == "EASE_OUT_SINE") { + return EASE_OUT_SINE; + } else if (value == "EASE_IN_OUT_SINE") { + return EASE_IN_OUT_SINE; + } else { + return EASE_NONE; + } +} + +// Color boost controls +UIDropdown saturationFunction("Saturation Function", easeInfo); +UIDropdown luminanceFunction("Luminance Function", easeInfo); + +// Fire-related UI controls (added for cylindrical fire effect) +UISlider fireScaleXY("Fire Scale", 8, 1, 100, 1); +UISlider fireSpeedY("Fire SpeedY", 1.3, 1, 6, .1); +UISlider fireScaleX("Fire ScaleX", .3, 0.1, 3, .01); +UISlider fireInvSpeedZ("Fire Inverse SpeedZ", 20, 1, 100, 1); +UINumberField firePalette("Fire Palette", 0, 0, 2); + +// Wave-related UI controls (cylindrical wave effects) +UISlider waveSpeed("Wave Speed", 0.03f, 0.0f, 1.0f, 0.01f); +UISlider waveDampening("Wave Dampening", 9.1f, 0.0f, 20.0f, 0.1f); +UICheckbox waveHalfDuplex("Wave Half Duplex", true); +UICheckbox waveAutoTrigger("Wave Auto Trigger", true); +UISlider waveTriggerSpeed("Wave Trigger Speed", 0.5f, 0.0f, 1.0f, 0.01f); +UIButton waveTriggerButton("Trigger Wave"); +UINumberField wavePalette("Wave Palette", 0, 0, 2); + +// Wave blur controls (added for smoother wave effects) +UISlider waveBlurAmount("Wave Blur Amount", 50, 0, 172, 1); +UISlider waveBlurPasses("Wave Blur Passes", 1, 1, 10, 1); + +// Fire color palettes (from FireCylinder) +DEFINE_GRADIENT_PALETTE(firepal){ + 0, 0, 0, 0, + 32, 255, 0, 0, + 190, 255, 255, 0, + 255, 255, 255, 255 +}; + +DEFINE_GRADIENT_PALETTE(electricGreenFirePal){ + 0, 0, 0, 0, + 32, 0, 70, 0, + 190, 57, 255, 20, + 255, 255, 255, 255 +}; + +DEFINE_GRADIENT_PALETTE(electricBlueFirePal){ + 0, 0, 0, 0, + 32, 0, 0, 70, + 128, 20, 57, 255, + 255, 255, 255, 255 +}; + +// Wave color palettes (for cylindrical wave effects) +DEFINE_GRADIENT_PALETTE(waveBluepal){ + 0, 0, 0, 0, // Black (no wave) + 32, 0, 0, 70, // Dark blue (low wave) + 128, 20, 57, 255, // Electric blue (medium wave) + 255, 255, 255, 255 // White (high wave) +}; + +DEFINE_GRADIENT_PALETTE(waveGreenpal){ + 0, 0, 0, 0, // Black (no wave) + 8, 128, 64, 64, // Green with red tint (very low wave) + 16, 255, 222, 222, // Pinkish red (low wave) + 64, 255, 255, 255, // White (medium wave) + 255, 255, 255, 255 // White (high wave) +}; + +DEFINE_GRADIENT_PALETTE(waveRainbowpal){ + 0, 255, 0, 0, // Red (no wave) + 64, 255, 127, 0, // Orange (low wave) + 128, 255, 255, 0, // Yellow (medium wave) + 192, 0, 255, 0, // Green (high wave) + 255, 0, 0, 255 // Blue (maximum wave) +}; + +// Create UIGroup for noise controls using variadic constructor +// This automatically assigns all specified controls to the "Noise Controls" group +UIGroup noiseGroup("Noise Controls", noiseScale, noiseSpeed, paletteDropdown); +UIGroup fireGroup("Fire Controls", fireScaleXY, fireSpeedY, fireScaleX, fireInvSpeedZ, firePalette); +UIGroup waveGroup("Wave Controls", waveSpeed, waveDampening, waveHalfDuplex, waveAutoTrigger, waveTriggerSpeed, waveTriggerButton, wavePalette, waveBlurAmount, waveBlurPasses); +UIGroup renderGroup("Render Options", renderModeDropdown, splatRendering, allWhite, brightness); +UIGroup colorBoostGroup("Color Boost", saturationFunction, luminanceFunction); +UIGroup pointGraphicsGroup("Point Graphics Mode", speed, positionCoarse, positionFine, positionExtraFine, autoAdvance); + +// Animartrix-related UI controls +UINumberField animartrixIndex("Animartrix Animation", 5, 0, NUM_ANIMATIONS - 1); +UINumberField animartrixColorOrder("Animartrix Color Order", 0, 0, 5); +UISlider animartrixTimeSpeed("Animartrix Time Speed", 1, -10, 10, .1); + +UIGroup animartrixGroup("Animartrix Controls", animartrixIndex, animartrixTimeSpeed, animartrixColorOrder); + +// Color palette for noise +CRGBPalette16 noisePalette = PartyColors_p; +uint8_t colorLoop = 1; + +// Option 1: Runtime Corkscrew (flexible, configurable at runtime) +Corkscrew corkscrew(CORKSCREW_TURNS, NUM_LEDS); + +// Simple position tracking - one variable for both modes +static float currentPosition = 0.0f; +static uint32_t lastUpdateTime = 0; + +// Wave effect globals +static uint32_t nextWaveTrigger = 0; + + + + +// Option 2: Constexpr dimensions for compile-time array sizing +constexpr uint16_t CORKSCREW_WIDTH = + calculateCorkscrewWidth(CORKSCREW_TURNS, NUM_LEDS); +constexpr uint16_t CORKSCREW_HEIGHT = + calculateCorkscrewHeight(CORKSCREW_TURNS, NUM_LEDS); + +// Now you can use these for array initialization: +// CRGB frameBuffer[CORKSCREW_WIDTH * CORKSCREW_HEIGHT]; // Compile-time sized +// array + +// Create a corkscrew with: +// - 30cm total length (300mm) +// - 5cm width (50mm) +// - 2mm LED inner diameter +// - 24 LEDs per turn +// ScreenMap screenMap = makeCorkScrew(NUM_LEDS, +// 300.0f, 50.0f, 2.0f, 24.0f); + +// vector mapCorkScrew = makeCorkScrew(args); +ScreenMap screenMap; +fl::shared_ptr> frameBufferPtr; + +// Wave effect objects - declared here but initialized in setup() +WaveFxPtr waveFx; +Blend2dPtr waveBlend; + +// Animartrix effect objects - declared here but initialized in setup() +fl::unique_ptr animartrix; +fl::unique_ptr fxEngine; +WaveCrgbGradientMapPtr crgMap = fl::make_shared(); + +void setup() { + // Use constexpr dimensions (computed at compile time) + constexpr int width = CORKSCREW_WIDTH; // = 16 + constexpr int height = CORKSCREW_HEIGHT; // = 18 + + + // Noise controls are now automatically grouped by the UIGroup constructor + // The noiseGroup variadic constructor automatically called setGroup() on all controls + + + // Or use runtime corkscrew for dynamic sizing + // int width = corkscrew.cylinder_width(); + // int height = corkscrew.cylinder_height(); + + XYMap xyMap = XYMap::constructRectangularGrid(width, height, 0); + + // Use the corkscrew's internal buffer for the LED strip + CLEDController *controller = + &FastLED.addLeds(corkscrew.rawData(), NUM_LEDS); + + // CLEDController *controller = + // &FastLED.addLeds(stripLeds, NUM_LEDS); + + // NEW: Create ScreenMap directly from Corkscrew using toScreenMap() + // This maps each LED index to its exact position on the corkscrew spiral + // instead of using a rectangular grid mapping + ScreenMap corkscrewScreenMap = corkscrew.toScreenMap(0.2f); + + // OLD WAY (rectangular grid - not accurate for corkscrew visualization): + // ScreenMap screenMap = xyMap.toScreenMap(); + // screenMap.setDiameter(.2f); + + // Set the corkscrew screen map for the controller + // This allows the web interface to display the actual corkscrew spiral shape + controller->setScreenMap(corkscrewScreenMap); + + // Initialize wave effects for cylindrical surface + XYMap xyRect(width, height, false); // Rectangular grid for wave simulation + WaveFx::Args waveArgs; + waveArgs.factor = SuperSample::SUPER_SAMPLE_2X; // 2x supersampling for smoother waves + waveArgs.half_duplex = true; // Only positive waves + waveArgs.auto_updates = true; // Auto-update simulation + waveArgs.speed = 0.16f; // Wave propagation speed + waveArgs.dampening = 6.0f; // Wave energy loss + waveArgs.x_cyclical = true; // Enable cylindrical wrapping! + waveArgs.crgbMap = fl::make_shared(waveBluepal); // Default color palette + + // Create wave effect with cylindrical mapping + waveFx = fl::make_shared(xyRect, waveArgs); + + // Create blender for wave effects (allows multiple wave layers in future) + waveBlend = fl::make_shared(xyRect); + waveBlend->add(waveFx); + + // Initialize Animartrix effect + XYMap animartrixXyMap = XYMap::constructRectangularGrid(width, height, 0); + animartrix.reset(new Animartrix(animartrixXyMap, POLAR_WAVES)); + fxEngine.reset(new FxEngine(width * height)); + fxEngine->addFx(*animartrix); + + // Demonstrate UIGroup functionality for noise controls + FL_WARN("Noise UI Group initialized: " << noiseGroup.name()); + FL_WARN(" This group contains noise pattern controls:"); + FL_WARN(" - Use Noise Pattern toggle"); + FL_WARN(" - Noise Scale and Speed sliders"); + FL_WARN(" - Color Palette selection for noise"); + FL_WARN(" UIGroup automatically applied group membership via variadic constructor"); + + // Set initial dropdown selections + paletteDropdown.setSelectedIndex(0); // Party + renderModeDropdown.setSelectedIndex(0); // Fire (new default) + + // Add onChange callbacks for dropdowns + paletteDropdown.onChanged([](UIDropdown &dropdown) { + string selectedPalette = dropdown.value(); + FL_WARN("Noise palette changed to: " << selectedPalette); + if (selectedPalette == "Party") { + noisePalette = PartyColors_p; + } else if (selectedPalette == "Heat") { + noisePalette = HeatColors_p; + } else if (selectedPalette == "Ocean") { + noisePalette = OceanColors_p; + } else if (selectedPalette == "Forest") { + noisePalette = ForestColors_p; + } else if (selectedPalette == "Rainbow") { + noisePalette = RainbowColors_p; + } + }); + + renderModeDropdown.onChanged([](UIDropdown &dropdown) { + string mode = dropdown.value(); + // Simple example of using getOption() + for(size_t i = 0; i < dropdown.getOptionCount(); i++) { + if(dropdown.getOption(i) == mode) { + FL_WARN("Render mode changed to: " << mode); + } + } + }); + + // Add onChange callback for animartrix color order + animartrixColorOrder.onChanged([](int value) { + EOrder order = RGB; + switch(value) { + case 0: order = RGB; break; + case 1: order = RBG; break; + case 2: order = GRB; break; + case 3: order = GBR; break; + case 4: order = BRG; break; + case 5: order = BGR; break; + } + if (animartrix.get()) { + animartrix->setColorOrder(order); + } + }); + + + waveFx->setCrgbMap(crgMap); + + frameBufferPtr = corkscrew.getOrCreateInputSurface(); +} + + +FL_OPTIMIZATION_LEVEL_O0_BEGIN // Works around a compile bug in clang 19 +float get_position(uint32_t now) { + if (autoAdvance.value()) { + // Check if auto-advance was just enabled + // Auto-advance mode: increment smoothly from current position + float elapsedSeconds = float(now - lastUpdateTime) / 1000.0f; + float increment = elapsedSeconds * speed.value() * + 0.3f; // Make it 1/20th the original speed + currentPosition = fmodf(currentPosition + increment, 1.0f); + lastUpdateTime = now; + return currentPosition; + } else { + // Manual mode: use the dual slider control + float combinedPosition = positionCoarse.value() + positionFine.value() + positionExtraFine.value(); + // Clamp to ensure we don't exceed 1.0 + if (combinedPosition > 1.0f) + combinedPosition = 1.0f; + return combinedPosition; + } +} +FL_OPTIMIZATION_LEVEL_O0_END + +void fillFrameBufferNoise() { + // Get current UI values + uint8_t noise_scale = noiseScale.value(); + uint8_t noise_speed = noiseSpeed.value(); + + // Derive noise coordinates from current time instead of forward iteration + uint32_t now = millis(); + uint16_t noise_z = now * noise_speed / 10; // Primary time dimension + uint16_t noise_x = now * noise_speed / 80; // Slow drift in x + uint16_t noise_y = now * noise_speed / 160; // Even slower drift in y (opposite direction) + + int width = frameBufferPtr->width(); + int height = frameBufferPtr->height(); + + // Data smoothing for low speeds (from NoisePlusPalette example) + uint8_t dataSmoothing = 0; + if(noise_speed < 50) { + dataSmoothing = 200 - (noise_speed * 4); + } + + // Generate noise for each pixel in the frame buffer using cylindrical mapping + for(int x = 0; x < width; x++) { + for(int y = 0; y < height; y++) { + // Convert rectangular coordinates to cylindrical coordinates + // Map x to angle (0 to 2*PI), y remains as height + float angle = (float(x) / float(width)) * 2.0f * PI; + + // Convert cylindrical coordinates to cartesian for noise sampling + // Use the noise_scale to control the cylinder size in noise space + float cylinder_radius = noise_scale; // Use the existing noise_scale parameter + + // Calculate cartesian coordinates on the cylinder surface + float noise_x_cyl = cos(angle) * cylinder_radius; + float noise_y_cyl = sin(angle) * cylinder_radius; + float noise_z_height = float(y) * noise_scale; // Height component + + // Apply time-based offsets + int xoffset = int(noise_x_cyl) + noise_x; + int yoffset = int(noise_y_cyl) + noise_y; + int zoffset = int(noise_z_height) + noise_z; + + // Generate 8-bit noise value using 3D Perlin noise with cylindrical coordinates + uint8_t data = inoise8(xoffset, yoffset, zoffset); + + // Expand the range from ~16-238 to 0-255 (from NoisePlusPalette) + data = qsub8(data, 16); + data = qadd8(data, scale8(data, 39)); + + // Apply data smoothing if enabled + if(dataSmoothing) { + CRGB oldColor = frameBufferPtr->at(x, y); + uint8_t olddata = (oldColor.r + oldColor.g + oldColor.b) / 3; // Simple brightness extraction + uint8_t newdata = scale8(olddata, dataSmoothing) + scale8(data, 256 - dataSmoothing); + data = newdata; + } + + // Map noise to color using palette (adapted from NoisePlusPalette) + uint8_t index = data; + uint8_t bri = data; + + // Add color cycling if enabled - also derive from time + uint8_t ihue = 0; + if(colorLoop) { + ihue = (now / 100) % 256; // Derive hue from time instead of incrementing + index += ihue; + } + + // Enhance brightness (from NoisePlusPalette example) + // if(bri > 127) { + // //bri = 255; + // } else { + // //bri = dim8_raw(bri * 2); + // } + + // Get color from palette and set pixel + CRGB color = ColorFromPalette(noisePalette, index, bri); + + // Apply color boost using ease functions + EaseType sat_ease = getEaseType(saturationFunction.value()); + EaseType lum_ease = getEaseType(luminanceFunction.value()); + color = color.colorBoost(sat_ease, lum_ease); + + frameBufferPtr->at(x, y) = color; + } + } +} + +void drawNoise(uint32_t now) { + FL_UNUSED(now); + fillFrameBufferNoise(); +} + +void draw(float pos) { + if (splatRendering) { + Tile2x2_u8_wrap pos_tile = corkscrew.at_wrap(pos); + //FL_WARN("pos_tile: " << pos_tile); + CRGB color = CRGB::Blue; + // Apply color boost using ease functions + EaseType sat_ease = getEaseType(saturationFunction.value()); + EaseType lum_ease = getEaseType(luminanceFunction.value()); + color = color.colorBoost(sat_ease, lum_ease); + // Draw each pixel in the 2x2 tile using the new wrapping API + for (int dx = 0; dx < 2; ++dx) { + for (int dy = 0; dy < 2; ++dy) { + Tile2x2_u8_wrap::Entry data = pos_tile.at(dx, dy); + vec2 wrapped_pos = data.first; // Already wrapped position + uint8_t alpha = data.second; // Alpha value + + if (alpha > 0) { // Only draw if there's some alpha + CRGB c = color; + c.nscale8(alpha); // Scale the color by the alpha value + frameBufferPtr->at(wrapped_pos.x, wrapped_pos.y) = c; + } + } + } + } else { + // None splat rendering, looks aweful. + vec2f pos_vec2f = corkscrew.at_no_wrap(pos); + vec2 pos_i16 = vec2(pos_vec2f.x, pos_vec2f.y); + + CRGB color = CRGB::Blue; + // Apply color boost using ease functions + EaseType sat_ease = getEaseType(saturationFunction.value()); + EaseType lum_ease = getEaseType(luminanceFunction.value()); + color = color.colorBoost(sat_ease, lum_ease); + + // Now map the cork screw position to the cylindrical buffer that we + // will draw. + frameBufferPtr->at(pos_i16.x, pos_i16.y) = color; // Draw a blue pixel at (w, h) + } +} + +CRGBPalette16 getFirePalette() { + int paletteIndex = (int)firePalette.value(); + switch (paletteIndex) { + case 0: + return firepal; + case 1: + return electricGreenFirePal; + case 2: + return electricBlueFirePal; + default: + return firepal; + } +} + +uint8_t getFirePaletteIndex(uint32_t millis32, int width, int max_width, int height, int max_height, + uint32_t y_speed) { + uint16_t scale = fireScaleXY.as(); + + float xf = (float)width / (float)max_width; + uint8_t x = (uint8_t)(xf * 255); + + uint32_t cosx = cos8(x); + uint32_t sinx = sin8(x); + + float trig_scale = scale * fireScaleX.value(); + cosx *= trig_scale; + sinx *= trig_scale; + + uint32_t y = height * scale + y_speed; + + uint16_t z = millis32 / fireInvSpeedZ.as(); + + uint16_t noise16 = inoise16(cosx << 8, sinx << 8, y << 8, z << 8); + + uint8_t noise_val = noise16 >> 8; + + int8_t subtraction_factor = abs8(height - (max_height - 1)) * 255 / + (max_height - 1); + + return qsub8(noise_val, subtraction_factor); +} + +void fillFrameBufferFire(uint32_t now) { + CRGBPalette16 myPal = getFirePalette(); + + // Calculate the current y-offset for animation (makes the fire move) + uint32_t y_speed = now * fireSpeedY.value(); + + int width = frameBufferPtr->width(); + int height = frameBufferPtr->height(); + + // Loop through every pixel in our cylindrical matrix + for (int w = 0; w < width; w++) { + for (int h = 0; h < height; h++) { + // Calculate which color to use from our palette for this pixel + uint8_t palette_index = + getFirePaletteIndex(now, w, width, h, height, y_speed); + + // Get the actual RGB color from the palette + CRGB color = ColorFromPalette(myPal, palette_index, 255); + + // Apply color boost using ease functions + EaseType sat_ease = getEaseType(saturationFunction.value()); + EaseType lum_ease = getEaseType(luminanceFunction.value()); + color = color.colorBoost(sat_ease, lum_ease); + + // Set the pixel in the frame buffer + // Flip coordinates to make fire rise from bottom + frameBufferPtr->at((width - 1) - w, (height - 1) - h) = color; + } + } +} + +void drawFire(uint32_t now) { + fillFrameBufferFire(now); +} + +// Wave effect helper functions +CRGBPalette16 getWavePalette() { + int paletteIndex = (int)wavePalette.value(); + switch (paletteIndex) { + case 0: + return waveBluepal; // Electric blue waves + case 1: + return waveGreenpal; // Green/red waves + case 2: + return waveRainbowpal; // Rainbow waves + default: + return waveBluepal; // Default to blue + } +} + +void triggerWaveRipple() { + // Create a ripple at a random position within the central area + float perc = 0.15f; // 15% margin from edges + int width = corkscrew.cylinderWidth(); + int height = corkscrew.cylinderHeight(); + + int min_x = perc * width; + int max_x = (1 - perc) * width; + int min_y = perc * height; + int max_y = (1 - perc) * height; + + int x = random8(min_x, max_x); + int y = random8(min_y, max_y); + + // Trigger a 2x2 wave ripple for more punch (compensates for blur reduction) + float ripple_strength = 1.5f; // Higher value for more impact + waveFx->setf(x, y, ripple_strength); + waveFx->setf(x + 1, y, ripple_strength); + waveFx->setf(x, y + 1, ripple_strength); + waveFx->setf(x + 1, y + 1, ripple_strength); + + FL_WARN("Wave ripple triggered at (" << x << ", " << y << ") with 2x2 pattern"); +} + +void processWaveAutoTrigger(uint32_t now) { + // Handle automatic wave triggering + if (waveAutoTrigger.value()) { + if (now >= nextWaveTrigger) { + triggerWaveRipple(); + + // Calculate next trigger time based on speed + float speed = 1.0f - waveTriggerSpeed.value(); + uint32_t min_interval = (uint32_t)(500 * speed); // Minimum 500ms * speed + uint32_t max_interval = (uint32_t)(3000 * speed); // Maximum 3000ms * speed + + // Ensure valid range + uint32_t min = MIN(min_interval, max_interval); + uint32_t max = MAX(min_interval, max_interval); + if (min >= max) max = min + 1; + + nextWaveTrigger = now + random16(min, max); + } + } +} + + + +void drawWave(uint32_t now) { + // Update wave parameters from UI + waveFx->setSpeed(waveSpeed.value()); + waveFx->setDampening(waveDampening.value()); + waveFx->setHalfDuplex(waveHalfDuplex.value()); + waveFx->setXCylindrical(true); // Always keep cylindrical for corkscrew + + // Update wave color palette + CRGBPalette16 currentPalette = getWavePalette(); + crgMap->setGradient(currentPalette); + + + + // Apply blur settings to the wave blend (for smoother wave effects) + waveBlend->setGlobalBlurAmount(waveBlurAmount.value()); + waveBlend->setGlobalBlurPasses(waveBlurPasses.value()); + + // Check if manual trigger button was pressed + if (waveTriggerButton.value()) { + triggerWaveRipple(); + } + + // Handle auto-triggering + processWaveAutoTrigger(now); + + // Draw the wave effect directly to the frame buffer + // Create a DrawContext for the wave renderer + Fx::DrawContext waveContext(now, frameBufferPtr->data()); + waveBlend->draw(waveContext); +} + +void drawAnimartrix(uint32_t now) { + // Update animartrix parameters from UI + fxEngine->setSpeed(animartrixTimeSpeed.value()); + + // Handle animation index changes + static int lastAnimartrixIndex = -1; + if (animartrixIndex.value() != lastAnimartrixIndex) { + lastAnimartrixIndex = animartrixIndex.value(); + animartrix->fxSet(animartrixIndex.value()); + } + + // Draw the animartrix effect directly to the frame buffer + CRGB* dst = corkscrew.rawData(); + fxEngine->draw(now, dst); +} + +void loop() { + + delay(4); + uint32_t now = millis(); + frameBufferPtr->clear(); + + if (allWhite) { + CRGB whiteColor = CRGB(8, 8, 8); + for (u32 x = 0; x < frameBufferPtr->width(); x++) { + for (u32 y = 0; y < frameBufferPtr->height(); y++) { + frameBufferPtr->at(x, y) = whiteColor; + } + } + } + + + // Update the corkscrew mapping with auto-advance or manual position control + float combinedPosition = get_position(now); + float pos = combinedPosition * (corkscrew.size() - 1); + + + if (renderModeDropdown.value() == "Noise") { + drawNoise(now); + } else if (renderModeDropdown.value() == "Fire") { + drawFire(now); + } else if (renderModeDropdown.value() == "Wave") { + + drawWave(now); + } else if (renderModeDropdown.value() == "Animartrix") { + drawAnimartrix(now); + } else { + draw(pos); + } + + + // Use the new readFrom workflow: + // 1. Read directly from the frameBuffer Grid into the corkscrew's internal buffer + // use_multi_sampling = true will use multi-sampling to sample from the source grid, + // this will give a little bit better accuracy and the screenmap will be more accurate. + const bool use_multi_sampling = splatRendering; + // corkscrew.readFrom(frameBuffer, use_multi_sampling); + corkscrew.draw(use_multi_sampling); + + // The corkscrew's buffer is now populated and FastLED will display it directly + + FastLED.setBrightness(brightness.value()); + FastLED.show(); +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/FestivalStick/old.h b/.pio/libdeps/esp01_1m/FastLED/examples/FestivalStick/old.h new file mode 100644 index 0000000..90c1386 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/FestivalStick/old.h @@ -0,0 +1,220 @@ +/* +Festival Stick is a dense corkscrew of LEDs that is wrapped around one end of +a wooden walking stick commonly found on amazon.A0 + +The UI screenmap projects this cork screw into polar coordinates, so that the LEDs are +mapped to a sprial, with the inner portion of the spiral being the top, the outer +most portion being the bottom. + +*/ + + + +#include "fl/assert.h" +#include "fl/screenmap.h" +#include "fl/warn.h" +#include "noise.h" +#include +// #include "vec3.h" + +using namespace fl; + +// Power management settings +#define VOLTS 5 +#define MAX_AMPS 1 + + +#define PIN_DATA 9 +#define PIN_CLOCK 7 + +// Pin could have been tied to ground, instead it's tied to another pin. +#define PIN_BUTTON 1 +#define PIN_GRND 2 + +#define NUM_LEDS 288 +// #define CM_BETWEEN_LEDS 1.0 // 1cm between LEDs +// #define CM_LED_DIAMETER 0.5 // 0.5cm LED diameter + +UITitle festivalStickTitle("Festival Stick - Classic Version"); +UIDescription festivalStickDescription( + "Take a wooden walking stick, wrap dense LEDs around it like a corkscrew. Super simple but very awesome looking. " + "This classic version uses 3D Perlin noise to create organic, flowing patterns around the cylindrical surface. " + "Assumes dense 144 LEDs/meter (288 total LEDs)."); + +// UIHelp festivalStickHelp("Festival Stick - Classic Guide"); + +// UIHelp technicalHelp("Technical Details - Classic Festival Stick"); +// UIHelp usageHelp("Usage Guide - Classic Festival Stick"); +// UIHelp physicalBuildHelp("Building Your Festival Stick"); + + +UISlider ledsScale("Leds scale", 0.1f, 0.1f, 1.0f, 0.01f); +UIButton button("Button"); + +// Adding a brightness slider +UISlider brightness("Brightness", 16, 0, 255, 1); // Brightness from 0 to 255 + +CRGB leds[NUM_LEDS]; + + +// fl::vector +struct corkscrew_args { + int num_leds = NUM_LEDS; + float leds_per_turn = 15.5; + float width_cm = 1.0; +}; + +fl::vector makeCorkScrew(corkscrew_args args = corkscrew_args()) { + // int num_leds, float leds_per_turn, float width_cm + int num_leds = args.num_leds; + float leds_per_turn = args.leds_per_turn; + float width_cm = args.width_cm; + + const float circumference = leds_per_turn; + const float radius = circumference / (2.0 * PI); // radius in mm + const float angle_per_led = 2.0 * PI / leds_per_turn; // degrees per LED + const float total_angle_radians = angle_per_led * num_leds; + const float total_turns = total_angle_radians / (2.0 * PI); // total turns + const float height_per_turn_cm = width_cm; // 10cm height per turn + const float height_per_led = + height_per_turn_cm / + leds_per_turn; // this is the changing height per led. + const float total_height = + height_per_turn_cm * total_turns; // total height of the corkscrew + fl::vector out; + for (int i = 0; i < num_leds; i++) { + float angle = i * angle_per_led; // angle in radians + float height = (i / leds_per_turn) * height_per_turn_cm; // height in cm + + // Calculate the x, y, z coordinates for the corkscrew + float x = radius * cos(angle); // x coordinate + float z = radius * sin(angle); // y coordinate + float y = height; // z coordinate + + // Store the 3D coordinates in the vector + vec3f led_position(x, y, z); + // screenMap.set(i, led_position); + out.push_back(led_position); + } + return out; +} + + +fl::ScreenMap makeScreenMap(corkscrew_args args = corkscrew_args()) { + // Create a ScreenMap for the corkscrew + fl::vector points(args.num_leds); + + int num_leds = args.num_leds; + float leds_per_turn = args.leds_per_turn; + float width_cm = args.width_cm; + + + const float circumference = leds_per_turn; + const float radius = circumference / (2.0 * PI); // radius in mm + const float angle_per_led = 2.0 * PI / leds_per_turn; // degrees per LED + const float height_per_turn_cm = width_cm; // 10cm height per turn + const float height_per_led = + height_per_turn_cm / + leds_per_turn * 1.3; // this is the changing height per led. + + + + for (int i = 0; i < num_leds; i++) { + float angle = i * angle_per_led; // angle in radians + float r = radius + 10 + i * height_per_led; // height in cm + + // Calculate the x, y coordinates for the corkscrew + float x = r * cos(angle); // x coordinate + float y = r * sin(angle); // y coordinate + + // Store the 2D coordinates in the vector + points[i] = vec2f(x, y); + } + + FASTLED_WARN("Creating ScreenMap with:\n" << points); + + // Create a ScreenMap from the points + fl::ScreenMap screenMap(points.data(), num_leds, .5); + return screenMap; +} + + +// Create a corkscrew with: +// - 30cm total length (300mm) +// - 5cm width (50mm) +// - 2mm LED inner diameter +// - 24 LEDs per turn +// fl::ScreenMap screenMap = makeCorkScrew(NUM_LEDS, +// 300.0f, 50.0f, 2.0f, 24.0f); + +corkscrew_args args = corkscrew_args(); +fl::vector mapCorkScrew = makeCorkScrew(args); +fl::ScreenMap screenMap; + + +CLEDController* addController() { + CLEDController* controller = &FastLED.addLeds(leds, NUM_LEDS); + return controller; +} + +void setup() { + pinMode(PIN_GRND, OUTPUT); + digitalWrite(PIN_GRND, LOW); // Set ground pin to low + button.addRealButton(Button(PIN_BUTTON)); + screenMap = makeScreenMap(args); + //screenMap = ScreenMap::Circle(NUM_LEDS, 1.5f, 0.5f, 1.0f); + auto controller = addController(); + // Set the screen map for the controller + controller->setScreenMap(screenMap); + + // Set power management. This allows this festival stick to conformatable + // run on any USB battery that can output at least 1A at 5V. + // Keep in mind that this sketch is designed to use APA102HD mode, which will + // result in even lowwer run power consumption, since the power mode does not take + // into account the APA102HD gamma correction. However it is still a correct upper bound + // that will match the ledset exactly when the display tries to go full white. + FastLED.setMaxPowerInVoltsAndMilliamps(VOLTS, MAX_AMPS * 1000); + // set brightness 8 + FastLED.setBrightness(brightness.as_int()); + button.onChanged([](UIButton& but) { + // This function is called when the button is pressed + // If the button is pressed, show the generative pattern + if (but.isPressed()) { + FASTLED_WARN("Button pressed"); + } else { + FASTLED_WARN("NOT Button pressed"); + } + }); + +} + + +void showGenerative(uint32_t now) { + // This function is called to show the generative pattern + for (int i = 0; i < NUM_LEDS; i++) { + // Get the 2D position of this LED from the screen map + fl::vec3f pos = mapCorkScrew[i]; + float x = pos.x; + float y = pos.y; + float z = pos.z; + + x*= 20.0f * ledsScale.value(); + y*= 20.0f * ledsScale.value(); + z*= 20.0f * ledsScale.value(); + + uint16_t noise_value = inoise16(x,y,z, now / 100); + // Normalize the noise value to 0-255 + uint8_t brightness = map(noise_value, 0, 65535, 0, 255); + // Create a hue that changes with position and time + uint8_t sat = int32_t((x * 10 + y * 5 + now / 5)) % 256; + // Set the color + leds[i] = CHSV(170, sat, fl::clamp(255- sat, 64, 255)); + } +} + +void loop() { + uint32_t now = millis(); + fl::clear(leds); + showGenerative(now); + FastLED.show(); +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Fire2012/Fire2012.ino b/.pio/libdeps/esp01_1m/FastLED/examples/Fire2012/Fire2012.ino new file mode 100644 index 0000000..0b45121 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Fire2012/Fire2012.ino @@ -0,0 +1,111 @@ +/// @file Fire2012.ino +/// @brief Simple one-dimensional fire animation +/// @example Fire2012.ino + +#include + +#define LED_PIN 5 +#define COLOR_ORDER GRB +#define CHIPSET WS2811 +#define NUM_LEDS 30 + +#define BRIGHTNESS 200 +#define FRAMES_PER_SECOND 60 + +bool gReverseDirection = false; + +CRGB leds[NUM_LEDS]; + +// Forward declaration +void Fire2012(); + +void setup() { + delay(3000); // sanity delay + FastLED.addLeds(leds, NUM_LEDS).setCorrection( TypicalLEDStrip ); + FastLED.setBrightness( BRIGHTNESS ); +} + +void loop() +{ + // Add entropy to random number generator; we use a lot of it. + random16_add_entropy( random16()); + + Fire2012(); // run simulation frame + + FastLED.show(); // display this frame + FastLED.delay(1000 / FRAMES_PER_SECOND); +} + + +// Fire2012 by Mark Kriegsman, July 2012 +// as part of "Five Elements" shown here: http://youtu.be/knWiGsmgycY +//// +// This basic one-dimensional 'fire' simulation works roughly as follows: +// There's a underlying array of 'heat' cells, that model the temperature +// at each point along the line. Every cycle through the simulation, +// four steps are performed: +// 1) All cells cool down a little bit, losing heat to the air +// 2) The heat from each cell drifts 'up' and diffuses a little +// 3) Sometimes randomly new 'sparks' of heat are added at the bottom +// 4) The heat from each cell is rendered as a color into the leds array +// The heat-to-color mapping uses a black-body radiation approximation. +// +// Temperature is in arbitrary units from 0 (cold black) to 255 (white hot). +// +// This simulation scales it self a bit depending on NUM_LEDS; it should look +// "OK" on anywhere from 20 to 100 LEDs without too much tweaking. +// +// I recommend running this simulation at anywhere from 30-100 frames per second, +// meaning an interframe delay of about 10-35 milliseconds. +// +// Looks best on a high-density LED setup (60+ pixels/meter). +// +// +// There are two main parameters you can play with to control the look and +// feel of your fire: COOLING (used in step 1 above), and SPARKING (used +// in step 3 above). +// +// COOLING: How much does the air cool as it rises? +// Less cooling = taller flames. More cooling = shorter flames. +// Default 50, suggested range 20-100 +#define COOLING 55 + +// SPARKING: What chance (out of 255) is there that a new spark will be lit? +// Higher chance = more roaring fire. Lower chance = more flickery fire. +// Default 120, suggested range 50-200. +#define SPARKING 120 + + +void Fire2012() +{ +// Array of temperature readings at each simulation cell + static uint8_t heat[NUM_LEDS]; + + // Step 1. Cool down every cell a little + for( int i = 0; i < NUM_LEDS; i++) { + heat[i] = qsub8( heat[i], random8(0, ((COOLING * 10) / NUM_LEDS) + 2)); + } + + // Step 2. Heat from each cell drifts 'up' and diffuses a little + for( int k= NUM_LEDS - 1; k >= 2; k--) { + heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2] ) / 3; + } + + // Step 3. Randomly ignite new 'sparks' of heat near the bottom + if( random8() < SPARKING ) { + int y = random8(7); + heat[y] = qadd8( heat[y], random8(160,255) ); + } + + // Step 4. Map from heat cells to LED colors + for( int j = 0; j < NUM_LEDS; j++) { + CRGB color = HeatColor( heat[j]); + int pixelnumber; + if( gReverseDirection ) { + pixelnumber = (NUM_LEDS-1) - j; + } else { + pixelnumber = j; + } + leds[pixelnumber] = color; + } +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Fire2012WithPalette/Fire2012WithPalette.ino b/.pio/libdeps/esp01_1m/FastLED/examples/Fire2012WithPalette/Fire2012WithPalette.ino new file mode 100644 index 0000000..a86fde8 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Fire2012WithPalette/Fire2012WithPalette.ino @@ -0,0 +1,167 @@ +/// @file Fire2012WithPalette.ino +/// @brief Simple one-dimensional fire animation with a programmable color palette +/// @example Fire2012WithPalette.ino + +#include +#include + +#define LED_PIN 5 +#define COLOR_ORDER GRB +#define CHIPSET WS2811 +#define NUM_LEDS 30 + +#define BRIGHTNESS 200 +#define FRAMES_PER_SECOND 60 + +bool gReverseDirection = false; + +CRGB leds[NUM_LEDS]; + +CRGBPalette16 gPal; + +// Fire2012 by Mark Kriegsman, July 2012 +// as part of "Five Elements" shown here: http://youtu.be/knWiGsmgycY +//// +// This basic one-dimensional 'fire' simulation works roughly as follows: +// There's a underlying array of 'heat' cells, that model the temperature +// at each point along the line. Every cycle through the simulation, +// four steps are performed: +// 1) All cells cool down a little bit, losing heat to the air +// 2) The heat from each cell drifts 'up' and diffuses a little +// 3) Sometimes randomly new 'sparks' of heat are added at the bottom +// 4) The heat from each cell is rendered as a color into the leds array +// The heat-to-color mapping uses a black-body radiation approximation. +// +// Temperature is in arbitrary units from 0 (cold black) to 255 (white hot). +// +// This simulation scales it self a bit depending on NUM_LEDS; it should look +// "OK" on anywhere from 20 to 100 LEDs without too much tweaking. +// +// I recommend running this simulation at anywhere from 30-100 frames per second, +// meaning an interframe delay of about 10-35 milliseconds. +// +// Looks best on a high-density LED setup (60+ pixels/meter). +// +// +// There are two main parameters you can play with to control the look and +// feel of your fire: COOLING (used in step 1 above), and SPARKING (used +// in step 3 above). +// +// COOLING: How much does the air cool as it rises? +// Less cooling = taller flames. More cooling = shorter flames. +// Default 55, suggested range 20-100 +#define COOLING 55 + +// SPARKING: What chance (out of 255) is there that a new spark will be lit? +// Higher chance = more roaring fire. Lower chance = more flickery fire. +// Default 120, suggested range 50-200. +#define SPARKING 120 + + +void Fire2012WithPalette() +{ +// Array of temperature readings at each simulation cell + static uint8_t heat[NUM_LEDS]; + + // Step 1. Cool down every cell a little + for( int i = 0; i < NUM_LEDS; i++) { + heat[i] = qsub8( heat[i], random8(0, ((COOLING * 10) / NUM_LEDS) + 2)); + } + + // Step 2. Heat from each cell drifts 'up' and diffuses a little + for( int k= NUM_LEDS - 1; k >= 2; k--) { + heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2] ) / 3; + } + + // Step 3. Randomly ignite new 'sparks' of heat near the bottom + if( random8() < SPARKING ) { + int y = random8(7); + heat[y] = qadd8( heat[y], random8(160,255) ); + } + + // Step 4. Map from heat cells to LED colors + for( int j = 0; j < NUM_LEDS; j++) { + // Scale the heat value from 0-255 down to 0-240 + // for best results with color palettes. + uint8_t colorindex = scale8( heat[j], 240); + CRGB color = ColorFromPalette( gPal, colorindex); + int pixelnumber; + if( gReverseDirection ) { + pixelnumber = (NUM_LEDS-1) - j; + } else { + pixelnumber = j; + } + leds[pixelnumber] = color; + } +} + +// Fire2012 with programmable Color Palette +// +// This code is the same fire simulation as the original "Fire2012", +// but each heat cell's temperature is translated to color through a FastLED +// programmable color palette, instead of through the "HeatColor(...)" function. +// +// Four different static color palettes are provided here, plus one dynamic one. +// +// The three static ones are: +// 1. the FastLED built-in HeatColors_p -- this is the default, and it looks +// pretty much exactly like the original Fire2012. +// +// To use any of the other palettes below, just "uncomment" the corresponding code. +// +// 2. a gradient from black to red to yellow to white, which is +// visually similar to the HeatColors_p, and helps to illustrate +// what the 'heat colors' palette is actually doing, +// 3. a similar gradient, but in blue colors rather than red ones, +// i.e. from black to blue to aqua to white, which results in +// an "icy blue" fire effect, +// 4. a simplified three-step gradient, from black to red to white, just to show +// that these gradients need not have four components; two or +// three are possible, too, even if they don't look quite as nice for fire. +// +// The dynamic palette shows how you can change the basic 'hue' of the +// color palette every time through the loop, producing "rainbow fire". + +void setup() { + delay(3000); // sanity delay + FastLED.addLeds(leds, NUM_LEDS).setCorrection( TypicalLEDStrip ); + FastLED.setBrightness( BRIGHTNESS ); + + // This first palette is the basic 'black body radiation' colors, + // which run from black to red to bright yellow to white. + gPal = HeatColors_p; + + // These are other ways to set up the color palette for the 'fire'. + // First, a gradient from black to red to yellow to white -- similar to HeatColors_p + // gPal = CRGBPalette16( CRGB::Black, CRGB::Red, CRGB::Yellow, CRGB::White); + + // Second, this palette is like the heat colors, but blue/aqua instead of red/yellow + // gPal = CRGBPalette16( CRGB::Black, CRGB::Blue, CRGB::Aqua, CRGB::White); + + // Third, here's a simpler, three-step gradient, from black to red to white + // gPal = CRGBPalette16( CRGB::Black, CRGB::Red, CRGB::White); + Serial.println("setup"); +} + +void loop() +{ + // Add entropy to random number generator; we use a lot of it. + random16_add_entropy( random16()); + + // Fourth, the most sophisticated: this one sets up a new palette every + // time through the loop, based on a hue that changes every time. + // The palette is a gradient from black, to a dark color based on the hue, + // to a light color based on the hue, to white. + // + // static uint8_t hue = 0; + // hue++; + // CRGB darkcolor = CHSV(hue,255,192); // pure hue, three-quarters brightness + // CRGB lightcolor = CHSV(hue,128,255); // half 'whitened', full brightness + // gPal = CRGBPalette16( CRGB::Black, darkcolor, lightcolor, CRGB::White); + + + Fire2012WithPalette(); // run simulation frame, using palette colors + + FastLED.show(); // display this frame + FastLED.delay(1000 / FRAMES_PER_SECOND); +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Fire2023/Fire2023.h b/.pio/libdeps/esp01_1m/FastLED/examples/Fire2023/Fire2023.h new file mode 100644 index 0000000..6070a14 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Fire2023/Fire2023.h @@ -0,0 +1,262 @@ +/// @file Fire2023.ino +/// @brief Enhanced fire effect with ScreenMap +/// @example Fire2023.ino +/// +/// This sketch is fully compatible with the FastLED web compiler. To use it do the following: +/// 1. Install Fastled: `pip install fastled` +/// 2. cd into this examples page. +/// 3. Run the FastLED web compiler at root: `fastled` +/// 4. When the compiler is done a web page will open. + +/*This is a fire effect based on the famous Fire2012; but with various small improvements. +Perlin noise is being used to make a fire layer and a smoke layer; +and the overlay of both can make a quite realistic effect. + +The speed of both need to be adapted to the matrix size and width: +* Super small matrices (like 3x3 led) don't need the smoke +* medium sized matrices (8x8 for example) profit from fine tuning both Fire Speed/scale as well as Smoke speed/scale + +This code was adapted for a matrix with just four LED columns in 90° around a core and a height of 28. + +Right at the bottom of the code, you find a translation matrix that needs to be adapted to your set up. I included +a link to a helpful page for this. + +@repo https://github.com/Anderas2/Fire2023 +@author https://github.com/Anderas2 + +Demo: https://www.youtube.com/shorts/a_Wr0q9YQs4 +*/ + + +#include "FastLED.h" +#include "fl/xymap.h" +#include "fl/screenmap.h" +#include "fl/vector.h" + +using namespace fl; + + +// matrix size +#define WIDTH 4 +#define HEIGHT 28 +#define CentreX (WIDTH / 2) - 1 +#define CentreY (HEIGHT / 2) - 1 + +// NUM_LEDS = WIDTH * HEIGHT +#define PIXELPIN 3 // universal pin that works on all platforms +#define NUM_LEDS 120 +#define LAST_VISIBLE_LED 119 + + +// Fire properties +#define BRIGHTNESS 255 +#define FIRESPEED 17 +#define FLAMEHEIGHT 3.8 // the higher the value, the higher the flame +#define FIRENOISESCALE 125 // small values, softer fire. Big values, blink fire. 0-255 + +// Smoke screen properties +// The smoke screen works best for big fire effects. It effectively cuts of a part of the flames +// from the rest, sometimes; which looks very much fire-like. For small fire effects with low +// LED count in the height, it doesn't help +// speed must be a little different and faster from Firespeed, to be visible. +// Dimmer should be somewhere in the middle for big fires, and low for small fires. +#define SMOKESPEED 25 // how fast the perlin noise is parsed for the smoke +#define SMOKENOISE_DIMMER 250 // thickness of smoke: the lower the value, the brighter the flames. 0-255 +#define SMOKENOISESCALE 125 // small values, softer smoke. Big values, blink smoke. 0-255 + +CRGB leds[NUM_LEDS]; + +// fire palette roughly like matlab "hot" colormap +// This was one of the most important parts to improve - fire color makes fire impression. +// position, r, g, b value. +// max value for "position" is BRIGHTNESS +DEFINE_GRADIENT_PALETTE(hot_gp) { + 27, 0, 0, 0, // black + 28, 140, 40, 0, // red + 30, 205, 80, 0, // orange + 155, 255, 100, 0, + 210, 255, 200, 0, // yellow + 255, 255, 255, 255 // white +}; +CRGBPalette32 hotPalette = hot_gp; + +// Map XY coordinates to numbers on the LED strip +uint8_t XY (uint8_t x, uint8_t y); + + +// parameters and buffer for the noise array +#define NUM_LAYERS 2 +// two layers of perlin noise make the fire effect +#define FIRENOISE 0 +#define SMOKENOISE 1 +uint32_t x[NUM_LAYERS]; +uint32_t y[NUM_LAYERS]; +uint32_t z[NUM_LAYERS]; +uint32_t scale_x[NUM_LAYERS]; +uint32_t scale_y[NUM_LAYERS]; + +uint8_t noise[NUM_LAYERS][WIDTH][HEIGHT]; +uint8_t noise2[NUM_LAYERS][WIDTH][HEIGHT]; + +uint8_t heat[NUM_LEDS]; + + +ScreenMap makeScreenMap(); + +void setup() { + + //Serial.begin(115200); + // Adjust this for you own setup. Use the hardware SPI pins if possible. + // On Teensy 3.1/3.2 the pins are 11 & 13 + // Details here: https://github.com/FastLED/FastLED/wiki/SPI-Hardware-or-Bit-banging + // In case you see flickering / glitching leds, reduce the data rate to 12 MHZ or less + auto screenMap = makeScreenMap(); + FastLED.addLeds(leds, NUM_LEDS).setScreenMap(screenMap); // Pin für Neopixel + FastLED.setBrightness(BRIGHTNESS); + FastLED.setDither(DISABLE_DITHER); +} + +void Fire2023(uint32_t now); + +void loop() { + EVERY_N_MILLISECONDS(8) { + Fire2023(millis()); + } + FastLED.show(); +} + +ScreenMap makeScreenMap() { + fl::vector lut; + for (uint16_t y = 0; y < WIDTH; y++) { + for (uint16_t x = 0; x < HEIGHT; x++) { + vec2f xy = {float(x) * 3, float(y) * 20}; + lut.push_back(xy); + } + } + return ScreenMap(lut.data(), lut.size(), 1); +} + +void Fire2023(uint32_t now) { + // some changing values + // these values are produced by perlin noise to add randomness and smooth transitions + uint16_t ctrl1 = inoise16(11 * now, 0, 0); + uint16_t ctrl2 = inoise16(13 * now, 100000, 100000); + uint16_t ctrl = ((ctrl1 + ctrl2) >> 1); + + // parameters for the fire heat map + x[FIRENOISE] = 3 * ctrl * FIRESPEED; + y[FIRENOISE] = 20 * now * FIRESPEED; + z[FIRENOISE] = 5 * now * FIRESPEED; + scale_x[FIRENOISE] = scale8(ctrl1, FIRENOISESCALE); + scale_y[FIRENOISE] = scale8(ctrl2, FIRENOISESCALE); + + //calculate the perlin noise data for the fire + for (uint8_t x_count = 0; x_count < WIDTH; x_count++) { + uint32_t xoffset = scale_x[FIRENOISE] * (x_count - CentreX); + for (uint8_t y_count = 0; y_count < HEIGHT; y_count++) { + uint32_t yoffset = scale_y[FIRENOISE] * (y_count - CentreY); + uint16_t data = ((inoise16(x[FIRENOISE] + xoffset, y[FIRENOISE] + yoffset, z[FIRENOISE])) + 1); + noise[FIRENOISE][x_count][y_count] = data >> 8; + } + } + + // parameters for the smoke map + x[SMOKENOISE] = 3 * ctrl * SMOKESPEED; + y[SMOKENOISE] = 20 * now * SMOKESPEED; + z[SMOKENOISE] = 5 * now * SMOKESPEED; + scale_x[SMOKENOISE] = scale8(ctrl1, SMOKENOISESCALE); + scale_y[SMOKENOISE] = scale8(ctrl2, SMOKENOISESCALE); + + //calculate the perlin noise data for the smoke + for (uint8_t x_count = 0; x_count < WIDTH; x_count++) { + uint32_t xoffset = scale_x[SMOKENOISE] * (x_count - CentreX); + for (uint8_t y_count = 0; y_count < HEIGHT; y_count++) { + uint32_t yoffset = scale_y[SMOKENOISE] * (y_count - CentreY); + uint16_t data = ((inoise16(x[SMOKENOISE] + xoffset, y[SMOKENOISE] + yoffset, z[SMOKENOISE])) + 1); + noise[SMOKENOISE][x_count][y_count] = data / SMOKENOISE_DIMMER; + } + } + + //copy everything one line up + for (uint8_t y = 0; y < HEIGHT - 1; y++) { + for (uint8_t x = 0; x < WIDTH; x++) { + heat[XY(x, y)] = heat[XY(x, y + 1)]; + } + } + + // draw lowest line - seed the fire where it is brightest and hottest + for (uint8_t x = 0; x < WIDTH; x++) { + heat[XY(x, HEIGHT-1)] = noise[FIRENOISE][WIDTH - x][CentreX]; + //if (heat[XY(x, HEIGHT-1)] < 200) heat[XY(x, HEIGHT-1)] = 150; + } + + // dim the flames based on FIRENOISE noise. + // if the FIRENOISE noise is strong, the led goes out fast + // if the FIRENOISE noise is weak, the led stays on stronger. + // once the heat is gone, it stays dark. + for (uint8_t y = 0; y < HEIGHT - 1; y++) { + for (uint8_t x = 0; x < WIDTH; x++) { + uint8_t dim = noise[FIRENOISE][x][y]; + // high value in FLAMEHEIGHT = less dimming = high flames + dim = dim / FLAMEHEIGHT; + dim = 255 - dim; + heat[XY(x, y)] = scale8(heat[XY(x, y)] , dim); + + // map the colors based on heatmap + // use the heat map to set the color of the LED from the "hot" palette + // whichpalette position brightness blend or not + leds[XY(x, y)] = ColorFromPalette(hotPalette, heat[XY(x, y)], heat[XY(x, y)], LINEARBLEND); + + // dim the result based on SMOKENOISE noise + // this is not saved in the heat map - the flame may dim away and come back + // next iteration. + leds[XY(x, y)].nscale8(noise[SMOKENOISE][x][y]); + + } + } +} + +/* Physical layout of LED strip ****************************/ +uint8_t XY (uint8_t x, uint8_t y) { + // any out of bounds address maps to the first hidden pixel + // https://macetech.github.io/FastLED-XY-Map-Generator/ + if ( (x >= WIDTH) || (y >= HEIGHT) ) { + return (LAST_VISIBLE_LED + 1); + } + const uint8_t XYTable[] = { + 25, 26, 81, 82, + 25, 27, 81, 83, + 25, 28, 80, 84, + 24, 29, 79, 85, + 23, 30, 78, 86, + 22, 31, 77, 87, + 21, 32, 76, 88, + 20, 33, 75, 89, + 19, 34, 74, 90, + 18, 35, 73, 91, + 17, 36, 72, 92, + 16, 37, 71, 93, + 15, 38, 70, 94, + 14, 39, 69, 95, + 13, 40, 68, 96, + 12, 41, 67, 97, + 11, 42, 66, 98, + 10, 43, 65, 99, + 9, 44, 64, 100, + 8, 45, 63, 101, + 7, 46, 62, 102, + 6, 47, 61, 103, + 5, 48, 60, 104, + 4, 49, 59, 105, + 3, 50, 58, 106, + 2, 51, 57, 107, + 1, 52, 56, 108, + 0, 53, 55, 109 + }; + + uint8_t i = (y * WIDTH) + x; + uint8_t j = XYTable[i]; + return j; +} + + diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/Fire2023/Fire2023.ino b/.pio/libdeps/esp01_1m/FastLED/examples/Fire2023/Fire2023.ino new file mode 100644 index 0000000..2fc3e15 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/Fire2023/Fire2023.ino @@ -0,0 +1,17 @@ +#include "fl/sketch_macros.h" + +#if SKETCH_HAS_LOTS_OF_MEMORY + +#include "./Fire2023.h" + +#else + +void setup() { + Serial.begin(9600); +} + +void loop() { + Serial.println("Not enough memory"); + delay(1000); +} +#endif diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/FireCylinder/FireCylinder.h b/.pio/libdeps/esp01_1m/FastLED/examples/FireCylinder/FireCylinder.h new file mode 100644 index 0000000..c276288 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/FireCylinder/FireCylinder.h @@ -0,0 +1,215 @@ + +/* +This demo is best viewed using the FastLED compiler. + +Windows/MacOS binaries: https://github.com/FastLED/FastLED/releases + +Python + +Install: pip install fastled +Run: fastled +This will compile and preview the sketch in the browser, and enable +all the UI elements you see below. + +OVERVIEW: +This sketch creates a fire effect on a cylindrical LED display using Perlin noise. +Unlike a flat matrix, this cylinder connects the left and right edges (x=0 and x=width-1), +creating a seamless wrap-around effect. The fire appears to rise from the bottom, +with colors transitioning from black to red/yellow/white (or other palettes). +*/ + +// Perlin noise fire procedure +// 16x16 rgb led cylinder demo +// Exactly the same as the FireMatrix example, but with a cylinder, meaning that the x=0 +// and x = len-1 are connected. +// This also showcases the inoise16(x,y,z,t) function which handles 3D+time noise effects. +// Keep in mind that a cylinder is embedded in a 3D space with time being used to add +// additional noise to the effect. + +// HOW THE CYLINDRICAL FIRE EFFECT WORKS: +// 1. We use sine and cosine to map the x-coordinate to a circle in 3D space +// 2. This creates a cylindrical mapping where the left and right edges connect seamlessly +// 3. We use 4D Perlin noise (x,y,z,t) to generate natural-looking fire patterns +// 4. The height coordinate controls color fade-out to create the rising fire effect +// 5. The time dimension adds continuous variation to make the fire look dynamic + +#include "FastLED.h" // Main FastLED library for controlling LEDs +#include "fl/ui.h" // UI components for the FastLED web compiler (sliders, buttons, etc.) +#include "fl/xymap.h" // Mapping between 1D LED array and 2D coordinates +#include "fx/time.h" // Time manipulation utilities for animations + +using namespace fl; // Use the FastLED namespace for convenience + +// Cylinder dimensions - this defines the size of our virtual LED grid +#define HEIGHT 100 // Number of rows in the cylinder (vertical dimension) +#define WIDTH 100 // Number of columns in the cylinder (circumference) +#define SERPENTINE true // Whether the LED strip zigzags back and forth (common in matrix layouts) +#define BRIGHTNESS 255 // Maximum brightness level (0-255) + +// UI elements that appear in the FastLED web compiler interface: +UITitle title("FireCylinder Demo"); // Title displayed in the UI +UIDescription description("This Fire demo wraps around the cylinder. It uses Perlin noise to create a fire effect."); + +// TimeWarp helps control animation speed - it tracks time and allows speed adjustments +TimeWarp timeScale(0, 1.0f); // Initialize with 0 starting time and 1.0 speed multiplier + +// UI Controls for adjusting the fire effect: +UISlider scaleXY("Scale", 8, 1, 100, 1); // Controls the overall size of the fire pattern +UISlider speedY("SpeedY", 1.3, 1, 6, .1); // Controls how fast the fire moves upward +UISlider scaleX("ScaleX", .3, 0.1, 3, .01); // Controls the horizontal scale (affects the wrap-around) +UISlider invSpeedZ("Inverse SpeedZ", 20, 1, 100, 1); // Controls how fast the fire pattern changes over time (higher = slower) +UISlider brightness("Brightness", 255, 0, 255, 1); // Controls overall brightness +UINumberField palette("Palette", 0, 0, 2); // Selects which color palette to use (0=fire, 1=green, 2=blue) + +// Array to hold all LED color values - one CRGB struct per LED +CRGB leds[HEIGHT * WIDTH]; + +// Color palettes define the gradient of colors used for the fire effect +// Each entry has the format: position (0-255), R, G, B + +DEFINE_GRADIENT_PALETTE(firepal){ + // Traditional fire palette - transitions from black to red to yellow to white + 0, 0, 0, 0, // black (bottom of fire) + 32, 255, 0, 0, // red (base of flames) + 190, 255, 255, 0, // yellow (middle of flames) + 255, 255, 255, 255 // white (hottest part/tips of flames) +}; + +DEFINE_GRADIENT_PALETTE(electricGreenFirePal){ + // Green fire palette - for a toxic/alien look + 0, 0, 0, 0, // black (bottom) + 32, 0, 70, 0, // dark green (base) + 190, 57, 255, 20, // electric neon green (middle) + 255, 255, 255, 255 // white (hottest part) +}; + +DEFINE_GRADIENT_PALETTE(electricBlueFirePal){ + // Blue fire palette - for a cold/ice fire look + 0, 0, 0, 0, // Black (bottom) + 32, 0, 0, 70, // Dark blue (base) + 128, 20, 57, 255, // Electric blue (middle) + 255, 255, 255, 255 // White (hottest part) +}; + +// Create a mapping between 1D array positions and 2D x,y coordinates +XYMap xyMap(WIDTH, HEIGHT, SERPENTINE); + +void setup() { + Serial.begin(115200); // Initialize serial communication for debugging + + // Initialize the LED strip: + // - NEOPIXEL is the LED type + // - 3 is the data pin number (for real hardware) + // - setScreenMap connects our 2D coordinate system to the 1D LED array + fl::ScreenMap screen_map = xyMap.toScreenMap(); + screen_map.setDiameter(0.1f); // Set the diameter for the cylinder (0.2 cm per LED) + FastLED.addLeds(leds, HEIGHT * WIDTH).setScreenMap(screen_map); + + // Apply color correction for more accurate colors on LED strips + FastLED.setCorrection(TypicalLEDStrip); +} + +uint8_t getPaletteIndex(uint32_t millis32, int width, int max_width, int height, int max_height, + uint32_t y_speed) { + // This function calculates which color to use from our palette for each LED + + // Get the scale factor from the UI slider + uint16_t scale = scaleXY.as(); + + // Convert width position to an angle (0-255 represents 0-360 degrees) + // This maps our flat coordinate to a position on a cylinder + float xf = (float)width / (float)max_width; // Normalized position (0.0 to 1.0) + uint8_t x = (uint8_t)(xf * 255); // Convert to 0-255 range for trig functions + + // Calculate the sine and cosine of this angle to get 3D coordinates on the cylinder + uint32_t cosx = cos8(x); // cos8 returns a value 0-255 representing cosine + uint32_t sinx = sin8(x); // sin8 returns a value 0-255 representing sine + + // Apply scaling to the sine/cosine values + // This controls how "wide" the noise pattern is around the cylinder + float trig_scale = scale * scaleX.value(); + cosx *= trig_scale; + sinx *= trig_scale; + + // Calculate Y coordinate (vertical position) with speed offset for movement + uint32_t y = height * scale + y_speed; + + // Calculate Z coordinate (time dimension) - controls how the pattern changes over time + uint16_t z = millis32 / invSpeedZ.as(); + FL_UNUSED(z); // Suppress unused variable warning + + // Generate 16-bit Perlin noise using our 4D coordinates (x,y,z,t) + // The << 8 shifts values left by 8 bits (multiplies by 256) to use the full 16-bit range + // The last parameter (0) could be replaced with another time variable for more variation + uint16_t noise16 = inoise16(cosx << 8, sinx << 8, y << 8, 0); + + // Convert 16-bit noise to 8-bit by taking the high byte + uint8_t noise_val = noise16 >> 8; + + // Calculate how much to subtract based on vertical position (height) + // This creates the fade-out effect from bottom to top + // The formula maps height from 0 to max_height-1 to a value from 255 to 0 + int8_t subtraction_factor = abs8(height - (max_height - 1)) * 255 / + (max_height - 1); + + // Subtract the factor from the noise value (with underflow protection) + // qsub8 is a "saturating subtraction" - it won't go below 0 + return qsub8(noise_val, subtraction_factor); +} +CRGBPalette16 getPalette() { + // This function returns the appropriate color palette based on the UI selection + switch (palette) { + case 0: + return firepal; // Traditional orange/red fire + case 1: + return electricGreenFirePal; // Green "toxic" fire + case 2: + return electricBlueFirePal; // Blue "cold" fire + default: + return firepal; // Default to traditional fire if invalid value + } +} + +void loop() { + // The main program loop that runs continuously + + // Set the overall brightness from the UI slider + FastLED.setBrightness(brightness); + + // Get the selected color palette + CRGBPalette16 myPal = getPalette(); + + // Get the current time in milliseconds + uint32_t now = millis(); + + // Update the animation speed from the UI slider + timeScale.setSpeed(speedY); + + // Calculate the current y-offset for animation (makes the fire move) + uint32_t y_speed = timeScale.update(now); + + // Loop through every LED in our cylindrical matrix + for (int width = 0; width < WIDTH; width++) { + for (int height = 0; height < HEIGHT; height++) { + // Calculate which color to use from our palette for this LED + // This function handles the cylindrical mapping using sine/cosine + uint8_t palette_index = + getPaletteIndex(now, width, WIDTH, height, HEIGHT, y_speed); + + // Get the actual RGB color from the palette + // BRIGHTNESS ensures we use the full brightness range + CRGB c = ColorFromPalette(myPal, palette_index, BRIGHTNESS); + + // Convert our 2D coordinates to the 1D array index + // We use (WIDTH-1)-width and (HEIGHT-1)-height to flip the coordinates + // This makes the fire appear to rise from the bottom + int index = xyMap((WIDTH - 1) - width, (HEIGHT - 1) - height); + + // Set the LED color in our array + leds[index] = c; + } + } + + // Send the color data to the actual LEDs + FastLED.show(); +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/FireCylinder/FireCylinder.ino b/.pio/libdeps/esp01_1m/FastLED/examples/FireCylinder/FireCylinder.ino new file mode 100644 index 0000000..9f3e4be --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/FireCylinder/FireCylinder.ino @@ -0,0 +1,9 @@ +#include "FastLED.h" // Main FastLED library for controlling LEDs + +#if !SKETCH_HAS_LOTS_OF_MEMORY +// Platform does not have enough memory +void setup() {} +void loop() {} +#else +#include "FireCylinder.h" +#endif diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/FireMatrix/FireMatrix.h b/.pio/libdeps/esp01_1m/FastLED/examples/FireMatrix/FireMatrix.h new file mode 100644 index 0000000..14ea479 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/FireMatrix/FireMatrix.h @@ -0,0 +1,200 @@ + + +/* +This demo is best viewed using the FastLED compiler. + +Windows/MacOS binaries: https://github.com/FastLED/FastLED/releases + +Python + +Install: pip install fastled +Run: fastled +This will compile and preview the sketch in the browser, and enable +all the UI elements you see below. + +OVERVIEW: +This sketch creates a fire effect using Perlin noise on a matrix of LEDs. +The fire appears to move upward with colors transitioning from black at the bottom +to white at the top, with red and yellow in between (for the default palette). +*/ + +// Perlin noise fire procedure +// 16x16 rgb led matrix demo +// Yaroslaw Turbin, 22.06.2020 +// https://vk.com/ldirko +// https://www.reddit.com/user/ldirko/ +// https://www.reddit.com/r/FastLED/comments/hgu16i/my_fire_effect_implementation_based_on_perlin/ +// Based on the code found at: https://editor.soulmatelights.com/gallery/1229- + +// HOW THE FIRE EFFECT WORKS: +// 1. We use Perlin noise with time offset for X and Z coordinates +// to create a naturally scrolling fire pattern that changes over time +// 2. We distort the fire noise to make it look more realistic +// 3. We subtract a value based on Y coordinate to shift the fire color in the palette +// (not just brightness). This creates a fade-out effect from the bottom of the matrix to the top +// 4. The palette is carefully designed to give realistic fire colors + +#if defined(__AVR__) +// Platform does not have enough memory +void setup() {} +void loop() {} +#else + +#include "FastLED.h" // Main FastLED library for controlling LEDs +#include "fl/ui.h" // UI components for the FastLED web compiler (sliders, etc.) +#include "fl/xymap.h" // Mapping between 1D LED array and 2D coordinates +#include "fx/time.h" // Time manipulation utilities + +using namespace fl; // Use the FastLED namespace for convenience + +// Matrix dimensions - this defines the size of our virtual LED grid +#define HEIGHT 100 // Number of rows in the matrix +#define WIDTH 100 // Number of columns in the matrix +#define SERPENTINE true // Whether the LED strip zigzags back and forth (common in matrix layouts) +#define BRIGHTNESS 255 // Maximum brightness level (0-255) + +// TimeWarp helps control animation speed - it tracks time and allows speed adjustments +TimeWarp timeScale(0, 1.0f); // Initialize with 0 starting time and 1.0 speed multiplier + +// UI Controls that appear in the FastLED web compiler interface: +UISlider scaleXY("Scale", 20, 1, 100, 1); // Controls the size of the fire pattern +UISlider speedY("SpeedY", 1, 1, 6, .1); // Controls how fast the fire moves upward +UISlider invSpeedZ("Inverse SpeedZ", 20, 1, 100, 1); // Controls how fast the fire pattern changes over time (higher = slower) +UISlider brightness("Brightness", 255, 0, 255, 1); // Controls overall brightness +UINumberField palette("Palette", 0, 0, 2); // Selects which color palette to use (0=fire, 1=green, 2=blue) + +// Array to hold all LED color values - one CRGB struct per LED +CRGB leds[HEIGHT * WIDTH]; + +// Color palettes define the gradient of colors used for the fire effect +// Each entry has the format: position (0-255), R, G, B + +DEFINE_GRADIENT_PALETTE(firepal){ + // Traditional fire palette - transitions from black to red to yellow to white + 0, 0, 0, 0, // black (bottom of fire) + 32, 255, 0, 0, // red (base of flames) + 190, 255, 255, 0, // yellow (middle of flames) + 255, 255, 255, 255 // white (hottest part/tips of flames) +}; + +DEFINE_GRADIENT_PALETTE(electricGreenFirePal){ + // Green fire palette - for a toxic/alien look + 0, 0, 0, 0, // black (bottom) + 32, 0, 70, 0, // dark green (base) + 190, 57, 255, 20, // electric neon green (middle) + 255, 255, 255, 255 // white (hottest part) +}; + +DEFINE_GRADIENT_PALETTE(electricBlueFirePal) { + // Blue fire palette - for a cold/ice fire look + 0, 0, 0, 0, // Black (bottom) + 32, 0, 0, 70, // Dark blue (base) + 128, 20, 57, 255, // Electric blue (middle) + 255, 255, 255, 255 // White (hottest part) +}; + +// Create a mapping between 1D array positions and 2D x,y coordinates +XYMap xyMap(WIDTH, HEIGHT, SERPENTINE); + +void setup() { + Serial.begin(115200); // Initialize serial communication for debugging + + // Initialize the LED strip: + // - NEOPIXEL is the LED type + // - 3 is the data pin number (for real hardware) + // - setScreenMap connects our 2D coordinate system to the 1D LED array + + fl::ScreenMap screen_map = xyMap.toScreenMap(); + screen_map.setDiameter(0.1f); // Set the diameter for the cylinder (0.2 cm per LED) + FastLED.addLeds(leds, HEIGHT * WIDTH).setScreenMap(screen_map); + + // Apply color correction for more accurate colors on LED strips + FastLED.setCorrection(TypicalLEDStrip); +} + +uint8_t getPaletteIndex(uint32_t millis32, int i, int j, uint32_t y_speed) { + // This function calculates which color to use from our palette for each LED + + // Get the scale factor from the UI slider (controls the "size" of the fire) + uint16_t scale = scaleXY.as(); + + // Calculate 3D coordinates for the Perlin noise function: + uint16_t x = i * scale; // X position (horizontal in matrix) + uint32_t y = j * scale + y_speed; // Y position (vertical) + movement offset + uint16_t z = millis32 / invSpeedZ.as(); // Z position (time dimension) + + // Generate 16-bit Perlin noise value using these coordinates + // The << 8 shifts values left by 8 bits (multiplies by 256) to use the full 16-bit range + uint16_t noise16 = inoise16(x << 8, y << 8, z << 8); + + // Convert 16-bit noise to 8-bit by taking the high byte (>> 8 shifts right by 8 bits) + uint8_t noise_val = noise16 >> 8; + + // Calculate how much to subtract based on vertical position (j) + // This creates the fade-out effect from bottom to top + // abs8() ensures we get a positive value + // The formula maps j from 0 to HEIGHT-1 to a value from 255 to 0 + int8_t subtraction_factor = abs8(j - (HEIGHT - 1)) * 255 / (HEIGHT - 1); + + // Subtract the factor from the noise value (with underflow protection) + // qsub8 is a "saturating subtraction" - it won't go below 0 + return qsub8(noise_val, subtraction_factor); +} + +CRGBPalette16 getPalette() { + // This function returns the appropriate color palette based on the UI selection + switch (palette) { + case 0: + return firepal; // Traditional orange/red fire + case 1: + return electricGreenFirePal; // Green "toxic" fire + case 2: + return electricBlueFirePal; // Blue "cold" fire + default: + return firepal; // Default to traditional fire if invalid value + } +} + +void loop() { + // The main program loop that runs continuously + + // Set the overall brightness from the UI slider + FastLED.setBrightness(brightness); + + // Get the selected color palette + CRGBPalette16 myPal = getPalette(); + + // Get the current time in milliseconds + uint32_t now = millis(); + + // Update the animation speed from the UI slider + timeScale.setSpeed(speedY); + + // Calculate the current y-offset for animation (makes the fire move) + uint32_t y_speed = timeScale.update(now); + + // Loop through every LED in our matrix + for (int i = 0; i < WIDTH; i++) { + for (int j = 0; j < HEIGHT; j++) { + // Calculate which color to use from our palette for this LED + uint8_t palette_index = getPaletteIndex(now, i, j, y_speed); + + // Get the actual RGB color from the palette + // BRIGHTNESS ensures we use the full brightness range + CRGB c = ColorFromPalette(myPal, palette_index, BRIGHTNESS); + + // Convert our 2D coordinates (i,j) to the 1D array index + // We use (WIDTH-1)-i and (HEIGHT-1)-j to flip the coordinates + // This makes the fire appear to rise from the bottom + int index = xyMap((WIDTH - 1) - i, (HEIGHT - 1) - j); + + // Set the LED color in our array + leds[index] = c; + } + } + + // Send the color data to the actual LEDs + FastLED.show(); +} + +#endif \ No newline at end of file diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/FireMatrix/FireMatrix.ino b/.pio/libdeps/esp01_1m/FastLED/examples/FireMatrix/FireMatrix.ino new file mode 100644 index 0000000..2a4a6eb --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/FireMatrix/FireMatrix.ino @@ -0,0 +1,9 @@ +#include "FastLED.h" // Main FastLED library for controlling LEDs + +#if !SKETCH_HAS_LOTS_OF_MEMORY +// Platform does not have enough memory +void setup() {} +void loop() {} +#else +#include "FireMatrix.h" +#endif diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/FirstLight/FirstLight.ino b/.pio/libdeps/esp01_1m/FastLED/examples/FirstLight/FirstLight.ino new file mode 100644 index 0000000..5711809 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/FirstLight/FirstLight.ino @@ -0,0 +1,96 @@ +/// @file FirstLight.ino +/// @brief Animate a white dot moving along a strip of LEDs +/// @example FirstLight.ino + +// Use if you want to force the software SPI subsystem to be used for some reason (generally, you don't) +// #define FASTLED_FORCE_SOFTWARE_SPI +// Use if you want to force non-accelerated pin access (hint: you really don't, it breaks lots of things) +// #define FASTLED_FORCE_SOFTWARE_SPI +// #define FASTLED_FORCE_SOFTWARE_PINS +#include + +/////////////////////////////////////////////////////////////////////////////////////////// +// +// Move a white dot along the strip of leds. This program simply shows how to configure the leds, +// and then how to turn a single pixel white and then off, moving down the line of pixels. +// + +// How many leds are in the strip? +#define NUM_LEDS 60 + +// For led chips like WS2812, which have a data line, ground, and power, you just +// need to define DATA_PIN. For led chipsets that are SPI based (four wires - data, clock, +// ground, and power), like the LPD8806 define both DATA_PIN and CLOCK_PIN +// Clock pin only needed for SPI based chipsets when not using hardware SPI +#define DATA_PIN 3 +#define CLOCK_PIN 13 + +// This is an array of leds. One item for each led in your strip. +CRGB leds[NUM_LEDS]; + +// This function sets up the ledsand tells the controller about them +void setup() { + // sanity check delay - allows reprogramming if accidently blowing power w/leds + delay(2000); + + // Uncomment/edit one of the following lines for your leds arrangement. + // ## Clockless types ## + // FastLED.addLeds(leds, NUM_LEDS); // GRB ordering is assumed + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); // GRB ordering is typical + // FastLED.addLeds(leds, NUM_LEDS); // GRB ordering is typical + // FastLED.addLeds(leds, NUM_LEDS); // GRB ordering is typical + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); // GRB ordering is typical + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // ## Clocked (SPI) types ## + // FastLED.addLeds(leds, NUM_LEDS); // GRB ordering is typical + // FastLED.addLeds(leds, NUM_LEDS); // GRB ordering is typical + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); + // FastLED.addLeds(leds, NUM_LEDS); // BGR ordering is typical + // FastLED.addLeds(leds, NUM_LEDS); // BGR ordering is typical + // FastLED.addLeds(leds, NUM_LEDS); // BGR ordering is typical + // FastLED.addLeds(leds, NUM_LEDS); // BGR ordering is typical +} + +// This function runs over and over, and is where you do the magic to light +// your leds. +void loop() { + // Move a single white led + for(int whiteLed = 0; whiteLed < NUM_LEDS; whiteLed = whiteLed + 1) { + // Turn our current led on to white, then show the leds + leds[whiteLed] = CRGB::White; + + // Show the leds (only one of which is set to white, from above) + FastLED.show(); + + // Wait a little bit + delay(100); + + // Turn our current led back to black for the next loop around + leds[whiteLed] = CRGB::Black; + } +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/FxCylon/FxCylon.ino b/.pio/libdeps/esp01_1m/FastLED/examples/FxCylon/FxCylon.ino new file mode 100644 index 0000000..aa3b335 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/FxCylon/FxCylon.ino @@ -0,0 +1,41 @@ +/// @file FxCylon.ino +/// @brief Cylon eye effect with ScreenMap +/// @example FxCylon.ino +/// +/// This sketch is fully compatible with the FastLED web compiler. To use it do the following: +/// 1. Install Fastled: `pip install fastled` +/// 2. cd into this examples page. +/// 3. Run the FastLED web compiler at root: `fastled` +/// 4. When the compiler is done a web page will open. + +#include +#include "fx/1d/cylon.h" +#include "fl/screenmap.h" + +using namespace fl; + +// How many leds in your strip? +#define NUM_LEDS 64 + +// For led chips like Neopixels, which have a data line, ground, and power, you just +// need to define DATA_PIN. For led chipsets that are SPI based (four wires - data, clock, +// ground, and power). +#define DATA_PIN 2 + +// Define the array of leds +CRGB leds[NUM_LEDS]; + +// Create a Cylon instance +Cylon cylon(NUM_LEDS); + +void setup() { + ScreenMap screenMap = ScreenMap::DefaultStrip(NUM_LEDS, 1.5f, 0.5f); + FastLED.addLeds(leds,NUM_LEDS).setRgbw().setScreenMap(screenMap); + FastLED.setBrightness(84); +} + +void loop() { + cylon.draw(Fx::DrawContext(millis(), leds)); + FastLED.show(); + delay(cylon.delay_ms); +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/FxDemoReel100/FxDemoReel100.ino b/.pio/libdeps/esp01_1m/FastLED/examples/FxDemoReel100/FxDemoReel100.ino new file mode 100644 index 0000000..c6b91a2 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/FxDemoReel100/FxDemoReel100.ino @@ -0,0 +1,70 @@ +/// @file FxDemoReel100.ino +/// @brief DemoReel100 effects collection with ScreenMap +/// @example FxDemoReel100.ino +/// +/// This sketch is fully compatible with the FastLED web compiler. To use it do the following: +/// 1. Install Fastled: `pip install fastled` +/// 2. cd into this examples page. +/// 3. Run the FastLED web compiler at root: `fastled` +/// 4. When the compiler is done a web page will open. + +#include +#include "fx/1d/demoreel100.h" +#include "fl/screenmap.h" +#include "defs.h" // for NUM_LEDS + + +#if !HAS_ENOUGH_MEMORY +void setup() {} +void loop() {} +#else + + +using namespace fl; + +#define DATA_PIN 3 +//#define CLK_PIN 4 +#define LED_TYPE WS2811 +#define COLOR_ORDER GRB +#define NUM_LEDS 64 + +CRGB leds[NUM_LEDS]; + +#define BRIGHTNESS 96 +#define FRAMES_PER_SECOND 120 +#define USES_RGBW 0 + +#if USES_RGBW +Rgbw rgbwMode = RgbwDefault(); +#else +Rgbw rgbwMode = RgbwInvalid(); // No RGBW mode, just use RGB. +#endif + +DemoReel100Ptr demoReel = fl::make_shared(NUM_LEDS); + +void setup() { + ScreenMap screenMap = ScreenMap::DefaultStrip(NUM_LEDS); + + // tell FastLED about the LED strip configuration + FastLED.addLeds(leds, NUM_LEDS, 2.0f) + .setCorrection(TypicalLEDStrip) + .setScreenMap(screenMap) + .setRgbw(rgbwMode); + + // set master brightness control + FastLED.setBrightness(BRIGHTNESS); +} + +void loop() +{ + // Run the DemoReel100 draw function + demoReel->draw(Fx::DrawContext(millis(), leds)); + + // send the 'leds' array out to the actual LED strip + FastLED.show(); + // insert a delay to keep the framerate modest + FastLED.delay(1000/FRAMES_PER_SECOND); +} + + +#endif // HAS_ENOUGH_MEMORY diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/FxDemoReel100/defs.h b/.pio/libdeps/esp01_1m/FastLED/examples/FxDemoReel100/defs.h new file mode 100644 index 0000000..73a6e65 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/FxDemoReel100/defs.h @@ -0,0 +1,8 @@ +#pragma once + +// if attiny85 or attiny88, use less leds so this example can compile. +#if defined(__AVR_ATtiny85__) || defined(__AVR_ATtiny88__) +#define HAS_ENOUGH_MEMORY 0 +#else +#define HAS_ENOUGH_MEMORY 1 +#endif diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/FxEngine/FxEngine.ino b/.pio/libdeps/esp01_1m/FastLED/examples/FxEngine/FxEngine.ino new file mode 100644 index 0000000..ca60691 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/FxEngine/FxEngine.ino @@ -0,0 +1,79 @@ +/// @file FxEngine.ino +/// @brief Demonstrates FxEngine for switching between effects +/// @example FxEngine.ino +/// +/// This sketch is fully compatible with the FastLED web compiler. To use it do the following: +/// 1. Install Fastled: `pip install fastled` +/// 2. cd into this examples page. +/// 3. Run the FastLED web compiler at root: `fastled` +/// 4. When the compiler is done a web page will open. + +#include +using namespace fl; + +#if defined(__AVR__) +// __AVR__: Not enough memory enough for the FxEngine, so skipping this example +void setup() {} +void loop() {} + +#else + +#include "fx/2d/noisepalette.h" +#include "fx/2d/animartrix.hpp" +#include "fx/fx_engine.h" +#include "fl/ui.h" + +#define LED_PIN 2 +#define BRIGHTNESS 96 +#define LED_TYPE WS2811 +#define COLOR_ORDER GRB + +#define MATRIX_WIDTH 22 +#define MATRIX_HEIGHT 22 + +#define NUM_LEDS (MATRIX_WIDTH * MATRIX_HEIGHT) + +#ifdef __EMSCRIPTEN__ +#define IS_SERPINTINE false +#else +#define IS_SERPINTINE true +#endif + + +UISlider SCALE("SCALE", 20, 20, 100); +UISlider SPEED("SPEED", 30, 20, 100); + +CRGB leds[NUM_LEDS]; +XYMap xyMap(MATRIX_WIDTH, MATRIX_HEIGHT, IS_SERPINTINE); // No serpentine +NoisePalette noisePalette1(xyMap); +NoisePalette noisePalette2(xyMap); +FxEngine fxEngine(NUM_LEDS); +UICheckbox switchFx("Switch Fx", true); + +void setup() { + delay(1000); // sanity delay + FastLED.addLeds(leds, NUM_LEDS) + .setCorrection(TypicalLEDStrip) + .setScreenMap(MATRIX_WIDTH, MATRIX_HEIGHT); + FastLED.setBrightness(96); + noisePalette1.setPalettePreset(2); + noisePalette2.setPalettePreset(4); + fxEngine.addFx(noisePalette1); + fxEngine.addFx(noisePalette2); +} + +void loop() { + noisePalette1.setSpeed(SPEED); + noisePalette1.setScale(SCALE); + noisePalette2.setSpeed(SPEED); + noisePalette2.setScale(int(SCALE) * 3 / 2); // Make the different. + EVERY_N_SECONDS(1) { + if (switchFx) { + fxEngine.nextFx(500); + } + } + fxEngine.draw(millis(), leds); + FastLED.show(); +} + +#endif // __AVR__ diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/FxFire2012/FxFire2012.ino b/.pio/libdeps/esp01_1m/FastLED/examples/FxFire2012/FxFire2012.ino new file mode 100644 index 0000000..51e0ce3 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/FxFire2012/FxFire2012.ino @@ -0,0 +1,83 @@ +/// @file FxFire2012.ino +/// @brief Fire2012 effect with ScreenMap +/// @example FxFire2012.ino +/// +/// This sketch is fully compatible with the FastLED web compiler. To use it do the following: +/// 1. Install Fastled: `pip install fastled` +/// 2. cd into this examples page. +/// 3. Run the FastLED web compiler at root: `fastled` +/// 4. When the compiler is done a web page will open. + +/// @brief Simple one-dimensional fire animation function +// Fire2012 by Mark Kriegsman, July 2012 +// as part of "Five Elements" shown here: http://youtu.be/knWiGsmgycY +//// +// This basic one-dimensional 'fire' simulation works roughly as follows: +// There's a underlying array of 'heat' cells, that model the temperature +// at each point along the line. Every cycle through the simulation, +// four steps are performed: +// 1) All cells cool down a little bit, losing heat to the air +// 2) The heat from each cell drifts 'up' and diffuses a little +// 3) Sometimes randomly new 'sparks' of heat are added at the bottom +// 4) The heat from each cell is rendered as a color into the leds array +// The heat-to-color mapping uses a black-body radiation approximation. +// +// Temperature is in arbitrary units from 0 (cold black) to 255 (white hot). +// +// This simulation scales it self a bit depending on NUM_LEDS; it should look +// "OK" on anywhere from 20 to 100 LEDs without too much tweaking. +// +// I recommend running this simulation at anywhere from 30-100 frames per second, +// meaning an interframe delay of about 10-35 milliseconds. +// +// Looks best on a high-density LED setup (60+ pixels/meter). +// +// +// There are two main parameters you can play with to control the look and +// feel of your fire: COOLING (used in step 1 above), and SPARKING (used +// in step 3 above). +// +// COOLING: How much does the air cool as it rises? +// Less cooling = taller flames. More cooling = shorter flames. +// Default 50, suggested range 20-100 + +// SPARKING: What chance (out of 255) is there that a new spark will be lit? +// Higher chance = more roaring fire. Lower chance = more flickery fire. +// Default 120, suggested range 50-200. + +#include +#include "fx/1d/fire2012.h" +#include "fl/screenmap.h" + +using namespace fl; + +#define LED_PIN 5 +#define COLOR_ORDER GRB +#define CHIPSET WS2811 +#define NUM_LEDS 92 + +#define BRIGHTNESS 128 +#define FRAMES_PER_SECOND 30 +#define COOLING 55 +#define SPARKING 120 +#define REVERSE_DIRECTION false + +CRGB leds[NUM_LEDS]; +Fire2012Ptr fire = fl::make_shared(NUM_LEDS, COOLING, SPARKING, REVERSE_DIRECTION); + +void setup() { + ScreenMap screenMap = ScreenMap::DefaultStrip(NUM_LEDS, 1.5, .4); + FastLED.addLeds(leds, NUM_LEDS) + .setCorrection(TypicalLEDStrip) + .setScreenMap(screenMap) + .setRgbw(); + FastLED.setBrightness(BRIGHTNESS); +} + +void loop() +{ + fire->draw(Fx::DrawContext(millis(), leds)); // run simulation frame + + FastLED.show(millis()); // display this frame + FastLED.delay(1000 / FRAMES_PER_SECOND); +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/FxGfx2Video/FxGfx2Video.ino b/.pio/libdeps/esp01_1m/FastLED/examples/FxGfx2Video/FxGfx2Video.ino new file mode 100644 index 0000000..47ba147 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/FxGfx2Video/FxGfx2Video.ino @@ -0,0 +1,107 @@ +/// @file FxGfx2Video.ino +/// @brief Demonstrates graphics to video conversion +/// @example FxGfx2Video.ino +/// +/// This sketch is fully compatible with the FastLED web compiler. To use it do the following: +/// 1. Install Fastled: `pip install fastled` +/// 2. cd into this examples page. +/// 3. Run the FastLED web compiler at root: `fastled` +/// 4. When the compiler is done a web page will open. + +/// @file Gfx2Video.ino +/// @brief Demonstrates drawing to a frame buffer, which is used as source video for the memory player. +/// The render pattern is alternating black/red pixels as a checkerboard. +/// @example VideoTest.ino + + +#ifndef COMPILE_VIDEO_STREAM +#if defined(__AVR__) +// This has grown too large for the AVR to handle. +#define COMPILE_VIDEO_STREAM 0 +#else +#define COMPILE_VIDEO_STREAM 1 +#endif +#endif // COMPILE_VIDEO_STREAM + +#if COMPILE_VIDEO_STREAM + + +#include +#include "fl/bytestreammemory.h" +#include "fx/fx_engine.h" +#include "fl/memory.h" +#include "fx/video.h" +#include "fl/dbg.h" + +using namespace fl; + +#define LED_PIN 2 +#define BRIGHTNESS 96 +#define LED_TYPE WS2811 +#define COLOR_ORDER GRB + +#define MATRIX_WIDTH 22 +#define MATRIX_HEIGHT 22 +#define NUM_LEDS (MATRIX_WIDTH * MATRIX_HEIGHT) + +CRGB leds[NUM_LEDS]; + +const int BYTES_PER_FRAME = 3 * NUM_LEDS; +const int NUM_FRAMES = 2; +const uint32_t BUFFER_SIZE = BYTES_PER_FRAME * NUM_FRAMES; + +ByteStreamMemoryPtr memoryStream; +FxEngine fxEngine(NUM_LEDS); +// Create and initialize Video object +XYMap xymap(MATRIX_WIDTH, MATRIX_HEIGHT); +Video video(NUM_LEDS, 2.0f); + +void write_one_frame(ByteStreamMemoryPtr memoryStream) { + //memoryStream->seek(0); // Reset to the beginning of the stream + uint32_t total_bytes_written = 0; + bool toggle = (millis() / 500) % 2 == 0; + FASTLED_DBG("Writing frame data, toggle = " << toggle); + for (uint32_t i = 0; i < NUM_LEDS; ++i) { + CRGB color = (toggle ^ i%2) ? CRGB::Black : CRGB::Red; + size_t bytes_written = memoryStream->writeCRGB(&color, 1); + if (bytes_written != 1) { + FASTLED_DBG("Failed to write frame data, wrote " << bytes_written << " bytes"); + break; + } + total_bytes_written += bytes_written; + } + if (total_bytes_written) { + FASTLED_DBG("Frame written, total bytes: " << total_bytes_written); + } +} + +void setup() { + delay(1000); // sanity delay + FastLED.addLeds(leds, NUM_LEDS) + .setCorrection(TypicalLEDStrip) + .setScreenMap(xymap); + FastLED.setBrightness(BRIGHTNESS); + + // Create and fill the ByteStreamMemory with test data + memoryStream = fl::make_shared(BUFFER_SIZE*sizeof(CRGB)); + + video.beginStream(memoryStream); + // Add the video effect to the FxEngine + fxEngine.addFx(video); +} + +void loop() { + EVERY_N_MILLISECONDS(500) { + write_one_frame(memoryStream); // Write next frame data + } + // write_one_frame(memoryStream); // Write next frame data + // Draw the frame + fxEngine.draw(millis(), leds); + // Show the LEDs + FastLED.show(); + delay(20); // Adjust this delay to control frame rate +} +#else +void setup() {} +void loop() {} +#endif // COMPILE_VIDEO_STREAM diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/FxNoisePlusPalette/FxNoisePlusPalette.ino b/.pio/libdeps/esp01_1m/FastLED/examples/FxNoisePlusPalette/FxNoisePlusPalette.ino new file mode 100644 index 0000000..5fe4011 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/FxNoisePlusPalette/FxNoisePlusPalette.ino @@ -0,0 +1,101 @@ +/// @file FxNoisePlusPalette.ino +/// @brief Noise plus palette effect with XYMap +/// @example FxNoisePlusPalette.ino +/// +/// This sketch is fully compatible with the FastLED web compiler. To use it do the following: +/// 1. Install Fastled: `pip install fastled` +/// 2. cd into this examples page. +/// 3. Run the FastLED web compiler at root: `fastled` +/// 4. When the compiler is done a web page will open. + +#include + +#if !SKETCH_HAS_LOTS_OF_MEMORY +// Don't compile this for AVR microcontrollers (like Arduino Uno) because they typically +// don't have enough memory to handle this complex animation. +// Instead, we provide empty setup/loop functions so the sketch will compile but do nothing. +void setup() {} +void loop() {} +#else // For all other platforms with more memory (ESP32, Teensy, etc.) +#include "fx/2d/noisepalette.h" +#include "fl/ui.h" + +using namespace fl; + +#define LED_PIN 3 +#define BRIGHTNESS 96 +#define LED_TYPE WS2811 +#define COLOR_ORDER GRB + +#define MATRIX_WIDTH 16 +#define MATRIX_HEIGHT 16 + +#if __EMSCRIPTEN__ +#define GRID_SERPENTINE 0 +#else +#define GRID_SERPENTINE 1 +#endif + +#define NUM_LEDS (MATRIX_WIDTH * MATRIX_HEIGHT) + +// This example combines two features of FastLED to produce a remarkable range +// of effects from a relatively small amount of code. This example combines +// FastLED's color palette lookup functions with FastLED's Perlin noise +// generator, and the combination is extremely powerful. +// +// You might want to look at the "ColorPalette" and "Noise" examples separately +// if this example code seems daunting. +// +// +// The basic setup here is that for each frame, we generate a new array of +// 'noise' data, and then map it onto the LED matrix through a color palette. +// +// Periodically, the color palette is changed, and new noise-generation +// parameters are chosen at the same time. In this example, specific +// noise-generation values have been selected to match the given color palettes; +// some are faster, or slower, or larger, or smaller than others, but there's no +// reason these parameters can't be freely mixed-and-matched. +// +// In addition, this example includes some fast automatic 'data smoothing' at +// lower noise speeds to help produce smoother animations in those cases. +// +// The FastLED built-in color palettes (Forest, Clouds, Lava, Ocean, Party) are +// used, as well as some 'hand-defined' ones, and some proceedurally generated +// palettes. + +// Scale determines how far apart the pixels in our noise matrix are. Try +// changing these values around to see how it affects the motion of the display. +// The higher the value of scale, the more "zoomed out" the noise iwll be. A +// value of 1 will be so zoomed in, you'll mostly see solid colors. + +UISlider SCALE("SCALE", 20, 1, 100, 1); + +// We're using the x/y dimensions to map to the x/y pixels on the matrix. We'll +// use the z-axis for "time". speed determines how fast time moves forward. Try +// 1 for a very slow moving effect, or 60 for something that ends up looking +// like water. +UISlider SPEED("SPEED", 30, 1, 60, 1); + +CRGB leds[NUM_LEDS]; +XYMap xyMap(MATRIX_WIDTH, MATRIX_HEIGHT, GRID_SERPENTINE); +NoisePalette noisePalette(xyMap); + +void setup() { + delay(1000); // sanity delay + FastLED.addLeds(leds, NUM_LEDS) + .setCorrection(TypicalLEDStrip); + FastLED.setBrightness(96); + noisePalette.setSpeed(SPEED); + noisePalette.setScale(SCALE); +} + +void loop() { + noisePalette.setSpeed(SPEED); + noisePalette.setScale(SCALE); + EVERY_N_MILLISECONDS(5000) { noisePalette.changeToRandomPalette(); } + + noisePalette.draw(Fx::DrawContext(millis(), leds)); + FastLED.show(); +} + +#endif // End of the non-AVR code section diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/FxNoiseRing/FxNoiseRing.h b/.pio/libdeps/esp01_1m/FastLED/examples/FxNoiseRing/FxNoiseRing.h new file mode 100644 index 0000000..c6758a3 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/FxNoiseRing/FxNoiseRing.h @@ -0,0 +1,682 @@ +/// @file FxNoiseRing.ino +/// @brief Noise effect on circular ring with ScreenMap +/// @example FxNoiseRing.ino +/// +/// This sketch is fully compatible with the FastLED web compiler. To use it do the following: +/// 1. Install Fastled: `pip install fastled` +/// 2. cd into this examples page. +/// 3. Run the FastLED web compiler at root: `fastled` +/// 4. When the compiler is done a web page will open. + +#include +#include + + +#include "fl/json.h" +#include "fl/math_macros.h" +#include "fl/warn.h" +#include "noisegen.h" +#include "fl/screenmap.h" +#include "fl/slice.h" +#include "fl/ui.h" + +#include "sensors/pir.h" +#include "./simple_timer.h" +#include "fl/sstream.h" +#include "fl/assert.h" + + + + + +#define LED_PIN 2 +#define COLOR_ORDER GRB // Color order matters for a real device, web-compiler will ignore this. +#define NUM_LEDS 250 +#define PIN_PIR 0 + +#define PIR_LATCH_MS 60000 // how long to keep the PIR sensor active after a trigger +#define PIR_RISING_TIME 1000 // how long to fade in the PIR sensor +#define PIR_FALLING_TIME 1000 // how long to fade out the PIR sensor + +using namespace fl; + +CRGB leds[NUM_LEDS]; + +// Enhanced coordinate system for ring-based effects +struct RingCoord { + float angle; // Position on ring (0 to 2π) + float radius; // Distance from center (normalized 0-1) + float x, y; // Cartesian coordinates + int led_index; // LED position on strip +}; + +// Convert LED index to ring coordinates +RingCoord calculateRingCoord(int led_index, int num_leds, float time_offset = 0.0f) { + RingCoord coord; + coord.led_index = led_index; + coord.angle = (led_index * 2.0f * M_PI / num_leds) + time_offset; + coord.radius = 1.0f; // Fixed radius for ring + coord.x = cos(coord.angle); + coord.y = sin(coord.angle); + return coord; +} + +// Performance optimization with lookup tables +class RingLUT { +private: + float cos_table[NUM_LEDS]; + float sin_table[NUM_LEDS]; + +public: + void initialize() { + for(int i = 0; i < NUM_LEDS; i++) { + float angle = i * 2.0f * M_PI / NUM_LEDS; + cos_table[i] = cos(angle); + sin_table[i] = sin(angle); + } + } + + RingCoord fastRingCoord(int led_index, float time_offset = 0.0f) { + RingCoord coord; + coord.led_index = led_index; + coord.angle = (led_index * 2.0f * M_PI / NUM_LEDS) + time_offset; + coord.x = cos_table[led_index]; + coord.y = sin_table[led_index]; + coord.radius = 1.0f; + return coord; + } +}; + +// Plasma wave parameters +struct PlasmaParams { + float time_scale = 1.0f; + float noise_intensity = 0.5f; + float noise_amplitude = 0.8f; + uint8_t time_bitshift = 5; + uint8_t hue_offset = 0; + float brightness = 1.0f; +}; + +// Plasma wave generator - Featured Implementation +class PlasmaWaveGenerator { +private: + struct WaveSource { + float x, y; // Source position + float frequency; // Wave frequency + float amplitude; // Wave strength + float phase_speed; // Phase evolution rate + }; + + WaveSource sources[4] = { + {0.5f, 0.5f, 1.0f, 1.0f, 0.8f}, // Center source + {0.0f, 0.0f, 1.5f, 0.8f, 1.2f}, // Corner source + {1.0f, 1.0f, 0.8f, 1.2f, 0.6f}, // Opposite corner + {0.5f, 0.0f, 1.2f, 0.9f, 1.0f} // Edge source + }; + +public: + CRGB calculatePlasmaPixel(const RingCoord& coord, uint32_t time_ms, const PlasmaParams& params) { + float time_scaled = time_ms * params.time_scale * 0.001f; + + // Calculate wave interference + float wave_sum = 0.0f; + for (int i = 0; i < 4; i++) { + float dx = coord.x - sources[i].x; + float dy = coord.y - sources[i].y; + float distance = sqrt(dx*dx + dy*dy); + + float wave_phase = distance * sources[i].frequency + time_scaled * sources[i].phase_speed; + wave_sum += sin(wave_phase) * sources[i].amplitude; + } + + // Add noise modulation for organic feel + float noise_scale = params.noise_intensity; + float noise_x = coord.x * 0xffff * noise_scale; + float noise_y = coord.y * 0xffff * noise_scale; + uint32_t noise_time = time_ms << params.time_bitshift; + + float noise_mod = (inoise16(noise_x, noise_y, noise_time) - 32768) / 65536.0f; + wave_sum += noise_mod * params.noise_amplitude; + + // Map to color space + return mapWaveToColor(wave_sum, params); + } + +private: + CRGB mapWaveToColor(float wave_value, const PlasmaParams& params) { + // Normalize wave to 0-1 range + float normalized = (wave_value + 4.0f) / 8.0f; // Assuming max amplitude ~4 + normalized = constrain(normalized, 0.0f, 1.0f); + + // Create flowing hue based on wave phase + uint8_t hue = (uint8_t)(normalized * 255.0f + params.hue_offset) % 256; + + // Dynamic saturation based on wave intensity + float intensity = abs(wave_value); + uint8_t sat = (uint8_t)(192 + intensity * 63); // High saturation with variation + + // Brightness modulation + uint8_t val = (uint8_t)(normalized * 255.0f * params.brightness); + + return CHSV(hue, sat, val); + } +}; + +// Advanced Color Palette System +class ColorPaletteManager { +private: + uint8_t current_palette = 0; + uint32_t last_palette_change = 0; + static const uint32_t PALETTE_CHANGE_INTERVAL = 5000; // 5 seconds + +public: + void update(uint32_t now, bool auto_cycle_enabled, uint8_t manual_palette) { + if (auto_cycle_enabled) { + if (now - last_palette_change > PALETTE_CHANGE_INTERVAL) { + current_palette = (current_palette + 1) % 5; + last_palette_change = now; + } + } else { + current_palette = manual_palette; + } + } + + CRGB mapColor(float hue_norm, float intensity, float special_param = 0.0f) { + switch(current_palette) { + case 0: return mapSunsetBoulevard(hue_norm, intensity, special_param); + case 1: return mapOceanBreeze(hue_norm, intensity, special_param); + case 2: return mapNeonNights(hue_norm, intensity, special_param); + case 3: return mapForestWhisper(hue_norm, intensity, special_param); + case 4: return mapGalaxyExpress(hue_norm, intensity, special_param); + default: return mapSunsetBoulevard(hue_norm, intensity, special_param); + } + } + +private: + CRGB mapSunsetBoulevard(float hue_norm, float intensity, float special_param) { + // Warm oranges, deep reds, golden yellows (Hue 0-45) + uint8_t hue = (uint8_t)(hue_norm * 45); + uint8_t sat = 200 + (uint8_t)(intensity * 55); + uint8_t val = 150 + (uint8_t)(intensity * 105); + return CHSV(hue, sat, val); + } + + CRGB mapOceanBreeze(float hue_norm, float intensity, float special_param) { + // Deep blues, aqua, seafoam green (Hue 120-210) + uint8_t hue = 120 + (uint8_t)(hue_norm * 90); + uint8_t sat = 180 + (uint8_t)(intensity * 75); + uint8_t val = 120 + (uint8_t)(intensity * 135); + return CHSV(hue, sat, val); + } + + CRGB mapNeonNights(float hue_norm, float intensity, float special_param) { + // Electric pink, cyan, purple, lime green - high contrast + uint8_t base_hues[] = {0, 85, 128, 192}; // Red, Cyan, Pink, Purple + uint8_t selected_hue = base_hues[(int)(hue_norm * 4) % 4]; + uint8_t sat = 255; // Maximum saturation for neon effect + uint8_t val = 100 + (uint8_t)(intensity * 155); + return CHSV(selected_hue, sat, val); + } + + CRGB mapForestWhisper(float hue_norm, float intensity, float special_param) { + // Deep greens, earth browns, golden highlights (Hue 60-150) + uint8_t hue = 60 + (uint8_t)(hue_norm * 90); + uint8_t sat = 150 + (uint8_t)(intensity * 105); + uint8_t val = 100 + (uint8_t)(intensity * 155); + return CHSV(hue, sat, val); + } + + CRGB mapGalaxyExpress(float hue_norm, float intensity, float special_param) { + // Deep purples, cosmic blues, silver stars (Hue 200-300) + if (special_param > 0.8f) { + // Silver/white stars + uint8_t brightness = 200 + (uint8_t)(intensity * 55); + return CRGB(brightness, brightness, brightness); + } else { + uint8_t hue = 200 + (uint8_t)(hue_norm * 100); + uint8_t sat = 180 + (uint8_t)(intensity * 75); + uint8_t val = 80 + (uint8_t)(intensity * 175); + return CHSV(hue, sat, val); + } + } +}; + +// ALL 10 ALGORITHM IMPLEMENTATIONS +CRGB drawCosmicSwirl(const RingCoord& coord, uint32_t time_ms, ColorPaletteManager& palette) { + float time_factor = time_ms * 0.0008f; + + // Multi-octave noise for organic complexity + float noise1 = inoise16(coord.x * 2000, coord.y * 2000, time_factor * 1000) / 65536.0f; + float noise2 = inoise16(coord.x * 1000, coord.y * 1000, time_factor * 2000) / 65536.0f * 0.5f; + float noise3 = inoise16(coord.x * 4000, coord.y * 4000, time_factor * 500) / 65536.0f * 0.25f; + + float combined_noise = noise1 + noise2 + noise3; + float hue_norm = (combined_noise + coord.angle / (2*M_PI) + 1.0f) * 0.5f; + float intensity = (combined_noise + 1.0f) * 0.5f; + + return palette.mapColor(hue_norm, intensity); +} + +CRGB drawElectricStorm(const RingCoord& coord, uint32_t time_ms, ColorPaletteManager& palette) { + uint32_t fast_time = time_ms << 3; // 8x time acceleration + + float x_noise = coord.x * 8000; + float y_noise = coord.y * 8000; + + uint16_t noise1 = inoise16(x_noise, y_noise, fast_time); + uint16_t noise2 = inoise16(x_noise + 10000, y_noise + 10000, fast_time + 5000); + + uint8_t threshold = 200; + bool lightning = (noise1 >> 8) > threshold || (noise2 >> 8) > threshold; + + if (lightning) { + float lightning_intensity = max((noise1 >> 8) - threshold, (noise2 >> 8) - threshold) / 55.0f; + return palette.mapColor(0.7f, lightning_intensity, 1.0f); // Special lightning effect + } else { + float storm_intensity = (noise1 >> 8) / 1020.0f; // Very low intensity for background + return palette.mapColor(0.6f, storm_intensity); + } +} + +CRGB drawLavaLamp(const RingCoord& coord, uint32_t time_ms, ColorPaletteManager& palette) { + float slow_time = time_ms * 0.0002f; + + float blob_scale = 800; + uint16_t primary_noise = inoise16(coord.x * blob_scale, coord.y * blob_scale, slow_time * 1000); + uint16_t secondary_noise = inoise16(coord.x * blob_scale * 0.5f, coord.y * blob_scale * 0.5f, slow_time * 1500); + + float blob_value = (primary_noise + secondary_noise * 0.3f) / 65536.0f; + + if (blob_value > 0.6f) { + // Hot blob center + float intensity = (blob_value - 0.6f) / 0.4f; + return palette.mapColor(0.1f, intensity); // Warm colors + } else if (blob_value > 0.3f) { + // Blob edge gradient + float edge_factor = (blob_value - 0.3f) / 0.3f; + return palette.mapColor(0.2f, edge_factor); + } else { + // Background + return palette.mapColor(0.8f, 0.2f); // Cool background + } +} + +CRGB drawDigitalRain(const RingCoord& coord, uint32_t time_ms, ColorPaletteManager& palette) { + float vertical_pos = sin(coord.angle) * 0.5f + 0.5f; + float cascade_speed = 0.002f; + float time_offset = time_ms * cascade_speed; + + int stream_id = (int)(coord.angle * 10) % 8; + float stream_phase = fmod(vertical_pos + time_offset + stream_id * 0.125f, 1.0f); + + uint16_t noise = inoise16(stream_id * 1000, stream_phase * 10000, time_ms / 4); + uint8_t digital_value = (noise >> 8) > 128 ? 255 : 0; + + if (digital_value > 0) { + float intensity = 1.0f - stream_phase * 0.8f; // Fade trailing + return palette.mapColor(0.4f, intensity); // Matrix green area + } else { + return CRGB::Black; + } +} + +CRGB drawGlitchCity(const RingCoord& coord, uint32_t time_ms, ColorPaletteManager& palette) { + uint32_t glitch_time = (time_ms / 100) * 100; // Quantize time + + uint16_t noise1 = inoise16(coord.x * 3000, coord.y * 3000, glitch_time); + uint16_t noise2 = inoise16(coord.x * 5000, coord.y * 5000, glitch_time + 1000); + + uint16_t glitch_value = noise1 ^ noise2; // XOR for harsh digital effects + + if ((glitch_value & 0xF000) == 0xF000) { + return CRGB(255, 255, 255); // Full-bright glitch flash + } + + float intensity = (glitch_value & 0xFF) / 255.0f; + float hue_chaos = ((glitch_value >> 8) & 0xFF) / 255.0f; + + return palette.mapColor(hue_chaos, intensity, 0.5f); +} + +CRGB drawOceanDepths(const RingCoord& coord, uint32_t time_ms, ColorPaletteManager& palette) { + float ocean_time = time_ms * 0.0005f; + + float current1 = inoise16(coord.x * 1200, coord.y * 1200, ocean_time * 800) / 65536.0f; + float current2 = inoise16(coord.x * 2400, coord.y * 2400, ocean_time * 600) / 65536.0f * 0.5f; + float current3 = inoise16(coord.x * 600, coord.y * 600, ocean_time * 1000) / 65536.0f * 0.3f; + + float depth_factor = (current1 + current2 + current3 + 1.5f) / 3.0f; + float hue_variation = (current2 + 0.5f); + + return palette.mapColor(hue_variation, depth_factor); +} + +CRGB drawFireDance(const RingCoord& coord, uint32_t time_ms, ColorPaletteManager& palette) { + float vertical_component = sin(coord.angle) * 0.5f + 0.5f; + + float flame_x = coord.x * 1500; + float flame_y = coord.y * 1500 + time_ms * 0.003f; + + uint16_t turbulence = inoise16(flame_x, flame_y, time_ms); + float flame_intensity = (turbulence / 65536.0f) * (1.0f - vertical_component * 0.3f); + + float fire_hue = flame_intensity * 0.15f; // Red to orange range + return palette.mapColor(fire_hue, flame_intensity); +} + +CRGB drawNebulaDrift(const RingCoord& coord, uint32_t time_ms, ColorPaletteManager& palette) { + float nebula_time = time_ms * 0.0003f; + + float cloud1 = inoise16(coord.x * 800, coord.y * 800, nebula_time * 1000) / 65536.0f; + float cloud2 = inoise16(coord.x * 1600, coord.y * 1600, nebula_time * 700) / 65536.0f * 0.5f; + float cloud3 = inoise16(coord.x * 400, coord.y * 400, nebula_time * 1200) / 65536.0f * 0.25f; + + float nebula_density = cloud1 + cloud2 + cloud3; + + uint16_t star_noise = inoise16(coord.x * 4000, coord.y * 4000, nebula_time * 200); + bool is_star = (star_noise > 60000); + + if (is_star) { + float star_intensity = (star_noise - 60000) / 5536.0f; + return palette.mapColor(0.0f, star_intensity, 1.0f); // Stars + } else { + float hue_drift = (nebula_density + 1.0f) * 0.5f; + float intensity = (nebula_density + 1.0f) * 0.4f; + return palette.mapColor(hue_drift, intensity); + } +} + +CRGB drawBinaryPulse(const RingCoord& coord, uint32_t time_ms, ColorPaletteManager& palette) { + float pulse_period = 2000.0f; + float pulse_phase = fmod(time_ms, pulse_period) / pulse_period; + + float distance_from_center = sqrt(coord.x * coord.x + coord.y * coord.y); + + float ring_frequency = 5.0f; + float pulse_offset = pulse_phase * 2.0f; + float ring_value = sin((distance_from_center * ring_frequency - pulse_offset) * 2 * M_PI); + + uint16_t noise = inoise16(coord.x * 2000, coord.y * 2000, time_ms / 8); + float digital_mod = ((noise >> 8) > 128) ? 1.0f : -0.5f; + + float final_value = ring_value * digital_mod; + + if (final_value > 0.3f) { + return palette.mapColor(0.8f, final_value, 0.8f); // Active pulse + } else if (final_value > -0.2f) { + float transition_intensity = (final_value + 0.2f) * 2.0f; + return palette.mapColor(0.3f, transition_intensity); // Transition zones + } else { + return palette.mapColor(0.7f, 0.1f); // Background + } +} + +// Enhanced variant manager with ALL 10 ALGORITHMS and smooth transitions +class NoiseVariantManager { +private: + uint8_t current_variant = 0; + uint8_t target_variant = 0; + float transition_progress = 1.0f; // 0.0 = old, 1.0 = new + uint32_t transition_start = 0; + static const uint32_t TRANSITION_DURATION = 1500; // 1.5 second fade for smoother transitions + + // Algorithm instances + PlasmaWaveGenerator plasma_gen; + PlasmaParams plasma_params; + ColorPaletteManager& palette_manager; + +public: + NoiseVariantManager(ColorPaletteManager& palette_mgr) : palette_manager(palette_mgr) {} + + void update(uint32_t now, bool auto_cycle_enabled, uint8_t manual_variant, const PlasmaParams& params) { + plasma_params = params; + + // Handle automatic cycling vs manual override + if (auto_cycle_enabled) { + EVERY_N_MILLISECONDS(12000) { // Slightly longer for each variant + startTransition((current_variant + 1) % 10, now); // ALL 10 variants + } + } else if (manual_variant != target_variant && transition_progress >= 1.0f) { + // Manual override + startTransition(manual_variant, now); + } + + // Update transition progress + if (transition_progress < 1.0f) { + uint32_t elapsed = now - transition_start; + transition_progress = min(1.0f, elapsed / (float)TRANSITION_DURATION); + + if (transition_progress >= 1.0f) { + current_variant = target_variant; + } + } + } + + CRGB renderPixel(const RingCoord& coord, uint32_t time_ms) { + if (transition_progress >= 1.0f) { + // No transition, render current variant + return renderVariant(current_variant, coord, time_ms); + } else { + // Advanced cross-fade with brightness preservation + CRGB old_color = renderVariant(current_variant, coord, time_ms); + CRGB new_color = renderVariant(target_variant, coord, time_ms); + return smoothLerpCRGB(old_color, new_color, transition_progress); + } + } + + uint8_t getCurrentVariant() const { return current_variant; } + const char* getCurrentVariantName() const { + const char* names[] = { + "Cosmic Swirl", "Electric Storm", "Lava Lamp", "Digital Rain", "Plasma Waves", + "Glitch City", "Ocean Depths", "Fire Dance", "Nebula Drift", "Binary Pulse" + }; + return names[current_variant % 10]; + } + +private: + void startTransition(uint8_t new_variant, uint32_t now) { + target_variant = new_variant % 10; // Ensure valid range + transition_start = now; + transition_progress = 0.0f; + } + + CRGB renderVariant(uint8_t variant, const RingCoord& coord, uint32_t time_ms) { + switch(variant % 10) { + case 0: return drawCosmicSwirl(coord, time_ms, palette_manager); + case 1: return drawElectricStorm(coord, time_ms, palette_manager); + case 2: return drawLavaLamp(coord, time_ms, palette_manager); + case 3: return drawDigitalRain(coord, time_ms, palette_manager); + case 4: return drawPlasmaWithPalette(coord, time_ms, palette_manager); + case 5: return drawGlitchCity(coord, time_ms, palette_manager); + case 6: return drawOceanDepths(coord, time_ms, palette_manager); + case 7: return drawFireDance(coord, time_ms, palette_manager); + case 8: return drawNebulaDrift(coord, time_ms, palette_manager); + case 9: return drawBinaryPulse(coord, time_ms, palette_manager); + default: return drawCosmicSwirl(coord, time_ms, palette_manager); + } + } + + // Enhanced Plasma Waves with palette integration + CRGB drawPlasmaWithPalette(const RingCoord& coord, uint32_t time_ms, ColorPaletteManager& palette) { + // Generate base plasma waves + CRGB plasma_color = plasma_gen.calculatePlasmaPixel(coord, time_ms, plasma_params); + + // Extract intensity and hue information from plasma + float intensity = (plasma_color.r + plasma_color.g + plasma_color.b) / 765.0f; + + // Calculate wave interference for hue mapping + float time_scaled = time_ms * plasma_params.time_scale * 0.001f; + float wave_sum = 0.0f; + + // Simplified wave calculation for hue determination + float dx = coord.x - 0.5f; + float dy = coord.y - 0.5f; + float distance = sqrt(dx*dx + dy*dy); + float wave_phase = distance * 2.0f + time_scaled * 1.5f; + wave_sum = sin(wave_phase); + + float hue_norm = (wave_sum + 1.0f) * 0.5f; // Normalize to 0-1 + + // Use palette system for consistent color theming + return palette.mapColor(hue_norm, intensity, intensity > 0.8f ? 1.0f : 0.0f); + } + + // Enhanced interpolation with brightness preservation and smooth curves + CRGB smoothLerpCRGB(const CRGB& a, const CRGB& b, float t) { + // Apply smooth curve to transition + float smooth_t = t * t * (3.0f - 2.0f * t); // Smoothstep function + + // Preserve brightness during transition to avoid flickering + float brightness_a = (a.r + a.g + a.b) / 765.0f; + float brightness_b = (b.r + b.g + b.b) / 765.0f; + float target_brightness = brightness_a + (brightness_b - brightness_a) * smooth_t; + + CRGB result = CRGB( + a.r + (int)((b.r - a.r) * smooth_t), + a.g + (int)((b.g - a.g) * smooth_t), + a.b + (int)((b.b - a.b) * smooth_t) + ); + + // Brightness compensation + float current_brightness = (result.r + result.g + result.b) / 765.0f; + if (current_brightness > 0.01f) { + float compensation = target_brightness / current_brightness; + compensation = min(compensation, 2.0f); // Limit boost + result.r = min(255, (int)(result.r * compensation)); + result.g = min(255, (int)(result.g * compensation)); + result.b = min(255, (int)(result.b * compensation)); + } + + return result; + } +}; + +// ALL 10 Variant names for UI +fl::string variant_names[10] = { + "Cosmic Swirl", "Electric Storm", "Lava Lamp", "Digital Rain", "Plasma Waves", + "Glitch City", "Ocean Depths", "Fire Dance", "Nebula Drift", "Binary Pulse" +}; + +// 5 Color Palette names for UI +fl::string palette_names[5] = { + "Sunset Boulevard", "Ocean Breeze", "Neon Nights", "Forest Whisper", "Galaxy Express" +}; + +// Helper functions to get indices from names +uint8_t getVariantIndex(const fl::string& name) { + for (int i = 0; i < 10; i++) { + if (variant_names[i] == name) { + return i; + } + } + return 0; // Default to first variant +} + +uint8_t getPaletteIndex(const fl::string& name) { + for (int i = 0; i < 5; i++) { + if (palette_names[i] == name) { + return i; + } + } + return 0; // Default to first palette +} + +// Global instances - order matters for initialization +ColorPaletteManager palette_manager; +NoiseVariantManager variant_manager(palette_manager); +RingLUT ring_lut; + +// KICKASS UI controls - comprehensive control suite +UISlider brightness("Brightness", 1, 0, 1); +UISlider scale("Scale", 4, .1, 4, .1); +UISlider timeBitshift("Time Bitshift", 5, 0, 16, 1); +UISlider timescale("Time Scale", 1, .1, 10, .1); + +// Advanced variant and palette controls +UIDropdown variants("Noise Variants", variant_names); +UIDropdown palettes("Color Palettes", palette_names); +UICheckbox autoCycle("Auto Cycle Effects", true); +UICheckbox autoPalette("Auto Cycle Palettes", true); +// This PIR type is special because it will bind to a pin for a real device, +// but also provides a UIButton when run in the simulator. +Pir pir(PIN_PIR, PIR_LATCH_MS, PIR_RISING_TIME, PIR_FALLING_TIME); +UICheckbox useDither("Use Binary Dither", true); + +Timer timer; +float current_brightness = 0; + +// Save a pointer to the controller so that we can modify the dither in real time. +CLEDController* controller = nullptr; + +void setup() { + Serial.begin(115200); + // ScreenMap is purely something that is needed for the sketch to correctly + // show on the web display. For deployements to real devices, this essentially + // becomes a no-op. + ScreenMap xyMap = ScreenMap::Circle(NUM_LEDS, 2.0, 2.0); + controller = &FastLED.addLeds(leds, NUM_LEDS) + .setCorrection(TypicalLEDStrip) + .setDither(DISABLE_DITHER) + .setScreenMap(xyMap); + FastLED.setBrightness(brightness); + pir.activate(millis()); // Activate the PIR sensor on startup. + + // Initialize performance optimizations + ring_lut.initialize(); +} + +void draw(uint32_t now) { + // Configure plasma parameters from UI controls with enhanced scaling + PlasmaParams plasma_params; + plasma_params.time_scale = timescale.as(); + plasma_params.noise_intensity = scale.as() * 0.8f; // Slightly reduce for better visual balance + plasma_params.brightness = brightness.as(); + plasma_params.time_bitshift = timeBitshift.as(); + plasma_params.hue_offset = (now / 100) % 256; // Slow hue rotation for extra dynamism + plasma_params.noise_amplitude = 0.6f + 0.4f * sin(now * 0.001f); // Breathing noise effect + + // Update palette manager with auto-cycling and manual control + palette_manager.update(now, autoPalette.value(), getPaletteIndex(palettes.value())); + + // Update variant manager with enhanced parameters + variant_manager.update(now, autoCycle.value(), getVariantIndex(variants.value()), plasma_params); + + // KICKASS rendering with performance optimizations + for (int i = 0; i < NUM_LEDS; i++) { + RingCoord coord = ring_lut.fastRingCoord(i); + CRGB pixel_color = variant_manager.renderPixel(coord, now); + + // Apply global brightness and gamma correction for better visual quality + float global_brightness = brightness.as(); + pixel_color.r = (uint8_t)(pixel_color.r * global_brightness); + pixel_color.g = (uint8_t)(pixel_color.g * global_brightness); + pixel_color.b = (uint8_t)(pixel_color.b * global_brightness); + + leds[i] = pixel_color; + } + + // Optional: Add subtle sparkle overlay for extra visual interest + EVERY_N_MILLISECONDS(50) { + // Add random sparkles to 1% of LEDs + int sparkle_count = NUM_LEDS / 100 + 1; + for (int s = 0; s < sparkle_count; s++) { + int sparkle_pos = random16() % NUM_LEDS; + if (random8() > 250) { // Very rare sparkles + leds[sparkle_pos] = blend(leds[sparkle_pos], CRGB::White, 128); + } + } + } +} + +void loop() { + // Allow the dither to be enabled and disabled. + controller->setDither(useDither ? BINARY_DITHER : DISABLE_DITHER); + uint32_t now = millis(); + uint8_t bri = pir.transition(now); + FastLED.setBrightness(bri * brightness.as()); + // Apply leds generation to the leds. + draw(now); + + + FastLED.show(); +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/FxNoiseRing/FxNoiseRing.ino b/.pio/libdeps/esp01_1m/FastLED/examples/FxNoiseRing/FxNoiseRing.ino new file mode 100644 index 0000000..53a740f --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/FxNoiseRing/FxNoiseRing.ino @@ -0,0 +1,11 @@ +#include "fl/sketch_macros.h" + +#if SKETCH_HAS_LOTS_OF_MEMORY + +#include "FxNoiseRing.h" + +#else +void setup() {} +void loop() {} + +#endif // SKETCH_HAS_LOTS_OF_MEMORY diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/FxNoiseRing/NOISE_RING_IDEAS.md b/.pio/libdeps/esp01_1m/FastLED/examples/FxNoiseRing/NOISE_RING_IDEAS.md new file mode 100644 index 0000000..f362be1 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/FxNoiseRing/NOISE_RING_IDEAS.md @@ -0,0 +1,760 @@ +# NoiseRing Enhanced Design Document + +## Overview +Enhanced version of the FxNoiseRing example that automatically cycles through different noise effects and color palettes, providing dynamic visual variety with user controls for manual selection. + +**Featured Implementation**: **Plasma Waves** - Advanced graphics technique showcasing sine wave interference with noise modulation, demonstrating sophisticated mathematical visualization on circular LED arrays. + +## Core Features + +### Automatic Cycling +- **Palette Rotation**: Every 5 seconds using `EVERY_N_MILLISECONDS(5000)` +- **Noise Effect Rotation**: Every 10 seconds using `EVERY_N_MILLISECONDS(10000)` +- **User Override**: Dropdown controls allow manual selection to override automatic cycling + +### User Interface Controls +- **Variants Dropdown**: "Noise Variants" - Manual selection of noise effects (0-9) +- **Palettes Dropdown**: "Color Palettes" - Manual selection of color schemes (0-4) +- **Auto Cycle Checkbox**: "Auto Cycle" - Enable/disable automatic rotation +- **Existing Controls**: Retain all current sliders (Brightness, Scale, Time Bitshift, Time Scale, PIR, Dither) + +## 10 Noise Variations - Detailed Algorithmic Implementation + +### 1. "Cosmic Swirl" - Enhanced Perlin Flow +- **Description**: Classic perlin noise with slow, flowing movements using multi-octave complexity +- **Parameters**: Base noise with moderate scale, gentle time progression +- **Characteristics**: Smooth gradients, organic flow patterns + +**Algorithm**: +```cpp +CRGB drawCosmicSwirl(const RingCoord& coord, uint32_t time_ms) { + float time_factor = time_ms * 0.0008f; + + // Multi-octave noise for organic complexity + float noise1 = inoise16(coord.x * 2000, coord.y * 2000, time_factor * 1000) / 65536.0f; + float noise2 = inoise16(coord.x * 1000, coord.y * 1000, time_factor * 2000) / 65536.0f * 0.5f; + float noise3 = inoise16(coord.x * 4000, coord.y * 4000, time_factor * 500) / 65536.0f * 0.25f; + + float combined_noise = noise1 + noise2 + noise3; + + // Flowing hue with gentle progression + uint8_t hue = (uint8_t)((combined_noise + coord.angle / (2*M_PI)) * 255) % 256; + uint8_t sat = 220 + (uint8_t)(abs(noise2) * 35); + uint8_t val = 180 + (uint8_t)(combined_noise * 75); + + return CHSV(hue, sat, val); +} +``` + +### 2. "Electric Storm" - High-Frequency Chaos +- **Description**: High-frequency noise with rapid temporal changes creating lightning effects +- **Parameters**: 8x time acceleration, high spatial frequency, quantized thresholds +- **Characteristics**: Crackling, energetic, lightning-like patterns + +**Algorithm**: +```cpp +CRGB drawElectricStorm(const RingCoord& coord, uint32_t time_ms) { + // Rapid temporal changes with quantized effects + uint32_t fast_time = time_ms << 3; // 8x time acceleration + + // High-frequency spatial noise + float x_noise = coord.x * 8000; + float y_noise = coord.y * 8000; + + uint16_t noise1 = inoise16(x_noise, y_noise, fast_time); + uint16_t noise2 = inoise16(x_noise + 10000, y_noise + 10000, fast_time + 5000); + + // Create lightning-like quantization + uint8_t threshold = 200; + bool lightning = (noise1 >> 8) > threshold || (noise2 >> 8) > threshold; + + if (lightning) { + // Bright electric flash + uint8_t intensity = max((noise1 >> 8) - threshold, (noise2 >> 8) - threshold) * 4; + return CRGB(intensity, intensity, 255); // Electric blue-white + } else { + // Dark storm background + uint8_t hue = 160 + ((noise1 >> 10) % 32); // Blue-purple range + return CHSV(hue, 255, (noise1 >> 8) / 4); // Low brightness + } +} +``` + +### 3. "Lava Lamp" - Slow Blobby Movement +- **Description**: Slow, blobby movements with high contrast using low-frequency modulation +- **Parameters**: Ultra-low frequency, high amplitude, threshold-based blob creation +- **Characteristics**: Large, slow-moving color blobs with organic boundaries + +**Algorithm**: +```cpp +CRGB drawLavaLamp(const RingCoord& coord, uint32_t time_ms) { + float slow_time = time_ms * 0.0002f; // Very slow movement + + // Large-scale blob generation + float blob_scale = 800; // Large spatial scale for big blobs + uint16_t primary_noise = inoise16(coord.x * blob_scale, coord.y * blob_scale, slow_time * 1000); + uint16_t secondary_noise = inoise16(coord.x * blob_scale * 0.5f, coord.y * blob_scale * 0.5f, slow_time * 1500); + + // Create blob boundaries with thresholding + float blob_value = (primary_noise + secondary_noise * 0.3f) / 65536.0f; + + // High contrast blob regions + if (blob_value > 0.6f) { + // Hot blob center + uint8_t hue = 0 + (uint8_t)((blob_value - 0.6f) * 400); // Red to orange + return CHSV(hue, 255, 255); + } else if (blob_value > 0.3f) { + // Blob edge gradient + float edge_factor = (blob_value - 0.3f) / 0.3f; + uint8_t brightness = (uint8_t)(edge_factor * 255); + return CHSV(20, 200, brightness); // Orange edge + } else { + // Background + return CHSV(240, 100, 30); // Dark blue background + } +} +``` + +### 4. "Digital Rain" - Matrix Cascade +- **Description**: Matrix-style cascading effect using vertical noise mapping +- **Parameters**: Angle-to-vertical conversion, time-based cascade, stream segregation +- **Characteristics**: Vertical streams, binary-like transitions, matrix green + +**Algorithm**: +```cpp +CRGB drawDigitalRain(const RingCoord& coord, uint32_t time_ms) { + // Convert angle to vertical position for cascade effect + float vertical_pos = sin(coord.angle) * 0.5f + 0.5f; // 0-1 range + + // Time-based cascade with varying speeds + float cascade_speed = 0.002f; + float time_offset = time_ms * cascade_speed; + + // Create vertical streams + int stream_id = (int)(coord.angle * 10) % 8; // 8 distinct streams + float stream_phase = fmod(vertical_pos + time_offset + stream_id * 0.125f, 1.0f); + + // Binary-like transitions + uint16_t noise = inoise16(stream_id * 1000, stream_phase * 10000, time_ms / 4); + uint8_t digital_value = (noise >> 8) > 128 ? 255 : 0; + + // Matrix green with digital artifacts + uint8_t green_intensity = digital_value; + uint8_t trailing = max(0, green_intensity - (int)(stream_phase * 200)); + + return CRGB(0, green_intensity, trailing / 2); +} +``` + +### 5. "Plasma Waves" - **FEATURED IMPLEMENTATION** +- **Description**: Multiple overlapping sine waves with noise modulation creating electromagnetic plasma effects +- **Parameters**: 4-source wave interference, noise modulation, dynamic color mapping +- **Characteristics**: Smooth wave interference patterns, flowing electromagnetic appearance + +**Algorithm**: +```cpp +class PlasmaWaveGenerator { +private: + struct WaveSource { + float x, y; // Source position + float frequency; // Wave frequency + float amplitude; // Wave strength + float phase_speed; // Phase evolution rate + }; + + WaveSource sources[4] = { + {0.5f, 0.5f, 1.0f, 1.0f, 0.8f}, // Center source + {0.0f, 0.0f, 1.5f, 0.8f, 1.2f}, // Corner source + {1.0f, 1.0f, 0.8f, 1.2f, 0.6f}, // Opposite corner + {0.5f, 0.0f, 1.2f, 0.9f, 1.0f} // Edge source + }; + +public: + CRGB calculatePlasmaPixel(const RingCoord& coord, uint32_t time_ms, const PlasmaParams& params) { + float time_scaled = time_ms * params.time_scale * 0.001f; + + // Calculate wave interference + float wave_sum = 0.0f; + for (int i = 0; i < 4; i++) { + float dx = coord.x - sources[i].x; + float dy = coord.y - sources[i].y; + float distance = sqrt(dx*dx + dy*dy); + + float wave_phase = distance * sources[i].frequency + time_scaled * sources[i].phase_speed; + wave_sum += sin(wave_phase) * sources[i].amplitude; + } + + // Add noise modulation for organic feel + float noise_scale = params.noise_intensity; + float noise_x = coord.x * 0xffff * noise_scale; + float noise_y = coord.y * 0xffff * noise_scale; + uint32_t noise_time = time_ms << params.time_bitshift; + + float noise_mod = (inoise16(noise_x, noise_y, noise_time) - 32768) / 65536.0f; + wave_sum += noise_mod * params.noise_amplitude; + + // Map to color space + return mapWaveToColor(wave_sum, params); + } + +private: + CRGB mapWaveToColor(float wave_value, const PlasmaParams& params) { + // Normalize wave to 0-1 range + float normalized = (wave_value + 4.0f) / 8.0f; // Assuming max amplitude ~4 + normalized = constrain(normalized, 0.0f, 1.0f); + + // Create flowing hue based on wave phase + uint8_t hue = (uint8_t)(normalized * 255.0f + params.hue_offset) % 256; + + // Dynamic saturation based on wave intensity + float intensity = abs(wave_value); + uint8_t sat = (uint8_t)(192 + intensity * 63); // High saturation with variation + + // Brightness modulation + uint8_t val = (uint8_t)(normalized * 255.0f * params.brightness); + + return CHSV(hue, sat, val); + } +}; + +struct PlasmaParams { + float time_scale = 1.0f; + float noise_intensity = 0.5f; + float noise_amplitude = 0.8f; + uint8_t time_bitshift = 5; + uint8_t hue_offset = 0; + float brightness = 1.0f; +}; +``` + +### 6. "Glitch City" - Chaotic Digital Artifacts +- **Description**: Chaotic, stuttering effects with quantized noise and bit manipulation +- **Parameters**: Time quantization, XOR operations, random bit shifts +- **Characteristics**: Harsh transitions, digital artifacts, strobe-like effects + +**Algorithm**: +```cpp +CRGB drawGlitchCity(const RingCoord& coord, uint32_t time_ms) { + // Stuttering time progression + uint32_t glitch_time = (time_ms / 100) * 100; // Quantize time to create stutters + + // Bit manipulation for digital artifacts + uint16_t noise1 = inoise16(coord.x * 3000, coord.y * 3000, glitch_time); + uint16_t noise2 = inoise16(coord.x * 5000, coord.y * 5000, glitch_time + 1000); + + // XOR operation for harsh digital effects + uint16_t glitch_value = noise1 ^ noise2; + + // Random bit shifts for channel corruption + uint8_t r = (glitch_value >> (time_ms % 8)) & 0xFF; + uint8_t g = (glitch_value << (time_ms % 5)) & 0xFF; + uint8_t b = ((noise1 | noise2) >> 4) & 0xFF; + + // Occasional full-bright flashes + if ((glitch_value & 0xF000) == 0xF000) { + return CRGB(255, 255, 255); + } + + return CRGB(r, g, b); +} +``` + +### 7. "Ocean Depths" - Underwater Currents +- **Description**: Slow, deep undulations mimicking underwater currents with blue-green bias +- **Parameters**: Ultra-low frequency, blue-green color bias, depth-based brightness +- **Characteristics**: Calm, flowing, deep water feel with gentle undulations + +**Algorithm**: +```cpp +CRGB drawOceanDepths(const RingCoord& coord, uint32_t time_ms) { + float ocean_time = time_ms * 0.0005f; // Very slow like deep water + + // Multi-layer current simulation + float current1 = inoise16(coord.x * 1200, coord.y * 1200, ocean_time * 800) / 65536.0f; + float current2 = inoise16(coord.x * 2400, coord.y * 2400, ocean_time * 600) / 65536.0f * 0.5f; + float current3 = inoise16(coord.x * 600, coord.y * 600, ocean_time * 1000) / 65536.0f * 0.3f; + + float depth_factor = current1 + current2 + current3; + + // Ocean color palette (blue-green spectrum) + uint8_t base_hue = 140; // Cyan-blue + uint8_t hue_variation = (uint8_t)(abs(depth_factor) * 40); // Vary within blue-green + uint8_t final_hue = (base_hue + hue_variation) % 256; + + // Depth-based brightness (deeper = darker) + uint8_t depth_brightness = 120 + (uint8_t)(depth_factor * 135); + uint8_t saturation = 200 + (uint8_t)(abs(current2) * 55); + + return CHSV(final_hue, saturation, depth_brightness); +} +``` + +### 8. "Fire Dance" - Upward Flame Simulation +- **Description**: Flickering, flame-like patterns with upward bias and turbulent noise +- **Parameters**: Vertical gradient bias, turbulent noise, fire color palette +- **Characteristics**: Orange/red dominated, upward movement, flickering + +**Algorithm**: +```cpp +CRGB drawFireDance(const RingCoord& coord, uint32_t time_ms) { + // Vertical bias for upward flame movement + float vertical_component = sin(coord.angle) * 0.5f + 0.5f; // 0 at bottom, 1 at top + + // Turbulent noise with upward bias + float flame_x = coord.x * 1500; + float flame_y = coord.y * 1500 + time_ms * 0.003f; // Upward drift + + uint16_t turbulence = inoise16(flame_x, flame_y, time_ms); + float flame_intensity = (turbulence / 65536.0f) * (1.0f - vertical_component * 0.3f); + + // Fire color palette (red->orange->yellow) + uint8_t base_hue = 0; // Red + uint8_t hue_variation = (uint8_t)(flame_intensity * 45); // Up to orange/yellow + uint8_t final_hue = (base_hue + hue_variation) % 256; + + uint8_t saturation = 255 - (uint8_t)(vertical_component * 100); // Less saturated at top + uint8_t brightness = (uint8_t)(flame_intensity * 255); + + return CHSV(final_hue, saturation, brightness); +} +``` + +### 9. "Nebula Drift" - Cosmic Cloud Simulation +- **Description**: Slow cosmic clouds with starfield sparkles using multi-octave noise +- **Parameters**: Multiple noise octaves, sparse bright spots, cosmic color palette +- **Characteristics**: Misty backgrounds with occasional bright stars + +**Algorithm**: +```cpp +CRGB drawNebulaDrift(const RingCoord& coord, uint32_t time_ms) { + float nebula_time = time_ms * 0.0003f; // Cosmic slow drift + + // Multi-octave nebula clouds + float cloud1 = inoise16(coord.x * 800, coord.y * 800, nebula_time * 1000) / 65536.0f; + float cloud2 = inoise16(coord.x * 1600, coord.y * 1600, nebula_time * 700) / 65536.0f * 0.5f; + float cloud3 = inoise16(coord.x * 400, coord.y * 400, nebula_time * 1200) / 65536.0f * 0.25f; + + float nebula_density = cloud1 + cloud2 + cloud3; + + // Sparse starfield generation + uint16_t star_noise = inoise16(coord.x * 4000, coord.y * 4000, nebula_time * 200); + bool is_star = (star_noise > 60000); // Very sparse stars + + if (is_star) { + // Bright white/blue stars + uint8_t star_brightness = 200 + ((star_noise - 60000) / 256); + return CRGB(star_brightness, star_brightness, 255); + } else { + // Nebula background + uint8_t nebula_hue = 200 + (uint8_t)(nebula_density * 80); // Purple-pink spectrum + uint8_t nebula_sat = 150 + (uint8_t)(abs(cloud2) * 105); + uint8_t nebula_bright = 40 + (uint8_t)(nebula_density * 120); + + return CHSV(nebula_hue, nebula_sat, nebula_bright); + } +} +``` + +### 10. "Binary Pulse" - Digital Heartbeat +- **Description**: Digital heartbeat with expanding/contracting rings using threshold-based noise +- **Parameters**: Concentric pattern generation, rhythmic pulsing, geometric thresholds +- **Characteristics**: Rhythmic, geometric, tech-inspired + +**Algorithm**: +```cpp +CRGB drawBinaryPulse(const RingCoord& coord, uint32_t time_ms) { + // Create rhythmic heartbeat timing + float pulse_period = 2000.0f; // 2-second pulse cycle + float pulse_phase = fmod(time_ms, pulse_period) / pulse_period; // 0-1 cycle + + // Generate expanding rings from center + float distance_from_center = sqrt(coord.x * coord.x + coord.y * coord.y); + + // Pulse wave propagation + float ring_frequency = 5.0f; // Number of rings + float pulse_offset = pulse_phase * 2.0f; // Expanding wave + float ring_value = sin((distance_from_center * ring_frequency - pulse_offset) * 2 * M_PI); + + // Digital quantization + uint16_t noise = inoise16(coord.x * 2000, coord.y * 2000, time_ms / 8); + float digital_mod = ((noise >> 8) > 128) ? 1.0f : -0.5f; + + float final_value = ring_value * digital_mod; + + // Binary color mapping + if (final_value > 0.3f) { + // Active pulse regions + uint8_t intensity = (uint8_t)(final_value * 255); + return CRGB(intensity, 0, intensity); // Magenta pulse + } else if (final_value > -0.2f) { + // Transition zones + uint8_t dim_intensity = (uint8_t)((final_value + 0.2f) * 500); + return CRGB(0, dim_intensity, 0); // Green transitions + } else { + // Background + return CRGB(10, 0, 20); // Dark purple background + } +} +``` + +## 5 Color Palettes + +### 1. "Sunset Boulevard" +- **Colors**: Warm oranges, deep reds, golden yellows +- **Description**: Classic sunset gradient perfect for relaxing ambiance +- **HSV Range**: Hue 0-45, high saturation, varying brightness + +### 2. "Ocean Breeze" +- **Colors**: Deep blues, aqua, seafoam green, white caps +- **Description**: Cool ocean palette for refreshing visual effects +- **HSV Range**: Hue 120-210, medium-high saturation + +### 3. "Neon Nights" +- **Colors**: Electric pink, cyan, purple, lime green +- **Description**: Cyberpunk-inspired high-contrast palette +- **HSV Range**: Saturated primaries, high brightness contrasts + +### 4. "Forest Whisper" +- **Colors**: Deep greens, earth browns, golden highlights +- **Description**: Natural woodland palette for organic feels +- **HSV Range**: Hue 60-150, natural saturation levels + +### 5. "Galaxy Express" +- **Colors**: Deep purples, cosmic blues, silver stars, pink nebula +- **Description**: Space-themed palette for cosmic adventures +- **HSV Range**: Hue 200-300, with bright white accents + +## Implementation Strategy + +### Core Mathematical Framework + +```cpp +// Enhanced coordinate system for ring-based effects +struct RingCoord { + float angle; // Position on ring (0 to 2π) + float radius; // Distance from center (normalized 0-1) + float x, y; // Cartesian coordinates + int led_index; // LED position on strip +}; + +// Convert LED index to ring coordinates +RingCoord calculateRingCoord(int led_index, int num_leds, float time_offset = 0.0f) { + RingCoord coord; + coord.led_index = led_index; + coord.angle = (led_index * 2.0f * M_PI / num_leds) + time_offset; + coord.radius = 1.0f; // Fixed radius for ring + coord.x = cos(coord.angle); + coord.y = sin(coord.angle); + return coord; +} + +// Performance optimization with lookup tables +class RingLUT { +private: + float cos_table[NUM_LEDS]; + float sin_table[NUM_LEDS]; + +public: + void initialize() { + for(int i = 0; i < NUM_LEDS; i++) { + float angle = i * 2.0f * M_PI / NUM_LEDS; + cos_table[i] = cos(angle); + sin_table[i] = sin(angle); + } + } + + RingCoord fastRingCoord(int led_index, float time_offset = 0.0f) { + RingCoord coord; + coord.led_index = led_index; + coord.angle = (led_index * 2.0f * M_PI / NUM_LEDS) + time_offset; + coord.x = cos_table[led_index]; + coord.y = sin_table[led_index]; + coord.radius = 1.0f; + return coord; + } +}; +``` + +### Enhanced Control System with Smooth Transitions + +```cpp +class NoiseVariantManager { +private: +uint8_t current_variant = 0; + uint8_t target_variant = 0; + float transition_progress = 1.0f; // 0.0 = old, 1.0 = new + uint32_t transition_start = 0; + static const uint32_t TRANSITION_DURATION = 1000; // 1 second fade + + // Algorithm instances + PlasmaWaveGenerator plasma_gen; + PlasmaParams plasma_params; + +public: + void update(uint32_t now, bool auto_cycle_enabled, uint8_t manual_variant) { + // Handle automatic cycling vs manual override + if (auto_cycle_enabled) { + EVERY_N_MILLISECONDS(10000) { + startTransition((current_variant + 1) % 10, now); + } + } else if (manual_variant != target_variant && transition_progress >= 1.0f) { + // Manual override + startTransition(manual_variant, now); + } + + // Update transition progress + if (transition_progress < 1.0f) { + uint32_t elapsed = now - transition_start; + transition_progress = min(1.0f, elapsed / (float)TRANSITION_DURATION); + + if (transition_progress >= 1.0f) { + current_variant = target_variant; + } + } + } + + CRGB renderPixel(const RingCoord& coord, uint32_t time_ms) { + if (transition_progress >= 1.0f) { + // No transition, render current variant + return renderVariant(current_variant, coord, time_ms); + } else { + // Blend between variants + CRGB old_color = renderVariant(current_variant, coord, time_ms); + CRGB new_color = renderVariant(target_variant, coord, time_ms); + return lerpCRGB(old_color, new_color, transition_progress); + } + } + +private: + void startTransition(uint8_t new_variant, uint32_t now) { + target_variant = new_variant; + transition_start = now; + transition_progress = 0.0f; + } + + CRGB renderVariant(uint8_t variant, const RingCoord& coord, uint32_t time_ms) { + switch(variant) { + case 0: return drawCosmicSwirl(coord, time_ms); + case 1: return drawElectricStorm(coord, time_ms); + case 2: return drawLavaLamp(coord, time_ms); + case 3: return drawDigitalRain(coord, time_ms); + case 4: return plasma_gen.calculatePlasmaPixel(coord, time_ms, plasma_params); + case 5: return drawGlitchCity(coord, time_ms); + case 6: return drawOceanDepths(coord, time_ms); + case 7: return drawFireDance(coord, time_ms); + case 8: return drawNebulaDrift(coord, time_ms); + case 9: return drawBinaryPulse(coord, time_ms); + default: return CRGB::Black; + } + } + + CRGB lerpCRGB(const CRGB& a, const CRGB& b, float t) { + return CRGB( + a.r + (int)((b.r - a.r) * t), + a.g + (int)((b.g - a.g) * t), + a.b + (int)((b.b - a.b) * t) + ); + } +}; +``` + +### Data Structures and UI Integration + +```cpp +// Enhanced data structures +String variant_names[10] = { + "Cosmic Swirl", "Electric Storm", "Lava Lamp", "Digital Rain", "Plasma Waves", + "Glitch City", "Ocean Depths", "Fire Dance", "Nebula Drift", "Binary Pulse" +}; + +String palette_names[5] = { + "Sunset Boulevard", "Ocean Breeze", "Neon Nights", "Forest Whisper", "Galaxy Express" +}; + +// Global instances +NoiseVariantManager variant_manager; +RingLUT ring_lut; + +// Enhanced UI controls +UIDropdown variants("Noise Variants", variant_names, 10); +UIDropdown palettes("Color Palettes", palette_names, 5); +UICheckbox autoCycle("Auto Cycle", true); +``` + +### Integration with Existing Framework + +```cpp +void setup() { + Serial.begin(115200); + ScreenMap xyMap = ScreenMap::Circle(NUM_LEDS, 2.0, 2.0); + controller = &FastLED.addLeds(leds, NUM_LEDS) + .setCorrection(TypicalLEDStrip) + .setDither(DISABLE_DITHER) + .setScreenMap(xyMap); + FastLED.setBrightness(brightness); + pir.activate(millis()); + + // Initialize performance optimizations + ring_lut.initialize(); +} + +void draw(uint32_t now) { + // Update variant manager + variant_manager.update(now, autoCycle.value(), variants.value()); + + // Render each LED with current variant + for (int i = 0; i < NUM_LEDS; i++) { + RingCoord coord = ring_lut.fastRingCoord(i); + leds[i] = variant_manager.renderPixel(coord, now); + } +} + +void loop() { + controller->setDither(useDither ? BINARY_DITHER : DISABLE_DITHER); + uint32_t now = millis(); + uint8_t bri = pir.transition(now); + FastLED.setBrightness(bri * brightness.as()); + + draw(now); + FastLED.show(); +} +``` + +## Technical Considerations + +### Performance Optimization +- **Lookup Table Pre-computation**: Pre-calculate trigonometric values for ring positions +- **Fixed-Point Arithmetic**: Use integer math where possible for embedded systems +- **Noise Caching**: Cache noise parameters between frames for consistent animation +- **Memory-Efficient Algorithms**: Optimize noise calculations for real-time performance +- **Parallel Processing**: Structure algorithms for potential multi-core optimization + +### Memory Management +- **PROGMEM Storage**: Store palettes and static data in program memory for Arduino compatibility +- **Dynamic Allocation Avoidance**: Minimize heap usage during effect transitions +- **Stack Optimization**: Use local variables efficiently in nested algorithm calls +- **Buffer Management**: Reuse coordinate calculation buffers where possible + +### Mathematical Precision +- **16-bit Noise Space**: Maintain precision in noise calculations before 8-bit mapping +- **Floating Point Efficiency**: Balance precision vs. performance based on target platform +- **Color Space Optimization**: Use HSV for smooth transitions, RGB for final output +- **Numerical Stability**: Prevent overflow/underflow in wave interference calculations + +### User Experience +- **Smooth Transitions**: 1-second cross-fade between effects using linear interpolation +- **Responsive Controls**: Immediate override of automatic cycling via manual selection +- **Visual Feedback**: Clear indication of current variant and palette selection +- **Performance Consistency**: Maintain stable frame rate across all effect variants + +## First Pass Implementation: Plasma Waves + +### Why Start with Plasma Waves? +1. **Visual Impact**: Most impressive demonstration of advanced graphics programming +2. **Mathematical Showcase**: Demonstrates sine wave interference and noise modulation +3. **Building Foundation**: Establishes the RingCoord system used by all other variants +4. **Performance Baseline**: Tests the most computationally intensive algorithm first + +### Development Strategy +```cpp +// Phase 1: Core Infrastructure +void setupPlasmaDemo() { + // Initialize basic ring coordinate system + ring_lut.initialize(); + + // Configure plasma parameters + plasma_params.time_scale = timescale.as(); + plasma_params.noise_intensity = scale.as(); + plasma_params.brightness = brightness.as(); +} + +// Phase 2: Plasma-Only Implementation +void drawPlasmaOnly(uint32_t now) { + for (int i = 0; i < NUM_LEDS; i++) { + RingCoord coord = ring_lut.fastRingCoord(i); + leds[i] = plasma_gen.calculatePlasmaPixel(coord, now, plasma_params); + } +} + +// Phase 3: Add Manual Variants (No Auto-Cycling Yet) +void drawWithManualSelection(uint32_t now) { + uint8_t selected_variant = variants.value(); + + for (int i = 0; i < NUM_LEDS; i++) { + RingCoord coord = ring_lut.fastRingCoord(i); + + switch(selected_variant) { + case 0: leds[i] = drawCosmicSwirl(coord, now); break; + case 1: leds[i] = plasma_gen.calculatePlasmaPixel(coord, now, plasma_params); break; + // Add variants incrementally + default: leds[i] = plasma_gen.calculatePlasmaPixel(coord, now, plasma_params); + } + } +} + +// Phase 4: Full System with Auto-Cycling and Transitions +void drawFullSystem(uint32_t now) { + variant_manager.update(now, autoCycle.value(), variants.value()); + + for (int i = 0; i < NUM_LEDS; i++) { + RingCoord coord = ring_lut.fastRingCoord(i); + leds[i] = variant_manager.renderPixel(coord, now); + } +} +``` + +### Testing and Validation +1. **Plasma Waves Only**: Verify smooth wave interference and noise modulation +2. **Parameter Responsiveness**: Test all UI sliders affect plasma generation correctly +3. **Performance Metrics**: Measure frame rate with plasma algorithm on target hardware +4. **Visual Quality**: Confirm smooth color transitions and no artifacts +5. **Memory Usage**: Monitor RAM consumption during plasma calculations + +### Incremental Development Plan +1. **Week 1**: Implement Plasma Waves algorithm and RingCoord system +2. **Week 2**: Add 2-3 simpler variants (Cosmic Swirl, Electric Storm, Fire Dance) +3. **Week 3**: Implement transition system and automatic cycling +4. **Week 4**: Add remaining variants and color palette system +5. **Week 5**: Optimization, polish, and platform-specific tuning + +## Advanced Graphics Techniques Demonstrated + +### Wave Interference Mathematics +The plasma algorithm showcases classical physics simulation: +- **Superposition Principle**: Multiple wave sources combine linearly +- **Phase Relationships**: Time-varying phase creates animation +- **Distance-Based Attenuation**: Realistic wave propagation modeling +- **Noise Modulation**: Organic variation through Perlin noise overlay + +### Color Theory Implementation +- **HSV Color Space**: Smooth hue transitions for natural color flow +- **Saturation Modulation**: Dynamic saturation based on wave intensity +- **Brightness Mapping**: Normalized wave values to brightness curves +- **Gamma Correction**: Perceptually linear brightness progression + +### Performance Optimization Strategies +- **Trigonometric Lookup**: Pre-computed sine/cosine tables +- **Fixed-Point Math**: Integer approximations for embedded platforms +- **Loop Unrolling**: Minimize function call overhead in tight loops +- **Memory Access Patterns**: Cache-friendly coordinate calculations + +## Future Enhancements + +### Advanced Features +- **Save/Load Configurations**: User-defined effect combinations and parameters +- **BPM Synchronization**: Music-reactive timing for effect transitions +- **Custom Palette Editor**: User-defined color schemes with preview +- **Effect Intensity Controls**: Per-variant amplitude and speed modulation +- **Multi-Ring Support**: Expand to multiple concentric LED rings + +### Platform Extensions +- **Multi-Core Optimization**: Parallel processing for complex calculations +- **GPU Acceleration**: WebGL compute shaders for web platform +- **Hardware Acceleration**: Platform-specific optimizations (ESP32, Teensy) +- **Memory Mapping**: Direct hardware buffer access for maximum performance + +### Algorithm Enhancements +- **Physically-Based Rendering**: More realistic light simulation +- **Particle Systems**: Dynamic particle-based effects +- **Fractal Algorithms**: Mandelbrot and Julia set visualizations +- **Audio Visualization**: Spectrum analysis and reactive algorithms diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/FxNoiseRing/simple_timer.h b/.pio/libdeps/esp01_1m/FastLED/examples/FxNoiseRing/simple_timer.h new file mode 100644 index 0000000..81371b0 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/FxNoiseRing/simple_timer.h @@ -0,0 +1,58 @@ +#pragma once + +#include "fl/stdint.h" + +/** + * @brief A simple timer utility class for tracking timed events + * + * This class provides basic timer functionality for animations and effects. + * It can be used to track whether a specific duration has elapsed since + * the timer was started. + */ +class Timer { + public: + /** + * @brief Construct a new Timer object + * + * Creates a timer in the stopped state with zero duration. + */ + Timer() : start_time(0), duration(0), running(false) {} + + /** + * @brief Start the timer with a specific duration + * + * @param now Current time in milliseconds (typically from millis()) + * @param duration How long the timer should run in milliseconds + */ + void start(uint32_t now, uint32_t duration) { + start_time = now; + this->duration = duration; + running = true; + } + + /** + * @brief Update the timer state based on current time + * + * Checks if the timer is still running based on the current time. + * If the specified duration has elapsed, the timer will stop. + * + * @param now Current time in milliseconds (typically from millis()) + * @return true if the timer is still running, false if stopped or elapsed + */ + bool update(uint32_t now) { + if (!running) { + return false; + } + uint32_t elapsed = now - start_time; + if (elapsed > duration) { + running = false; + return false; + } + return true; + } + + private: + uint32_t start_time; // When the timer was started (in milliseconds) + uint32_t duration; // How long the timer should run (in milliseconds) + bool running; // Whether the timer is currently active +}; diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/FxPacifica/FxPacifica.ino b/.pio/libdeps/esp01_1m/FastLED/examples/FxPacifica/FxPacifica.ino new file mode 100644 index 0000000..5e857a6 --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/FxPacifica/FxPacifica.ino @@ -0,0 +1,58 @@ +/// @file FxPacifica.ino +/// @brief Pacifica ocean effect with ScreenMap +/// @example FxPacifica.ino +/// +/// This sketch is fully compatible with the FastLED web compiler. To use it do the following: +/// 1. Install Fastled: `pip install fastled` +/// 2. cd into this examples page. +/// 3. Run the FastLED web compiler at root: `fastled` +/// 4. When the compiler is done a web page will open. + +// +// "Pacifica" +// Gentle, blue-green ocean waves. +// December 2019, Mark Kriegsman and Mary Corey March. +// For Dan. +// + + +#define FASTLED_ALLOW_INTERRUPTS 0 +#include +#include "fx/1d/pacifica.h" +#include "fl/screenmap.h" +#include "defs.h" // for ENABLE_SKETCH + +#if !ENABLE_SKETCH +void setup() {} +void loop() {} +#else + + +using namespace fl; + +#define DATA_PIN 3 +#define NUM_LEDS 60 +#define MAX_POWER_MILLIAMPS 500 +#define LED_TYPE WS2812B +#define COLOR_ORDER GRB + +CRGB leds[NUM_LEDS]; +Pacifica pacifica(NUM_LEDS); + +void setup() { + Serial.begin(115200); + ScreenMap screenMap = ScreenMap::DefaultStrip(NUM_LEDS, 1.5f, 0.5f); + FastLED.addLeds(leds, NUM_LEDS) + .setCorrection(TypicalLEDStrip) + .setScreenMap(screenMap); + FastLED.setMaxPowerInVoltsAndMilliamps(5, MAX_POWER_MILLIAMPS); +} + +void loop() { + EVERY_N_MILLISECONDS(20) { + pacifica.draw(Fx::DrawContext(millis(), leds)); + FastLED.show(); + } +} + +#endif // ENABLE_SKETCH diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/FxPacifica/defs.h b/.pio/libdeps/esp01_1m/FastLED/examples/FxPacifica/defs.h new file mode 100644 index 0000000..842ba5b --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/FxPacifica/defs.h @@ -0,0 +1,9 @@ +#pragma once + + + +#if defined(__AVR__) || defined(ARDUINO_ARCH_AVR) || defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_RP2350) || defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_TEENSYLC) +#define ENABLE_SKETCH 0 +#else +#define ENABLE_SKETCH 1 +#endif \ No newline at end of file diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/FxPride2015/FxPride2015.ino b/.pio/libdeps/esp01_1m/FastLED/examples/FxPride2015/FxPride2015.ino new file mode 100644 index 0000000..454c9ba --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/FxPride2015/FxPride2015.ino @@ -0,0 +1,42 @@ +/// @file FxPride2015.ino +/// @brief Pride2015 effect with ScreenMap +/// @example FxPride2015.ino +/// +/// This sketch is fully compatible with the FastLED web compiler. To use it do the following: +/// 1. Install Fastled: `pip install fastled` +/// 2. cd into this examples page. +/// 3. Run the FastLED web compiler at root: `fastled` +/// 4. When the compiler is done a web page will open. + +#include +#include "fx/1d/pride2015.h" +#include "fl/screenmap.h" + +using namespace fl; + +#define DATA_PIN 3 +#define LED_TYPE WS2811 +#define COLOR_ORDER GRB +#define NUM_LEDS 200 +#define BRIGHTNESS 255 + +CRGB leds[NUM_LEDS]; +Pride2015 pride(NUM_LEDS); + +void setup() { + ScreenMap screenMap = ScreenMap::DefaultStrip(NUM_LEDS, 1.5f, 0.8f); + + // tell FastLED about the LED strip configuration + FastLED.addLeds(leds, NUM_LEDS) + .setCorrection(TypicalLEDStrip) + .setScreenMap(screenMap) + .setDither(BRIGHTNESS < 255); + + // set master brightness control + FastLED.setBrightness(BRIGHTNESS); +} + +void loop() { + pride.draw(Fx::DrawContext(millis(), leds)); + FastLED.show(); +} diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/FxSdCard/FxSdCard.ino b/.pio/libdeps/esp01_1m/FastLED/examples/FxSdCard/FxSdCard.ino new file mode 100644 index 0000000..d5952ea --- /dev/null +++ b/.pio/libdeps/esp01_1m/FastLED/examples/FxSdCard/FxSdCard.ino @@ -0,0 +1,136 @@ +/// @file SdCard.ino +/// @brief Demonstrates playing a video on FastLED. +/// @author Zach Vorhies +/// +/// This sketch is fully compatible with the FastLED web compiler. To use it do the following: +/// 1. Install Fastled: `pip install fastled` +/// 2. cd into this examples page. +/// 3. Run the FastLED web compiler at root: `fastled` +/// 4. When the compiler is done a web page will open. + +#include "FastLED.h" + +#if !SKETCH_HAS_LOTS_OF_MEMORY +void setup() { + // put your setup code here, to run once: +} + +void loop() { + // put your main code here, to run repeatedly: +} +#else + + +#include "Arduino.h" + +#include "fx/2d/noisepalette.h" +// #include "fx/2d/animartrix.hpp" +#include "fx/fx_engine.h" +#include "fx/video.h" +#include "fl/file_system.h" +#include "fl/ui.h" +#include "fl/screenmap.h" +#include "fl/file_system.h" + + +using namespace fl; + + +#define LED_PIN 2 +#define LED_TYPE WS2811 +#define COLOR_ORDER GRB +#define FPS 60 +#define CHIP_SELECT_PIN 5 + + + +#define MATRIX_WIDTH 32 +#define MATRIX_HEIGHT 32 +#define NUM_VIDEO_FRAMES 2 // enables interpolation with > 1 frame. + + +#define NUM_LEDS (MATRIX_WIDTH * MATRIX_HEIGHT) +#define IS_SERPINTINE true + + +UITitle title("SDCard Demo - Mapped Video"); +UIDescription description("Video data is streamed off of a SD card and displayed on a LED strip. The video data is mapped to the LED strip using a ScreenMap."); + + +CRGB leds[NUM_LEDS]; +ScreenMap screenMap; + +FileSystem filesystem; +Video video; +Video video2; + +UISlider videoSpeed("Video Speed", 1.0f, -1, 2.0f, 0.01f); +UINumberField whichVideo("Which Video", 0, 0, 1); + + +bool gError = false; + +void setup() { + Serial.begin(115200); + Serial.println("Sketch setup"); + // Initialize the file system and check for errors + if (!filesystem.beginSd(CHIP_SELECT_PIN)) { + Serial.println("Failed to initialize file system."); + } + + // Open video files from the SD card + video = filesystem.openVideo("data/video.rgb", NUM_LEDS, FPS, 2); + if (!video) { + FASTLED_WARN("Failed to instantiate video"); + gError = true; + return; + } + video2 = filesystem.openVideo("data/color_line_bubbles.rgb", NUM_LEDS, FPS, 2); + if (!video2) { + FASTLED_WARN("Failed to instantiate video2"); + gError = true; + return; + } + + // Read the screen map configuration + ScreenMap screenMap; + bool ok = filesystem.readScreenMap("data/screenmap.json", "strip1", &screenMap); + if (!ok) { + Serial.println("Failed to read screen map"); + gError = true; + return; + } + + // Configure FastLED with the LED type, pin, and color order + FastLED.addLeds(leds, NUM_LEDS) + .setCorrection(TypicalLEDStrip) + .setScreenMap(screenMap); + FastLED.setBrightness(96); + Serial.println("FastLED setup done"); +} + +void loop() { + static bool s_first = true; + if (s_first) { + s_first = false; + Serial.println("First loop."); + } + if (gError) { + // If an error occurred, print a warning every second + EVERY_N_SECONDS(1) { + FASTLED_WARN("No loop because an error occured."); + } + return; + } + + // Select the video to play based on the UI input + Video& vid = !bool(whichVideo.value()) ? video : video2; + vid.setTimeScale(videoSpeed); + + // Get the current time and draw the video frame + uint32_t now = millis(); + vid.draw(now, leds); + FastLED.show(); +} + +#endif diff --git a/.pio/libdeps/esp01_1m/FastLED/examples/FxSdCard/data/color_line_bubbles.rgb b/.pio/libdeps/esp01_1m/FastLED/examples/FxSdCard/data/color_line_bubbles.rgb new file mode 100644 index 0000000000000000000000000000000000000000..463c9d32585593fca16ebfcecd182c6220d2a231 GIT binary patch literal 10859520 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�Ud!rJ-h1rsgbOY$2eD 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

?XY^W%h*a`4xcC1KSf^HUa#9i5#vvb??XUk8{@3 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

g-{8NAp!meSto}TBjLna@#HJ~ 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

|AV1`Db^2~18`!2hxDfQBC&1TC$tJj4e4f6r*% zH(A$Uj00-A-}3)U4Uygp{(t_QeO@aJ$#`&h|JENg(VETRGXBlo{f7U)LzOezUT(B+ zG|NPBCf%gb&T5T|%W=ctm~-$bnVRVgPj`9Cg<$)5I(=r)y&Tnr%kiGM{){8iCX`$0 z6t>EmwGVX&RWSc&Ync4oDc@aa2$NuI_K9hve_iM7O}NIZzRcaO&5i2#;>cLgyhd1; zU+I{8XR`Z)-tvSeyO5enU?b+*wr%1r*73w0x$kqQBnpL8=pXIzY$uecDZiZEAN2Ga zjo-)Gzd*tdjj1JLWnM${kNN9+@r_g2)!UI*zpiZkvghJr#@dR=uS8$l|r4^d{7SB7n+-2{F zSNr~Uap(HUxvqm*|JLcq#YgFdSAtis$F64Vt8wezsaXF7-~OHC(u#lnL}+MXx_;`t zgUYYYrvBaQy7mWF&!?qO#iAFnM0jk7r`AhU=1k1~i;eaVQ=x~(=y%HptNoAGdS@5A zYKx~LeM|V&4>CK`-YJ`QCzjd>_DsoiXB_s|pLJ{oEQgE1sl0P!zR*82)4sWVs$RLi zIxw?76k8vZSv@*`2c54`grk~p#=p3j*xB?*p|f%5$3V`f9Gh+a zS-X9{?9Hc6t!F!S&88*9aPLHLuMa!9?wy$PB{9Fh5`@knVs>2aiI6F9Hgd=`2{z3K zEi>d+sm9sqS)7xaQB%^A!0>t%pPY4$4%nBv?8|P`njPs4L1dpRR(8bFo^iWx5_gwe zx?q1I-;+uglj%^0QPr!JP3q;dY98=^6b3Sc_K}FyC1B=d+%cnM4I-eS9Zw+~4kxw- z2fAWCxF_KzdTr%4BI5OmOnOhb9GiUC+}>?2d3`0DrRuh~&smdQMlCL61^Kif0~`dc z8iROA$(?R(z&}K2f;CLz(*7$%dYMDGN{W?d-kRyi=!iiSy3D)sp{cz&qAs8|(AgtEE(LG!bqug=cH%nc3j2^|rs=9sJe# z>c@}!GW|ZpWkq4LK!eK>kE2QW8!XzuW(tF>VN-cFm*LHm#W!a5x9fj5UAz*rEu-n~ z{A4ayiMfh{=3K`>YGB!!Obrz(MYm9=Frrv23p%t%4A6mj)FjKBel@r7T~%Hs4o^Ifd3ma|0Wvz2ppyl?8Z&-B`{}^nYp4Z zmv8eVY~Ub<9!H+Sj;EJhnXx3%c;na(KxE?O=xc{`NCcHR&c^Wxn2{UK{cAAMWW+?N!L*u zT*?DIKTc#0cY_CW-jkEQ$pNd*BIXLz2yz}ODKyqTg)YZt>9o3Dqq)xH+90F?iYA3} zR;0^Z8nw3#SQ!j8lyK?Ior%mB2J}eC8)|8Rfw0G){o05OQ7J+ySpo|P5}nsdf>~}O zY@el&3S>dQ^COdXl`HZA|93I@13byRShcD(3}e1iaod%WZ4Pph8`Cog7m}j(BaLbi zv28OL1RRcB*qc7zcYBKeV$m;=TiDbVdUx7%Yts3&8_KL*SHhN?5%j#vG7i&Dsp5oA zx2@MfzWt9ULO+;r|9CZUtJ_hG=-4zirG-Hy@g44isQ*t)`ZXN8NNH6-7OPO2)2WA4 z>TY-PqT1RmlgDMEghnmhsG$G$Oyct?-yaS8zE|^p+!eeWf~tc4HzK|_^X_-6#CzS& z5-RnC^eUH5sCTp2Mp6q8tnPH0!EU-FlXL|<&w}nhMUjgPx}^o;1L-`m)257vjGY;E z2G=G~hjzP;-{z*)UB!I>C-uq|UXFuC_KihjRSS)r?7QOf0D*=KiB)|fK zy^2(!B#Ks-6>Fim%{q17p!%$!~ zdi^E4`@GUPueY^lleUCcsxpu&A(u~QTcEFrTuq^#t^nd-Q$$AKf57tR`aFT8)_MlH zN-KfFI$a6D0y|G+p;nL-WY!XbJ(k<=$W6B;=1rq<(UH5Q!l9XGkFWheW`{!!2}A{C z85-3AAENp%KqV2%CI>4|!7aw|r#R++ z!b!E1-N7KCApX;;%~mwCrH2C3C86t3Vj1J>FKSZ<@z7KV1^@q&LJR)?E|%i1 z#9$z^LVO7k2JcRDIaD(yp1@VFRi2XmKL3+p5z=rMl}u|SBN84^9FtZ_+c06T*v(T) z?L)1#StaYjL51{=>XbbKNgrRbq*Se%{To9mxQti}K?@W)Qw`|2VqRJ|QJYtlZOA=jyZnv9k>W^fmOFZR1UkP^sZz&BQdaQdU z?RmZKf-zPj@9wd+-S$V{2-==yZ0|XZcMC>S zFFRb9ozQe}^tN0}pM+!n zXAFtMKaBXljhcV%@&22j>*=uX$?N%{RY%`N9~{;(;VM^2VMuw&(L}V(-OyJGtC4n% zV$7gB)amE6n2ceEA0bi|8`bx7E%;n4g*B1Ey_;BGxas@Pc9jOGr@BcY{f+U6*{tL8|FH|AYMi#>+;6ns#e8P>i4dFH0 z{^&^B(NW_pTeb;QB zHGz3aSC~Z0OWHs_ooFxk;^#|iQ}OZ1*>1mK+=g!KHuk>VS$I~{nYYDeGF>&{2~}YU zZNFvAzGV+S4Y<8Lu~^8%TZ+!vgwEs4&1WWB?OP7(XXctuwXs*U$w@=sl+4>)@2R^S zpI%80+{oYgZsXMF`SZR08wZ*FKPz4OvxYN=!HeT=fQgm1;*;*?m++25dGuR|{|S-~ z3r(MAqBet$%@lHA3zf~g8TAK6ihCNzOR~Vr)-#9Yzq&a2qs7Uwv%`_AH*%MsWOu$> zI((G7Ua(F1kd@U?%LV88`-#=9$n->PzBIqk@%MWz|MRK))*X4|fewE??Va+NfdAFD z42>t1sNht~_IFG9r$O&yZRk&$=Qf+(>)3c@vSV&_Io>p4Ubz+QzUXf>$<8J46@Sx+ zOuOIiy8dZ#K5aZR>mMu!23u1DBNMB`Q-}36Z_U)6Uo0nG>Sk>6R%C2 zU5`(VhbO0Vo9COhJ37uKm!`r?CD%@k_0~{uFXn=2s>M3Iv37DHS6D{XYXQ^axxjjx zb#l?$+F|XCNBw>6=GJcOP&Zmvs;*?wm@1*%$EJtLBn3Dw#D<`2a!hRZ$vi5r#n{>I z92vF`wHqf(<|&6}QLn9y`Y^N2Q)6}~Z5?`Bx7AVWQ3X3gxneGn@g?0EoxFv|iW}t@ z1hjgX-4-#+M(Jf1Il`so#H=1EyN5%K@#q;buPvA=H#CjsTio7AK;LO^taHS0n>3(v zl{>@TA8KpzSkdP#8L+a~5bZ!CO?q^kMX|wJC7GZiRmsHcMo5!YojT%wI07J^mKwwl z+^YAPB%Dcd$yv=JdIm9-B$g-|Yts+7wJmy8F0F5ZS>aN*QnprWUiR2V1I^>!i4lCf z&waK#{lQ))HX3mZ*aGLA-VK-Q!f+s-)-j+rtC|E`g73`+&-k$=uWcldxlkWT+M61~ zpAXsAMvTLwSly(-HSf0<%eML(8K4>-q$&Y)h}3m^A1r3?jJBNZxjtPtcuAJ$e^VQ}% z2VfMOEfXj)t>1@tPsNvpLNz^3=&J<6KW^!SmKCZs)g8$5jMczZHpa@*au>|A&aa<%nOpqY#L8SV~Q~x{IePmmf=km zARjD19HzVSG#BQiiPcOH>KPPRPCU9O!2bX;btrDkmlAl)BrvP1$q@Ap;^{?4v_E1m zc|(2n(7eGvD#SuEyD?cCUu!TeXVLSG)|#w}C+G9DIx17lV?~enpDAaHbX1Za!o^k9 zJOYUst2J#lTP`2-|9Y( zQRrNuBIn27R-!FZMT*Tfs#G0_s*_Ap0slj>Hcvp$wVT=oEV*_)g9+vqmR?`>gx(gb zCS=_8)2A2};GA*3?1|l?Qe@CDR9OWW$*!t`C9-4w7YRAMNW}RAwXBaT@O2BMpig$N zMaydKywb3O*X{TC95>^mf?1ifV@ivQe3QL8m#V)m+C-KkM;-I^g|s+JC3bmiMbT z4B&qXsfy(=?Us}O+2?o{x8DQ(pUV!gxnUHUGuzK9(N+ao7R$n7zE7)3^5a^0Lql8Wbo@S7R|O#e9^ns&{WO$@7cZUQfvmp*L)FM#3K}IiIsFB#PtnQ z7^EYRDG)-ZFl2O&;rIEU%5p0#Ej*QjKxV*JFZ4F>MRr;R*+}8sQ9BGGl74+XIpqh=e{R0UzJ!^kQ~PG z|Cax&NR<*c#RHq&zt8{Grwkz4Pzeg?|6~v~!2b~*Qe?=k^RZh($Bqb_5SkvK*}a&% z!>zs*b)8k~uL!UK4)RE9tz$~HRDSg-GVwGQP7n-|S&QNZ;k5ks`JYAgWCK4|3r9?f z4H-X9u7K)B#%j!U88zS5n;)UpO^?1UsSoywuNx2gv_J-uBvQ;UCg)My^nsD|a@Wr=D7 z(e?h8|I6V2r*a?&0M;F-^qt{L2Uvo60bsngU#ws3T^%dh`=9`t{WEPki#Im8T4VYN-5 z0ZIRYK=qo;@Gj{8M$NWby^BSfkg*}l+JjK)WryXxB>vQDd|6|712J3@s%{Ci!2eHm zmI!Q`2znWy|JNbzO_y`uMWR4&0F_SQV)4N}SR#N*#UmDAK7_jj52kT0_55E2io>6eEo+lPU5X)KW!bf@}_Np_uV3lWyeGLbNI| z^)!?$khx3-lK@qu(3?T0(Wq>xn!*(ltJ!p_j>!V=9}ZU{*kY-Ko>JidQ&62ohZtxKltt-J^*z@asQQCHfG2-}cp80P=k z7~GwJ=bFI<`v0sVIAQEr)F%>!SY5#tUrCINCVOW)ha859kYRJZZTzsdWJ-`@I6Ogu}Kr1g-0*{gKq^2}0 z3%7^E*`0>Ll|cK=+J#?su6)+8n{e#Dm0$Qy=JH212j>I(!`_v?_(5~s!*cs$cX?0Z z`#|n_io_BE{U68t4zrHQ5U_+YC4=+6!xQGIZpp1T#f}fK##fs@ztH=i&MfS&j-~G( z6t2IT+y8mv)o&N?v^meDu${%=@Xf%PYtfmD(V5|zm8Qo#ZU5tH!+-t^8@wU+-&I-f zgq?dKyAT?gwGJ{B){O1bIrrbpPU!hmkw%bs~VHQZoX0{y=&+cnuW)jR!md&?`ekvGOt4`=I2bBoS$pUmb1 zIFdWzF03oJwh@ub(T;7W&p}moDWG$HO-|e7Dz=JH5d<+`3kWcNRw$bGcQ$ z_F}>PXd%4SZe2MO9&E9nY0stBHi9!t=FSe!;4GCPCy@kPp_N7Vktx9cJdVQR93Iug zYUOsl%Zl~&d1fX&lO0wVC7HCSmUQZL((jG9?J>+4HMZ-momL}cdEz~xL~TPPWQ{}; z8f7b=8H3tSK0V8$WyH)jgg;6n;#^vdh}prW1l7U?0W&A&HRJx8az~-5BjJfhY~7*O zyuChT(v?i^ronLe8CG8~H3oeR23t9bhUzWh1vS=3Bcg0d7~mfsQcgP*K2!l8p5_7n z6HWs)9C{k&CLo?RV)T2}6P1E7} zSx0%?(m7&jFUQ_In@;wJeBIW>rrUMaWxL($OQ%s9nM|is#SF%S0emHdP5DgovC!rA zXx7tGj=V8$T^qAZjo91gtnU3LydiH+kK;9)p5{?}t_@#vSk72Im&}m^W5ZR)$i+zM z!}j#M?YVExCLf)Rj11Z7WHOCI^Q<^cO~z=gswt*_{Y=gG&(!^NKL7E+rOlTAz7hKN zI@)yJ8J!9`o4TB(F7sqx5X)zbwPDCkgzSkpc6lK9!B*q1R?GkH?WwCz`;sM(9!H%V zI-68Qg#>^kXb1iL$p3TdsM-boe0t7zeJ=RYcy@E3y(3#RDN@E%GG0ohig8zI(3os) z%C4@}jFr01b`|>BB8g0^vOCRPGogtAcc#NE$As`al}AN?6gZQWNm4R-UZoo3FmY&3 zhJywuhY?!Enp&Ho99DX*h&n_ebF?CKEU>Z=`miy1w+k(mk$SzjNz9FtNlYSirm^LE zM~@J*0xunfs*d=d2%eehY6YF9gFYOv!O+Ms*L!?x0PXQrWS7^}*c3GRbbL%jAhBfn zq$9cDi1q~Wg45q?@lRo{Ua`R|*6ETp(bbY+u?AbOH)YcZPr+j$2sleYr2&nFMwd%4 zFU&GlRkDd>2_(*vP3HAR^QBsIpI^0IFemCd_1TiOzR#1mX^jsiVlii94;FxP%}rZs z*%)gb?C@=OS{I7e`hfc4pfgc&!EOyKqaE=-Ss7^Ca)x)=EG?11g?>vK)fCLeca}Xn zGv2dP-kCm2BBlXNNhHgf^%pGm4XHc^4pN1(EaJn>krK@RAm&Tt{Mrsf_XJ+kWnyvF zbSk1&m+kHwQpu>2eZ>DDJ2Uw$snXBjszjq|s-T{e#;UA>vjdowB!E9kAsLF7KBf6s1t()=fFuq@7ygcqFqYpEA`gHkomG3Th*c~YRwd)TC-rgsP2`J{ZC4sKke~; zG3NbX#FO(Xxl9(E9FeLxR?T)t=D+8Izp)q|!;^~yNe0Vj)?I`xCXpm3*ELF!G@ovU zBJhvqf?Zc(AA6E;poQV*+=;v#cD zR=RE}Z1;qw8&J!SSf;GC*PXdL62~qu7?k$IyR`rV{U1uGswydjBmQTSNFrDnIO6}W zdIgX9|3vl46G!}i>IE1)q67b5QHSmtZHFr3>srra>(qtN7x$gHEB5e#`)4=ZFFiy9 z4<+^kv3XV&a|#m#IG#Jw|KScDwhH`kIQ!KXf2{vgDx9crjtoW%0zxCm*hF2Ni-hUo zn?mD5p?#6BU6eT9HYIn$_L4_)IfUL8)YMCA`_g^q#?bLuGsgvpvq@z3tXu13IEo z_Q+*}dexj%xq@ppT-cegey7$lm#m#k=ev`o`cz|61MVq~$9q0N+w*8sqiL|r;L8HW zk$!KY({8K_FOBHY8LehWAzhQG*OmW^|Dje3`aj`(ZJa0BkRmfY$q-vO&6Azut49s? z-o~Y&TI&#~UdCc|6+`SXtCM-5CZ|YP2vy{WMZO$1pRroD5W~C(S=4G)ILI}DdPAVt zP^d?^62Sg8rf7(#?O=$;1=1C{;;LNxNQ7SCBYOfh@c%`L?pew6pv@WcqLAg`7WKn-+iALF(w$QvTRLBlw13h#`(`}# zs?GYHl;?Gm;Z2R<9gX>d06FBV4@H`1s5#EztGG>cl1^JhyxSgp%L&Ez)_D|!k%W=y&Tz{wNxIgBg;PVs@gTGE|K&)tSZWtLb8%YMp<+n zPvqkotQBPFzkTuKNt(g1rBU^8DIOX@3j8mu2E!MXLxr|$kf;RUB4P3+G`5Tg20w~g zAogDc`LJN^GF{-@JWqvZ^4 ze}L)Efh1B1-q&OPKfVP3{r_L#f6)Ao`TrY)Q!03JI4gY4|Id#bK>w##8->(t#YwRK zj0kygm?@Mi`}=iBO|RWM=;`WSFk85CTc$YNi~^ z**Y3nd?Aa}Ym)IsOSE@GqQd5?pXi)!a@_ae9~yig zC<71VzAI5td2b_@1CRAE>=4rV5~YPg7a@A@cESIvsnmV5^@h^(ezCMdAxyhlm z8|lT%(b1RUEhWR{ynQ9$?dggSK5H7k7wQIbn2$~lv}8AyS28`HHkF>%CGL(Ep3T*^ zOl|tRXB6%bA8|>|kwD*4eqkjsK2ke6J~cLxTWoDzO08b5zq1&5V=jF4SQGZPfeXVn3_1k8 zrNk-$osAe8o9!(lXd)2x>W7DY3satjF55z*ZN{cuK-IaFKVOU+0~q4ewOefcUQ12U zknInoi!F(uF`Nz{@{)$PAYydzXj!O$7BO4J>?Ufp9sK`%dVyMPFe&%=%s3Q;nw*h_ z#z+s5#D^gT zEM<2SDg;OTf2{w*2gC}6jN8ef1mW(0Ql(*%9Y)`%J~(TwT`_gns&WQJB!?C|Os##r zYS~H{JLfm=#$pSG^rX2kZb;<|^NXoiUm(=xa;~_oXI++u?VdzjLne~xu%t_&UT!n3 z#SDG8`chqFv)NytO}Dkq%$sIrE#q^Z-fg#Qzs^2gc13%_sgat2arcx9T{D@sP0pL9 z_@VvWVf6mJboqX7^xMx2cn!I%Efcbv>)d9)UD7)kd-+c9yK9Ya{^;D) zJCm_d@FD3nTm}R9pUk4OPz`wUzvBOjY7U(`Jm@$#6?i-zJ2#kX&J^W5k0le!w!|{U zjJq^sO0~7*E}g4g>S?>uoV~yiYXve1X2a^o0^R+%uU0M62_XJic@hp3fd9!tfuAo* zX*9zi*Apu_K<~i+BC7;Vhs`ZxL8LR{&6YEb*nZB`8&aLGGs1a@HeRwc^tuz*EwQ0sG>JD1X>8rj z#I7YVh58%%+q_$C){C8ZUsAi>9mq9@2m~5bP#*C=Md7GhM6F9Axf4Wt;C}|qmTrh$ zSoH3%2R5g?b3K-PS`U@ca-^Ln4Et>#$mMB~C@K&n`5Y&WW`q+KVl^2IhS@UKG3P1| z+qgWfh#wQeQm}17E?AN>$4(!mBwz+gA20meY@ec2RYW44%A!|RR>Ro={EI=z0@uG5 zGJn^gUPO?FUZJ$i5_CW$&THTUfvuQVPYt?W0t)J$c zf72cK&Y<%zHWIY~9goQb{|~u}W6^B&r2j`v;5QcR38`8s7Ufy2ludUxWcpAns)cP$ zxjN6LA`M~Pw`Kz09}j%i=6)+^`&P#J#~IHRZ}hTn;Qe512h%?EST6d}MmK^-w5E_o zgsI?Yo>0N4Iz@x?cRssDE-YJ&*Il*`wCcI4N-jv>BpQb+avMD}@}xsug83~Y>P1Fk z`h7%yMvZNHqx}wODm}C93w_(*dRb;{2x^rUEeHBP6++0<2-GIn>J{NGjs_!>r94)O zK+v6hk;Y*pG@1dSs6?vPkU2bw$3WwXj`$xu3>DP^0&PQYc@yNU2yh6gO!AR1SkwRsh}9CQ zD#)&)hROWT<<3Ki`JvEqRqQy6geUBw%Yoi|GS99+e_4P+F1SW)RLKfd(otgx+&&!f zKk+y`d*uIrt|&g|e*!dW!q)(TBs6WBHNCrvzzvP*w#xdJE^y#{?P~bxHGlBD#c|K| z;F9l)J80yI+;vZeugJ3zSuNod^*R4nyh!HKoS@A7?&bwn_85eahCf2C6!NHUYL$dV z)LQ7G0!?;LY`rJ6P4e}dGVe1iv>CD$z3MXo<9VIos>pa>Y`!fuY}dGW6bAHv9`nCZ zCmz&ER+v<0-Djx0K{MY(3lq}lZt*Miy$b=IYHXeyN-NY^%Ho9gQvk@9@9?>%*~pldH$ z2D+Gl(zZ;WH{9VcG{$Gf^jdIfOz4#7)VebY-7xh3vxH4_J~(rp^ZzJMa;P)H{_hM= zHZG8z5h*sk#-{ROf7Uuw29e?wGEu;_po(}xWQj<_X1MPT8dMu$+gY1wPNJRRACG8r zkVBznLx8L*R6|?|_lU>2@1@eOnJqs|`#wT1W z{$ecl)4{+mGM<0yj{GU&{I%Nqh02kpi@)N3B8zL~vP@ErTMYbPeTvAhVmy@Mf39%C zB-u}_?vK3qkLIJ-XM!UE}6{C_0T9}RLH^FQI_DdO+= zAI$$JPkhDyES5v3A9vXA8_{h#%?<;6!2hRCRGd0d1xEn?3jZIQ_kjQZ;1B+&;ziNF z%Kub?PR{Crr$Uiwskn~Gz{S$`Ud)&2az+MIljXQMSBS-+xMa6JbZ%9Q2Mu*WykoK^ zlo|=qr~(R+t1>j%yXzS&KAXRi=&a*o~GC9yKaV?UU$`85INtLx!y-o=e3siV{Vrd3bs@#w@bzn{=nvM<{Ixw zTsK7chq~;Kn#XSS{$juFznz)hzOt5k=}~s;S$6rO%&qhBYfbpIH){7jE-dVZX6JJo z19$d2{$&ru|LElRu>57Q^H64jgwDRpB4i4LQjEbvG)Dh^&ikX@$ZgDYMdouG`ib*_sYi+0G+bqi zL*}hwY_-4q_IR;vV&31qri`IWq2gl4#zE7~&CFX% z(WUotTW^)t6QMIDe4?doD&fB9vs~}>y}A}XU$!l8rp8Ai{WHn@(lYSBb8rOj8S;*A zkmxdiD;CQMVG{~XMkEOp{#hQ=Fdtg(cPE(0G zF|&hAQ1Iv}A)^tPA0lQD{sr+LK87M7Id^~sS%xYp1O#Z+m^nLUjKDzBrn$30oi)k> zd40a!(lphJqbm@*2$^6$;=T0htR&ucZm*|1LU;%yu0V0+A;A9T!ixvjaZFYUKma~`W#FYvVa&c4;Z zwc9rI!`;qrttEDsf_7BFrqRIvLuD}-d|0+R&i{h`UjdEulw?*n1D5Q8z(!BFK3*2E z&DLzVwk4UZ&-qFt)=YPy_R3k`WPkCka`=)+>1DA5I*YMx#M{~Lv_#}0jev0aIsb#p zodR!zT0^f|)y-kLsw-H}`Cnqu7=tb50*uvz+r~zt@C{tuWbWQj!$DnqzfYSAghyRi zmzW(TRx{`{Et3V)ghe4{AhVC|AVB{=eUiYW!%DABBCCVO7~p?UFMr4Xuq1_I+G4#Q zF)Cssvnc6c)2cxMP zfBl5o+~th#niE4BPhq4ve7?wyd#Sa$0UdhPTtop&w0j9rJ&KQL|&vuaL=5 z4j_|B2Q`ZMsPp>*W`qd(e-*h9#cnnR-|uk0Q*u1^Tec18o(5f4sm@ujvo^zq8hIyV z|1#tJ>(;=RUCw{Hm>$mKeAbcvPbP4Us+G>(T{x51h@Az$>XFQ+6g0{=I;hA{T=ik!lE?d!UH`)+T>TGh% zuTVG*ESetppKyv!tWvNUQAFHf#P)IXGmUBzro$osOQLg?vM!CQS($bs1-q_*MN6ic zsD4YKJwVJG{@}26veP-fX7zl}T?=pCN*0rp^11zDxHhygchH`?qEnY(Cg1- z#44*)Ky zRnA$xyF+E;kp#q3urowwXrxE{Pdws(8r`TiO#LtZ|0Bp5ig~guN9w7lpaB2F%aN&L zylPsGCVWS1xhBxx11rAFwTL#X1VUHBqjzPYJ%RB8Py346Tr0O}6eS8w37@EdR7hnd zB=@=S43NzIeg231FYrGwJn(^douT|y1!P}N`!fiWBva$%zIHm9fkZa95I{#GJy$WKBZPG9Hdssc@#TH ztlrJ=B=5NUyFUd{&=hF%$m^_d8 zpGnlKh25xRU5|``7IZ9u{z26#Roee6v+9D+_|z!dl5pyP|Jf}5M9S17M@D6ecm4Rq zdPj4M5zioB^Z(cU|26-A&HrEX|JVHgHUEFj|6lX}*ZluA|AYVk{}TT1mEhnt98;sq zh;~)0y=pY>g|OT8j;$K|T-Mta@io^p6^iy?ONXgAW2v2zMv|d{YtGn`AB(hm{mnLO zTWomAp}*q5HnnOf5nU9kriDrf)VI(D0~}ccoeL3Q2A}aWc?-L{#a)IGn4y! zZv02n;qy7um4an!!F#pSS4`-*R22$M0$y(hrU7mN9f&la$?*^aV?vR5 zC0JTKY>nx}3l-pkgCH%RSL?9vB9elDXy8;(xdalAL1mFB93sV{L)EgRKn%jZoLB)1 zbO@w?l*&57>1xO+6MpOe=O8@L$$3mGgQ6AiYEHdK0nHzj|K}E+ zD*ykg{O1KI5dvS4O0Fna4VMh+b8y%V{+|liqlCP`3&i96FZh3cYyLl0{*SFbe+1=M z@cd8#`r-*F3#~f-Lued@3LqE}CsC`^Tw01)AwrR5rMwf46=+mPd$Js9^`-~%^<7DG zU8b1m%VaM0THEJExWn3t2b;z^T4sCZQRy&?ifHwnriL<=!Vxi5Ub*hT?N~7SHssDZ zo^BA$PMQ1qYwNP*KwWF9+!Ahr{`g#E+UZ^QJ0^!ht#y{Rgt28bx!`Ub7g~CG=z+ur zCx)Mx@LHu-!j_{+yJw;fjTCZSx!P!K&*=DA<#=7;JK*bkSjddrv1#&W*V_iyi`z4S z%P-ZvvtPH=o4K?b|H+r_m)@&AI~N#S@9UpfzLU@H81Tz_`&qvB4Tk9S)BW!v}Gf;{rb4nZE4^z2wecz~--n?@lzYE^UnWtt96kW~XNYuR!N#S6jZPb^3m~ zdojFuEk8C@m|bX`s6DqAXnzv-zn}N5&37)(woFd6CCB%$RF6R8mziUDdq;eJAT>L9 zZL0R=me9ahU21uBVXyn0^R;iD&z#v0PF{<*wRd*(v=(B{zEbew$HnP~vG><&w%Xjw zSL!=Rd=UmBMHpCEk1d@o^*1zkM~9ld zQ#0Y!UVJrgUG!t?UV}j;$`(W3dQ&W~pTqTC5iC0DDE0e#`(hpx31BXhdHJ= z)Cjb|k*k#u2VjuAOtSY#qOTBwGS8t0l>A<~Mw84sow=ML+!1N1E#*VGj1BSWtR{mpR`gA1Jgqf{eO_5jp}>Sc?xYB(TcSDb?VTsQ*Y!Uu%Yd@-w= zM+1L?gj}VCPozQ{9EmMFu@h*yVQ3G@y#-ya$=S5l?zW$cSayBJWwm}w=Ug|X*Bxyi zPnHjg!Fo?9YgZ3DwToWERu*%q#bjbN1&+a}^sC+Wo9*tW9saBJfx#H;W~ZL?y?-O} z>Lp$6f!%e*YrC3vP4~ExTfW$Uy}LKkX}2vZ&7Orj{hPM~3-RC{y7wJ^~B zsGNSLG21Cb4(1A^I=sytcD+X-QVW0U{~-|x3?n`e%-_~(I#_fIObl0?B7nz3kM_!i zQ7xVWZ$F2LLbah!5?)I-%oKXk(a~XD%pD)}IEzAwfliU}I35y_i|8{Vjb3eQhk4nr z^naRBrbsIkU3`J1ngEBfdeHyj0q=@*l2oqL_?$3l4{=u}jVICRbB;)l)?T#QnlXD> ziPd4wb^&51k=VH3-W5@g)nmh1Ea;a}p&N#ysDc4oq7uRd*7S-kwZov9ASFTNis?e8 zE2v&51viptZy5A{Lw93J52oQ{$G9KFeWA>1%y@vd8=!{*qq##MxgjmION{U+;v zyKSQfVj4J+#H@zRg$f#zp;My$G%|GWxAFxh=+$S?tPQ>4D;trWdGGl#_wKMGo6wO- z5Vq}j27wQupA7kM#|6F(L)Lm0c%JytnKJ^G|#!lmO|i17YV}_`!b7@k#UC< ztYP@!2mQaIfT!{BTBf+9K-Vq$t0C-smy1WE!MBfC!H^0{M)i3_K0qd7#7ZS@d8kvY*mbuUL{;@^ zD!Gzeifi8QcYo4}|Dxo7)n&bdV(SWIUZpr|(VVqo%QE>JUhDVs&cDd}e%|2z@tFUx z#Uh3(tqL-kz_A*()2^RbG>2}>AA?~AdKrC|@5Ibsw)_99h*v`)%ZaDSVwt4WV;zi| zzFCKV7ID7jw*74`{DIrCjTvs)OOH*q1HIwE=h((|(=okF2m28mP1G&mxnZ7wc$&kf zM7fN-Mm7v%&Q|n+Qq~WJ_LZl>WUo+2I%QZ!n+z*67JWfK&}g}yw(T1YuWF%v!@cYn z-o%^FSp%QCJ>OTkZrZGRy-KK-gDsyf7PBO3)G^A%oE(7#%w3@WpRN$VWtUK?RI5gW zf*LM6T3N;6X>2rxfbe296=LjFG_dHrDzUAHL%-aw{ctGzn$7)&!EsY&d0+0lC^V?5 zd9+g`IMQMuvTBl~iU6AwwCZX;S6X-CMCDihpFcWDCTT^=JWFUk`HhMr{r?n8hD0GL zxyMJ>c$z()?xxUs4=XpI-i12X^QxJ*OEi%0%{nD=Fq^%R2cr~>7m|)@0YN% zOri$#e=gaa)+2vDn0Y8Ry(@KZDDAfq_eGoSZj-ygqgakv9+(^#q{ffsjsux-Eo#@v z6=VpWpXSgAh>#JN^ZIkHpQ6$WP#0vSi9nA|R zn<)CDy5K>RGZw=PK54Hc(j)Z_BaS(_eo3$0w(GBiOm~`HOAU#ErgCcpTEY^klHSwc z)aJ^8)|+CpFW7w}R66ijB27+bgWcZeYuyYPuDGyOM6;#REejQkd}Sw70-G9RTty3v zYtvw;OSmOf&vTJ^j(mx)SQa7BsNXr#*zduH1Evvwt3nY(v+W|M4+#ZSz5*(piR}Hy<2Kq&*+#$AjSFhWaKrHvD#&e0K zfX8E@>8{GSlfokoj80Kv`JloZQ5SGN#)r$8k{2D;>pxTBe=2v~;%hGRRG0bc4^+nY zz4p(;?se`(>Fz++lg0T+jr}-=|4q*OC2ILxVfs>m-{EWTL83%}#$dID5v388 z61T`W1aLt?xmF}@?V9&)vp1?nH-?(bWzf8+PPVl*C@u@#->z>eN( zv^`8&4{^g|r}u(UxFO+T_@hJa$)L92fFL*9yYld_RlZN9<{zN=kA1$Mj7OgpoNtspugwPUta^PmF(QiT6j8r5(bOIMV!vk8 zt8LS%ZV2@E#rnTic?SemZUu*2K^KaGOoahrv+(l|{Lka04cI8EYZsHPW)fFPf=zll zmrN5;X_!=LM@KNM%%f|`6%1On7~aW+f&lbj994tDjmb&K%T%&NEH+ojVVZbcTq16O z&3gFdg?^s@o&Vt%u=+XwAHn}o`45DDE8)e$0kKq;MP$8N#R8oI4W-PAlcb6l;X!!L z|0m!m?RU2Te|X~goy9T#gTd&97rs#mbpg-$|Bt|K^oJ+lb{_a2D$^+htx7s6lQh!l zb~qUAh$p?n0YCT&+MKqAY$-KYjGiCHN(&;J)mC=->pD6cr^;PCs*Xk!ie)iNT|0%u zQgFO2w!Z5j?-J%7FhrNQ*rYl%YwqhSmTK!$`MOAbAztiu4t4}bwe~rWZL%-anznY< z*n4_Hn^2j@$A+26p2+fs%>Iedm6xG>rbw4Ict+}snPRk%OSl8OPXFgB_Y;}_G7s%# zDyHR@i{8M*KyGHe?%Z7H@P6shN_Mf7y?8D4%g?(HUn;GSmpbp9Z{3)_5X9Ft#`7BM z22b;v$nk+J@Qx*P#TTi`)!NG~N|#G3M80cwJQkZikl}|y!|RCsla&xhVrZPt@FY0^O5oszyFZH`a5HF6R%=M5k_Mmg-BnuC;i` znXkd;eo#NM6MTCixz!ixy)ax@8qAHf)Q*-DT?K1%8BONB{nO#4eKJ+ffY`gn&w@<9 z-WyxH=;;|x4z<*e)y}v3=cfZZeV$FoEH~pK zy_a{VfNvrzkvv3}b>_3=Ra?fP)p=l7{4y|`*AtUq5gnk3MsSWPAqg$%~cUdP>T z&o}#n*E)O?@!)DEaIN)coB7{dRuvD8_QQbVYSy{Y?2k_6qNCoy)_9N6v?NE*O09Q2 z-J1>n^`P?~e!SZHz1ifQZs#jA{wq_?;bDt6qN2gB)kq*Q?Me@tW=Cy1>%Lp-!H?Er z|Nd_Cd%a`d?LN1cImig`zMy}&HqzH^_YPZKJm%7DgtqpiGC@_aB8 z-<@~&_c^s%9*53=k{qy(bD+74t%gpXBmO@PJ#A!%OWD$4U1>6xVwwORluDf**FaD6 zMtgBGTf7u$*aCmb3O?T7veBCONNvC<)f}xUA8gDN+pSVeC_;Yc{~@y3>QMfc&Nhsw z>**BqxD<#$AqbViW&zJ7)A*|iEDl3QrwF4+cHHUejWregy#r{}8R^IEA&x@MW?*cV zl}KPCXj-7s>9va#k{pyDcs~SJj8GDlDzXY)ibxdEDY|3+hkOAPGDu}owF%Q3wPG5V zL*oijkK5$Ts<5OH2Jy@dDpOXAH?l-J5|OFVXnGT>v66l;qYroyGMPeT%d23ku^M49 z9ijHO^v(sSbO!z>v)D{2+vY=-8~y7ktT(9MFB-d=VunDIKHX@JjOlHCp@y`-X}|>U zf`NWxY*^npoXM0`67BiUwCH!ncB~!r1wdfLwpawZerie3{8V227 z-xI!cHo7(AzA)~(GUoK#WbpDi951O_BoId=;vk!00{%zDEk4r|I@tm(UG=qw$!T}* zynkvvp+a#z+G(?26mXl_^t6IKc+CGauyc?pMw8=uP5uX3G(~4}h$Ko?CGdYWw3`Mj z-@(yGD)E#?(L09)E~^boJms2LJuO#WQfRg<_PY_wLAz5(hYKwYG%g7*Yf$e?#U12o zluZwL@i&#C0fTZ2lAA=>@Tww@7VN*AjsCFJ^H+8L_Z{|Ya&$o|pI0c>O`0``6-(uh zE!a=<-k)azKdEv5Y#=n^wabMZ;D1sD!>m6OwZEeiuUK?<;r>D)S`L_hkazs5#q%He zta$Y)0C=(`s&j=^Gg0$v5%c>&$J-wK*Af3mR>z)J|HR^dP4C!N>UW_?$YmJv>cCb= zrPC1HEfC;@YAC(iY*}QLP zaA?l?uGD#1pmz~DOh_RTxjc;-3Zp6@TvJJh2?LHObyWU;Y|%OKjS3DYD3I6CSSm0B z1OF3F(qxLLg~WX-wrucp7kJoxk@JDRzTM#&OPe1gqpxb3u1bRkQsZTwwo?cGpBlo8 zWZ-}JyRdTsD+#c91lyp`{XdW|e(@{*KdKx7{;xhoim1y|V)IRv%hwpTs0-ITSzi^T5{+{{^qUS#gL8 zXM~Ihlc=Q=HAj`6_a*2QuSM!XJH<&u$}hhlTUUS75) z#{BO8pRV@~a^ueL10gZ0toHH;0Cg+?pIgy;G;SqLnKJMF2~3u%QVLY;(m z1IuJA>AblBj*l=HJfk#t)P{eAI)1PB-I1Bk%gi7M^e<`04{ac+AJdhqVi~#=sa9wpxZ8ZY~X4Y5L*3}%Ut3Oh&tPuls$KM#dKiAnm z*Hb@sdVVw*cq?Q7tUvO}YR>rDHLD_wH-AK1~4WA7jbo+SR#qSxtX=@nZF@!RnekQbiCzk{v$!)H}2^Dcn=bE9rM$3)a z&Rh|!^as-oL+jNo>30ALG6!y3iRQE)wWYXpyVQ;FXTp_KD)oLge1<)_V(?4H`u7 z7ys_Fp$F$Ww-);P-dbGQ=)CBlPD1#O3Ez;J9|8Vf@4MkmY{k>=Y}uI`$Fgx)Yy5fj>6UpLB%JPemWjWiM_FEie4$((r$O^UB31KOEn>kh?h_+5UQJW%CE; z2mb9`-#>qGZ2w1n6|jtWnXtdBx1Uv7uBa?;=&1X+L(Ucv`II%%4#D&}FZCeox(X;| zjrHf=zzxc=uA%O@PELJm9|*lMzHgoL`f-$0G)4)&dntz25(Jde>9m|oQjQg zM~AoCkDW+wUC(bUmdEZjogFBo+m@rDKyfhA^Srz_9{pe@b9yXU-dZax%#;T5V-wA( zo+2DcsvSXVt}VW@Co;JBe9Gi2@kBbb&>mPkVJ$WWMtXCj<@LVU!hFMpsnD5%cVNah z{6%v%geOY@Zwr=bAZGLSu?QKT_H~RGM#gd~@Y(Qrn25EKN7hiM03P2%fw5XTBmVwU-0RCUE z?@Z<&5%v?#wk1#7WmBZVTx_sbrpBYeb1BD34BfC07tGWdw7eU?{c7XbwdPo}&*Ri9 z$Gzt5Jbnda1B$?+9Ps}PrI2@RfPQ7r`NoLv)_`|3Os!-iJB?qTsQk-0r2n#szU^_| z%6m?9c=D62<>~lPYhs3W9M__2TKmKF+O^8xJQ@1vmn$uAjtA~9_%Dw-&dt!nQxve` z0#m(fArzW&`x>E{3ESFs;L^$P<9Ywzo~?Y`Q~7>Z`&PKaA;p?}nSo+zu-_gVb9#sR z#@b_*R#$N}VUi(U2*27{JeHzgod}#-@N~7?j3$W~5V`e0pTkyKU=xxBj#Ln>3043g zUfkg_R{H4q3Yqr7LA%qSjTDmWL*2I~TIS15=d;D#!PwfOcXYI4up{=C#b#wQ#3rcd z9m{9BD7itRG=RdjZ~VVZK-zm!mrd4T2=3xAbqArKN5JluQi&o8iCb&*^H>In0O7Hv z4On{8O-+Of&HnyDA`wWB`|V*BqERXw0)Yu+LTXJB1!P8{X|24k7VJHbFnC;8VMw9G zpe-`T;pjnq;fo^RI!3LS%h0G*CddpyTDb^lofH}@X|-6rCM-dtX)D!)IGRjU17BtW zcRiU%I+V3cH)2CM%tM*Z*KF-+i4fr;mT4uzIeQOw*wy)ICJRh7DwFX~cQE&$(4ZAB_aINBxcM zB!@2siw`zirBp>Q_#8MDg}jJD6$6PAAc3K|FLw51XlKcHXUTtQ!sS2}ApTt<34k4k zTosZloKlff%qK0nnK1FOi0c$`1w&ob$}!K}@xbgx)iYb+;p z@SYLAOrTG)u9y4VD!zbMuVmKn)RLqX-qWhP*bK8tv*>d?H7dq2!v?or1Hx+f_1tqE zo1*T9za9Q&_QJF`eSFowVh3Kl!Ze{JKE@Mx$&6F*1Pv4-D8aGf3vQ-u7AFblJY} zyMdPY`)=Q92z}k^dV)H(HOMI^dCp@Q@|g9oip%9HA)8D_)g9q5tK~M$DL?$SNjpgZ z7qj`QTG_#@RfGNuJ_A;3^C~E6_9dZ$)73(DRIm#{>#I7DbLiMMg)iWli_Xl;;jSn4 zz)#G+FDPf6KtvJ{Q7ZvebrKz7u;p;$MU6HE7E&OHtm=s1(09QGUu4jYAkd6LUgGi) zsm{vgNa~L;I8{s)gFh(IJ<-rNNblFZ`Dd}@tG2*92G4D!^&Jg}Rl!;~YDo>q7?5ko z2%7;SKopMvOY%J>y)Cs| zkXaw90}rgZp@gS7WVw>`zKxGuFgD-Ny3WhcK@)9KN9w`5<%>9RPzdrZ|Nkfd?*ac0 zl*unKf%xZJ{-2$LO4DlFUC92(lv|7bkJnRYu7({G4%0Coyzip+oq_w<;5&N%O^xk~ zSa=rl%lPIO6#xhNAD|NhDxI1tuwpm@-l9>>y4QSyTVGDu&o9D-rYaKQgpiCNWhA16slz^@kd0 zd#^t^k{`X0@m}(hYkFv13vWn~QIWP!2$Vm%MU`n@q-*8Mx_HVtxo%RZpAu@WFqj^>YehS)>nCD*{ z;kX_e;;XVOF_;1xxRM})HzCvl>%o@FxCh$7q{yO3e@2P`8~Aks-%hw;CE-OLp{W8C ziJ41&x?&gbV7-_+O;Z2}eW`K04zi)-$d`J@uYH~$_#D5?1*RpcVS#o;Yxc!`xaygspfC zls0nok%G7&hkk`Reh5*Ypww%a^^_6XfsyNktTbw@xjPgV7y!&OyBYO7wV1>clc3*J=+{-AgL7rpxRTQrEKrFl6r*p%z(cc1PoY`E|~2q>elzcP4!r*oZCJH*xe z7yN&mDU<_IJ;2N$NM9<78})4{+M?l-3o5)UR8j`HgvFIHIBJ=cHqSWi$K+DvAgT)# z-`7cme1csk|3?4MI9$uDsuPO^Y8@ux!w&Zeu^<3uia*2u-}wgrgRATS|9`g%;Qy+B z*Z&-t0)T>ut5U_7^(vEgMj_4A*NAGXKoo-tT#vvh0P=r;_~*|p0N|eu28(a?Ki>r_ z!m7ifZ}30(4D>(XM>w@Grw$def;z>BOp=yM^FSTZ97qL++uZ#jS69H%)SXT3WYfoH zkWwEU@Vd&bXhXw9zA@a$0~LgIAOKZ`$6L6yd;wE3U~k=M&K|div!2qTmRgY!bB^** zLwm6+lTL*~ZnI(sKIwe z!j@Z-pg*|F)jXHz$^`B9OVRQtRQwH{Z(C*t_?fQft$J*Kf7GGLc?J z@VjSoU%fr{^mPBmR`2Y!f&KRMIhx!wSironE`^?`-TPMmQ%}0zUm#OCTY3nqq{*=T zO$+rqga4VDx~4=Q!;W`b{TCLK_Xgv8C))ZSUpO`YUmh&~;q4EWcW;z0PbD`$zIA@| z-}d_d*YUYezc)JkqxRwoWV?mi-_TP4|AQku)!6Q%v`Q)?%4vJ14_pUVoc7mT&Z|cJ zlE(TId*A{}o&<#~Wd3OC!QkB1%JfgBkAJZC{e=f}>9wZt^!=XEy^hm8edDWr{YN`r z9=yBn_gqVPzbuB{&E+R2yINQ0W)}M$`GLsbd9jL?!!AduB|1ADo9MednE0eWu{0W9 z>klmKwGN$3FW+q0o@(gY>fJon63%u-!ogUBuYbScW_#$Znbbyqx^nVF({yiJhktXf z2rAjoY)WOL)tE0fdlruOOI0Bx+%A;D?vYvd=p2?SQf*D~;r6+nMBmobg=6XMgky3b zQ24Z^*cb35?4Ab1pMb|!Q{!MIhypHjo3E{d>?%+;5|l0zSb1ED)9_=I!)Y-`*xV0NS&IOcGzsw~?O{buF%(}sIr%`gAtXy#g%`{lLJYOi(ksB3VBZfGKm zF{5ie<{5N&vmlw57`hZbxgNSa5&UW``)+UIllF$Aw3pObi_z3bL(9;hKQ!$1_sxv- z6-pgpe}C4j@pw)6wf6i_)b{d7VEL%OsY0mL65&Dq4-4r3HCECaUu7{xf5QKDECBfn z1JqQ-3i=SdHm6n@EEU)KJKmXSooXweX-(|(2S!JIontLcgOM|o%g$klb-Hk1CgE$x zgfhNV4muYO@IUA_bw-wanTr7!=6@eX%)ADQ&!CZlx3;_jX9YzgE0Xo3{CZe78EXO+^ z^Mw{38wU6vUm;=6yX2m*3eGgHWGy{ zw2>_h94i6f9U+l(Eeuh`DXmegx8KKK;(`@>;t*|Ql(!a zL&O5mAmbyUoe=RMpADWp?&Oet<9J|cD>8Q?MF#>l`$+=dGlEgKPNm?bLC_q~{|lH& z216&2l|6x1;_;g(X%h=2K<-sj&15t5q~Rt7-Fq2ZukB? z;r=S*ejlf{HKrM<7U+N031rO-?HbMZE%+az{?7vT-z2?1YxZ9*M$jO}WgVCcaPvvG z?Ix^TfVIbXpt;!gF$wJz>EC#acMxO@++Nu%F4l@ba_OiSzu>mKMNwb4TtBwEK6iMx z43<|dj<*o|wgTEQn@>A|7Rm_lKN~nbfWc8=t3Ptk5@pw&FVTO5G{U0`?11PmL(orby4)s`D%H&4S_E3#JGTS%IrQ2})p1bjGc>E6KeGl`0-(v5# z;Uca;s8I1FN}187LPHMoYlv}N%(d0kD8I%3LY=x7Gq0!>9a6bpW}tw`j9JA3!hRb^ zGA7YK(>oq(?Z1k~-f(1I^T$6nL~bd_mlf8lGHhLp$bhM^UZy3Jj9MvxJs>I;_(vp) z)Zv$yAm0Y0^c;GLDUs$RsyKMZ1Ngt@5R*|O)~Z}Smh8EL+y(ewLA{|(J*K055qpEv zxEpi4>m1)9doO7{mt=Uqo-iu|^`P791^x%|{-BMzrdkYS|1b1Ehd@LRpeup?AApT- z@IScY7oqH~*?Z4yf0b-s>iOfFsg^T->jC}`nXmZiJ%{}knR#31eW;`Uwk@`U1*BX9 z5MKf95WxQ;4q*Th@%1EV8K^!Y^qW8OLQhEbijeI9$v;X#NH1}PO{RM|^^w-`p3Zs7 zj9o#kuM{2UE4Co$j0r$bUE~wU_I;D%zLA{J8AvzG0km-S0siOKLnhfMumC7TEB}uF zO|lUQD`}E^#d3&=9i3Cg{iF5+>ZIyhpPUnQ2SaD%X zInQR=f1@|Po)6?2mJ=b+WbZ9DJN(UvDnPosw!HnP&AApCtjYUb6}PQ3HQmv8WjEqH z=OIt%O{+@iq!jKKYWjspw+LE-u?>l-?FIgylIli;T0qpF5JQU+!yabcE0)Gxj!_)y zc11kN)2^;VLugTHmM5cWWb{!(_nTW?2`UOV* z(&)OUFu$X;UX>W{f{tdXDaSVg{4eC8D#V7iV8$-Ep2dfZy__0eD_3<_W`0GE-Irqf zQur6J{bPgmQ=m`9^!2`(ukJb2N z6=7pY>JCV9(0hCM&>>K3d+5mF>LcH+t~*>WspdRUIsQiH`a7NbJq_`cAioOxe%2NH zDCc}!v0rGX0=U{JkA+*}P3`H8iTHdzJxf9J5d5Yb|JvaFQe)p&l0ty1YXlOhua30~d)%5H{#qOoq6QPo7je2E|&xSu166rA&@qEv4{Ir*BjNs{u6uPI8a}s*)yn z4E_Iu|Buv4B?6VsER&Po*jW$(3TT1vdMz%?JR# z03!ga+Q6zs_)L#d(jk*%WRhIn5lLIv6B=%&2Lp6Z(pwtI=g%h^M+UG=2cGad^4VCX zdpsF)Ww;C>8<>)LMx!SRoDRG?L5sE2H(1zm`!bHEF|&VDiY&M?gDr!l&P1>!>FjOD zG==9{Y<(y)Mq0Z2qYV`&V1^gU{+j{&jtl{i{-m0GM?<}ig?y@@h#^K3W@p>1yJ54v zqvWyKTBDQiIVyJ$-?|hYkp&gBA~8PFyLTe#y+A6KY@m}dBGHXja@LCXqSN;)o#&CtdQD+@ z3fUhvdM+%)ZnOvQPZZ`q9^JSy_3HGmZeM%r?46;#*^$$O{|uD>i^o3gxp(5z>5lhP z@eSB|#X>yM+V!(l*nheYZJoOw8S+u zy5rv)nYueVw>LNb^W#@OxjWi=vK;AsKAAn=vDMW!Io~)xcmDa&?ORdb<+$^=P0=SY zXY*`-d110;eiE`LqQmDz8d{uRMRJlHw z8a!HF-fRoSD{i+v+!pA%)^u$sesL)=ceJ4$I0{+=Z6y%=-jM3Z`TI%=lom?$zMgsS z;FjLn3i-<_#2c7cwN|>V4Q09^9qVr!9BrsbpOhZB|1P_lD?D3q~KpSyo4a{Qtgb^!b@;(6HhCIHu~t2lDR$L45& z7eFHL$&^&ESf&c?cxWuylJ6Y|q`Um4Jcc);h8COB=b;+24Kp!sTLYCCMLc5yiRT6W zF9ZA!82$tN|6-;9upb!hU*LbPfa%eQ+rWlPE$S2TTzY+1y8JQa*m0JZoh_rzhE=$j zgYt#3y!Wh++9L2Xz%!yIULgi{3jeejdF4ubJP2uQYQ=mMz0yctZ>Q8kz!Ecoj9#x6 z9PhS1UkW~(4Q^D3R)^)~?&#z8*ETEv^P2tSDGhbOh+hkNCQFX;R7bcs(^m}6SZzyc z%f8$9QPagw^8NpHx&8Cm*o8Lw?6Ui4zxCt^@8}fO*p49$X3u8IIplCf_3eGuj*G$N z4e!pF_xp>(f0%a|+JSyK$>StMO#> z`#n7$4748|DxMvRY>#^?O~Kyr3MkVZbtK&!mKZd3Q$;tKvw)YA!{UKMfi^LT42GS< z?#uOf%I?& z4FsYwna06nf}RnXT;T#eeHv55XZT#gPJ#+oAPl6Dj}~P z<}&nBiCU@F>8E*P9)TL^dATqaw><0_GKgV|A5Xla31Uth}r-3@b%_+Sz1&s!Zd z!R5+Xd|AHqm2yb;vy*g&z%jFHeL@jU-oi!2b&cgxzyaD9pYv z!ay=vRHg{>c)H#p-<6ZmN9SXoY{jq7dK{SQ1^)MngjSK%C6>Yhj!`Ae+mS0i^leVP zie1k=HtasT9@^cFFK;LPxe^M>qd?#XF9BLyIrRo`3Dnm>QcjW0wD5Q~!geVb*(wx! zl%TW);L2*2kmDka_w4Yi0v63?s3)QDNdtaL4(-T|mz3sPdh|Aoe-d|n+8a(HCZn{- ztl|pUR)wely1YefH-*1KV^?wAu0^vT=2CzG({uTqr0z#8zF!2~UwR$SEw*));iyD+ z++;d|S&u`ei)PCM#QIl$-%ovxPXhMeXMJaqb__LvrgQ+|Kr^omJ%=ba42nTMH{c^b zhE>PX=#R~^ImA3DU>o@oxx^sT2?b*gbk_u2mQ) znZZFr`!-|;1k%RBu)c~ZsAhGj^)q7K6P@!TjpHZg z;44_^b|(IrKJkW%z6nJ8GV66IA+Hhe>tu2>NYIr41|GbuOomdet{i!Z{SE#HgMdH~ z;ES9`05AGo&^OBF@?o`#OmI}M$*~=Y`I4M`PnUb@^tbx3EUlk)qmP5*YreK^B)BKR zJC%?{;RXCZ@D3ka<~5bHq8}8KKTOwqlj)u%|&xo^nww4rXio{t*21rh7G-$w_R?b2#u`Ern^9y zKga1$VEbo?b4;msMo?~@@CE*tv1&B1d|4~$lnO?_!T;5V#Ts#wgq7Aw8X;MiLDnGW z)2P>HVhOh`==Y+oJ26lY0+MC)0*-vbVB0EEb1q^+W?r|@tL5~5+uDQa+0*&xXt6ir zkLL>BSPt`b;`$_QtxUuxU$$g>6kr?RclShnh0=qT?CG;X*J-=sBy3$%;L8$tSZE#) zlY=T^5yp>;O`SYtH%~Py(TxbS<3bSNV_J}!&Y;AZT*H_bbR>b^IhO`Xk?jLw3t^6j zz3o?Wo$nnDdH2(v6*F>74bO`7i$de}0spU?0rDZOv7f61_D-w{Ix_@A%c11;Mq z_87B1RAHwj(0M7cCWT(1s8u(u1J+h($`nr;ykVlb2**7x_!Si&-E~tRr7aO?Xe&+9SrlF9rWCBG(pzXbT7_W!lf^D{O5v5I`Cz>6#up!xy+KXhPA2lMYs zhYtb5yy_eLe^){Oo!b+Sm{5p6ghRh62j7X)ub1p+n~63bK0$7Pf{{jEk9RY0!APa?%3QJ0Pvw-KRtCDobX#ZrR zW6b(ky(-Msup=I;=J7v z0<7BVV(`kP+_lc|oW^pmv+&@4*R`YZu`9`Q$8%TGo?Q|J_l1*c7_7|psKAClw-Qc= z5@{+QuqM0AxjfP6?k@R1GT85d(-@=xLG~w|p{t{zYc0OVW2xIuI_9od9{0bgl;|ZSi7QpR8DuRuOR9IHlTQ%jtN9cx%>c>3wk)T7S%tH($F&kJ3@0r%#vTMMa` zfz`>Djme(P{H^<)`CAF^j*t4PlDHQSq>c^d=f_IxD~LND8rT%;NU#4PE*Ce47?`a`|#lE)bo&ipM65_Ov-raP>_i!K}5=;3|f}KsPW^ZaV(v z=+ddBi1Re*7~CxPpD9IJ5_A@J4V6O6eRBzCXg*$?880mjrTv5P!5*@q6OZ@U8VAFx z=kdm2fd4_u5)*iJtAOl6WAYb4?lc$ {{#isIo$D~L6Zj6|CAy<=f}Ls;&Dtu3^n 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%0D?aOr0|Vnk<+OVy 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

8mPfmf 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�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 z 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�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�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