[feat](trx-backend): VirtualChannelManager trait + SdrVirtualChannelManager impl
Add VirtualChannelManager trait in trx-core::vchan with types VChannelInfo, VChanError, and SharedVChanManager alias. Re-export from trx-backend::vchan. Implement SdrVirtualChannelManager in trx-backend-soapysdr: - Wraps Arc<SdrPipeline> + shared AtomicI64 center_hz - add_channel / remove_channel / set_channel_freq / set_channel_mode - Slot-stability: on remove, shifts pipeline_slot for surviving channels - update_center_hz: recomputes IF offsets for all virtual channels on retune - update_primary_meta: keeps channel-0 freq/mode in sync for API consumers Wire into SoapySdrRig (holds Arc<SdrVirtualChannelManager>, exposes channel_manager()), SdrPipeline (shared_center_hz AtomicI64), and RigHandle (vchan_manager: Option<SharedVChanManager>). main.rs extracts the manager before boxing the SDR rig and stores it in the handle. Add max_virtual_channels to SdrConfig (default 4, TOML-configurable). Add 5 unit tests: add, remove, permanent guard, cap, out-of-bandwidth. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: Stan Grams <sjg@haxx.space>
This commit is contained in:
@@ -13,6 +13,7 @@ trx-core = { path = "../../../trx-core" }
|
||||
trx-rds = { path = "../../../decoders/trx-rds" }
|
||||
tokio = { workspace = true, features = ["sync", "rt"] }
|
||||
serde = { workspace = true }
|
||||
uuid = { workspace = true }
|
||||
tracing = { workspace = true }
|
||||
num-complex = "0.4"
|
||||
rustfft = "6"
|
||||
|
||||
Reference in New Issue
Block a user