Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Changes to make the plugin work with libbladeRF 2.2.1 and SDRSharp 1732 #18

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

aorgazf
Copy link

@aorgazf aorgazf commented Aug 10, 2020

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

@jmichelp
Copy link
Owner

Wow, thanks a lot for the help on this.
Checking it before merging will take me some time though (I have uncommitted changes on my side with quite a few features I wanted to add).
But I really appreciate that I get more hands to keep this plugin maintained :)

@nsknyc
Copy link

nsknyc commented Jul 15, 2021

Thank the gods I checked here before commiting to fixing this myself. Thanks aorgazf! jmichelp, excited to see what's coming.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants