use crate::{
impl_default, impl_message_from_buf, impl_response_ops, impl_var_message_ops, len, std::fmt,
BarcodeCharacters, BarcodeConfiguration, BarcodeEnabledStatus, BarcodeFormat,
BarcodeHardwareStatus, MessageOps, MessageType, ResponseOps,
};
mod index {
pub const HARDWARE_STATUS: usize = 4;
pub const ENABLED_STATUS: usize = 5;
pub const FORMAT: usize = 6;
pub const CHARACTERS: usize = 7;
}
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct SetBarcodeReaderConfigurationResponse {
buf: [u8; len::SET_BARCODE_READER_CONFIGURATION_RESPONSE],
}
impl SetBarcodeReaderConfigurationResponse {
pub fn new() -> Self {
let mut msg = Self {
buf: [0u8; len::SET_BARCODE_READER_CONFIGURATION_RESPONSE],
};
msg.init();
msg
}
pub fn configuration(&self) -> BarcodeConfiguration {
if self.response_status().is_ok() {
self.buf[index::HARDWARE_STATUS..=index::CHARACTERS]
.as_ref()
.into()
} else {
BarcodeConfiguration::new()
}
}
pub fn hardware_status(&self) -> BarcodeHardwareStatus {
if self.response_status().is_ok() {
self.buf[index::HARDWARE_STATUS].into()
} else {
BarcodeHardwareStatus::None
}
}
pub fn enabled_status(&self) -> BarcodeEnabledStatus {
if self.response_status().is_ok() {
self.buf[index::ENABLED_STATUS].into()
} else {
BarcodeEnabledStatus::None
}
}
pub fn format(&self) -> BarcodeFormat {
if self.response_status().is_ok() {
self.buf[index::FORMAT].into()
} else {
BarcodeFormat::None
}
}
pub fn num_characters(&self) -> BarcodeCharacters {
if self.response_status().is_ok() {
self.buf[index::CHARACTERS].into()
} else {
BarcodeCharacters::from(0)
}
}
}
impl_default!(SetBarcodeReaderConfigurationResponse);
impl_message_from_buf!(SetBarcodeReaderConfigurationResponse);
impl_var_message_ops!(
SetBarcodeReaderConfigurationResponse,
MessageType::SetBarcodeReaderConfiguration
);
impl_response_ops!(SetBarcodeReaderConfigurationResponse);
impl fmt::Display for SetBarcodeReaderConfigurationResponse {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let stx = self.stx();
let seqid = self.sequence_id();
let len = self.data_len();
let status = self.response_status();
let config = self.configuration();
let crc = self.checksum();
write!(f, "STX: 0x{stx:02x} | SEQID: {seqid} | LEN: 0x{len:02x} | Response status: {status} | {config} | CRC-16: 0x{crc:04x}")
}
}