Changes to make the plugin work with libbladeRF 2.2.1 and SDRSharp 1732 #18
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Hi jmichelp,
I've updated your code to align it with the latest versions of the libbladeRF (2.2.1) and SDRSharp 1732.
The work done is enough for the plugin to run, which was the primary objective.
I started also reviewing each of the functions against the libbladeRF2.2.1 declarations and testing that they worked properly. The results of the tests are below.
I also implemented the missing interface functions required by the latest version of SDRSharp.
// INITIALIZATION
// bladerf_open(out IntPtr device, string device_identifier); TESTED OK
// bladerf_close(IntPtr device); TESTED OK
// bladerf_open_with_devinfo(out IntPtr device, ref bladerf_devinfo devinfo);
// bladerf_get_device_list(out bladerf_devinfo[] devices); TESTED OK (only with 1 device though)
// bladerf_get_device_count(); TESTED OK (only with 1 device though)
// bladerf_free_device_list(bladerf_devinfo[] devices); TESTED FAILS This doesn't work, it crashes
// bladerf_init_devinfo(ref bladerf_devinfo info); TESTED OK
// bladerf_get_devinfo(IntPtr dev, ref bladerf_devinfo info);
// bladerf_get_devinfo_from_str(string devstr, ref bladerf_devinfo info);
// bladerf_devinfo_matches(ref bladerf_devinfo a, ref bladerf_devinfo b);
// bladerf_devstr_matches(string dev_str, ref bladerf_devinfo info);
// bladerf_backend_str(bladerf_backend backend) TESTED OK
// bladerf_set_usb_reset_on_open(bool enabled);
// bladerf_get_serial_native(IntPtr dev, StringBuilder serial); TESTED OK
// bladerf_get_serial_struct(IntPtr dev, ref bladerf_serial serial); TESTED OK
// bladerf_get_fpga_size(IntPtr dev, out bladerf_fpga_size size); TESTED OK
// bladerf_get_fpga_bytes(IntPtr dev, out uint size); TESTED OK
// bladerf_get_flash_size(IntPtr dev, out UInt32 size, out bool is_guess); TESTED OK
// bladerf_fw_version_native(IntPtr dev, ref bladerf_version version); TESTED OK
// bladerf_fw_version(IntPtr dev) TESTED OK
// bladerf_is_fpga_configured(IntPtr dev); TESTED OK
// bladerf_fpga_version_native(IntPtr dev, ref bladerf_version version); TESTED OK
// bladerf_fpga_version(IntPtr dev) TESTED OK
// bladerf_get_fpga_source(IntPtr dev, out bladerf_fpga_source source); TESTED OK
// bladerf_dev_speed bladerf_device_speed(IntPtr dev); TESTED OK
// bladerf_get_board_name_native(IntPtr dev); TESTED OK
//
// bladerf_get_channel_count(IntPtr dev, bladerf_direction dir); TESTED OK
// bladerf_set_gain(IntPtr dev, bladerf_channel ch, int gain); TESTED OK
// bladerf_get_gain(IntPtr dev, bladerf_channel ch, out int gain); TESTED OK
// bladerf_set_gain_mode(IntPtr dev, bladerf_channel ch, bladerf_gain_mode mode); TESTED OK (BLADERF_GAIN_DEFAULT not supported by my bladerf ??)
// bladerf_get_gain_mode(IntPtr dev, bladerf_channel ch, out bladerf_gain_mode mode); TESTED OK (Always returns BLADERF_GAIN_MGC)
// bladerf_get_gain_modes_native(IntPtr dev, bladerf_channel ch, bladerf_gain_mode* modes); TESTED OK (for RX returns 2 modes available: BLADERF_GAIN_DEFAULT [1] and 2058807824 ??)
// bladerf_get_gain_modes(IntPtr dev, bladerf_channel ch) TESTED OK
// bladerf_get_gain_range_native(IntPtr dev, bladerf_channel ch, out bladerf_range range); TESTED FAILS (0x86 returns TX Gain Range: max:0 min:2058807792 scale:0 step:0
// RX Gain Range: max:0 min:2058807760 scale:0 step:0
// bladerf_get_gain_range(IntPtr dev, bladerf_channel ch) TESTED OK
// bladerf_set_gain_stage(IntPtr dev, bladerf_channel ch, string stage, int gain); TESTED OK (ok with the following stages stages are RX: "lna", "rxgva1", "rxgva1" ; TX: "txgva1", "txgva1" )
// bladerf_get_gain_stage(IntPtr dev, bladerf_channel ch, string stage, out int gain); TESTED OK (ok with the following stages stages are RX: "lna", "rxgva1", "rxgva1" ; TX: "txgva1", "txgva1" )
// bladerf_get_gain_stage_range(IntPtr dev, ... ch, string stage, out bladerf_range range); TESTED FAILS ranges don't seem to work, getting numbers of the order of max:0 min:2058807792 scale:0 step:0
// bladerf_get_gain_stages_native(IntPtr dev, ... ch, out string[] stages, int count); TESTED FAILS This doesn't work, it crashes, for my bladerf stages are RX: "lna", "rxgva1", "rxgva1" ; TX: "txgva1", "txgva1"
// bladerf_get_gain_stages(IntPtr dev, bladerf_channel ch) TESTED FAILS This doesn't work, it crashes
//
// bladerf_set_sample_rate(IntPtr dev, bladerf_channel ch, uint rate, out uint actual); TESTED OK
// bladerf_set_rational_sample_rate(IntPtr dev, ... out bladerf_rational_rate actual); TESTED OK
// bladerf_get_sample_rate(IntPtr dev, bladerf_channel ch, out bladerf_rational_rate rate); TESTED OK
// bladerf_get_sample_rate_range(IntPtr dev, bladerf_channel ch, out bladerf_range range); TESTED FAILS ranges don't seem to work here either, getting numbers of the order of max:0 min:2058807792 scale:0 step:0
// bladerf_get_rational_sample_rate(IntPtr dev, ... ch, out bladerf_rational_rate rate); TESTED OK
//
// bladerf_set_bandwidth(IntPtr dev, bladerf_channel ch, uint bandwidth, out uint actual); TESTED OK
// bladerf_get_bandwidth(IntPtr dev, bladerf_channel ch, out uint bandwidth); TESTED OK
// bladerf_get_bandwidth_range(IntPtr dev, bladerf_channel ch, out bladerf_range range); TESTED FAILS ranges don't seem to work here either
//
// bladerf_select_band(IntPtr dev, bladerf_channel ch, UInt64 frequency);
// bladerf_set_frequency(IntPtr dev, bladerf_channel ch, UInt64 frequency); TESTED OK
// bladerf_get_frequency(IntPtr dev, bladerf_channel ch, out UInt64 frequency); TESTED OK
// bladerf_get_frequency_range(IntPtr dev, bladerf_channel ch, out bladerf_range range); TESTED FAILS ranges don't seem to work here either
//
// bladerf_get_loopback_modes(IntPtr dev, out bladerf_loopback_modes modes); TESTED FAILS it correctly returns the number of accepted modes, but fails to return the structure with the mode names
// bladerf_is_loopback_mode_supported(IntPtr dev, bladerf_loopback mode); TESTED OK
// bladerf_set_loopback(IntPtr dev, bladerf_loopback lb); TESTED OK
// bladerf_get_loopback(IntPtr dev, out bladerf_loopback lb); TESTED OK