Android & iPad
There has never been a vendor driver for RSP receivers on Android or iPadOS. Because OpenRSP is portable and open, it runs on both, and existing API code can be brought to a phone or tablet with very little change.
OpenRSP
The driver app. It holds the receiver and serves it to other
apps. Download
OpenRSP Client Demo
A small receiver (spectrum, waterfall, AM, NFM, WFM,
USB, LSB and CW) that shows how an app uses the driver.
Download
The Android driver app
On a desktop, the API library talks to a background service that owns the USB device. The OpenRSP app plays that role on Android: install it once, plug in the receiver, and any app built against the API can use it. Apps do not need USB permission, the firmware, or the internet permission themselves.
What the driver app provides:
- One driver for every app. The app runs the OpenRSP service and owns the USB
connection and the firmware upload. Other apps attach to it and then make ordinary
sdrplay_api_*calls, exactly as on Linux. Several apps can be attached at the same time. - Control over which apps use the receiver. Apps are allowed by default. The main screen lists every app that has attached, and any of them can be blocked with one tap; blocking an app ends its session at once.
- A live status panel. For each receiver: model, serial number, whether it is idle, selected or streaming, which app owns it, its current settings (sample rate, decimation, IF mode and bandwidth, frequency, LNA state, gain reduction, AGC, bias-T and notch filters) and the stream rate, with an estimate of dropped blocks. It reads the state without disturbing the stream.
- Reliable streaming at high sample rates. Many phone USB controllers drop packets in the high-bandwidth isochronous mode the desktop driver uses by default. The driver app switches every stream to USB bulk transfers, which gives gap-free streaming at 8 MS/s on a Pixel 8a. Apps do not need to do anything for this.
- Clean recovery. If a client app crashes or is killed, the driver releases whatever it held, and the receiver becomes free for the next app within a few seconds.
- A foreground notification while apps are attached, showing which apps are using the receiver and how much CPU the driver is using.
- Optional support for non-verifying hardware, off by default. It can be switched on or off while apps are attached.
- No network access. The app does not request the internet permission at all.
Writing an Android app
An app either embeds the driver itself (it then owns the USB device directly) or, more commonly, attaches to the OpenRSP driver app. Attaching takes one Java helper file and a few lines; after that, the native code is the same API code that runs on Linux.
OpenRsp.attach(context, (status, approval) -> {
if (status == OpenRsp.OK) startNativeWork(); // sdrplay_api_Open, GetDevices, Init, ...
});
// when finished, after sdrplay_api_Close():
OpenRsp.detach();
The OpenRSP driver app and the Client Demo are on the Downloads page.
The manifest only needs to name the driver app and request the (normal-level) permission
org.openrsp.permission.USE_RSP. The Client Demo's source is a complete worked
example.
iPadOS
iPadOS has no shared background services, so each iPad app runs the OpenRSP driver in-process and reaches the receiver through a small USB DriverKit extension. On an iPad Air (M4) with an RSP1B, the Client Demo streams 8 MS/s using isochronous transfers with no sample gaps.
Both iPad apps work today with developer signing. Publishing them to the App Store depends on Apple granting the USB DriverKit entitlement for the receiver's USB vendor ID, so the iPad apps are not on the Downloads page yet.