Ria Composer Support #23
No reviewers
Labels
No Label
CI/CD 🛠️
WIP 🚧
bug 🐞
code quality 🧹
data collection 🗃️
dependency 📦
do not merge 🚫
documentation 📝
duplicate 🔄
enhancement ✨
good first issue 🌱
help wanted 👋
inference 🧠
invalid 🛑
machine learning 🚀
priority
high🔥
priority
low 🍃
priority
medium 🌟
quantum ⚛️
question ❓
radio 📡
sprintable 🏃♂️
test 🧪
wont fix ❌
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: qoherent/ria-toolkit-oss#23
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "zfp-oss"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Adds SDR-to-SDR transmission support via a three-machine architecture (hub supervisor → Rx agent → Tx machine over SSH + ZMQ), along with a full test suite for the new remote control module.
ria_toolkit_oss/remote_control/ (new package)
remote_transmitter.py — Server-side ZMQ REP socket server that runs on the Tx machine. Accepts JSON-RPC commands (set_radio, init_tx, transmit, stop) and dispatches them to the appropriate SDR driver (PlutoSDR, USRP, HackRF, BladeRF) via dynamic import.
remote_transmitter_controller.py — Client-side controller that runs on the Rx machine. SSH-es into the Tx machine to start the ZMQ server, then sends commands over ZMQ. transmit_async() starts transmission in a background thread so the Rx machine can record concurrently.
orchestration/campaign.py
TransmitterConfig gains an sdr_remote: Optional[dict] field, parsed from the campaign config. Holds SSH credentials and SDR identifier for remote Tx machines.
orchestration/executor.py
CampaignExecutor now handles control_method: "sdr_remote" transmitters:
_init_remote_tx_controllers() — opens SSH + ZMQ connections and calls set_radio() for each remote Tx before the campaign loop starts.
_start_transmitter() — calls init_tx() then transmit_async(duration + 1s buffer) so the Tx is running before the Rx starts recording.
_stop_transmitter() — calls wait_transmit(timeout=duration + 10s) to synchronise after recording.
_close_remote_tx_controllers() — tears down all connections in the finally block, even if one fails.
Tests (tests/remote_control/, 88 tests)
test_remote_transmitter.py — all SDR aliases, guards, dispatcher, response envelope
test_remote_transmitter_controller.py — SSH/ZMQ setup, message format, error handling, transmit_async non-blocking guarantee, teardown
test_sdr_remote_integration.py — TransmitterConfig parsing, CampaignConfig round-trip (dict and YAML), executor init/start/stop/close for single and multiple controllers, mixed campaigns, exact timing buffers
All SDR driver patches use sys.modules injection so the tests run in any environment regardless of which hardware packages are installed. paramiko and zmq are lazy-imported at connection time rather than at module import time.