Squawk

No description available.

Squawk

A modern, polished desktop GUI for ham radio packet chatting over KISS TNCs — built in Rust with egui.

Features

  • Monitor tab — live view of all AX.25 UI frames heard, with station sidebar
  • TCP TNC backend — connect to software TNCs like Direwolf over KISS/TCP
  • Serial TNC backend — connect to hardware TNCs via serial port

Status

Feature Status
UI frames (unconnected broadcast) ✅ Working
Monitor tab with station sidebar ✅ Working
TCP KISS backend ✅ Working
Serial KISS backend ✅ Working
AX.25 connected sessions (SABM/UA) 🚧 In progress — UI is present but session establishment is buggy

Requirements

  • Rust 1.85+ (edition 2024)
  • A Linux, macOS, or Windows desktop
  • A KISS TNC reachable over TCP or serial — e.g. Direwolf, SoundModem, or a hardware TNC

Build

cargo build --release

The binary is at target/release/squawk.

Usage

  1. Enter your callsign in the top bar.
  2. Choose a connection type — TCP (host:port) or Serial (port + baud).
  3. Click Connect.
  4. Monitor tab: watch all UI frames on the channel. Click a callsign in the sidebar to set the destination.
  5. Sessions tab (in progress): UI is present for AX.25 connected sessions but session establishment is not yet fully working.

Connecting to Direwolf

In your direwolf.conf, set:

KISSPORT 8001

Then in Squawk, select TCP, host 127.0.0.1, port 8001.

Connecting via Serial

Select Serial, enter the port (e.g. /dev/ttyUSB0 or COM3), and set the baud rate to match your TNC (typically 9600).

Architecture

src/
  main.rs        — eframe entry point
  app.rs         — egui UI, event loop, session routing
  ax25.rs        — AX.25 frame encode/decode (UI, I, S, U frames)
  kiss.rs        — KISS framing (encode + streaming decoder)
  session.rs     — AX.25 connected-mode state machine
  tnc/
    mod.rs       — TncHandle, TncEvent, TncCommand types
    tcp.rs       — TCP KISS backend (background thread)
    serial.rs    — Serial KISS backend (background thread)

License

Licensed under the MIT License.