use crate::bladerf1::board::RfLinkSession;
use crate::error::{Error, Result};
use crate::protocol::nios::NiosPkt8x8Target;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u8)]
pub enum VctcxoTamerMode {
Disabled = 0,
Pps1 = 1,
Mhz10 = 2,
}
impl TryFrom<u8> for VctcxoTamerMode {
type Error = Error;
fn try_from(value: u8) -> Result<Self> {
match value {
0 => Ok(Self::Disabled),
1 => Ok(Self::Pps1),
2 => Ok(Self::Mhz10),
_ => Err(Error::Unsupported("invalid VCTCXO tamer mode")),
}
}
}
const MODE_ADDR: u8 = 0xFF;
impl RfLinkSession<'_> {
pub fn set_vctcxo_tamer_mode(&mut self, mode: VctcxoTamerMode) -> Result<()> {
self.require_initialized()?;
self.nios
.nios_write::<u8, u8>(NiosPkt8x8Target::VctcxoTamer, MODE_ADDR, mode as u8)
}
pub fn get_vctcxo_tamer_mode(&mut self) -> Result<VctcxoTamerMode> {
self.require_initialized()?;
let raw = self
.nios
.nios_read::<u8, u8>(NiosPkt8x8Target::VctcxoTamer, MODE_ADDR)?;
VctcxoTamerMode::try_from(raw)
}
}