Documentation and housekeeping for esp-ieee802154 (#1730)

* Derive more traits on public types

* Document cargo features

* Minor documentation updates, remove an unused struct field
This commit is contained in:
Jesse Braham 2024-06-28 07:00:15 +00:00 committed by GitHub
parent d0cd890e51
commit 4ca2398bc1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 45 additions and 27 deletions

View File

@ -18,6 +18,7 @@ test = false
[dependencies]
byte = "0.2.7"
critical-section = "1.1.2"
document-features = "0.2.8"
esp-hal = { version = "0.18.0", path = "../esp-hal" }
esp-wifi-sys = { git = "https://github.com/esp-rs/esp-wifi", rev = "2ceb4b3" }
heapless = "0.8.0"
@ -26,9 +27,8 @@ log = "0.4.21"
vcell = "0.1.3"
[features]
default = []
esp32c6 = ["esp-hal/esp32c6", "esp-wifi-sys/esp32c6"]
esp32h2 = ["esp-hal/esp32h2", "esp-wifi-sys/esp32h2"]
## Output logging from the phy blobs. Requires nightly
## Output logging from the PHY blobs. Requires nightly.
binary-logs = []

View File

@ -11,7 +11,7 @@ const FRAME_VERSION_OFFSET: usize = 2;
const FRAME_VERSION_MASK: u8 = 0x30;
/// IEEE 802.15.4 MAC frame
#[derive(Debug, Clone)]
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Frame {
/// Header
pub header: Header,
@ -24,7 +24,7 @@ pub struct Frame {
}
/// IEEE 802.15.4 MAC frame which has been received
#[derive(Debug, Clone)]
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ReceivedFrame {
/// Frame
pub frame: Frame,

View File

@ -1,12 +1,19 @@
//! Low-level [IEEE 802.15.4] driver for the ESP32-C6 and ESP32-H2
//! Low-level [IEEE 802.15.4] driver for the ESP32-C6 and ESP32-H2.
//!
//! Implements the PHY/MAC layers of the IEEE 802.15.4 protocol stack, and
//! supports sending and receiving of raw frames.
//!
//! This library is intended to be used to implement support for higher-level
//! communication protocols, for example [esp-openthread].
//!
//! [IEEE 802.15.4]: https://en.wikipedia.org/wiki/IEEE_802.15.4
#![no_std]
//! [esp-openthread]: https://github.com/esp-rs/esp-openthread
//!
//! ## Feature Flags
#![doc = document_features::document_features!()]
#![doc(html_logo_url = "https://avatars.githubusercontent.com/u/46717278")]
#![cfg_attr(feature = "binary-logs", feature(c_variadic))]
#![no_std]
use core::{cell::RefCell, marker::PhantomData};
@ -33,13 +40,8 @@ mod hal;
mod pib;
mod raw;
#[no_mangle]
extern "C" fn rtc_clk_xtal_freq_get() -> i32 {
0
}
/// IEEE 802.15.4 errors
#[derive(Debug, Clone, Copy)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Error {
/// The requested data is bigger than available range, and/or the offset is
/// invalid
@ -58,7 +60,7 @@ impl From<byte::Error> for Error {
}
/// IEEE 802.15.4 driver configuration
#[derive(Debug, Clone, Copy)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Config {
pub auto_ack_tx: bool,
pub auto_ack_rx: bool,
@ -101,7 +103,6 @@ pub struct Ieee802154<'a> {
_align: u32,
transmit_buffer: [u8; FRAME_SIZE],
_phantom1: PhantomData<&'a ()>,
//_phantom2:PhantomData< &'b ()>,
}
impl<'a> Ieee802154<'a> {
@ -113,7 +114,6 @@ impl<'a> Ieee802154<'a> {
_align: 0,
transmit_buffer: [0u8; FRAME_SIZE],
_phantom1: PhantomData,
//_phantom2: PhantomData,
}
}
@ -221,6 +221,7 @@ impl<'a> Ieee802154<'a> {
Ok(())
}
/// Set the transmit done callback function.
pub fn set_tx_done_callback(&mut self, callback: &'a mut (dyn FnMut() + Send)) {
critical_section::with(|cs| {
let mut tx_done_callback = TX_DONE_CALLBACK.borrow_ref_mut(cs);
@ -228,6 +229,7 @@ impl<'a> Ieee802154<'a> {
});
}
/// Clear the transmit done callback function.
pub fn clear_tx_done_callback(&mut self) {
critical_section::with(|cs| {
let mut tx_done_callback = TX_DONE_CALLBACK.borrow_ref_mut(cs);
@ -235,6 +237,7 @@ impl<'a> Ieee802154<'a> {
});
}
/// Set the receive available callback function.
pub fn set_rx_available_callback(&mut self, callback: &'a mut (dyn FnMut() + Send)) {
critical_section::with(|cs| {
let mut rx_available_callback = RX_AVAILABLE_CALLBACK.borrow_ref_mut(cs);
@ -242,6 +245,7 @@ impl<'a> Ieee802154<'a> {
});
}
/// Clear the receive available callback function.
pub fn clear_rx_available_callback(&mut self) {
critical_section::with(|cs| {
let mut rx_available_callback = RX_AVAILABLE_CALLBACK.borrow_ref_mut(cs);
@ -249,6 +253,7 @@ impl<'a> Ieee802154<'a> {
});
}
/// Set the transmit done callback function.
pub fn set_tx_done_callback_fn(&mut self, callback: fn()) {
critical_section::with(|cs| {
let mut tx_done_callback_fn = TX_DONE_CALLBACK_FN.borrow_ref_mut(cs);
@ -256,6 +261,7 @@ impl<'a> Ieee802154<'a> {
});
}
/// Clear the transmit done callback function.
pub fn clear_tx_done_callback_fn(&mut self) {
critical_section::with(|cs| {
let mut tx_done_callback_fn = TX_DONE_CALLBACK_FN.borrow_ref_mut(cs);
@ -263,6 +269,7 @@ impl<'a> Ieee802154<'a> {
});
}
/// Set the receive available callback function.
pub fn set_rx_available_callback_fn(&mut self, callback: fn()) {
critical_section::with(|cs| {
let mut rx_available_callback_fn = RX_AVAILABLE_CALLBACK_FN.borrow_ref_mut(cs);
@ -270,6 +277,7 @@ impl<'a> Ieee802154<'a> {
});
}
/// Clear the receive available callback function.
pub fn clear_rx_available_callback_fn(&mut self) {
critical_section::with(|cs| {
let mut rx_available_callback_fn = RX_AVAILABLE_CALLBACK_FN.borrow_ref_mut(cs);
@ -287,6 +295,11 @@ impl<'a> Drop for Ieee802154<'a> {
}
}
/// Convert from RSSI (Received Signal Strength Indicator) to LQI (Link Quality
/// Indication)
///
/// RSSI is a measure of incoherent (raw) RF power in a channel. LQI is a
/// cumulative value used in multi-hop networks to assess the cost of a link.
pub fn rssi_to_lqi(rssi: i8) -> u8 {
if rssi < -80 {
0
@ -349,3 +362,8 @@ fn rx_available() {
}
});
}
#[no_mangle]
extern "C" fn rtc_clk_xtal_freq_get() -> i32 {
0
}

View File

@ -28,7 +28,7 @@ const IEEE802154_MULTIPAN_MAX: usize = 4;
static PIB: Mutex<RefCell<Option<Pib>>> = Mutex::new(RefCell::new(None));
/// Frame pending mode
#[derive(Debug, Default, Clone, Copy, PartialEq)]
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
pub enum PendingMode {
/// Frame pending bit always set to 1 in the ack to Data Request
#[default]
@ -44,7 +44,7 @@ pub enum PendingMode {
}
/// CCA mode
#[derive(Debug, Default, Clone, Copy)]
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
pub enum CcaMode {
/// Carrier only
#[default]

View File

@ -63,7 +63,7 @@ enum Ieee802154TxRxScene {
}
/// A raw payload received on some channel
#[derive(Debug)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct RawReceived {
/// Payload
pub data: [u8; FRAME_SIZE],