Skip to content

10 m HF shouts ​

CrossTalk's amateur HF hop carries a short plaintext message over a licensed 10 m station when there is no other Reticulum path. Its codec is public, and the bridge implements it: receive on the kit's RTL-SDR, and transmit through a USB-audio radio only when an operator callsign is configured.

Amateur radio

Transmitting needs an amateur licence and the operator's callsign in every shout. The bridge keeps transmit locked until a callsign is set, and the control operator is responsible for every emission. Listening needs no licence.

The codec ​

ItemValue
Centre28.124 MHz (the US unattended-station window is 28.120 to 28.189 MHz)
Modulationcontinuous-phase 2-FSK, mark +50 Hz, space -50 Hz, 100 baud
Burstseven Costas tones, an 8-byte click-track, a 64-bit unique word, the block count three times, LDPC blocks, a tail
CodingLDPC (128, 64) with a published parity-check matrix, 16-way interleaved; CRC-16 inside
Framecallsign (radix-40), the recipient's 16-byte LXMF delivery hash, sequence, fragment, up to 200 bytes of UTF-8
Encryptionnone; nothing on the air is a Reticulum packet

The bridge's implementation reproduces the recipe's worked example exactly and is checked against a NumPy reference written from the recipe alone.

Receiving ​

hf_0 is a gateway (Settings > Gateways, type HF). While it receives, it holds the RTL-SDR: the spectrum monitor is parked and every spectrum band is blind until the gateway stops. GET /api/hf/status shows the receive state, decode count, the last shout's tuning offset and unique-word match, and whether transmit is enabled.

A decoded shout arrives as a plaintext inbound message from the callsign, addressed to lxmf:<hash>, and shows on the live packet feed as bearer hf. Fragments are reassembled.

Transmitting ​

With MESHSAT_HF_TX_CALLSIGN set, an outbound message to the gateway is fragmented, LDPC-wrapped and rendered as audio with the tones around 1 kHz, for a radio dialled to 28.123 MHz USB. PTT is keyed over CAT (TX; and RX;, the Kenwood set a QRP Labs QMX speaks) on MESHSAT_HF_TX_CAT_PORT, and the audio plays through aplay on MESHSAT_HF_TX_AUDIO_DEVICE. Every shout is audit-logged.

Configuration ​

MESHSAT_HF_RX_ENABLED=true
MESHSAT_HF_FREQ_HZ=28124000
MESHSAT_HF_TX_CALLSIGN=
MESHSAT_HF_TX_AUDIO_DEVICE=
MESHSAT_HF_TX_CAT_PORT=

Verified ​

The receiver decodes the recipe's example at 20, 10 and 5 dB signal to noise with tuning errors up to 250 Hz, from 240 kS/s IQ as the RTL-SDR delivers it, and end to end through a simulated rtl_tcp stream. A shout recorded off the air has not been decoded yet, and no transmit radio has been on the bench: transmit is exercised up to the rendered audio.

Made by MeshSat