From b99fe9345ed823cc575cb4f868098db5d5c203c1 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Fri, 5 Dec 2014 21:04:09 -0600 Subject: [PATCH] auto-sync --- firmware/config/engines/mazda_miata.cpp | 3 +++ firmware/controllers/core/le_functions.cpp | 3 ++- firmware/controllers/core/le_functions.h | 2 +- .../controllers/core/logic_expression.cpp | 27 ++++++++++++------- firmware/controllers/core/logic_expression.h | 5 +++- unit_tests/test_logic_expression.cpp | 2 +- 6 files changed, 29 insertions(+), 13 deletions(-) diff --git a/firmware/config/engines/mazda_miata.cpp b/firmware/config/engines/mazda_miata.cpp index 5b3c710a88..965ea02e62 100644 --- a/firmware/config/engines/mazda_miata.cpp +++ b/firmware/config/engines/mazda_miata.cpp @@ -367,6 +367,9 @@ void setMiata1994_s(engine_configuration_s *engineConfiguration, board_configura boardConfiguration->injectionPins[1] = GPIOE_2; // injector #2 boardConfiguration->injectionPins[2] = GPIOB_8; // injector #3 boardConfiguration->injectionPins[3] = GPIOB_7; // injector #4 + + boardConfiguration->fsioPins[0] = GPIOD_11; + strcpy(boardConfiguration->le_formulas[0], "coolant 80 >"); } /** diff --git a/firmware/controllers/core/le_functions.cpp b/firmware/controllers/core/le_functions.cpp index 8e2ddce4b8..5414f6c430 100644 --- a/firmware/controllers/core/le_functions.cpp +++ b/firmware/controllers/core/le_functions.cpp @@ -26,9 +26,10 @@ static LENameOrdinalPair leAcToggle(LE_METHOD_AC_TOGGLE, "ac_on_switch"); static LENameOrdinalPair leFanOnSetting(LE_METHOD_FAN_ON_SETTING, "fan_on_setting"); static LENameOrdinalPair leFanOffSetting(LE_METHOD_FAN_OFF_SETTING, "fan_off_setting"); static LENameOrdinalPair leTimeSinceBoot(LE_METHOD_TIME_SINCE_BOOT, "time_since_boot"); +static LENameOrdinalPair leFsioSsetting(LE_METHOD_FSIO_SETTING, "fsio_setting"); #if EFI_PROD_CODE || EFI_SIMULATOR -float getLEValue(Engine *engine, le_action_e action) { +float getLEValue(Engine *engine, calc_stack_t *s, le_action_e action) { efiAssert(engine!=NULL, "getLEValue", NAN); switch (action) { case LE_METHOD_FAN: diff --git a/firmware/controllers/core/le_functions.h b/firmware/controllers/core/le_functions.h index b23fbefd3d..27f57aa4a8 100644 --- a/firmware/controllers/core/le_functions.h +++ b/firmware/controllers/core/le_functions.h @@ -28,6 +28,6 @@ */ #define FAN_CONTROL_LOGIC "fan coolant fan_off_setting > & coolant fan_on_setting > OR" -float getLEValue(Engine *engine, le_action_e action); +float getLEValue(Engine *engine, calc_stack_t *s, le_action_e action); #endif /* LE_FUNCTIONS_H_ */ diff --git a/firmware/controllers/core/logic_expression.cpp b/firmware/controllers/core/logic_expression.cpp index 7aa13bdf08..b943451294 100644 --- a/firmware/controllers/core/logic_expression.cpp +++ b/firmware/controllers/core/logic_expression.cpp @@ -157,7 +157,7 @@ void LECalculator::doJob(Engine *engine, LEElement *element) { stack.push(v1 > v2); } - break; + break; case LE_OPERATOR_ADDITION: { // elements on stack are in reverse order float v2 = pop(LE_OPERATOR_MORE); @@ -165,7 +165,7 @@ void LECalculator::doJob(Engine *engine, LEElement *element) { stack.push(v1 + v2); } - break; + break; case LE_OPERATOR_SUBSTRACTION: { // elements on stack are in reverse order float v2 = pop(LE_OPERATOR_MORE); @@ -173,7 +173,7 @@ void LECalculator::doJob(Engine *engine, LEElement *element) { stack.push(v1 - v2); } - break; + break; case LE_OPERATOR_MULTIPLICATION: { // elements on stack are in reverse order float v2 = pop(LE_OPERATOR_MORE); @@ -181,7 +181,7 @@ void LECalculator::doJob(Engine *engine, LEElement *element) { stack.push(v1 * v2); } - break; + break; case LE_OPERATOR_DIVISION: { // elements on stack are in reverse order float v2 = pop(LE_OPERATOR_MORE); @@ -213,25 +213,34 @@ void LECalculator::doJob(Engine *engine, LEElement *element) { float vCond = pop(LE_METHOD_IF); stack.push(vCond != 0 ? vTrue : vFalse); } - break; + break; case LE_METHOD_MAX: { float v2 = pop(LE_METHOD_MAX); float v1 = pop(LE_METHOD_MAX); stack.push(maxF(v1, v2)); } - break; + break; case LE_METHOD_MIN: { float v2 = pop(LE_METHOD_MIN); float v1 = pop(LE_METHOD_MIN); stack.push(minF(v1, v2)); } - break; - + break; + case LE_METHOD_FSIO_SETTING: { + float i = pop(LE_METHOD_FSIO_SETTING); + int index = (int) i; + if (index >= 0 && index < LE_COMMAND_COUNT) { + stack.push(engine->engineConfiguration->bc.fsio_setting[index]); + } else { + stack.push(NAN); + } + } + break; case LE_UNDEFINED: firmwareError("Undefined not expected here"); break; default: - stack.push(getLEValue(engine, element->action)); + stack.push(getLEValue(engine, &stack, element->action)); } } diff --git a/firmware/controllers/core/logic_expression.h b/firmware/controllers/core/logic_expression.h index 3c5022fedc..54ead9598c 100644 --- a/firmware/controllers/core/logic_expression.h +++ b/firmware/controllers/core/logic_expression.h @@ -42,6 +42,7 @@ typedef enum { LE_METHOD_INTAKE_AIR = 108, LE_METHOD_VBATT = 109, LE_METHOD_AC_TOGGLE = 110, + LE_METHOD_FSIO_SETTING = 111, Force_4b_le_action = ENUM_SIZE_HACK, @@ -76,6 +77,8 @@ private: #define MAX_STACK_DEPTH 32 +typedef FLStack calc_stack_t; + class LECalculator { public: LECalculator(); @@ -89,7 +92,7 @@ private: void doJob(Engine *engine, LEElement *element); float pop(le_action_e action); LEElement *first; - FLStack stack; + calc_stack_t stack; }; class LENameOrdinalPair { diff --git a/unit_tests/test_logic_expression.cpp b/unit_tests/test_logic_expression.cpp index 814c84f443..86d16f30a7 100644 --- a/unit_tests/test_logic_expression.cpp +++ b/unit_tests/test_logic_expression.cpp @@ -21,7 +21,7 @@ static float mockFan; static float mockRpm; static float mockTimeSinceBoot; -float getLEValue(Engine *engine, le_action_e action) { +float getLEValue(Engine *engine, calc_stack_t *s, le_action_e action) { switch(action) { case LE_METHOD_FAN: return mockFan;