dot15d4_frame/repr/
frame_control.rs1use super::super::Result;
2use super::super::{AddressingMode, FrameControl, FrameType, FrameVersion};
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq)]
6#[cfg_attr(feature = "fuzz", derive(arbitrary::Arbitrary))]
7pub struct FrameControlRepr {
8 pub frame_type: FrameType,
10 pub security_enabled: bool,
12 pub frame_pending: bool,
14 pub ack_request: bool,
16 pub pan_id_compression: bool,
18 pub sequence_number_suppression: bool,
20 pub information_elements_present: bool,
22 pub dst_addressing_mode: AddressingMode,
24 pub src_addressing_mode: AddressingMode,
26 pub frame_version: FrameVersion,
28}
29
30impl FrameControlRepr {
31 pub fn parse(fc: FrameControl<&[u8]>) -> Result<Self> {
33 Ok(Self {
34 frame_type: fc.frame_type(),
35 security_enabled: fc.security_enabled(),
36 frame_pending: fc.frame_pending(),
37 ack_request: fc.ack_request(),
38 pan_id_compression: fc.pan_id_compression(),
39 sequence_number_suppression: fc.sequence_number_suppression(),
40 information_elements_present: fc.information_elements_present(),
41 dst_addressing_mode: fc.dst_addressing_mode(),
42 src_addressing_mode: fc.src_addressing_mode(),
43 frame_version: fc.frame_version(),
44 })
45 }
46
47 pub const fn buffer_len(&self) -> usize {
49 2
50 }
51
52 pub fn emit(&self, fc: &mut FrameControl<&mut [u8]>) {
54 fc.set_frame_type(self.frame_type);
55 fc.set_security_enabled(self.security_enabled);
56 fc.set_frame_pending(self.frame_pending);
57 fc.set_ack_request(self.ack_request);
58 fc.set_pan_id_compression(self.pan_id_compression);
59 fc.set_sequence_number_suppression(self.sequence_number_suppression);
60 fc.set_information_elements_present(self.information_elements_present);
61 fc.set_dst_addressing_mode(self.dst_addressing_mode);
62 fc.set_src_addressing_mode(self.src_addressing_mode);
63 fc.set_frame_version(self.frame_version);
64 }
65}