Chapter 6
Connections
APRS-IS and the six RF interfaces — what they are and how to set them up.
The app can use APRS-IS and up to six RF interfaces at the same time. Every interface feeds the same packet stream, and each received packet is tagged with where it came from (IS, KISS, BT, BLE, AGW, USB or AUDIO). All interfaces are opened from Menu → APRS Connections.
#How transmissions are routed
| Traffic | Where it goes |
|---|---|
| Position beacons | Every connected interface at once: APRS-IS (if logged in) and every connected RF interface, including USB and Audio. RF copies use the RF path from Settings. |
| Messages and acks | The RF interface the other station was heard on directly in the last 30 minutes (KISS, Bluetooth, BLE, AGW, USB or Audio), if it is still connected — even if the station has since also been seen via APRS-IS. Otherwise wherever it was last heard; APRS-IS if that interface is not connected or the station is unknown. Long-press Send to override (chapter 9). |
| Retries | The same interface as the original send, falling back to APRS-IS if it has disconnected. |
| Objects | APRS-IS plus every connected RF interface. |
| Bulletins | APRS-IS plus every connected RF interface. |
| TX iGate | Every connected RF interface. |
| Packet terminal | One RF port, chosen in the order Bluetooth, BLE, TCP KISS, AGW, USB. |
#APRS-IS
APRS-IS is the internet backbone of APRS. Connect by tapping the status text, the APRS-IS row in the menu, the APRS Quick Settings tile, or Connect IS in Android Auto. All of these use your saved settings.
What happens when you connect
- The server name is looked up; IPv4 addresses are tried first, then IPv6, each with a 5-second timeout.
- The app sends its login line:
user CALL-SSID pass NNNNN vers G7JJF-AprsClient 1.9.9 filter r/lat/lon/km …followed by any prefix, buddy, messages-only and extra clauses. - When the server replies with its
# logrespline the state becomes logged in. If Beacon on connect is set, a beacon is sent now. - A
#keepaliveline is sent every 240 seconds so that routers and the server keep the connection open.
Reconnection
- If the server closes the connection, or nothing is received for 30 seconds, the app reconnects at once.
- After a connection error it waits 10 seconds and tries again, indefinitely, until you disconnect.
- A watchdog alarm every 9 minutes pings the server and forces a reconnect if the connection has silently died — this catches mobile networks that drop idle connections without telling the phone.
- A background job every 15 minutes restarts the service if Android has killed it.
- With Auto-reconnect on, a change of network (for example leaving Wi-Fi) triggers a clean reconnect.
- Tapping disconnect stops all of this until you connect again.
#KISS TNC over TCP/IP
Connects to any TNC that offers KISS over a TCP socket — most commonly Direwolf, but also hardware TNCs with a network port, soundmodem and similar. Open Menu → APRS Connections → KISS TNC TCP/IP.
| Field | Description |
|---|---|
| TNC Host | Host name or IP address. Default localhost (Direwolf running on the phone, e.g. in Termux). For Direwolf on a Raspberry Pi use its LAN address, e.g. 192.168.1.50. |
| Port | TCP port. Direwolf's default KISS port is 8001. |
Tap Connect. The host and port are remembered. The app sends standard KISS data frames on port 0 (FEND/FESC escaping as per the KISS specification) and accepts frames from the TNC. APRS UI frames go into the packet stream; other AX.25 frames are passed to the packet terminal.
# direwolf.conf — make sure the KISS TCP port is enabled
KISSPORT 8001
AGWPORT 8000
#Bluetooth TNC (Classic / SPP)
For TNCs that use the Bluetooth Serial Port Profile: Mobilinkd TNC2/TNC3, many radios with built-in Bluetooth KISS TNCs (for example Kenwood TH-D74/D75, BTECH UV-Pro and similar), and Arduino/ESP32 home-brew TNCs.
- Pair the TNC first in Android Settings → Bluetooth. If no paired devices are found the app offers Open BT Settings.
- Open Menu → APRS Connections → Bluetooth TNC.
- Choose the Protocol: KISS for binary KISS framing (almost all modern TNCs) or Text for TNCs that output monitored packets as text lines in TNC2 format (
CALL>DEST,PATH:info). - Tap the device in the list. The app connects and remembers the device and mode.
While connected, the dialog shows Disconnect at the top of the list. In Text mode, lines that contain both > and : are treated as packets; everything is also shown in the Text Terminal. Bluetooth TNC packets are processed by the background service, so they keep arriving with the screen off or when you are using Android Auto.
For connected-mode packet (the AX.25 terminal) the app inserts small gaps between frames on Bluetooth so that half-duplex radio TNCs have time to switch between receive and transmit.
#BLE TNC (Bluetooth Low Energy)
For radios and TNCs that carry KISS over Bluetooth Low Energy. Three BLE serial profiles are supported, and the app uses whichever the device offers:
- Nordic UART Service — VGC VR-N76, Radioddity GA-5WB, ESP32 and LoRa APRS trackers and most BLE TNCs.
- Mobilinkd BLE KISS — Mobilinkd TNC3 and TNC4, kv4p-ht, and the BTECH UV-PRO (which may advertise itself as UV-P).
- Radtel BLE KISS — Radtel RT-950 Pro and radios using the same FFE0 service.
- HM-10 style serial modules — home-built TNCs with a cheap BLE serial adapter.
BLE devices do not need to be paired first. A radio accepts only one BLE connection at a time, so disconnect the maker's own app before connecting.
- Open Menu → APRS Connections → BLE TNC. Scanning starts immediately and the title shows how many devices were found.
- Each device is listed with its name, address and signal strength (RSSI). Only devices advertising one of the supported services are shown.
- Tap a device to connect. The status line shows which profile was found. The app subscribes to the receive characteristic and sends KISS frames in 20-byte chunks, each confirmed by the TNC when it supports that.
The list stays open while the app connects and its status line shows progress. A failed attempt is retried twice; if the link still cannot be set up within 20 seconds the reason is shown:
- Could not connect or The radio closed the connection — the radio is usually busy with another connection: its own app, another phone, or this phone over Bluetooth Classic. Disconnect that first. A radio's KISS TNC also has to be switched on in its menu.
- The radio hung up straight after connecting (status 19) — the radio accepted the link and then dropped it. The usual cause is that the radio is paired in Android's Bluetooth settings (for example for Bluetooth Classic use): BLE KISS radios such as the UV-PRO are meant to be connected directly from the app, so choose Forget/Unpair there and connect again. Its own app must be closed too.
- The radio wants to be paired first — accept the pairing request, or pair the radio in Android's Bluetooth settings, then connect again.
- No BLE KISS service found — the device offers none of the supported services. Such a TNC may need to be used in Bluetooth Classic mode instead.
#Radio Control (UV-PRO, GA-5WB, VR-N76, VR-N7500)
Radios with Benshi firmware — BTECH UV-PRO, Radioddity GA-5WB, Vero VR-N76 and VR-N7500 — can be controlled from the app over Bluetooth LE. Connect the radio as a BLE TNC once, then open Menu → APRS Connections → Radio Control; the app remembers the radio, so later it works even when the BLE TNC is not connected. The app reads the radio's memory channels and lists each with its name, receive frequency, offset, CTCSS/DCS tone, bandwidth and power; A and B mark the channels selected now. Tap a channel and confirm to select it on VFO A — for example to move to the APRS channel, or to 145.825 MHz for an ISS pass.
Only the selected channel is changed: the app reads the radio's settings, changes the channel number and writes them back unchanged otherwise, then reads them again to check. Channel contents are only read, never written. The protocol follows the open benlink project. If a radio does not answer, close the window and open it again; a radio connected over Bluetooth Classic only, or another make, shows a message that it has no control service.
#AGW Interface
Connects to the AGWPE API offered by Direwolf, AGWPE, UZ7HO soundmodem and similar. Open Menu → APRS Connections → AGW Interface and enter the Host (default localhost), Port (default 8000) and Radio Port (0 = the first radio). On connect the app asks the engine for port information and turns on raw monitoring; it sends APRS packets as unproto frames with your digipeater path. The dialog lists the AGW frame types used for reference.
#USB Serial TNC
For TNCs connected with a USB OTG cable: the KV4P HT (ESP32 handheld), CP2102, CH340 and FTDI based KISS TNCs, and Direwolf on another computer via a USB-serial link.
| Field | Description |
|---|---|
| Protocol | KISS (default) or Text. |
| Baud rate | 1200, 2400, 4800, 9600 (default), 19200, 38400, 57600 or 115200. Data format is fixed at 8N1. |
Plug the device in, open Menu → APRS Connections → USB Serial, and tap Connect. Android asks for permission to use the USB device; allow it. When a recognised device is attached the dialog shows Found: device name (manufacturer). A KV4P HT (CP2102, VID 0x10C4 / PID 0xEA60) is preferred if several devices are attached, and is reset through DTR/RTS when the port opens.
USB packets are received in the background service and can be gated by the RX iGate. Beacons are sent on USB, and so are messages and acks to stations heard on USB.
#Audio DSP TNC
Two speeds: 1200 baud Bell 202 (mark 1200 Hz, space 2200 Hz) for VHF APRS on 144.800 / 144.390 MHz, and 300 baud with 1600/1800 Hz tones for HF APRS (for example 10.1476 MHz LSB, as Direwolf's MODEM 300). Choose with the chips in the Audio TNC window; the choice is remembered. On HF, tune so the signal sits on the two lines in the waterfall — within about 30 Hz; further off, decoding falls away.
A complete 1200-baud Bell 202 AFSK modem in software, using the phone's microphone input and audio output. It lets you receive — and transmit, with a suitable interface — without any TNC hardware.
| Item | Value |
|---|---|
| Modulation | Bell 202 AFSK, mark 1200 Hz, space 2200 Hz, 1200 baud, NRZI, HDLC framing |
| Sample rate | 22 050 Hz, 16-bit mono. The phone's unprocessed audio input is used where it has one (otherwise its voice-recognition input), avoiding the automatic gain and noise suppression meant for speech. |
| Demodulator | Tone correlators over one bit for each tone, separate automatic level control for mark and space (so radio de-emphasis or pre-emphasis doesn't matter), and a digital PLL that keeps the bit clock locked to the incoming signal. CRC-CCITT checked; frames 18–400 bytes. |
| TX preamble | 45 flags (300 ms) before the frame, so a VOX has time to open; 5 after, plus 0.25 s silence. Frames sent together go in one transmission. |
| TX level | Fixed 90% of full scale; adjust with the phone's media volume |
| PTT | Not keyed by the app — use the radio's VOX or a VOX-keyed interface |
The dialog contains a live waterfall (0–3400 Hz, mark and space marked) so you can see the two tones and set levels. It adjusts itself to the input level: the background noise shows dark blue and signals up to 50 dB stronger run through green and yellow to red. The dialog also shows the last eight received packets, and a transmit box pre-filled with a test position packet.
- Start RX / Stop RX — start or stop listening (microphone permission needed).
- Transmit — modulate and play the packet in the transmit box.
- Loopback — encode, modulate and decode the packet entirely in software to prove the modem works without any radio.
- Keep Running closes the dialog and keeps receiving in the background; Stop & Close stops it.
Wiring: radio speaker or data output to the phone's microphone input (through an attenuator and isolation as needed) and the phone's headphone output to the radio's microphone input, with VOX on the radio. Commercial APRS audio cables with a TRRS plug are available for most handhelds.
#TNC Bridge — the phone as a network TNC
Menu → APRS Connections → TNC Bridge lets a program on a PC use the radio the phone is connected to: Xastir, YAAC, APRSIS32, PinPoint, Outpost, a BBS or node program — anything that can use a KISS TNC over TCP/IP. Choose the radio interface (any connected one: Bluetooth, BLE, USB, TCP KISS, AGW or the audio modem) and a port (default 8001), and tap Start bridge. The window shows the phone's network address; in the PC program choose a KISS TCP/IP TNC at that address and port.
- Every frame the radio receives is passed to the program, and the program's frames are transmitted.
- Up to four programs can be connected at once. KISS settings commands (TXDELAY, persistence…) are ignored: the radio or TNC keeps its own.
- The app carries on as usual alongside — map, messages, iGate and terminal all keep working.
- The bridge runs until you stop it or the app is closed. The phone and PC must be on the same network (Wi-Fi, or the PC on the phone's hotspot or USB tethering).
#Text Terminal
Menu → APRS Connections → Text Terminal opens a plain serial terminal on the Bluetooth TNC (or the USB TNC if Bluetooth is not connected). Use it to talk to a TNC's command interpreter, to check that data is arriving, or with Text-mode TNCs. Received text is green, what you send is in the accent colour, status lines are amber. Each line you send ends with a carriage return. The terminal keeps the last 500 lines; Clear empties it.