#[derive(Debug)]
#[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))]
pub struct Model64001 {
pub cmd: Option<u16>,
pub hw_rev: Option<u16>,
pub rsfw_rev: Option<u16>,
pub osfw_rev: Option<u16>,
pub prod_rev: Option<String>,
pub boots: Option<u16>,
pub switch: Option<Switch>,
pub sensors: Option<u16>,
pub talking: Option<u16>,
pub status: Option<Status>,
pub config: Option<Config>,
pub le_dblink: Option<u16>,
pub le_don: Option<u16>,
#[allow(missing_docs)]
pub reserved: Option<u16>,
pub loc: Option<String>,
pub s1id: Option<u16>,
pub s1_addr: Option<u16>,
pub s1os_ver: Option<u16>,
pub s1_ver: Option<String>,
pub s1_serial: Option<String>,
pub s2id: Option<u16>,
pub s2_addr: Option<u16>,
pub s2os_ver: Option<u16>,
pub s2_ver: Option<String>,
pub s2_serial: Option<String>,
pub s3id: Option<u16>,
pub s3_addr: Option<u16>,
pub s3os_ver: Option<u16>,
pub s3_ver: Option<String>,
pub s3_serial: Option<String>,
pub s4id: Option<u16>,
pub s4_addr: Option<u16>,
pub s4os_ver: Option<u16>,
pub s4_ver: Option<String>,
pub s4_serial: Option<String>,
}
#[allow(missing_docs)]
impl Model64001 {
pub const CMD: crate::Point<Self, Option<u16>> = crate::Point::new(0, 1, true);
pub const HW_REV: crate::Point<Self, Option<u16>> = crate::Point::new(1, 1, false);
pub const RSFW_REV: crate::Point<Self, Option<u16>> = crate::Point::new(2, 1, false);
pub const OSFW_REV: crate::Point<Self, Option<u16>> = crate::Point::new(3, 1, false);
pub const PROD_REV: crate::Point<Self, Option<String>> = crate::Point::new(4, 2, false);
pub const BOOTS: crate::Point<Self, Option<u16>> = crate::Point::new(6, 1, false);
pub const SWITCH: crate::Point<Self, Option<Switch>> = crate::Point::new(7, 1, false);
pub const SENSORS: crate::Point<Self, Option<u16>> = crate::Point::new(8, 1, false);
pub const TALKING: crate::Point<Self, Option<u16>> = crate::Point::new(9, 1, false);
pub const STATUS: crate::Point<Self, Option<Status>> = crate::Point::new(10, 1, false);
pub const CONFIG: crate::Point<Self, Option<Config>> = crate::Point::new(11, 1, false);
pub const LE_DBLINK: crate::Point<Self, Option<u16>> = crate::Point::new(12, 1, false);
pub const LE_DON: crate::Point<Self, Option<u16>> = crate::Point::new(13, 1, false);
pub const RESERVED: crate::Point<Self, Option<u16>> = crate::Point::new(14, 1, false);
pub const LOC: crate::Point<Self, Option<String>> = crate::Point::new(15, 16, false);
pub const S1ID: crate::Point<Self, Option<u16>> = crate::Point::new(31, 1, false);
pub const S1_ADDR: crate::Point<Self, Option<u16>> = crate::Point::new(32, 1, false);
pub const S1OS_VER: crate::Point<Self, Option<u16>> = crate::Point::new(33, 1, false);
pub const S1_VER: crate::Point<Self, Option<String>> = crate::Point::new(34, 2, false);
pub const S1_SERIAL: crate::Point<Self, Option<String>> = crate::Point::new(36, 5, false);
pub const S2ID: crate::Point<Self, Option<u16>> = crate::Point::new(41, 1, false);
pub const S2_ADDR: crate::Point<Self, Option<u16>> = crate::Point::new(42, 1, false);
pub const S2OS_VER: crate::Point<Self, Option<u16>> = crate::Point::new(43, 1, false);
pub const S2_VER: crate::Point<Self, Option<String>> = crate::Point::new(44, 2, false);
pub const S2_SERIAL: crate::Point<Self, Option<String>> = crate::Point::new(46, 5, false);
pub const S3ID: crate::Point<Self, Option<u16>> = crate::Point::new(51, 1, false);
pub const S3_ADDR: crate::Point<Self, Option<u16>> = crate::Point::new(52, 1, false);
pub const S3OS_VER: crate::Point<Self, Option<u16>> = crate::Point::new(53, 1, false);
pub const S3_VER: crate::Point<Self, Option<String>> = crate::Point::new(54, 2, false);
pub const S3_SERIAL: crate::Point<Self, Option<String>> = crate::Point::new(56, 5, false);
pub const S4ID: crate::Point<Self, Option<u16>> = crate::Point::new(61, 1, false);
pub const S4_ADDR: crate::Point<Self, Option<u16>> = crate::Point::new(62, 1, false);
pub const S4OS_VER: crate::Point<Self, Option<u16>> = crate::Point::new(63, 1, false);
pub const S4_VER: crate::Point<Self, Option<String>> = crate::Point::new(64, 2, false);
pub const S4_SERIAL: crate::Point<Self, Option<String>> = crate::Point::new(66, 5, false);
}
impl crate::Model for Model64001 {
const ID: u16 = 64001;
fn from_data(data: &[u16]) -> Result<Self, crate::DecodeError> {
Ok(Self {
cmd: Self::CMD.from_data(data)?,
hw_rev: Self::HW_REV.from_data(data)?,
rsfw_rev: Self::RSFW_REV.from_data(data)?,
osfw_rev: Self::OSFW_REV.from_data(data)?,
prod_rev: Self::PROD_REV.from_data(data)?,
boots: Self::BOOTS.from_data(data)?,
switch: Self::SWITCH.from_data(data)?,
sensors: Self::SENSORS.from_data(data)?,
talking: Self::TALKING.from_data(data)?,
status: Self::STATUS.from_data(data)?,
config: Self::CONFIG.from_data(data)?,
le_dblink: Self::LE_DBLINK.from_data(data)?,
le_don: Self::LE_DON.from_data(data)?,
reserved: Self::RESERVED.from_data(data)?,
loc: Self::LOC.from_data(data)?,
s1id: Self::S1ID.from_data(data)?,
s1_addr: Self::S1_ADDR.from_data(data)?,
s1os_ver: Self::S1OS_VER.from_data(data)?,
s1_ver: Self::S1_VER.from_data(data)?,
s1_serial: Self::S1_SERIAL.from_data(data)?,
s2id: Self::S2ID.from_data(data)?,
s2_addr: Self::S2_ADDR.from_data(data)?,
s2os_ver: Self::S2OS_VER.from_data(data)?,
s2_ver: Self::S2_VER.from_data(data)?,
s2_serial: Self::S2_SERIAL.from_data(data)?,
s3id: Self::S3ID.from_data(data)?,
s3_addr: Self::S3_ADDR.from_data(data)?,
s3os_ver: Self::S3OS_VER.from_data(data)?,
s3_ver: Self::S3_VER.from_data(data)?,
s3_serial: Self::S3_SERIAL.from_data(data)?,
s4id: Self::S4ID.from_data(data)?,
s4_addr: Self::S4_ADDR.from_data(data)?,
s4os_ver: Self::S4OS_VER.from_data(data)?,
s4_ver: Self::S4_VER.from_data(data)?,
s4_serial: Self::S4_SERIAL.from_data(data)?,
})
}
fn addr(models: &crate::Models) -> crate::ModelAddr<Self> {
models.m64001
}
}
bitflags::bitflags! {
#[doc = " DIP Switches"] #[derive(Copy, Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))] pub
struct Switch : u16 {}
}
impl crate::Value for Switch {
fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
let value = u16::decode(data)?;
Ok(Self::from_bits_retain(value))
}
fn encode(self) -> Box<[u16]> {
self.bits().encode()
}
}
impl crate::Value for Option<Switch> {
fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
let value = u16::decode(data)?;
if value != 65535u16 {
Ok(Some(Switch::from_bits_retain(value)))
} else {
Ok(None)
}
}
fn encode(self) -> Box<[u16]> {
if let Some(value) = self {
value.encode()
} else {
65535u16.encode()
}
}
}
bitflags::bitflags! {
#[doc = " System Status"] #[derive(Copy, Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))] pub
struct Status : u16 {}
}
impl crate::Value for Status {
fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
let value = u16::decode(data)?;
Ok(Self::from_bits_retain(value))
}
fn encode(self) -> Box<[u16]> {
self.bits().encode()
}
}
impl crate::Value for Option<Status> {
fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
let value = u16::decode(data)?;
if value != 65535u16 {
Ok(Some(Status::from_bits_retain(value)))
} else {
Ok(None)
}
}
fn encode(self) -> Box<[u16]> {
if let Some(value) = self {
value.encode()
} else {
65535u16.encode()
}
}
}
bitflags::bitflags! {
#[doc = " System Configuration"] #[derive(Copy, Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))] pub
struct Config : u16 {}
}
impl crate::Value for Config {
fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
let value = u16::decode(data)?;
Ok(Self::from_bits_retain(value))
}
fn encode(self) -> Box<[u16]> {
self.bits().encode()
}
}
impl crate::Value for Option<Config> {
fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
let value = u16::decode(data)?;
if value != 65535u16 {
Ok(Some(Config::from_bits_retain(value)))
} else {
Ok(None)
}
}
fn encode(self) -> Box<[u16]> {
if let Some(value) = self {
value.encode()
} else {
65535u16.encode()
}
}
}