Merge upstream WLED main into GridLights SOL (test)#5481
Conversation
Test refaactor
Test refaactor
- Add gridlights-build.yml GitHub Actions workflow that builds esp32dev on every push and pull request, with pip/platformio/.pio caching - Add platformio_override.ini with GridLights hardware defaults: LED pin 4, 37x SK6812 RGBW, relay pin 5 (active low) - Remove platformio_override.ini from .gitignore so board config is shared Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replaced by gridlights-build.yml which uses non-deprecated action versions. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Allows manual runs from the GitHub Actions tab. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The .bin lives at .pio/build/<env>/firmware.bin, not build_output/. Also set if-no-files-found to error so a missing binary fails the build. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…bah, aHourglass, AlmostNuke, aNuke)
- Added 35 new effects in 7 families, each at 3/6/9/12/20 Hz variants
- Mode IDs 214-248, MODE_COUNT updated to 249
- Fixed Frame struct initializers from {data,60,N} to {data,37,1,60,N,255}
- Added missing aSidewaysMerkabah3 implementation
- Fixed duplicate aSidewaysMerkabah6 addEffect registration
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds GRIDLIGHTS_VERSION build flag (2.2.1) to platformio_override.ini and exposes it as gl_ver in the serializeInfo() response, distinct from the base WLED ver field. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Fails any pull request targeting main where GRIDLIGHTS_VERSION in platformio_override.ini has not been incremented relative to main. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace edge-triggered strobe toggle with wall-time computation: strobeState = (currentTime % cycleTime) < (cycleTime / 2) The previous toggle approach fired at most once per FRAMETIME, capping effective flicker frequency at ~1000/(2*FRAMETIME) Hz (~16Hz at 30fps). The new approach derives strobe state directly from millis(), removing the dependency on render-call frequency. Also removes the now-unused lastStrobeTime static variable from both mode_custom_diamond_spin and mode_black_hole_custom. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…tization SOL-2 Fix strobe frequency cap in Diamond Spin and Black Hole Custom
…ency-quantization Revert "SOL-2 Fix strobe frequency cap in Diamond Spin and Black Hole Custom"
Merges latest Aircoookie/WLED main into test branch for team validation. Conflict resolutions: - platformio.ini: kept esp32dev as sole build target - FX.h: kept GridLights custom modes (187-248), appended upstream particle modes (249-281) - FX_fcn.cpp: took upstream improvements (allocateData, setPixelColor, service timing) - wled.cpp: kept captive portal disabled, took upstream OTA/network changes - wled-ci.yml: kept deleted (GridLights has own CI) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (10)
WalkthroughThe PR introduces GridLights-specific CI/build workflows, consolidates the default build environment to esp32dev, adds GridLights-specific PlatformIO configuration with hardware parameters and version, adds Frame-based pattern rendering and ~40 new LED effect modes including Hz-controlled variants, increases default FPS to 100, renumbers effect IDs and updates MODE_COUNT, exposes GridLights version in JSON output, and disables DNS captive portal functionality in the access point. Changes
Estimated code review effort🎯 4 (Complex) | ⏱️ ~50 minutes Possibly related PRs
Suggested reviewers
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Summary
This PR merges the latest upstream Aircoookie/WLED
mainbranch into our GridLights SOL firmware fork for team evaluation and testing. This brings in ~2,549 upstream commits and touches 508 files (+59,599 / -53,712 lines).Do not merge this into
mainuntil the team has validated the build and tested on hardware.Why this merge?
Our fork diverged from WLED a long time ago. Upstream has accumulated significant improvements in areas like:
By merging now, we get all of these upstream improvements while preserving our GridLights-specific customisations.
Conflict Resolutions — Decisions Made
We encountered 5 conflicts during the merge. Here's exactly what we decided for each and why:
1.
.github/workflows/wled-ci.yml— Kept deletedesp32dev). Upstream's CI builds for 20+ board variants we don't ship. Pulling in their CI would break our build pipeline and add confusion.2.
platformio.ini— Keptesp32devas sole build targetdefault_envsfrom a single commented-out list to a multi-line list of ~20 CI/release environments (nodemcuv2, esp8266_2m, esp32_wrover, esp32c3dev, etc.). Our fork haddefault_envs = esp32devas the active target with everything else commented out.default_envs = esp32dev. We only build for one board. All other upstream build environment definitions (env sections) are still present in the file — they just aren't in the default build list.default_envs.3.
wled00/FX.h— GridLights modes preserved, upstream particle modes renumberedThis was the most significant conflict and requires the most attention during testing.
What happened: Both sides added new effect modes starting in the same numeric range (187+).
Decision:
MODE_COUNTupdated to 282.TRANSITION_FADEthroughTRANSITION_PUSH_BL, 18 total) were also included — these use separate0x00–0x17values and don't conflict with mode numbers.FX.cppregisters particle effects by their original mode numbers (187–219). Since we renumbered these to 249–281, any upstream code inFX.cppthat uses hardcoded mode numbers for particle effects will be pointing at the wrong slots. The team needs to verify:FX.cppuses the#defineconstants (e.g.,FX_MODE_PARTICLEVOLCANO) and not raw numbers — if so, the renumbering propagates automatically.4.
wled00/FX_fcn.cpp— Took upstream's improvements (3 sub-conflicts)Sub-conflict A:
Segment::allocateData()len == 0early return, and smarter logic that only clears small segment data buffers (belowFAIR_DATA_PER_SEG) on re-init, reducing unnecessary memsets on large segments.Sub-conflict B:
Segment::setPixelColor()function headervoid IRAM_ATTR Segment::setPixelColor(int i, uint32_t col)signature. Upstream removed this in favour of a newvoid WLED_O2_ATTR Segment::setPixelColor(int i, uint32_t col) constversion (further down in the file) and added a newmaxMappingLength()helper for the particle system.maxMappingLength()which is needed by the particle system effects we're bringing in.Sub-conflict C:
WS2812FX::service()frame timingmillis() - _lastShow < MIN_SHOW_DELAYcheck. Upstream completely reworked the timing to use_frametime(configurable frame duration),FPS_UNLIMITEDmode,_triggeredflag for on-demand rendering, and_suspendsupport.MIN_SHOW_DELAYtiming behaviour or_lastShow, they may render at a different cadence. Team should test strobe/Hz-sensitive effects (Breathing Square Hz, Spiral Wave Hz, etc.) to confirm timing is correct.5.
wled00/wled.cpp— Kept captive portal disabled, took upstream API changesWhat happened:
dnsServer.processNextRequest()(captive portal DNS) because SOL devices connect to known networks — they don't need AP-mode captive portal. Upstream kept it active.#ifndef WLED_DISABLE_OTA. Upstream changed this to#ifdef WLED_ENABLE_AOTA(opt-in rather than opt-out).WLED_CONNECTED. Upstream usesNetwork.isConnected()which is the newer, more reliable abstraction.Decision:
#ifdef WLED_ENABLE_AOTAdefine — aligns with upstream's opt-in OTA model.Network.isConnected()— it's the correct API going forward.WLED_DISABLE_OTAtoWLED_ENABLE_AOTA, OTA will now be disabled by default unlessWLED_ENABLE_AOTAis explicitly defined in the build flags. If OTA was previously working, we need to add-D WLED_ENABLE_AOTAto our build flags inplatformio.iniorplatformio_override.ini.Test Plan
Before merging to
main, the team should validate:pio run -e esp32devcompiles without errors-D WLED_ENABLE_AOTAto build flags if so/json/infostill work/json/infostill presentWhat's NOT in this merge
FX.cppcustom effect implementations)🤖 Generated with Claude Code
Summary by CodeRabbit
Release Notes
New Features
Improvements
Chores