Introduce MY_DEBUG_VERBOSE to reduce binary size

Define MY_DEBUG_VERBOSE to have verbose debugging output (dumping NRF24
registers on startup).
Fixed warnings.
This commit is contained in:
Yveaux
2015-10-04 14:57:43 +02:00
parent afe6d62368
commit a0589fa38b
3 changed files with 91 additions and 68 deletions
+4
View File
@@ -31,6 +31,10 @@
// final sketch but is helpful to see what is actually is happening during development // final sketch but is helpful to see what is actually is happening during development
//#define MY_DEBUG //#define MY_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
// Enable this in sketch if you want to use TX(1), RX(0) as normal I/O pin // Enable this in sketch if you want to use TX(1), RX(0) as normal I/O pin
//#define MY_DISABLED_SERIAL //#define MY_DISABLED_SERIAL
+63 -44
View File
@@ -10,7 +10,18 @@
#include "RF24_config.h" #include "RF24_config.h"
#include "RF24.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) void RF24::csn(bool mode)
{ {
@@ -132,7 +143,7 @@ uint8_t RF24::write_register(uint8_t reg, uint8_t value)
{ {
uint8_t status; uint8_t status;
#ifdef DEBUG #ifdef MY_DEBUG
Serial.print(F("write_register(")); print_hex(reg, true); Serial.print(F(",")); print_hex(value, true); Serial.println(F(")")); Serial.print(F("write_register(")); print_hex(reg, true); Serial.print(F(",")); print_hex(value, true); Serial.println(F(")"));
#endif #endif
@@ -286,52 +297,66 @@ uint8_t RF24::get_status(void)
} }
/****************************************************************************/ /****************************************************************************/
#ifdef DEBUG void RF24::print_feature(void)
void RF24::print_hex( uint8_t v, const bool prefix0x )
{ {
if (prefix0x) #ifdef MY_DEBUG
Serial.print(F("0x")); Serial.print(F("FEATURE="));
print_hex(read_register(FEATURE), true);
Serial.print(v >> 4, HEX); Serial.println(space_str_P);
Serial.print(v & 0x0F, HEX); #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); print_hex(status, true);
Serial.print(F(" RX_DR=")); Serial.print((status & _BV(RX_DR))?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))?uint8_t(1):uint8_t(0)); Serial.print(F(" TX_DS=")); Serial.print((status & _BV(TX_DS)) ? one : zero );
Serial.print(F(" MAX_RT=")); Serial.print((status & _BV(MAX_RT))?uint8_t(1):uint8_t(0)); 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(" 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 );
#else
(void)status;
#endif
} }
/****************************************************************************/ /****************************************************************************/
void RF24::print_observe_tx(uint8_t value) const
void RF24::print_observe_tx(uint8_t value)
{ {
#ifdef MY_DEBUG_VERBOSE
print_hex(value, true); print_hex(value, true);
Serial.print(F(": POLS_CNT=")); Serial.print((value >> PLOS_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)); Serial.print(F(" ARC_CNT=")); Serial.println((value >> ARC_CNT) & uint8_t(B1111));
#else
(void)value;
#endif
} }
/****************************************************************************/ /****************************************************************************/
void RF24::print_byte_register(uint8_t reg, uint8_t qty) void RF24::print_byte_register(uint8_t reg, uint8_t qty)
{ {
#ifdef MY_DEBUG_VERBOSE
bool prefix0x = true; bool prefix0x = true;
while (qty--) while (qty--)
{ {
print_hex(read_register(reg++), prefix0x); print_hex(read_register(reg++), prefix0x);
Serial.print(F(" ")); Serial.print(space_str_P);
prefix0x = false; prefix0x = false;
} }
Serial.println(F("")); Serial.println(space_str_P);
#else
(void)reg;
(void)qty;
#endif
} }
/****************************************************************************/ /****************************************************************************/
void RF24::print_address_register(uint8_t reg, uint8_t qty) void RF24::print_address_register(uint8_t reg, uint8_t qty)
{ {
#ifdef MY_DEBUG_VERBOSE
bool prefix0x = true; bool prefix0x = true;
while (qty--) while (qty--)
{ {
@@ -344,11 +369,14 @@ void RF24::print_address_register(uint8_t reg, uint8_t qty)
print_hex(read_register(*bufptr), prefix0x); print_hex(read_register(*bufptr), prefix0x);
prefix0x = false; prefix0x = false;
} }
Serial.print(F(" ")); Serial.print(space_str_P);
} }
Serial.println(F("")); Serial.println(space_str_P);
} #else
(void)reg;
(void)qty;
#endif #endif
}
/****************************************************************************/ /****************************************************************************/
RF24::RF24(uint8_t _cepin, uint8_t _cspin): RF24::RF24(uint8_t _cepin, uint8_t _cspin):
@@ -380,8 +408,7 @@ uint8_t RF24::getPayloadSize(void)
} }
/****************************************************************************/ /****************************************************************************/
#ifdef MY_DEBUG_VERBOSE
#ifdef DEBUG
static const char rf24_datarate_e_str_0[] PROGMEM = "1MBPS"; 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_1[] PROGMEM = "2MBPS";
static const char rf24_datarate_e_str_2[] PROGMEM = "250KBPS"; static const char rf24_datarate_e_str_2[] PROGMEM = "250KBPS";
@@ -414,6 +441,7 @@ static const char * const rf24_pa_dbm_e_str_P[] PROGMEM = {
rf24_pa_dbm_e_str_2, rf24_pa_dbm_e_str_2,
rf24_pa_dbm_e_str_3, rf24_pa_dbm_e_str_3,
}; };
#endif
#if (INTPTR_MAX == INT16_MAX) #if (INTPTR_MAX == INT16_MAX)
// 16-bit architecture -> read word from flash and cast to ptr // 16-bit architecture -> read word from flash and cast to ptr
@@ -427,6 +455,7 @@ static const char * const rf24_pa_dbm_e_str_P[] PROGMEM = {
void RF24::printDetails(void) void RF24::printDetails(void)
{ {
#ifdef MY_DEBUG_VERBOSE
Serial.print(F("STATUS\t\t")); print_status(get_status()); 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_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); Serial.print(F("RX_ADDR_P2-5\t")); print_byte_register(RX_ADDR_P2,4);
@@ -437,15 +466,15 @@ void RF24::printDetails(void)
Serial.print(F("EN_RXADDR\t")); print_byte_register(EN_RXADDR); Serial.print(F("EN_RXADDR\t")); print_byte_register(EN_RXADDR);
Serial.print(F("RF_CH\t\t")); print_byte_register(RF_CH); Serial.print(F("RF_CH\t\t")); print_byte_register(RF_CH);
Serial.print(F("RF_SETUP\t")); print_byte_register(RF_SETUP); Serial.print(F("RF_SETUP\t")); print_byte_register(RF_SETUP);
Serial.print(F("CONFIG\t\t")); print_byte_register(CONFIG); Serial.print(F("CONFIG\t\t")); print_byte_register(NRF_CONFIG);
Serial.print(F("DYNPD/FEATURE\t")); print_byte_register(DYNPD,2); Serial.print(F("DYNPD/FEATURE\t")); print_byte_register(DYNPD,2);
Serial.print(F("Data Rate\t")); Serial.println(PGM_READ_PTR(&rf24_datarate_e_str_P[getDataRate()])); Serial.print(F("Data Rate\t")); Serial.println(PGM_READ_PTR(&rf24_datarate_e_str_P[getDataRate()]));
Serial.print(F("Model\t\t")); Serial.println(PGM_READ_PTR(&rf24_model_e_str_P[isPVariant()])); 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("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()])); Serial.print(F("PA Power\t")); Serial.println(PGM_READ_PTR(&rf24_pa_dbm_e_str_P[getPALevel()]));
}
#endif #endif
}
/****************************************************************************/ /****************************************************************************/
void RF24::begin(void) void RF24::begin(void)
@@ -521,10 +550,8 @@ void RF24::begin(void)
// PTX should use only 22uA of power // PTX should use only 22uA of power
write_register(NRF_CONFIG, ( read_register(NRF_CONFIG) ) & ~_BV(PRIM_RX) ); write_register(NRF_CONFIG, ( read_register(NRF_CONFIG) ) & ~_BV(PRIM_RX) );
#ifdef DEBUG
// Dump register values // Dump register values
printDetails(); printDetails();
#endif
} }
/****************************************************************************/ /****************************************************************************/
@@ -630,7 +657,7 @@ void RF24::powerUp(void)
/******************************************************************/ /******************************************************************/
#if defined (FAILURE_HANDLING) #if defined (FAILURE_HANDLING)
void RF24::errNotify(){ void RF24::errNotify(){
#ifdef DEBUG #ifdef MY_DEBUG
Serial.println(F("HARDWARE FAIL")); Serial.println(F("HARDWARE FAIL"));
#endif #endif
failureDetected = 1; failureDetected = 1;
@@ -1065,16 +1092,13 @@ void RF24::toggle_features(void)
} }
/****************************************************************************/ /****************************************************************************/
void RF24::enableDynamicPayloads(void) void RF24::enableDynamicPayloads(void)
{ {
// Enable dynamic payload throughout the system // Enable dynamic payload throughout the system
toggle_features(); toggle_features();
write_register(FEATURE,read_register(FEATURE) | _BV(EN_DPL) ); 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 // Enable dynamic payload on all pipes
// //
// Not sure the use case of only having dynamic payload on certain // Not sure the use case of only having dynamic payload on certain
@@ -1093,10 +1117,8 @@ void RF24::enableAckPayload(void)
// //
toggle_features(); toggle_features();
write_register(FEATURE,read_register(FEATURE) | _BV(EN_ACK_PAY) | _BV(EN_DPL) ); 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 // Enable dynamic payload on pipes 0 & 1
// //
@@ -1111,12 +1133,9 @@ void RF24::enableDynamicAck(void){
// //
// enable dynamic ack features // enable dynamic ack features
// //
toggle_features(); toggle_features();
write_register(FEATURE,read_register(FEATURE) | _BV(EN_DYN_ACK) ); write_register(FEATURE,read_register(FEATURE) | _BV(EN_DYN_ACK) );
print_feature();
#ifdef DEBUG
Serial.print(F("FEATURE=")); print_hex(read_register(FEATURE), true); Serial.println(F(""));
#endif
} }
/****************************************************************************/ /****************************************************************************/
+24 -24
View File
@@ -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); void printDetails(void);
@@ -922,60 +922,60 @@ private:
* @return Current value of status register * @return Current value of status register
*/ */
uint8_t get_status(void); 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 MY_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 * @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 * @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 * Optionally it can print some quantity of successive
* registers on the same line. This is useful for printing a group * registers on the same line. This is useful for printing a group
* of related registers on one line. * 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 reg Which register. Use constants from nRF24L01.h
* @param qty How many successive registers to print * @param qty How many successive registers to print
*/ */
void print_byte_register(uint8_t reg, uint8_t qty = 1); 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 * Optionally it can print some quantity of successive
* registers on the same line. This is useful for printing a group * registers on the same line. This is useful for printing a group
* of related registers on one line. * 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 reg Which register. Use constants from nRF24L01.h
* @param qty How many successive registers to print * @param qty How many successive registers to print
*/ */
void print_address_register(uint8_t reg, uint8_t qty = 1); 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 * Turn on or off the special features of the chip
* *