ssp/serial_number/
response.rs1use crate::{
2 impl_default, impl_message_from_buf, impl_message_ops, impl_response_ops,
3 len::SERIAL_NUMBER_RESPONSE, std::fmt, MessageOps, MessageType, ResponseOps, SerialNumber,
4};
5
6mod index {
7 pub const SERIAL_NUMBER: usize = 4;
8 pub const SERIAL_NUMBER_END: usize = 8;
9}
10
11#[repr(C)]
15#[derive(Clone, Copy, Debug, PartialEq)]
16pub struct SerialNumberResponse {
17 buf: [u8; SERIAL_NUMBER_RESPONSE],
18}
19
20impl SerialNumberResponse {
21 pub fn new() -> Self {
23 let mut msg = Self {
24 buf: [0u8; SERIAL_NUMBER_RESPONSE],
25 };
26
27 msg.init();
28
29 msg
30 }
31
32 pub fn serial_number(&self) -> SerialNumber {
34 self.buf[index::SERIAL_NUMBER..index::SERIAL_NUMBER_END]
35 .as_ref()
36 .into()
37 }
38
39 pub fn set_serial_number(&mut self, serial_number: SerialNumber) {
41 self.buf[index::SERIAL_NUMBER..index::SERIAL_NUMBER_END]
42 .copy_from_slice(serial_number.as_inner().to_be_bytes().as_ref());
43 }
44}
45
46impl_default!(SerialNumberResponse);
47impl_message_from_buf!(SerialNumberResponse);
48impl_message_ops!(SerialNumberResponse, MessageType::SerialNumber);
49impl_response_ops!(SerialNumberResponse);
50
51impl fmt::Display for SerialNumberResponse {
52 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
53 let stx = self.stx();
54 let seqid = self.sequence_id();
55 let data_len = self.data_len();
56 let status = self.response_status();
57 let serial_number = self.serial_number();
58 write!(f, "STX: 0x{stx:02x} | SEQID: {seqid} | LEN: 0x{data_len:02x} | Response status: {status} | Serial Number: {serial_number}")
59 }
60}