* Comment out check-wrapped-lwip-sntp-calls.py script
Comment out the check-wrapped-lwip-sntp-calls.py script in platformio.ini.
* Delete pio-tools/check-wrapped-lwip-sntp-calls.py
The ESP8266 SDK automatically invokes sntp_init() via
netif_sta_status_callback on every WiFi reconnect. This results in repeated
allocations of UDP PCBs (udp_new()), leading to heap exhaustion and
potential lwIP timeout list corruption due to unmatched sntp_stop() calls.
Tasmota does not use the lwIP SNTP client and relies solely on WifiGetNtp()
for time synchronization. To avoid unnecessary resource usage, wrap and
neutralize sntp_init() and sntp_stop() with no-op implementations.
This prevents UDP PCB allocations and avoids issues caused by repeated
initialization during reconnect cycles.
Additionally, a PlatformIO post-build script has been added to validate
that the linker wraps are correctly applied. The script runs after ELF
generation and uses xtensa-lx106-elf-nm to inspect symbols, ensuring that
the __wrap_sntp_init and __wrap_sntp_stop functions are present in the
final firmware. If the wrappers are missing, the build fails.
Confirmed via firmware disassembly:
- Single call site in netif_sta_status_callback
- Requires linker wraps: --wrap=sntp_init,--wrap=sntp_stop
Fixes: #24566
Use existing dvalid[] array to gate JSON and immediate MQTT output,
preventing initial zero values from corrupting HA statistics on restart.
Signed-off-by: Christian Andersen <public@milindur.de>
- It seems the current implementation fails to set the clock stretch limit using functions from Wire library; It's set to 0 whatever the user wants it to be. This quick fix at least sets a default of 150ms to allow clock stretch to be used for devices that need it. It fixes support for Sensirion SCD30 and SGP30 which rely on clock stretching.. I'll dive deeper to solve the Wire provided functions.
- Skip :TI (touch I2C) and :TS (touch SPI) lines in case 'T' of the uDisplay
descriptor parser. These touch config lines are handled separately by
xdsp_17_universal.ino via strstr(), but case 'T' was matching on the first
character and unconditionally writing the subsequent values into
panel_config->epd.lut_full_time/lut_partial_time/update_time. In the
PanelConfigUnion, these EPD fields overlap with I80 panel bus pin config
(cs_pin, dc_pin, wr_pin, rd_pin, data_pins), causing parallel displays to
silently receive corrupted GPIO pin assignments and fail to render.
The fix checks if the character after 'T' is 'I' or 'S' and skips EPD timing
parsing for those lines. EPD descriptors using :T,<timing> continue to work
as before.
- Remove dead reference to berry.lvgl_panel_loaded in xdrv_54_lvgl.ino.
The member was removed from BerrySupport in commit e4c2cf591 (Berry Extension
Manager) but the reference in start_lvgl() was left behind, causing a compile
error when USE_BERRY_LVGL_PANEL is defined.
- Add verified display descriptor for WT32-SC01 Plus (ESP32-S3, ST7796U 480x320,
8-bit parallel I80, FT5206 capacitive touch). Tested on Tasmota v15.3.0.1 with
LVGL 9.5.0.
Co-authored-by: Ari Friedman <afriedman@millsupplyco.com>
* set no wait on connect
* removed incremental draw; reduced data moving; reduced touch events
* added set_nowait method to set TCP_NODELAY socket option
* added last chunk indicator for the stream callback
* writebytes optimizations