Repository navigation
build: move to pioarduino 55.03.312 (Arduino 3.3.12, ESP-IDF 5.5) - #71
Merged
Merged
Conversation
IDF 4.4 gets no more security fixes, and the planned RMT radio needs IDF 5's RMT driver. See docs/adr/0003-pioarduino-idf55.md. - Every env on one pinned pioarduino release. C6 drops its own library list and flags but stays a debug build on huge_app. - Release envs build at CORE_DEBUG_LEVEL=2 so the ESP32 image fits its 1.5 MB OTA slot (17 KB free); debug envs stay at 3. - Drop the C3: its image is 76.5 KB over the OTA slot on IDF 5.5. - CI installs pioarduino's Core and checks firmware.bin against the app partition, failing under 8 KB free. PlatformIO's "Flash:" figure reads ~45 KB low and passed a C3 image that doesn't fit. - esp_task_wdt_reconfigure(): on 3.x the core already starts the watchdog and esp_task_wdt_init() fails, so the C6 build kept the 5 s default. - An updated firmware is kept only once it has run 60 s with the network up; a reset before then rolls back to the previous one. - ETH.begin() takes the 3.x argument order; Arduino 2.x branches gone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Releases publish SomfyController.littlefs.<chip>.bin, but the updater asked for SomfyController.littlefs.bin. The download 404'd and the device rebooted into the new firmware with the old web UI. Also: hasFS now matches per-chip images, C6 picks its own firmware file, and recoverFilesystem() points at cjkas instead of rstrouse. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review follow-up for #72. - releaseAssetName() takes ConfigSettings::chipModel ("", "s3", "c3", "c6"), so GitOTA no longer keeps its own chip switch. C3 keeps its name for when the build comes back. - hasFS is set only when this board's own LittleFS image is in the release. isFsAsset() is gone; it also matched the old unsuffixed littlefs.bin, which the updater no longer asks for. - releaseAssetName() returns void: no caller checked the result and every name fits currentFile. - Both manual-upload hints name this board's file. - KNOWN_ISSUES: the "Main" install can't work, the repo holds no .bin files. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copied from the registry package lsatan/SmartRC-CC1101-Driver-Lib@2.5.7
(upstream unmaintained since 2021) so it can be fixed for Arduino 3.x in
the next commit. This commit is the untouched copy, so that diff shows
every change. Licence: LICENSE.txt ("permission to modify and publish").
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Arduino 3.x tracks which peripheral owns each pin and logs when a pin the SPI bus owns is used through digitalRead()/digitalWrite(). The vendored SmartRC-CC1101 driver does both: - Every register access waits for CHIP_RDYn with digitalRead(MISO): one "IO 19 is not set as GPIO" warning per access, about one every 4 s from the RSSI read in decodeFrame(). It now reads the pad with gpio_get_level(), which returns the same level without the ownership check. - Init() set SCK and MOSI with digitalWrite() after SpiStart(), which the core refused with an error each boot. The writes are gone; the bus idles them. The MISO wait also had no bound, so a missing or dead module hung the caller. It now gives up after 10 ms. No native test: the driver only builds for the ESP32. To check on hardware: the serial log should have no "is not set as GPIO" lines, and frames should still decode with an RSSI. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 21, 2026
fix: download the per-chip LittleFS image in online updates
fix: stop the CC1101 driver's "IO is not set as GPIO" log spam
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This is part 2 of the IDF 5.5 migration. It is stacked on #70, so merge that first. The decision and its trade-offs are in ADR 0003.
How an updated firmware gets confirmed. The core's
verifyRollbackLater()hook is overridden:Other changes:
esp_task_wdt_reconfigure()replacesesp_task_wdt_init(). On 3.x the core starts the watchdog beforesetup(), soinitfailed and the C6 build kept the 5 s default.ETH.begin()uses the 3.x argument order, and the Arduino 2.x#ifbranches are removed.pioarduino(Core 6.2) and runs.github/size_check.py, which comparesfirmware.binwith the app partition inpartitions.bin. It fails with less than 8 KB free.SECURITY_PLAN.md.Evidence
Why the size check exists. PlatformIO's
Flash:line counts ELF sections, not the image that has to fit:For comparison, v3.0.14 on IDF 4.4: ESP32 1,382,640, C3 1,437,440.
pio test -e nativewith pioarduino Core: 415/415 passed, including the newotaProventests.firmware.elfsymbols show the hooks are linked:T verifyRollbackLater: our strong override.W verifyOta: the core's weak default, never called.T __wrap_log_printfandT __wrap_log_printfv: the log lock still sits under the ESP Insights wrap.Not yet tested on hardware, and needed before the 3.1.0 pre-release:
memStatusheap and loop healthMerge Danger
Door: two-way
Reverting the commit puts the build back on 6.13.0. A device that has installed and confirmed an IDF 5.5 firmware can still go back to 3.0.x through a normal OTA, because the partition table, NVS and backup formats are unchanged. The tooling change does reach every contributor: pioarduino replaces PlatformIO Core in
~/.platformio/penv.Blast Radius: release
ino.esp32c3.bin.SomfyController.littlefs.bin, but releases publishlittlefs.esp32*.bin. An online update installs the new firmware and keeps the old web UI. After a rollback, the old firmware also runs with whatever UI is on the device.🤖 Generated with Claude Code