#[derive(Copy, Clone, Default)]
#[cfg_attr(any(feature = "fmt", test), derive(Debug))]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub enum Resolution {
#[default]
TwelveBits,
FourteenBits,
SixteenBits,
EighteenBits,
}
impl Resolution {
pub(crate) const fn bytes(&self) -> usize {
match self {
Resolution::TwelveBits |
Resolution::FourteenBits |
Resolution::SixteenBits => 2,
Resolution::EighteenBits => 3,
}
}
pub(crate) const fn bits(&self) -> usize {
match self {
Resolution::TwelveBits => 12,
Resolution::FourteenBits => 14,
Resolution::SixteenBits => 16,
Resolution::EighteenBits => 18,
}
}
pub(crate) const fn mask(&self) -> u8 {
match self {
Resolution::TwelveBits => 0b00,
Resolution::FourteenBits => 0b01,
Resolution::SixteenBits => 0b10,
Resolution::EighteenBits => 0b11,
}
}
pub(crate) const fn sign_bit(&self) -> u32 {
match self {
Resolution::TwelveBits => 0x800,
Resolution::FourteenBits => 0x2000,
Resolution::SixteenBits => 0x8000,
Resolution::EighteenBits => 0x20000,
}
}
pub(crate) const fn sign_extend(&self) -> u32 {
match self {
Resolution::TwelveBits => 0xFFFFF000,
Resolution::FourteenBits => 0xFFFFC000,
Resolution::SixteenBits => 0xFFFF0000,
Resolution::EighteenBits => 0xFFFC0000,
}
}
pub(crate) const fn min(&self) -> i32 {
match self {
Resolution::TwelveBits => -2048,
Resolution::FourteenBits => -8192,
Resolution::SixteenBits => -32768,
Resolution::EighteenBits => -131072,
}
}
pub(crate) const fn max(&self) -> i32 {
match self {
Resolution::TwelveBits => 2047,
Resolution::FourteenBits => 8191,
Resolution::SixteenBits => 32767,
Resolution::EighteenBits => 131071,
}
}
pub(crate) const fn conversion_time_us(&self) -> u32 {
match self {
Resolution::TwelveBits => 4167, Resolution::FourteenBits => 16667, Resolution::SixteenBits => 66667, Resolution::EighteenBits => 266667 }
}
}