- handle_rules_edit(String, bool) is static now, but ESPEasy_WebServer.cpp
still called it for /rules/add, which no longer compiles:
"too many arguments to function 'bool handle_rules_edit(const String&)'"
Add handle_rules_add() in Rules.cpp and use that instead.
- Rules.cpp uses validIntFromString() without including Numerical.h
(this was already broken on mega when WEBSERVER_NEW_RULES is defined).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018S3oPMc7qQGQGGGyMUvcaf
Dallas_read_bit_ISR() and Dallas_write_bit_ISR() have only a single
caller, Dallas_read_bit() / Dallas_write_bit(), which is not in IRAM.
The ESP32 builds use LTO (-flto=auto, set by the build flags of the
arduino-esp32 framework package), so GCC inlines these functions into
their caller and the timing critical code with interrupts disabled runs
from flash. DALLAS_IRAM_ATTR thus had no effect for these functions.
Without LTO the same happens as soon as these functions are static
(-finline-functions-called-once is enabled at -Os).
Add noinline to DALLAS_IRAM_ATTR on ESP32.
ESP8266 is not affected, as DALLAS_IRAM_ATTR is empty there.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018S3oPMc7qQGQGGGyMUvcaf
After splitting toNodeTypeDisplayString(), every node type which is not
ESP Easy, ESP Easy Mega, RPI Easy, Arduino Easy or Nano Easy was shown as
"ESP Easy 32". For example nodeType 0, the default of NodeStruct::nodeType.
Before, an empty string was returned for unknown node types.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018S3oPMc7qQGQGGGyMUvcaf