fome-fw/firmware/controllers/engine_cycle/high_pressure_fuel_pump.cpp

71 lines
1.5 KiB
C++
Raw Normal View History

2020-11-05 13:34:25 -08:00
/*
* @file high_pressure_fuel_pump.cpp
*
*
* todo: there is some similarity with aux_valves.cpp and even map_averaging.cpp maybe reduce code duplication?
*
* @date Nov 5, 2020
* @author Andrey Belomutskiy, (c) 2012-2020
*/
#include "high_pressure_fuel_pump.h"
2020-11-09 19:21:38 -08:00
#include "spark_logic.h"
EXTERN_ENGINE
;
#define LOBE_COUNT 3
class HpfpActor {
public:
angle_t extra;
int phaseIndex;
AngleBasedEvent open;
AngleBasedEvent close;
DECLARE_ENGINE_PTR;
};
static HpfpActor actors[LOBE_COUNT];
static void plainPinTurnOff(RegisteredNamedOutputPin *output) {
output->setLow();
}
void hpfpPlainPinTurnOn(HpfpActor *current);
static void handle(HpfpActor *actor) {
scheduleOrQueue(&actor->open,
TRIGGER_EVENT_UNDEFINED, getTimeNowNt(), actor->extra + CONFIG(tempHpfpStart),
{hpfpPlainPinTurnOn, actor }
PASS_ENGINE_PARAMETER_SUFFIX
);
scheduleOrQueue(&actor->close,
TRIGGER_EVENT_UNDEFINED, getTimeNowNt(),
actor->extra + CONFIG(tempHpfpStart) + CONFIG(tempHpfpDuration),
{ plainPinTurnOff, &enginePins.hpfpValve }
PASS_ENGINE_PARAMETER_SUFFIX
);
}
void hpfpPlainPinTurnOn(HpfpActor *current) {
RegisteredNamedOutputPin *output = &enginePins.hpfpValve;
output->setHigh();
handle(current);
}
2020-11-05 13:34:25 -08:00
2020-11-05 13:42:56 -08:00
void initHPFP(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
2020-11-09 19:21:38 -08:00
if (engineConfiguration->hpfpValvePin == GPIO_UNASSIGNED) {
return;
}
for (int i = 0; i < LOBE_COUNT; i++) {
HpfpActor *actor = &actors[i];
INJECT_ENGINE_REFERENCE(actor);
2020-11-05 13:42:56 -08:00
2020-11-09 19:21:38 -08:00
actor->extra = 720 / LOBE_COUNT * i;
handle(actor);
}
2020-11-05 13:42:56 -08:00
}