diff --git a/firmware/controllers/algo/firing_order.h b/firmware/controllers/algo/firing_order.h index 51da847399..1745c17b77 100644 --- a/firmware/controllers/algo/firing_order.h +++ b/firmware/controllers/algo/firing_order.h @@ -24,6 +24,7 @@ typedef enum { FO_1_3_4_2 = 1, // typical inline 4 FO_1_2_4_3 = 2, FO_1_3_2_4 = 3, // for example horizontally opposed engine + FO_1_4_3_2 = 17, // for example VW aircooled boxer engine // 5 cylinder FO_1_2_4_5_3 = 6, @@ -46,7 +47,7 @@ typedef enum { FO_1_7_5_11_3_9_6_12_2_8_4_10 = 15, // bmw M70 etc FO_1_7_4_10_2_8_6_12_3_9_5_11 = 16, // lamborghini, typical rusEfi use-case - // max used = 15 + // max used = 18 Force_4b_firing_order = ENUM_32_BITS, } firing_order_e; diff --git a/firmware/controllers/math/engine_math.cpp b/firmware/controllers/math/engine_math.cpp index ec892a5489..25a904012a 100644 --- a/firmware/controllers/math/engine_math.cpp +++ b/firmware/controllers/math/engine_math.cpp @@ -273,6 +273,7 @@ static const int order_1_2_3[] = {1, 2, 3}; static const int order_1_THEN_3_THEN_4_THEN2[] = { 1, 3, 4, 2 }; static const int order_1_THEN_2_THEN_4_THEN3[] = { 1, 2, 4, 3 }; static const int order_1_THEN_3_THEN_2_THEN4[] = { 1, 3, 2, 4 }; +static const int order_1_THEN_4_THEN_3_THEN2[] = { 1, 4, 3, 2 }; // 5 cylinder static const int order_1_2_4_5_3[] = {1, 2, 4, 5, 3}; @@ -311,6 +312,7 @@ static int getFiringOrderLength(DECLARE_ENGINE_PARAMETER_SIGNATURE) { case FO_1_3_4_2: case FO_1_2_4_3: case FO_1_3_2_4: + case FO_1_4_3_2: return 4; // 5 cylinder case FO_1_2_4_5_3: @@ -384,6 +386,8 @@ int getCylinderId(int index DECLARE_ENGINE_PARAMETER_SUFFIX) { return order_1_THEN_2_THEN_4_THEN3[index]; case FO_1_3_2_4: return order_1_THEN_3_THEN_2_THEN4[index]; + case FO_1_4_3_2: + return order_1_THEN_4_THEN_3_THEN2[index]; // 5 cylinder case FO_1_2_4_5_3: return order_1_2_4_5_3[index]; diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index 0a1f06db42..703bb0ce26 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -1390,6 +1390,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = ignitionOutputs, "Ignition Outputs" field = "Ignition Pin Mode", ignitionPinMode, {isIgnitionEnabled == 1} field = "Ignition Pin 1", ignitionPins1, {isIgnitionEnabled == 1} + ; I think this magic was generated by java somewhere, but not sure where? field = "Ignition Pin 2", ignitionPins2, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount > 1) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 2) || (firingOrder == 7) || (firingOrder == 9) || (firingOrder == 11) || (firingOrder == 12)))} field = "Ignition Pin 3", ignitionPins3, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount > 2) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 1) || (firingOrder == 3) || (firingOrder == 4) || (firingOrder == 5) || (firingOrder == 9)))} field = "Ignition Pin 4", ignitionPins4, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount > 3) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 7) || (firingOrder == 12)))}