Optimized high speed nRF24L01+ driver class documentation v1.4.8
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
35typedef enum
36{
70
80typedef enum
81{
89
101typedef enum
102{
110
115class RF24
116{
117private:
118#ifdef SOFTSPI
119 SoftSPI<SOFT_SPI_MISO_PIN, SOFT_SPI_MOSI_PIN, SOFT_SPI_SCK_PIN, SPI_MODE> spi;
120#elif defined(SPI_UART)
121 SPIUARTClass uspi;
122#endif
123
124#if defined(RF24_LINUX) || defined(XMEGA_D3) /* XMEGA can use SPI class */
125 SPI spi;
126#endif // defined (RF24_LINUX) || defined (XMEGA_D3)
127#if defined(RF24_SPI_PTR)
128 _SPI* _spi;
129#endif // defined (RF24_SPI_PTR)
130#if defined(MRAA)
131 GPIO gpio;
132#endif
133
134 rf24_gpio_pin_t ce_pin; /* "Chip Enable" pin, activates the RX or TX role */
135 rf24_gpio_pin_t csn_pin; /* SPI Chip select */
136 uint32_t spi_speed; /* SPI Bus Speed */
137#if defined(RF24_LINUX) || defined(XMEGA_D3) || defined(RF24_RP2)
138 uint8_t spi_rxbuff[32 + 1]; //SPI receive buffer (payload max 32 bytes)
139 uint8_t spi_txbuff[32 + 1]; //SPI transmit buffer (payload max 32 bytes + 1 byte for the command)
140#endif
141 uint8_t status; /* The status byte returned from every SPI transaction */
142 uint8_t payload_size; /* Fixed size of payloads */
143 uint8_t pipe0_reading_address[5]; /* Last address set on pipe 0 for reading. */
144 uint8_t config_reg; /* For storing the value of the NRF_CONFIG register */
145 bool _is_p_variant; /* For storing the result of testing the toggleFeatures() affect */
146 bool _is_p0_rx; /* For keeping track of pipe 0's usage in user-triggered RX mode. */
147
148protected:
155 inline void beginTransaction();
156
157 inline void endTransaction();
158
162 uint8_t addr_width;
165
175 void read_register(uint8_t reg, uint8_t* buf, uint8_t len);
176
183 uint8_t read_register(uint8_t reg);
184
185public:
212 RF24(rf24_gpio_pin_t _cepin, rf24_gpio_pin_t _cspin, uint32_t _spi_speed = RF24_SPI_SPEED);
213
224 RF24(uint32_t _spi_speed = RF24_SPI_SPEED);
225
226#if defined(RF24_LINUX)
227 virtual ~RF24() {};
228#endif
229
244 bool begin(void);
245
246#if defined(RF24_SPI_PTR) || defined(DOXYGEN_FORCED)
262 bool begin(_SPI* spiBus);
263
285 bool begin(_SPI* spiBus, rf24_gpio_pin_t _cepin, rf24_gpio_pin_t _cspin);
286#endif // defined (RF24_SPI_PTR) || defined (DOXYGEN_FORCED)
287
297 bool begin(rf24_gpio_pin_t _cepin, rf24_gpio_pin_t _cspin);
298
302 bool isChipConnected();
303
324 void startListening(void);
325
339 void stopListening(void);
340
372 bool available(void);
373
430 void read(void* buf, uint8_t len);
431
472 bool write(const void* buf, uint8_t len);
473
516 void openWritingPipe(const uint8_t* address);
517
562 void openReadingPipe(uint8_t number, const uint8_t* address);
563
586 void printDetails(void);
587
611 void printPrettyDetails(void);
612
656 uint16_t sprintfPrettyDetails(char* debugging_information);
657
711 void encodeRadioDetails(uint8_t* encoded_status);
712
771 bool available(uint8_t* pipe_num);
772
786 bool rxFifoFull();
787
795 uint8_t isFifo(bool about_tx);
796
804 bool isFifo(bool about_tx, bool check_empty);
805
823 void powerDown(void);
824
831 void powerUp(void);
832
866 bool write(const void* buf, uint8_t len, const bool multicast);
867
916 bool writeFast(const void* buf, uint8_t len);
917
953 bool writeFast(const void* buf, uint8_t len, const bool multicast);
954
996 bool writeBlocking(const void* buf, uint8_t len, uint32_t timeout);
997
1029 bool txStandBy();
1030
1056 bool txStandBy(uint32_t timeout, bool startTx = 0);
1057
1102 bool writeAckPayload(uint8_t pipe, const void* buf, uint8_t len);
1103
1134 void whatHappened(bool& tx_ok, bool& tx_fail, bool& rx_ready);
1135
1174 void startFastWrite(const void* buf, uint8_t len, const bool multicast, bool startTx = 1);
1175
1209 bool startWrite(const void* buf, uint8_t len, const bool multicast);
1210
1241 void reUseTX();
1242
1250 uint8_t flush_tx(void);
1251
1257 uint8_t flush_rx(void);
1258
1267 bool testCarrier(void);
1268
1287 bool testRPD(void);
1288
1296 bool isValid();
1297
1304 void closeReadingPipe(uint8_t pipe);
1305
1306#if defined(FAILURE_HANDLING)
1338#endif // defined (FAILURE_HANDLING)
1339
1356 void setAddressWidth(uint8_t a_width);
1357
1373 void setRetries(uint8_t delay, uint8_t count);
1374
1391 void setChannel(uint8_t channel);
1392
1405 uint8_t getChannel(void);
1406
1424 void setPayloadSize(uint8_t size);
1425
1440 uint8_t getPayloadSize(void);
1441
1462 uint8_t getDynamicPayloadSize(void);
1463
1483 void enableAckPayload(void);
1484
1490 void disableAckPayload(void);
1491
1499 void enableDynamicPayloads(void);
1500
1510 void disableDynamicPayloads(void);
1511
1530 void enableDynamicAck();
1531
1538 bool isPVariant(void);
1539
1570 void setAutoAck(bool enable);
1571
1610 void setAutoAck(uint8_t pipe, bool enable);
1611
1629 void setPALevel(uint8_t level, bool lnaEnable = 1);
1630
1637 uint8_t getPALevel(void);
1638
1646 uint8_t getARC(void);
1647
1664 bool setDataRate(rf24_datarate_e speed);
1665
1673
1685 void setCRCLength(rf24_crclength_e length);
1686
1695
1701 void disableCRC(void);
1702
1733 void maskIRQ(bool tx_ok, bool tx_fail, bool rx_ready);
1734
1746 uint32_t txDelay;
1747
1756 uint32_t csDelay;
1757
1773 void startConstCarrier(rf24_pa_dbm_e level, uint8_t channel);
1774
1789 void stopConstCarrier(void);
1790
1798 void toggleAllPipes(bool isEnabled);
1799
1809 void setRadiation(uint8_t level, rf24_datarate_e speed, bool lnaEnable = true);
1810
1842 void openReadingPipe(uint8_t number, uint64_t address);
1843
1857 void openWritingPipe(uint64_t address);
1858
1868 bool isAckPayloadAvailable(void);
1869
1870private:
1885 void _init_obj();
1886
1892 bool _init_radio();
1893
1897 bool _init_pins();
1898
1909 void csn(bool mode);
1910
1917 void ce(bool level);
1918
1928 void write_register(uint8_t reg, const uint8_t* buf, uint8_t len);
1929
1940 void write_register(uint8_t reg, uint8_t value, bool is_cmd_only = false);
1941
1953 void write_payload(const void* buf, uint8_t len, const uint8_t writeType);
1954
1965 void read_payload(void* buf, uint8_t len);
1966
1972 uint8_t get_status(void);
1973
1974#if !defined(MINIMAL)
1975
1983 void print_status(uint8_t status);
1984
1992 void print_observe_tx(uint8_t value);
1993
2005 void print_byte_register(const char* name, uint8_t reg, uint8_t qty = 1);
2006
2018 void print_address_register(const char* name, uint8_t reg, uint8_t qty = 1);
2019
2032 uint8_t sprintf_address_register(char* out_buffer, uint8_t reg, uint8_t qty = 1);
2033#endif
2034
2041 void toggle_features(void);
2042
2043#if defined(FAILURE_HANDLING) || defined(RF24_LINUX)
2044
2045 void errNotify(void);
2046
2047#endif
2048
2055 inline uint8_t _data_rate_reg_value(rf24_datarate_e speed);
2056
2064 inline uint8_t _pa_level_reg_value(uint8_t level, bool lnaEnable);
2065
2067};
2068
2418#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:116
void disableAckPayload(void)
Definition: RF24.cpp:1750
uint16_t sprintfPrettyDetails(char *debugging_information)
Definition: RF24.cpp:846
bool begin(void)
Definition: RF24.cpp:983
uint8_t getPayloadSize(void)
Definition: RF24.cpp:638
bool available(void)
Definition: RF24.cpp:1522
bool txStandBy()
Definition: RF24.cpp:1432
void endTransaction()
Definition: RF24.cpp:135
bool failureDetected
Definition: RF24.h:1337
void startListening(void)
Definition: RF24.cpp:1159
bool isAckPayloadAvailable(void)
Definition: RF24.cpp:1790
void printPrettyDetails(void)
Definition: RF24.cpp:749
void setPayloadSize(uint8_t size)
Definition: RF24.cpp:625
bool isValid()
Definition: RF24.cpp:1152
bool writeAckPayload(uint8_t pipe, const void *buf, uint8_t len)
Definition: RF24.cpp:1777
uint8_t isFifo(bool about_tx)
Definition: RF24.cpp:1418
void stopConstCarrier(void)
Definition: RF24.cpp:2008
bool dynamic_payloads_enabled
Definition: RF24.h:164
void enableDynamicPayloads(void)
Definition: RF24.cpp:1691
bool writeFast(const void *buf, uint8_t len)
Definition: RF24.cpp:1371
void disableDynamicPayloads(void)
Definition: RF24.cpp:1711
void setRetries(uint8_t delay, uint8_t count)
Definition: RF24.cpp:1967
bool write(const void *buf, uint8_t len)
Definition: RF24.cpp:1287
uint8_t getARC(void)
Definition: RF24.cpp:1869
uint8_t flush_rx(void)
Definition: RF24.cpp:487
void beginTransaction()
Definition: RF24.cpp:117
void powerUp(void)
Definition: RF24.cpp:1218
void setChannel(uint8_t channel)
Definition: RF24.cpp:612
void disableCRC(void)
Definition: RF24.cpp:1960
void enableDynamicAck()
Definition: RF24.cpp:1764
bool isPVariant(void)
Definition: RF24.cpp:1797
uint8_t getDynamicPayloadSize(void)
Definition: RF24.cpp:1508
bool ack_payloads_enabled
Definition: RF24.h:160
uint8_t getChannel(void)
Definition: RF24.cpp:618
void stopListening(void)
Definition: RF24.cpp:1183
rf24_datarate_e getDataRate(void)
Definition: RF24.cpp:1896
bool testRPD(void)
Definition: RF24.cpp:1846
void setCRCLength(rf24_crclength_e length)
Definition: RF24.cpp:1920
void read(void *buf, uint8_t len)
Definition: RF24.cpp:1545
uint32_t txDelay
Definition: RF24.h:1746
void closeReadingPipe(uint8_t pipe)
Definition: RF24.cpp:1665
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:1638
void powerDown(void)
Definition: RF24.cpp:1208
void toggleAllPipes(bool isEnabled)
Open or close all data pipes.
Definition: RF24.cpp:2023
uint8_t addr_width
Definition: RF24.h:162
void setPALevel(uint8_t level, bool lnaEnable=1)
Definition: RF24.cpp:1853
rf24_crclength_e getCRCLength(void)
Definition: RF24.cpp:1940
void encodeRadioDetails(uint8_t *encoded_status)
Definition: RF24.cpp:929
void maskIRQ(bool tx_ok, bool tx_fail, bool rx_ready)
Definition: RF24.cpp:1497
void enableAckPayload(void)
Definition: RF24.cpp:1732
bool isChipConnected()
Definition: RF24.cpp:1145
void startConstCarrier(rf24_pa_dbm_e level, uint8_t channel)
Definition: RF24.cpp:1973
void startFastWrite(const void *buf, uint8_t len, const bool multicast, bool startTx=1)
Definition: RF24.cpp:1383
uint32_t csDelay
Definition: RF24.h:1756
bool testCarrier(void)
Definition: RF24.cpp:1839
bool rxFifoFull()
Definition: RF24.cpp:1411
void setAddressWidth(uint8_t a_width)
Definition: RF24.cpp:1623
void setRadiation(uint8_t level, rf24_datarate_e speed, bool lnaEnable=true)
configure the RF_SETUP register in 1 transaction
Definition: RF24.cpp:2073
uint8_t flush_tx(void)
Definition: RF24.cpp:495
bool startWrite(const void *buf, uint8_t len, const bool multicast)
Definition: RF24.cpp:1396
void printDetails(void)
Definition: RF24.cpp:705
bool writeBlocking(const void *buf, uint8_t len, uint32_t timeout)
Definition: RF24.cpp:1295
void reUseTX()
Definition: RF24.cpp:1330
bool setDataRate(rf24_datarate_e speed)
Definition: RF24.cpp:1876
void setAutoAck(bool enable)
Definition: RF24.cpp:1804
void openWritingPipe(const uint8_t *address)
Definition: RF24.cpp:1582
uint8_t getPALevel(void)
Definition: RF24.cpp:1862
void whatHappened(bool &tx_ok, bool &tx_fail, bool &rx_ready)
Definition: RF24.cpp:1557
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
GPIO()
uint16_t rf24_gpio_pin_t
#define delay(milisec)
#define _SPI