diff --git a/firmware/controllers/core/logic_expression.cpp b/firmware/controllers/core/logic_expression.cpp index 984ab45b0b..e64c340705 100644 --- a/firmware/controllers/core/logic_expression.cpp +++ b/firmware/controllers/core/logic_expression.cpp @@ -78,7 +78,7 @@ static bool float2bool(float v) { return v != 0; } -void LECalculator::doJob(LEElement *element) { +void LECalculator::doJob(Engine *engine, LEElement *element) { switch (element->action) { case LE_NUMERIC_VALUE: @@ -143,13 +143,13 @@ void LECalculator::doJob(LEElement *element) { } } -float LECalculator::getValue() { +float LECalculator::getValue(Engine *engine) { LEElement *element = first; stack.reset(); while (element != NULL) { - doJob(element); + doJob(engine, element); element = element->next; } diff --git a/firmware/controllers/core/logic_expression.h b/firmware/controllers/core/logic_expression.h index 571a5549b1..eb45c0b167 100644 --- a/firmware/controllers/core/logic_expression.h +++ b/firmware/controllers/core/logic_expression.h @@ -70,13 +70,13 @@ private: class LECalculator { public: LECalculator(); - float getValue(); + float getValue(Engine *engine); void add(LEElement *element); void reset(); void reset(LEElement *element); private: - void doJob(LEElement *element); + void doJob(Engine *engine, LEElement *element); LEElement *first; FLStack stack; }; diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index 15455f09c9..b494e5cb75 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -82,7 +82,7 @@ board_configuration_s *boardConfiguration = &persistentState.persistentConfigura #define FUEL_PUMP_DELAY (4 * CH_FREQUENCY) static VirtualTimer everyMsTimer; -static VirtualTimer fuelPumpTimer; +//static VirtualTimer fuelPumpTimer; static Logging logger; @@ -185,6 +185,11 @@ static void onEvenyGeneralMilliseconds(void *arg) { engine.watchdog(); engine.updateSlowSensors(); + if(boardConfiguration->fuelPumpPin != GPIO_NONE && engineConfiguration->isFuelPumpEnabled) { + calc.reset(fuelPumpLogic); + //int value = calc.getValue()) + } + updateErrorCodes(); fanRelayControl(); @@ -202,33 +207,33 @@ static void initPeriodicEvents(void) { &onEvenyGeneralMilliseconds, 0); } -static void fuelPumpOff(void *arg) { - (void)arg; - if (getOutputPinValue(FUEL_PUMP_RELAY)) - scheduleMsg(&logger, "fuelPump OFF at %s%d", hwPortname(boardConfiguration->fuelPumpPin)); - turnOutputPinOff(FUEL_PUMP_RELAY); -} +//static void fuelPumpOff(void *arg) { +// (void)arg; +// if (getOutputPinValue(FUEL_PUMP_RELAY)) +// scheduleMsg(&logger, "fuelPump OFF at %s%d", hwPortname(boardConfiguration->fuelPumpPin)); +// turnOutputPinOff(FUEL_PUMP_RELAY); +//} -static void fuelPumpOn(trigger_event_e signal, uint32_t index, void *arg) { - (void)arg; - if (index != 0) - return; // let's not abuse the timer - one time per revolution would be enough - // todo: the check about GPIO_NONE should be somewhere else! - if (!getOutputPinValue(FUEL_PUMP_RELAY) && boardConfiguration->fuelPumpPin != GPIO_NONE) - scheduleMsg(&logger, "fuelPump ON at %s", hwPortname(boardConfiguration->fuelPumpPin)); - turnOutputPinOn(FUEL_PUMP_RELAY); - /** - * the idea of this implementation is that we turn the pump when the ECU turns on or - * if the shafts are spinning and then we are constantly postponing the time when we - * will turn it off. Only if the shafts stop the turn off would actually happen. - */ - chVTSetAny(&fuelPumpTimer, FUEL_PUMP_DELAY, &fuelPumpOff, 0); -} +//static void fuelPumpOn(trigger_event_e signal, uint32_t index, void *arg) { +// (void)arg; +// if (index != 0) +// return; // let's not abuse the timer - one time per revolution would be enough +// // todo: the check about GPIO_NONE should be somewhere else! +// if (!getOutputPinValue(FUEL_PUMP_RELAY) && boardConfiguration->fuelPumpPin != GPIO_NONE) +// scheduleMsg(&logger, "fuelPump ON at %s", hwPortname(boardConfiguration->fuelPumpPin)); +// turnOutputPinOn(FUEL_PUMP_RELAY); +// /** +// * the idea of this implementation is that we turn the pump when the ECU turns on or +// * if the shafts are spinning and then we are constantly postponing the time when we +// * will turn it off. Only if the shafts stop the turn off would actually happen. +// */ +// chVTSetAny(&fuelPumpTimer, FUEL_PUMP_DELAY, &fuelPumpOff, 0); +//} -static void initFuelPump(void) { - addTriggerEventListener(&fuelPumpOn, "fuel pump", NULL); - fuelPumpOn(SHAFT_PRIMARY_UP, 0, NULL); -} +//static void initFuelPump(void) { +// addTriggerEventListener(&fuelPumpOn, "fuel pump", NULL); +// fuelPumpOn(SHAFT_PRIMARY_UP, 0, NULL); +//} char * getPinNameByAdcChannel(adc_channel_e hwChannel, char *buffer) { strcpy((char*) buffer, portname(getAdcChannelPort(hwChannel))); @@ -342,7 +347,7 @@ void initEngineContoller(void) { #if EFI_FUEL_PUMP if (engineConfiguration->isFuelPumpEnabled) { - initFuelPump(); +// initFuelPump(); } #endif diff --git a/unit_tests/test_logic_expression.cpp b/unit_tests/test_logic_expression.cpp index a5d033c5df..cc579492c0 100644 --- a/unit_tests/test_logic_expression.cpp +++ b/unit_tests/test_logic_expression.cpp @@ -24,6 +24,7 @@ float getLEValue(Engine *engine, le_action_e action) { return mockCoolant; default: firmwareError("No value for %d", action); + return NAN; } } @@ -79,7 +80,7 @@ static void testExpression(const char *line, float expected) { assertTrueM("Not NULL expected", element != NULL); LECalculator c; c.add(element); - assertEqualsM(line, expected, c.getValue()); + assertEqualsM(line, expected, c.getValue(NULL)); } void testLogicExpressions(void) { @@ -93,7 +94,7 @@ void testLogicExpressions(void) { value1.init(LE_NUMERIC_VALUE, 123.0); c.add(&value1); - assertEqualsM("123", 123.0, c.getValue()); + assertEqualsM("123", 123.0, c.getValue(NULL)); LEElement value2; value2.init(LE_NUMERIC_VALUE, 321.0); @@ -102,7 +103,7 @@ void testLogicExpressions(void) { LEElement value3; value3.init(LE_OPERATOR_AND); c.add(&value3); - assertEqualsM("123 and 321", 1.0, c.getValue()); + assertEqualsM("123 and 321", 1.0, c.getValue(NULL)); /** * fuel_pump = (time_since_boot < 4 seconds) OR (rpm > 0)