Meck-P4 v0.3.5.1: Contacts list fixes
Pre-releasePre-release.
Patch release on top of v0.3.5, fixing three bugs in the Contacts screen:
- 200-row cap removed. The contacts list previously stopped rendering after 200 matched rows. With 200+ contacts this hid recently-added repeaters from the list entirely (including, in one reproducible case, a freshly-added Repeater that Discover claimed to have added but which was nowhere to be seen). The list now displays every matching contact.
- Sorted by recency. Contacts now appear newest-first instead of in creation order. The sort key is local activity time (advert receipt, message send, or message receive), so the most recently active contacts sit at the top of the list regardless of which filter is active.
- Sort key corrected. Initial attempt used
last_advert_timestamp, which is the sender's claimed clock embedded in the advert payload rather than our reception time. That gave nonsense ordering: nodes with forward-dated clocks (stale build epoch, mis-set NTP, etc.) sat permanently at the top, and nodes whose clocks were stuck or behind had their adverts silently dropped by the upstream replay-attack guard and sank to the bottom. The fix sorts bylastmod(our local RTC time at last contact activity) with an override inonAdvertRecvsolastmodis updated on every advert receipt regardless of whether the upstream replay guard early-returned.
No other behavioural changes from v0.3.5.
First-Time Flashing: Read This First
(Same as v0.3.5 — skip this section if you've already flashed v0.3.5; the contacts fixes carry over via the usual upgrade path.)
Meck-P4 ships as a single merged binary (bootloader + partition table + application combined). One file, flash at offset 0x0.
An SD card is recommended. With a FAT32-formatted card inserted, every saved setting, channel message, DM, and room post is mirrored automatically, audio files have somewhere to live, and the device recovers gracefully from a wiped NVS. Without an SD card the device still works but loses message history on reboot.
Ensure you use the right-side USB-C port (the data port), not the high-speed charger port, to flash.

Flashing with the MeshCore Web Flasher (recommended)
- Go to https://flasher.meshcore.io/
- Scroll to the bottom and select Custom Firmware
- Select the
meck-p4-0.3.5.1-version-merged.binfile you downloaded - Click OK on the merged-binary warning
- Click Flash, pick your device in the popup, and click Connect
Flashing with esptool.py
pip install esptool
esptool.py --chip esp32p4 -p PORT write_flash 0x0 meck-p4-0.3.5.1-version-merged.bin
(Replace PORT with /dev/cu.usbmodemXXXX on macOS, /dev/ttyACM0 on Linux, or COM3 on Windows.)
Upgrading from v0.3.5 or v0.3.3 does not require erase_flash. The prefs loader continues to tolerate older shorter-blob layouts, so any new fields come up at default rather than wiping existing settings.
⚠️ AMOLED variant remains untested by the maintainer. The-amoled.binis built from the same source tree with the AMOLED display option selected in menuconfig, but the project maintainer doesn't have the AMOLED hardware on hand. The TFT variant is the tested and known-working build.
Known Limitations
Carried over unchanged from v0.3.5:
- Background audio playback has known issues — not recommended for general use yet. A blue
>>glyph was added to the top bar to indicate when the audio player is actively playing, mirrored across every home tile and full screen. However, the broader background-playback experience has a number of unresolved bugs: tapping the Audio tile while a track is playing doesn't jump back to the Now Playing screen (so pausing requires navigating back to the file manually), and starting a second track while the first is playing leaves the second track's play button stuck in the "play" state so it can't be paused from its row. Targeted for finalisation in v0.3.6. In the meantime, use the audio player as a foreground feature — leave it open on the Now Playing screen while a track is in progress. - GPS cold-boot acquisition is slow. First cold start takes around 12 minutes outdoors with clear sky; subsequent fixes after a reboot can take longer than expected even when the chip should have prior almanac data, suggesting EASY (predicted ephemeris) may not be persisting across reboots as intended. Investigation and fix targeted for v0.3.6.
- Light sleep itself isn't engaging. The screen-off path releases the dsi_phy NO_LIGHT_SLEEP PM lock, but
light_sleep_countsremains at 8 after transition. Other PM locks (likely from I2S, USB-CDC, SDMMC, or BLE controller drivers) are still preventing automatic light sleep entry. CPU dropping out of 360 MHz mode is what's providing the visible power saving. - Touch wake from screen-off is not supported. Use the boot button to wake. XL9535 INT line wake is on the v0.3.6 list.
- Cover art larger than 256x256 still doesn't display. Use a 256x256
cover.pngin each album folder. - AMOLED variant has not been flashed or tested by the maintainer. Reports welcome via Discord or GitHub Issues.
For the full What's New list (Direct Messaging, Repeater Admin, Room Servers, Maps, etc.) see the [v0.3.5 release notes](https://github.com/pelgraine/Meck-P4/releases/tag/v0.3.5).
Reporting Issues
The Meck-P4 channel on the MeshCore Discord is the fastest path. GitHub Issues on the Meck-P4 repo also work for anything reproducible. Include the serial log if you can — Settings → Debug Logs → Start captures it to SD if serial monitor isn't practical.
License
MIT for Meck-specific code. The combined firmware binary links libraries with mixed licensing including GPL-3.0 and is effectively GPL-3.0 when distributed.