# fm-rds-tx docs ## Build & Test ### Root CLI - `go test ./...` - `go run ./cmd/fmrtx -print-config` - `go run ./cmd/fmrtx -config docs/config.sample.json` - `go run ./cmd/fmrtx --dry-run --dry-output build/dryrun/frame.json` - `go run ./cmd/fmrtx --simulate-tx --simulate-output build/sim/simulated-soapy.iqf32 --simulate-duration 250ms` - `go run ./cmd/offline -duration 500ms -output build/offline/composite.iqf32` ### Audio source modes Current no-hardware sources: - generated stereo tones via config - 16-bit PCM WAV file input via `audio.inputPath` - basic sample-rate adaptation for WAV sources into the composite generation path - transparent tone fallback if the configured WAV source cannot be loaded ### Tone configuration The current no-hardware source can be parameterized via config: - `audio.toneLeftHz` - `audio.toneRightHz` - `audio.toneAmplitude` ### HTTP control surface Available endpoints: - `GET /healthz` - `GET /status` - `GET /dry-run` - `GET /config` - `POST /config` Current patchable runtime fields via `POST /config`: - `frequencyMHz` - `outputDrive` - `toneLeftHz` - `toneRightHz` - `toneAmplitude` - `ps` - `radioText` ### Internal DSP module - `cd internal` - `go test ./...` ### Examples module - `cd examples` - `go test ./...` - `go run ./soapy_simulated` ## Dry run The dry-run mode generates a synthetic, hardware-free frame summary based on the current config. It is intended as a no-hardware smoke path for the CLI and config/control-adjacent logic. The HTTP control plane also exposes `GET /dry-run` for quick inspection of the currently effective no-hardware summary. ## Simulated transmit `--simulate-tx` runs the offline generator through the Soapy-oriented simulated backend path and writes an IQ-style artifact to disk. This is the current closest no-hardware stand-in for the future transmit pipeline in the main application path. ## Offline generation `cmd/offline` generates a deterministic no-hardware IQ/composite-style file using the repository's output backend path. This is still an MVP path, but it is a more realistic offline artifact than the JSON-only dry-run. The generator summary now reports whether the active source is tones, wav, or tone-fallback. ## Release posture Current honest release posture: **pre-v1**. Recommended milestone tag: `v0.3.0-pre`. See `CHANGELOG.md` and `RELEASE.md`.