This module contains the driver for the NRF24L01+ (NG) 2.4 GHz transceiver. More...
This module contains the driver for the NRF24L01+ (NG) 2.4 GHz transceiver.
Files | |
file | nrf24l01p_ng.h |
Public interface for NRF24L01+ (NG) devices. | |
file | gnrc_netif_nrf24l01p_ng.h |
NRF24L01+ (NG) adaptation for Network interface API. | |
file | nrf24l01p_ng_communication.h |
Functions to communicate with the NRF24L01+ (NG) transceiver via SPI. | |
file | nrf24l01p_ng_constants.h |
Constants from the datasheet of the NRF24L01+ (NG) transceiver. | |
file | nrf24l01p_ng_diagnostics.h |
Functions to print NRF24L01+ (NG) debug information. | |
file | nrf24l01p_ng_netdev.h |
Netdev driver interface for NRF24L01+ (NG) device driver. | |
file | nrf24l01p_ng_params.h |
Board specific configuration for all NRF24L01+ (NG) devices. | |
file | nrf24l01p_ng_registers.h |
Register map of NRF24L01+ (NG) devices. | |
file | nrf24l01p_ng_states.h |
Operation states of NRF24L01+ (NG) devices. | |
Data Structures | |
struct | nrf24l01p_ng_cfg_t |
Struct that holds all active configuration values. More... | |
struct | nrf24l01p_ng_params_t |
Struct of NRF24L01+ initialization parameters. More... | |
struct | nrf24l01p_ng |
NRF24L01+ device struct. More... | |
Macros | |
#define | NRF24L01P_NG_MIN_ADDR_WIDTH (3) |
Minimum width of a NRF24L01+ layer-2 address. | |
#define | NRF24L01P_NG_MAX_ADDR_WIDTH (5) |
Maximum width of a NRF24L01+ layer-2 address. | |
#define | NRF24L01P_NG_ADDR_WIDTH NRF24L01P_NG_MAX_ADDR_WIDTH |
Pass the compiler a definition of NRF24L01P_NG_ADDR_WIDTH to configure the layer-2 address width of this transceiver. | |
#define | NRF24L01P_NG_BROADCAST_ADDR { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF } |
Agreed layer-2 address to send broadcast frames to. | |
#define | NRF24L01P_NG_ADDR_P0(dev) ((dev)->arxaddr.rx_addr_long[NRF24L01P_NG_P0]) |
Shortcut to access the address of pipe 0. | |
#define | NRF24L01P_NG_ADDR_P1(dev) ((dev)->arxaddr.rx_addr_long[NRF24L01P_NG_P1]) |
Shortcut to access the address of pipe 1. | |
#define | NRF24L01P_NG_ADDR_PX_LSB(dev, pipe) ((dev)->arxaddr.rx_addr_short[(pipe) - 2]) |
Shortcut to access the least significant byte of the addresses pipe 2, pipe 3, pipe 4 or pipe 5. | |
Functions | |
int | nrf24l01p_ng_setup (nrf24l01p_ng_t *dev, const nrf24l01p_ng_params_t *params, uint8_t index) |
Setup the NRF24L01+ driver, but perform no initialization. | |
int | nrf24l01p_ng_set_enable_pipe (nrf24l01p_ng_t *dev, nrf24l01p_ng_pipe_t pipe, bool enable) |
Enable or disable data pipe pipe . | |
int | nrf24l01p_ng_get_enable_pipe (nrf24l01p_ng_t *dev, nrf24l01p_ng_pipe_t pipe, bool *enable) |
Query if data pipe pipe is enabled. | |
int | nrf24l01p_ng_set_air_data_rate (nrf24l01p_ng_t *dev, nrf24l01p_ng_rfdr_t data_rate) |
Configure air data rate. | |
uint16_t | nrf24l01p_ng_get_air_data_rate (const nrf24l01p_ng_t *dev, nrf24l01p_ng_rfdr_t *data_rate) |
Get currently configured data rate. | |
int | nrf24l01p_ng_set_crc (nrf24l01p_ng_t *dev, nrf24l01p_ng_crc_t crc) |
Configure CRC length. | |
uint8_t | nrf24l01p_ng_get_crc (const nrf24l01p_ng_t *dev, nrf24l01p_ng_crc_t *crc) |
Get currently configured CRC length. | |
int | nrf24l01p_ng_set_tx_power (nrf24l01p_ng_t *dev, nrf24l01p_ng_tx_power_t power) |
Configure Tx trasceiver power. | |
int8_t | nrf24l01p_ng_get_tx_power (const nrf24l01p_ng_t *dev, nrf24l01p_ng_tx_power_t *power) |
Get currently configured Tx transceiver power. | |
int | nrf24l01p_ng_set_channel (nrf24l01p_ng_t *dev, uint8_t channel) |
Set transceiver channel. | |
uint8_t | nrf24l01p_ng_get_channel (const nrf24l01p_ng_t *dev) |
Get currently configured transceiver channel. | |
int | nrf24l01p_ng_set_rx_address (nrf24l01p_ng_t *dev, const uint8_t *addr, nrf24l01p_ng_pipe_t pipe) |
Set Rx address of a certain data pipe. | |
int | nrf24l01p_ng_get_rx_address (const nrf24l01p_ng_t *dev, uint8_t *addr, nrf24l01p_ng_pipe_t pipe) |
Get current Rx address of a certain data pipe. | |
int | nrf24l01p_ng_set_max_retransm (nrf24l01p_ng_t *dev, uint8_t max_rt) |
Configure maximum number of retransmissions for ESB. | |
uint8_t | nrf24l01p_ng_get_max_retransm (const nrf24l01p_ng_t *dev) |
Get currently configured number of maximum retransmissions for ESB. | |
int | nrf24l01p_ng_set_retransm_delay (nrf24l01p_ng_t *dev, nrf24l01p_ng_ard_t rt_delay) |
Set retransmission delay for ESB. | |
uint16_t | nrf24l01p_ng_get_retransm_delay (const nrf24l01p_ng_t *dev, nrf24l01p_ng_ard_t *rt_delay) |
Get retransmission delay for ESB. | |
int | nrf24l01p_ng_set_state (nrf24l01p_ng_t *dev, nrf24l01p_ng_state_t state) |
Put device into sleep mode(NRF24L01P_NG_STATE_POWER_DOWN), standby mode (NRF24L01P_NG_STATE_STANDBY_1), or Rx mode (NRF24L01P_NG_STATE_RX_MODE) | |
nrf24l01p_ng_state_t | nrf24l01p_ng_get_state (const nrf24l01p_ng_t *dev) |
Get current device state. | |
void | nrf24l01p_ng_eui_get (const netdev_t *dev, uint8_t *eui) |
Retrieve a unique layer-2 address for an nrf24l01p_ng instance. | |
#define NRF24L01P_NG_ADDR_P0 | ( | dev | ) | ((dev)->arxaddr.rx_addr_long[NRF24L01P_NG_P0]) |
Shortcut to access the address of pipe 0.
Definition at line 70 of file nrf24l01p_ng.h.
#define NRF24L01P_NG_ADDR_P1 | ( | dev | ) | ((dev)->arxaddr.rx_addr_long[NRF24L01P_NG_P1]) |
Shortcut to access the address of pipe 1.
Definition at line 75 of file nrf24l01p_ng.h.
#define NRF24L01P_NG_ADDR_PX_LSB | ( | dev, | |
pipe | |||
) | ((dev)->arxaddr.rx_addr_short[(pipe) - 2]) |
Shortcut to access the least significant byte of the addresses pipe 2, pipe 3, pipe 4 or pipe 5.
The other bytes are shared with the address of pipe 1
Definition at line 83 of file nrf24l01p_ng.h.
#define NRF24L01P_NG_ADDR_WIDTH NRF24L01P_NG_MAX_ADDR_WIDTH |
Pass the compiler a definition of NRF24L01P_NG_ADDR_WIDTH to configure the layer-2 address width of this transceiver.
Definition at line 54 of file nrf24l01p_ng.h.
#define NRF24L01P_NG_BROADCAST_ADDR { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF } |
Agreed layer-2 address to send broadcast frames to.
The broadcast address will be assigned to pipe 0.
Definition at line 65 of file nrf24l01p_ng.h.
#define NRF24L01P_NG_MAX_ADDR_WIDTH (5) |
Maximum width of a NRF24L01+ layer-2 address.
Definition at line 47 of file nrf24l01p_ng.h.
#define NRF24L01P_NG_MIN_ADDR_WIDTH (3) |
Minimum width of a NRF24L01+ layer-2 address.
Definition at line 42 of file nrf24l01p_ng.h.
void nrf24l01p_ng_eui_get | ( | const netdev_t * | dev, |
uint8_t * | eui | ||
) |
Retrieve a unique layer-2 address for an nrf24l01p_ng instance.
[in] | dev | The device descriptor of the transceiver |
[out] | eui | Destination to write the address to |
uint16_t nrf24l01p_ng_get_air_data_rate | ( | const nrf24l01p_ng_t * | dev, |
nrf24l01p_ng_rfdr_t * | data_rate | ||
) |
Get currently configured data rate.
[in] | dev | NRF24L01+ device handle |
[out] | data_rate | Configuration data rate value (may be NULL) |
uint8_t nrf24l01p_ng_get_channel | ( | const nrf24l01p_ng_t * | dev | ) |
Get currently configured transceiver channel.
[in] | dev | NRF24L01+ device handle |
uint8_t nrf24l01p_ng_get_crc | ( | const nrf24l01p_ng_t * | dev, |
nrf24l01p_ng_crc_t * | crc | ||
) |
Get currently configured CRC length.
[in] | dev | NRF24L01+ device handle |
[out] | crc | Configuration crc value (may be NULL) |
int nrf24l01p_ng_get_enable_pipe | ( | nrf24l01p_ng_t * | dev, |
nrf24l01p_ng_pipe_t | pipe, | ||
bool * | enable | ||
) |
Query if data pipe pipe
is enabled.
[in] | dev | NRF24L01+ device handle |
[in] | pipe | Pipe index |
[out] | enable | If pipe is enabled or disabled |
0 | Success |
-EINVAL | Bad pipe index |
uint8_t nrf24l01p_ng_get_max_retransm | ( | const nrf24l01p_ng_t * | dev | ) |
Get currently configured number of maximum retransmissions for ESB.
[in] | dev | NRF24L01+ device handle |
uint16_t nrf24l01p_ng_get_retransm_delay | ( | const nrf24l01p_ng_t * | dev, |
nrf24l01p_ng_ard_t * | rt_delay | ||
) |
Get retransmission delay for ESB.
[in] | dev | NRF24L01+ device handle |
[out] | rt_delay | Configuration retransmission delay value |
int nrf24l01p_ng_get_rx_address | ( | const nrf24l01p_ng_t * | dev, |
uint8_t * | addr, | ||
nrf24l01p_ng_pipe_t | pipe | ||
) |
Get current Rx address of a certain data pipe.
addr
must be at least NRF24L01P_NG_ADDR_WIDTH wide.
[in] | dev | NRF24L01+ device handle |
[out] | addr | Rx address |
[in] | pipe | Pipe index |
-EINVAL | Bad pipe index |
nrf24l01p_ng_state_t nrf24l01p_ng_get_state | ( | const nrf24l01p_ng_t * | dev | ) |
Get current device state.
[in] | dev | NRf24L01+ device handle |
int8_t nrf24l01p_ng_get_tx_power | ( | const nrf24l01p_ng_t * | dev, |
nrf24l01p_ng_tx_power_t * | power | ||
) |
Get currently configured Tx transceiver power.
[in] | dev | NRF24L01+ device handle |
[out] | power | Configuration Tx power value |
int nrf24l01p_ng_set_air_data_rate | ( | nrf24l01p_ng_t * | dev, |
nrf24l01p_ng_rfdr_t | data_rate | ||
) |
Configure air data rate.
[in] | dev | NRF24L01+ device handle |
[in] | data_rate | Data rate configuration value |
0 | Success |
-EINVAL | Bad data rate value |
-EAGAIN | Current state does not permit changing data rate |
int nrf24l01p_ng_set_channel | ( | nrf24l01p_ng_t * | dev, |
uint8_t | channel | ||
) |
Set transceiver channel.
[in] | dev | NRF24l01+ device handle |
[in] | channel | Channel [0; 15] |
0 | Success |
-EINVAL | Bad channel |
-EAGAIN | Current state does not permit switching channel |
int nrf24l01p_ng_set_crc | ( | nrf24l01p_ng_t * | dev, |
nrf24l01p_ng_crc_t | crc | ||
) |
Configure CRC length.
[in] | dev | NRF24L01+ device handle |
[in] | crc | Configuration CRC value |
0 | Success |
-EINVAL | Bad CRC configuration value |
-ENOTSUP | CRC length not supported |
-EAGAIN | Current state does not permit changing CRC length |
int nrf24l01p_ng_set_enable_pipe | ( | nrf24l01p_ng_t * | dev, |
nrf24l01p_ng_pipe_t | pipe, | ||
bool | enable | ||
) |
Enable or disable data pipe pipe
.
If @p pipe should be enabled, it is advised to set an address in advance. @see nrf24l01p_ng_set_rx_addr For Enhanced ShockBurst, auto ACK and dynamic payload length are enabled
[in] | dev | NRF24L01+ device handle |
[in] | pipe | Pipe index |
[in] | enable | If pipe should be enabled or disabled |
0 | Success |
-EINVAL | Bad pipe index |
int nrf24l01p_ng_set_max_retransm | ( | nrf24l01p_ng_t * | dev, |
uint8_t | max_rt | ||
) |
Configure maximum number of retransmissions for ESB.
[in] | dev | NRF24L01+ device handle |
[in] | max_rt | Number of maximum retransmissions [0; 15] |
0 | Success |
-EINVAL | Unsupported number of retransmissions |
-EAGAIN | Current state does not permit changing the maximum number of retransmissions |
int nrf24l01p_ng_set_retransm_delay | ( | nrf24l01p_ng_t * | dev, |
nrf24l01p_ng_ard_t | rt_delay | ||
) |
Set retransmission delay for ESB.
[in] | dev | NRF24L01+ device handle |
[in] | rt_delay | Configuration retransmission delay value |
int nrf24l01p_ng_set_rx_address | ( | nrf24l01p_ng_t * | dev, |
const uint8_t * | addr, | ||
nrf24l01p_ng_pipe_t | pipe | ||
) |
Set Rx address of a certain data pipe.
If you want to set the address of pipe 2, 3, 4 or 5 you only set the LSB because the other bytes are equal to the address of pipe 1.
For pipe 0 and 1 NRF24L01P_NG_ADDR_WIGTH bytes are expected
[in] | dev | NRF24L01+ device handle |
[in] | addr | Rx address |
[in] | pipe | Pipe index |
0 | Success |
-EINVAL | Bad address length |
int nrf24l01p_ng_set_state | ( | nrf24l01p_ng_t * | dev, |
nrf24l01p_ng_state_t | state | ||
) |
Put device into sleep mode(NRF24L01P_NG_STATE_POWER_DOWN), standby mode (NRF24L01P_NG_STATE_STANDBY_1), or Rx mode (NRF24L01P_NG_STATE_RX_MODE)
[in] | dev | NRF24L01+ device handle |
[in] | state | State |
-EAGAIN | Device is currently not permitted to change state |
-ENOTSUP | Device is not permitted to change state to state |
int nrf24l01p_ng_set_tx_power | ( | nrf24l01p_ng_t * | dev, |
nrf24l01p_ng_tx_power_t | power | ||
) |
Configure Tx trasceiver power.
[in] | dev | NRf24L01+ device handle |
[in] | power | Configuration Tx power value |
0 | Success |
-EINVAL | Bad Tx power configuration value |
-EAGAIN | Current state does not permit changing Tx power |
int nrf24l01p_ng_setup | ( | nrf24l01p_ng_t * | dev, |
const nrf24l01p_ng_params_t * | params, | ||
uint8_t | index | ||
) |
Setup the NRF24L01+ driver, but perform no initialization.
netdev_driver_t::init can be used after this call to initialize the transceiver.
[in] | dev | NRF24L01+ device handle |
[in] | params | Parameters of the device to setup |
[in] | index | Index of params in a global parameter struct array. If initialized manually, pass a unique identifier instead. |
0 | Device successfully set up |