Update xdrv_10_rules.ino

Move const to flash
This commit is contained in:
Theo Arends 2019-02-05 17:45:35 +01:00
parent 3cb39bec24
commit ee2660b2bc

View File

@ -78,26 +78,17 @@
#define D_JSON_INITIATED "Initiated" #define D_JSON_INITIATED "Initiated"
#define COMPARE_OPERATOR_NONE -1 #define COMPARE_OPERATOR_NONE -1
#define COMPARE_OPERATOR_EQUAL 0 #define COMPARE_OPERATOR_EQUAL 0
#define COMPARE_OPERATOR_BIGGER 1 #define COMPARE_OPERATOR_BIGGER 1
#define COMPARE_OPERATOR_SMALLER 2 #define COMPARE_OPERATOR_SMALLER 2
#define COMPARE_OPERATOR_EXACT_DIVISION 3 #define COMPARE_OPERATOR_EXACT_DIVISION 3
#define COMPARE_OPERATOR_NUMBER_EQUAL 4 #define COMPARE_OPERATOR_NUMBER_EQUAL 4
#define COMPARE_OPERATOR_NOT_EQUAL 5 #define COMPARE_OPERATOR_NOT_EQUAL 5
#define COMPARE_OPERATOR_BIGGER_EQUAL 6 #define COMPARE_OPERATOR_BIGGER_EQUAL 6
#define COMPARE_OPERATOR_SMALLER_EQUAL 7 #define COMPARE_OPERATOR_SMALLER_EQUAL 7
#define MAXIMUM_COMPARE_OPERATOR COMPARE_OPERATOR_SMALLER_EQUAL #define MAXIMUM_COMPARE_OPERATOR COMPARE_OPERATOR_SMALLER_EQUAL
char* compare_operators[] = { const char kCompareOperators[] PROGMEM = "=\0>\0<\0|\0==!=>=<=";
"=",
">",
"<",
"|",
"==",
"!=",
">=",
"<="
};
enum RulesCommands { CMND_RULE, CMND_RULETIMER, CMND_EVENT, CMND_VAR, CMND_MEM, CMND_ADD, CMND_SUB, CMND_MULT, CMND_SCALE, CMND_CALC_RESOLUTION }; enum RulesCommands { CMND_RULE, CMND_RULETIMER, CMND_EVENT, CMND_VAR, CMND_MEM, CMND_ADD, CMND_SUB, CMND_MULT, CMND_SCALE, CMND_CALC_RESOLUTION };
const char kRulesCommands[] PROGMEM = D_CMND_RULE "|" D_CMND_RULETIMER "|" D_CMND_EVENT "|" D_CMND_VAR "|" D_CMND_MEM "|" D_CMND_ADD "|" D_CMND_SUB "|" D_CMND_MULT "|" D_CMND_SCALE "|" D_CMND_CALC_RESOLUTION ; const char kRulesCommands[] PROGMEM = D_CMND_RULE "|" D_CMND_RULETIMER "|" D_CMND_EVENT "|" D_CMND_VAR "|" D_CMND_MEM "|" D_CMND_ADD "|" D_CMND_SUB "|" D_CMND_MULT "|" D_CMND_SCALE "|" D_CMND_CALC_RESOLUTION ;
@ -149,9 +140,11 @@ bool RulesRuleMatch(uint8_t rule_set, String &event, String &rule)
String rule_name = rule.substring(pos +1); // "CURRENT>0.100" or "BOOT" or "%var1%" or "MINUTE|5" String rule_name = rule.substring(pos +1); // "CURRENT>0.100" or "BOOT" or "%var1%" or "MINUTE|5"
char compare_operator[3];
int8_t compare = COMPARE_OPERATOR_NONE; int8_t compare = COMPARE_OPERATOR_NONE;
for (int8_t i=MAXIMUM_COMPARE_OPERATOR; i>=0; i--) { for (int8_t i = MAXIMUM_COMPARE_OPERATOR; i >= 0; i--) {
if ((pos = rule_name.indexOf(compare_operators[i])) > 0) { snprintf_P(compare_operator, sizeof(compare_operator), kCompareOperators + (i *2));
if ((pos = rule_name.indexOf(compare_operator)) > 0) {
compare = i; compare = i;
break; break;
} }
@ -160,7 +153,7 @@ bool RulesRuleMatch(uint8_t rule_set, String &event, String &rule)
char rule_svalue[CMDSZ] = { 0 }; char rule_svalue[CMDSZ] = { 0 };
double rule_value = 0; double rule_value = 0;
if (compare != COMPARE_OPERATOR_NONE) { if (compare != COMPARE_OPERATOR_NONE) {
String rule_param = rule_name.substring(pos + strlen(compare_operators[compare])); String rule_param = rule_name.substring(pos + strlen(compare_operator));
for (uint8_t i = 0; i < MAX_RULE_VARS; i++) { for (uint8_t i = 0; i < MAX_RULE_VARS; i++) {
snprintf_P(stemp, sizeof(stemp), PSTR("%%VAR%d%%"), i +1); snprintf_P(stemp, sizeof(stemp), PSTR("%%VAR%d%%"), i +1);
if (rule_param.startsWith(stemp)) { if (rule_param.startsWith(stemp)) {