diff --git a/RF24.cpp b/RF24.cpp index d2073b5..7ad8056 100644 --- a/RF24.cpp +++ b/RF24.cpp @@ -26,7 +26,7 @@ /******************************************************************/ -void RF24::csn(int mode) const +void RF24::csn(int mode) { SPI.setBitOrder(MSBFIRST); SPI.setDataMode(SPI_MODE0); @@ -36,14 +36,14 @@ void RF24::csn(int mode) const /******************************************************************/ -void RF24::ce(int level) const +void RF24::ce(int level) { digitalWrite(ce_pin,level); } /******************************************************************/ -uint8_t RF24::read_register(uint8_t reg, uint8_t* buf, uint8_t len) const +uint8_t RF24::read_register(uint8_t reg, uint8_t* buf, uint8_t len) { uint8_t status; @@ -59,7 +59,7 @@ uint8_t RF24::read_register(uint8_t reg, uint8_t* buf, uint8_t len) const /******************************************************************/ -uint8_t RF24::read_register(uint8_t reg) const +uint8_t RF24::read_register(uint8_t reg) { csn(LOW); SPI.transfer( R_REGISTER | ( REGISTER_MASK & reg ) ); @@ -71,7 +71,7 @@ uint8_t RF24::read_register(uint8_t reg) const /******************************************************************/ -uint8_t RF24::write_register(uint8_t reg, const uint8_t* buf, uint8_t len) const +uint8_t RF24::write_register(uint8_t reg, const uint8_t* buf, uint8_t len) { uint8_t status; @@ -87,7 +87,7 @@ uint8_t RF24::write_register(uint8_t reg, const uint8_t* buf, uint8_t len) const /******************************************************************/ -uint8_t RF24::write_register(uint8_t reg, uint8_t value) const +uint8_t RF24::write_register(uint8_t reg, uint8_t value) { uint8_t status; @@ -145,7 +145,7 @@ uint8_t RF24::read_payload(void* buf, uint8_t len) /******************************************************************/ -uint8_t RF24::flush_rx(void) const +uint8_t RF24::flush_rx(void) { uint8_t status; @@ -158,7 +158,7 @@ uint8_t RF24::flush_rx(void) const /******************************************************************/ -uint8_t RF24::flush_tx(void) const +uint8_t RF24::flush_tx(void) { uint8_t status; @@ -171,7 +171,7 @@ uint8_t RF24::flush_tx(void) const /******************************************************************/ -uint8_t RF24::get_status(void) const +uint8_t RF24::get_status(void) { uint8_t status; @@ -184,7 +184,7 @@ uint8_t RF24::get_status(void) const /******************************************************************/ -void RF24::print_status(uint8_t status) const +void RF24::print_status(uint8_t status) { printf_P(PSTR("STATUS=%02x: RX_DR=%x TX_DS=%x MAX_RT=%x RX_P_NO=%x TX_FULL=%x\n\r"), status, @@ -198,7 +198,7 @@ void RF24::print_status(uint8_t status) const /******************************************************************/ -void RF24::print_observe_tx(uint8_t value) const +void RF24::print_observe_tx(uint8_t value) { printf_P(PSTR("OBSERVE_TX=%02x: POLS_CNT=%x ARC_CNT=%x\n\r"), value, @@ -242,7 +242,7 @@ uint8_t RF24::getPayloadSize(void) /******************************************************************/ -void RF24::printDetails(void) const +void RF24::printDetails(void) { uint8_t buffer[5]; uint8_t status = read_register(RX_ADDR_P0,buffer,5); @@ -371,7 +371,7 @@ void RF24::begin(void) /******************************************************************/ -void RF24::startListening(void) const +void RF24::startListening(void) { write_register(CONFIG, read_register(CONFIG) | _BV(PWR_UP) | _BV(PRIM_RX)); write_register(STATUS, _BV(RX_DR) | _BV(TX_DS) | _BV(MAX_RT) ); @@ -391,20 +391,27 @@ void RF24::startListening(void) const /******************************************************************/ -void RF24::stopListening(void) const +void RF24::stopListening(void) { ce(LOW); } /******************************************************************/ -void RF24::powerDown(void) const +void RF24::powerDown(void) { write_register(CONFIG,read_register(CONFIG) & ~_BV(PWR_UP)); } /******************************************************************/ +void RF24::powerUp(void) +{ + write_register(CONFIG,read_register(CONFIG) | _BV(PWR_UP)); +} + +/******************************************************************/ + boolean RF24::write( const void* buf, uint8_t len ) { boolean result = false; @@ -483,14 +490,14 @@ uint8_t RF24::read_payload_length(void) /******************************************************************/ -boolean RF24::available(void) const +boolean RF24::available(void) { return available(NULL); } /******************************************************************/ -boolean RF24::available(uint8_t* pipe_num) const +boolean RF24::available(uint8_t* pipe_num) { uint8_t status = get_status(); IF_SERIAL_DEBUG(print_status(status)); @@ -587,7 +594,7 @@ void RF24::openReadingPipe(uint8_t child, uint64_t address) /******************************************************************/ -void RF24::toggle_features(void) const +void RF24::toggle_features(void) { csn(LOW); SPI.transfer( ACTIVATE ); @@ -597,7 +604,7 @@ void RF24::toggle_features(void) const /******************************************************************/ -void RF24::enableAckPayload(void) const +void RF24::enableAckPayload(void) { // // enable ack payload and dynamic payload features @@ -624,7 +631,7 @@ void RF24::enableAckPayload(void) const /******************************************************************/ -void RF24::writeAckPayload(uint8_t pipe, const void* buf, uint8_t len) const +void RF24::writeAckPayload(uint8_t pipe, const void* buf, uint8_t len) { const uint8_t* current = (const uint8_t*)buf; @@ -648,13 +655,13 @@ boolean RF24::isAckPayloadAvailable(void) /******************************************************************/ -boolean RF24::isPVariant(void) const { +boolean RF24::isPVariant(void) { return p_variant ; } /******************************************************************/ -void RF24::setAutoAck(bool enable) const +void RF24::setAutoAck(bool enable) { if ( enable ) write_register(EN_AA, B111111); @@ -664,7 +671,7 @@ void RF24::setAutoAck(bool enable) const /******************************************************************/ -void RF24::setAutoAck( uint8_t pipe, bool enable ) const +void RF24::setAutoAck( uint8_t pipe, bool enable ) { uint8_t en_aa = read_register( EN_AA ) ; if( enable ) { @@ -677,21 +684,21 @@ void RF24::setAutoAck( uint8_t pipe, bool enable ) const /******************************************************************/ -boolean RF24::testCarrier(void) const +boolean RF24::testCarrier(void) { return ( read_register(CD) & 1 ); } /******************************************************************/ -boolean RF24::testRPD(void) const +boolean RF24::testRPD(void) { return ( read_register(RPD) & 1 ) ; } /******************************************************************/ -void RF24::setPALevel(rf24_pa_dbm_e level) const +void RF24::setPALevel(rf24_pa_dbm_e level) { uint8_t setup = read_register(RF_SETUP) ; setup &= ~(_BV(RF_PWR_LOW) | _BV(RF_PWR_HIGH)) ; @@ -724,7 +731,7 @@ void RF24::setPALevel(rf24_pa_dbm_e level) const /******************************************************************/ -rf24_pa_dbm_e RF24::getPALevel(void) const +rf24_pa_dbm_e RF24::getPALevel(void) { rf24_pa_dbm_e result = RF24_PA_ERROR ; uint8_t power = read_register(RF_SETUP) & (_BV(RF_PWR_LOW) | _BV(RF_PWR_HIGH)) ; @@ -794,7 +801,7 @@ boolean RF24::setDataRate(rf24_datarate_e speed) /******************************************************************/ -rf24_datarate_e RF24::getDataRate( void ) const { +rf24_datarate_e RF24::getDataRate( void ) { rf24_datarate_e result ; uint8_t setup = read_register(RF_SETUP) ; @@ -821,7 +828,7 @@ rf24_datarate_e RF24::getDataRate( void ) const { /******************************************************************/ -void RF24::setCRCLength(rf24_crclength_e length) const +void RF24::setCRCLength(rf24_crclength_e length) { uint8_t config = read_register(CONFIG) & ~_BV(CRCO) ; @@ -839,7 +846,7 @@ void RF24::setCRCLength(rf24_crclength_e length) const /******************************************************************/ -void RF24::disableCRC( void ) const +void RF24::disableCRC( void ) { uint8_t disable = read_register(CONFIG) & ~_BV(EN_CRC) ; write_register( CONFIG, disable ) ; diff --git a/RF24.h b/RF24.h index e4cf87c..81f10ba 100644 --- a/RF24.h +++ b/RF24.h @@ -50,7 +50,7 @@ protected: * * @param mode HIGH to take this unit off the SPI bus, LOW to put it on */ - void csn(int mode) const ; + void csn(int mode) ; /** * Set chip enable @@ -58,7 +58,7 @@ protected: * @param level HIGH to actively begin transmission or LOW to put in standby. Please see data sheet * for a much more detailed description of this pin. */ - void ce(int level) const ; + void ce(int level) ; /** * Read a chunk of data in from a register @@ -68,7 +68,7 @@ protected: * @param len How many bytes of data to transfer * @return Current value of status register */ - uint8_t read_register(uint8_t reg, uint8_t* buf, uint8_t len) const ; + uint8_t read_register(uint8_t reg, uint8_t* buf, uint8_t len) ; /** * Read single byte from a register @@ -76,7 +76,7 @@ protected: * @param reg Which register. Use constants from nRF24L01.h * @return Current value of register @p reg */ - uint8_t read_register(uint8_t reg) const ; + uint8_t read_register(uint8_t reg) ; /** * Write a chunk of data to a register @@ -86,7 +86,7 @@ protected: * @param len How many bytes of data to transfer * @return Current value of status register */ - uint8_t write_register(uint8_t reg, const uint8_t* buf, uint8_t len) const ; + uint8_t write_register(uint8_t reg, const uint8_t* buf, uint8_t len) ; /** * Write a single byte to a register @@ -95,7 +95,7 @@ protected: * @param value The new value to write * @return Current value of status register */ - uint8_t write_register(uint8_t reg, uint8_t value) const ; + uint8_t write_register(uint8_t reg, uint8_t value) ; /** * Write the transmit payload @@ -134,21 +134,21 @@ protected: * * @return Current value of status register */ - uint8_t flush_rx(void) const ; + uint8_t flush_rx(void) ; /** * Empty the transmit buffer * * @return Current value of status register */ - uint8_t flush_tx(void) const ; + uint8_t flush_tx(void) ; /** * Retrieve the current status of the chip * * @return Current value of status register */ - uint8_t get_status(void) const ; + uint8_t get_status(void) ; /** * Decode and print the given status to stdout @@ -157,7 +157,7 @@ protected: * * @warning Does nothing if stdout is not defined. See fdevopen in stdio.h */ - void print_status(uint8_t status) const ; + void print_status(uint8_t status) ; /** * Decode and print the given 'observe_tx' value to stdout @@ -166,7 +166,7 @@ protected: * * @warning Does nothing if stdout is not defined. See fdevopen in stdio.h */ - void print_observe_tx(uint8_t value) const ; + void print_observe_tx(uint8_t value) ; /** * Turn on or off the special features of the chip @@ -174,7 +174,7 @@ protected: * The chip has certain 'features' which are only available when the 'features' * are enabled. See the datasheet for details. */ - void toggle_features(void) const ; + void toggle_features(void) ; /**@}*/ public: @@ -211,14 +211,14 @@ public: * in this mode, without first calling stopListening(). Call * isAvailable() to check for incoming traffic, and read() to get it. */ - void startListening(void) const ; + void startListening(void) ; /** * Stop listening for incoming messages * * Do this before calling write(). */ - void stopListening(void) const ; + void stopListening(void) ; /** * Write to the open writing pipe @@ -245,7 +245,7 @@ public: * * @return True if there is a payload available, false if none is */ - boolean available(void) const ; + boolean available(void) ; /** * Read the payload @@ -351,15 +351,22 @@ public: * * @warning Does nothing if stdout is not defined. See fdevopen in stdio.h */ - void printDetails(void) const ; + void printDetails(void) ; /** * Enter low-power mode * - * To return to normal power mode, either write() some data or - * startListening(). + * To return to normal power mode, either write() some data, + * startListening(), or powerUp(). */ - void powerDown(void) const ; + void powerDown(void) ; + + /** + * Leave low-power mode - making radio more responsive + * + * To return to low power mode, call powerDown(). + */ + void powerUp(void) ; /** * Test whether there are bytes available to be read @@ -370,7 +377,7 @@ public: * @param[out] pipe_num Which pipe has the payload available * @return True if there is a payload available, false if none is */ - boolean available(uint8_t* pipe_num) const ; + boolean available(uint8_t* pipe_num) ; /** * Enable custom payloads on the acknowledge packets @@ -380,7 +387,7 @@ public: * * @see examples/pingpair_pl/pingpair_pl.pde */ - void enableAckPayload(void) const; + void enableAckPayload(void) ; /** * Write an ack payload for the specified pipe @@ -396,7 +403,7 @@ public: * @param len Length of the data to send, up to 32 bytes max. Not affected * by the static payload set by setPayloadSize(). */ - void writeAckPayload(uint8_t pipe, const void* buf, uint8_t len) const ; + void writeAckPayload(uint8_t pipe, const void* buf, uint8_t len) ; /** * Determine if an ack payload was received in the most recent call to @@ -417,7 +424,7 @@ public: * @return Returns true if the hardware is RF24L01P (or compatible) and false * if its not. */ - boolean isPVariant(void) const ; + boolean isPVariant(void) ; /** * Enable or disable auto-acknowlede packets @@ -427,7 +434,7 @@ public: * * @param enable Whether to enable (true) or disable (false) auto-acks */ - void setAutoAck(bool enable) const ; + void setAutoAck(bool enable) ; /** * Enable or disable auto-acknowlede packets on a per pipeline basis. @@ -438,7 +445,7 @@ public: * @param which pipeline to modify * @param enable Whether to enable (true) or disable (false) auto-acks */ - void setAutoAck( uint8_t pipe, bool enable ) const ; + void setAutoAck( uint8_t pipe, bool enable ) ; /** * Test whether there was a carrier on the line for the @@ -448,7 +455,7 @@ public: * * @return true if was carrier, false if not */ - boolean testCarrier(void) const ; + boolean testCarrier(void) ; /** * Test whether a signal (carrier or otherwise) greater than @@ -460,7 +467,7 @@ public: * * @return true if signal => -64dBm, false if not */ - boolean testRPD(void) const ; + boolean testRPD(void) ; /** * Set Power Amplifier (PA) level to one of four levels. @@ -471,7 +478,7 @@ public: * * @param Desired PA level. */ - void setPALevel( rf24_pa_dbm_e level ) const ; + void setPALevel( rf24_pa_dbm_e level ) ; /** * Fetches the current PA level. @@ -481,7 +488,7 @@ public: * by the enum mnemonics are negative dBm. See setPALevel for * return value descriptions. */ - rf24_pa_dbm_e getPALevel( void ) const ; + rf24_pa_dbm_e getPALevel( void ) ; /** * Set the transmission data rate @@ -497,20 +504,20 @@ public: * is one of 250kbs, RF24_1MBPS for 1Mbps, or RF24_2MBPS, as defined in the * rf24_datarate_e enum. */ - rf24_datarate_e getDataRate( void ) const ; + rf24_datarate_e getDataRate( void ) ; /** * Set the CRC length * * @param length RF24_CRC_8 for 8-bit or RF24_CRC_16 for 16-bit */ - void setCRCLength(rf24_crclength_e length) const ; + void setCRCLength(rf24_crclength_e length) ; /** * Disable CRC validation * */ - void disableCRC( void ) const ; + void disableCRC( void ) ; /**@}*/ };