From 01cbb67f1003a5e36a9253ea00d7b55faebfff0b Mon Sep 17 00:00:00 2001 From: rusEfi Date: Fri, 17 Oct 2014 15:05:16 -0500 Subject: [PATCH] auto-sync --- firmware/controllers/algo/engine.cpp | 27 ++++++++++++++--- firmware/controllers/algo/engine.h | 4 ++- .../controllers/algo/engine_configuration.cpp | 2 ++ .../controllers/algo/engine_configuration.h | 6 +++- firmware/controllers/sensors/tps.cpp | 17 ++++++++--- firmware/controllers/trigger/rpm_calculator.h | 2 -- unit_tests/test_trigger_decoder.cpp | 29 ++++++++++++++++++- 7 files changed, 74 insertions(+), 13 deletions(-) diff --git a/firmware/controllers/algo/engine.cpp b/firmware/controllers/algo/engine.cpp index 40c78d990a..711aa50a46 100644 --- a/firmware/controllers/algo/engine.cpp +++ b/firmware/controllers/algo/engine.cpp @@ -83,24 +83,43 @@ void Engine::watchdog() { } StartupFuelPumping::StartupFuelPumping() { - + isTpsAbove50 = false; + pumpsCounter = 0; } -void StartupFuelPumping::setPumpsCounter(int newValue) { +void StartupFuelPumping::setPumpsCounter(engine_configuration_s *engineConfiguration, int newValue) { if (pumpsCounter != newValue) { pumpsCounter = newValue; + + if(pumpsCounter==PUMPS_TO_PRIME) { +#if EFI_PROD_CODE || EFI_SIMULATOR + scheduleMsg(&logger, "let's squirt prime pulse %f", pumpsCounter); +#endif + pumpsCounter = 0; + } else { +#if EFI_PROD_CODE || EFI_SIMULATOR + scheduleMsg(&logger, "setPumpsCounter %d", pumpsCounter); +#endif + + } } } void StartupFuelPumping::update(Engine *engine) { + engine_configuration_s *engineConfiguration = engine->engineConfiguration; if (engine->rpmCalculator->rpm() == 0) { - bool isAbove50 = getTPS(engine->engineConfiguration) >= 50; + bool isTpsAbove50 = getTPS(engineConfiguration) >= 50; + + if (this->isTpsAbove50 != isTpsAbove50) { + setPumpsCounter(engineConfiguration, pumpsCounter + 1); + } } else { /** * Engine is not stopped - not priming pumping mode */ - setPumpsCounter(0); + setPumpsCounter(engineConfiguration, 0); + isTpsAbove50 = false; } } diff --git a/firmware/controllers/algo/engine.h b/firmware/controllers/algo/engine.h index 43b9626ec8..309403e6e7 100644 --- a/firmware/controllers/algo/engine.h +++ b/firmware/controllers/algo/engine.h @@ -48,6 +48,8 @@ private: bool stopPins(); }; +#define PUMPS_TO_PRIME 3 + class StartupFuelPumping { public: StartupFuelPumping(); @@ -55,7 +57,7 @@ public: bool isTpsAbove50; int pumpsCounter; private: - void setPumpsCounter(int newValue); + void setPumpsCounter(engine_configuration_s *engineConfiguration, int newValue); }; #endif /* ENGINE_H_ */ diff --git a/firmware/controllers/algo/engine_configuration.cpp b/firmware/controllers/algo/engine_configuration.cpp index a7ee853044..635777d5e8 100644 --- a/firmware/controllers/algo/engine_configuration.cpp +++ b/firmware/controllers/algo/engine_configuration.cpp @@ -256,6 +256,8 @@ void setDefaultConfiguration(engine_configuration_s *engineConfiguration, board_ engineConfiguration->engineCycle = 720; + engineConfiguration->primingSquirtDurationMs = 5; + engineConfiguration->isInjectionEnabled = true; engineConfiguration->isIgnitionEnabled = true; engineConfiguration->isCylinderCleanupEnabled = true; diff --git a/firmware/controllers/algo/engine_configuration.h b/firmware/controllers/algo/engine_configuration.h index 4c71547ba7..3ec6e5d019 100644 --- a/firmware/controllers/algo/engine_configuration.h +++ b/firmware/controllers/algo/engine_configuration.h @@ -15,6 +15,8 @@ #include "can_header.h" #include "rusefi_enums.h" +#define MOCK_UNDEFINED -1 + typedef struct { float coolantTempMinC; float coolantTempMaxC; @@ -463,7 +465,9 @@ typedef struct { short int tpsErrorLowValue; short int tpsErrorHighValue; - int unused3[24]; + float primingSquirtDurationMs; + + int unused3[23]; } engine_configuration_s; diff --git a/firmware/controllers/sensors/tps.cpp b/firmware/controllers/sensors/tps.cpp index a260ac3dcd..b3dadea505 100644 --- a/firmware/controllers/sensors/tps.cpp +++ b/firmware/controllers/sensors/tps.cpp @@ -4,9 +4,14 @@ #include "engine_configuration.h" #include "interpolation.h" #include "adc_inputs.h" +#include "allsensors.h" extern engine_configuration_s *engineConfiguration; +#if !EFI_PROD_CODE + int mockTps; +#endif + /** * We are using one instance for read and another for modification, this is how we get lock-free thread-safety * @@ -48,12 +53,12 @@ float getTpsRateOfChange(void) { * * */ static float getTpsValue(engine_configuration_s *engineConfiguration, int adc) { - if (adc < engineConfiguration->tpsMin) { + if (adc < engineConfiguration->tpsMin) { return 0.0f; - } + } if (adc > engineConfiguration->tpsMax) { return 100.0f; - } + } // todo: double comparison using EPS if (engineConfiguration->tpsMin == engineConfiguration->tpsMax) { firmwareError("Invalid TPS configuration: same value"); @@ -75,6 +80,10 @@ float getTPSVoltage(void) { * wants a TPS value. */ int getTPS10bitAdc(void) { +#if !EFI_PROD_CODE + if (mockTps != MOCK_UNDEFINED) + return mockTps; +#endif int adc = getAdcValue(engineConfiguration->tpsAdcChannel); return (int) adc / 4; // Only for TunerStudio compatibility. Max TS adc value in 1023 } @@ -106,5 +115,5 @@ float getTPS(engine_configuration_s *engineConfiguration) { int convertVoltageTo10bitADC(float voltage) { // divided by 2 because of voltage divider, then converted into 10bit ADC value (TunerStudio format) - return (int)(voltage / 2 * 1024 / 3.3); + return (int) (voltage / 2 * 1024 / 3.3); } diff --git a/firmware/controllers/trigger/rpm_calculator.h b/firmware/controllers/trigger/rpm_calculator.h index 7344f7f2b1..20bc5b335d 100644 --- a/firmware/controllers/trigger/rpm_calculator.h +++ b/firmware/controllers/trigger/rpm_calculator.h @@ -22,8 +22,6 @@ #ifdef __cplusplus #include "engine.h" -#define MOCK_UNDEFINED -1 - class RpmCalculator { public: #if !EFI_PROD_CODE diff --git a/unit_tests/test_trigger_decoder.cpp b/unit_tests/test_trigger_decoder.cpp index fe5882e13c..2617fcd0d7 100644 --- a/unit_tests/test_trigger_decoder.cpp +++ b/unit_tests/test_trigger_decoder.cpp @@ -342,6 +342,8 @@ extern EventQueue schedulingQueue; // this is a very dirty and sad hack. todo: eliminate extern Engine engine; +extern int mockTps; + static void testStartupFuelPumping(void) { EngineTestHelper eth(FORD_INLINE_6_1995); @@ -354,10 +356,35 @@ static void testStartupFuelPumping(void) { engine->rpmCalculator->mockRpm = 0; engine->engineConfiguration->tpsMin = 0; - engine->engineConfiguration->tpsMin = 5; + engine->engineConfiguration->tpsMax = 10; + + mockTps = 6; + sf.update(engine); + assertEqualsM("pc#1", 1, sf.pumpsCounter); + + mockTps = 3; + sf.update(engine); + assertEqualsM("pc#2", 1, sf.pumpsCounter); sf.update(engine); + assertEqualsM("pc#3", 1, sf.pumpsCounter); + engine->rpmCalculator->mockRpm = 10; + sf.update(engine); + assertEqualsM("pc#4", 0, sf.pumpsCounter); + + mockTps = 7; + engine->rpmCalculator->mockRpm = 0; + sf.update(engine); + assertEqualsM("pc#5", 1, sf.pumpsCounter); + + mockTps = 3; + sf.update(engine); + assertEqualsM("pc#6", 1, sf.pumpsCounter); + + mockTps = 7; + sf.update(engine); + assertEqualsM("pc#7", 2, sf.pumpsCounter); } static void testRpmCalculator(void) {