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 COMPARE_OPERATOR_NONE -1
#define COMPARE_OPERATOR_EQUAL 0
#define COMPARE_OPERATOR_BIGGER 1
#define COMPARE_OPERATOR_SMALLER 2
#define COMPARE_OPERATOR_NONE -1
#define COMPARE_OPERATOR_EQUAL 0
#define COMPARE_OPERATOR_BIGGER 1
#define COMPARE_OPERATOR_SMALLER 2
#define COMPARE_OPERATOR_EXACT_DIVISION 3
#define COMPARE_OPERATOR_NUMBER_EQUAL 4
#define COMPARE_OPERATOR_NOT_EQUAL 5
#define COMPARE_OPERATOR_BIGGER_EQUAL 6
#define COMPARE_OPERATOR_SMALLER_EQUAL 7
#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 };
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"
char compare_operator[3];
int8_t compare = COMPARE_OPERATOR_NONE;
for (int8_t i=MAXIMUM_COMPARE_OPERATOR; i>=0; i--) {
if ((pos = rule_name.indexOf(compare_operators[i])) > 0) {
for (int8_t i = MAXIMUM_COMPARE_OPERATOR; i >= 0; i--) {
snprintf_P(compare_operator, sizeof(compare_operator), kCompareOperators + (i *2));
if ((pos = rule_name.indexOf(compare_operator)) > 0) {
compare = i;
break;
}
@ -160,7 +153,7 @@ bool RulesRuleMatch(uint8_t rule_set, String &event, String &rule)
char rule_svalue[CMDSZ] = { 0 };
double rule_value = 0;
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++) {
snprintf_P(stemp, sizeof(stemp), PSTR("%%VAR%d%%"), i +1);
if (rule_param.startsWith(stemp)) {