use super::enums::{ProtectionStatus, RegMode};
#[derive(Copy, Clone, Debug, PartialEq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Setpoints {
pub v_set: f32,
pub i_set: f32,
}
#[derive(Copy, Clone, Debug, PartialEq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Status {
pub v_set: f32,
pub i_set: f32,
pub v_out: f32,
pub i_out: f32,
pub p_out: f32,
pub v_in: f32,
pub protection: ProtectionStatus,
pub reg_mode: RegMode,
pub output_on: bool,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Default)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct OnTime {
pub hours: u16,
pub minutes: u16,
pub seconds: u16,
}
impl OnTime {
pub const fn total_seconds(self) -> u32 {
self.hours as u32 * 3600 + self.minutes as u32 * 60 + self.seconds as u32
}
}
#[derive(Copy, Clone, Debug, PartialEq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Totals {
pub charge_ah: f32,
pub energy_wh: f32,
pub on_time: OnTime,
}
#[derive(Copy, Clone, Debug, PartialEq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Temperatures {
pub internal: f32,
pub _external_unverified: f32,
}
#[derive(Copy, Clone, Debug, PartialEq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SafetyLimits {
pub lvp_v: f32,
pub ovp_v: f32,
pub ocp_a: f32,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn on_time_total_seconds() {
assert_eq!(OnTime::default().total_seconds(), 0);
assert_eq!(
OnTime {
hours: 0,
minutes: 0,
seconds: 1,
}
.total_seconds(),
1
);
assert_eq!(
OnTime {
hours: 1,
minutes: 23,
seconds: 45,
}
.total_seconds(),
5025
);
assert_eq!(
OnTime {
hours: u16::MAX,
minutes: 0,
seconds: 0,
}
.total_seconds(),
65535u32 * 3600
);
}
}