diff --git a/java_console/ui/src/main/java/com/rusefi/TriggerWheelInfo.java b/java_console/ui/src/main/java/com/rusefi/TriggerWheelInfo.java index 5ee603fd60..d2ee089ce1 100644 --- a/java_console/ui/src/main/java/com/rusefi/TriggerWheelInfo.java +++ b/java_console/ui/src/main/java/com/rusefi/TriggerWheelInfo.java @@ -15,13 +15,15 @@ class TriggerWheelInfo { final String triggerName; final List waves; final List signals; + private final boolean isCrankBased; - public TriggerWheelInfo(int id, double tdcPosition, String triggerName, List waves, List signals) { + public TriggerWheelInfo(int id, double tdcPosition, String triggerName, List waves, List signals, boolean isCrankBased) { this.id = findByOrdinal(id); this.tdcPosition = tdcPosition; this.triggerName = triggerName; this.waves = waves; this.signals = signals; + this.isCrankBased = isCrankBased; } public static trigger_type_e findByOrdinal(int id) { @@ -44,17 +46,24 @@ class TriggerWheelInfo { System.out.println("id=" + id + ", count=" + eventCount + ", name=" + triggerName); + line = reader.readLine(); + String[] keyValue = line.split("="); + if (keyValue.length!=2) + throw new IllegalStateException("Key/value lines expected"); + boolean isCrankBased = Boolean.valueOf(keyValue[1]); + List signals = TriggerImage.readSignals(reader, eventCount); List waves = TriggerImage.convertSignalsToWaves(signals); - return new TriggerWheelInfo(id, tdcPosition, triggerName, waves, signals); + return new TriggerWheelInfo(id, tdcPosition, triggerName, waves, signals, isCrankBased); } @NotNull List getFirstWheeTriggerSignals() { List firstWheel = getTriggerSignals(0); - if (isFirstCrankBased()) { + // todo: support symmetrical crank + if (isCrankBased) { return takeFirstHalf(firstWheel); } else { return compressAngle(firstWheel); @@ -62,7 +71,7 @@ class TriggerWheelInfo { } public double getTdcPositionIn360() { - return isFirstCrankBased() ? tdcPosition : getCompressedAngle(tdcPosition); + return isCrankBased ? tdcPosition : getCompressedAngle(tdcPosition); } @NotNull @@ -99,24 +108,6 @@ class TriggerWheelInfo { } } - // todo: this 'isFirstCrankBased' should be taken from triggers.txt not hard-coded here! - // todo: open question if current firmware even has info to provide this info or not? - // todo: https://github.com/rusefi/rusefi/issues/2077 - private boolean isFirstCrankBased() { - return id == trigger_type_e.TT_GM_LS_24 || - id == trigger_type_e.TT_HONDA_K_12_1 || - id == trigger_type_e.TT_RENIX_44_2_2 || - id == trigger_type_e.TT_RENIX_66_2_2_2 || - id == trigger_type_e.TT_MIATA_VVT || - id == trigger_type_e.TT_TRI_TACH || - id == trigger_type_e.TT_60_2_VW || - id == trigger_type_e.TT_SKODA_FAVORIT || - id == trigger_type_e.TT_KAWA_KX450F || - id == trigger_type_e.TT_NISSAN_VQ35 || - id == trigger_type_e.TT_NISSAN_QR25 || - id == trigger_type_e.TT_GM_7X; - } - // todo: this 'isFirstCrankBased' should be taken from triggers.txt not hard-coded here! // todo: open question if current firmware even has info to provide this info or not? // todo: https://github.com/rusefi/rusefi/issues/2077 diff --git a/unit_tests/tests/trigger/test_all_triggers.cpp b/unit_tests/tests/trigger/test_all_triggers.cpp index 79b0f6a040..a2814e0b04 100644 --- a/unit_tests/tests/trigger/test_all_triggers.cpp +++ b/unit_tests/tests/trigger/test_all_triggers.cpp @@ -67,7 +67,8 @@ TEST_P(AllTriggersFixture, TestTrigger) { ASSERT_FALSE(shape->shapeDefinitionError) << "Trigger shapeDefinitionError"; fprintf(fp, "TRIGGERTYPE %d %d %s %.2f\n", tt, shape->getLength(), getTrigger_type_e(tt), shape->tdcPosition); - + // todo: use getCrankDivider insread to support symmetrical crank wheels? + fprintf(fp, "%s=%s\n", TRIGGER_IS_CRANK_KEY, shape->getOperationMode() == FOUR_STROKE_CRANK_SENSOR ? "true" : "false"); fprintf(fp, "# duty %.2f %.2f\n", shape->expectedDutyCycle[0], shape->expectedDutyCycle[1]); for (size_t i = 0; i < shape->getLength(); i++) {