Inject timestamps for injection too (#1108)

* schedule by nt, not us

* inject timestamp
This commit is contained in:
Matthew Kennedy 2020-01-19 21:12:18 -08:00 committed by rusefi
parent ba0c48e0ac
commit 103e51dd85
1 changed files with 8 additions and 10 deletions

View File

@ -174,7 +174,7 @@ void turnInjectionPinLow(InjectionEvent *event) {
} }
static ALWAYS_INLINE void handleFuelInjectionEvent(int injEventIndex, InjectionEvent *event, static ALWAYS_INLINE void handleFuelInjectionEvent(int injEventIndex, InjectionEvent *event,
int rpm DECLARE_ENGINE_PARAMETER_SUFFIX) { int rpm, efitick_t nowNt DECLARE_ENGINE_PARAMETER_SUFFIX) {
/** /**
* todo: this is a bit tricky with batched injection. is it? Does the same * todo: this is a bit tricky with batched injection. is it? Does the same
@ -261,10 +261,8 @@ static ALWAYS_INLINE void handleFuelInjectionEvent(int injEventIndex, InjectionE
event->isScheduled = true; event->isScheduled = true;
// todo: remove me in favor of injecting edge time! efitick_t turnOnTime = nowNt + US2NT((int)injectionStartDelayUs);
efitimeus_t nowUs = getTimeNowUs(); efitick_t turnOffTime = turnOnTime + US2NT((int)durationUs);
efitimeus_t turnOnTime = nowUs + (int) injectionStartDelayUs;
efitimeus_t turnOffTime = turnOnTime + (int) durationUs;
action_s startAction, endAction; action_s startAction, endAction;
// We use different callbacks based on whether we're running sequential mode or not - everything else is the same // We use different callbacks based on whether we're running sequential mode or not - everything else is the same
@ -280,8 +278,8 @@ static ALWAYS_INLINE void handleFuelInjectionEvent(int injEventIndex, InjectionE
#if EFI_UNIT_TEST #if EFI_UNIT_TEST
printf("scheduling injection angle=%.2f/delay=%.2f injectionDuration=%.2f\r\n", event->injectionStart.angleOffsetFromTriggerEvent, injectionStartDelayUs, injectionDuration); printf("scheduling injection angle=%.2f/delay=%.2f injectionDuration=%.2f\r\n", event->injectionStart.angleOffsetFromTriggerEvent, injectionStartDelayUs, injectionDuration);
#endif #endif
engine->executor.scheduleByTimestamp(&event->signalTimerUp, turnOnTime, startAction); engine->executor.scheduleByTimestampNt(&event->signalTimerUp, turnOnTime, startAction);
engine->executor.scheduleByTimestamp(&event->endOfInjectionEvent, turnOffTime, endAction); engine->executor.scheduleByTimestampNt(&event->endOfInjectionEvent, turnOffTime, endAction);
} }
static void fuelClosedLoopCorrection(DECLARE_ENGINE_PARAMETER_SIGNATURE) { static void fuelClosedLoopCorrection(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
@ -308,7 +306,7 @@ static void fuelClosedLoopCorrection(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
} }
static ALWAYS_INLINE void handleFuel(const bool limitedFuel, uint32_t trgEventIndex, int rpm DECLARE_ENGINE_PARAMETER_SUFFIX) { static ALWAYS_INLINE void handleFuel(const bool limitedFuel, uint32_t trgEventIndex, int rpm, efitick_t nowNt DECLARE_ENGINE_PARAMETER_SUFFIX) {
ScopePerf perf(PE::HandleFuel); ScopePerf perf(PE::HandleFuel);
efiAssertVoid(CUSTOM_STACK_6627, getCurrentRemainingStack() > 128, "lowstck#3"); efiAssertVoid(CUSTOM_STACK_6627, getCurrentRemainingStack() > 128, "lowstck#3");
@ -349,7 +347,7 @@ static ALWAYS_INLINE void handleFuel(const bool limitedFuel, uint32_t trgEventIn
if (eventIndex != trgEventIndex) { if (eventIndex != trgEventIndex) {
continue; continue;
} }
handleFuelInjectionEvent(injEventIndex, event, rpm PASS_ENGINE_PARAMETER_SUFFIX); handleFuelInjectionEvent(injEventIndex, event, rpm, nowNt PASS_ENGINE_PARAMETER_SUFFIX);
} }
} }
@ -455,7 +453,7 @@ static void mainTriggerCallback(trigger_event_e ckpSignalType, uint32_t trgEvent
* For fuel we schedule start of injection based on trigger angle, and then inject for * For fuel we schedule start of injection based on trigger angle, and then inject for
* specified duration of time * specified duration of time
*/ */
handleFuel(limitedFuel, trgEventIndex, rpm PASS_ENGINE_PARAMETER_SUFFIX); handleFuel(limitedFuel, trgEventIndex, rpm, edgeTimestamp PASS_ENGINE_PARAMETER_SUFFIX);
/** /**
* For spark we schedule both start of coil charge and actual spark based on trigger angle * For spark we schedule both start of coil charge and actual spark based on trigger angle
*/ */