Skip to content

APRS Module

Kevin edited this page Oct 23, 2026 · 2 revisions

APRS Module

Related pages:

Pi-Sat's optional APRS module decodes 1200 baud APRS packets from a copy of the native IC-9700 receive audio. It can also transmit position, status, and direct message packets through the same radio.

The module is available in the native IC-9700 experience. In Home, connect the radio from the top toolbar, open Modules, and select APRS. The Modules menu is hidden in the Legacy radio experience. The decoder starts disabled whenever the Pi-Sat service starts.

Receive

Select Enable in the module's Receive toolbar. Pi-Sat starts a Dire Wolf process, sends it raw signed 16-bit little-endian PCM, and reads decoded AX.25 frames from Dire Wolf's local KISS connection. The module retains the newest 25 packets across service restarts.

The operator selects and owns the receive frequency. Pi-Sat does not verify that the radio is parked on an APRS channel. If the frequency, mode, or receive level is wrong, the module remains enabled without producing packets.

The receiver selector in [aprs] chooses which part of the stereo native stream is decoded:

Value Input
main MAIN, normally the left stereo side
right Right stereo side
both Mono sum

Use the Channel levels readout to identify the receiver carrying traffic. The Decoder input readout reports the current rate, channel count, selected side, and sample count.

The Decoder input slider adjusts the decoder copy between -30 and +12 dB. It does not alter radio gain, browser audio, SSTV input, or the levels reported for the two radio channels. The setting is stored as [aprs] rx_gain_db.

Receiver diagnostics

The APRS page exposes the receive chain in one place:

Readout Meaning
State Whether the module is disabled, waiting for radio audio, listening, or failed
Audio source The native receive stream supplied to the module
Engine The Dire Wolf decoder status
Decoder input Audio rate, layout, selected side, and samples received
Channel levels Peak level of the native left and right channels before decoder gain
Decoder level Peak level after the decoder input trim
Decoder link Whether Pi-Sat connected to Dire Wolf's local KISS interface
Decoder log Startup information and decoded-frame output from Dire Wolf

Decoder link: No connection means Pi-Sat cannot read the KISS output. If the decoder log contains completed frames, the receive and Dire Wolf path is still working and the fault is after decoding.

Dire Wolf can report Audio input level is too high. Reduce the Decoder input slider first. Lowering it affects only APRS decoding.

Manual transmit

The transmit section is disarmed after every backend restart. Enable Arm transmit before using any of the three manual actions:

  • Send Beacon sends the station position and configured APRS symbol.
  • Custom Message sends an APRS status packet of up to 62 characters.
  • Direct Message sends an addressed packet of up to 67 characters to the callsign entered in Direct message callsign.

There is no automatic beacon timer. Pi-Sat does not provide digipeating or an APRS-IS connection.

For each transmission, Pi-Sat formats the packet, uses Dire Wolf's gen_packets helper to produce a complete Bell 202 audio burst, keys the native radio, sends the burst through the shared radio audio path, and releases PTT. Dire Wolf does not key the radio and never receives a transmit path. Pi-Sat owns PTT, the configured key-up delay, and the tail delay.

The IC-9700 modulation input and level must route LAN transmit audio correctly. Pi-Sat checks the radio before keying and rejects a request when the selected modulation input or LAN level would produce a silent carrier. If the request is rejected, inspect Radio and the radio's modulation configuration.

Receive and transmit share one radio. Do not transmit during a tracked pass when a retune could interrupt the burst. The current APRS transmit path sends one operator-requested frame; it does not wait for an acknowledgement.

Configuration

The local configuration file is pi-sat-controller.conf in <INSTALL_DIR>. Edit it while APRS is disabled and restart the service if you change server-level or radio settings outside the Settings page.

The [aprs] section contains:

Setting Purpose
mycall Sender callsign and SSID. An empty value disables transmit
channel main, right, or both for the decoder input
destination APRS destination field, default APDW16
path Digipeater path, default WIDE1-1,WIDE2-1
symbol Two-character APRS symbol table and code
comment Position-comment text
tx_delay_ms Delay between key-up and the start of the burst
tx_tail_ms Delay between the end of the burst and PTT release
amplitude gen_packets amplitude, 0 through 200 percent
min_interval_s Minimum interval between manual transmit requests
rx_gain_db Receive-only level trim for this decoder

The beacon uses the [station] position. Pi-Sat does not read a transmit position from the radio.

These optional environment variables override decoder locations or endpoints:

Variable Purpose
PI_SAT_APRS_DIREWOLF Path to the Dire Wolf executable
PI_SAT_APRS_KISS_PORT Local KISS port, default 8001
PI_SAT_APRS_MYCALL Callsign override used when [aprs] mycall is empty

Pi-Sat regenerates the local Dire Wolf configuration at startup. The generated file feeds stdin audio to one channel at the native sample rate, uses 1200 baud, disables AGW and Dire Wolf transmit, and gives Pi-Sat a local KISS link. The listener is not intended to be exposed as a remote service.

Known limitations

  • Only the selected receiver side, or the configured mono sum, is decoded.
  • Compressed APRS positions are labeled but their base-91 position is not expanded.
  • Manual transmit offers position beacons, status text, and direct messages. Automatic beacons, digipeating, APRS-IS, and acknowledgement tracking are not provided.
  • Transmit timing depends on the radio's key-up behavior. The configured delay and tail values are starting points and should be checked with the station's actual transmitter.
  • A correctly enabled decoder can still show no packets when the radio is on the wrong frequency, mode, or receiver side.

Licensing

Dire Wolf is GPL-2.0-or-later and is maintained by John Langner, WB2OSZ. Pi-Sat runs Dire Wolf as a separate program. Distributing a Dire Wolf binary carries its own license obligations. Project source: https://github.com/wb2osz/direwolf.

Clone this wiki locally