Meck-P4 v0.3.6: Custom Radio, Region Scope, Channels, Notification Sounds
Pre-releasePre-release.
Feature release building on v0.3.5.1, adding custom radio parameters, region scope support, a Channels settings sub-screen, and per-channel notification sounds.
What's New
Custom Radio Parameters
Frequency, Bandwidth, and Spreading Factor are now individually editable via text entry in Settings (tap the row, type the value, tap Confirm). Coding Rate cycles on tap (4/5 through 4/8). The Radio Preset row remains available and shows "Custom" whenever the current values don't match any of the 17 built-in presets. Selecting a preset populates all four fields; you can then tweak individual values without losing the rest.
This is primarily useful for users in regions where the community presets don't cover the exact parameters in use, such as parts of Europe running SR 5/6 with 32.5 kHz bandwidth, or anyone wanting to customise the coding rate independently.
Region Scope (MeshCore v1.15+ Compatibility)
Regions limit how far your flood messages propagate through the mesh. When you set a region, outgoing messages are tagged with a transport code that repeaters use to decide whether to forward them. Messages sent without a region reach all repeaters via the default wildcard, same as always.
Setting your device region:
- Open Settings, tap Default Region, enter your region name (e.g.
au-nsw), tap Confirm - Leave empty for unscoped (legacy behaviour, reaches all repeaters)
Per-channel region: Open Settings > Channels, tap a channel, then tap Region Scope to set an override for that specific channel. Empty uses the device default.
Finding your region name: Region names are determined by your local mesh community. Check with your local group, or browse the community region registry at regions.meshcore.nz for names already in use. Common patterns follow ISO 3166 codes (e.g. au for Australia, au-nsw, gb-eng, us-ca), but communities may also use custom names. Names must be lowercase alphanumeric characters and hyphens, max 30 characters. You can also create your own custom regions on repeaters you manage (see Repeater Admin below).
Note: Region scoping requires repeaters in your area to be running MeshCore v1.10+ with the appropriate regions configured. If no repeaters have region filtering enabled, scoped and unscoped messages behave identically.
Repeater Admin: Region Management via CLI
Repeaters running MeshCore v1.10+ support full region management through the Cmd Line screen in Repeater Admin. Log in to a repeater, tap Cmd Line, and use the following commands:
| Command | Description |
|---|---|
region put <name> [parent] |
Create a new region (optional parent for nesting) |
region remove <name> |
Remove a region (remove children first) |
region allowf <name> |
Allow flooding for a region |
region denyf <name> |
Block flooding for a region |
region get <name> |
Show info for a region |
region home / region home <name> |
View or set the repeater's home region |
region default / region default <name> |
View or set the repeater's default scope |
region save |
Persist region changes to the repeater's flash |
region list allowed / region list denied |
View regions (repeater firmware 1.12+) |
region load <name> [F] |
Single-line region load (append F to allow flooding) |
Not supported: The interactive multi-line region load (without parameters) requires a serial terminal and is not available on the P4, which does not currently support serial CLI commands. Use individual region put and region allowf commands instead.
Quick start example (setting up a repeater for the au-nsw region):
region put au-nsw
region allowf au-nsw
region home au-nsw
region save
For full documentation and nested region examples, see the MeshCore CLI docs.
Channels Settings Sub-Screen
A new Channels entry in Settings opens a dedicated sub-screen for managing all your channels. Each channel row shows its name, region scope tag, and notification preference at a glance.
Tap any channel to open its detail screen with three actions:
- Region Scope -- tap to edit the per-channel region (empty = use device default)
- Notifications -- tap to cycle: All / Mentions / None
- Notification Tone -- tap to open the tone picker (see below)
- Delete Channel -- tap once to arm, tap again within 3 seconds to confirm (primary channel protected)
An Add Channel button at the bottom creates new hashtag channels without leaving the settings flow. Channel adding and deleting also remain available in the channel picker for convenience.
Notification Sounds
Meck-P4 now supports per-channel notification tones with 7 bundled defaults.
Bundled tones (copied to /sdcard/audio/tones/ on first boot):
- Bell-01, Ding-01, High-Trill-01, Low-Ding-02, Low-Ding-03, Mid-Trill-01, Soft-Notif
Adding your own tones: Drop any MP3 file (44.1 kHz) into the /sdcard/audio/tones/ folder on your SD card. The tone picker scans the folder each time it opens, so new files appear immediately.
Setting a tone:
- Open Settings > Channels
- Tap a channel
- Tap Notification Tone
- Scroll through the available tones and tap to select -- the tone plays as a preview
- The currently assigned tone is highlighted with a cyan border
- Select None (silent) to disable the tone for that channel
Tone assignments persist across reboots (stored in /sdcard/meshcore/notif_sounds.cfg).
Playback behaviour:
- Tones play at a fixed 80% volume regardless of the audio player's current volume setting. The previous volume level is restored automatically when the tone finishes.
- If the audio player is actively playing music or an audiobook, notification tones are silently skipped to avoid interrupting playback.
Per-Channel Notification Preferences
Each channel has an independent notification preference, editable from the channel detail screen (Settings > Channels > tap a channel > Notifications, tap to cycle):
| Preference | Tone | Unread Badge | Use Case |
|---|---|---|---|
| All (default) | Plays on every new message | Increments normally | Primary channels you actively monitor |
| Mentions | Plays on every new message | Increments normally | Currently behaves the same as All; mention-only filtering is planned for a future release |
| None | Silent | Does not increment | Busy or low-priority channels you want to check on your own schedule |
When a channel is set to None, it is fully muted: no notification tone plays, and the unread count on the home screen and channel picker does not go up when new messages arrive on that channel. The messages are still received and visible when you open the channel, but the device gives you no alerts. This is useful for high-traffic channels (like Public) where constant badge updates would be distracting.
Notification preferences persist across reboots alongside other channel settings.
UI Improvements
- Confirm buttons added to all text edit overlays (node name, frequency, bandwidth, SF, default region, channel scope, channel add). Users no longer need to find the enter key on the symbols keyboard page to submit.
- White cursors on all text edit fields so the insertion point is visible against dark backgrounds.
- Scrollbar fix on the channel add overlay -- edge taps no longer shift the keyboard and page around.
- Repeater admin CLI keyboard fix -- the keyboard on the Cmd Line screen was previously obscured by the scrollback container. Now renders correctly with the scrollback resizing to make room.
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.6-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.6-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.5.1 does not require erase_flash. The prefs loader tolerates older shorter-blob layouts (new fields come up at defaults), and the channel persistence format is transparently migrated from v1 to v2 on first save (existing channels and their settings are preserved).
⚠️ 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
- Mentions-only notification filtering is not yet wired. The "Mentions" notification preference currently behaves the same as "All" (tone plays on every message). Filtering to only trigger when
@nodenameappears in the message text is planned for a future release. - Background audio playback has known issues. Tapping the Audio tile while a track is playing doesn't jump back to the Now Playing screen, and starting a second track while the first is playing leaves the second track's play button stuck. Use the audio player as a foreground feature for now.
- 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. Local serial settings (like the interactive
region load) require a serial terminal, which is not yet implemented. Remote CLI commands via Repeater Admin work normally. - AMOLED variant has not been flashed or tested by the maintainer. Reports welcome via Discord or GitHub Issues.
For the full feature list (Direct Messaging, Repeater Admin, Room Servers, Maps, Audio Player, etc.) see the v0.3.5 release notes.
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.