36#define NRF24L01P_NG_REG_CONFIG (0x00)
40#define NRF24L01P_NG_FLG_MASK_RX_DR (0x40)
44#define NRF24L01P_NG_VAL_MASK_RX_DR(reg) (((reg) & \
45 NRF24L01P_NG_FLG_MASK_RX_DR) >> 6)
49#define NRF24L01P_NG_FLG_MASK_TX_DS (0x20)
53#define NRF24L01P_NG_VAL_MASK_TX_DS(reg) (((reg) & \
54 NRF24L01P_NG_FLG_MASK_TX_DS) >> 5)
58#define NRF24L01P_NG_FLG_MASK_MAX_RT (0x10)
62#define NRF24L01P_NG_VAL_MASK_MAX_RT (((reg) & \
63 NRF24L01P_NG_FLG_MASK_MAX_RT) >> 4)
67#define NRF24L01P_NG_FLG_EN_CRC (0x08)
71#define NRF24L01P_NG_VAL_EN_CRC(reg) (((reg) & \
72 NRF24L01P_NG_FLG_EN_CRC) >> 3)
76#define NRF24L01P_NG_FLG_CRCO_1_BYTE (0x00)
80#define NRF24L01P_NG_FLG_CRCO_2_BYTE (0x04)
84#define NRF24L01P_NG_MSK_CRC (0x0c)
88#define NRF24L01P_NG_FLG_CRCO(val) (((val) << 2) & \
93#define NRF24L01P_NG_VAL_CRCO(reg) (((reg) & \
94 NRF24L01P_NG_FLG_CRCO_2_BYTE) >> 2)
98#define NRF24L01P_NG_FLG_PWR_UP (0x02)
102#define NRF24L01P_NG_VAL_PWR_UP(reg) (((reg) & \
103 NRF24L01P_NG_FLG_PWR_UP) >> 1)
107#define NRF24L01P_NG_FLG_PRIM_RX (0x01)
111#define NRF24L01P_NG_VAL_PRIM_RX(reg) ((reg) & NRF24L01P_NG_FLG_PRIM_RX)
123#define NRF24L01P_NG_REG_EN_AA (0x01)
127#define NRF24L01P_NG_FLG_ENAA_P5 (0x20)
131#define NRF24L01P_NG_VAL_ENAA_P5(reg) (((reg) & \
132 NRF24L01P_NG_FLG_ENAA_P5) >> 5)
136#define NRF24L01P_NG_FLG_ENAA_P4 (0x10)
140#define NRF24L01P_NG_VAL_ENAA_P4(reg) (((reg) & \
141 NRF24L01P_NG_FLG_ENAA_P4) >> 4)
145#define NRF24L01P_NG_FLG_ENAA_P3 (0x08)
149#define NRF24L01P_NG_VAL_ENAA_P3(reg) (((reg) & \
150 NRF24L01P_NG_FLG_ENAA_P3) >> 3)
154#define NRF24L01P_NG_FLG_ENAA_P2 (0x04)
158#define NRF24L01P_NG_VAL_ENAA_P2(reg) (((reg) & \
159 NRF24L01P_NG_FLG_ENAA_P2) >> 2)
163#define NRF24L01P_NG_FLG_ENAA_P1 (0x02)
167#define NRF24L01P_NG_VAL_ENAA_P1(reg) (((reg) & \
168 NRF24L01P_NG_FLG_ENAA_P1) >> 1)
172#define NRF24L01P_NG_FLG_ENAA_P0 (0x01)
176#define NRF24L01P_NG_VAL_ENAA_P0(reg) ((reg) & NRF24L01P_NG_FLG_ENAA_P0)
188#define NRF24L01P_NG_REG_EN_RXADDR (0x02)
192#define NRF24L01P_NG_FLG_ERX_P5 (0x20)
196#define NRF24L01P_NG_VAL_ERX_P5(reg) (((reg) & \
197 NRF24L01P_NG_FLG_ERX_P5) >> 5)
201#define NRF24L01P_NG_FLG_ERX_P4 (0x10)
205#define NRF24L01P_NG_VAL_ERX_P4(reg) (((reg) & \
206 NRF24L01P_NG_FLG_ERX_P4) >> 4)
210#define NRF24L01P_NG_FLG_ERX_P3 (0x08)
214#define NRF24L01P_NG_VAL_ERX_P3(reg) (((reg) & \
215 NRF24L01P_NG_FLG_ERX_P3) >> 3)
219#define NRF24L01P_NG_FLG_ERX_P2 (0x04)
223#define NRF24L01P_NG_VAL_ERX_P2(reg) (((reg) & \
224 NRF24L01P_NG_FLG_ERX_P2) >> 2)
228#define NRF24L01P_NG_FLG_ERX_P1 (0x02)
232#define NRF24L01P_NG_VAL_ERX_P1(reg) (((reg) & \
233 NRF24L01P_NG_FLG_ERX_P1) >> 1)
237#define NRF24L01P_NG_FLG_ERX_P0 (0x01)
241#define NRF24L01P_NG_VAL_ERX_P0(reg) ((reg) & NRF24L01P_NG_FLG_ERX_P0)
253#define NRF24L01P_NG_REG_SETUP_AW (0x03)
257#define NRF24L01P_NG_FLG_AW_3 (0x01)
261#define NRF24L01P_NG_FLG_AW_4 (0x02)
265#define NRF24L01P_NG_FLG_AW_5 (0x03)
269#define NRF24L01P_NG_MSK_AW (0x03)
273#define NRF24L01P_NG_FLG_AW(val) ((val) & NRF24L01P_NG_MSK_AW)
277#define NRF24L01P_NG_VAL_AW(reg) ((reg) & NRF24L01P_NG_MSK_AW)
289#define NRF24L01P_NG_REG_SETUP_RETR (0x04)
293#define NRF24L01P_NG_FLG_ARD_250_US (0x00)
297#define NRF24L01P_NG_FLG_ARD_500_US (0x10)
301#define NRF24L01P_NG_FLG_ARD_750_US (0x20)
305#define NRF24L01P_NG_FLG_ARD_1000_US (0x30)
309#define NRF24L01P_NG_FLG_ARD_1250_US (0x40)
313#define NRF24L01P_NG_FLG_ARD_1500_US (0x50)
317#define NRF24L01P_NG_FLG_ARD_1750_US (0x60)
321#define NRF24L01P_NG_FLG_ARD_2000_US (0x70)
325#define NRF24L01P_NG_FLG_ARD_2250_US (0x80)
329#define NRF24L01P_NG_FLG_ARD_2500_US (0x90)
333#define NRF24L01P_NG_FLG_ARD_2750_US (0xa0)
337#define NRF24L01P_NG_FLG_ARD_3000_US (0xb0)
341#define NRF24L01P_NG_FLG_ARD_3250_US (0xc0)
345#define NRF24L01P_NG_FLG_ARD_3500_US (0xd0)
349#define NRF24L01P_NG_FLG_ARD_3750_US (0xe0)
353#define NRF24L01P_NG_FLG_ARD_4000_US (0xf0)
357#define NRF24L01P_NG_MSK_ARD (0xf0)
361#define NRF24L01P_NG_FLG_ARD(val) (((val) << 4) & \
362 NRF24L01P_NG_MSK_ARD)
366#define NRF24L01P_NG_VAL_ARD(reg) (((reg) & \
367 NRF24L01P_NG_MSK_ARD) >> 4)
371#define NRF24L01P_NG_MSK_ARC (0x0f)
375#define NRF24L01P_NG_FLG_ARC(val) ((val) & NRF24L01P_NG_MSK_ARC)
379#define NRF24L01P_NG_VAL_ARC(reg) ((reg) & NRF24L01P_NG_MSK_ARC)
391#define NRF24L01P_NG_REG_RF_CH (0x05)
395#define NRF24L01P_NG_MSK_RF_CH (0x7f)
399#define NRF24L01P_NG_FLG_RF_CH(val) ((val) & NRF24L01P_NG_MSK_RF_CH)
403#define NRF24L01P_NG_VAL_RF_CH(reg) ((reg) & NRF24L01P_NG_MSK_RF_CH)
415#define NRF24L01P_NG_REG_RF_SETUP (0x06)
419#define NRF24L01P_NG_FLG_CONT_WAVE (0x80)
423#define NRF24L01P_NG_VAL_CONT_WAVE(reg) (((reg) & \
424 NRF24L01P_NG_FLG_CONT_WAVE) >> 7)
428#define NRF24L01P_NG_FLG_RF_DR_LOW (0x20)
432#define NRF24L01P_NG_VAL_RF_DR_LOW(reg) (((reg) & \
433 NRF24L01P_NG_FLG_RF_DR_LOW) >> 5)
437#define NRF24L01P_NG_FLG_PLL_LOCK (0x10)
441#define NRF24L01P_NG_VAL_PLL_LOCK(reg) (((reg) & \
442 NRF24L01P_NG_FLG_PLL_LOCK) >> 4)
446#define NRF24L01P_NG_FLG_RF_DR_HIGH (0x08)
450#define NRF24L01P_NG_VAL_RF_DR_HIGH(reg) (((reg) & \
451 NRF24L01P_NG_FLG_RF_DR_HIGH) >> 3)
455#define NRF24L01P_NG_FLG_RF_DR_250_KBPS (0x08)
459#define NRF24L01P_NG_FLG_RF_DR_1_MBPS (0x00)
463#define NRF24L01P_NG_FLG_RF_DR_2_MBPS (0x20)
467#define NRF24L01P_NG_MSK_RF_DR (0x28)
471#define NRF24L01P_NG_FLG_RF_DR(val) ((((val) & 1) << 5) | \
476#define NRF24L01P_NG_VAL_RF_DR(reg) ((((reg) & \
477 NRF24L01P_NG_FLG_RF_DR_LOW) >> 5) \
480 NRF24L01P_NG_FLG_RF_DR_HIGH) >> 2))
484#define NRF24L01P_NG_FLG_RF_PWR_MINUS_18 (0x00)
488#define NRF24L01P_NG_FLG_RF_PWR_MINUS_12 (0x02)
492#define NRF24L01P_NG_FLG_RF_PWR_MINUS_6 (0x04)
496#define NRF24L01P_NG_FLG_RF_PWR_0 (0x06)
500#define NRF24L01P_NG_MSK_RF_PWR (0x06)
504#define NRF24L01P_NG_FLG_RF_PWR(val) (((val) << 1) & \
505 NRF24L01P_NG_MSK_RF_PWR)
509#define NRF24L01P_NG_VAL_RF_PWR(reg) (((reg) & \
510 NRF24L01P_NG_MSK_RF_PWR) >> 1)
522#define NRF24L01P_NG_REG_STATUS (0x07)
526#define NRF24L01P_NG_FLG_RX_DR (0x40)
530#define NRF24L01P_NG_VAL_RX_DR(reg) (((reg) & \
531 NRF24L01P_NG_FLG_RX_DR) >> 6)
535#define NRF24L01P_NG_FLG_TX_DS (0x20)
539#define NRF24L01P_NG_VAL_TX_DS(reg) (((reg) & \
540 NRF24L01P_NG_FLG_TX_DS) >> 5)
544#define NRF24L01P_NG_FLG_MAX_RT (0x10)
548#define NRF24L01P_NG_VAL_MAX_RT(reg) (((reg) & \
549 NRF24L01P_NG_FLG_MAX_RT) >> 4)
554#define NRF24L01P_NG_FLG_RX_P_NO_NONE (0x0e)
558#define NRF24L01P_NG_MSK_RX_P_NO (0x0e)
562#define NRF24L01P_NG_FLG_RX_P_NO(val) (((val) << 1) & \
563 NRF24L01P_NG_MSK_RX_P_NO)
567#define NRF24L01P_NG_VAL_RX_P_NO(reg) (((reg) & \
568 NRF24L01P_NG_MSK_RX_P_NO) >> 1)
573#define NRF24L01P_NG_FLG_TX_FULL (0x01)
577#define NRF24L01P_NG_VAL_TX_FULL(reg) ((reg) & NRF24L01P_NG_FLG_TX_FULL)
589#define NRF24L01P_NG_REG_OBSERVE_TX (0x08)
593#define NRF24L01P_NG_MSK_PLOS_CNT (0xf0)
597#define NRF24L01P_NG_FLG_PLOS_CNT(val) (((val) << 4) & \
598 NRF24L01P_NG_MSK_PLOS_CNT)
602#define NRF24L01P_NG_VAL_PLOS_CNT(reg) (((reg) & \
603 NRF24L01P_NG_MSK_PLOS_CNT) >> 4)
608#define NRF24L01P_NG_MSK_ARC_CNT (0x0f)
612#define NRF24L01P_NG_FLG_ARC_CNT(val) ((val) & NRF24L01P_NG_MSK_ARC_CNT)
616#define NRF24L01P_NG_VAL_ARC_CNT(reg) ((reg) & NRF24L01P_NG_MSK_ARC_CNT)
628#define NRF24L01P_NG_REG_RPD (0x09)
632#define NRF24L01P_NG_FLG_RPD (0x01)
636#define NRF24L01P_NG_VAL_RPD(reg) ((reg) & NRF24L01P_NG_FLG_RPD)
648#define NRF24L01P_NG_REG_RX_ADDR_P0 (0x0A)
652#define NRF24L01P_NG_REG_RX_ADDR_P1 (0x0B)
656#define NRF24L01P_NG_REG_RX_ADDR_P2 (0x0C)
660#define NRF24L01P_NG_REG_RX_ADDR_P3 (0x0D)
664#define NRF24L01P_NG_REG_RX_ADDR_P4 (0x0E)
668#define NRF24L01P_NG_REG_RX_ADDR_P5 (0x0F)
672#define NRF24L01P_NG_REG_TX_ADDR (0x10)
684#define NRF24L01P_NG_REG_RX_PW_P0 (0x11)
688#define NRF24L01P_NG_REG_RX_PW_P1 (0x12)
692#define NRF24L01P_NG_REG_RX_PW_P2 (0x13)
696#define NRF24L01P_NG_REG_RX_PW_P3 (0x14)
700#define NRF24L01P_NG_REG_RX_PW_P4 (0x15)
704#define NRF24L01P_NG_REG_RX_PW_P5 (0x16)
708#define NRF24L01P_NG_MSK_RX_PW_PX (0x1f)
712#define NRF24L01P_NG_FLG_RX_PW_PX(val) ((val) & NRF24L01P_NG_MSK_RX_PW_PX)
716#define NRF24L01P_NG_VAL_RX_PW_PX(reg) ((reg) & NRF24L01P_NG_MSK_RX_PW_PX)
728#define NRF24L01P_NG_REG_FIFO_STATUS (0x17)
732#define NRF24L01P_NG_FLG_TX_REUSE (0x40)
736#define NRF24L01P_NG_VAL_TX_REUSE(reg) (((reg) & \
737 NRF24L01P_NG_FLG_TX_REUSE) >> 6)
742#define NRF24L01P_NG_FLG_TX_FULL_ (0x20)
746#define NRF24L01P_NG_VAL_TX_FULL_(reg) (((reg) & \
747 NRF24L01P_NG_FLG_TX_FULL_) >> 5)
751#define NRF24L01P_NG_FLG_TX_EMPTY (0x10)
755#define NRF24L01P_NG_VAL_TX_EMPTY(reg) (((reg) & \
756 NRF24L01P_NG_FLG_TX_EMPTY) >> 4)
760#define NRF24L01P_NG_FLG_RX_FULL (0x02)
764#define NRF24L01P_NG_VAL_RX_FULL(reg) (((reg) & \
765 NRF24L01P_NG_FLG_RX_FULL) >> 1)
769#define NRF24L01P_NG_FLG_RX_EMPTY (0x01)
773#define NRF24L01P_NG_VAL_RX_EMPTY(reg) ((reg) & NRF24L01P_NG_FLG_RX_EMPTY)
785#define NRF24L01P_NG_REG_DYNPD (0x1C)
789#define NRF24L01P_NG_FLG_DPL_P5 (0x20)
793#define NRF24L01P_NG_VAL_DPL_P5(reg) (((reg) & \
794 NRF24L01P_NG_FLG_DPL_P5) >> 5)
798#define NRF24L01P_NG_FLG_DPL_P4 (0x10)
802#define NRF24L01P_NG_VAL_DPL_P4(reg) (((reg) & \
803 NRF24L01P_NG_FLG_DPL_P4) >> 4)
807#define NRF24L01P_NG_FLG_DPL_P3 (0x08)
811#define NRF24L01P_NG_VAL_DPL_P3(reg) (((reg) & \
812 NRF24L01P_NG_FLG_DPL_P3) >> 3)
816#define NRF24L01P_NG_FLG_DPL_P2 (0x04)
820#define NRF24L01P_NG_VAL_DPL_P2(reg) (((reg) & \
821 NRF24L01P_NG_FLG_DPL_P2) >> 2)
825#define NRF24L01P_NG_FLG_DPL_P1 (0x02)
829#define NRF24L01P_NG_VAL_DPL_P1(reg) (((reg) & \
830 NRF24L01P_NG_FLG_DPL_P1) >> 1)
834#define NRF24L01P_NG_FLG_DPL_P0 (0x01)
838#define NRF24L01P_NG_VAL_DPL_P0(reg) ((reg) & NRF24L01P_NG_FLG_DPL_P0)
850#define NRF24L01P_NG_REG_FEATURES (0x1D)
854#define NRF24L01P_NG_FLG_EN_DPL (0x04)
858#define NRF24L01P_NG_VAL_EN_DPL(reg) (((reg) & \
859 NRF24L01P_NG_FLG_EN_DPL) >> 2)
863#define NRF24L01P_NG_FLG_EN_ACK_PAY (0x02)
867#define NRF24L01P_NG_VAL_EN_ACK_PAY(reg) (((reg) & \
868 NRF24L01P_NG_FLG_EN_ACK_PAY) >> 1)
872#define NRF24L01P_NG_FLG_EN_DYN_ACK (0x01)
876#define NRF24L01P_NG_VAL_EN_DYN_ACK(reg) ((reg) & \
877 NRF24L01P_NG_FLG_EN_DYN_ACK)
906 uint8_t reg_addr, uint8_t reg_val) {
921 uint8_t reg_addr, uint8_t *reg_val) {
924 *reg_val = reg_val_old | *reg_val;
938 uint8_t reg_addr, uint8_t *reg_val) {
941 *reg_val = reg_val_old &= ~(*reg_val);
957 uint8_t mask, uint8_t *reg_val) {
960 reg_val_old &= ~mask;
961 *reg_val = reg_val_old | *reg_val;
Public interface for NRF24L01+ (NG) devices.
Functions to communicate with the NRF24L01+ (NG) transceiver via SPI.
uint8_t nrf24l01p_ng_write_reg(const nrf24l01p_ng_t *dev, uint8_t reg, const uint8_t *src, size_t len)
Write a register value.
uint8_t nrf24l01p_ng_read_reg(const nrf24l01p_ng_t *dev, uint8_t reg, uint8_t *dest, size_t len)
Read a register value.
static uint8_t nrf24l01p_ng_reg8_set(const nrf24l01p_ng_t *dev, uint8_t reg_addr, uint8_t *reg_val)
Set bits in a certain 8-bit register.
static uint8_t nrf24l01p_ng_reg8_read(const nrf24l01p_ng_t *dev, uint8_t reg_addr)
Read the contents of an 8 bit register.
static uint8_t nrf24l01p_ng_reg8_clear(const nrf24l01p_ng_t *dev, uint8_t reg_addr, uint8_t *reg_val)
Clear bits in a certain 8-bit register.
static uint8_t nrf24l01p_ng_reg8_mod(const nrf24l01p_ng_t *dev, uint8_t reg_addr, uint8_t mask, uint8_t *reg_val)
Modify bits in a certain 8-bit register.
static uint8_t nrf24l01p_ng_reg8_write(const nrf24l01p_ng_t *dev, uint8_t reg_addr, uint8_t reg_val)
Write the contents of an 8 bit register.
struct nrf24l01p_ng nrf24l01p_ng_t
typedef of forward declaration