sunspec/models/
model135.rs1#[derive(Debug)]
8#[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))]
9pub struct Model135 {
10 pub act_crv: u16,
14 pub mod_ena: ModEna,
18 pub win_tms: Option<u16>,
24 pub rvrt_tms: Option<u16>,
30 pub rmp_tms: Option<u16>,
36 pub n_crv: u16,
40 pub n_pt: u16,
44 pub tms_sf: i16,
48 pub hz_sf: i16,
52}
53#[allow(missing_docs)]
54impl Model135 {
55 pub const ACT_CRV: crate::Point<Self, u16> = crate::Point::new(0, 1, true);
56 pub const MOD_ENA: crate::Point<Self, ModEna> = crate::Point::new(1, 1, true);
57 pub const WIN_TMS: crate::Point<Self, Option<u16>> = crate::Point::new(2, 1, true);
58 pub const RVRT_TMS: crate::Point<Self, Option<u16>> = crate::Point::new(3, 1, true);
59 pub const RMP_TMS: crate::Point<Self, Option<u16>> = crate::Point::new(4, 1, true);
60 pub const N_CRV: crate::Point<Self, u16> = crate::Point::new(5, 1, false);
61 pub const N_PT: crate::Point<Self, u16> = crate::Point::new(6, 1, false);
62 pub const TMS_SF: crate::Point<Self, i16> = crate::Point::new(7, 1, false);
63 pub const HZ_SF: crate::Point<Self, i16> = crate::Point::new(8, 1, false);
64}
65impl crate::Model for Model135 {
66 const ID: u16 = 135;
67 fn from_data(data: &[u16]) -> Result<Self, crate::DecodeError> {
68 Ok(Self {
69 act_crv: Self::ACT_CRV.from_data(data)?,
70 mod_ena: Self::MOD_ENA.from_data(data)?,
71 win_tms: Self::WIN_TMS.from_data(data)?,
72 rvrt_tms: Self::RVRT_TMS.from_data(data)?,
73 rmp_tms: Self::RMP_TMS.from_data(data)?,
74 n_crv: Self::N_CRV.from_data(data)?,
75 n_pt: Self::N_PT.from_data(data)?,
76 tms_sf: Self::TMS_SF.from_data(data)?,
77 hz_sf: Self::HZ_SF.from_data(data)?,
78 })
79 }
80 fn addr(models: &crate::Models) -> crate::ModelAddr<Self> {
81 models.m135
82 }
83}
84bitflags::bitflags! {
85 #[doc = " ModEna"] #[doc = " "] #[doc =
86 " LHzRT control mode. Enable active curve. Bitfield value."] #[derive(Copy, Clone,
87 Debug, Eq, PartialEq)] #[cfg_attr(feature = "serde", derive(::serde::Serialize,
88 ::serde::Deserialize))] pub struct ModEna : u16 { #[allow(missing_docs)] const
89 Enabled = 1; }
90}
91impl crate::Value for ModEna {
92 fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
93 let value = u16::decode(data)?;
94 Ok(Self::from_bits_retain(value))
95 }
96 fn encode(self) -> Box<[u16]> {
97 self.bits().encode()
98 }
99}
100impl crate::Value for Option<ModEna> {
101 fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
102 let value = u16::decode(data)?;
103 if value != 65535u16 {
104 Ok(Some(ModEna::from_bits_retain(value)))
105 } else {
106 Ok(None)
107 }
108 }
109 fn encode(self) -> Box<[u16]> {
110 if let Some(value) = self {
111 value.encode()
112 } else {
113 65535u16.encode()
114 }
115 }
116}