diff --git a/libraries/MySensors/MyConfig.h b/libraries/MySensors/MyConfig.h index 0c96b48..67e23f6 100644 --- a/libraries/MySensors/MyConfig.h +++ b/libraries/MySensors/MyConfig.h @@ -26,6 +26,10 @@ // to see what is actually is happening when developing #define DEBUG +// Enable MY_DEBUG_VERBOSE flag for verbose debug prints. Requires DEBUG to be enabled. +// This will add even more to the size of the final sketch! +//#define MY_DEBUG_VERBOSE + // Disable this line, If you are using TX(1), RX(0) as normal I/O pin #define ENABLED_SERIAL @@ -145,5 +149,4 @@ //#define RFM69_ENABLE_ENCRYPTION #define RFM69_ENCRYPTKEY "sampleEncryptKey" //exactly the same 16 characters/bytes on all nodes! - #endif diff --git a/libraries/MySensors/utility/RF24.cpp b/libraries/MySensors/utility/RF24.cpp index 0a2bed2..e280b11 100644 --- a/libraries/MySensors/utility/RF24.cpp +++ b/libraries/MySensors/utility/RF24.cpp @@ -10,7 +10,18 @@ #include "RF24_config.h" #include "RF24.h" +// Save some bytes by reusing strings. +static const char space_str_P[] PROGMEM = " "; + /****************************************************************************/ +static void print_hex( uint8_t v, const bool prefix0x = false ) +{ + if (prefix0x) + Serial.print(F("0x")); + + Serial.print(v >> 4, HEX); + Serial.print(v & 0x0F, HEX); +} void RF24::csn(bool mode) { @@ -286,52 +297,61 @@ uint8_t RF24::get_status(void) } /****************************************************************************/ +void RF24::print_feature(void) +{ #ifdef DEBUG -void RF24::print_hex( uint8_t v, const bool prefix0x ) -{ - if (prefix0x) - Serial.print(F("0x")); - - Serial.print(v >> 4, HEX); - Serial.print(v & 0x0F, HEX); -} + Serial.print(F("FEATURE=")); + print_hex(read_register(FEATURE), true); + Serial.println(space_str_P); +#endif +} -void RF24::print_status(uint8_t status) +/****************************************************************************/ +void RF24::print_status(uint8_t status) const { +#ifdef MY_DEBUG_VERBOSE + const uint8_t one = uint8_t(1); + const uint8_t zero = uint8_t(0); print_hex(status, true); - Serial.print(F(" RX_DR=")); Serial.print((status & _BV(RX_DR))?uint8_t(1):uint8_t(0)); - Serial.print(F(" TX_DS=")); Serial.print((status & _BV(TX_DS))?uint8_t(1):uint8_t(0)); - Serial.print(F(" MAX_RT=")); Serial.print((status & _BV(MAX_RT))?uint8_t(1):uint8_t(0)); + Serial.print(F(" RX_DR=")); Serial.print((status & _BV(RX_DR)) ? one : zero ); + Serial.print(F(" TX_DS=")); Serial.print((status & _BV(TX_DS)) ? one : zero ); + Serial.print(F(" MAX_RT=")); Serial.print((status & _BV(MAX_RT)) ? one : zero ); Serial.print(F(" RX_P_NO=")); Serial.print((status >> RX_P_NO) & uint8_t(B111)); - Serial.print(F(" TX_FULL=")); Serial.println((status & _BV(TX_FULL))?uint8_t(1):uint8_t(0)); + Serial.print(F(" TX_FULL=")); Serial.println((status & _BV(TX_FULL)) ? one : zero ); +#endif } /****************************************************************************/ -void RF24::print_observe_tx(uint8_t value) +void RF24::print_observe_tx(uint8_t value) const { +#ifdef MY_DEBUG_VERBOSE print_hex(value, true); - Serial.print(F(": POLS_CNT=")); Serial.print((value >> PLOS_CNT) & uint8_t(B1111)); - Serial.print(F(" ARC_CNT=")); Serial.println((value >> ARC_CNT) & uint8_t(B1111)); + Serial.print(F(": POLS_CNT=")); Serial.print((value >> PLOS_CNT) & uint8_t(B1111)); + Serial.print(F(" ARC_CNT=")); Serial.println((value >> ARC_CNT) & uint8_t(B1111)); +#endif } /****************************************************************************/ void RF24::print_byte_register(uint8_t reg, uint8_t qty) { +#ifdef MY_DEBUG_VERBOSE bool prefix0x = true; while (qty--) { print_hex(read_register(reg++), prefix0x); - Serial.print(F(" ")); + Serial.print(space_str_P); prefix0x = false; } - Serial.println(F("")); + Serial.println(space_str_P); +#endif } /****************************************************************************/ void RF24::print_address_register(uint8_t reg, uint8_t qty) { +#ifdef MY_DEBUG_VERBOSE bool prefix0x = true; while (qty--) { @@ -344,11 +364,11 @@ void RF24::print_address_register(uint8_t reg, uint8_t qty) print_hex(read_register(*bufptr), prefix0x); prefix0x = false; } - Serial.print(F(" ")); + Serial.print(space_str_P); } - Serial.println(F("")); -} + Serial.println(space_str_P); #endif +} /****************************************************************************/ RF24::RF24(uint8_t _cepin, uint8_t _cspin): @@ -380,8 +400,7 @@ uint8_t RF24::getPayloadSize(void) } /****************************************************************************/ - -#ifdef DEBUG +#ifdef MY_DEBUG_VERBOSE static const char rf24_datarate_e_str_0[] PROGMEM = "1MBPS"; static const char rf24_datarate_e_str_1[] PROGMEM = "2MBPS"; static const char rf24_datarate_e_str_2[] PROGMEM = "250KBPS"; @@ -414,6 +433,7 @@ static const char * const rf24_pa_dbm_e_str_P[] PROGMEM = { rf24_pa_dbm_e_str_2, rf24_pa_dbm_e_str_3, }; +#endif #if (INTPTR_MAX == INT16_MAX) // 16-bit architecture -> read word from flash and cast to ptr @@ -427,6 +447,7 @@ static const char * const rf24_pa_dbm_e_str_P[] PROGMEM = { void RF24::printDetails(void) { +#ifdef MY_DEBUG_VERBOSE Serial.print(F("STATUS\t\t")); print_status(get_status()); Serial.print(F("RX_ADDR_P0-1\t")); print_address_register(RX_ADDR_P0,2); Serial.print(F("RX_ADDR_P2-5\t")); print_byte_register(RX_ADDR_P2,4); @@ -444,8 +465,8 @@ void RF24::printDetails(void) Serial.print(F("Model\t\t")); Serial.println(PGM_READ_PTR(&rf24_model_e_str_P[isPVariant()])); Serial.print(F("CRC Length\t")); Serial.println(PGM_READ_PTR(&rf24_crclength_e_str_P[getCRCLength()])); Serial.print(F("PA Power\t")); Serial.println(PGM_READ_PTR(&rf24_pa_dbm_e_str_P[getPALevel()])); -} #endif +} /****************************************************************************/ void RF24::begin(void) @@ -521,10 +542,8 @@ void RF24::begin(void) // PTX should use only 22uA of power write_register(CONFIG, ( read_register(CONFIG) ) & ~_BV(PRIM_RX) ); -#ifdef DEBUG // Dump register values printDetails(); -#endif } /****************************************************************************/ @@ -1062,16 +1081,13 @@ void RF24::toggle_features(void) } /****************************************************************************/ - void RF24::enableDynamicPayloads(void) { // Enable dynamic payload throughout the system toggle_features(); write_register(FEATURE,read_register(FEATURE) | _BV(EN_DPL) ); + print_feature(); -#ifdef DEBUG - Serial.print(F("FEATURE=")); print_hex(read_register(FEATURE), true); Serial.println(F("")); -#endif // Enable dynamic payload on all pipes // // Not sure the use case of only having dynamic payload on certain @@ -1090,10 +1106,8 @@ void RF24::enableAckPayload(void) // toggle_features(); write_register(FEATURE,read_register(FEATURE) | _BV(EN_ACK_PAY) | _BV(EN_DPL) ); + print_feature(); -#ifdef DEBUG - Serial.print(F("FEATURE=")); print_hex(read_register(FEATURE), true); Serial.println(F("")); -#endif // // Enable dynamic payload on pipes 0 & 1 // @@ -1108,12 +1122,9 @@ void RF24::enableDynamicAck(void){ // // enable dynamic ack features // - toggle_features(); - write_register(FEATURE,read_register(FEATURE) | _BV(EN_DYN_ACK) ); - -#ifdef DEBUG - Serial.print(F("FEATURE=")); print_hex(read_register(FEATURE), true); Serial.println(F("")); -#endif + toggle_features(); + write_register(FEATURE,read_register(FEATURE) | _BV(EN_DYN_ACK) ); + print_feature(); } /****************************************************************************/ diff --git a/libraries/MySensors/utility/RF24.h b/libraries/MySensors/utility/RF24.h index d443308..c342cbd 100644 --- a/libraries/MySensors/utility/RF24.h +++ b/libraries/MySensors/utility/RF24.h @@ -210,9 +210,9 @@ public: /**@{*/ /** - * Print a giant block of debugging information to stdout + * Print a giant block of debugging information to serial * - * @warning Does nothing if stdout is not defined. See fdevopen in stdio.h + * @warning Does nothing if MY_DEBUG_VERBOSE is not defined */ void printDetails(void); @@ -922,60 +922,60 @@ private: * @return Current value of status register */ uint8_t get_status(void); - -#ifdef DEBUG + /** - * Decode and print the given status to stdout + * Print the current feature register value to serial + * + * @warning Does nothing if DEBUG is not defined + */ + void print_feature(void); + + /** + * Decode and print the given status to serial + * + * @warning Does nothing if MY_DEBUG_VERBOSE is not defined * * @param status Status value to print - * - * @warning Does nothing if stdout is not defined. See fdevopen in stdio.h */ - void print_status(uint8_t status); + void print_status(uint8_t status) const; /** - * Decode and print the given 'observe_tx' value to stdout + * Decode and print the given 'observe_tx' value to serial + * + * @warning Does nothing if MY_DEBUG_VERBOSE is not defined * * @param value The observe_tx value to print - * - * @warning Does nothing if stdout is not defined. See fdevopen in stdio.h */ - void print_observe_tx(uint8_t value); + void print_observe_tx(uint8_t value) const; /** - * Print the value of an 8-bit register to stdout + * Print the value of an 8-bit register to serial * * Optionally it can print some quantity of successive * registers on the same line. This is useful for printing a group * of related registers on one line. * + * @warning Does nothing if MY_DEBUG_VERBOSE is not defined + * * @param reg Which register. Use constants from nRF24L01.h * @param qty How many successive registers to print */ void print_byte_register(uint8_t reg, uint8_t qty = 1); /** - * Print the value of a 40-bit address register to stdout + * Print the value of a 40-bit address register to serial * * Optionally it can print some quantity of successive * registers on the same line. This is useful for printing a group * of related registers on one line. * + * @warning Does nothing if MY_DEBUG_VERBOSE is not defined + * * @param reg Which register. Use constants from nRF24L01.h * @param qty How many successive registers to print */ void print_address_register(uint8_t reg, uint8_t qty = 1); - /** - * Print a value in hex to serial output. - * - * For values < 16 a leading 0 will be printed. - * - * @param v Value to print in hex. - */ - void print_hex( uint8_t v, const bool prefix0x = false ); - -#endif /** * Turn on or off the special features of the chip *