esp_radio/ieee802154/
frame.rs1use alloc::vec::Vec;
2
3use ieee802154::mac::{FrameContent, Header};
4
5pub(crate) const FRAME_SIZE: usize = 129;
6pub(crate) const FRAME_VERSION_1: u8 = 0x10; pub(crate) const FRAME_VERSION_2: u8 = 0x20; const FRAME_AR_OFFSET: usize = 0;
15const FRAME_AR_BIT: u8 = 0x20;
16const FRAME_VERSION_OFFSET: usize = 1;
17const FRAME_VERSION_MASK: u8 = 0x30;
18
19#[derive(Debug, Clone, PartialEq, Eq)]
21#[instability::unstable]
22#[cfg_attr(feature = "defmt", derive(defmt::Format))]
23pub struct Frame {
24 pub header: Header,
26 pub content: FrameContent,
28 pub payload: Vec<u8>,
30 pub footer: [u8; 2],
32}
33
34#[derive(Debug, Clone, PartialEq, Eq)]
36#[cfg_attr(feature = "defmt", derive(defmt::Format))]
37#[instability::unstable]
38pub struct ReceivedFrame {
39 pub frame: Frame,
41 pub channel: u8,
43 pub rssi: i8,
45 pub lqi: u8,
47}
48
49pub(crate) fn frame_is_ack_required(frame: &[u8]) -> bool {
50 frame
51 .get(FRAME_AR_OFFSET)
52 .is_some_and(|fcf| fcf & FRAME_AR_BIT != 0)
53}
54
55pub(crate) fn frame_get_version(frame: &[u8]) -> u8 {
56 frame
57 .get(FRAME_VERSION_OFFSET)
58 .map_or(0, |fcf| fcf & FRAME_VERSION_MASK)
59}