Three root causes from the 2026-08-16 framework-pt incident where a replugged radio detected but never connected: - detect_serial_devices scanned a hardcoded ttyUSB0-2/ttyACM0-2 list, so a radio enumerating at index 3+ was permanently invisible. Now scans /dev for all ttyUSB*/ttyACM* nodes (deterministic order, /dev/mesh-radio alias still first and still wins the dedup). - An operator rnode-rf-settings.json port override silently outranked the device_path the user just chose in the detection modal. mesh.configure now clears a stale override when a different device is configured (symlink-resolved compare keeps /dev/mesh-radio aliases intact). - Espressif native-USB boards (303a, ESP32-S2/S3/C3 RNodes) had no udev rule, so they never got the stable /dev/mesh-radio alias and a persisted alias path dangled after a port move. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
15 lines
1.3 KiB
Plaintext
15 lines
1.3 KiB
Plaintext
# Stable symlink for USB serial adapters used as mesh radios.
|
|
# Creates /dev/mesh-radio pointing to the underlying ttyUSB device.
|
|
# Supports MeshCore and Meshtastic radios using CP2102 (Heltec V3),
|
|
# CH340 (T-Beam), FTDI (RAK WisBlock), and known USB CDC ACM radios.
|
|
SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="mesh-radio", MODE="0660", GROUP="dialout"
|
|
SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="mesh-radio", MODE="0660", GROUP="dialout"
|
|
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="mesh-radio", MODE="0660", GROUP="dialout"
|
|
SUBSYSTEM=="tty", ATTRS{idVendor}=="239a", KERNEL=="ttyACM[0-9]*", SYMLINK+="mesh-radio", MODE="0660", GROUP="dialout"
|
|
SUBSYSTEM=="tty", ATTRS{idVendor}=="2e8a", KERNEL=="ttyACM[0-9]*", SYMLINK+="mesh-radio", MODE="0660", GROUP="dialout"
|
|
# Espressif native-USB (ESP32-S2/S3/C3 "USB JTAG/serial debug unit", e.g.
|
|
# Heltec V3 / T-Deck class RNode boards plugged in via native USB). Without
|
|
# this a replugged radio has no stable alias and a persisted /dev/mesh-radio
|
|
# device_path dangles forever (observed live on a fleet node 2026-08-16).
|
|
SUBSYSTEM=="tty", ATTRS{idVendor}=="303a", KERNEL=="ttyACM[0-9]*", SYMLINK+="mesh-radio", MODE="0660", GROUP="dialout"
|