use alloc::vec::Vec;
use binrw::BinRead;
#[derive(Debug, BinRead)]
pub struct ExtEvent {
#[br(map = |x: u32| if x == crate::DO_NOT_USE_U4 { None } else { Some(x) })]
pub tow: Option<u32>,
#[br(map = |x: u16| if x == crate::DO_NOT_USE_U2 { None } else { Some(x) })]
pub wnc: Option<u16>,
pub source: u8,
pub polarity: u8,
#[br(map = |x: f32| if x == crate::DO_NOT_USE_F4 { None } else { Some(x) })]
pub offset: Option<f32>,
#[br(map = |x: f64| if x == crate::DO_NOT_USE_F8 { None } else { Some(x) })]
pub rx_clk_bias: Option<f64>,
#[br(map = |x: u16| if x == crate::DO_NOT_USE_U2 { None } else { Some(x) })]
pub pvt_age: Option<u16>,
#[br(parse_with = binrw::helpers::until_eof)]
pub padding: Vec<u8>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum EventSource {
EventA,
EventB,
Unknown(u8),
}
impl From<u8> for EventSource {
fn from(value: u8) -> Self {
match value {
1 => EventSource::EventA,
2 => EventSource::EventB,
x => EventSource::Unknown(x),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum EventPolarity {
Rising,
Falling,
Unknown(u8),
}
impl From<u8> for EventPolarity {
fn from(value: u8) -> Self {
match value {
0 => EventPolarity::Rising,
1 => EventPolarity::Falling,
x => EventPolarity::Unknown(x),
}
}
}
impl ExtEvent {
pub fn event_source(&self) -> EventSource {
EventSource::from(self.source)
}
pub fn event_polarity(&self) -> EventPolarity {
EventPolarity::from(self.polarity)
}
}