KISS over Bluetooth

Talk to a Bluetooth-paired hardware TNC from the graywolf Android tablet build.

Overview

Many handheld TNCs — Mobilinkd TNC3 and TNC4, the Kenwood TH-D74 and TH-D75 in Bluetooth mode, and others — expose a KISS interface over the Bluetooth Serial Port Profile (SPP). When graywolf runs on an Android tablet, it can connect to one of these TNCs and use it as a full radio channel: beacon into it, digipeat across it, and iGate from it. The TNC handles all RF carrier sensing, timing, and actual transmission; graywolf is just the packet router on top.

i

This interface is available only on the Android tablet build of graywolf. Linux, macOS, and Windows desktops do not see Bluetooth as a KISS interface type — on those platforms, use KISS over Serial instead, including for Bluetooth-paired TNCs that present themselves as a virtual serial port (e.g. /dev/rfcomm0 on Linux).

Graywolf does not pair Bluetooth devices itself. Pairing happens in Android's Settings app, the same way you would pair a headset or a keyboard. Once a TNC is paired (Android calls this "bonded"), it shows up in graywolf's KISS interface form as a selectable device.

Setup

Step 1 — Pair the TNC in Android Settings

  1. Power on the TNC and put it into pairing mode. Consult the TNC's manual for the procedure (Mobilinkd TNCs typically enter pairing mode by holding the button at power-on; the radios have a Bluetooth menu).
  2. On the tablet, open Settings → Connected devices → Pair new device (the exact path varies by Android version).
  3. Pick the TNC from the scan list and complete pairing. The TNC should then appear under Paired devices.
  4. Confirm the TNC is in KISS mode. Some TNCs ship in a human-readable command mode by default and must be switched. The TNC's configuration app (for example, the Mobilinkd app) sets this.

Step 2 — Grant Bluetooth permission to graywolf

The first time you open the KISS Interfaces page in graywolf, the Bluetooth section shows a prompt to grant Bluetooth permission. Tap Grant Bluetooth permission and accept the system dialog. Without this permission graywolf cannot list bonded devices.

Step 3 — Create a KISS-only channel

  1. Open Radio → Channels in the web UI.
  2. Click + Add Channel.
  3. In the channel-type segmented control at the top of the form, choose KISS-TNC only. A KISS-only channel is a logical routing lane, not a modulated radio channel.
  4. Name it to reflect the attached TNC (for example, TNC4 or TH-D75). Give it a channel number that does not collide with your existing RF channels.
  5. Click Save. The channel appears on the list with a KISS-TNC only badge. Its backing shows — Unbound until you attach the Bluetooth interface below.

Step 4 — Create a Bluetooth KISS interface

  1. Open Interfaces → KISS TNC (the page is titled KISS Interfaces).
  2. Click + Add KISS Interface.
  3. In the Type field, choose Bluetooth Serial. On the Android build this is the default. (If the Type field does not offer Bluetooth Serial, you are not on the Android build.)
  4. The Device dropdown lists every Bluetooth device currently paired in Android Settings. Pick your TNC. The list shows the device name and MAC address.
  5. In the Channel picker, select the KISS-only channel you just created.
  6. Set Mode to TNC. In TNC mode the interface is treated as a radio, not a software client. This also reveals the transmit opt-in checkbox.
  7. Check the box labeled Allow digipeater/beacon/iGate to transmit on this interface to allow graywolf's TX pipeline to send frames to the TNC. Without this checkbox the interface only receives.
  8. Click Create. Graywolf opens the RFCOMM connection to the TNC. The row's status badge shows Connected once the link comes up. The channel's backing on the Channels page flips to ● Live.

The interface card lists the TNC's name and MAC address so you can tell connected TNCs apart at a glance.

!

Make sure the TNC is in KISS mode before saving the interface in graywolf. Graywolf opens the Bluetooth connection and begins speaking KISS immediately; it does not send any mode-switch commands.

Reconnect Behavior

If the TNC moves out of range, is powered off, or the Bluetooth link drops for any reason, graywolf backs off and automatically retries the connection. You do not need to restart the app. When the TNC is back in range and powered on, graywolf reconnects and the channel returns to ● Live status.

Editing the device or mode on the KISS Interfaces page and clicking Save triggers a hot reload: graywolf closes the existing connection and re-opens with the new settings.

If you unpair the TNC in Android Settings while graywolf is running, the interface card's status flips to Unpaired. Re-pair the device in Android Settings, then refresh the KISS Interfaces page; the bonded-device list will include it again.

Troubleshooting

SymptomLikely causeFix
Device dropdown is empty when adding the interface Bluetooth permission not granted to graywolf Tap Grant Bluetooth permission in the form, accept the system dialog, then re-open the form.
Device dropdown is still empty after granting permission TNC is not paired in Android yet Pair the TNC in Android Settings → Connected devices, then tap Refresh in the form.
Interface status stuck on Reconnecting TNC is off, out of range, or asleep Power on the TNC and bring it within Bluetooth range (roughly 10 m / 30 ft). Graywolf reconnects on its own.
Status flips to Unpaired TNC was removed from Android's paired-devices list Re-pair the TNC in Android Settings, then refresh the KISS Interfaces page.
Connected, but no frames decode TNC is not actually in KISS mode — it is sitting at the command prompt Switch the TNC into KISS mode using its configuration app (Mobilinkd app, Kenwood radio menu, etc.).
Beacon scheduled but nothing transmits Transmit checkbox is off, or channel is unbound Open the KISS interface, confirm Mode is TNC and Allow digipeater/beacon/iGate to transmit on this interface is checked. Confirm the channel's backing on the Channels page shows ● Live.

Notes

Related Pages