#![allow(clippy::new_without_default)]
use crate::interface::Frame;
#[derive(Debug, Eq, PartialEq, Clone, Copy)]
pub struct Sampling {
data: u8,
}
impl Default for Sampling {
fn default() -> Self {
Self::new()
}
}
impl Sampling {
#[allow(clippy::identity_op)]
pub fn new() -> Self {
Self { data: 0b0000_0000 }
}
pub fn to_frame(&self) -> Frame {
Frame {
data: 0b1000 << 9 | self.data as u16,
}
}
}
impl Sampling {
pub fn sampling_rates(&self) -> SamplingRates {
let pos = 0;
unsafe { SamplingRates::from_raw_unchecked((self.data & (0b111111 << pos)) >> pos) }
}
pub fn clkidiv2(&self) -> bool {
let pos = 6;
self.data & (1 << pos) == 1 << pos
}
pub fn clkodiv2(&self) -> bool {
let pos = 7;
self.data & (1 << pos) == 1 << pos
}
pub fn set_sampling_rates(&mut self, value: SamplingRates) -> &mut Self {
let pos = 0;
self.data = self.data & !(0b111111 << pos) | (value.into_raw() as u8) << pos;
self
}
pub fn set_clkidiv2(&mut self, value: bool) -> &mut Self {
let pos = 6;
self.data = self.data & !(1 << pos) | (value as u8) << pos;
self
}
pub fn set_clkodiv2(&mut self, value: bool) -> &mut Self {
let pos = 7;
self.data = self.data & !(1 << pos) | (value as u8) << pos;
self
}
}
#[derive(Debug, Eq, PartialEq, Clone, Copy)]
pub struct SamplingRates {
inner: u8,
}
#[allow(clippy::derivable_impls)]
impl Default for SamplingRates {
fn default() -> Self {
Self { inner: 0 }
}
}
impl core::fmt::Display for SamplingRates {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match *self {
SamplingRates::ADC256_DAC256_A => f.write_str("ADC256_DAC256_A"),
SamplingRates::ADC256_DAC1536_A => f.write_str("ADC256_DAC1536_A"),
SamplingRates::ADC1536_DAC256_A => f.write_str("ADC1536_DAC256_A"),
SamplingRates::ADC1536_DAC1536_A => f.write_str("ADC1536_DAC1536_A"),
SamplingRates::ADC384_DAC384_A => f.write_str("ADC384_DAC384_A"),
SamplingRates::ADC128_DAC128_A => f.write_str("ADC128_DAC128_A"),
SamplingRates::ADC256_DAC256_B => f.write_str("ADC256_DAC256_B"),
SamplingRates::ADC256_DAC1408_B => f.write_str("ADC256_DAC1408_B"),
SamplingRates::ADC1408_DAC256_B => f.write_str("ADC1408_DAC256_B"),
SamplingRates::ADC1408_DAC1408_B => f.write_str("ADC1408_DAC1408_B"),
SamplingRates::ADC128_DAC128_B => f.write_str("ADC128_DAC128_B"),
SamplingRates::ADC384_DAC384_C => f.write_str("ADC384_DAC384_C"),
SamplingRates::ADC384_DAC2304_C => f.write_str("ADC384_DAC2304_C"),
SamplingRates::ADC2304_DAC384_C => f.write_str("ADC2304_DAC384_C"),
SamplingRates::ADC2304_DAC2304_C => f.write_str("ADC2304_DAC2304_C"),
SamplingRates::ADC576_DAC576_C => f.write_str("ADC576_DAC576_C"),
SamplingRates::ADC192_DAC192_C => f.write_str("ADC192_DAC192_C"),
SamplingRates::ADC384_DAC384_D => f.write_str("ADC384_DAC384_D"),
SamplingRates::ADC384_DAC2112_D => f.write_str("ADC384_DAC2112_D"),
SamplingRates::ADC2112_DAC384_D => f.write_str("ADC2112_DAC384_D"),
SamplingRates::ADC2112_DAC2112_D => f.write_str("ADC2112_DAC2112_D"),
SamplingRates::ADC192_DAC192_D => f.write_str("ADC192_DAC192_D"),
SamplingRates::ADC250_DAC250_U => f.write_str("ADC250_DAC250_U"),
SamplingRates::ADC272_DAC272_U => f.write_str("ADC272_DAC272_U"),
SamplingRates::ADC250_DAC1500_U => f.write_str("ADC250_DAC1500_U"),
SamplingRates::ADC272_DAC1496_U => f.write_str("ADC272_DAC1496_U"),
SamplingRates::ADC1500_DAC250_U => f.write_str("ADC1500_DAC250_U"),
SamplingRates::ADC1496_DAC272_U => f.write_str("ADC1496_DAC272_U"),
SamplingRates::ADC1500_DAC1500_U => f.write_str("ADC1500_DAC1500_U"),
SamplingRates::ADC1496_DAC1496_U => f.write_str("ADC1496_DAC1496_U"),
SamplingRates::ADC375_DAC375_U => f.write_str("ADC375_DAC375_U"),
SamplingRates::ADC125_DAC125_U => f.write_str("ADC125_DAC125_U"),
SamplingRates::ADC136_DAC136_U => f.write_str("ADC136_DAC136_U"),
_ => f.write_str("ADC???_DAC???_?"),
}
}
}
impl SamplingRates {
pub const unsafe fn from_raw_unchecked(raw: u8) -> Self {
Self { inner: raw }
}
pub const fn into_raw(self) -> u8 {
self.inner
}
}
#[rustfmt::skip]
impl SamplingRates {
pub const ADC256_DAC256_A: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b000000) };
pub const ADC256_DAC1536_A: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b000100) };
pub const ADC1536_DAC256_A: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b001000) };
pub const ADC1536_DAC1536_A: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b001100) };
pub const ADC384_DAC384_A: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b011000) };
pub const ADC128_DAC128_A: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b011100) };
}
#[rustfmt::skip]
impl SamplingRates {
pub const ADC256_DAC256_B: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b100000) };
pub const ADC256_DAC1408_B: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b100100) };
pub const ADC1408_DAC256_B: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b101000) };
pub const ADC1408_DAC1408_B: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b101100) };
pub const ADC128_DAC128_B: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b111100) };
}
#[rustfmt::skip]
impl SamplingRates {
pub const ADC384_DAC384_C: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b000010) };
pub const ADC384_DAC2304_C: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b000110) };
pub const ADC2304_DAC384_C: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b001010) };
pub const ADC2304_DAC2304_C: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b001110) };
pub const ADC576_DAC576_C: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b011010) };
pub const ADC192_DAC192_C: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b011110) };
}
#[rustfmt::skip]
impl SamplingRates {
pub const ADC384_DAC384_D: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b100010) };
pub const ADC384_DAC2112_D: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b100110) };
pub const ADC2112_DAC384_D: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b101010) };
pub const ADC2112_DAC2112_D: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b101110) };
pub const ADC192_DAC192_D: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b111110) };
}
#[rustfmt::skip]
impl SamplingRates {
pub const ADC250_DAC250_U: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b000001) };
pub const ADC272_DAC272_U: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b100011) };
pub const ADC250_DAC1500_U: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b000101) };
pub const ADC272_DAC1496_U: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b100111) };
pub const ADC1500_DAC250_U: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b001001) };
pub const ADC1496_DAC272_U: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b101011) };
pub const ADC1500_DAC1500_U: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b001101) };
pub const ADC1496_DAC1496_U: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b101111) };
pub const ADC375_DAC375_U: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b011011) };
pub const ADC125_DAC125_U: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b011101) };
pub const ADC136_DAC136_U: SamplingRates = unsafe { SamplingRates::from_raw_unchecked(0b111111) };
}