From 4340d9339a333c28c416406ada828cd3a465018e Mon Sep 17 00:00:00 2001 From: TMRh20 Date: Sat, 22 Mar 2014 18:39:46 -0600 Subject: [PATCH] Lib now passes all tests Added back original startWrite function for when users want to use manual methods. The library uses startFastWrite for its internal functions. Provides compatibility with prev. code while still using the new methods for everything else. --- RF24.cpp | 28 +++++++++++++++++++++++----- RF24.h | 25 +++++++++++++++++++++---- 2 files changed, 44 insertions(+), 9 deletions(-) diff --git a/RF24.cpp b/RF24.cpp index 190e67d..ec6c448 100644 --- a/RF24.cpp +++ b/RF24.cpp @@ -448,7 +448,7 @@ void RF24::powerUp(void) bool RF24::write( const void* buf, uint8_t len ) { //Start Writing - startWrite(buf,len); + startFastWrite(buf,len); //Wait until complete or failed //ACK payloads that are handled improperly will cause this to hang @@ -487,7 +487,7 @@ bool RF24::writeBlocking( const void* buf, uint8_t len ) } //Start Writing - startWrite(buf,len); + startFastWrite(buf,len); return 1; } @@ -525,7 +525,7 @@ bool RF24::writeFast( const void* buf, uint8_t len ) } //Start Writing - startWrite(buf,len); + startFastWrite(buf,len); return 1; } @@ -539,7 +539,7 @@ bool RF24::writeFast( const void* buf, uint8_t len ) //Otherwise we enter Standby-II mode, which is still faster than standby mode //Also, we remove the need to keep writing the config register over and over and delaying for 150 us each time if sending a stream of data -void RF24::startWrite( const void* buf, uint8_t len ){ //TMRh20 +void RF24::startFastWrite( const void* buf, uint8_t len ){ //TMRh20 write_payload( buf,len); ce(HIGH); @@ -547,6 +547,24 @@ void RF24::startWrite( const void* buf, uint8_t len ){ //TMRh20 } +//Added the original startWrite back in so users can still use interrupts, ack payloads, etc +//Allows the library to pass all tests +void RF24::startWrite( const void* buf, uint8_t len ) +{ + // Transmitter power-up + write_register(CONFIG, ( read_register(CONFIG) | _BV(PWR_UP) ) & ~_BV(PRIM_RX) ); + delayMicroseconds(150); + + // Send the payload + write_payload( buf, len ); + + // Allons! + ce(HIGH); + delayMicroseconds(15); + ce(LOW); +} + + bool RF24::txStandBy(){ if ( (read_register(FIFO_STATUS) & _BV(TX_EMPTY))){ @@ -613,7 +631,7 @@ void RF24::read( void* buf, uint8_t len ){ read_payload( buf, len ); //Clear the two possible interrupt flags with one command - write_register(STATUS,_BV(RX_DR) | _BV(TX_DS) ); + write_register(STATUS,_BV(RX_DR) | _BV(MAX_RT) | _BV(TX_DS) ); } diff --git a/RF24.h b/RF24.h index 7f242ea..840b26c 100644 --- a/RF24.h +++ b/RF24.h @@ -66,6 +66,22 @@ protected: */ /**@{*/ + /** + * Non-blocking write to the open writing pipe used for buffered writes + * + * @note Optimization: This function now leaves the CE pin high, so the radio + * will remain in TX or STANDBY-II Mode until a txStandBy() command is issued. + * This allows the chip to be used to its full potential in TX mode. + * + * @see writeFast() + * @see writeBlocking() + * + * @param buf Pointer to the data to be sent + * @param len Number of bytes to be sent + * @return True if the payload was delivered successfully false if not + */ + void startFastWrite( const void* buf, uint8_t len ); + /** * Set chip select pin * @@ -692,16 +708,16 @@ public: * Just like write(), but it returns immediately. To find out what happened * to the send, catch the IRQ and then call whatHappened(). * - * @note Optimization: This function now leaves the CE pin high, so the radio - * will remain in TX or STANDBY-II Mode until a txStandBy() command is issued. - * This allows the chip to be used to its full potential in TX mode. + * @note Optimization: This function again behaves as it did previously. + * startFastWrite() has been moved to an internal function * * @see write() + * @see startFastWrite() * @see whatHappened() * * @param buf Pointer to the data to be sent * @param len Number of bytes to be sent - * @return True if the payload was delivered successfully false if not + * */ void startWrite( const void* buf, uint8_t len ); @@ -934,6 +950,7 @@ public: * * @li Project blog: * @li TMRh20.blogspot.com + * @li ManiacBug on GitHub (Original Library Author) */ #endif // __RF24_H__