diff --git a/RF24.cpp b/RF24.cpp index d2b4025..190e67d 100644 --- a/RF24.cpp +++ b/RF24.cpp @@ -524,7 +524,7 @@ bool RF24::writeFast( const void* buf, uint8_t len ) } } - //Start Writing + //Start Writing startWrite(buf,len); return 1; @@ -553,6 +553,10 @@ bool RF24::txStandBy(){ ce(LOW); return 1; } + if( get_status() & _BV(MAX_RT)){ + write_register(STATUS,_BV(MAX_RT) ); + return 0; + } return 0; } diff --git a/RF24.h b/RF24.h index 629cdab..7f242ea 100644 --- a/RF24.h +++ b/RF24.h @@ -270,7 +270,7 @@ public: void stopListening(void); /** - * Optimization: Improved performance and reliability + * @note Optimization: Improved performance and reliability * Write to the open writing pipe * * Be sure to call openWritingPipe() first to set the destination @@ -293,16 +293,17 @@ public: bool write( const void* buf, uint8_t len ); /** - * Optimization: New Command + * @note Optimization: New Command * Write to the open writing pipe filling up the FIFO buffers * * Be sure to call openWritingPipe() first to set the destination * of where to write to. * * This will not block until the 3 FIFO buffers are filled with data. - * Once the FIFOs are full, writeFast will simply return 0. From a user - * perspective, just keep trying to send the same data. The library will - * keep auto retrying the previous payload using the built in functionality. + * Once the FIFOs are full, writeFast will simply wait for success or + * timeout, and return 1 or 0 respectively. From a user perspective, just + * keep trying to send the same data. The library will keep auto retrying + * the current payload using the built in functionality. * * The maximum size of data written is the fixed payload size, see * getPayloadSize(). However, you can write less, and the remainder @@ -317,7 +318,7 @@ public: bool writeFast( const void* buf, uint8_t len ); /** - * Optimization: New Command + * @note Optimization: New Command * Write to the open writing pipe * * Be sure to call openWritingPipe() first to set the destination @@ -344,7 +345,7 @@ public: bool writeBlocking( const void* buf, uint8_t len ); /** - * Optimization: New Command + * @note Optimization: New Command * This function should be called as soon as transmission is finished to * drop the radio back to STANDBY-I mode. If not issued, the radio will * remain in STANDBY-II mode which, per the data sheet, is not a recommended @@ -781,8 +782,8 @@ public: }; /** - * @example GettingStarted.pde - * + * @example GettingStarted.ino + * Updated: TMRh20 * This is an example which corresponds to my "Getting Started" blog post: * Getting Started with nRF24L01+ on Arduino. * @@ -793,6 +794,17 @@ public: * node can then see how long the whole cycle took. */ +/** + * @example Transfer.ino + * Updated: TMRh20 + * This example demonstrates half-rate transfer using the FIFO buffers + * + * It is an example of how to use the RF24 class. Write this sketch to two + * different nodes. Put one of the nodes into 'transmit' mode by connecting + * with the serial monitor and sending a 'T'. The data transfer will begin, + * with the receiver displaying the payload count. (32Byte Payloads) + */ + /** * @example nordic_fob.pde * @@ -812,7 +824,7 @@ public: */ /** - * @example pingpair.pde + * @example pingpair.ino * * This is an example of how to use the RF24 class. Write this sketch to two * different nodes, connect the role_pin to ground on one. The ping node sends diff --git a/examples/Transfer/Transfer.ino b/examples/Transfer/Transfer.ino index 5949105..080c208 100644 --- a/examples/Transfer/Transfer.ino +++ b/examples/Transfer/Transfer.ino @@ -19,105 +19,92 @@ TMRh20 2014 #include "RF24.h" #include "printf.h" -// Hardware configuration -// Set up nRF24L01 radio on SPI bus plus pins 9 & 10 +/************* USER Configuration *****************************/ + // Hardware configuration +RF24 radio(48,49); // Set up nRF24L01 radio on SPI bus plus pins 9 & 10 +boolean RADIO_NO = 0; //SET THIS TO 0 or 1 for 1st or 2nd radio -RF24 radio(48,49); +/***************************************************************/ -// Topology -// Radio pipe addresses for the 2 nodes to communicate. -const uint64_t pipes[2] = { 0xABCDABCD71LL, 0x544d52687CLL }; +const uint64_t pipes[2] = { 0xABCDABCD71LL, 0x544d52687CLL }; // Radio pipe addresses for the 2 nodes to communicate. -// Role management -// Set up role. This sketch uses the same software for all the nodes -// in this system. Doing so greatly simplifies testing. +byte data[32]; //Data buffer for testing data transfer speeds -// The various roles supported by this sketch -typedef enum { role_TX = 1, role_RX } role_e; - -// The debug-friendly names of those roles -const char* role_friendly_name[] = { "invalid", "Ping out", "Pong back"}; - -//Set this to determine the default role of the current running sketch -role_e role = role_RX; - -//Data buffer for testing data transfer speeds -byte data[32]; - -//Counter and timer for keeping track transfer info -unsigned long counter, rxTimer; +unsigned long counter, rxTimer; //Counter and timer for keeping track transfer info float startTime, stopTime; +bool TX=1,RX=0,role=0; -void setup(void) -{ +void setup(void) { Serial.begin(57600); printf_begin(); - printf("\n\rRF24/examples/GettingStarted/\n\r"); - printf("ROLE: %s\n\r",role_friendly_name[role]); - printf("*** PRESS 'T' to begin transmitting to the other node\n\r"); - radio.begin(); // Setup and configure rf radio + radio.begin(); // Setup and configure rf radio radio.setChannel(1); radio.setPALevel(RF24_PA_MAX); - radio.setAutoAck(1); // Ensure autoACK is enabled - radio.setRetries(2,3); // Optionally, increase the delay between retries & # of retries - //radio.disableCRC(); + radio.setAutoAck(1); // Ensure autoACK is enabled + radio.setRetries(1,1); // Optionally, increase the delay between retries & # of retries radio.setCRCLength(RF24_CRC_8); - radio.openWritingPipe(pipes[1]); - radio.openReadingPipe(1,pipes[0]); - + + if(RADIO_NO){ //Lets the two radios choose the correct pipes depending on user selection + radio.openWritingPipe(pipes[0]); + radio.openReadingPipe(1,pipes[1]); + }else{ + radio.openWritingPipe(pipes[1]); + radio.openReadingPipe(1,pipes[0]); + } + radio.startListening(); // Start listening radio.printDetails(); // Dump the configuration of the rf unit for debugging + printf("\n\rRF24/examples/Transfer Rates/\n\r"); + printf("*** PRESS 'T' to begin transmitting to the other node\n\r"); + randomSeed(analogRead(0)); //Seed for random number generation for(int i=0; i<32; i++){ data[i] = random(255); //Load the buffer with random data } - radio.powerUp(); + radio.powerUp(); //Power up the radio } void loop(void){ - - //TX with pre-blocking writes - if(role == role_TX){ + + if(role == TX){ delay(1500); printf("Initiating Basic Data Transfer\n\r"); - float cycles = 10000; + float cycles = 1000; //Change this to a higher or lower number. startTime = millis(); - for(int i=0; i