libbladerf-rs 0.3.0

Fully Rust native BladeRF driver
use crate::bladerf1::BladeRf1;
use crate::bladerf1::hardware::lms6002d;
pub use crate::bladerf1::hardware::lms6002d::loopback::Loopback;
use crate::error::Result;
use crate::transport::usb::BladeRf1UsbInterfaceCommands;
impl BladeRf1 {
    pub fn set_loopback(&mut self, lb: Loopback) -> Result<()> {
        match lb {
            Loopback::Firmware => {
                lms6002d::loopback::set_loopback_mode(&mut self.nios, Loopback::Lna3)?;
                self.nios.usb_set_firmware_loopback(true)
            }
            _ => {
                let fw_lb_enabled: bool = self.nios.usb_get_firmware_loopback()?;
                if fw_lb_enabled {
                    self.nios.usb_set_firmware_loopback(false)?;
                }
                lms6002d::loopback::set_loopback_mode(&mut self.nios, lb)
            }
        }
    }
    pub fn set_lms_loopback(&mut self, lb: Loopback) -> Result<()> {
        lms6002d::loopback::set_loopback_mode(&mut self.nios, lb)
    }
    pub fn get_lms_loopback(&mut self) -> Result<Loopback> {
        lms6002d::loopback::get_loopback_mode(&mut self.nios)
    }
    pub fn get_loopback(&mut self) -> Result<Loopback> {
        let mut lb = Loopback::None;
        let fw_lb_enabled = self.nios.usb_get_firmware_loopback()?;
        if fw_lb_enabled {
            lb = Loopback::Firmware;
        }
        if lb == Loopback::None {
            lb = lms6002d::loopback::get_loopback_mode(&mut self.nios)?;
        }
        Ok(lb)
    }
    pub fn is_loopback_mode_supported(&self, lb: Loopback) -> bool {
        let supported_modes = [
            Loopback::None,
            Loopback::BbTxlpfRxvga2,
            Loopback::BbTxlpfRxlpf,
            Loopback::BbTxvga1Rxlpf,
            Loopback::BbTxvga1Rxvga2,
            Loopback::Firmware,
            Loopback::Lna1,
            Loopback::Lna2,
            Loopback::Lna3,
        ];
        supported_modes.contains(&lb)
    }
}