ieee80211/common/subtypes/
data.rs

1use macro_bits::serializable_enum;
2
3serializable_enum! {
4    #[cfg_attr(feature = "defmt", derive(defmt::Format))]
5    #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
6    /// The piggy-backed control frame of the data frame.
7    pub enum DataFrameCF: u8 {
8        #[default]
9        None => 0b00,
10        Ack => 0b01,
11        Poll => 0b10,
12        AckPoll => 0b11
13    }
14}
15
16serializable_enum! {
17    #[cfg_attr(feature = "defmt", derive(defmt::Format))]
18    #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
19    /// The subtype of the data frame.
20    pub enum DataFrameSubtype: u8 {
21        #[default]
22        Data => 0b0000,
23        DataCFAck => 0b0001,
24        DataCFPoll => 0b0010,
25        DataCFAckCFPoll => 0b0011,
26        Null => 0b0100,
27        CFAck => 0b0101,
28        CFPoll => 0b0110,
29        CFAckCFPoll => 0b0111,
30        QoSData => 0b1000,
31        QoSDataCFAck => 0b1001,
32        QoSDataCFPoll => 0b1010,
33        QoSDataCFAckCFPoll => 0b1011,
34        QoSNull => 0b1100,
35        QoSCFPoll => 0b1110,
36        QoSCFAckCFPoll => 0b1111
37    }
38}
39impl DataFrameSubtype {
40    /// Returns the control frame type piggy-backed on to the data frame.   
41    pub const fn data_frame_cf(&self) -> DataFrameCF {
42        DataFrameCF::from_bits(self.into_bits() & 0b0011)
43    }
44    /// Check if the data frame is QoS.
45    pub const fn is_qos(&self) -> bool {
46        matches!(
47            self,
48            Self::QoSData
49                | Self::QoSDataCFAck
50                | Self::QoSDataCFPoll
51                | Self::QoSDataCFAckCFPoll
52                | Self::QoSNull
53                | Self::QoSCFPoll
54                | Self::QoSCFAckCFPoll
55        )
56    }
57    /// Check if the data frame has a payload.
58    pub const fn has_payload(&self) -> bool {
59        matches!(
60            self,
61            Self::Data
62                | Self::DataCFAck
63                | Self::DataCFPoll
64                | Self::DataCFAckCFPoll
65                | Self::QoSData
66                | Self::QoSDataCFAck
67                | Self::QoSDataCFPoll
68                | Self::QoSDataCFAckCFPoll
69        )
70    }
71}