ph-esp32-mac 0.1.1

no_std, no_alloc Rust implementation of the ESP32 Ethernet MAC (EMAC) driver
//! Synchronization and Concurrency Support
//!
//! This module provides synchronization primitives and concurrency-safe wrappers
//! for the EMAC driver. It includes:
//!
//! - **Primitives** (`primitives`): Low-level synchronization types (internal)
//!   - `CriticalSectionCell` - ISR-safe interior mutability
//!   - `AtomicWaker` - Async waker storage for interrupts
//!
//! - **Shared Wrappers** (`shared`): ISR-safe EMAC wrappers
//!   - [`SharedEmac`] - Synchronous critical-section protected EMAC
//!   - [`AsyncSharedEmac`] - Async-capable ISR-safe EMAC wrapper
//!
//! - **Async Support** (`asynch`): Async/await support for EMAC operations
//!   - [`AsyncEmacState`] - Per-instance waker state for RX/TX/error events
//!   - [`AsyncEmacExt`] - Extension trait adding async methods to EMAC
//!   - [`RxFuture`], [`TxFuture`] - Futures for async I/O
//!   - Interrupt handler helpers for waking tasks
//!
//! # Feature Flags
//!
//! - `critical-section`: Enables `primitives` and `shared` modules
//! - `async`: Enables `asynch` module (also requires `critical-section`)
//!
//! # Example
//!
//! ```ignore
//! use ph_esp32_mac::sync::SharedEmac;
//!
//! // Static ISR-safe EMAC
//! static EMAC: SharedEmac<10, 10, 1600> = SharedEmac::new();
//!
//! fn main() {
//!     EMAC.with(|emac| {
//!         emac.init(EmacConfig::default()).unwrap();
//!         emac.start().unwrap();
//!     });
//! }
//!
//! #[interrupt]
//! fn EMAC_IRQ() {
//!     EMAC.with(|emac| {
//!         // Safe access from ISR
//!         let status = emac.read_interrupt_status();
//!         emac.clear_interrupts(status);
//!     });
//! }
//! ```

// Primitives module (requires critical-section)
pub(crate) mod primitives;

// Shared wrappers (requires critical-section)
mod shared;

pub use shared::{
    AsyncSharedEmac, AsyncSharedEmacDefault, AsyncSharedEmacLarge, AsyncSharedEmacSmall,
    SharedEmac, SharedEmacDefault, SharedEmacLarge, SharedEmacSmall,
};

// Async support (requires async feature)
#[cfg(feature = "async")]
#[cfg_attr(docsrs, doc(cfg(feature = "async")))]
pub mod asynch;

#[cfg(feature = "async")]
#[cfg_attr(docsrs, doc(cfg(feature = "async")))]
pub use asynch::{
    AsyncEmacExt, AsyncEmacState, ErrorFuture, RxFuture, TxFuture, async_interrupt_handler,
    peek_interrupt_status, reset_async_state,
};