Optimized high speed nRF24L01+ driver class documentation v1.4.11
TMRh20 2020 - Optimized fork of the nRF24L01+ driver
Loading...
Searching...
No Matches
RF24.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2011 J. Coliz <maniacbug@ymail.com>
3
4 This program is free software; you can redistribute it and/or
5 modify it under the terms of the GNU General Public License
6 version 2 as published by the Free Software Foundation.
7 */
8
15#ifndef RF24_H_
16#define RF24_H_
17
18#include "RF24_config.h"
19
20#if defined(RF24_LINUX) || defined(LITTLEWIRE)
21 #include "utility/includes.h"
22#elif defined SOFTSPI
23 #include <DigitalIO.h>
24#endif
25
70
89
110
130
135class RF24
136{
137private:
138#ifdef SOFTSPI
139 SoftSPI<SOFT_SPI_MISO_PIN, SOFT_SPI_MOSI_PIN, SOFT_SPI_SCK_PIN, SPI_MODE> spi;
140#elif defined(SPI_UART)
141 SPIUARTClass uspi;
142#endif
143
144#if defined(RF24_LINUX) || defined(XMEGA_D3) /* XMEGA can use SPI class */
145 SPI spi;
146#endif // defined (RF24_LINUX) || defined (XMEGA_D3)
147#if defined(RF24_SPI_PTR)
148 _SPI* _spi;
149#endif // defined (RF24_SPI_PTR)
150
151 rf24_gpio_pin_t ce_pin; /* "Chip Enable" pin, activates the RX or TX role */
152 rf24_gpio_pin_t csn_pin; /* SPI Chip select */
153 uint32_t spi_speed; /* SPI Bus Speed */
154#if defined(RF24_LINUX) || defined(XMEGA_D3) || defined(RF24_RP2)
155 uint8_t spi_rxbuff[32 + 1]; //SPI receive buffer (payload max 32 bytes)
156 uint8_t spi_txbuff[32 + 1]; //SPI transmit buffer (payload max 32 bytes + 1 byte for the command)
157#endif
158 uint8_t status; /* The status byte returned from every SPI transaction */
159 uint8_t payload_size; /* Fixed size of payloads */
160 uint8_t pipe0_reading_address[5]; /* Last address set on pipe 0 for reading. */
161 uint8_t config_reg; /* For storing the value of the NRF_CONFIG register */
162 bool _is_p_variant; /* For storing the result of testing the toggleFeatures() affect */
163 bool _is_p0_rx; /* For keeping track of pipe 0's usage in user-triggered RX mode. */
164
165protected:
172 inline void beginTransaction();
173
174 inline void endTransaction();
175
179 uint8_t addr_width;
182
192 void read_register(uint8_t reg, uint8_t* buf, uint8_t len);
193
200 uint8_t read_register(uint8_t reg);
201
202public:
230 RF24(rf24_gpio_pin_t _cepin, rf24_gpio_pin_t _cspin, uint32_t _spi_speed = RF24_SPI_SPEED);
231
242 RF24(uint32_t _spi_speed = RF24_SPI_SPEED);
243
244#if defined(RF24_LINUX)
245 virtual ~RF24() {};
246#endif
247
262 bool begin(void);
263
264#if defined(RF24_SPI_PTR) || defined(DOXYGEN_FORCED)
280 bool begin(_SPI* spiBus);
281
304 bool begin(_SPI* spiBus, rf24_gpio_pin_t _cepin, rf24_gpio_pin_t _cspin);
305#endif // defined (RF24_SPI_PTR) || defined (DOXYGEN_FORCED)
306
316 bool begin(rf24_gpio_pin_t _cepin, rf24_gpio_pin_t _cspin);
317
321 bool isChipConnected();
322
343 void startListening(void);
344
358 void stopListening(void);
359
391 bool available(void);
392
449 void read(void* buf, uint8_t len);
450
491 bool write(const void* buf, uint8_t len);
492
535 void openWritingPipe(const uint8_t* address);
536
581 void openReadingPipe(uint8_t number, const uint8_t* address);
582
605 void printDetails(void);
606
630 void printPrettyDetails(void);
631
675 uint16_t sprintfPrettyDetails(char* debugging_information);
676
730 void encodeRadioDetails(uint8_t* encoded_status);
731
790 bool available(uint8_t* pipe_num);
791
805 bool rxFifoFull();
806
815 rf24_fifo_state_e isFifo(bool about_tx);
816
825 bool isFifo(bool about_tx, bool check_empty);
826
844 void powerDown(void);
845
852 void powerUp(void);
853
887 bool write(const void* buf, uint8_t len, const bool multicast);
888
937 bool writeFast(const void* buf, uint8_t len);
938
974 bool writeFast(const void* buf, uint8_t len, const bool multicast);
975
1017 bool writeBlocking(const void* buf, uint8_t len, uint32_t timeout);
1018
1050 bool txStandBy();
1051
1077 bool txStandBy(uint32_t timeout, bool startTx = 0);
1078
1123 bool writeAckPayload(uint8_t pipe, const void* buf, uint8_t len);
1124
1155 void whatHappened(bool& tx_ok, bool& tx_fail, bool& rx_ready);
1156
1195 void startFastWrite(const void* buf, uint8_t len, const bool multicast, bool startTx = 1);
1196
1230 bool startWrite(const void* buf, uint8_t len, const bool multicast);
1231
1262 void reUseTX();
1263
1271 uint8_t flush_tx(void);
1272
1278 uint8_t flush_rx(void);
1279
1288 bool testCarrier(void);
1289
1308 bool testRPD(void);
1309
1317 bool isValid();
1318
1325 void closeReadingPipe(uint8_t pipe);
1326
1327#if defined(FAILURE_HANDLING)
1359#endif // defined (FAILURE_HANDLING)
1360
1377 void setAddressWidth(uint8_t a_width);
1378
1394 void setRetries(uint8_t delay, uint8_t count);
1395
1412 void setChannel(uint8_t channel);
1413
1426 uint8_t getChannel(void);
1427
1445 void setPayloadSize(uint8_t size);
1446
1461 uint8_t getPayloadSize(void);
1462
1483 uint8_t getDynamicPayloadSize(void);
1484
1504 void enableAckPayload(void);
1505
1511 void disableAckPayload(void);
1512
1520 void enableDynamicPayloads(void);
1521
1531 void disableDynamicPayloads(void);
1532
1551 void enableDynamicAck();
1552
1559 bool isPVariant(void);
1560
1591 void setAutoAck(bool enable);
1592
1631 void setAutoAck(uint8_t pipe, bool enable);
1632
1650 void setPALevel(uint8_t level, bool lnaEnable = 1);
1651
1658 uint8_t getPALevel(void);
1659
1667 uint8_t getARC(void);
1668
1685 bool setDataRate(rf24_datarate_e speed);
1686
1694
1706 void setCRCLength(rf24_crclength_e length);
1707
1716
1722 void disableCRC(void);
1723
1754 void maskIRQ(bool tx_ok, bool tx_fail, bool rx_ready);
1755
1767 uint32_t txDelay;
1768
1777 uint32_t csDelay;
1778
1794 void startConstCarrier(rf24_pa_dbm_e level, uint8_t channel);
1795
1810 void stopConstCarrier(void);
1811
1819 void toggleAllPipes(bool isEnabled);
1820
1830 void setRadiation(uint8_t level, rf24_datarate_e speed, bool lnaEnable = true);
1831
1863 void openReadingPipe(uint8_t number, uint64_t address);
1864
1878 void openWritingPipe(uint64_t address);
1879
1889 bool isAckPayloadAvailable(void);
1890
1891private:
1906 void _init_obj();
1907
1913 bool _init_radio();
1914
1918 bool _init_pins();
1919
1930 void csn(bool mode);
1931
1938 void ce(bool level);
1939
1949 void write_register(uint8_t reg, const uint8_t* buf, uint8_t len);
1950
1959 void write_register(uint8_t reg, uint8_t value);
1960
1972 void write_payload(const void* buf, uint8_t len, const uint8_t writeType);
1973
1984 void read_payload(void* buf, uint8_t len);
1985
1991 uint8_t get_status(void);
1992
1993#if !defined(MINIMAL)
1994
2002 void print_status(uint8_t status);
2003
2011 void print_observe_tx(uint8_t value);
2012
2024 void print_byte_register(const char* name, uint8_t reg, uint8_t qty = 1);
2025
2037 void print_address_register(const char* name, uint8_t reg, uint8_t qty = 1);
2038
2051 uint8_t sprintf_address_register(char* out_buffer, uint8_t reg, uint8_t qty = 1);
2052#endif
2053
2060 void toggle_features(void);
2061
2062#if defined(FAILURE_HANDLING) || defined(RF24_LINUX)
2063
2064 void errNotify(void);
2065
2066#endif
2067
2074 inline uint8_t _data_rate_reg_value(rf24_datarate_e speed);
2075
2083 inline uint8_t _pa_level_reg_value(uint8_t level, bool lnaEnable);
2084
2086};
2087
2437#endif // RF24_H_
#define RF24_SPI_SPEED
The default SPI speed (in Hz)
Definition RF24_config.h:44
Driver class for nRF24L01(+) 2.4GHz Wireless Transceiver.
Definition RF24.h:136
void disableAckPayload(void)
Definition RF24.cpp:1740
RF24(rf24_gpio_pin_t _cepin, rf24_gpio_pin_t _cspin, uint32_t _spi_speed=RF24_SPI_SPEED)
Definition RF24.cpp:564
uint16_t sprintfPrettyDetails(char *debugging_information)
Definition RF24.cpp:839
bool begin(void)
Definition RF24.cpp:976
uint8_t getPayloadSize(void)
Definition RF24.cpp:644
bool available(void)
Definition RF24.cpp:1517
bool txStandBy()
Definition RF24.cpp:1427
void endTransaction()
Definition RF24.cpp:135
bool failureDetected
Definition RF24.h:1358
void startListening(void)
Definition RF24.cpp:1147
bool isAckPayloadAvailable(void)
Definition RF24.cpp:1780
void printPrettyDetails(void)
Definition RF24.cpp:742
void setPayloadSize(uint8_t size)
Definition RF24.cpp:631
bool isValid()
Definition RF24.cpp:1140
bool writeAckPayload(uint8_t pipe, const void *buf, uint8_t len)
Definition RF24.cpp:1767
void stopConstCarrier(void)
Definition RF24.cpp:1997
rf24_fifo_state_e isFifo(bool about_tx)
Definition RF24.cpp:1412
bool dynamic_payloads_enabled
Definition RF24.h:181
void enableDynamicPayloads(void)
Definition RF24.cpp:1681
bool writeFast(const void *buf, uint8_t len)
Definition RF24.cpp:1360
void disableDynamicPayloads(void)
Definition RF24.cpp:1701
void setRetries(uint8_t delay, uint8_t count)
Definition RF24.cpp:1957
bool write(const void *buf, uint8_t len)
Definition RF24.cpp:1275
uint8_t getARC(void)
Definition RF24.cpp:1859
uint8_t flush_rx(void)
Definition RF24.cpp:469
void beginTransaction()
Definition RF24.cpp:117
void powerUp(void)
Definition RF24.cpp:1206
void setChannel(uint8_t channel)
Definition RF24.cpp:618
void disableCRC(void)
Definition RF24.cpp:1950
void enableDynamicAck()
Definition RF24.cpp:1754
bool isPVariant(void)
Definition RF24.cpp:1787
uint8_t getDynamicPayloadSize(void)
Definition RF24.cpp:1503
bool ack_payloads_enabled
Definition RF24.h:177
uint8_t getChannel(void)
Definition RF24.cpp:624
void stopListening(void)
Definition RF24.cpp:1171
rf24_datarate_e getDataRate(void)
Definition RF24.cpp:1886
bool testRPD(void)
Definition RF24.cpp:1836
void setCRCLength(rf24_crclength_e length)
Definition RF24.cpp:1910
void read(void *buf, uint8_t len)
Definition RF24.cpp:1535
uint32_t txDelay
Definition RF24.h:1767
void closeReadingPipe(uint8_t pipe)
Definition RF24.cpp:1655
void read_register(uint8_t reg, uint8_t *buf, uint8_t len)
Definition RF24.cpp:149
void openReadingPipe(uint8_t number, const uint8_t *address)
Definition RF24.cpp:1628
void powerDown(void)
Definition RF24.cpp:1196
void toggleAllPipes(bool isEnabled)
Open or close all data pipes.
Definition RF24.cpp:2012
uint8_t addr_width
Definition RF24.h:179
void setPALevel(uint8_t level, bool lnaEnable=1)
Definition RF24.cpp:1843
rf24_crclength_e getCRCLength(void)
Definition RF24.cpp:1930
void encodeRadioDetails(uint8_t *encoded_status)
Definition RF24.cpp:922
void maskIRQ(bool tx_ok, bool tx_fail, bool rx_ready)
Definition RF24.cpp:1492
void enableAckPayload(void)
Definition RF24.cpp:1722
bool isChipConnected()
Definition RF24.cpp:1133
void startConstCarrier(rf24_pa_dbm_e level, uint8_t channel)
Definition RF24.cpp:1963
void startFastWrite(const void *buf, uint8_t len, const bool multicast, bool startTx=1)
Definition RF24.cpp:1372
uint32_t csDelay
Definition RF24.h:1777
bool testCarrier(void)
Definition RF24.cpp:1829
bool rxFifoFull()
Definition RF24.cpp:1405
void setAddressWidth(uint8_t a_width)
Definition RF24.cpp:1613
void setRadiation(uint8_t level, rf24_datarate_e speed, bool lnaEnable=true)
configure the RF_SETUP register in 1 transaction
Definition RF24.cpp:2062
uint8_t flush_tx(void)
Definition RF24.cpp:478
bool startWrite(const void *buf, uint8_t len, const bool multicast)
Definition RF24.cpp:1385
void printDetails(void)
Definition RF24.cpp:698
bool writeBlocking(const void *buf, uint8_t len, uint32_t timeout)
Definition RF24.cpp:1283
void reUseTX()
Definition RF24.cpp:1318
bool setDataRate(rf24_datarate_e speed)
Definition RF24.cpp:1866
void setAutoAck(bool enable)
Definition RF24.cpp:1794
void openWritingPipe(const uint8_t *address)
Definition RF24.cpp:1572
uint8_t getPALevel(void)
Definition RF24.cpp:1852
void whatHappened(bool &tx_ok, bool &tx_fail, bool &rx_ready)
Definition RF24.cpp:1547
rf24_crclength_e
Definition RF24.h:102
@ RF24_CRC_16
Definition RF24.h:108
@ RF24_CRC_DISABLED
Definition RF24.h:104
@ RF24_CRC_8
Definition RF24.h:106
rf24_datarate_e
Definition RF24.h:81
@ RF24_2MBPS
Definition RF24.h:85
@ RF24_250KBPS
Definition RF24.h:87
@ RF24_1MBPS
Definition RF24.h:83
rf24_pa_dbm_e
Definition RF24.h:36
@ RF24_PA_ERROR
Definition RF24.h:68
@ RF24_PA_MIN
Definition RF24.h:43
@ RF24_PA_LOW
Definition RF24.h:50
@ RF24_PA_MAX
Definition RF24.h:64
@ RF24_PA_HIGH
Definition RF24.h:57
#define delay(millisec)
uint16_t rf24_gpio_pin_t
#define _SPI
rf24_fifo_state_e
Definition RF24.h:120
@ RF24_FIFO_INVALID
Represents corruption of data over SPI (when observed).
Definition RF24.h:128
@ RF24_FIFO_FULL
The FIFO is full.
Definition RF24.h:126
@ RF24_FIFO_OCCUPIED
The FIFO is not full nor empty, but it is occupied with 1 or 2 payloads.
Definition RF24.h:122
@ RF24_FIFO_EMPTY
The FIFO is empty.
Definition RF24.h:124