Claude 3e3fdbcb30 [feat](trx-frontend-http): add satellite scheduler UI in web frontend
Add HTML, JS, and CSS for the satellite pass scheduling overlay in the
scheduler settings panel.  The satellite section is always visible
regardless of the base scheduler mode (Grayline/TimeSpan) since it
operates as a preemption overlay.

UI features:
- Enable/disable toggle for satellite pass preemption
- Configurable pre-tune seconds (time before AOS to start tuning)
- Satellite entry table with add/edit/remove (satellite name, NORAD ID,
  bookmark, min elevation, priority)
- Preset dropdown for common weather satellites (NOAA 15/18/19,
  Meteor-M2 3/4) that auto-fills name and NORAD ID
- Bookmark selector for each satellite (sets freq, mode, decoders)
- Live pass status badge showing active satellite from scheduler status
- Status card shows "[SAT: name]" label when satellite pass triggers
- Scheduler control row visible when satellites enabled (even with
  base mode disabled)

https://claude.ai/code/session_01WzWvhFVhEP9Fqn4u6pXs3T
Signed-off-by: Claude <noreply@anthropic.com>
2026-03-28 20:21:29 +01:00
2025-11-30 23:54:05 +01:00
2025-11-30 23:54:05 +01:00

trx-rs logo

trx-rs

trx-rs is a modular amateur radio control stack written in Rust. It splits radio hardware access from user-facing interfaces so you can run rig control, SDR DSP, decoding, audio streaming, and web access as separate, composable pieces.

The project is built around two primary binaries:

  • trx-server: talks to radios and SDR backends
  • trx-client: connects to the server and exposes frontends such as the web UI

Web UI Demo

GIF placeholder: add an animated walkthrough of the website here.

What It Does

  • Controls supported radios over networked client/server boundaries
  • Exposes a browser UI, a rigctl-compatible frontend, and JSON-based control
  • Supports SDR workflows with live spectrum, waterfall, demodulation, and decode
  • Streams Opus audio between server, client, and browser
  • Runs multiple decoders including AIS, APRS, CW, FT8, RDS, VDES, and WSPR
  • Supports multi-rig deployments and SDR virtual channels
  • Loads backends and frontends via plugins

Architecture

At a high level:

  1. trx-server owns the radio hardware and DSP pipeline.
  2. trx-client connects to the server over TCP for control and audio.
  3. Frontends hang off trx-client, including the HTTP web UI.

This separation is intentional: it keeps hardware access local to one host while making control and monitoring available elsewhere on the network.

Workspace Layout

  • src/trx-core: shared types, rig state, controller logic
  • src/trx-protocol: client/server protocol types and codecs
  • src/trx-app: shared app bootstrapping, config, logging, plugins
  • src/trx-server: server binary and backend integration
  • src/trx-client: client binary and remote connection handling
  • src/trx-client/trx-frontend: frontend abstraction
  • src/decoders: protocol-specific decoder crates
  • examples/trx-plugin-example: minimal plugin example

Supported Pieces

Backends

  • Yaesu FT-817
  • Yaesu FT-450D
  • SoapySDR-based SDR backend

Frontends

  • HTTP web frontend
  • rigctl-compatible TCP frontend
  • JSON-over-TCP frontend

Decoders

  • AIS
  • APRS
  • CW
  • FT8
  • RDS
  • VDES
  • WSPR

Build Requirements

You will need Rust plus a few system libraries.

Common dependencies

  • libopus
  • pkg-config or pkgconf
  • cmake

SDR builds

  • libsoapysdr

Audio builds

  • Core Audio on macOS, or ALSA development packages on Linux

Configuration

Both trx-server and trx-client read from a shared trx-rs.toml.

  • Default lookup order: current directory, ~/.config/trx-rs, /etc/trx-rs
  • Use --config <FILE> to point at an explicit config file
  • Use --print-config to print an example combined config

Start from trx-rs.toml.example.

Quick Start

1. Build

cargo build

2. Create a config file

cp trx-rs.toml.example trx-rs.toml

Adjust backend, frontend, audio, and auth settings for your environment.

3. Run the server

cargo run -p trx-server

4. Run the client

cargo run -p trx-client

5. Open the web UI

Open the configured HTTP frontend address in a browser.

Web Frontend Highlights

  • Real-time spectrum and waterfall
  • Frequency, mode, and bandwidth control
  • Decoder dashboards and history
  • SDR virtual channels
  • Browser RX/TX audio
  • Optional authentication with read-only and control roles

Authentication

The HTTP frontend supports optional passphrase-based authentication.

  • rx: read-only access
  • control: full control access

When exposing the web UI beyond a trusted LAN, run it behind HTTPS and enable secure cookie settings in the config.

Audio

Audio is transported as Opus between server, client, and browser.

  • trx-server captures and encodes audio
  • trx-client relays audio to the HTTP frontend
  • Browsers connect over /audio

Documentation

Project Status

This is an active project with evolving APIs and frontend behavior. Expect some rough edges and ongoing refactors.

License

Licensed under BSD-2-Clause.

See LICENSES for bundled third-party license files.

S
Description
Experimental ham rig and SDR controller written in Rust
Readme 31 MiB
Languages
Rust 68.2%
JavaScript 24.1%
CSS 4.6%
HTML 3.1%