ieee80211/common/subtypes/
data.rs1use 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 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 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 pub const fn data_frame_cf(&self) -> DataFrameCF {
42 DataFrameCF::from_bits(self.into_bits() & 0b0011)
43 }
44 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 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}