Skip to content

Commit b80243e

Browse files
authored
Simplify debug message with variadic arguments (#44)
* Changing debug method to allow variadic arguments for simplifying debugging code * Using a enum class for improved readabilty on the currently used debug level * Adding function 'debugMessageNoTimestamp' to print a debug message without a timestamp * Changing bracing style to K&R employed in the rest of the file * Select your desired output stream for debug messages via 'setDebugOutputStream' * Adding missing header include guards
1 parent a43c6b4 commit b80243e

File tree

6 files changed

+162
-145
lines changed

6 files changed

+162
-145
lines changed

src/ArduinoIoTCloud.cpp

Lines changed: 23 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ static unsigned long getTime() {
4040
if (!getTimeConnection) return 0;
4141
unsigned long time = getTimeConnection->getTime();
4242
if (!NTPUtils::isTimeValid(time)) {
43-
debugMessage("Bogus NTP time from API, fallback to UDP method", 0);
43+
debugMessage(DebugLevel::Error, "Bogus NTP time from API, fallback to UDP method");
4444
time = NTPUtils(getTimeConnection->getUDP()).getTime();
4545
}
4646
#ifdef ARDUINO_ARCH_SAMD
@@ -109,18 +109,18 @@ int ArduinoIoTCloudClass::begin(Client& net, String brokerAddress, uint16_t brok
109109
byte deviceIdBytes[72];
110110

111111
if (!ECCX08.begin()) {
112-
debugMessage("Cryptography processor failure. Make sure you have a compatible board.", 0);
112+
debugMessage(DebugLevel::Error, "Cryptography processor failure. Make sure you have a compatible board.");
113113
return 0;
114114
}
115115

116116
if (!ECCX08.readSlot(deviceIdSlot, deviceIdBytes, sizeof(deviceIdBytes))) {
117-
debugMessage("Cryptography processor read failure.", 0);
117+
debugMessage(DebugLevel::Error, "Cryptography processor read failure.");
118118
return 0;
119119
}
120120
_device_id = (char*)deviceIdBytes;
121121

122122
if (!ECCX08Cert.beginReconstruction(keySlot, compressedCertSlot, serialNumberAndAuthorityKeyIdentifierSlot)) {
123-
debugMessage("Cryptography certificate reconstruction failure.", 0);
123+
debugMessage(DebugLevel::Error, "Cryptography certificate reconstruction failure.");
124124
return 0;
125125
}
126126

@@ -131,7 +131,7 @@ int ArduinoIoTCloudClass::begin(Client& net, String brokerAddress, uint16_t brok
131131
ECCX08Cert.setIssuerCommonName("Arduino");
132132

133133
if (!ECCX08Cert.endReconstruction()) {
134-
debugMessage("Cryptography certificate reconstruction failure.", 0);
134+
debugMessage(DebugLevel::Error, "Cryptography certificate reconstruction failure.");
135135
return 0;
136136
}
137137

@@ -386,49 +386,43 @@ void ArduinoIoTCloudClass::connectionCheck()
386386
}
387387
}
388388

389-
char msgBuffer[120];
390-
391-
392389
switch (iotStatus) {
393390
case IOT_STATUS_CLOUD_IDLE:
394391
setIoTConnectionState(IOT_STATUS_CLOUD_CONNECTING);
395392
break;
396393
case IOT_STATUS_CLOUD_ERROR:
397-
debugMessage("Cloud Error. Retrying...", 0);
394+
debugMessage(DebugLevel::Error, "Cloud Error. Retrying...");
398395
setIoTConnectionState(IOT_STATUS_CLOUD_RECONNECTING);
399396
break;
400397
case IOT_STATUS_CLOUD_CONNECTED:
401-
debugMessage(".", 4, false, true);
398+
debugMessageNoTimestamp(DebugLevel::Verbose, ".");
402399
if (!_mqttClient->connected()){
403400
setIoTConnectionState(IOT_STATUS_CLOUD_DISCONNECTED);
404401
}
405402
break;
406403
case IOT_STATUS_CLOUD_DISCONNECTED:
407404
setIoTConnectionState(IOT_STATUS_CLOUD_RECONNECTING);
408405
break;
409-
case IOT_STATUS_CLOUD_RECONNECTING:
410-
int arduinoIoTReconnectionAttempt;
411-
arduinoIoTReconnectionAttempt = reconnect(*_net);
412-
sprintf(msgBuffer, "ArduinoCloud.reconnect(): %d", arduinoIoTReconnectionAttempt);
413-
debugMessage(msgBuffer, 2);
414-
if (arduinoIoTReconnectionAttempt == 1) {
406+
case IOT_STATUS_CLOUD_RECONNECTING: {
407+
int const ret_code_reconnect = reconnect(*_net);
408+
debugMessage(DebugLevel::Info, "ArduinoCloud.reconnect(): %d", ret_code_reconnect);
409+
if (ret_code_reconnect == CONNECT_SUCCESS) {
415410
setIoTConnectionState(IOT_STATUS_CLOUD_CONNECTED);
416411
CloudSerial.begin(9600);
417412
CloudSerial.println("Hello from Cloud Serial!");
418413
}
414+
}
419415
break;
420416
case IOT_STATUS_CLOUD_CONNECTING:
421417
int const ret_code_connect = connect();
422-
sprintf(msgBuffer, "ArduinoCloud.connect(): %d", ret_code_connect);
423-
debugMessage(msgBuffer, 4);
418+
debugMessage(DebugLevel::Verbose, "ArduinoCloud.connect(): %d", ret_code_connect);
424419
if (ret_code_connect == CONNECT_SUCCESS) {
425420
setIoTConnectionState(IOT_STATUS_CLOUD_CONNECTED);
426421
CloudSerial.begin(9600);
427422
CloudSerial.println("Hello from Cloud Serial!");
428423
}
429424
else if (ret_code_connect == CONNECT_FAILURE_SUBSCRIBE) {
430-
sprintf(msgBuffer, "ERROR - Please verify your THING ID");
431-
debugMessage(msgBuffer, 0);
425+
debugMessage(DebugLevel::Info, "ERROR - Please verify your THING ID");
432426
}
433427
break;
434428
}
@@ -438,34 +432,30 @@ void ArduinoIoTCloudClass::setIoTConnectionState(ArduinoIoTConnectionStatus _new
438432
{
439433
switch(_newState){
440434
case IOT_STATUS_CLOUD_ERROR:
441-
debugMessage("Arduino, we have a problem.", 0);
435+
debugMessage(DebugLevel::Error, "Arduino, we have a problem.");
442436
break;
443437
case IOT_STATUS_CLOUD_CONNECTING:
444-
debugMessage("Connecting to Arduino IoT Cloud...", 0);
438+
debugMessage(DebugLevel::Error, "Connecting to Arduino IoT Cloud...");
445439
break;
446440
case IOT_STATUS_CLOUD_RECONNECTING:
447-
debugMessage("Reconnecting to Arduino IoT Cloud...", 0);
441+
debugMessage(DebugLevel::Error, "Reconnecting to Arduino IoT Cloud...");
448442
break;
449443
case IOT_STATUS_CLOUD_CONNECTED:
450-
debugMessage("Connected to Arduino IoT Cloud", 0);
444+
debugMessage(DebugLevel::Error, "Connected to Arduino IoT Cloud");
451445
break;
452446
case IOT_STATUS_CLOUD_DISCONNECTED:
453-
debugMessage("Disconnected from Arduino IoT Cloud", 0);
447+
debugMessage(DebugLevel::Error, "Disconnected from Arduino IoT Cloud");
454448
break;
455449
}
456450
iotStatus = _newState;
457451
}
458452

459453
void ArduinoIoTCloudClass::printDebugInfo()
460454
{
461-
char msgBuffer[120];
462-
debugMessage("***** Arduino IoT Cloud - configuration info *****", 2);
463-
sprintf(msgBuffer, "Device ID: %s", getDeviceId().c_str());
464-
debugMessage(msgBuffer, 2);
465-
sprintf(msgBuffer, "Thing ID: %s", getThingId().c_str());
466-
debugMessage(msgBuffer, 2);
467-
sprintf(msgBuffer, "MQTT Broker: %s:%d", _brokerAddress.c_str(), _brokerPort);
468-
debugMessage(msgBuffer, 2);
455+
debugMessage(DebugLevel::Info, "***** Arduino IoT Cloud - configuration info *****");
456+
debugMessage(DebugLevel::Info, "Device ID: %s", getDeviceId().c_str());
457+
debugMessage(DebugLevel::Info, "Thing ID: %s", getThingId().c_str());
458+
debugMessage(DebugLevel::Info, "MQTT Broker: %s:%d", _brokerAddress.c_str(), _brokerPort);
469459
}
470460

471461
ArduinoIoTCloudClass ArduinoCloud;

src/EthernetConnectionManager.cpp

Lines changed: 16 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ unsigned long EthConnectionManager::getTime() {
5353
}
5454

5555
void EthConnectionManager::check() {
56-
char msgBuffer[120];
5756
unsigned long const now = millis();
5857
int networkStatus = 0;
5958
if (now - lastConnectionTickTime > connectionTickTimeInterval) {
@@ -65,69 +64,50 @@ void EthConnectionManager::check() {
6564
networkStatus = Ethernet.begin(mac, ss_pin);
6665
}
6766
networkStatus = Ethernet.hardwareStatus();
68-
*msgBuffer = 0;
69-
sprintf(msgBuffer, "Eth hardware status(): %d", networkStatus);
70-
debugMessage(msgBuffer, 2);
67+
debugMessage(DebugLevel::Info, "Eth hardware status(): %d", networkStatus);
7168
if (networkStatus == EthernetNoHardware) {
72-
debugMessage("No Ethernet chip connected", 0);
69+
debugMessage(DebugLevel::Error, "No Ethernet chip connected");
7370
// don't continue:
7471
changeConnectionState(CONNECTION_STATE_ERROR);
7572
lastConnectionTickTime = now;
7673
return;
7774
}
7875
networkStatus = Ethernet.linkStatus();
79-
*msgBuffer = 0;
80-
sprintf(msgBuffer, "Eth link status(): %d", networkStatus);
81-
debugMessage(msgBuffer, 2);
76+
debugMessage(DebugLevel::Info, "Eth link status(): %d", networkStatus);
8277
if (networkStatus == LinkOFF) {
83-
debugMessage("Failed to configure Ethernet via dhcp", 0);
78+
debugMessage(DebugLevel::Error, "Failed to configure Ethernet via dhcp");
8479
// don't continue:
8580
changeConnectionState(CONNECTION_STATE_ERROR);
8681
lastConnectionTickTime = now;
8782
return;
8883
}
89-
*msgBuffer = 0;
90-
sprintf(msgBuffer, "Ethernet shield recognized: ID", Ethernet.hardwareStatus());
91-
debugMessage(msgBuffer, 0);
84+
debugMessage(DebugLevel::Error, "Ethernet shield recognized: ID", Ethernet.hardwareStatus());
9285
changeConnectionState(CONNECTION_STATE_CONNECTING);
9386
break;
9487
case CONNECTION_STATE_CONNECTING:
95-
*msgBuffer = 0;
96-
sprintf(msgBuffer, "Connecting via dhcp");
97-
debugMessage(msgBuffer, 2);
88+
debugMessage(DebugLevel::Info, "Connecting via dhcp");
9889
if (ss_pin == -1) {
9990
networkStatus = Ethernet.begin(mac);
10091
} else {
10192
networkStatus = Ethernet.begin(mac, ss_pin);
10293
}
103-
*msgBuffer = 0;
104-
sprintf(msgBuffer, "Ethernet.status(): %d", networkStatus);
105-
debugMessage(msgBuffer, 2);
94+
debugMessage(DebugLevel::Info, "Ethernet.status(): %d", networkStatus);
10695
if (networkStatus == 0) {
107-
*msgBuffer = 0;
108-
sprintf(msgBuffer, "Connection failed");
109-
debugMessage(msgBuffer, 0);
110-
111-
*msgBuffer = 0;
112-
sprintf(msgBuffer, "Retrying in \"%d\" milliseconds", connectionTickTimeInterval);
113-
debugMessage(msgBuffer, 2);
96+
debugMessage(DebugLevel::Error, "Connection failed");
97+
debugMessage(DebugLevel::Info, "Retrying in \"%d\" milliseconds", connectionTickTimeInterval);
11498
//changeConnectionState(CONNECTION_STATE_CONNECTING);
11599
return;
116100
} else {
117-
*msgBuffer = 0;
118-
sprintf(msgBuffer, "Connected!");
119-
debugMessage(msgBuffer, 2);
101+
debugMessage(DebugLevel::Info, "Connected!");
120102
changeConnectionState(CONNECTION_STATE_GETTIME);
121103
return;
122104
}
123105
break;
124106
case CONNECTION_STATE_GETTIME:
125-
debugMessage("Acquiring Time from Network", 3);
107+
debugMessage(DebugLevel::Debug, "Acquiring Time from Network");
126108
unsigned long networkTime;
127109
networkTime = getTime();
128-
*msgBuffer = 0;
129-
sprintf(msgBuffer, "Network Time: %u", networkTime);
130-
debugMessage(msgBuffer, 3);
110+
debugMessage(DebugLevel::Debug, "Network Time: %u", networkTime);
131111
if(networkTime > lastValidTimestamp){
132112
lastValidTimestamp = networkTime;
133113
changeConnectionState(CONNECTION_STATE_CONNECTED);
@@ -137,22 +117,16 @@ void EthConnectionManager::check() {
137117
// keep testing connection
138118
Ethernet.maintain();
139119
networkStatus = Ethernet.linkStatus();
140-
*msgBuffer = 0;
141-
sprintf(msgBuffer, "Eth link status(): %d", networkStatus);
142-
debugMessage(msgBuffer, 4);
120+
debugMessage(DebugLevel::Verbose, "Eth link status(): %d", networkStatus);
143121
if (networkStatus != LinkON) {
144122
changeConnectionState(CONNECTION_STATE_DISCONNECTED);
145123
return;
146124
}
147-
*msgBuffer = 0;
148-
sprintf(msgBuffer, "Connected");
149-
debugMessage(msgBuffer, 2);
125+
debugMessage(DebugLevel::Info, "Connected");
150126
break;
151127
case CONNECTION_STATE_DISCONNECTED:
152-
*msgBuffer = 0;
153-
sprintf(msgBuffer, "Connection lost.");
154-
debugMessage(msgBuffer, 0);
155-
debugMessage("Attempting reconnection", 1);
128+
debugMessage(DebugLevel::Error, "Connection lost.");
129+
debugMessage(DebugLevel::Info, "Attempting reconnection");
156130
changeConnectionState(CONNECTION_STATE_CONNECTING);
157131
//wifiClient.stop();
158132
break;

src/GSMConnectionManager.cpp

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,11 @@ GSMConnectionManager::GSMConnectionManager(const char *pin, const char *apn, con
4949
void GSMConnectionManager::init() {
5050
char msgBuffer[120];
5151
if (gsmAccess.begin(pin) == GSM_READY) {
52-
debugMessage("SIM card ok", 2);
52+
debugMessage(DebugLevel::Info, "SIM card ok");
5353
gsmAccess.setTimeout(CHECK_INTERVAL_RETRYING);
5454
changeConnectionState(CONNECTION_STATE_CONNECTING);
5555
} else {
56-
debugMessage("SIM not present or wrong PIN", 0);
56+
debugMessage(DebugLevel::Error, "SIM not present or wrong PIN");
5757
while(1);
5858
}
5959
}
@@ -63,7 +63,6 @@ unsigned long GSMConnectionManager::getTime() {
6363
}
6464

6565
void GSMConnectionManager::check() {
66-
char msgBuffer[120];
6766
unsigned long const now = millis();
6867
int gsmAccessAlive;
6968
if (now - lastConnectionTickTime > connectionTickTimeInterval) {
@@ -75,40 +74,34 @@ void GSMConnectionManager::check() {
7574
// NOTE: Blocking Call when 4th parameter == true
7675
GSM3_NetworkStatus_t networkStatus;
7776
networkStatus = gprs.attachGPRS(apn, login, pass, true);
78-
sprintf(msgBuffer, "GPRS.attachGPRS(): %d", networkStatus);
79-
debugMessage(msgBuffer, 3);
77+
debugMessage(DebugLevel::Debug, "GPRS.attachGPRS(): %d", networkStatus);
8078
if (networkStatus == GSM3_NetworkStatus_t::ERROR) {
8179
// NO FURTHER ACTION WILL FOLLOW THIS
8280
changeConnectionState(CONNECTION_STATE_ERROR);
8381
return;
8482
}
85-
debugMessage("Sending PING to outer space...", 2);
83+
debugMessage(DebugLevel::Info, "Sending PING to outer space...");
8684
int pingResult;
8785
pingResult = gprs.ping("time.arduino.cc");
88-
sprintf(msgBuffer, "GSM.ping(): %d", pingResult);
89-
debugMessage(msgBuffer, 2);
86+
debugMessage(DebugLevel::Info, "GSM.ping(): %d", pingResult);
9087
if (pingResult < 0) {
91-
debugMessage("PING failed", 0);
92-
sprintf(msgBuffer, "Retrying in \"%d\" milliseconds", connectionTickTimeInterval);
93-
debugMessage(msgBuffer, 2);
88+
debugMessage(DebugLevel::Error, "PING failed");
89+
debugMessage(DebugLevel::Info, "Retrying in \"%d\" milliseconds", connectionTickTimeInterval);
9490
return;
9591
} else {
96-
sprintf(msgBuffer, "Connected to GPRS Network");
97-
debugMessage(msgBuffer, 2);
92+
debugMessage(DebugLevel::Info, "Connected to GPRS Network");
9893
changeConnectionState(CONNECTION_STATE_CONNECTED);
9994
return;
10095
}
10196
break;
10297
case CONNECTION_STATE_CONNECTED:
10398
gsmAccessAlive = gsmAccess.isAccessAlive();
104-
sprintf(msgBuffer, "GPRS.isAccessAlive(): %d", gsmAccessAlive);
105-
debugMessage(msgBuffer, 4);
99+
debugMessage(DebugLevel::Verbose, "GPRS.isAccessAlive(): %d", gsmAccessAlive);
106100
if (gsmAccessAlive != 1) {
107101
changeConnectionState(CONNECTION_STATE_DISCONNECTED);
108102
return;
109103
}
110-
sprintf(msgBuffer, "Connected to Cellular Network");
111-
debugMessage(msgBuffer, 4);
104+
debugMessage(DebugLevel::Verbose, "Connected to Cellular Network");
112105
break;
113106
case CONNECTION_STATE_DISCONNECTED:
114107
gprs.detachGPRS();
@@ -131,22 +124,21 @@ void GSMConnectionManager::changeConnectionState(NetworkConnectionState _newStat
131124
newInterval = CHECK_INTERVAL_INIT;
132125
break;
133126
case CONNECTION_STATE_CONNECTING:
134-
sprintf(msgBuffer, "Connecting to Cellular Network");
135-
debugMessage(msgBuffer, 2);
127+
debugMessage(DebugLevel::Info, "Connecting to Cellular Network");
136128
newInterval = CHECK_INTERVAL_CONNECTING;
137129
break;
138130
case CONNECTION_STATE_CONNECTED:
139131
newInterval = CHECK_INTERVAL_CONNECTED;
140132
break;
141133
case CONNECTION_STATE_DISCONNECTED:
142134
if(netConnectionState == CONNECTION_STATE_CONNECTED){
143-
debugMessage("Disconnected from Cellular Network", 0);
144-
debugMessage("Attempting reconnection", 0);
135+
debugMessage(DebugLevel::Error, "Disconnected from Cellular Network");
136+
debugMessage(DebugLevel::Error, "Attempting reconnection");
145137
}
146138
newInterval = CHECK_INTERVAL_DISCONNECTED;
147139
break;
148140
case CONNECTION_STATE_ERROR:
149-
debugMessage("GPRS attach failed\nMake sure the antenna is connected and reset your board.", 0);
141+
debugMessage(DebugLevel::Error, "GPRS attach failed\n\rMake sure the antenna is connected and reset your board.");
150142
break;
151143
}
152144
connectionTickTimeInterval = newInterval;

0 commit comments

Comments
 (0)