auto-sync

This commit is contained in:
rusEfi 2014-10-17 15:05:16 -05:00
parent 5a4e277f9e
commit 01cbb67f10
7 changed files with 74 additions and 13 deletions

View File

@ -83,24 +83,43 @@ void Engine::watchdog() {
} }
StartupFuelPumping::StartupFuelPumping() { StartupFuelPumping::StartupFuelPumping() {
isTpsAbove50 = false;
pumpsCounter = 0;
} }
void StartupFuelPumping::setPumpsCounter(int newValue) { void StartupFuelPumping::setPumpsCounter(engine_configuration_s *engineConfiguration, int newValue) {
if (pumpsCounter != newValue) { if (pumpsCounter != newValue) {
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) { void StartupFuelPumping::update(Engine *engine) {
engine_configuration_s *engineConfiguration = engine->engineConfiguration;
if (engine->rpmCalculator->rpm() == 0) { 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 { } else {
/** /**
* Engine is not stopped - not priming pumping mode * Engine is not stopped - not priming pumping mode
*/ */
setPumpsCounter(0); setPumpsCounter(engineConfiguration, 0);
isTpsAbove50 = false;
} }
} }

View File

@ -48,6 +48,8 @@ private:
bool stopPins(); bool stopPins();
}; };
#define PUMPS_TO_PRIME 3
class StartupFuelPumping { class StartupFuelPumping {
public: public:
StartupFuelPumping(); StartupFuelPumping();
@ -55,7 +57,7 @@ public:
bool isTpsAbove50; bool isTpsAbove50;
int pumpsCounter; int pumpsCounter;
private: private:
void setPumpsCounter(int newValue); void setPumpsCounter(engine_configuration_s *engineConfiguration, int newValue);
}; };
#endif /* ENGINE_H_ */ #endif /* ENGINE_H_ */

View File

@ -256,6 +256,8 @@ void setDefaultConfiguration(engine_configuration_s *engineConfiguration, board_
engineConfiguration->engineCycle = 720; engineConfiguration->engineCycle = 720;
engineConfiguration->primingSquirtDurationMs = 5;
engineConfiguration->isInjectionEnabled = true; engineConfiguration->isInjectionEnabled = true;
engineConfiguration->isIgnitionEnabled = true; engineConfiguration->isIgnitionEnabled = true;
engineConfiguration->isCylinderCleanupEnabled = true; engineConfiguration->isCylinderCleanupEnabled = true;

View File

@ -15,6 +15,8 @@
#include "can_header.h" #include "can_header.h"
#include "rusefi_enums.h" #include "rusefi_enums.h"
#define MOCK_UNDEFINED -1
typedef struct { typedef struct {
float coolantTempMinC; float coolantTempMinC;
float coolantTempMaxC; float coolantTempMaxC;
@ -463,7 +465,9 @@ typedef struct {
short int tpsErrorLowValue; short int tpsErrorLowValue;
short int tpsErrorHighValue; short int tpsErrorHighValue;
int unused3[24]; float primingSquirtDurationMs;
int unused3[23];
} engine_configuration_s; } engine_configuration_s;

View File

@ -4,9 +4,14 @@
#include "engine_configuration.h" #include "engine_configuration.h"
#include "interpolation.h" #include "interpolation.h"
#include "adc_inputs.h" #include "adc_inputs.h"
#include "allsensors.h"
extern engine_configuration_s *engineConfiguration; 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 * 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) { static float getTpsValue(engine_configuration_s *engineConfiguration, int adc) {
if (adc < engineConfiguration->tpsMin) { if (adc < engineConfiguration->tpsMin) {
return 0.0f; return 0.0f;
} }
if (adc > engineConfiguration->tpsMax) { if (adc > engineConfiguration->tpsMax) {
return 100.0f; return 100.0f;
} }
// todo: double comparison using EPS // todo: double comparison using EPS
if (engineConfiguration->tpsMin == engineConfiguration->tpsMax) { if (engineConfiguration->tpsMin == engineConfiguration->tpsMax) {
firmwareError("Invalid TPS configuration: same value"); firmwareError("Invalid TPS configuration: same value");
@ -75,6 +80,10 @@ float getTPSVoltage(void) {
* wants a TPS value. * wants a TPS value.
*/ */
int getTPS10bitAdc(void) { int getTPS10bitAdc(void) {
#if !EFI_PROD_CODE
if (mockTps != MOCK_UNDEFINED)
return mockTps;
#endif
int adc = getAdcValue(engineConfiguration->tpsAdcChannel); int adc = getAdcValue(engineConfiguration->tpsAdcChannel);
return (int) adc / 4; // Only for TunerStudio compatibility. Max TS adc value in 1023 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) { int convertVoltageTo10bitADC(float voltage) {
// divided by 2 because of voltage divider, then converted into 10bit ADC value (TunerStudio format) // 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);
} }

View File

@ -22,8 +22,6 @@
#ifdef __cplusplus #ifdef __cplusplus
#include "engine.h" #include "engine.h"
#define MOCK_UNDEFINED -1
class RpmCalculator { class RpmCalculator {
public: public:
#if !EFI_PROD_CODE #if !EFI_PROD_CODE

View File

@ -342,6 +342,8 @@ extern EventQueue schedulingQueue;
// this is a very dirty and sad hack. todo: eliminate // this is a very dirty and sad hack. todo: eliminate
extern Engine engine; extern Engine engine;
extern int mockTps;
static void testStartupFuelPumping(void) { static void testStartupFuelPumping(void) {
EngineTestHelper eth(FORD_INLINE_6_1995); EngineTestHelper eth(FORD_INLINE_6_1995);
@ -354,10 +356,35 @@ static void testStartupFuelPumping(void) {
engine->rpmCalculator->mockRpm = 0; engine->rpmCalculator->mockRpm = 0;
engine->engineConfiguration->tpsMin = 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); 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) { static void testRpmCalculator(void) {