mirror of
https://github.com/pelgraine/Meck.git
synced 2026-03-28 17:42:44 +01:00
456 lines
12 KiB
Markdown
456 lines
12 KiB
Markdown
# Meck Serial Settings Guide
|
||
|
||
Configure your T-Deck Pro's Meck firmware over USB serial — no companion app needed. Plug in a USB-C cable, open a serial terminal, and you have full access to every setting on the device.
|
||
|
||
## Getting Started
|
||
|
||
### What You Need
|
||
|
||
- T-Deck Pro running Meck firmware
|
||
- USB-C cable
|
||
- A serial terminal application:
|
||
- **Windows:** PuTTY, TeraTerm, or the Arduino IDE Serial Monitor
|
||
- **macOS:** `screen`, CoolTerm, or the Arduino IDE Serial Monitor
|
||
- **Linux:** `screen`, `minicom`, `picocom`, or the Arduino IDE Serial Monitor
|
||
|
||
### Connection Settings
|
||
|
||
| Parameter | Value |
|
||
|-----------|-------|
|
||
| Baud rate | 115200 |
|
||
| Data bits | 8 |
|
||
| Parity | None |
|
||
| Stop bits | 1 |
|
||
| Line ending | CR (carriage return) or CR+LF |
|
||
|
||
### Quick Start (macOS / Linux)
|
||
|
||
```
|
||
screen /dev/ttyACM0 115200
|
||
```
|
||
|
||
On macOS the port is typically `/dev/cu.usbmodem*`. On Linux it is usually `/dev/ttyACM0` or `/dev/ttyUSB0`.
|
||
|
||
### Quick Start (Arduino IDE)
|
||
|
||
Open **Tools → Serial Monitor**, set baud to **115200** and line ending to **Carriage Return** or **Both NL & CR**.
|
||
|
||
Once connected, type `help` and press Enter to confirm everything is working.
|
||
|
||
---
|
||
|
||
## Command Reference
|
||
|
||
All commands follow a simple pattern: `get` to read, `set` to write.
|
||
|
||
### Viewing Settings
|
||
|
||
| Command | Description |
|
||
|---------|-------------|
|
||
| `get all` | Dump every setting at once |
|
||
| `get name` | Device name |
|
||
| `get freq` | Radio frequency (MHz) |
|
||
| `get bw` | Bandwidth (kHz) |
|
||
| `get sf` | Spreading factor |
|
||
| `get cr` | Coding rate |
|
||
| `get tx` | TX power (dBm) |
|
||
| `get radio` | All radio params in one line |
|
||
| `get utc` | UTC offset (hours) |
|
||
| `get notify` | Keyboard flash notification (on/off) |
|
||
| `get gps` | GPS status and interval |
|
||
| `get pin` | BLE pairing PIN |
|
||
| `get path.hash.mode` | Path hash size (0=1-byte, 1=2-byte, 2=3-byte) |
|
||
| `get rxdelay` | Rx delay base (0=disabled) |
|
||
| `get af` | Airtime factor |
|
||
| `get multi.acks` | Redundant ACKs (0 or 1) |
|
||
| `get int.thresh` | Interference threshold (0=disabled) |
|
||
| `get gps.baud` | GPS baud rate (0=compile-time default) |
|
||
| `get channels` | List all channels with index numbers |
|
||
| `get presets` | List all radio presets with parameters |
|
||
| `get pubkey` | Device public key (hex) |
|
||
| `get firmware` | Firmware version string |
|
||
| `clock` | Current RTC time (UTC + epoch) |
|
||
|
||
**4G variant only:**
|
||
|
||
| Command | Description |
|
||
|---------|-------------|
|
||
| `get modem` | Modem enabled/disabled |
|
||
| `get apn` | Current APN |
|
||
| `get imei` | Device IMEI |
|
||
|
||
### Changing Settings
|
||
|
||
#### Device Name
|
||
|
||
```
|
||
set name MyNode
|
||
```
|
||
|
||
Names cannot contain these characters: `[ ] / \ : , ? *`
|
||
|
||
#### Radio Parameters (Individual)
|
||
|
||
Each of these applies immediately — no reboot required.
|
||
|
||
```
|
||
set freq 910.525
|
||
set bw 62.5
|
||
set sf 7
|
||
set cr 5
|
||
set tx 22
|
||
```
|
||
|
||
Valid ranges:
|
||
|
||
| Parameter | Min | Max |
|
||
|-----------|-----|-----|
|
||
| freq | 400.0 | 928.0 |
|
||
| bw | 7.8 | 500.0 |
|
||
| sf | 5 | 12 |
|
||
| cr | 5 | 8 |
|
||
| tx | 1 | Board max (typically 22) |
|
||
|
||
#### Radio Parameters (All at Once)
|
||
|
||
Set frequency, bandwidth, spreading factor, and coding rate in a single command:
|
||
|
||
```
|
||
set radio 910.525 62.5 7 5
|
||
```
|
||
|
||
#### Radio Presets
|
||
|
||
The easiest way to configure your radio. First, list the available presets:
|
||
|
||
```
|
||
get presets
|
||
```
|
||
|
||
This prints a numbered list like:
|
||
|
||
```
|
||
Available radio presets:
|
||
0 Australia 915.800 MHz BW250.0 SF10 CR5 TX22
|
||
1 Australia (Narrow) 916.575 MHz BW62.5 SF7 CR8 TX22
|
||
...
|
||
14 USA/Canada (Recommended) 910.525 MHz BW62.5 SF7 CR5 TX22
|
||
15 Vietnam 920.250 MHz BW250.0 SF11 CR5 TX22
|
||
```
|
||
|
||
Apply a preset by name or number:
|
||
|
||
```
|
||
set preset USA/Canada (Recommended)
|
||
set preset 14
|
||
```
|
||
|
||
Preset names are case-insensitive, so `set preset australia` works too. The preset applies all five radio parameters (freq, bw, sf, cr, tx) and takes effect immediately.
|
||
|
||
#### UTC Offset
|
||
|
||
```
|
||
set utc 10
|
||
```
|
||
|
||
Range: -12 to +14.
|
||
|
||
#### Keyboard Notification Flash
|
||
|
||
Toggle whether the keyboard backlight flashes when a new message arrives:
|
||
|
||
```
|
||
set notify on
|
||
set notify off
|
||
```
|
||
|
||
#### BLE PIN
|
||
|
||
```
|
||
set pin 123456
|
||
```
|
||
|
||
#### Path Hash Mode
|
||
|
||
Controls the byte size of each repeater's identity stamp in forwarded flood packets. Larger hashes reduce collisions at the cost of fewer maximum hops.
|
||
|
||
```
|
||
set path.hash.mode 1
|
||
```
|
||
|
||
| Mode | Bytes/hop | Max hops | Notes |
|
||
|------|-----------|----------|-------|
|
||
| 0 | 1 | 64 | Legacy — prone to hash collisions in larger networks |
|
||
| 1 | 2 | 32 | Recommended — effectively eliminates collisions |
|
||
| 2 | 3 | 21 | Maximum precision, rarely needed |
|
||
|
||
Nodes with different modes can coexist — the mode only affects packets your node originates. The hash size is encoded in each packet's header, so receiving nodes adapt automatically.
|
||
|
||
### Mesh Tuning
|
||
|
||
These settings control how the device participates in the mesh network. They take effect immediately — no reboot required (except `gps.baud`).
|
||
|
||
#### Rx Delay (rxdelay)
|
||
|
||
Delays processing of flood packets based on signal quality. Stronger signals are processed first; weaker copies wait longer and are typically discarded as duplicates. Direct messages are always processed immediately.
|
||
|
||
```
|
||
set rxdelay 3
|
||
```
|
||
|
||
Range: 0–20 (0 = disabled, default). Higher values create larger timing differences between strong and weak signals. Values below 1.0 have no practical effect. See the [MeshSydney wiki](https://meshsydney.com/wiki) for detailed tuning profiles.
|
||
|
||
#### Airtime Factor (af)
|
||
|
||
Adjusts how long certain internal timing windows remain open. Does not change the LoRa radio parameters (SF, BW, CR) — those remain as configured.
|
||
|
||
```
|
||
set af 1.0
|
||
```
|
||
|
||
Range: 0–9 (default: 1.0). Keep this value consistent across nodes in your mesh for best coherence.
|
||
|
||
#### Multiple Acknowledgments (multi.acks)
|
||
|
||
Sends redundant ACK packets for direct messages. When enabled, two ACKs are sent (a multi-ack first, then the standard ACK), improving delivery confirmation reliability.
|
||
|
||
```
|
||
set multi.acks 1
|
||
```
|
||
|
||
Values: 0 (single ACK) or 1 (redundant ACKs, default).
|
||
|
||
#### Interference Threshold (int.thresh)
|
||
|
||
Enables channel activity scanning before transmitting. Not recommended unless your device is in a high RF interference environment — specifically where the noise floor is low but shows significant fluctuations indicating interference. Enabling this adds approximately 4 seconds of receive delay per packet.
|
||
|
||
```
|
||
set int.thresh 14
|
||
set int.thresh 0
|
||
```
|
||
|
||
Values: 0 (disabled, default) or 14+ (14 is the typical setting). Values between 1–13 are not functional and will be rejected.
|
||
|
||
#### GPS Baud Rate (gps.baud)
|
||
|
||
Override the GPS serial baud rate. The default (0) uses the compile-time value of 38400. **Requires a reboot to take effect** — the GPS serial port is only configured at startup.
|
||
|
||
```
|
||
set gps.baud 9600
|
||
set gps.baud 0
|
||
```
|
||
|
||
Valid rates: 0 (default), 4800, 9600, 19200, 38400, 57600, 115200.
|
||
|
||
### Channel Management
|
||
|
||
#### List Channels
|
||
|
||
```
|
||
get channels
|
||
```
|
||
|
||
Output:
|
||
|
||
```
|
||
[0] #public
|
||
[1] #meck-test
|
||
[2] #local-group
|
||
```
|
||
|
||
#### Add a Hashtag Channel
|
||
|
||
```
|
||
set channel.add meck-test
|
||
```
|
||
|
||
The `#` prefix is added automatically if you omit it. The channel's encryption key is derived from the name (SHA-256), matching the same method used by the on-device Settings screen and companion apps.
|
||
|
||
#### Delete a Channel
|
||
|
||
```
|
||
set channel.del 2
|
||
```
|
||
|
||
Channels are referenced by their index number (shown in `get channels`). Channel 0 (public) cannot be deleted. Remaining channels are automatically compacted after deletion.
|
||
|
||
### 4G Modem (4G Variant Only)
|
||
|
||
#### Enable / Disable Modem
|
||
|
||
```
|
||
set modem on
|
||
set modem off
|
||
```
|
||
|
||
#### Set APN
|
||
|
||
```
|
||
set apn telstra.internet
|
||
```
|
||
|
||
To clear a custom APN and revert to auto-detection on next boot:
|
||
|
||
```
|
||
set apn
|
||
```
|
||
|
||
### Clock Sync
|
||
|
||
Set the device's real-time clock from a Unix timestamp. This is especially important for the T5S3 E-Paper Pro which has no GPS to auto-set the clock. These are standalone commands (not `get`/`set` prefixed) — matching the same `clock sync` command used on MeshCore repeaters.
|
||
|
||
#### View Current Time
|
||
|
||
```
|
||
clock
|
||
```
|
||
|
||
Output:
|
||
|
||
```
|
||
> 2026-03-13 04:22:15 UTC (epoch: 1773554535)
|
||
```
|
||
|
||
If the clock has never been set:
|
||
|
||
```
|
||
> not set (epoch: 0)
|
||
```
|
||
|
||
#### Sync Clock from Serial
|
||
|
||
```
|
||
clock sync 1773554535
|
||
```
|
||
|
||
The value must be a Unix epoch timestamp in the 2024–2036 range.
|
||
|
||
**Quick one-liner from your terminal (macOS / Linux / WSL):**
|
||
|
||
```
|
||
echo "clock sync $(date +%s)" > /dev/ttyACM0
|
||
```
|
||
|
||
Or paste directly into the Arduino IDE Serial Monitor:
|
||
|
||
```
|
||
clock sync 1773554535
|
||
```
|
||
|
||
**Tip:** On macOS/Linux, run `date +%s` to get the current epoch. On Windows PowerShell: `[int](Get-Date -UFormat %s)`.
|
||
|
||
#### Boot-Time Auto-Sync (T5S3)
|
||
|
||
When the T5S3 boots with no valid RTC time and detects a USB serial host is connected, it sends a `MECK_CLOCK_REQ` handshake over serial. If you're using PlatformIO's serial monitor (`pio device monitor`), the built-in `clock_sync` monitor filter responds automatically with the host computer's current time — no user action required. The sync appears transparently in the boot log:
|
||
|
||
```
|
||
MECK_CLOCK_REQ
|
||
(Waiting 3s for clock sync from host...)
|
||
> Clock synced to 1773554535
|
||
```
|
||
|
||
If no USB host is connected (e.g. running on battery), the sync window is skipped entirely with no boot delay.
|
||
|
||
**Manual fallback:** If you're using a serial terminal that doesn't have the filter (e.g. `screen`, PuTTY), you can paste a `clock sync` command during the 3-second window, or any time after boot:
|
||
|
||
```
|
||
clock sync $(date +%s)
|
||
```
|
||
|
||
### System Commands
|
||
|
||
| Command | Description |
|
||
|---------|-------------|
|
||
| `reboot` | Restart the device |
|
||
| `rebuild` | Erase filesystem, re-save identity + prefs + contacts + channels |
|
||
| `erase` | Format the filesystem (caution: loses everything) |
|
||
| `ls UserData/` | List files on internal filesystem |
|
||
| `ls ExtraFS/` | List files on secondary filesystem |
|
||
| `cat UserData/<path>` | Dump file contents as hex |
|
||
| `rm UserData/<path>` | Delete a file |
|
||
| `help` | Show command summary |
|
||
|
||
---
|
||
|
||
## Common Workflows
|
||
|
||
### First-Time Setup
|
||
|
||
Plug in your new T-Deck Pro and run through these commands to get on the air:
|
||
|
||
```
|
||
set name YourCallsign
|
||
set preset Australia
|
||
set utc 10
|
||
set channel.add local-group
|
||
get all
|
||
```
|
||
|
||
### Switching to a New Region
|
||
|
||
Moving from Australia to the US? One command:
|
||
|
||
```
|
||
set preset USA/Canada (Recommended)
|
||
```
|
||
|
||
Verify with:
|
||
|
||
```
|
||
get radio
|
||
```
|
||
|
||
### Custom Radio Configuration
|
||
|
||
If none of the presets match your local group or you need specific parameters, set them directly. You can do it all in one command:
|
||
|
||
```
|
||
set radio 916.575 62.5 8 8
|
||
set tx 20
|
||
```
|
||
|
||
Or one parameter at a time if you're only adjusting part of your config:
|
||
|
||
```
|
||
set freq 916.575
|
||
set bw 62.5
|
||
set sf 8
|
||
set cr 8
|
||
set tx 20
|
||
```
|
||
|
||
Both approaches apply immediately. Confirm with `get radio` to double-check everything took:
|
||
|
||
```
|
||
get radio
|
||
> freq=916.575 bw=62.5 sf=8 cr=8 tx=20
|
||
```
|
||
|
||
### Troubleshooting Radio Settings
|
||
|
||
If you're not sure what went wrong, dump everything:
|
||
|
||
```
|
||
get all
|
||
```
|
||
|
||
Compare the radio section against what others in your area are using. If you need to match exact parameters from another node:
|
||
|
||
```
|
||
set radio 916.575 62.5 7 8
|
||
set tx 22
|
||
```
|
||
|
||
### Backing Up Your Settings
|
||
|
||
Use `get all` to capture a snapshot of your configuration. Copy the serial output and save it — you can manually re-enter the settings after a firmware update or device reset if your SD card backup isn't available.
|
||
|
||
---
|
||
|
||
## Tips
|
||
|
||
- **All radio changes apply live.** There is no need to reboot after changing frequency, bandwidth, spreading factor, coding rate, or TX power. The radio reconfigures on the fly.
|
||
- **Preset selection by number is faster.** Once you've seen `get presets`, use the index number instead of typing the full name.
|
||
- **Settings are persisted immediately.** Every `set` command writes to flash. If power is lost, your settings are safe.
|
||
- **SD card backup is automatic.** If your T-Deck Pro has an SD card inserted, settings are backed up after every change. On a fresh flash, settings restore automatically from the SD card.
|
||
- **The `get all` command is your friend.** When in doubt, dump everything and check. |