44 if (std::isnan(angle)) {
49 assertAngleRange(angle, msg,
code);
56 while (angle >= engineCycle) {
78 for (
int gapIndex = 1; gapIndex < GAP_TRACKING_LENGTH ; gapIndex++) {
118 return FOUR_STROKE_CYCLE_DURATION / SYMMETRICAL_CRANK_SENSOR_DIVIDER;
120 return FOUR_STROKE_CYCLE_DURATION / SYMMETRICAL_THREE_TIMES_CRANK_SENSOR_DIVIDER;
122 return FOUR_STROKE_CYCLE_DURATION / SYMMETRICAL_SIX_TIMES_CRANK_SENSOR_DIVIDER;
124 return FOUR_STROKE_CYCLE_DURATION / SYMMETRICAL_TWELVE_TIMES_CRANK_SENSOR_DIVIDER;
127 return TWO_STROKE_CYCLE_DURATION;
130 return FOUR_STROKE_CYCLE_DURATION;
132 criticalError(
"unreachable getCycleDuration");
150 criticalError(
"unreachable needsDisambiguation");
186 return cycleStartAngle + positionWithinCycle;
190 if (angle > filterLeft && angle < filterRight) {
228 if (isSingleToothOnPrimaryChannel) {
247 addEvent(angle / FOUR_STROKE_CYCLE_DURATION,
state, channelIndex);
252#define CRANK_MODE_MULTIPLIER 2.0f
253 addEvent(CRANK_MODE_MULTIPLIER * angle / FOUR_STROKE_CYCLE_DURATION,
state, channelIndex);
279 printf(
"addEvent2 %.2f i=%d front=%d\r\n", angle, channelIndex,
state);
297 if (angle <= 0 || angle > 1) {
316 for (
int i = 0; i < PWM_PHASE_MAX_WAVE_PER_PWM; i++) {
355 for (
int i = 0; i < PWM_PHASE_MAX_WAVE_PER_PWM; i++) {
373 criticalAssertVoid(gapIndex >= 0 && gapIndex < GAP_TRACKING_LENGTH,
"gapIndex out of range");
384 printf(
"setTriggerSynchronizationGap3 %d %.2f %.2f\r\n", gapIndex, syncRatioFrom, syncRatioTo);
391 size_t engineCycleEventCount =
getLength();
394 "engineCycleEventCount", 0);
397 uint32_t right = engineCycleEventCount - 1;
404 uint32_t middle = (left + right) / 2;
411 }
while (left <= right);
const char * getTriggerWheel(TriggerWheel value)
const char * getTrigger_type_e(trigger_type_e value)
void checkSwitchTimes(float scale) const
int findInsertionAngle(float angle) const
expected< int > findAngleMatch(float angle) const
pin_state_t getChannelState(int channelIndex, int phaseIndex) const override
float getSwitchTime(int phaseIndex) const override
void setSwitchTime(const int phaseIndex, const float value)
void setChannelState(const int channelIndex, const int phaseIndex, pin_state_t state)
float efiRound(float value, float precision)
EngineState * getEngineState()
static constexpr engine_configuration_s * engineConfiguration
One header which acts as gateway to current engine state.
@ TT_2JZ_3_34_SIMULATION_ONLY
@ TT_VVT_BOSCH_QUICK_START
@ TT_MAZDA_MIATA_VVT_TEST
@ TT_DODGE_NEON_2003_CRANK
@ TT_VVT_SUBARU_7_WITHOUT_6
@ TT_DODGE_NEON_1995_ONLY_CRANK
bool warning(ObdCode code, const char *fmt,...)
void firmwareError(ObdCode code, const char *fmt,...)
@ CUSTOM_ERR_TRG_ANGLE_ORDER
@ FOUR_STROKE_SYMMETRICAL_CRANK_SENSOR
@ FOUR_STROKE_TWELVE_TIMES_CRANK_SENSOR
@ FOUR_STROKE_THREE_TIMES_CRANK_SENSOR
@ FOUR_STROKE_CRANK_SENSOR
@ FOUR_STROKE_SIX_TIMES_CRANK_SENSOR
state("state", SensorCategory.SENSOR_INPUTS, FieldType.INT8, 1871, 1.0, -1.0, -1.0, "")
brain_input_pin_e triggerInputPins[TRIGGER_INPUT_PIN_COUNT]
void setArrayValues(TValue(&array)[TSize], float value)
void configureChryslerVtt15(TriggerWaveform *s)
void configureDodgeStratusTriggerWaveform(TriggerWaveform *s)
void configureChryslerNGC_36_2_2(TriggerWaveform *s)
void initJeep18_2_2_2(TriggerWaveform *s)
void initJeep_XJ_4cyl_2500(TriggerWaveform *s)
void configureNeon2003TriggerWaveformCam(TriggerWaveform *s)
void configureNeon1995TriggerWaveformOnlyCrank(TriggerWaveform *s)
void configureJeepEVD_36_2_2(TriggerWaveform *s)
void initDodgeRam(TriggerWaveform *s)
const char * getTrigger_value_e(TriggerValue value)
void configureFordCoyote(TriggerWaveform *s)
void initGmLS24_3deg(TriggerWaveform *s)
void configureGmTriggerWaveform(TriggerWaveform *s)
void initGmLS24_5deg(TriggerWaveform *s)
void configureGm60_2_2_2(TriggerWaveform *s)
void configureHondaCbr600(TriggerWaveform *s)
void configureHondaK_12_1(TriggerWaveform *s)
void configureHondaJ30A2_24_1_1(TriggerWaveform *s)
void configureHondaK_4_1(TriggerWaveform *s)
void configureMazdaProtegeSOHC(TriggerWaveform *s)
void configureMazdaProtegeLx(TriggerWaveform *s)
void initializeMazdaMiataVVtTestShape(TriggerWaveform *s)
void initializeMazdaMiataNaShape(TriggerWaveform *s)
void initializeMazdaLCam(TriggerWaveform *s)
void initializeMazdaMiataVVtCamShape(TriggerWaveform *s)
void initializeMazdaMiataNb2Crank(TriggerWaveform *s)
void initializeMazdaSkyactivCam(TriggerWaveform *s)
void setMercedesTwoSegment(TriggerWaveform *s)
void configureDaihatsu4cyl(TriggerWaveform *s)
void configureDaihatsu3cyl(TriggerWaveform *s)
void configureBarra3plus1cam(TriggerWaveform *s)
void configureFordPip(TriggerWaveform *s)
void configureTriTach(TriggerWaveform *s)
void configureFiatIAQ_P8(TriggerWaveform *s)
void configureFordST170(TriggerWaveform *s)
void configure60degSingleTooth(TriggerWaveform *s)
Configure trigger as Sovek or Saruman ignition.
void configureArcticCat(TriggerWaveform *s)
void configureBenelli(TriggerWaveform *s)
void initializeVvt6G72(TriggerWaveform *s)
void initialize36_2_1(TriggerWaveform *s)
void initializeMitsubishi4gSymmetricalCrank(TriggerWaveform *s)
void initializeVvt3A92(TriggerWaveform *s)
void initializeMitsubishi4g63Cam(TriggerWaveform *s)
void initializeMitsubishi4G69Cam(TriggerWaveform *s)
void configureFordAspireTriggerWaveform(TriggerWaveform *s)
void initialize36_2_1_1(TriggerWaveform *s)
void initializeNissanVQvvt(TriggerWaveform *s)
void initializeNissanSR20VE_4(TriggerWaveform *s)
void initializeNissanQR25crank(TriggerWaveform *s)
void initializeNissanVQ35crank(TriggerWaveform *s)
void initializeNissanHRvvtIn(TriggerWaveform *s)
void initializeNissanVQ30cam(TriggerWaveform *s)
void initializeNissanMR18crank(TriggerWaveform *s)
void initializeNissanHRcrank(TriggerWaveform *s)
void initializeNissanMRvvt(TriggerWaveform *s)
void initialize60_2_2_Renault_F(TriggerWaveform *s)
void initializeRenix66_2_2(TriggerWaveform *s)
void initializeRenix44_2_2(TriggerWaveform *s)
void initializeJeepRenix66_2_2(TriggerWaveform *s)
void initializeRoverK(TriggerWaveform *s)
PUBLIC_API_WEAK void customTrigger(operation_mode_e triggerOperationMode, TriggerWaveform *s, trigger_type_e type)
void wrapAngle(angle_t &angle, const char *msg, ObdCode code)
void initializeSubaru_SVX(TriggerWaveform *s)
void initializeSubaru7_6_crankOnly(TriggerWaveform *s)
void initialize36_2_2_2(TriggerWaveform *s)
static void initializeSubaru7_6(TriggerWaveform *s, bool withCrankWheel)
void initializeSubaruOnly7(TriggerWaveform *s)
void initializeSubaruEZ30(TriggerWaveform *s)
void initializeSuzukiK6A(TriggerWaveform *s)
void initializeSuzukiG13B(TriggerWaveform *s)
void initialize2jzGE3_34_simulation_shape(TriggerWaveform *s)
void initializeUzCam(TriggerWaveform *s)
void configure3ToothCrank(TriggerWaveform *s)
void configureQuickStartSenderWheel(TriggerWaveform *s)
void configureKawaKX450F(TriggerWaveform *s)
void configureOnePlusOne(TriggerWaveform *s)
void configure12ToothCrank(TriggerWaveform *s)
angle_t getEngineCycle(operation_mode_e operationMode)
void initializeSkippedToothTrigger(TriggerWaveform *s, int totalTeethCount, int skippedCount, operation_mode_e operationMode, SyncEdge syncEdge)
void configure3_1_cam(TriggerWaveform *s)
void configure6ToothCrank(TriggerWaveform *s)
void setVwConfiguration(TriggerWaveform *s)
void setSkodaFavorit(TriggerWaveform *s)