v0.3.8
Pre-releasePre-release.
Feature release building on v0.3.6, adding position adverts, share position, path view, private channels, and voice/picture over LoRa infrastructure (disabled pending final integration).
What's New
Position Adverts
Your GPS position can now be encoded into outgoing adverts, allowing other nodes on the mesh to see your location on their Maps screen. Position is configured via a new Settings > Position sub-screen with three fields:
- Latitude / Longitude (tap to edit) for manual entry in decimal degrees
- Share Position (tap to cycle): Off / Manual / Auto-GPS
In Auto-GPS mode, the L76K GPS snapshot is polled every 15 minutes and the stored position is updated automatically whenever the fix changes. A Copy Position button is also available on the sub-screen.
Share Position
The + button on the channel messages and DM compose screens now includes a Share Position option. Tapping it sends your current lat/lon as a message to the active channel or conversation.
Path View and Message Actions
Long-pressing an incoming message now opens Path View, which displays the routing path that message took through the mesh, showing each hop in the route.
Long-pressing an outgoing message gives you the option to Retry Send if the message failed, or to see which repeaters acknowledged the message.
Private Channels
Channels can now be public or private:
- Public channels start with
#(e.g.#test). The secret is derived via SHA-256 from the name, matching the standard MeshCore convention. - Private channels have no
#prefix. A random 16-byte secret is generated at creation, so only invited users can join.
Sharing: open Settings > Channels, tap the channel, then tap Share Channel. This opens a contact picker and sends the channel name and secret as a DM invitation. Recipients see a pending invite they can accept (tap) or dismiss (long-press).
Voice over LoRa Infrastructure (Not Yet Enabled)
The full infrastructure for Codec2 1200bps voice messaging has been added to the firmware:
- Codec2 ESP-IDF component (
components/codec2/) wrapping drowe67/codec2 with only the core 1200bps mode compiled in - ES8311 microphone capture at native 44100 Hz I2S rate
- VE3 protocol for chunked voice packet transfer
- Recording buffer in PSRAM, staggered send timing
- Voice UI: inbox with metadata persistence, record screen with Play/Discard/Send, previous recordings list, contact picker (favourites first), send status tracking
- Playback at 85% volume via meck_audio_play_file
Voice and Picture tiles are present on the home screen as placeholders but the features are disabled in this release pending final integration and testing.
Picture over LoRa Infrastructure (Not Yet Enabled)
Chunked image transfer protocol infrastructure has been added but is disabled in this release.
UI Changes
- Splash screen updated with new design and progress bar
- Maps and Trace tile colours swapped so there are no longer two adjacent red tiles on the home screen
- Home screen expanded from seven tiles to nine (Voice and Camera placeholders added)
- MAX_GROUP_CHANNELS bumped from 8 to 12
First-Time Flashing: Read This First
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, notification tones 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 and notification sounds won't be available.
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.8-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.8-merged.bin
(Replace PORT with /dev/cu.usbmodemXXXX on macOS, /dev/ttyACM0 on Linux, or COM3 on Windows.)
Upgrading from v0.3.6 does not require erase_flash. The prefs loader tolerates older shorter-blob layouts (new fields come up at defaults), and persistence formats are transparently migrated.
Known Limitations
- Voice and picture over LoRa are not yet enabled. The infrastructure (Codec2 encode/decode, mic capture, protocol, UI) is in place but disabled in this release. The Voice and Camera home tiles are placeholders.
- Mentions-only notification filtering is not yet wired. The "Mentions" notification preference currently behaves the same as "All" (tone plays on every message).
- Audio player has several known bugs. Bookmarks don't work. M4B files are not supported (MP3 and WAV only). The pause button disappears if you exit and re-enter the audio screen while a track is playing, or if you start a second track after the first.
- GPS cold-boot acquisition is slow. First cold start takes around 12 minutes outdoors; EASY (predicted ephemeris) may not be persisting across reboots as intended.
- Light sleep itself isn't engaging. Other PM locks prevent automatic light sleep entry. Power saving comes from dynamic frequency scaling.
- Touch wake from screen-off is not supported. Use the boot button to wake.
- Cover art larger than 256x256 still doesn't display. Use a 256x256
cover.pngin each album folder. - Serial CLI commands are not available on the P4. Remote CLI commands via Repeater Admin work normally.
For the full feature list (Direct Messaging, Repeater Admin, Room Servers, Maps, Audio Player, Custom Radio, Region Scope, Notification Sounds, etc.) see the [v0.3.6 release notes](https://github.com/pelgraine/Meck-P4/releases/tag/v0.3.6) and the [README](https://github.com/pelgraine/Meck-P4/blob/main/README.md).
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 LGPL-2.1 (Codec2) and is effectively GPL-3.0 when distributed.