auto-sync

This commit is contained in:
rusEfi 2016-11-14 15:04:44 -05:00
parent f91f28723c
commit f7712aec07
2 changed files with 24 additions and 23 deletions

View File

@ -376,7 +376,7 @@ static void handleFuelScheduleOverlap(InjectionEventList *injectionEvents DECLAR
static ALWAYS_INLINE void handleFuel(const bool limitedFuel, uint32_t trgEventIndex, int rpm DECLARE_ENGINE_PARAMETER_S) { static ALWAYS_INLINE void handleFuel(const bool limitedFuel, uint32_t trgEventIndex, int rpm DECLARE_ENGINE_PARAMETER_S) {
efiAssertVoid(getRemainingStack(chThdSelf()) > 128, "lowstck#3"); efiAssertVoid(getRemainingStack(chThdSelf()) > 128, "lowstck#3");
efiAssertVoid(trgEventIndex < ENGINE(triggerShape.getLength()), "handleFuel/event index"); efiAssertVoid(trgEventIndex < engine->engineCycleEventCount, "handleFuel/event index");
if (!isInjectionEnabled(engineConfiguration) || limitedFuel) { if (!isInjectionEnabled(engineConfiguration) || limitedFuel) {
return; return;
@ -469,7 +469,7 @@ void mainTriggerCallback(trigger_event_e ckpSignalType, uint32_t trgEventIndex D
} }
efiAssertVoid(getRemainingStack(chThdSelf()) > 128, "lowstck#2"); efiAssertVoid(getRemainingStack(chThdSelf()) > 128, "lowstck#2");
if (trgEventIndex >= ENGINE(triggerShape.getLength())) { if (trgEventIndex >= engine->engineCycleEventCount) {
/** /**
* this could happen in case of a trigger error, just exit silently since the trigger error is supposed to be handled already * this could happen in case of a trigger error, just exit silently since the trigger error is supposed to be handled already
* todo: should this check be somewhere higher so that no trigger listeners are invoked with noise? * todo: should this check be somewhere higher so that no trigger listeners are invoked with noise?

View File

@ -225,20 +225,33 @@ void TriggerState::resetCurrentCycleState() {
currentCycle.current_index = 0; currentCycle.current_index = 0;
} }
/**
* physical primary trigger duration
*/
angle_t TriggerShape::getCycleDuration() const {
switch (operationMode) {
case FOUR_STROKE_SYMMETRICAL_CRANK_SENSOR:
return 180;
case FOUR_STROKE_CRANK_SENSOR:
case TWO_STROKE:
return 360;
default:
return 720;
}
}
/** /**
* Trigger event count equals engine cycle event count if we have a cam sensor. * Trigger event count equals engine cycle event count if we have a cam sensor.
* Two trigger cycles make one engine cycle in case of a four stroke engine If we only have a cranksensor. * Two trigger cycles make one engine cycle in case of a four stroke engine If we only have a cranksensor.
*/ */
uint32_t TriggerShape::getLength() const { uint32_t TriggerShape::getLength() const {
// todo: reduce magic constants, reuse getCycleDuration method /**
switch (operationMode) { * 4 for FOUR_STROKE_SYMMETRICAL_CRANK_SENSOR
case FOUR_STROKE_SYMMETRICAL_CRANK_SENSOR: * 2 for FOUR_STROKE_CRANK_SENSOR
return 4 * getSize(); * 1 otherwise
case FOUR_STROKE_CRANK_SENSOR: */
return 2 * getSize(); int multiplier = getEngineCycle(operationMode) / getCycleDuration();
default: return multiplier * getSize();
return getSize();
}
} }
angle_t TriggerShape::getAngle(int index) const { angle_t TriggerShape::getAngle(int index) const {
@ -366,18 +379,6 @@ void TriggerShape::addEvent2(angle_t angle, trigger_wheel_e const waveIndex, tri
wave.waves[waveIndex].pinStates[index] = state; wave.waves[waveIndex].pinStates[index] = state;
} }
angle_t TriggerShape::getCycleDuration() const {
switch (operationMode) {
case FOUR_STROKE_SYMMETRICAL_CRANK_SENSOR:
return 180;
case FOUR_STROKE_CRANK_SENSOR:
case TWO_STROKE:
return 360;
default:
return 720;
}
}
angle_t TriggerShape::getSwitchAngle(int index) const { angle_t TriggerShape::getSwitchAngle(int index) const {
return getCycleDuration() * wave.getSwitchTime(index); return getCycleDuration() * wave.getSwitchTime(index);
} }