I'm using the SoapySDR BladeRF source/sink in a GNURadio flowgraph. Starting the flowgraph, it opens the sink just fine, but exits with an error about permission denied and being unable to open the device for the source:
[INFO] bladerf_open_with_devinfo()
[INFO] bladerf_get_serial() = 51768470750247babcf0ebf45561ad1f
[INFO] setSampleRate(Rx, 0, 4.000000 MHz), actual = 4.000000 MHz
[INFO] setSampleRate(Tx, 0, 4.000000 MHz), actual = 4.000000 MHz
[INFO] setSampleRate(Rx, 0, 0.768000 MHz), actual = 0.767999 MHz
[WARNING @ host/libraries/libbladeRF/src/backend/usb/libusb.c:345] Found a bladeRF via VID/PID, but could not open it due to insufficient permissions, or because the device is already open.
[INFO] bladerf_open_with_devinfo()
[WARNING @ host/libraries/libbladeRF/src/backend/usb/libusb.c:530] Found a bladeRF via VID/PID, but could not open it due to insufficient permissions.
[1m[31m[ERROR] bladerf_open_with_devinfo() returned -7 - No device(s) available[0m
Traceback (most recent call last):
File "C:\Users\N5HXR\Documents\gnuradio\signal_source_gnuradio.py", line 226, in <module>
main()
File "C:\Users\N5HXR\Documents\gnuradio\signal_source_gnuradio.py", line 204, in main
tb = top_block_cls()
^^^^^^^^^^^^^^^
File "C:\Users\N5HXR\Documents\gnuradio\signal_source_gnuradio.py", line 96, in __init__
self.soapy_bladerf_sink_0 = soapy.sink(dev, "fc32", 1, 'driver=bladerf,serial=51768470750247babcf0ebf45561ad1f',
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: bladerf_open_with_devinfo() failed -7 - No device(s) available
[INFO] bladerf_close()
What is the magic trick to get GNURadio to use the BladeRF in full duplex (in Windows here)?
yakovdk wrote: ↑Tue Nov 04, 2025 1:40 pm
I'm using the SoapySDR BladeRF source/sink in a GNURadio flowgraph. Starting the flowgraph, it opens the sink just fine, but exits with an error about permission denied and being unable to open the device for the source: geometry dash
[INFO] bladerf_open_with_devinfo()
[INFO] bladerf_get_serial() = 51768470750247babcf0ebf45561ad1f
[INFO] setSampleRate(Rx, 0, 4.000000 MHz), actual = 4.000000 MHz
[INFO] setSampleRate(Tx, 0, 4.000000 MHz), actual = 4.000000 MHz
[INFO] setSampleRate(Rx, 0, 0.768000 MHz), actual = 0.767999 MHz
[WARNING @ host/libraries/libbladeRF/src/backend/usb/libusb.c:345] Found a bladeRF via VID/PID, but could not open it due to insufficient permissions, or because the device is already open.
[INFO] bladerf_open_with_devinfo()
[WARNING @ host/libraries/libbladeRF/src/backend/usb/libusb.c:530] Found a bladeRF via VID/PID, but could not open it due to insufficient permissions.
[1m[31m[ERROR] bladerf_open_with_devinfo() returned -7 - No device(s) available[0m
Traceback (most recent call last):
File "C:\Users\N5HXR\Documents\gnuradio\signal_source_gnuradio.py", line 226, in <module>
main()
File "C:\Users\N5HXR\Documents\gnuradio\signal_source_gnuradio.py", line 204, in main
tb = top_block_cls()
^^^^^^^^^^^^^^^
File "C:\Users\N5HXR\Documents\gnuradio\signal_source_gnuradio.py", line 96, in __init__
self.soapy_bladerf_sink_0 = soapy.sink(dev, "fc32", 1, 'driver=bladerf,serial=51768470750247babcf0ebf45561ad1f',
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: bladerf_open_with_devinfo() failed -7 - No device(s) available
[INFO] bladerf_close()
What is the magic trick to get GNURadio to use the BladeRF in full duplex (in Windows here)?
If using two separate Source/Sink blocks still causes conflicts, you can create a small Python script (outside of GRC) to initialize a single Soapy device object, and then assign the Rx and Tx streams to that same object.
On Windows, BladeRF requires the libusb-win32 or WinUSB driver.
Open the Zadig tool.
Select
Select BladeRF 2.0 Micro.
Ensure that the installed driver is libusb-win32 (v1.2.6.0). Some versions of GNURadio on Windows are extremely picky with WinUSB but work very smoothly with libusb-win32.