Conversation
A kiss radio's device can now be tcp://host:port. The driver dials it with a connect timeout and TCP keepalives instead of opening a serial port, and reconnects and re-applies the config exactly as for a serial modem. This is how RepeaterTastic uses meshtasticd's raw modem mode, which serves a Linux LoRa HAT or CH341 stick with the Mesh KISS v2 protocol (currently the raw-modem branch of A13xB0/firmware). - config: a malformed tcp:// device is rejected, and two radios can't share one (host names compared case-insensitively). - kisstool: --dev tcp://host:port works. - web: the setup "Test modem" probe accepts tcp:// devices; before a password is set it only dials loopback addresses. - docs: meshtasticd-raw-modem.md, linked from the README, configuration and hardware pages. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SJZ75CWob1eMXeTa8Q2nLc
Edit radio and Add radio get a USB modem / meshtasticd switch: meshtasticd takes a host and port and saves tcp://host:port, with a hint about RawModemPort. The setup wizard lists meshtasticd's raw modem next to the serial ports. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SJZ75CWob1eMXeTa8Q2nLc
FESC FESC TFEND decoded to FEND; the second FESC is an invalid escaped byte and is dropped, so TFEND is then a literal 0xDC, matching the modem firmware. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SJZ75CWob1eMXeTa8Q2nLc
This was referenced Sep 16, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Warning
Awaiting upstream review of meshtastic/firmware#11863
KISS modem over TCP, for meshtasticd's raw modem mode
A
kissradio's device can now betcp://host:port. This lets RepeaterTastic use a Linux LoRa HAT (SPI) or CH341 USB stick through meshtasticd's raw modem mode, which serves the radio with the same Mesh KISS v2 protocol, so no Heltec/RAK board is needed.It needs a patched meshtasticd for now: the
raw-modembranch of A13xB0/firmware, until it is proposed and merged upstream. This PR is separate from the native SPI driver (#3) and based onmainonly.Changes
internal/radio/kiss:tcp://devices connect with anet.Dialer(connect timeoutDialTimeout, default 5s; TCP keepalives; no Nagle) instead of opening a serial port. They reconnect and re-apply the config the same way as serial.TCPAddr()parses and validates the address. Tests: the fake modem is served over a loopback TCP listener, covering handshake, configure, RX with escaping and RxMeta, TX, and a meshtasticd restart (drop, refused dials, reconnect, config re-applied). Address parsing is tested too.internal/config: a malformedtcp://device is rejected. Two radios on the sametcp://address are refused, with host names compared case-insensitively, because meshtasticd serves one client at a time.kisstool:--dev tcp://host:portworks (help text updated).tcp://devices. Before a password is set it only dials loopback addresses, so the unauthenticated probe can't be pointed at other hosts. The UI is unchanged and needs no rebuild.docs/meshtasticd-raw-modem.mdcovers building and enabling the fork, theconfig.yamlsnippet, the RepeaterTastic config, and caveats: no auth on the port, one client, Docker networking,tx_enabledand regional power limits. It is linked from the README docs table,docs/configuration.mdanddocs/hardware.md.Testing
go vet ./...andgo test ./...pass.meshtasticd -s --raw-modem 4405):kisstool info --dev tcp://127.0.0.1:…reportsmeshtasticd sim,Mesh KISS v2, patched;kisstool listenconfigures EU_868 LongFast and reads it back;device: tcp://…opens the radio and logsradio configured.send-textgets TxDone failure there as expected.🤖 Generated with Claude Code
https://claude.ai/code/session_01SJZ75CWob1eMXeTa8Q2nLc