diff --git a/lambda-test/rules-test.c b/lambda-test/rules-test.c index e35d79a..e1a8fb4 100644 --- a/lambda-test/rules-test.c +++ b/lambda-test/rules-test.c @@ -66,12 +66,6 @@ assertFalse(rules[0].fired); assertTrue(50 == airgate); - resetRules(true); - // state = burning; - reason(meas); - assertTrue(rules[0].fired); - assertTrue(50 == airgate); - cancelAlert(); return true; @@ -165,9 +159,9 @@ static bool testTooRich(void) { - Measurement meas = {0, 0, 0, 0}; + Measurement meas = {0, 0, 0, 1000}; - setHeaterState(heaterStateReady); + setHeaterState(heaterStateOn); meas.tempI = TEMP_FIRE_OUT; meas.lambda = LAMBDA_MAX; @@ -210,9 +204,9 @@ static bool testTooLean(void) { - Measurement meas = {0, 0, 0, 0}; + Measurement meas = {0, 0, 0, 1000}; - setHeaterState(heaterStateReady); + setHeaterState(heaterStateOn); meas.tempI = TEMP_AIRGATE_50; meas.lambda = LAMBDA_TOO_LEAN + 1; @@ -286,10 +280,12 @@ static bool testWarmStart(void) { - Measurement meas = {101, 0, 0, 0}; + Measurement meas = {TEMP_AIRGATE_50, 0, 0, 0}; + + setHeaterState(heaterStateOff); resetRules(true); - setHeaterState(heaterStateOff); + rules[6].fired = false; airgate = 50; reason(meas); assertTrue(50 == airgate); @@ -297,7 +293,7 @@ assertFalse(rules[6].fired); resetRules(true); - setHeaterState(heaterStateOff); + rules[6].fired = false; state = firing_up; reason(meas); assertTrue(100 == airgate); diff --git a/lambda/rules.c b/lambda/rules.c index 7bb027b..d70db32 100644 --- a/lambda/rules.c +++ b/lambda/rules.c @@ -142,7 +142,7 @@ * TODO make a complete reset including time? */ static void warmStart(bool* const fired, Measurement const meas) { - if (! *fired && (state == firing_up) && + if (! *fired && state == firing_up && meas.tempI > TEMP_FIRE_OUT && tempIMax >= TEMP_AIRGATE_50) { resetRules(false); airgate = 100; @@ -247,6 +247,8 @@ // called about every second void reason(Measurement meas) { + tempIMax = MAX(tempIMax, meas.tempI); + // rules applied at each measurement size_t heaterRulesSize = sizeof(heaterRules) / sizeof(heaterRules[0]); for (size_t i = 0; i < heaterRulesSize; i++) { @@ -282,7 +284,6 @@ } measCount++; - tempIMax = MAX(tempIMax, meas.tempI); } void resetRules(bool const intState) { diff --git a/lambda/strings.c b/lambda/strings.c index 1f67fba..68e384b 100644 --- a/lambda/strings.c +++ b/lambda/strings.c @@ -9,16 +9,17 @@ #include #include +#include "strings.h" void split(char* const string, char* const delim, char* fields[], size_t const size) { - size_t index = 0; + size_t i = 0; char* token = strtok(string, delim); - while (token != NULL && index < size) { - fields[index++] = token; + while (token != NULL && i < size) { + fields[i++] = token; token = strtok(NULL, delim); } - for (; index < size; index++) { - fields[index] = '\0'; + for (; i < size; i++) { + fields[i] = '\0'; } } diff --git a/lambda/strings.h b/lambda/strings.h index bed0f76..d6d2e4b 100644 --- a/lambda/strings.h +++ b/lambda/strings.h @@ -14,6 +14,6 @@ * Splits the given string at the given delimiter and puts the split strings in * the given array with the given size. */ -void split(char* string, char* delim, char* fields[], uint8_t size); +void split(char* string, char* delim, char* fields[], size_t size); #endif /* STRINGS_H_ */