# Changelog

## v0.7.0-pre

Hardware bring-up milestone: live RDS now decodes on PlutoSDR, with stabilized sample-rate handling, persistent DSP state, and phase-coherent MPX/RDS integration.

## v0.6.0-pre

Hardware integration: SoapySDR CGO binding, IQ resampling, TX CLI mode.

### Added
- CGO SoapySDR native driver (`internal/platform/soapysdr/native.go`)
  - Device enumerate, open, configure (frequency, gain, sample rate)
  - TX stream setup with CF32 format
  - writeStream with MTU-chunking and timeout
  - Activate/deactivate/close stream lifecycle
  - Build-tagged: `//go:build soapy`
- Stub driver for non-CGO builds (`internal/platform/soapysdr/stub.go`)
- `soapysdr.Available()` / `soapysdr.Enumerate()` API
- IQ resampler (`dsp.ResampleIQ`) — composite→device rate via linear interpolation
- CLI flags: `--tx`, `--tx-auto-start`, `--list-devices`
- Signal handling (SIGINT/SIGTERM) for clean shutdown in TX mode
- `txBridge` adapter connecting Engine to control plane TXController
- PlutoSDR config example (`docs/config.plutosdr.json`)
- Engine now resamples IQ to device rate when rates differ

### Build
- Without hardware: `go build ./cmd/fmrtx`
- With SoapySDR: `go build -tags soapy ./cmd/fmrtx`

## v0.5.0-pre
[previous entries]
