New README_FR.md:
- French translation of the full README, AI translated
- Note at the top in French and English: the developer does not speak French, the French version is entirely AI translated, and suggested translations can be posted in the Meck channel on the MeshCore Discord or on the repo's Issues page
- Link back to the English README
- On-screen labels shown as the device's French text with the English in brackets; labels the device only shows in English stay in English
- French headings, with all in-page links pointing to the French anchors
README.md:
- Link to the French version at the top
- Accents: Noto Sans shows accents at every size; Montserrat shows them in Tiny-size text and titles, but not in 9pt text (Larger size, and some text that is always 9pt such as the WiFi home page status lines)
- Settings table: the font rows are now named Font Size and Font, as on the device
v1.15 additions:
- New sections: Timezones (World Clock), Experimental Features (Language, Change Backlight to Alt+B on the Max, RX Boosted Gain, AGC Reset Int, Delete all contacts)
- Combined BLE & WiFi build: Max only in v1.15, T-Deck Pro combined build in a future release; added to the Max build table and contents
- WiFi: reason line on Could not connect; WiFi on/off from the WiFi home page; Connecting to Saved Wifi popup
- Export and import popups; Delete all contacts pointer in Contacts
- Settings channel rows switch between start and end when too long
- DMs and channel messages use the companion app's chosen region first
- Channel data for companion apps; +15 dBm Bluetooth on meck_max_ble and meck_max_ble_wifi
- Accents: Noto Sans at both sizes and Montserrat at Tiny now show them
- Road-map: v1.15 items; T-Deck Pro combined build as a to-do
Accuracy fixes:
- Max included where text said Pro only: OTA update, path hash S key, MeshCore Flasher, RTC, repeater admin keyboard, MeshCore Clients
- P and Mic keys: Pro Audio & Max
- Voice notes: Max records, receives and plays
- WiFi builds turn WiFi on at boot and join the saved network; only the combined build starts with WiFi off. WiFi build list now includes meck_audio_wifi_hyn and meck_max_wifi
- MeshCore Clients note: Bluetooth off at boot on all builds; WiFi and combined build behaviour
- TX Power range 1-22 dBm
- Two LilyGo devices, not three
- OTA Tools do nothing on the 40 MHz builds
- Build tables: added the three Pro HYN builds and the three 40 MHz builds; new Touch chips and HYN builds and 40 MHz battery-saver builds sections
- Max touch text expanded (CST328 on the Max; CST3530 on later Pro v1.1 units)
- New Canned Messages (T-Deck Max) section; speech bubble row updated
- Frontlight: Alt+B toggle documented
- Settings table: LoRa Antenna, Canned Messages, WiFi, WiFi Radio and 4G Modem rows
- Guide links now match the real file names
Removed: Meck Watch paragraph
Release note
Combined Bluetooth + WiFi build (meck_max_ble_wifi): switching between Bluetooth and WiFi now restarts the device each time, because Bluetooth only frees its memory on a restart and WiFi cannot start without it. Whichever you turn on first after a restart works straight away; turning on the other one shows a restart hint, asks you to press Enter again, restarts, and turns the chosen connection on by itself. From the companion app, set wifi.enabled now takes effect at the app's reboot.
Why
Bluetooth off keeps the Bluetooth stack's memory until a restart; WiFi off frees WiFi's driver. On device, WiFi on/off, Bluetooth on/off, then WiFi on failed ("failed to create task", largest free block 7668 bytes) and the app could not connect over Bluetooth until a restart.
Changes (combined build only, except README)
- main.cpp: tracks which connection has been on since this restart; a switch then needs a restart (also Bluetooth after the Web Reader freed it).
- main.cpp: "Switch to WiFi?" / "Switch to Bluetooth?" popup with "Enter again to restart"; a second press within 5 s shows "Restarting..." and restarts, saving pending contacts first (new MyMesh::saveContactsIfDirty(), as CMD_REBOOT does).
- main.cpp: the choice survives the restart in RTC memory and the connection turns on once the home screen shows. Normal restart or power-on: both off.
- main.cpp: app "set wifi.enabled" keeps the choice for the app's reboot instead of switching after 1 s. Reply text unchanged.
- UITask.cpp: restart hints ("restart into Bluetooth:" / "Press Enter to Restart into Wifi") only when a restart is needed; Enter or long press uses the confirmation.
- SettingsScreen.h: WiFi Radio and WiFi setup rows use the same confirmation.
- French added for all new text.
- README.md: new "Combined Bluetooth + WiFi build (T-Deck Max)" section.
Testing: PC harness on the real new logic: both directions, late and timely confirm, start-up pickup after the splash, app wifi.enabled 1/0, Web Reader case, normal restart and power-on leftovers. Full firmware build not run.
EMULATOR (T-Deck Max)
- Q now quits a running game, matching the back key used across the
rest of the interface. Shift+Backspace still works. Added as a second
exit latch in the keyboard driver's raw joypad mode; the on-screen
hint reads "Q: Quit".
variants/lilygo_tdeck_max/TCA8418Keyboard.h
examples/companion_radio/ui-new/GBCEmulatorScreen.{h,cpp}
README
- New "Game Boy / Game Boy Color Emulator (T-Deck Max, v1.14+)"
subsection under Games: what it is, where to get free homebrew ROMs
(uCity, Halo: Combat Devolved), where to put them (/roms, .gb/.gbc,
32 files, names under 48 characters), how to launch and play (key
table, radio paused and CPU at 240 MHz while a game runs), what the
picture looks like and why it updates about 1.4 times a second,
saves (.sav on quit, no RTC state), and the release's limits.
- Contents entry for the new subsection; Games intro mentions the
Games tile and the Max-only emulator.
- SD Card Requirements lists Game Boy ROMs and saves.
- T-Deck Max intro cross-references the emulator.
- Road-Map: emulator done on the Max; Pro support, ES8311 sound with
mic-key mute, and RTC save state listed as to-do.
- Third-Party Libraries: Peanut-GB (MIT, Mahyar Koshkouei) added, with
a note that no Game Boy software is bundled.
Version tags on the new items are v1.14; the global version bump
follows in the next commit.
SPIFFS.begin(true) auto-formats on mount failure, but the auto-format
itself can fail if the partition contains residual data from a previous
firmware (e.g. stock LilyGo, Meshtastic, or MeshCore with a different
partition layout). When that happens the firmware previously printed
"SPIFFS format FAILED!" and continued in a broken state with no
persistence.
Now on auto-format failure:
1. Find the SPIFFS partition via esp_partition_find_first()
2. Erase it completely with esp_partition_erase_range()
3. Call SPIFFS.format() + SPIFFS.begin(false) with up to 3 retries
Added #include <esp_partition.h> under ESP32 guard.
The existing first-boot display feedback ("Formatting storage...
First boot - please wait") is unchanged -- it fires on the initial
mount failure. The new partition erase code only triggers if the
auto-format also fails.