diff --git a/firmware/controllers/algo/engine.cpp b/firmware/controllers/algo/engine.cpp index 4ac2d49e54..f815b6cdf3 100644 --- a/firmware/controllers/algo/engine.cpp +++ b/firmware/controllers/algo/engine.cpp @@ -605,6 +605,7 @@ injection_mode_e Engine::getCurrentInjectionMode() { } // see also in TunerStudio project '[doesTriggerImplyOperationMode] tag +// this is related to 'knownOperationMode' flag static bool doesTriggerImplyOperationMode(trigger_type_e type) { return type != TT_TOOTHED_WHEEL && type != TT_ONE diff --git a/firmware/controllers/trigger/decoders/trigger_structure.cpp b/firmware/controllers/trigger/decoders/trigger_structure.cpp index 4a58158572..19b86d3195 100644 --- a/firmware/controllers/trigger/decoders/trigger_structure.cpp +++ b/firmware/controllers/trigger/decoders/trigger_structure.cpp @@ -85,7 +85,8 @@ void TriggerWaveform::initialize(operation_mode_e operationMode) { #if EFI_UNIT_TEST memset(&triggerSignalIndeces, 0, sizeof(triggerSignalIndeces)); memset(&triggerSignalStates, 0, sizeof(triggerSignalStates)); -#endif + knownOperationMode = true; +#endif // EFI_UNIT_TEST } size_t TriggerWaveform::getSize() const { diff --git a/firmware/controllers/trigger/decoders/trigger_structure.h b/firmware/controllers/trigger/decoders/trigger_structure.h index b25663f4ff..8d56801300 100644 --- a/firmware/controllers/trigger/decoders/trigger_structure.h +++ b/firmware/controllers/trigger/decoders/trigger_structure.h @@ -185,6 +185,8 @@ public: */ int triggerSignalIndeces[PWM_PHASE_MAX_COUNT]; int triggerSignalStates[PWM_PHASE_MAX_COUNT]; + // see also 'doesTriggerImplyOperationMode' + bool knownOperationMode = true; #endif /** diff --git a/firmware/controllers/trigger/decoders/trigger_subaru.cpp b/firmware/controllers/trigger/decoders/trigger_subaru.cpp index ace5bfcc6b..42a05e5aaa 100644 --- a/firmware/controllers/trigger/decoders/trigger_subaru.cpp +++ b/firmware/controllers/trigger/decoders/trigger_subaru.cpp @@ -14,6 +14,11 @@ void initialize36_2_2_2(TriggerWaveform *s) { s->initialize(FOUR_STROKE_CRANK_SENSOR); +#if EFI_UNIT_TEST + // placed on 'cam' on '2-stroke' rotary + s->knownOperationMode = false; +#endif // EFI_UNIT_TEST + float wide = 30 * 2; float narrow = 10 * 2; diff --git a/firmware/controllers/trigger/decoders/trigger_universal.cpp b/firmware/controllers/trigger/decoders/trigger_universal.cpp index 5d21af1a51..f8c7967f12 100644 --- a/firmware/controllers/trigger/decoders/trigger_universal.cpp +++ b/firmware/controllers/trigger/decoders/trigger_universal.cpp @@ -43,6 +43,9 @@ void initializeSkippedToothTriggerWaveformExt(TriggerWaveform *s, int totalTeeth } efiAssertVoid(CUSTOM_NULL_SHAPE, s != NULL, "TriggerWaveform is NULL"); s->initialize(operationMode); +#if EFI_UNIT_TEST + s->knownOperationMode = false; +#endif // EFI_UNIT_TEST s->setTriggerSynchronizationGap(skippedCount + 1); s->shapeWithoutTdc = (totalTeethCount > 1) && (skippedCount == 0); diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/trigger/TriggerWheelInfo.java b/java_tools/configuration_definition/src/main/java/com/rusefi/trigger/TriggerWheelInfo.java index cdd22682f5..bdcbac775f 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/trigger/TriggerWheelInfo.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/trigger/TriggerWheelInfo.java @@ -10,6 +10,7 @@ import java.util.stream.Collectors; import static com.rusefi.config.generated.Fields.TRIGGER_IS_CRANK_KEY; import static com.rusefi.config.generated.Fields.TRIGGER_IS_SECOND_WHEEL_CAM; import static com.rusefi.config.generated.Fields.TRIGGER_HAS_SECOND_CHANNEL; +import static com.rusefi.config.generated.Fields.TRIGGER_HARDCODED_OPERATION_MODE; public class TriggerWheelInfo { private final int id; @@ -60,6 +61,8 @@ public class TriggerWheelInfo { case TRIGGER_HAS_SECOND_CHANNEL: Boolean.parseBoolean(keyValue[1]); break; + case TRIGGER_HARDCODED_OPERATION_MODE: + break; default: throw new IllegalStateException("Unexpected key/value: " + line); } diff --git a/unit_tests/tests/trigger/test_all_triggers.cpp b/unit_tests/tests/trigger/test_all_triggers.cpp index d178116569..3ca9d10f9a 100644 --- a/unit_tests/tests/trigger/test_all_triggers.cpp +++ b/unit_tests/tests/trigger/test_all_triggers.cpp @@ -71,6 +71,7 @@ TEST_P(AllTriggersFixture, TestTrigger) { fprintf(fp, "%s=%s\n", TRIGGER_IS_CRANK_KEY, shape->getOperationMode() == FOUR_STROKE_CRANK_SENSOR ? "true" : "false"); fprintf(fp, "%s=%s\n", TRIGGER_IS_SECOND_WHEEL_CAM, shape->isSecondWheelCam ? "true" : "false"); fprintf(fp, "%s=%s\n", TRIGGER_HAS_SECOND_CHANNEL, shape->needSecondTriggerInput ? "true" : "false"); + fprintf(fp, "%s=%s\n", TRIGGER_HARDCODED_OPERATION_MODE, shape->knownOperationMode ? "true" : "false"); fprintf(fp, "# duty %.2f %.2f\n", shape->expectedDutyCycle[0], shape->expectedDutyCycle[1]); for (size_t i = 0; i < shape->getLength(); i++) {