ESP32 DoomsDay Firmware 3.15.0 — Phase 3.15
Phase 3.15 removes the installed-app count ceiling and expands the browser portal's SD File Manager with multi-selection, bulk TAR download, confirmed bulk deletion, and multi-file upload. Installed app metadata is now indexed by an atomic SD-backed registry with a small manifest cache, so available SD space—not a fixed firmware array—is the practical installation limit. It builds on Phase 3.14's personalization, portal, app-platform, and serviceability foundation for the ESP32-S3 Super Mini V2.
Hardware target
- ESP32-S3FH4R2: 4 MB QIO flash and 2 MB QSPI PSRAM
- 128 × 128 GC9107/ST7735-compatible TFT
- six-button D-pad, SELECT, and BACK input
- AHT20 and BMP280 environmental sensors
- FAT32 microSD storage
- GPIO7 battery-divider ADC and GPIO45 activity LED
- expansion header: 15, 14, 12, 13, 11, GND, 3.3V
- ATGM336H GPS: module TX → GPIO14, module RX → GPIO15
The authoritative pin and timing definitions are in include/config.h. Read CLAUDE.md before firmware work and APP_DEVELOPER_GUIDE.md before creating an SD application.
Phase 3.15 highlights
-
Installed apps are catalogued in
/apps/registry.txtand loaded through a bounded 12-entry manifest cache. There is no firmware app-count constant; installation stops only when validation, filesystem, or SD capacity does. -
Portal File Manager rows have checkboxes and a select-all control. Selected files and folders can be downloaded as one streamed TAR or removed through one confirmation. The upload picker accepts multiple files and reports per-file progress while keeping RAM use bounded to one upload stream.
-
Website/is a Vercel-ready Next.js product platform: commercial landing pages, Kickstarter launch funnel, searchable App Store, firmware center, owner/developer documentation, accounts, developer submissions, admin review/publishing, support, MongoDB records, and GitHub binary storage. -
Personalization → Icon Style is a dedicated 22-item visual selector. It includes Flat, the previous iOS Glass design, and 20 new packs: Material You, Neon, Cyber Grid, Hologram, Pixel, Outline, Duotone, Candy, Pastel, Monochrome, Terminal, Blueprint, Solar, Frosted, Retro, Minimal, Badge, Gemstone, Paper, and animated Aurora.
-
Twenty creative themes are appended without changing any existing persisted theme index: Midnight Lime, Peach Cloud, Electric Iris, Arctic Coral, Jade Ink, Sunset Drive, Moonstone, Cherry Cola, Ocean Pearl, Desert Neon, Plasma Teal, Lavender Mist, Ember Blue, Moss Gold, Raspberry Ice, Cosmic Sand, Aqua Paper, Ultraviolet, Terra Sky, and Northern Glow.
-
Portal home has three workspaces: WiFi Security Lab, Bluetooth Lab, and a traditional SD File Manager. Its two-line live device terminal stays fixed at the bottom of every workspace.
-
Portal File Manager supports folder navigation, single or multi-file upload into the current directory, individual download, recursive folder download, multi-selection TAR download, create folder, rename, and protected bulk delete.
-
Settings → Firmware Update validates a main firmware .bin from /OTA-Firmware-Update/ and hands it to an independently bootable recovery updater. Interrupted updates leave recovery bootable.
-
Saved WiFi entries now open a manager with connect, disconnect, forget, and non-secret connection details. Six slots are supported.
-
Battery percentage beside the status icon is independently enabled or disabled under Personalization.
-
Selection changes the row surface only; primary and secondary text retain their intended colors. Long option labels use concise two-row layouts.
-
Thirty modern palettes coexist with the original 30 normalized palettes.
-
Six new Android-inspired lock screens add animated, configurable information widgets. Classic and Cards remain available.
-
System features use colorful semantic tile icons, and long lists expose a narrow position scrollbar.
-
WiFi Lens 2.0 adds SSID/BSSID identity, channel planning, congestion scoring, duplicate-name detection, and risk summaries using read-only scan data.
-
Lunar Lander's invalid sprite-frame calls are fixed. The host stress runner now validates loaded sprite frame bounds.
-
Forty new packaged experiences are included: 20 dynamic utility/wellness/ visualization apps and 20 graphical games. There are 54 example packages in total.
Build firmware
PlatformIO uses a short external build path on Windows to avoid MAX_PATH failures:
& "$env:USERPROFILE\.platformio\penv\Scripts\platformio.exe" run -e esp32-s3-supermini-v2
The main image is produced at:
C:\pio-build\doomsday\esp32-s3-supermini-v2\firmware.bin
Install recovery once, then use SD updates
The Phase 3.13 partition table is different from the older single-app layout. Perform the one-time USB migration with the included script:
.\tools\install_ota_recovery.ps1 -Port COM5
Replace COM5 with the device port. This installs the partition table, current main firmware, and the small recovery updater. Do not use Settings OTA until this one-time operation has succeeded.
For later updates:
- Copy only the main application .bin into /OTA-Firmware-Update/ on the SD card.
- Open Settings → Firmware Update.
- Select the validated image and confirm Install.
- Leave the device powered until it restarts.
The updater checks the ESP image header, ESP32-S3 target, app descriptor, file size, recovery availability, and full image completion before selecting the new main image.
Build and test SD apps
python tools/build_dtapp.py --all -o dist/apps
python tools/test_phase3.py
python tools/stress_das.py --frames 5000
Copy desired .dtapp files from dist/apps or READY_TO_COPY_TO_SD to a user-managed SD directory, then install them through the device File Manager. Packages are deterministic ZIP-STORE archives; do not create them manually.
Offline maps
Use tools/offline_map_builder.py to create named DMT2 packages. Place each area folder below /Offline-Map/map list/ on the SD card. GPS Navigator can select a package manually or choose the highest-detail package covering the current fix. See OFFLINE_MAP_GUIDE.md.
Validation status
Phase 3.15 host validation covers:
- clean main and recovery PlatformIO builds;
- all 54 deterministic .dtapp packages;
- 5,000 randomized yields for every app, including sprite-frame validation;
- package/permission negative tests;
- offline-map encoding, resume, CRC, and package tests;
- PowerShell syntax validation for the recovery installer.
Final acceptance still requires the physical device: portal transfer tests, SD hot removal, actual OTA and interrupted-OTA recovery, all theme/icon contrast, every lock screen, radio behavior, deep-sleep wake, and long-duration power/thermal testing.
Documentation
- CLAUDE.md — complete maintainer architecture and contracts
- APP_DEVELOPER_GUIDE.md — complete DAS/API 3 app tutorial and reference
- HARDWARE_DEVELOPER_DOCUMENTATION.md — electrical and physical design
- OFFLINE_MAP_GUIDE.md — map package creation and GPS use
- Website/README.md — website deployment, operations, security, and go-live
- dist/RELEASE_NOTES_PHASE315.md — this release's change and test record