use crate::std;
use std::fmt;
use crate::{
impl_aux_ops, impl_message_ops, impl_omnibus_nop_reply, len::QUERY_SOFTWARE_CRC_REPLY,
seven_bit_u16, u16_seven_bit, AuxCommand, AuxCommandOps, MessageOps, MessageType,
};
pub mod index {
pub const CRC_BEGIN: usize = 3;
pub const CRC_END: usize = 7;
}
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct QuerySoftwareCrcReply {
buf: [u8; QUERY_SOFTWARE_CRC_REPLY],
}
impl QuerySoftwareCrcReply {
pub fn new() -> Self {
let mut message = Self {
buf: [0u8; QUERY_SOFTWARE_CRC_REPLY],
};
message.init();
message.set_message_type(MessageType::AuxCommand);
message.set_aux_command(AuxCommand::QuerySoftwareCrc);
message
}
pub fn crc(&self) -> u16 {
seven_bit_u16(self.buf[index::CRC_BEGIN..index::CRC_END].as_ref())
}
pub fn set_crc(&mut self, crc: u16) {
self.buf[index::CRC_BEGIN..index::CRC_END].copy_from_slice(u16_seven_bit(crc).as_ref());
}
}
impl_message_ops!(QuerySoftwareCrcReply);
impl_omnibus_nop_reply!(QuerySoftwareCrcReply);
impl_aux_ops!(QuerySoftwareCrcReply);
impl fmt::Display for QuerySoftwareCrcReply {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"AckNak: {}, DeviceType: {}, MessageType: {}, CRC: {}",
self.acknak(),
self.device_type(),
self.message_type(),
self.crc(),
)
}
}