Skip to content

Commit 6997b2c

Browse files
authored
Reduce flash space used. (#1633)
* Add `addToggleToString()` helper routine Remove duplicate code & strings and replace with new routine. * Add `__FlashStringHelper*` versions of some string handling methods (ESP8266 Only) For what ever reason (probably saved `String` conversions) this reduces the Flash usage by ~5K. e.g. IRrecvDumpV2: - Before: RAM: [==== ] 35.5% (used 29072 bytes from 81920 bytes) Flash: [==== ] 35.8% (used 373421 bytes from 1044464 bytes) - After: RAM: [==== ] 35.5% (used 29072 bytes from 81920 bytes) Flash: [==== ] 35.3% (used 368397 bytes from 1044464 bytes) H/T to @mcspr for the idea. Confirmed working on a NodeMCU running IRrecvDumpV2.
1 parent 5bef3d3 commit 6997b2c

File tree

9 files changed

+31
-24
lines changed

9 files changed

+31
-24
lines changed

src/IRtext.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,11 +183,12 @@ IRTEXT_CONST_STRING(kSwingVToggleStr, D_STR_SWINGVTOGGLE); ///<
183183
///< "Swing(V) Toggle"
184184
IRTEXT_CONST_STRING(kTurboToggleStr, D_STR_TURBOTOGGLE); ///< "Turbo Toggle"
185185

186-
// Separators
186+
// Separators & Punctuation
187187
const char kTimeSep = D_CHR_TIME_SEP; ///< ':'
188188
IRTEXT_CONST_STRING(kSpaceLBraceStr, D_STR_SPACELBRACE); ///< " ("
189189
IRTEXT_CONST_STRING(kCommaSpaceStr, D_STR_COMMASPACE); ///< ", "
190190
IRTEXT_CONST_STRING(kColonSpaceStr, D_STR_COLONSPACE); ///< ": "
191+
IRTEXT_CONST_STRING(kDashStr, D_STR_DASH); ///< "-"
191192

192193
// IRutils
193194
// - Time

src/IRtext.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ extern IRTEXT_CONST_PTR(kComfortStr);
5050
extern IRTEXT_CONST_PTR(kCommandStr);
5151
extern IRTEXT_CONST_PTR(kCommaSpaceStr);
5252
extern IRTEXT_CONST_PTR(kCoolStr);
53+
extern IRTEXT_CONST_PTR(kDashStr);
5354
extern IRTEXT_CONST_PTR(kDaysStr);
5455
extern IRTEXT_CONST_PTR(kDayStr);
5556
extern IRTEXT_CONST_PTR(kDisplayTempStr);

src/IRutils.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -540,7 +540,18 @@ namespace irutils {
540540
/// @return The resulting String.
541541
String addBoolToString(const bool value, const String label,
542542
const bool precomma) {
543-
return addLabeledString((value ? kOnStr : kOffStr), label, precomma);
543+
return addLabeledString(value ? kOnStr : kOffStr, label, precomma);
544+
}
545+
546+
/// Create a String with a colon separated toggle flag suitable for Humans.
547+
/// e.g. "Light: Toggle", "Light: -"
548+
/// @param[in] toggle The value of the toggle to come after the label.
549+
/// @param[in] label The label to precede the value.
550+
/// @param[in] precomma Should the output string start with ", " or not?
551+
/// @return The resulting String.
552+
String addToggleToString(const bool toggle, const String label,
553+
const bool precomma) {
554+
return addLabeledString(toggle ? kToggleStr : kDashStr, label, precomma);
544555
}
545556

546557
/// Create a String with a colon separated labeled Integer suitable for

src/IRutils.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ float fahrenheitToCelsius(const float deg);
4848
namespace irutils {
4949
String addBoolToString(const bool value, const String label,
5050
const bool precomma = true);
51+
String addToggleToString(const bool toggle, const String label,
52+
const bool precomma = true);
5153
String addIntToString(const uint16_t value, const String label,
5254
const bool precomma = true);
5355
String addSignedIntToString(const int16_t value, const String label,

src/ir_Electra.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ using irutils::addLabeledString;
2828
using irutils::addModeToString;
2929
using irutils::addFanToString;
3030
using irutils::addTempToString;
31+
using irutils::addToggleToString;
3132

3233
#if SEND_ELECTRA_AC
3334
/// Send a Electra A/C formatted message.
@@ -351,8 +352,7 @@ String IRElectraAc::toString(void) const {
351352
kElectraAcFanMed);
352353
result += addBoolToString(getSwingV(), kSwingVStr);
353354
result += addBoolToString(getSwingH(), kSwingHStr);
354-
result += addLabeledString(getLightToggle() ? String(kToggleStr)
355-
: String("-"), kLightStr);
355+
result += addToggleToString(getLightToggle(), kLightStr);
356356
result += addBoolToString(_.Clean, kCleanStr);
357357
result += addBoolToString(_.Turbo, kTurboStr);
358358
return result;

src/ir_Goodweather.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ using irutils::addLabeledString;
2121
using irutils::addModeToString;
2222
using irutils::addFanToString;
2323
using irutils::addTempToString;
24+
using irutils::addToggleToString;
2425

2526
#if SEND_GOODWEATHER
2627
/// Send a Goodweather HVAC formatted message.
@@ -347,12 +348,9 @@ String IRGoodweatherAc::toString(void) const {
347348
kGoodweatherFanAuto, kGoodweatherFanAuto,
348349
kGoodweatherFanMed);
349350

350-
result += addLabeledString(_.Turbo ? String(kToggleStr)
351-
: String("-"), kTurboStr);
352-
result += addLabeledString(_.Light ? String(kToggleStr)
353-
: String("-"), kLightStr);
354-
result += addLabeledString(_.Sleep ? String(kToggleStr)
355-
: String("-"), kSleepStr);
351+
result += addToggleToString(_.Turbo, kTurboStr);
352+
result += addToggleToString(_.Light, kLightStr);
353+
result += addToggleToString(_.Sleep, kSleepStr);
356354
result += addIntToString(_.Swing, kSwingStr);
357355
result += kSpaceLBraceStr;
358356
switch (_.Swing) {

src/ir_Sharp.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ using irutils::addModeToString;
4747
using irutils::addModelToString;
4848
using irutils::addSwingVToString;
4949
using irutils::addTempToString;
50+
using irutils::addToggleToString;
5051
using irutils::minsToString;
5152

5253
// Also used by Denon protocol
@@ -920,14 +921,10 @@ String IRSharpAc::toString(void) const {
920921
switch (model) {
921922
case sharp_ac_remote_model_t::A705:
922923
case sharp_ac_remote_model_t::A903:
923-
result += addLabeledString(getLightToggle() ? String(kToggleStr)
924-
: String("-"),
925-
kLightStr);
924+
result += addToggleToString(getLightToggle(), kLightStr);
926925
break;
927926
default:
928-
result += addLabeledString(getEconoToggle() ? String(kToggleStr)
929-
: String("-"),
930-
kEconoStr);
927+
result += addToggleToString(getEconoToggle(), kEconoStr);
931928
}
932929
result += addBoolToString(_.Clean, kCleanStr);
933930
if (_.TimerEnabled)

src/ir_Transcold.cpp

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ using irutils::addIntToString;
2929
using irutils::addLabeledString;
3030
using irutils::addModeToString;
3131
using irutils::addTempToString;
32-
32+
using irutils::addToggleToString;
3333

3434
#if SEND_TRANSCOLD
3535
/// Send a Transcold message
@@ -391,13 +391,7 @@ String IRTranscoldAc::toString(void) const {
391391
result += addBoolToString(getPower(), kPowerStr, false);
392392
if (!getPower()) return result; // If it's off, there is no other info.
393393
// Special modes.
394-
if (getSwing()) {
395-
result += kCommaSpaceStr;
396-
result += kSwingStr;
397-
result += kColonSpaceStr;
398-
result += kToggleStr;
399-
return result;
400-
}
394+
if (getSwing()) return result + addToggleToString(true, kSwingStr);
401395
result += addModeToString(getMode(), kTranscoldAuto, kTranscoldCool,
402396
kTranscoldHeat, kTranscoldDry, kTranscoldFan);
403397
result += addIntToString(_.Fan, kFanStr);

src/locale/defaults.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,9 @@
452452
#ifndef D_STR_COLONSPACE
453453
#define D_STR_COLONSPACE ": "
454454
#endif // D_STR_COLONSPACE
455+
#ifndef D_STR_DASH
456+
#define D_STR_DASH "-"
457+
#endif // D_STR_DASH
455458

456459
#ifndef D_STR_DAY
457460
#define D_STR_DAY "Day"

0 commit comments

Comments
 (0)