diff --git a/firmware/controllers/actuators/vvt.cpp b/firmware/controllers/actuators/vvt.cpp index 5ffa7eb49c..fd6571c071 100644 --- a/firmware/controllers/actuators/vvt.cpp +++ b/firmware/controllers/actuators/vvt.cpp @@ -18,8 +18,10 @@ #error "Unexpected OS ACCESS HERE" #endif /* HAS_OS_ACCESS */ -static fsio8_Map3D_u8t vvtTable1; -static fsio8_Map3D_u8t vvtTable2; +using vvt_map_t = Map3D; + +static vvt_map_t vvtTable1; +static vvt_map_t vvtTable2; void VvtController::init(int index, int bankIndex, int camIndex, const ValueProvider3D* targetMap) { this->index = index; diff --git a/firmware/controllers/core/fsio_impl.h b/firmware/controllers/core/fsio_impl.h index 120c4e18d1..692776020c 100644 --- a/firmware/controllers/core/fsio_impl.h +++ b/firmware/controllers/core/fsio_impl.h @@ -17,8 +17,8 @@ // see useFSIO5ForCriticalIssueEngineStop #define MAGIC_OFFSET_FOR_CRITICAL_ENGINE 5 -typedef Map3D fsio8_Map3D_f32t; -typedef Map3D fsio8_Map3D_u8t; +typedef Map3D fsio8_Map3D_f32t; +typedef Map3D fsio8_Map3D_u8t; expected getEngineValue(le_action_e action); diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index c55ef657ae..68eb1f81df 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -1485,8 +1485,7 @@ int8_t[MAX_CYLINDER_COUNT iterate] fuelTrim;;"Percent", @@PERCENT_TRIM_BYTE_PACK uint16_t[TORQUE_CURVE_SIZE] torqueRpmBins;;"RPM", 1, 0, 0, 65000, 0 - - int[423] mainUnusedEnd;;"units", 1, 0, -20, 100, 0 + int[100] mainUnusedEnd;;"units", 1, 0, 0, 1, 0 ! end of engine_configuration_s end_struct @@ -1517,10 +1516,10 @@ uint8_t[PEDAL_TO_TPS_SIZE] pedalToTpsRpmBins;;"RPM", @@RPM_1_BYTE_PACKING_MULT@@ float[CLT_CRANKING_CURVE_SIZE] cltCrankingCorrBins;CLT-based cranking position multiplier for simple manual idle controller;"C", 1, 0, -100, 250, 2 float[CLT_CRANKING_CURVE_SIZE] cltCrankingCorr ;CLT-based cranking position multiplier for simple manual idle controller;"%", 1, 0, 0, 500, 2 -uint8_t[IDLE_ADVANCE_CURVE_SIZE] autoscale idleAdvanceBins;Optional timing advance table for Idle (see useSeparateAdvanceForIdle);"RPM", @@RPM_1_BYTE_PACKING_MULT@@, 0, 0, 18000, 2 -float[IDLE_ADVANCE_CURVE_SIZE] idleAdvance ;Optional timing advance table for Idle (see useSeparateAdvanceForIdle);"deg", 1, 0, -20, 90, 2 -uint8_t[IDLE_VE_CURVE_SIZE] autoscale idleVeBins;Optional VE table for Idle (see useSeparateVEForIdle);"RPM", @@RPM_1_BYTE_PACKING_MULT@@, 0, 0, 18000, 2 -float[IDLE_VE_CURVE_SIZE] idleVe; Optional VE table for Idle (see useSeparateVEForIdle);"%", 1, 0, 0, 999, 2 +uint8_t[IDLE_ADVANCE_CURVE_SIZE] autoscale idleAdvanceBins;Optional timing advance table for Idle (see useSeparateAdvanceForIdle);"RPM", @@RPM_1_BYTE_PACKING_MULT@@, 0, 0, 18000, 0 +float[IDLE_ADVANCE_CURVE_SIZE] idleAdvance ;Optional timing advance table for Idle (see useSeparateAdvanceForIdle);"deg", 1, 0, -20, 90, 1 +uint8_t[IDLE_VE_CURVE_SIZE] autoscale idleVeBins;Optional VE table for Idle (see useSeparateVEForIdle);"RPM", @@RPM_1_BYTE_PACKING_MULT@@, 0, 0, 18000, 0 +float[IDLE_VE_CURVE_SIZE] idleVe; Optional VE table for Idle (see useSeparateVEForIdle);"%", 1, 0, 0, 999, 1 #define LUA_SCRIPT_SIZE 8000 custom lua_script_t @@LUA_SCRIPT_SIZE@@ string, ASCII, @OFFSET@, @@LUA_SCRIPT_SIZE@@ @@ -1544,13 +1543,13 @@ float[CLT_CURVE_SIZE] cltIdleCorr; CLT-based idle position multiplier for sim float[MAF_DECODING_COUNT] mafDecoding;Also known as MAF transfer function.\nkg/hour value.\nBy the way 2.081989116 kg/h = 1 ft3/m;"kg/hour", 1, 0, -500, 4000, 2 float[MAF_DECODING_COUNT] mafDecodingBins;;"V", 1, 0, -5, 150, 2 -float[IGN_RPM_COUNT x IGN_LOAD_COUNT] ignitionIatCorrTable;;"deg", 1, 0, -720, 720, 2 -float[IGN_LOAD_COUNT] ignitionIatCorrLoadBins;;"Temperature", 1, 0, 0, 500, 2 -float[IGN_RPM_COUNT] ignitionIatCorrRpmBins;;"RPM", 1, 0, 0, 18000, 2 +float[IGN_RPM_COUNT x IGN_LOAD_COUNT] ignitionIatCorrTable;;"deg", 1, 0, -720, 720, 1 +float[IGN_LOAD_COUNT] ignitionIatCorrLoadBins;;"Temperature", 1, 0, 0, 500, 0 +uint16_t[IGN_RPM_COUNT] ignitionIatCorrRpmBins;;"RPM", 1, 0, 0, 18000, 0 -float[IGN_RPM_COUNT x IGN_LOAD_COUNT] injectionPhase;;"deg", 1, 0, -720, 720, 2 -float[FUEL_LOAD_COUNT] injPhaseLoadBins;;"Load", 1, 0, 0, 500, 2 -float[FUEL_RPM_COUNT] injPhaseRpmBins;;"RPM", 1, 0, 0, 18000, 2 +float[IGN_RPM_COUNT x IGN_LOAD_COUNT] injectionPhase;;"deg", 1, 0, -720, 720, 0 +uint16_t[FUEL_LOAD_COUNT] injPhaseLoadBins;;"Load", 1, 0, 0, 500, 0 +uint16_t[FUEL_RPM_COUNT] injPhaseRpmBins;;"RPM", 1, 0, 0, 18000, 0 uint8_t[TCU_SOLENOID_COUNT x TCU_GEAR_COUNT] tcuSolenoidTable;;"onoff", 1, 0, 0, 1, 0 @@ -1561,21 +1560,20 @@ uint16_t[FUEL_LOAD_COUNT] autoscale mapEstimateTpsBins;;"% TPS", {1/@@TPS_2_BYTE uint16_t[FUEL_RPM_COUNT] mapEstimateRpmBins;;"RPM", 1, 0, 0, 18000, 0 uint8_t[SCRIPT_TABLE_8 x SCRIPT_TABLE_8] vvtTable1;;"value", 1, 0, 0, 255, 0 -float[SCRIPT_TABLE_8] vvtTable1LoadBins;;"L", 1, 0, 0, 255, 0 -float[SCRIPT_TABLE_8] vvtTable1RpmBins;RPM is float and not integer in order to use unified methods for interpolation;"RPM", 1, 0, 0, 25500, 2 +uint16_t[SCRIPT_TABLE_8] vvtTable1LoadBins;;"L", 1, 0, 0, 255, 0 +uint16_t[SCRIPT_TABLE_8] vvtTable1RpmBins;;"RPM", 1, 0, 0, 18000, 0 uint8_t[SCRIPT_TABLE_8 x SCRIPT_TABLE_8] vvtTable2;;"value", 1, 0, 0, 255, 0 -float[SCRIPT_TABLE_8] vvtTable2LoadBins;;"L", 1, 0, 0, 255, 0 -float[SCRIPT_TABLE_8] vvtTable2RpmBins;RPM is float and not integer in order to use unified methods for interpolation;"RPM", 1, 0, 0, 25500, 2 +uint16_t[SCRIPT_TABLE_8] vvtTable2LoadBins;;"L", 1, 0, 0, 255, 0 +uint16_t[SCRIPT_TABLE_8] vvtTable2RpmBins;;"RPM", 1, 0, 0, 18000, 0 +float[IGN_RPM_COUNT x IGN_LOAD_COUNT] ignitionTable;;"deg", 1, 0, -20, 90, 1 +uint16_t[IGN_LOAD_COUNT] ignitionLoadBins;;"Load", 1, 0, 0, 500, 0 +uint16_t[IGN_RPM_COUNT] ignitionRpmBins;;"RPM", 1, 0, 0, 18000, 0 -float[IGN_RPM_COUNT x IGN_LOAD_COUNT] ignitionTable;;"deg", 1, 0, -20, 90, 2 -float[IGN_LOAD_COUNT] ignitionLoadBins;;"Load", 1, 0, 0, 500, 2 -float[IGN_RPM_COUNT] ignitionRpmBins;;"RPM", 1, 0, 0, 18000, 2 - -float[FUEL_RPM_COUNT x FUEL_LOAD_COUNT] veTable;;"%", 1, 0, 0, 999, 2 -float[FUEL_LOAD_COUNT] veLoadBins;;"kPa", 1, 0, 0, 400, 2 -float[FUEL_RPM_COUNT] veRpmBins;;"RPM", 1, 0, 0, 18000, 2 +float[FUEL_RPM_COUNT x FUEL_LOAD_COUNT] veTable;;"%", 1, 0, 0, 999, 1 +uint16_t[FUEL_LOAD_COUNT] veLoadBins;;"kPa", 1, 0, 0, 400, 0 +uint16_t[FUEL_RPM_COUNT] veRpmBins;;"RPM", 1, 0, 0, 18000, 0 #if LAMBDA uint8_t[FUEL_RPM_COUNT x FUEL_LOAD_COUNT] autoscale lambdaTable;;"lambda", {1/@@PACK_MULT_LAMBDA_CFG@@}, 0, 0.6, 1.5, 2 @@ -1588,29 +1586,44 @@ uint8_t[FUEL_RPM_COUNT x FUEL_LOAD_COUNT] lambdaTable;;"afr", {1/@@PACK_MULT_AFR ! afr_table_t afrTable ! end_union -float[FUEL_LOAD_COUNT] lambdaLoadBins;;"", 1, 0, 0, 500, 2 -float[FUEL_RPM_COUNT] lambdaRpmBins;;"RPM", 1, 0, 0, 18000, 2 +uint16_t[FUEL_LOAD_COUNT] lambdaLoadBins;;"", 1, 0, 0, 500, 0 +uint16_t[FUEL_RPM_COUNT] lambdaRpmBins;;"RPM", 1, 0, 0, 18000, 0 float[TPS_TPS_ACCEL_TABLE x TPS_TPS_ACCEL_TABLE] tpsTpsAccelTable;;"value", 1, 0, 0, 30000, 2 float[TPS_TPS_ACCEL_TABLE] tpsTpsAccelFromRpmBins;;"from", 1, 0, 0, 30000, 2 -float[TPS_TPS_ACCEL_TABLE] tpsTpsAccelToRpmBins;RPM is float and not integer in order to use unified methods for interpolation;"to", 1, 0, 0, 25500, 2 +float[TPS_TPS_ACCEL_TABLE] tpsTpsAccelToRpmBins;;"to", 1, 0, 0, 25500, 2 float[SCRIPT_TABLE_8 x SCRIPT_TABLE_8] scriptTable1;;"value", 1, 0, 0, 30000, 2 -float[SCRIPT_TABLE_8] scriptTable1LoadBins;;"L", 1, 0, 0, 30000, 2 -float[SCRIPT_TABLE_8] scriptTable1RpmBins;RPM is float and not integer in order to use unified methods for interpolation;"RPM", 1, 0, 0, 25500, 2 +uint16_t[SCRIPT_TABLE_8] scriptTable1LoadBins;;"L", 1, 0, 0, 30000, 0 +uint16_t[SCRIPT_TABLE_8] scriptTable1RpmBins;;"RPM", 1, 0, 0, 25500, 0 uint8_t[SCRIPT_TABLE_8 x SCRIPT_TABLE_8] scriptTable2;;"value", 1, 0, 0, 255, 0 -float[SCRIPT_TABLE_8] scriptTable2LoadBins;;"L", 1, 0, 0, 255, 0 -float[SCRIPT_TABLE_8] scriptTable2RpmBins;RPM is float and not integer in order to use unified methods for interpolation;"RPM", 1, 0, 0, 25500, 2 +uint16_t[SCRIPT_TABLE_8] scriptTable2LoadBins;;"L", 1, 0, 0, 255, 0 +uint16_t[SCRIPT_TABLE_8] scriptTable2RpmBins;;"RPM", 1, 0, 0, 25500, 0 uint8_t[SCRIPT_TABLE_8 x SCRIPT_TABLE_8] scriptTable3;;"value", 1, 0, 0, 255, 0 -float[SCRIPT_TABLE_8] scriptTable3LoadBins;;"L", 1, 0, 0, 255, 0 -float[SCRIPT_TABLE_8] scriptTable3RpmBins;RPM is float and not integer in order to use unified methods for interpolation;"RPM", 1, 0, 0, 25500, 2 +uint16_t[SCRIPT_TABLE_8] scriptTable3LoadBins;;"L", 1, 0, 0, 255, 0 +uint16_t[SCRIPT_TABLE_8] scriptTable3RpmBins;;"RPM", 1, 0, 0, 25500, 0 uint8_t[SCRIPT_TABLE_8 x SCRIPT_TABLE_8] scriptTable4;;"value", 1, 0, 0, 255, 0 -float[SCRIPT_TABLE_8] scriptTable4LoadBins;;"L", 1, 0, 0, 255, 0 -float[SCRIPT_TABLE_8] scriptTable4RpmBins;RPM is float and not integer in order to use unified methods for interpolation;"RPM", 1, 0, 0, 25500, 2 +uint16_t[SCRIPT_TABLE_8] scriptTable4LoadBins;;"L", 1, 0, 0, 255, 0 +uint16_t[SCRIPT_TABLE_8] scriptTable4RpmBins;;"RPM", 1, 0, 0, 25500, 0 +#define TRIM_SIZE 4 + +struct cyl_trim_s + int8_t[TRIM_SIZE x TRIM_SIZE] autoscale table;;"", 0.2, 0, -25, 25, 1 +end_struct + +! All ign trim tables share axes +uint16_t[TRIM_SIZE] ignTrimLoadBins;;"", 1, 0, 0, 400, 0 +uint16_t[TRIM_SIZE] ignTrimRpmBins;;"rpm", 1, 0, 0, 20000, 0 +cyl_trim_s[12 iterate] ignTrims + +! All fuel trim tables share axes +uint16_t[TRIM_SIZE] fuelTrimLoadBins;;"", 1, 0, 0, 400, 0 +uint16_t[TRIM_SIZE] fuelTrimRpmBins;;"rpm", 1, 0, 0, 20000, 0 +cyl_trim_s[12 iterate] fuelTrims end_struct #define MOCK_MAP_COMMAND "mock_map_voltage" diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index 646d0c248f..32652b7ce3 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -711,6 +711,138 @@ enable2ndByteCanID = false gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. upDownLabel = "(RICHER)", "(LEANER)" + table = fuelTrimTbl1, fuelTrimMap1, "Fuel trim cyl 1", 1 + xBins = fuelTrimRpmBins, RPMValue + yBins = fuelTrimLoadBins, veTableYAxis + zBins = fuelTrims1_table + upDownLabel = "(RICHER)", "(LEANER)" + + table = fuelTrimTbl2, fuelTrimMap2, "Fuel trim cyl 2", 1 + xBins = fuelTrimRpmBins, RPMValue + yBins = fuelTrimLoadBins, veTableYAxis + zBins = fuelTrims2_table + upDownLabel = "(RICHER)", "(LEANER)" + + table = fuelTrimTbl3, fuelTrimMap3, "Fuel trim cyl 3", 1 + xBins = fuelTrimRpmBins, RPMValue + yBins = fuelTrimLoadBins, veTableYAxis + zBins = fuelTrims3_table + upDownLabel = "(RICHER)", "(LEANER)" + + table = fuelTrimTbl4, fuelTrimMap4, "Fuel trim cyl 4", 1 + xBins = fuelTrimRpmBins, RPMValue + yBins = fuelTrimLoadBins, veTableYAxis + zBins = fuelTrims4_table + upDownLabel = "(RICHER)", "(LEANER)" + + table = fuelTrimTbl5, fuelTrimMap5, "Fuel trim cyl 5", 1 + xBins = fuelTrimRpmBins, RPMValue + yBins = fuelTrimLoadBins, veTableYAxis + zBins = fuelTrims5_table + upDownLabel = "(RICHER)", "(LEANER)" + + table = fuelTrimTbl6, fuelTrimMap6, "Fuel trim cyl 6", 1 + xBins = fuelTrimRpmBins, RPMValue + yBins = fuelTrimLoadBins, veTableYAxis + zBins = fuelTrims6_table + upDownLabel = "(RICHER)", "(LEANER)" + + table = fuelTrimTbl7, fuelTrimMap7, "Fuel trim cyl 7", 1 + xBins = fuelTrimRpmBins, RPMValue + yBins = fuelTrimLoadBins, veTableYAxis + zBins = fuelTrims7_table + upDownLabel = "(RICHER)", "(LEANER)" + + table = fuelTrimTbl8, fuelTrimMap8, "Fuel trim cyl 8", 1 + xBins = fuelTrimRpmBins, RPMValue + yBins = fuelTrimLoadBins, veTableYAxis + zBins = fuelTrims8_table + upDownLabel = "(RICHER)", "(LEANER)" + + table = fuelTrimTbl9, fuelTrimMap9, "Fuel trim cyl 9", 1 + xBins = fuelTrimRpmBins, RPMValue + yBins = fuelTrimLoadBins, veTableYAxis + zBins = fuelTrims9_table + upDownLabel = "(RICHER)", "(LEANER)" + + table = fuelTrimTbl10, fuelTrimMap10, "Fuel trim cyl 10", 1 + xBins = fuelTrimRpmBins, RPMValue + yBins = fuelTrimLoadBins, veTableYAxis + zBins = fuelTrims10_table + upDownLabel = "(RICHER)", "(LEANER)" + + table = fuelTrimTbl11, fuelTrimMap11, "Fuel trim cyl 11", 1 + xBins = fuelTrimRpmBins, RPMValue + yBins = fuelTrimLoadBins, veTableYAxis + zBins = fuelTrims11_table + upDownLabel = "(RICHER)", "(LEANER)" + + table = fuelTrimTbl12, fuelTrimMap12, "Fuel trim cyl 12", 1 + xBins = fuelTrimRpmBins, RPMValue + yBins = fuelTrimLoadBins, veTableYAxis + zBins = fuelTrims12_table + upDownLabel = "(RICHER)", "(LEANER)" + + table = ignTrimTbl1, ignTrimMap1, "Ign trim cyl 1", 1 + xBins =ignTrimRpmBins, RPMValue + yBins =ignTrimLoadBins, ignitionLoad + zBins =ignTrims1_table + + table = ignTrimTbl2, ignTrimMap2, "Ign trim cyl 2", 1 + xBins =ignTrimRpmBins, RPMValue + yBins =ignTrimLoadBins, ignitionLoad + zBins =ignTrims2_table + + table = ignTrimTbl3, ignTrimMap3, "Ign trim cyl 3", 1 + xBins =ignTrimRpmBins, RPMValue + yBins =ignTrimLoadBins, ignitionLoad + zBins =ignTrims3_table + + table = ignTrimTbl4, ignTrimMap4, "Ign trim cyl 4", 1 + xBins =ignTrimRpmBins, RPMValue + yBins =ignTrimLoadBins, ignitionLoad + zBins =ignTrims4_table + + table = ignTrimTbl5, ignTrimMap5, "Ign trim cyl 5", 1 + xBins =ignTrimRpmBins, RPMValue + yBins =ignTrimLoadBins, ignitionLoad + zBins =ignTrims5_table + + table = ignTrimTbl6, ignTrimMap6, "Ign trim cyl 6", 1 + xBins =ignTrimRpmBins, RPMValue + yBins =ignTrimLoadBins, ignitionLoad + zBins =ignTrims6_table + + table = ignTrimTbl7, ignTrimMap7, "Ign trim cyl 7", 1 + xBins =ignTrimRpmBins, RPMValue + yBins =ignTrimLoadBins, ignitionLoad + zBins =ignTrims7_table + + table = ignTrimTbl8, ignTrimMap8, "Ign trim cyl 8", 1 + xBins =ignTrimRpmBins, RPMValue + yBins =ignTrimLoadBins, ignitionLoad + zBins =ignTrims8_table + + table = ignTrimTbl9, ignTrimMap9, "Ign trim cyl 9", 1 + xBins =ignTrimRpmBins, RPMValue + yBins =ignTrimLoadBins, ignitionLoad + zBins =ignTrims9_table + + table = ignTrimTbl10, ignTrimMap10, "Ign trim cyl 10", 1 + xBins = ignTrimRpmBins, RPMValue + yBins = ignTrimLoadBins, ignitionLoad + zBins = ignTrims10_table + + table = ignTrimTbl11, ignTrimMap11, "Ign trim cyl 11", 1 + xBins = ignTrimRpmBins, RPMValue + yBins = ignTrimLoadBins, ignitionLoad + zBins = ignTrims11_table + + table = ignTrimTbl12, ignTrimMap12, "Ign trim cyl 12", 1 + xBins = ignTrimRpmBins, RPMValue + yBins = ignTrimLoadBins, ignitionLoad + zBins = ignTrims12_table + table = mapEstimateTableTbl, mapEstimateTableMap, "MAP Estimate", 1 xBins = mapEstimateRpmBins, RPMValue yBins = mapEstimateTpsBins, TPSValue @@ -1188,7 +1320,6 @@ menuDialog = main subMenu = std_separator subMenu = dwellSettings, "Dwell", 0, {isIgnitionEnabled == 1} - subMenu = ignitionCylExtra, "Ignition cylinder trim", 0, {isIgnitionEnabled == 1} subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} subMenu = std_separator @@ -1230,7 +1361,10 @@ menuDialog = main subMenu = idleAdvanceCurve, "Ignition advance", 0, {useSeparateAdvanceForIdle == 1} menu = "&Advanced" - subMenu = boostDialog, "Boost Control" + subMenu = ignitionCylExtra, "Cylinder offsets", 0 + + subMenu = std_separator + subMenu = boostDialog, "Boost Control" subMenu = boostOpenLoopDialog, "Boost Control Open Loop", { isBoostControlEnabled && boostType == 0 } subMenu = boostPidDialog, "Boost Control Closed Loop PID", { isBoostControlEnabled && boostType == 1 } subMenu = boostTargetDialog, "Boost Control Closed Loop Target", { isBoostControlEnabled && boostType == 1 } @@ -1364,6 +1498,33 @@ menuDialog = main # subMenu = antiLag, "Antilag Setup" # subMenu = std_separator + groupMenu = "Cylinder fuel trims" + groupChildMenu = fuelTrimTbl1, "Fuel trim cyl 1" + groupChildMenu = fuelTrimTbl2, "Fuel trim cyl 2" + groupChildMenu = fuelTrimTbl3, "Fuel trim cyl 3" + groupChildMenu = fuelTrimTbl4, "Fuel trim cyl 4" + groupChildMenu = fuelTrimTbl5, "Fuel trim cyl 5" + groupChildMenu = fuelTrimTbl6, "Fuel trim cyl 6" + groupChildMenu = fuelTrimTbl7, "Fuel trim cyl 7" + groupChildMenu = fuelTrimTbl8, "Fuel trim cyl 8" + groupChildMenu = fuelTrimTbl9, "Fuel trim cyl 9" + groupChildMenu = fuelTrimTbl10, "Fuel trim cyl 10" + groupChildMenu = fuelTrimTbl11, "Fuel trim cyl 11" + groupChildMenu = fuelTrimTbl12, "Fuel trim cyl 12" + + groupMenu = "Cylinder ign trims" + groupChildMenu = ignTrimTbl1, "Ignition trim cyl 1" + groupChildMenu = ignTrimTbl2, "Ignition trim cyl 2" + groupChildMenu = ignTrimTbl3, "Ignition trim cyl 3" + groupChildMenu = ignTrimTbl4, "Ignition trim cyl 4" + groupChildMenu = ignTrimTbl5, "Ignition trim cyl 5" + groupChildMenu = ignTrimTbl6, "Ignition trim cyl 6" + groupChildMenu = ignTrimTbl7, "Ignition trim cyl 7" + groupChildMenu = ignTrimTbl8, "Ignition trim cyl 8" + groupChildMenu = ignTrimTbl9, "Ignition trim cyl 9" + groupChildMenu = ignTrimTbl10, "Ignition trim cyl 10" + groupChildMenu = ignTrimTbl11, "Ignition trim cyl 11" + groupChildMenu = ignTrimTbl12, "Ignition trim cyl 12" menu = "Help" subMenu = helpGeneral, "rusEFI Info" @@ -1863,19 +2024,22 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00" panel = fuelParams panel = injectorsDeadTime - dialog = ignitionCylExtra, "Ignition Cylinder Extra Timing" - field = "Extra cyl #1", timing_offset_cylinder1 - field = "Extra cyl #2", timing_offset_cylinder2, {cylindersCount > 1} - field = "Extra cyl #3", timing_offset_cylinder3, {cylindersCount > 2} - field = "Extra cyl #4", timing_offset_cylinder4, {cylindersCount > 3} - field = "Extra cyl #5", timing_offset_cylinder5, {cylindersCount > 4} - field = "Extra cyl #6", timing_offset_cylinder6, {cylindersCount > 5} - field = "Extra cyl #7", timing_offset_cylinder7, {cylindersCount > 6} - field = "Extra cyl #8", timing_offset_cylinder8, {cylindersCount > 7} - field = "Extra cyl #9", timing_offset_cylinder9, {cylindersCount > 8} - field = "Extra cyl #10", timing_offset_cylinder10, {cylindersCount > 9} - field = "Extra cyl #11", timing_offset_cylinder11, {cylindersCount > 10} - field = "Extra cyl #12", timing_offset_cylinder12, {cylindersCount > 11} + dialog = ignitionCylExtra, "Cylinder offsets" + field = "Offset angle for each cylinder if you have an odd fire" + field = "engine, like a v-twin or some V6/V10 engines" + field = "#Positive numbers retard, negative numbers advance" + field = "Offset cyl 1", timing_offset_cylinder1 + field = "Offset cyl 2", timing_offset_cylinder2, {cylindersCount > 1} + field = "Offset cyl 3", timing_offset_cylinder3, {cylindersCount > 2} + field = "Offset cyl 4", timing_offset_cylinder4, {cylindersCount > 3} + field = "Offset cyl 5", timing_offset_cylinder5, {cylindersCount > 4} + field = "Offset cyl 6", timing_offset_cylinder6, {cylindersCount > 5} + field = "Offset cyl 7", timing_offset_cylinder7, {cylindersCount > 6} + field = "Offset cyl 8", timing_offset_cylinder8, {cylindersCount > 7} + field = "Offset cyl 9", timing_offset_cylinder9, {cylindersCount > 8} + field = "Offset cyl 10", timing_offset_cylinder10, {cylindersCount > 9} + field = "Offset cyl 11", timing_offset_cylinder11, {cylindersCount > 10} + field = "Offset cyl 12", timing_offset_cylinder12, {cylindersCount > 11} dialog = multisparkDwellParams, "Delay & Dwell" field = "Spark duration", multisparkSparkDuration, {multisparkEnable} diff --git a/firmware/util/containers/table_helper.h b/firmware/util/containers/table_helper.h index 7d1c0c2832..8dd24776c6 100644 --- a/firmware/util/containers/table_helper.h +++ b/firmware/util/containers/table_helper.h @@ -117,8 +117,9 @@ private: float m_colMult = 1; }; -typedef Map3D> lambda_Map3D_t; -typedef Map3D fuel_Map3D_t; +typedef Map3D> lambda_Map3D_t; +typedef Map3D fuel_Map3D_t; +typedef Map3D baroCorr_Map3D_t; typedef Map3D pedal2tps_t; typedef Map3D> boostOpenLoop_Map3D_t; typedef Map3D boostClosedLoop_Map3D_t; diff --git a/firmware/util/math/interpolation.h b/firmware/util/math/interpolation.h index 625c6a56fc..42586f6aad 100644 --- a/firmware/util/math/interpolation.h +++ b/firmware/util/math/interpolation.h @@ -202,7 +202,7 @@ int findIndexMsgExt(const char *msg, const kType array[], int size, kType value) return middle; } -#define findIndexMsg(msg, array, size, value) findIndexMsgExt(msg, array, size, value) +#define findIndexMsg(msg, array, size, value) findIndexMsgExt(msg, array, size, value) /** * Sets specified value for specified key in a correction curve