void TriggerShape::calculateTriggerSynchPoint(DECLARE_ENGINE_PARAMETER_F) { trigger_config_s const*triggerConfig = &engineConfiguration->trigger; triggerShapeSynchPointIndex = findTriggerZeroEventIndex(this, triggerConfig PASS_ENGINE_PARAMETER); engine->engineCycleEventCount = getLength(); float firstAngle = getAngle(triggerShapeSynchPointIndex); int frontOnlyIndex = 0; for (int eventIndex = 0; eventIndex < engine->engineCycleEventCount; eventIndex++) { if (eventIndex == 0) { // explicit check for zero to avoid issues where logical zero is not exactly zero due to float nature eventAngles[0] = 0; // this value would be used in case of front-only eventAngles[1] = 0; frontOnlyIndexes[0] = 0; } else { int triggerDefinitionCoordinate = (triggerShapeSynchPointIndex + eventIndex) % engine->engineCycleEventCount; int triggerDefinitionIndex = triggerDefinitionCoordinate >= size ? triggerDefinitionCoordinate - size : triggerDefinitionCoordinate; float angle = getAngle(triggerDefinitionCoordinate) - firstAngle; fixAngle(angle); if (engineConfiguration->useOnlyFrontForTrigger) { if (isFrontEvent[triggerDefinitionIndex]) { frontOnlyIndex += 2; eventAngles[frontOnlyIndex] = angle; eventAngles[frontOnlyIndex + 1] = angle; } } else { eventAngles[eventIndex] = angle; } frontOnlyIndexes[eventIndex] = frontOnlyIndex; } } }
TriggerShape::TriggerShape() : wave(switchTimesBuffer, NULL) { initialize(OM_NONE, false); wave.waves = h.waves; memset(triggerIndexByAngle, 0, sizeof(triggerIndexByAngle)); } void TriggerShape::calculateTriggerSynchPoint(TriggerState *state DECLARE_ENGINE_PARAMETER_S) { #if EFI_PROD_CODE || defined(__DOXYGEN__) efiAssertVoid(getRemainingStack(chThdSelf()) > 256, "calc s"); #endif trigger_config_s const*triggerConfig = &engineConfiguration->trigger; triggerShapeSynchPointIndex = findTriggerZeroEventIndex(state, this, triggerConfig PASS_ENGINE_PARAMETER); engine->engineCycleEventCount = getLength(); float firstAngle = getAngle(triggerShapeSynchPointIndex); int frontOnlyIndex = 0; for (int eventIndex = 0; eventIndex < engine->engineCycleEventCount; eventIndex++) { if (eventIndex == 0) { // explicit check for zero to avoid issues where logical zero is not exactly zero due to float nature eventAngles[0] = 0; // this value would be used in case of front-only eventAngles[1] = 0; frontOnlyIndexes[0] = 0; } else {