2b0355a148
Nothing in this firmware ever mounted internal flash storage: apps, lib, settings and themes all live on the SD card. The Arduino default table still reserved 1408K for spiffs, so a custom table hands that to the OTA slots instead, taking each from 1280K to 1984K. The 64K tail the slots cannot use goes to coredump, which otherwise logs a missing-partition error on every boot. Changing the table shifts app0, so the next flash must be a full one. The ESP32 has no battery-backed clock, so time is 1970 on every power-up. net.cpp seeds it from the build timestamp -- the device cannot predate its own firmware, and certificate validity checks need a plausible clock before SNTP can answer -- then starts SNTP on each join and latches a synced flag from the notification callback. sntp_get_sync_status() only reports COMPLETED briefly before resetting for the next cycle, so polling it would make the clock flap. sys.clockSynced() is the only new binding a clock UI needs; Lua's os.date() already reads the same system clock. The launcher shows it, in UTC for now.
795 B
795 B
| 1 | # No spiffs partition: every file this firmware reads lives on the SD card, so the |
|---|---|
| 2 | # 1408K the Arduino default table reserved for internal flash storage goes to the OTA |
| 3 | # slots instead. nvs stays because the WiFi driver keeps its PHY calibration there. |
| 4 | # The slots are the same size deliberately: an image that fit one but not the other |
| 5 | # would update successfully once and then refuse to. That leaves a 64K tail the app |
| 6 | # slots cannot use, which is exactly what coredump wants: without it every boot logs |
| 7 | # Name, Type, SubType, Offset, Size |
| 8 | nvs, data, nvs, 0x9000, 0x5000 |
| 9 | otadata, data, ota, 0xe000, 0x2000 |
| 10 | app0, app, ota_0, 0x10000, 0x1F0000 |
| 11 | app1, app, ota_1, 0x200000, 0x1F0000 |
| 12 | coredump, data, coredump,0x3F0000, 0x10000 |