From b0917af27e415f4c45b6e1e7e6c610dd393b610d Mon Sep 17 00:00:00 2001 From: Daniel Wiegert Date: Sun, 17 Aug 2014 20:51:52 +0200 Subject: [PATCH] Changed from Switch/case to if/elseif to save some runtime ram --- libraries/MySensors/MyMessage.cpp | 79 +++++++++++++------------------ libraries/MySensors/MySensor.cpp | 15 ++---- 2 files changed, 38 insertions(+), 56 deletions(-) mode change 100644 => 100755 libraries/MySensors/MyMessage.cpp mode change 100644 => 100755 libraries/MySensors/MySensor.cpp diff --git a/libraries/MySensors/MyMessage.cpp b/libraries/MySensors/MyMessage.cpp old mode 100644 new mode 100755 index 8c5492a..286b111 --- a/libraries/MySensors/MyMessage.cpp +++ b/libraries/MySensors/MyMessage.cpp @@ -64,28 +64,21 @@ char* MyMessage::getString(char *buffer) const { buffer[miGetLength()] = 0; return buffer; } else if (buffer != NULL) { - switch(payloadType) { - case P_BYTE: - itoa(bValue, buffer, 10); - break; - case P_INT16: - itoa(iValue, buffer, 10); - break; - case P_UINT16: - utoa(uiValue, buffer, 10); - break; - case P_LONG32: - ltoa(lValue, buffer, 10); - break; - case P_ULONG32: - ultoa(ulValue, buffer, 10); - break; - case P_FLOAT32: - dtostrf(fValue,2,fPrecision,buffer); - break; - case P_CUSTOM: - return getStream(buffer); - break; + if (payloadType == P_BYTE) { + itoa(bValue, buffer, 10); + } else if (payloadType == P_INT16) { + itoa(iValue, buffer, 10); + } else if (payloadType == P_UINT16) { + utoa(uiValue, buffer, 10); + } else if (payloadType == P_LONG32) { + ltoa(lValue, buffer, 10); + } else if (payloadType == P_ULONG32) { + + ultoa(ulValue, buffer, 10); + } else if (payloadType == P_FLOAT32) { + dtostrf(fValue,2,fPrecision,buffer); + } else if (payloadType == P_CUSTOM) { + return getStream(buffer); } return buffer; } else { @@ -94,12 +87,11 @@ char* MyMessage::getString(char *buffer) const { } uint8_t MyMessage::getByte() const { - switch(miGetPayloadType()) { - case P_BYTE: + if (miGetPayloadType() == P_BYTE) { return data[0]; - case P_STRING: + } else if (miGetPayloadType() == P_STRING) { return atoi(data); - default: + } else { return 0; } } @@ -109,56 +101,51 @@ bool MyMessage::getBool() const { } float MyMessage::getFloat() const { - switch(miGetPayloadType()) { - case P_FLOAT32: + if (miGetPayloadType() == P_FLOAT32) { return fValue; - case P_STRING: + } else if (miGetPayloadType() == P_STRING) { return atof(data); - default: + } else { return 0; } } long MyMessage::getLong() const { - switch(miGetPayloadType()) { - case P_LONG32: + if (miGetPayloadType() == P_LONG32) { return lValue; - case P_STRING: + } else if (miGetPayloadType() == P_STRING) { return atol(data); - default: + } else { return 0; } } unsigned long MyMessage::getULong() const { - switch(miGetPayloadType()) { - case P_ULONG32: + if (miGetPayloadType() == P_ULONG32) { return ulValue; - case P_STRING: + } else if (miGetPayloadType() == P_STRING) { return atol(data); - default: + } else { return 0; } } int MyMessage::getInt() const { - switch(miGetPayloadType()) { - case P_INT16: + if (miGetPayloadType() == P_INT16) { return iValue; - case P_STRING: + } else if (miGetPayloadType() == P_STRING) { return atoi(data); - default: + } else { return 0; } } unsigned int MyMessage::getUInt() const { - switch(miGetPayloadType()) { - case P_UINT16: + if (miGetPayloadType() == P_UINT16) { return uiValue; - case P_STRING: + } else if (miGetPayloadType() == P_STRING) { return atoi(data); - default: + } else { return 0; } diff --git a/libraries/MySensors/MySensor.cpp b/libraries/MySensors/MySensor.cpp old mode 100644 new mode 100755 index 11fcf18..b43a46a --- a/libraries/MySensors/MySensor.cpp +++ b/libraries/MySensors/MySensor.cpp @@ -327,12 +327,10 @@ boolean MySensor::process() { } else if (sender == GATEWAY_ADDRESS) { bool isMetric; - switch (type) { - case I_REBOOT: + if (type == I_REBOOT) { wdt_enable(WDTO_15MS); for (;;); - break; - case I_ID_RESPONSE: + } else if (type == I_ID_RESPONSE) { if (nc.nodeId == AUTO) { nc.nodeId = msg.getByte(); // Write id to EEPROM @@ -346,8 +344,7 @@ boolean MySensor::process() { } debug(PSTR("id=%d\n"), nc.nodeId); } - break; - case I_CONFIG: + } else if (type == I_CONFIG) { // Pick up configuration from controller (currently only metric/imperial) // and store it in eeprom if changed isMetric = msg.getByte() == 'M' ; @@ -356,8 +353,7 @@ boolean MySensor::process() { eeprom_write_byte((uint8_t*)EEPROM_CONTROLLER_CONFIG_ADDRESS, isMetric); //eeprom_write_block((const void*)&cc, (uint8_t*)EEPROM_CONTROLLER_CONFIG_ADDRESS, sizeof(ControllerConfig)); } - break; - case I_CHILDREN: + } else if (type == I_CHILDREN) { if (repeaterMode && msg.getByte() == 'C') { // Clears child relay data for this node debug(PSTR("rd=clear\n")); @@ -366,8 +362,7 @@ boolean MySensor::process() { } sendRoute(build(msg, nc.nodeId, GATEWAY_ADDRESS, NODE_SENSOR_ID, C_INTERNAL, I_CHILDREN,false).set("")); } - break; - case I_TIME: + } else if (type == I_TIME) { if (timeCallback != NULL) { // Deliver time to callback timeCallback(msg.getULong());