diff --git a/trx-client.toml.example b/trx-client.toml.example deleted file mode 100644 index 0e1ae8d..0000000 --- a/trx-client.toml.example +++ /dev/null @@ -1,101 +0,0 @@ -# trx-client Configuration File -# -# Copy this file to one of: -# ./trx-client.toml (current directory) -# ~/.config/trx-rs/client.toml (user config) -# /etc/trx-rs/client.toml (system-wide) -# -# Or specify a custom path with: trx-client --config /path/to/config.toml -# -# CLI arguments override config file values. - -[general] -# Callsign or station identifier displayed in frontends -callsign = "N0CALL" - -# Log level: trace, debug, info, warn, error -# log_level = "info" - -[remote] -# Remote trx-server URL (host:port) -url = "192.168.1.100:9000" -# Optional target rig ID on a multi-rig server (omit to use server default rig) -# rig_id = "hf" - -# Poll interval in milliseconds -poll_interval_ms = 750 - -[remote.auth] -# Bearer token for authenticating with the remote server -token = "my-token" - -[frontends.http] -# Enable HTTP/REST frontend with SSE for real-time updates -enabled = true -listen = "127.0.0.1" -port = 8080 - -[frontends.http.auth] -# Optional passphrase-based authentication for the HTTP frontend -# Disabled by default to preserve backward compatibility - -# Enable authentication (default: false) -enabled = false - -# Read-only passphrase: grants access to status/events/audio (rx role) -# Leave unset to disable rx access -# rx_passphrase = "rx-only-passphrase" - -# Full control passphrase: grants access to all endpoints including TX/PTT (control role) -# Leave unset to disable control access -# control_passphrase = "full-control-passphrase" - -# Enforce TX/PTT access control (default: true) -# When true, TX/PTT endpoints return 404 to authenticated users without control role -tx_access_control_enabled = true - -# Session time-to-live in minutes (default: 480 = 8 hours) -session_ttl_min = 480 - -# Set Secure flag on session cookie (default: false) -# Should be true if served over HTTPS; false for HTTP/localhost -cookie_secure = false - -# Cookie SameSite attribute: Strict, Lax (default), or None -# Lax is a good balance between security and usability -cookie_same_site = "Lax" - -[frontends.rigctl] -# Enable rigctl-compatible TCP interface (hamlib compatible) -enabled = false -listen = "127.0.0.1" -port = 4532 - -[frontends.http_json] -# Enable JSON-over-TCP control interface -enabled = true -listen = "127.0.0.1" -# Set to 0 to bind an ephemeral port -port = 0 -# List of accepted bearer tokens (empty = no auth) -# auth.tokens = ["example-token"] - -[frontends.audio] -# Enable remote audio stream and decode transport -enabled = true -# Remote trx-server audio port -server_port = 4531 -# Optional per-rig audio ports for multi-rig servers: -# rig_ports.ft817 = 4531 -# rig_ports.airspyhf = 4532 - -[frontends.audio.bridge] -# Enable local cpal bridge for WSJT-X virtual audio routing -enabled = false -# Optional exact output device name for RX playback -# rx_output_device = "BlackHole 2ch" -# Optional exact input device name for TX capture -# tx_input_device = "BlackHole 2ch" -# Playback/capture gain multipliers -rx_gain = 1.0 -tx_gain = 1.0 diff --git a/trx-rs.toml.example b/trx-rs.toml.example new file mode 100644 index 0000000..feaecaf --- /dev/null +++ b/trx-rs.toml.example @@ -0,0 +1,239 @@ +# trx-rs Combined Configuration File +# +# Copy this file to one of: +# ./trx-rs.toml (current directory) +# ~/.config/trx-rs/trx-rs.toml (user config) +# /etc/trx-rs/trx-rs.toml (system-wide) +# +# Or use per-binary files (trx-server.toml / trx-client.toml) without the +# section headers — both formats are supported and the section headers may +# also appear in any per-binary file passed via --config. +# +# CLI arguments override config file values. + +# ============================================================================= +# trx-server — connects to radio hardware, exposes a JSON/audio TCP server +# ============================================================================= + +[trx-server.general] +# Callsign or station identifier +callsign = "N0CALL" + +# Log level: trace, debug, info, warn, error +# log_level = "info" + +[trx-server.rig] +# Rig model: ft817 (more models coming) +model = "ft817" +# Initial frequency (Hz) before first CAT read +initial_freq_hz = 144300000 +# Initial mode before first CAT read (LSB, USB, CW, CWR, AM, WFM, FM, DIG, PKT) +initial_mode = "USB" + +[trx-server.rig.access] +# Access type: "serial" or "tcp" +type = "serial" + +# Serial port settings (when type = "serial") +port = "/dev/ttyUSB0" +baud = 9600 + +# TCP settings (when type = "tcp") +# host = "192.168.1.100" +# tcp_port = 4532 + +[trx-server.behavior] +# Polling interval when idle (milliseconds) +poll_interval_ms = 500 + +# Polling interval when transmitting (milliseconds) +poll_interval_tx_ms = 100 + +# Maximum retry attempts for transient errors +max_retries = 3 + +# Base delay for exponential backoff (milliseconds) +retry_base_delay_ms = 100 + +[trx-server.listen] +# Enable the JSON TCP listener for client connections +enabled = true + +# IP address to listen on (use "0.0.0.0" for all interfaces) +listen = "127.0.0.1" + +# TCP port to listen on +port = 4530 + +[trx-server.listen.auth] +# Authentication tokens (empty = no auth required) +tokens = [] + +[trx-server.pskreporter] +# Enable uploads of decoded FT8/WSPR spots to PSK Reporter +enabled = false + +# PSK Reporter endpoint (UDP) +host = "report.pskreporter.info" +port = 4739 + +# Optional receiver locator (4 or 6-char Maidenhead). +# If omitted, it is derived from [trx-server.general] latitude/longitude. +# receiver_locator = "JO93" + +[trx-server.aprsfi] +# Enable APRS-IS IGate uplink (forwards received RF APRS packets to APRS-IS / aprs.fi) +enabled = false + +# APRS-IS server (rotate.aprs.net does DNS round-robin across all tier-2 servers) +host = "rotate.aprs.net" +port = 14580 + +# APRS-IS passcode. -1 = auto-computed from [trx-server.general] callsign. +# passcode = -1 + +[trx-server.decode_logs] +# Optional decoder message logs to files (APRS/CW/FT8/WSPR) +enabled = false + +# Base directory for decoder logs. +# Default (if omitted): $XDG_DATA_HOME/trx-rs/decoders +# Fallback: logs/decoders +# dir = "/path/to/decoder-logs" + +# Per-decoder log file names (supported tokens: %YYYY% %MM% %DD%) +aprs_file = "TRXRS-APRS-%YYYY%-%MM%-%DD%.log" +cw_file = "TRXRS-CW-%YYYY%-%MM%-%DD%.log" +ft8_file = "TRXRS-FT8-%YYYY%-%MM%-%DD%.log" +wspr_file = "TRXRS-WSPR-%YYYY%-%MM%-%DD%.log" + +# --- SoapySDR backend example --- +# To use an SDR device instead of a physical transceiver, set: +# +# [trx-server.rig] +# model = "soapysdr" +# initial_freq_hz = 14074000 +# initial_mode = "USB" +# +# [trx-server.rig.access] +# type = "sdr" +# args = "driver=rtlsdr" +# +# [trx-server.sdr] +# sample_rate = 1920000 +# bandwidth = 1500000 +# center_offset_hz = 200000 +# +# [trx-server.sdr.gain] +# mode = "auto" +# value = 30.0 +# +# [[trx-server.sdr.channels]] +# id = "primary" +# offset_hz = 0 +# mode = "auto" +# audio_bandwidth_hz = 3000 +# decoders = ["ft8", "cw"] +# stream_opus = true +# +# [[trx-server.sdr.channels]] +# id = "wspr" +# offset_hz = 21600 +# mode = "USB" +# audio_bandwidth_hz = 3000 +# decoders = ["wspr"] +# stream_opus = false + +# ============================================================================= +# trx-client — connects to trx-server and exposes user-facing frontends +# ============================================================================= + +[trx-client.general] +# Callsign or station identifier displayed in frontends +callsign = "N0CALL" + +# Log level: trace, debug, info, warn, error +# log_level = "info" + +[trx-client.remote] +# Remote trx-server URL (host:port) +url = "192.168.1.100:9000" +# Optional target rig ID on a multi-rig server (omit to use server default rig) +# rig_id = "hf" + +# Poll interval in milliseconds +poll_interval_ms = 750 + +[trx-client.remote.auth] +# Bearer token for authenticating with the remote server +token = "my-token" + +[trx-client.frontends.http] +# Enable HTTP/REST frontend with SSE for real-time updates +enabled = true +listen = "127.0.0.1" +port = 8080 + +[trx-client.frontends.http.auth] +# Optional passphrase-based authentication for the HTTP frontend +# Disabled by default to preserve backward compatibility + +# Enable authentication (default: false) +enabled = false + +# Read-only passphrase: grants access to status/events/audio (rx role) +# Leave unset to disable rx access +# rx_passphrase = "rx-only-passphrase" + +# Full control passphrase: grants access to all endpoints including TX/PTT (control role) +# Leave unset to disable control access +# control_passphrase = "full-control-passphrase" + +# Enforce TX/PTT access control (default: true) +# When true, TX/PTT endpoints return 404 to authenticated users without control role +tx_access_control_enabled = true + +# Session time-to-live in minutes (default: 480 = 8 hours) +session_ttl_min = 480 + +# Set Secure flag on session cookie (default: false) +# Should be true if served over HTTPS; false for HTTP/localhost +cookie_secure = false + +# Cookie SameSite attribute: Strict, Lax (default), or None +cookie_same_site = "Lax" + +[trx-client.frontends.rigctl] +# Enable rigctl-compatible TCP interface (hamlib compatible) +enabled = false +listen = "127.0.0.1" +port = 4532 + +[trx-client.frontends.http_json] +# Enable JSON-over-TCP control interface +enabled = true +listen = "127.0.0.1" +# Set to 0 to bind an ephemeral port +port = 0 +# List of accepted bearer tokens (empty = no auth) +# auth.tokens = ["example-token"] + +[trx-client.frontends.audio] +# Enable remote audio stream and decode transport +enabled = true +# Remote trx-server audio port +server_port = 4531 +# Optional per-rig audio ports for multi-rig servers: +# rig_ports.ft817 = 4531 +# rig_ports.airspyhf = 4532 + +[trx-client.frontends.audio.bridge] +# Enable local cpal bridge for WSJT-X virtual audio routing +enabled = false +# Optional exact output device name for RX playback +# rx_output_device = "BlackHole 2ch" +# Optional exact input device name for TX capture +# tx_input_device = "BlackHole 2ch" +# Playback/capture gain multipliers +rx_gain = 1.0 +tx_gain = 1.0 diff --git a/trx-server.toml.example b/trx-server.toml.example deleted file mode 100644 index c5226b8..0000000 --- a/trx-server.toml.example +++ /dev/null @@ -1,141 +0,0 @@ -# trx-server Configuration File -# -# Copy this file to one of: -# ./trx-server.toml (current directory) -# ~/.trx-server.toml (legacy user config) -# ~/.config/trx-rs/server.toml (user config) -# /etc/trx-rs/server.toml (system-wide) -# -# Or specify a custom path with: trx-server --config /path/to/config.toml -# -# CLI arguments override config file values. - -[general] -# Callsign or station identifier -callsign = "N0CALL" - -# Log level: trace, debug, info, warn, error -# log_level = "info" - -[rig] -# Rig model: ft817 (more models coming) -model = "ft817" -# Initial frequency (Hz) before first CAT read -initial_freq_hz = 144300000 -# Initial mode before first CAT read (LSB, USB, CW, CWR, AM, WFM, FM, DIG, PKT) -initial_mode = "USB" - -[rig.access] -# Access type: "serial" or "tcp" -type = "serial" - -# Serial port settings (when type = "serial") -port = "/dev/ttyUSB0" -baud = 9600 - -# TCP settings (when type = "tcp") -# host = "192.168.1.100" -# tcp_port = 4532 - -[behavior] -# Polling interval when idle (milliseconds) -poll_interval_ms = 500 - -# Polling interval when transmitting (milliseconds) -poll_interval_tx_ms = 100 - -# Maximum retry attempts for transient errors -max_retries = 3 - -# Base delay for exponential backoff (milliseconds) -retry_base_delay_ms = 100 - -[listen] -# Enable the JSON TCP listener for client connections -enabled = true - -# IP address to listen on (use "0.0.0.0" for all interfaces) -listen = "127.0.0.1" - -# TCP port to listen on -port = 4530 - -[listen.auth] -# Authentication tokens (empty = no auth required) -tokens = [] - -[pskreporter] -# Enable uploads of decoded FT8/WSPR spots to PSK Reporter -enabled = false - -# PSK Reporter endpoint (UDP) -host = "report.pskreporter.info" -port = 4739 - -# Optional receiver locator (4 or 6-char Maidenhead). -# If omitted, it is derived from [general].latitude/[general].longitude. -# receiver_locator = "JO93" - -[aprsfi] -# Enable APRS-IS IGate uplink (forwards received RF APRS packets to APRS-IS / aprs.fi) -enabled = false - -# APRS-IS server (rotate.aprs.net does DNS round-robin across all tier-2 servers) -host = "rotate.aprs.net" -port = 14580 - -# APRS-IS passcode. -1 = auto-computed from [general].callsign. -# passcode = -1 - -[decode_logs] -# Optional decoder message logs to files (APRS/CW/FT8/WSPR) -enabled = false - -# Base directory for decoder logs. -# Default (if omitted): $XDG_DATA_HOME/trx-rs/decoders -# Fallback: logs/decoders -# dir = "/path/to/decoder-logs" - -# Per-decoder log file names -# Supported tokens: %YYYY% %MM% %DD% -aprs_file = "TRXRS-APRS-%YYYY%-%MM%-%DD%.log" -cw_file = "TRXRS-CW-%YYYY%-%MM%-%DD%.log" -ft8_file = "TRXRS-FT8-%YYYY%-%MM%-%DD%.log" -wspr_file = "TRXRS-WSPR-%YYYY%-%MM%-%DD%.log" - -# --- SoapySDR backend example --- -# To use an SDR device instead of a physical transceiver, set: -# -# [rig] -# model = "soapysdr" -# initial_freq_hz = 14074000 -# initial_mode = "USB" -# -# [rig.access] -# type = "sdr" -# args = "driver=rtlsdr" -# -# [sdr] -# sample_rate = 1920000 -# bandwidth = 1500000 -# center_offset_hz = 200000 -# -# [sdr.gain] -# mode = "auto" -# value = 30.0 -# -# [[sdr.channels]] -# id = "primary" -# offset_hz = 0 -# mode = "auto" -# audio_bandwidth_hz = 3000 -# decoders = ["ft8", "cw"] -# stream_opus = true -# -# [[sdr.channels]] -# id = "wspr" -# offset_hz = 21600 -# mode = "USB" -# audio_bandwidth_hz = 3000 -# decoders = ["wspr"] -# stream_opus = false