libbladerf-rs 0.3.0

Fully Rust native BladeRF driver
use crate::bladerf1::BladeRf1;
use crate::{Error, Result};
#[derive(PartialEq, Debug, Clone, Copy)]
pub enum RxMux {
    MuxBaseband = 0,
    Mux12BitCounter = 1,
    Mux32BitCounter = 2,
    MuxDigitalLoopback = 4,
}
impl TryFrom<u32> for RxMux {
    type Error = Error;
    fn try_from(value: u32) -> Result<Self> {
        match value {
            0 => Ok(RxMux::MuxBaseband),
            1 => Ok(RxMux::Mux12BitCounter),
            2 => Ok(RxMux::Mux32BitCounter),
            4 => Ok(RxMux::MuxDigitalLoopback),
            _ => Err(Error::Argument("invalid RX mux value".into())),
        }
    }
}
pub const BLADERF_GPIO_RX_MUX_MASK: u16 = 7 << BLADERF_GPIO_RX_MUX_SHIFT;
pub const BLADERF_GPIO_RX_MUX_SHIFT: u16 = 8;
impl BladeRf1 {
    pub fn set_rx_mux(&mut self, mode: RxMux) -> Result<()> {
        let rx_mux_val = (mode as u32) << BLADERF_GPIO_RX_MUX_SHIFT;
        let mut config_gpio = self.config_gpio_read()?;
        config_gpio &= !(BLADERF_GPIO_RX_MUX_MASK as u32);
        config_gpio |= rx_mux_val;
        self.config_gpio_write(config_gpio)
    }
    pub fn get_rx_mux(&mut self) -> Result<RxMux> {
        let mut config_gpio = self.config_gpio_read()?;
        config_gpio &= BLADERF_GPIO_RX_MUX_MASK as u32;
        config_gpio >>= BLADERF_GPIO_RX_MUX_SHIFT;
        RxMux::try_from(config_gpio)
    }
}