Use any Soapy SDR remotely
The overall goal is to use the existing API to transparently interact with any remote SDR device that has a soapy driver plugin -- over a local network link.
The server
The SoapyServer.exe application will run on the remote host and provide a TCP service to query and instantiate any SDR device found on the remote system. The server will spawn client sockets and threads for each device created.
The client
The client is a standard Soapy SDR plugin module that implements the remote protocol. The plugin's discovery routine will only report devices when the server's addresses is specified in the keyword arguments.
The protocol
The protocol for discovery, instantiation, and configuration is a simple reply/request transaction. The payloads are binary (encoded in network endianess) and always use platform independent representations.
The streams
Streaming will be implemented on-top of UDP, and will track underflow, overflow, and reordering conditions. We may support UDT as well (reliable UDP layer).
The server will spawn new threads and sockets to handle each stream. For the server, the receive stream thread pushes packets to the client endpoint. While the transmit stream thread waits for packets from the client endpoint. Threads and sockets are also spawned to handle the async status messages.
Stream API
The direct buffer access API will be implemented as the primary interface to the remote sockets. The receive and send buffer implementations will simply call into the direct buffer access calls and convert to the user-specified data type.
Stream options
The client may need to specify buffer sizes and number of buffers for the remote layer as well as the underlying SDR device. We will select and document stream keywords specifically for the remote device layer.
The logger
Upon connecting to the server, the client will spawn a UDP socket and thread to handle log messages from the server.