diff --git a/src/de/data.rs b/src/de/data.rs index 8237167..1bbea8e 100644 --- a/src/de/data.rs +++ b/src/de/data.rs @@ -112,6 +112,35 @@ impl Payload for Fls { fn traces(&self) -> &[Vec] { &self.traces } + + fn traces_mut(&mut self) -> &mut [Vec] { + &mut self.traces + } +} + +pub struct ThermostatEem { + traces: Vec>, +} + +impl Payload for ThermostatEem { + fn new(batches: usize, data: &[u8]) -> Result { + let data: &[[f32; 16 + 4]] = bytemuck::cast_slice(data); + assert_eq!(batches, data.len()); + let traces = [0, 8, 13, 16] + .into_iter() + .map(|i| data.iter().map(|b| b[i]).collect()) + .collect(); + Ok(Self { traces }) + } + + fn labels(&self) -> &[&str] { + &["T00", "T20", "I0", "I1"] + } + + fn traces(&self) -> &[Vec] { + &self.traces + } + fn traces_mut(&mut self) -> &mut [Vec] { &mut self.traces } diff --git a/src/de/frame.rs b/src/de/frame.rs index 2c0718e..4df2c9b 100644 --- a/src/de/frame.rs +++ b/src/de/frame.rs @@ -54,6 +54,7 @@ impl Frame { let data: Box = match header.format { Format::AdcDac => Box::new(data::AdcDac::new(header.batches as _, data)?), Format::Fls => Box::new(data::Fls::new(header.batches as _, data)?), + Format::ThermostatEem => Box::new(data::ThermostatEem::new(header.batches as _, data)?), }; Ok(Self { header, data }) } diff --git a/src/de/mod.rs b/src/de/mod.rs index d36a52e..e87801a 100644 --- a/src/de/mod.rs +++ b/src/de/mod.rs @@ -12,6 +12,7 @@ pub use frame::*; pub enum Format { AdcDac = 1, Fls = 2, + ThermostatEem = 3, } #[derive(Debug, Clone, Error)]