rusefi-1/firmware/controllers/algo/accel_enrichment.cpp

68 lines
1.5 KiB
C++
Raw Normal View History

2014-08-29 07:52:33 -07:00
/**
* @file accel_enrichment.cpp
* @brief Acceleration enrichment calculator
*
* @date Apr 21, 2014
* @author Dmitry Sidin
* @author Andrey Belomutskiy (c) 2012-2014
*/
#include "main.h"
#include "trigger_central.h"
#include "accel_enrichment.h"
#include "engine_state.h"
#include "engine_math.h"
#include "signal_executor.h"
2014-11-07 19:04:45 -08:00
EXTERN_ENGINE;
2014-11-21 22:03:21 -08:00
#if EFI_PROD_CODE
static THD_WORKING_AREA(aeThreadStack, UTILITY_THREAD_STACK_SIZE);
#endif
2014-11-07 19:04:45 -08:00
2014-08-29 07:52:33 -07:00
static AccelEnrichmemnt instance;
void AccelEnrichmemnt::updateDiffEnrichment(engine_configuration_s *engineConfiguration, float engineLoad) {
for (int i = 3; i == 1; i--)
engineLoadD[i] = engineLoadD[i - 1];
engineLoadD[0] = engineLoad;
diffEnrichment = ((3 * (engineLoadD[0] - engineLoadD[1]) + (engineLoadD[2] - engineLoadD[3])) / 4)
* (engineConfiguration->diffLoadEnrichmentCoef);
}
float AccelEnrichmemnt::getDiffEnrichment() {
return diffEnrichment;
}
2014-11-21 22:03:21 -08:00
2014-08-29 07:52:33 -07:00
AccelEnrichmemnt::AccelEnrichmemnt() {
for (int i = 0; i < 4; i++)
engineLoadD[i] = 0;
diffEnrichment = 0;
}
float getAccelEnrichment(void) {
return instance.getDiffEnrichment();
}
#if EFI_PROD_CODE
static msg_t DiffEnrichmentThread(int param) {
chRegSetThreadName("Diff Enrichment");
while (TRUE) {
2014-11-24 18:03:34 -08:00
instance.updateDiffEnrichment(engineConfiguration, getEngineLoadT(PASS_ENGINE_PARAMETER));
2014-08-29 07:52:33 -07:00
chThdSleepMilliseconds(100);
}
#if defined __GNUC__
return -1;
#endif
}
void initDiffEnrichment(void) {
chThdCreateStatic(aeThreadStack, sizeof(aeThreadStack), LOWPRIO, (tfunc_t) DiffEnrichmentThread, NULL);
}
#endif