NRF24L01+ driver interface¶
Low-level driver for nrf24l01+ transceiver.
-
enum
nrf24l01p_aw_t
¶ - NRF24L01P_AW_3BYTE
- address width is 3 Byte
- NRF24L01P_AW_4BYTE
- address width is 4 Byte
- NRF24L01P_AW_5BYTE
- address width is 5 Byte
-
enum
nrf24l01p_dr_t
¶ - NRF24L01P_DR_250KBS
- datarate is 250 kbps
- NRF24L01P_DR_1MBS
- datarate is 1 Mbps
- NRF24L01P_DR_2MBS
- datarate is 2 Mbps
-
enum
nrf24l01p_pwr_t
¶ - NRF24L01P_PWR_N18DBM
= 0
- power is -18dBm
- NRF24L01P_PWR_N12DBM
- power is -12dBm
- NRF24L01P_PWR_N6DBM
- power is - 6dBm
- NRF24L01P_PWR_0DBM
- power is 0dBm
- NRF24L01P_PWR_N18DBM
-
enum
nrf24l01p_rx_pipe_t
¶ - NRF24L01P_PIPE0
= 0
- RX pipe 0.
- NRF24L01P_PIPE1
- RX pipe 1.
- NRF24L01P_PIPE2
- RX pipe 2.
- NRF24L01P_PIPE3
- RX pipe 3.
- NRF24L01P_PIPE4
- RX pipe 4.
- NRF24L01P_PIPE5
- RX pipe 5.
- NRF24L01P_PIPE0
-
enum
nrf24l01p_crc_t
¶ - NRF24L01P_CRC_1BYTE
= 0
- encoding scheme generates 1 Byte redundancy
- NRF24L01P_CRC_2BYTE
- encoding scheme generates 2 Bytes redundancy
- NRF24L01P_CRC_1BYTE
-
enum
nrf24l01p_retransmit_delay_t
¶ - NRF24L01P_RETR_250US
= 0
- retransmit delay is 250us
- NRF24L01P_RETR_500US
- retransmit delay is 500us
- NRF24L01P_RETR_750US
- retransmit delay is 750us
- NRF24L01P_RETR_1000US
- retransmit delay is 1000us
- NRF24L01P_RETR_1250US
- retransmit delay is 1250us
- NRF24L01P_RETR_1500US
- retransmit delay is 1500us
- NRF24L01P_RETR_1750US
- retransmit delay is 1750us
- NRF24L01P_RETR_2000US
- retransmit delay is 2000us
- NRF24L01P_RETR_2250US
- retransmit delay is 2250us
- NRF24L01P_RETR_2500US
- retransmit delay is 2500us
- NRF24L01P_RETR_2750US
- retransmit delay is 2750us
- NRF24L01P_RETR_3000US
- retransmit delay is 3000us
- NRF24L01P_RETR_3250US
- retransmit delay is 3250us
- NRF24L01P_RETR_3500US
- retransmit delay is 3500us
- NRF24L01P_RETR_3750US
- retransmit delay is 3750us
- NRF24L01P_RETR_4000US
- retransmit delay is 4000us
- NRF24L01P_RETR_250US
-
enum
nrf24l01p_rx_event_t
¶ - RCV_PKT_NRF24L01P
= 0
- transceiver received data
- RCV_PKT_NRF24L01P
-
int
nrf24l01p_read_reg
(const nrf24l01p_t * dev, char reg, char * answer)¶ Read one register of the nrf24l01+ transceiver.
Parameters
dev: Transceiver device to use. reg: Register address to read from. answer: Byte to read. Return values
- 0 on success.
- -1 on error.
-
int
nrf24l01p_write_reg
(const nrf24l01p_t * dev, char reg, char write)¶ Write one register to the nrf24l01+ transceiver.
Parameters
dev: Transceiver device to use. reg: Register address to write to. write: Byte to write. Return values
- 0 on success.
- -1 on error.
-
int
nrf24l01p_init
(nrf24l01p_t * dev,spi.h::spi_t
spi,gpio.h::gpio_t
ce,gpio.h::gpio_t
csn,gpio.h::gpio_t
irq)¶ Initialize the nrf24l01+ transceiver.
@ note This function initializes the transceiver so that it is ready to use.
Parameters
dev: Transceiver device to use. spi: SPI device to use. ce: GPIO pin to use for chip enable. csn: GPIO pin to use for chip select. irq: GPIO pin to use for interrupt request. Return values
- 0 on success.
- -1 on error.
-
int
nrf24l01p_on
(const nrf24l01p_t * dev)¶ Power on the nrf24l01+ transceiver.
Parameters
dev: Transceiver device to use. Return values
- 0 on success.
- -1 on error.
-
int
nrf24l01p_off
(const nrf24l01p_t * dev)¶ Power off the nrf24l01+ transceiver.
Parameters
dev: Transceiver device to use. Return values
- 0 on success.
- -1 on error.
-
void
nrf24l01p_transmit
(const nrf24l01p_t * dev)¶ Transmit payload laying in TX FIFO of the nrf24l01+ transceiver.
Parameters
dev: Transceiver device to use.
-
int
nrf24l01p_read_payload
(const nrf24l01p_t * dev, char * answer, unsigned int size)¶ Read payload from RX FIFO of the nrf24l01+ transceiver.
Parameters
dev: Transceiver device to use. answer: Buffer to receive bytes to. size: Number of bytes to transfer. For nrf24l01+ in general 32. Return values
- Number of bytes that were transfered.
- -1 on error.
-
void
nrf24l01p_register
(nrf24l01p_t * dev, unsigned int * pid)¶ Register a given ID to the nrf24l01+ transceiver.
Parameters
dev: Transceiver device to use. pid: ID to register.
-
int
nrf24l01p_enable_dynamic_payload
(const nrf24l01p_t * dev,nrf24l01p.h::nrf24l01p_rx_pipe_t
pipe)¶ Enable dynamic payload for the pipe on give nrf24l01+ transceiver.
Parameters
dev: Transceiver device to use. pipe: RX pipe for which dynamic payload is enabled Return values
- 0 on success.
- -1 on error.
-
int
nrf24l01p_enable_dynamic_ack
(const nrf24l01p_t * dev)¶ Enable dynamic ack for the nrf24l01+ transceiver.
Parameters
dev: Transceiver device to use. Return values
- 0 on success.
- -1 on error.
-
int
nrf24l01p_unregister
(nrf24l01p_t * dev, unsigned int pid)¶ Unregister the nrf24l01+ transceiver from his ID.
Parameters
dev: Transceiver device to use. pid: Actual ID to unregister. Return values
- 0 on success.
- -1 on error.
-
void
nrf24l01p_get_id
(const nrf24l01p_t * dev, unsigned int * pid)¶ Get ID from the nrf24l01p transceiver.
Parameters
dev: Transceiver device to use. pid: Transceiver ID.
-
void
nrf24l01p_start
(const nrf24l01p_t * dev)¶ Start searching packets while in RX mode.
Parameters
dev: Transceiver device to use.
-
void
nrf24l01p_stop
(const nrf24l01p_t * dev)¶ Stop searching packets while in RX mode.
Parameters
dev: Transceiver device to use.
-
int
nrf24l01p_preload
(const nrf24l01p_t * dev, char * data, unsigned int size)¶ Preload TX FIFO with payload to transmit.
Parameters
dev: Transceiver device to use. data: Buffer to preload. size: Number of bytes in buffer. For nrf24l01+ e.g. 32 Return values
- Number of bytes that were transfered.
- -1 on error.
-
int
nrf24l01p_set_channel
(const nrf24l01p_t * dev, uint8_t chan)¶ Set the RF channel for the nrf24l01+ transceiver.
Note
To ensure non-overlapping channels in 2Mbps mode, don’t use directly neighbouring channels in this mode.
Parameters
dev: Transceiver device to use. chan: Buffer to preload. Return values
- 0 on success.
- -1 on error.
-
int
nrf24l01p_set_address_width
(const nrf24l01p_t * dev,nrf24l01p.h::nrf24l01p_aw_t
aw)¶ Set the address width for the nrf24l01+ transceiver.
Parameters
dev: Transceiver device to use. aw: Address width (type nrf24l01p_aw_t). Return values
- 0 on success.
- -1 on error.
-
int
nrf24l01p_set_payload_width
(const nrf24l01p_t * dev,nrf24l01p.h::nrf24l01p_rx_pipe_t
pipe, uint8_t width)¶ Set the RX payload width for the nrf24l01+ transceiver.
@ note This function sets the payload width for one packet. If the maximum of 32 bytes is exeeded, this value is set to 32.
Parameters
dev: Transceiver device to use. pipe: RX pipe to set the payload width. width: Numer of bytes per packet in RX payload. Return values
- 0 on success.
- -1 on error.
-
int
nrf24l01p_set_tx_address
(const nrf24l01p_t * dev, const char * saddr, unsigned int length)¶ Set the TX address for the nrf24l01+ transceiver (byte array).
Note
You can either use this function and give it a pointer to a byte array which holds the address to set, or use “nrf24l01p_set_tx_address_long” which requires a uint64_t which holds the address in the LSBs.
Parameters
dev: Transceiver device to use. saddr: Byte array which holds the TX address. length: Number of bytes in address array. Return values
- Address length on success.
- -1 on error.
-
int
nrf24l01p_set_tx_address_long
(const nrf24l01p_t * dev, uint64_t saddr, unsigned int length)¶ Set the TX address for the nrf24l01+ transceiver (long int).
Parameters
dev: Transceiver device to use. saddr: Long integer which holds the TX address in LSBs. length: Number of relevant bytes in uint64_t. Return values
- Address length on success.
- -1 on error.
-
int
nrf24l01p_set_rx_address
(const nrf24l01p_t * dev,nrf24l01p.h::nrf24l01p_rx_pipe_t
pipe, const char * saddr, unsigned int length)¶ Set the RX address for the nrf24l01+ transceiver (byte array).
Note
You can either use this function and give it a pointer to a byte array which holds the address to set, or use “nrf24l01p_set_rx_address_long” which requires a uint64_t which holds the address in the LSBs.
Parameters
dev: Transceiver device to use. pipe: RX pipe to set the address. saddr: Byte array which holds the RX address. length: Number of bytes in address array. Return values
- Address length on success.
- -1 on error.
-
int
nrf24l01p_set_rx_address_long
(const nrf24l01p_t * dev,nrf24l01p.h::nrf24l01p_rx_pipe_t
pipe, uint64_t saddr, unsigned int length)¶ Set the RX address for the nrf24l01+ transceiver (long int).
Parameters
dev: Transceiver device to use. pipe: RX pipe to set the address. saddr: Long integer which holds the RX address in LSBs. length: Number of relevant bytes in uint64_t. Return values
- Address length on success.
- -1 on error.
-
uint64_t
nrf24l01p_get_tx_address_long
(const nrf24l01p_t * dev)¶ Get the TX address for the nrf24l01+ transceiver (long int).
Parameters
dev: Transceiver device to use. Return values
- TX address of the nrf24l01+ transceiver.
- -1 on error.
-
uint64_t
nrf24l01p_get_rx_address_long
(const nrf24l01p_t * dev,nrf24l01p.h::nrf24l01p_rx_pipe_t
pipe)¶ Get the RX address for the nrf24l01+ transceiver (long int).
Parameters
dev: Transceiver device to use. pipe: RX pipe to get the address from. Return values
- RX address of the nrf24l01+ transceiver.
- -1 on error.
-
int
nrf24l01p_set_datarate
(const nrf24l01p_t * dev,nrf24l01p.h::nrf24l01p_dr_t
dr)¶ Get the TX address for the nrf24l01+ transceiver (long int).
Note
If you chose 2Mbps you should not allocate directly neighboring RF channels.
Parameters
dev: Transceiver device to use. dr: Datarate (of type nrf24l01p_dr_t). Return values
- 1 on success.
- -1 on error.
-
int
nrf24l01p_get_status
(const nrf24l01p_t * dev)¶ Get the status (register) of the nrf24l01+ transceiver device.
Parameters
dev: Transceiver device to use.s of the. Return values
- Value of the status register.
-
int
nrf24l01p_set_power
(const nrf24l01p_t * dev, int pwr)¶ Set the transmit power for the nrf24l01+ transceiver device.
Note
This function rounds the input values to the nearest possible setting.
Parameters
dev: Transceiver device to use. pwr: TX power for the nrf24l01p transceiver. Return values
- 1 on success.
- -1 on error.
-
int
nrf24l01p_get_power
(const nrf24l01p_t * dev)¶ Get the transmit power for the nrf24l01+ transceiver device.
Parameters
dev: Transceiver device to use. Return values
- TX power value of the nrf24l01+ transceiver.
-
int
nrf24l01p_set_txmode
(const nrf24l01p_t * dev)¶ Set the nrf24l01+ into TX mode.
Parameters
dev: Transceiver device to use. Return values
- 0 on success.
- -1 on error.
-
int
nrf24l01p_set_rxmode
(const nrf24l01p_t * dev)¶ Set the nrf24l01+ into RX mode.
Parameters
dev: Transceiver device to use. Return values
- 0 on success.
- -1 on error.
-
int
nrf24l01p_reset_all_interrupts
(const nrf24l01p_t * dev)¶ Reset all interrupts on the nrf24l01+ transceiver.
Parameters
dev: Transceiver device to use. Return values
- 1 on success.
- -1 on error.
-
int
nrf24l01p_reset_interrupts
(const nrf24l01p_t * dev, char intrs)¶ Reset interrupts on the nrf24l01+ transceiver.
Parameters
dev: Transceiver device to use. intrs: Interrupt mask to reset Return values
- 1 on success.
- -1 on error.
-
int
nrf24l01p_mask_interrupt
(const nrf24l01p_t * dev, char intr)¶ Mask one interrupt on the nrf24l01+ transceiver.
Note
There are three interrupts on the nrf24l01+ which can be masked: “MASK_RX_DR”, “MASK_TX_DS” and “MASK_MAX_RT”. Theay are defined in “include/nrf24l01p_settings.h”.
Parameters
dev: Transceiver device to use. intr: Transceiver device to use. Return values
- 0 on success.
- -1 on error.
-
int
nrf24l01p_unmask_interrupt
(const nrf24l01p_t * dev, char intr)¶ Unmask one interrupt on the nrf24l01+ transceiver.
Note
There are three interrupts on the nrf24l01+ which can be unmasked: “MASK_RX_DR”, “MASK_TX_DS” and “MASK_MAX_RT”. Theay are defined in “include/nrf24l01p_settings.h”.
Parameters
dev: Transceiver device to use. intr: Transceiver device to use. Return values
- 0 on success.
- -1 on error.
-
int
nrf24l01p_enable_pipe
(const nrf24l01p_t * dev,nrf24l01p.h::nrf24l01p_rx_pipe_t
pipe)¶ Enable RX datapipe on the nrf24l01+ transceiver.
Parameters
dev: Transceiver device to use. pipe: RX pipe to enable. Return values
- 0 on success.
- -1 on error.
-
int
nrf24l01p_disable_pipe
(const nrf24l01p_t * dev,nrf24l01p.h::nrf24l01p_rx_pipe_t
pipe)¶ Disable RX datapipe on the nrf24l01+ transceiver.
Parameters
dev: Transceiver device to use. pipe: RX pipe to disable. Return values
- 0 on success.
- -1 on error.
-
int
nrf24l01p_disable_crc
(const nrf24l01p_t * dev)¶ Disable CRC error detection on the nrf24l01+ transceiver.
Parameters
dev: Transceiver device to use. Return values
- 0.
-
int
nrf24l01p_enable_crc
(const nrf24l01p_t * dev,nrf24l01p.h::nrf24l01p_crc_t
crc)¶ Enable CRC error detection on the nrf24l01+ transceiver.
Parameters
dev: Transceiver device to use. crc: Length of cyclic redundancy check (type nrf24l01p_crc_t). Return values
- 0 on success.
- -1 on error.
-
int
nrf24l01p_setup_auto_ack
(const nrf24l01p_t * dev,nrf24l01p.h::nrf24l01p_rx_pipe_t
pipe,nrf24l01p.h::nrf24l01p_retransmit_delay_t
delay_retrans, char count_retrans)¶ Setup and enable automatic ACK and retransmission on the nrf24l01+ transceiver.
Note
This function enables automatic acknowledgement for a given RX data pipe and also sets up the mautomatic retransmission behavior.
Parameters
dev: Transceiver device to use. pipe: RX pipe to setup auto ack. delay_retrans: Automatic retransmission delay (type nrf24l01p_retransmit_delay_t) count_retrans: Auto retransmit count. Return values
- 0 on success.
- -1 on error.
-
int
nrf24l01p_disable_all_auto_ack
(const nrf24l01p_t * dev)¶ Disable automatic ACK on the nrf24l01+ transceiver.
Parameters
dev: Transceiver device to use. Return values
- 0 on success.
- -1 on error.
-
int
nrf24l01p_flush_tx_fifo
(const nrf24l01p_t * dev)¶ Flush TX FIFO on the nrf24l01+ transceiver.
Parameters
dev: Transceiver device to use. Return values
- 0 on success.
- -1 on error.
-
int
nrf24l01p_flush_rx_fifo
(const nrf24l01p_t * dev)¶ Flush RX FIFO on the nrf24l01+ transceiver.
Parameters
dev: Transceiver device to use. Return values
- 0 on success.
- -1 on error.
-
void
nrf24l01p_rx_cb
(void * arg)¶ Callback that is called when interrupt occurs on interrupt pin from the nrf24l01+ transceiver.
Parameters
arg: Used to pass transceiver device “dev”.
-
struct
nrf24l01p_t
¶ Structure that represents the hardware setup of the nrf24l01+ transceiver.
-
spi.h::spi_t
spi
¶ SPI device to initialize.
-
gpio.h::gpio_t
ce
¶ GPIO pin to initialize as chip enable.
-
gpio.h::gpio_t
cs
¶ GPIO pin to initialize as chip select.
-
gpio.h::gpio_t
irq
¶ GPIO pin to initialize as interrupt request.
-
unsigned
listener
¶ Place to store an ID in.
-