# embedded-nrf24l01 ## Features * Designed for use with the [embedded-hal] crate * Safe and declarative register definitions * Chip operation modes lifted to the type-level * Lets you go straight into RX/TX with the default config ### Still missing * Auto-ack support ## Reference datasheets * [nRF24L01+](https://www.sparkfun.com/datasheets/Components/SMD/nRF24L01Pluss_Preliminary_Product_Specification_v1_0.pdf) ## Usage ### Parameters Get the `*-hal` crate for your micro-controller unit. Figure out how to get to the peripherals implementing these [embedded-hal] traits: * `embedded_hal::blocking::spi::Transfer` for the SPI peripheral We provide a `mod setup` with a few constants for SPI. * `embedded_hal::digital::OutputPin` for the **CE** pin * `embedded_hal::digital::OutputPin` for the **CSN** pin (Although that one belongs to the SPI, we found it much more reliable to implement in software.) ### Constructor ```rust let mut nrf24 = NRF24L01::new(ce, csn, spi).unwrap(); ``` This will provide an instance of `Standby`. You can use `.rx()` or `.tx()` to transfer into a `RXMode` and `TXMode` instances. They implement `.standby()` methods to get back to `Standby` and then switch to the other mode. ### `RXMode` Use `rx.can_read()` to poll (returning the pipe number), then `rx.read()` to receive payload. ### `TXMode` Use `tx.send()` to enqueue a packet. Use `tx.can_send()` to prevent sending on a full queue, and `tx.wait_empty()` to flush. [embedded-hal]: https://crates.io/crates/embedded-hal