BayEOS-Arduino  1.8.0_0.0.4
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)
21  #include "utility/includes.h"
22 #elif LITTLEWIRE
23  #include <LittleWireSPI/LittleWireSPI.h>
24 #elif defined SOFTSPI
25  #include <DigitalIO.h>
26 #endif
27 
33 typedef enum { RF24_PA_MIN = 0,RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX, RF24_PA_ERROR } rf24_pa_dbm_e ;
34 
40 typedef enum { RF24_1MBPS = 0, RF24_2MBPS, RF24_250KBPS } rf24_datarate_e;
41 
47 typedef enum { RF24_CRC_DISABLED = 0, RF24_CRC_8, RF24_CRC_16 } rf24_crclength_e;
48 
53 class RF24
54 {
55 private:
56 #ifdef SOFTSPI
57  SoftSPI<SOFT_SPI_MISO_PIN, SOFT_SPI_MOSI_PIN, SOFT_SPI_SCK_PIN, SPI_MODE> spi;
58 #elif defined (SPI_UART)
59  SPIUARTClass uspi;
60 #endif
61 
62 #if defined (RF24_LINUX)
63  SPI spi;
64 #endif
65 #if defined (MRAA)
66  GPIO gpio;
67 #endif
68 
69  uint8_t ce_pin;
70  uint8_t csn_pin;
71  uint16_t spi_speed;
72 #if defined (RF24_LINUX)
73  uint8_t spi_rxbuff[32+1] ; //SPI receive buffer (payload max 32 bytes)
74  uint8_t spi_txbuff[32+1] ; //SPI transmit buffer (payload max 32 bytes + 1 byte for the command)
75 #endif
76  bool p_variant; /* False for RF24L01 and true for RF24L01P */
77  uint8_t payload_size;
78  bool dynamic_payloads_enabled;
79  uint8_t pipe0_reading_address[5];
80  uint8_t addr_width;
81  uint32_t txRxDelay;
84 protected:
91  inline void beginTransaction();
92 
93  inline void endTransaction();
94 
95 public:
96 
113  RF24(uint8_t _cepin, uint8_t _cspin);
114  //#if defined (RF24_LINUX)
115 
127  RF24(uint8_t _cepin, uint8_t _cspin, uint32_t spispeed );
128  //#endif
129 
130  #if defined (RF24_LINUX)
131  virtual ~RF24() {};
132  #endif
133 
140  bool begin(void);
141 
157  void startListening(void);
158 
168  void stopListening(void);
169 
179  bool available(void);
180 
203  void read( void* buf, uint8_t len );
204 
228  bool write( const void* buf, uint8_t len );
229 
255  void openWritingPipe(const uint8_t *address);
256 
285  void openReadingPipe(uint8_t number, const uint8_t *address);
286 
309  void printDetails(void);
310 
327  bool available(uint8_t* pipe_num);
328 
333  bool rxFifoFull();
334 
352  void powerDown(void);
353 
360  void powerUp(void) ;
361 
376  bool write( const void* buf, uint8_t len, const bool multicast );
377 
406  bool writeFast( const void* buf, uint8_t len );
407 
419  bool writeFast( const void* buf, uint8_t len, const bool multicast );
420 
447  bool writeBlocking( const void* buf, uint8_t len, uint32_t timeout );
448 
475  bool txStandBy();
476 
493  bool txStandBy(uint32_t timeout, bool startTx = 0);
494 
513  void writeAckPayload(uint8_t pipe, const void* buf, uint8_t len);
514 
523  bool isAckPayloadAvailable(void);
524 
535  void whatHappened(bool& tx_ok,bool& tx_fail,bool& rx_ready);
536 
561  void startFastWrite( const void* buf, uint8_t len, const bool multicast, bool startTx = 1 );
562 
583  void startWrite( const void* buf, uint8_t len, const bool multicast );
584 
600  void reUseTX();
601 
608  uint8_t flush_tx(void);
609 
618  bool testCarrier(void);
619 
637  bool testRPD(void) ;
638 
646  bool isValid() { return ce_pin != 0xff && csn_pin != 0xff; }
647 
653  void closeReadingPipe( uint8_t pipe ) ;
654 
675  //#if defined (FAILURE_HANDLING)
677  //#endif
678 
697  void setAddressWidth(uint8_t a_width);
698 
706  void setRetries(uint8_t delay, uint8_t count);
707 
713  void setChannel(uint8_t channel);
714 
720  uint8_t getChannel(void);
721 
734  void setPayloadSize(uint8_t size);
735 
743  uint8_t getPayloadSize(void);
744 
765  uint8_t getDynamicPayloadSize(void);
766 
776  void enableAckPayload(void);
777 
785  void enableDynamicPayloads(void);
786 
799  void enableDynamicAck();
800 
807  bool isPVariant(void) ;
808 
817  void setAutoAck(bool enable);
818 
828  void setAutoAck( uint8_t pipe, bool enable ) ;
829 
841  void setPALevel ( uint8_t level );
842 
851  uint8_t getPALevel( void );
852 
861  bool setDataRate(rf24_datarate_e speed);
862 
870  rf24_datarate_e getDataRate( void ) ;
871 
877  void setCRCLength(rf24_crclength_e length);
878 
885 
891  void disableCRC( void ) ;
892 
909  void maskIRQ(bool tx_ok,bool tx_fail,bool rx_ready);
910 
938  void openReadingPipe(uint8_t number, uint64_t address);
939 
952  void openWritingPipe(uint64_t address);
953 
954 private:
955 
975  void csn(bool mode);
976 
983  void ce(bool level);
984 
993  uint8_t read_register(uint8_t reg, uint8_t* buf, uint8_t len);
994 
1001  uint8_t read_register(uint8_t reg);
1002 
1011  uint8_t write_register(uint8_t reg, const uint8_t* buf, uint8_t len);
1012 
1020  uint8_t write_register(uint8_t reg, uint8_t value);
1021 
1031  uint8_t write_payload(const void* buf, uint8_t len, const uint8_t writeType);
1032 
1042  uint8_t read_payload(void* buf, uint8_t len);
1043 
1049  uint8_t flush_rx(void);
1050 
1056  uint8_t get_status(void);
1057 
1058  #if !defined (MINIMAL)
1059 
1066  void print_status(uint8_t status);
1067 
1075  void print_observe_tx(uint8_t value);
1076 
1088  void print_byte_register(const char* name, uint8_t reg, uint8_t qty = 1);
1089 
1101  void print_address_register(const char* name, uint8_t reg, uint8_t qty = 1);
1102 #endif
1103 
1109  void toggle_features(void);
1110 
1115  uint8_t spiTrans(uint8_t cmd);
1116 
1117  #if defined (FAILURE_HANDLING) || defined (RF24_LINUX)
1118  void errNotify(void);
1119  #endif
1120 
1123 };
1124 
1125 
1890 #endif // __RF24_H__
1891 
bool testRPD(void)
Definition: RF24.cpp:1365
void printDetails(void)
Definition: RF24.cpp:510
void setAutoAck(bool enable)
Definition: RF24.cpp:1329
bool failureDetected
Definition: RF24.h:676
bool isAckPayloadAvailable(void)
Definition: RF24.cpp:1315
bool available(void)
Definition: RF24.cpp:1053
void closeReadingPipe(uint8_t pipe)
Definition: RF24.cpp:1211
void startWrite(const void *buf, uint8_t len, const bool multicast)
Definition: RF24.cpp:932
void enableAckPayload(void)
Definition: RF24.cpp:1249
void maskIRQ(bool tx_ok, bool tx_fail, bool rx_ready)
Definition: RF24.cpp:1017
uint8_t getPayloadSize(void)
Definition: RF24.cpp:455
void setChannel(uint8_t channel)
Definition: RF24.cpp:435
uint8_t getChannel(void)
Definition: RF24.cpp:441
bool testCarrier(void)
Definition: RF24.cpp:1358
bool isValid()
Definition: RF24.h:646
void setRetries(uint8_t delay, uint8_t count)
Definition: RF24.cpp:1524
void reUseTX()
Definition: RF24.cpp:864
bool write(const void *buf, uint8_t len)
Definition: RF24.cpp:824
void startListening(void)
Definition: RF24.cpp:689
rf24_datarate_e
Definition: iBoardRF24.h:33
rf24_datarate_e
Definition: RF24.h:40
bool writeBlocking(const void *buf, uint8_t len, uint32_t timeout)
Definition: RF24.cpp:830
bool writeFast(const void *buf, uint8_t len)
Definition: RF24.cpp:907
bool isPVariant(void)
Definition: RF24.cpp:1322
bool rxFifoFull()
Definition: RF24.cpp:949
rf24_crclength_e
Definition: RF24.h:47
void enableDynamicPayloads(void)
Definition: RF24.cpp:1228
void disableCRC(void)
Definition: RF24.cpp:1517
rf24_datarate_e getDataRate(void)
Definition: RF24.cpp:1447
void writeAckPayload(uint8_t pipe, const void *buf, uint8_t len)
Definition: RF24.cpp:1284
Definition: RF24.h:53
RF24(uint8_t _cepin, uint8_t _cspin)
Definition: RF24.cpp:416
void setPayloadSize(uint8_t size)
Definition: RF24.cpp:448
rf24_pa_dbm_e
Definition: RF24.h:33
void startFastWrite(const void *buf, uint8_t len, const bool multicast, bool startTx=1)
Definition: RF24.cpp:918
uint8_t getDynamicPayloadSize(void)
Definition: RF24.cpp:1029
uint8_t flush_tx(void)
Definition: RF24.cpp:324
uint8_t getPALevel(void)
Definition: RF24.cpp:1389
bool setDataRate(rf24_datarate_e speed)
Definition: RF24.cpp:1397
rf24_crclength_e getCRCLength(void)
Definition: RF24.cpp:1497
void beginTransaction()
Definition: RF24.cpp:68
void openWritingPipe(const uint8_t *address)
Definition: RF24.cpp:1121
void setCRCLength(rf24_crclength_e length)
Definition: RF24.cpp:1474
void whatHappened(bool &tx_ok, bool &tx_fail, bool &rx_ready)
Definition: RF24.cpp:1092
void powerUp(void)
Definition: RF24.cpp:757
void read(void *buf, uint8_t len)
Definition: RF24.cpp:1080
void stopListening(void)
Definition: RF24.cpp:720
void powerDown(void)
Definition: RF24.cpp:748
bool begin(void)
Definition: RF24.cpp:569
void enableDynamicAck()
Definition: RF24.cpp:1270
void openReadingPipe(uint8_t number, const uint8_t *address)
Definition: RF24.cpp:1183
void setPALevel(uint8_t level)
Definition: RF24.cpp:1372
void setAddressWidth(uint8_t a_width)
Definition: RF24.cpp:1172
bool txStandBy()
Definition: RF24.cpp:954
rf24_crclength_e
Definition: iBoardRF24.h:40