ui & config for fuel/ign trim tables (#3704)

* ui & config

* bump flash version

* compaction

* s

* make things happy

* fsio too

* OK, well those defaults were insane

* b

* why are these defaults insane

* adjust cylinder offset ui

* s

* cleanup
This commit is contained in:
Matthew Kennedy 2021-12-20 18:58:53 -08:00 committed by GitHub
parent 7249ba3b01
commit c176bbebc1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 236 additions and 56 deletions

View File

@ -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<SCRIPT_TABLE_8, SCRIPT_TABLE_8, uint8_t, uint16_t, uint16_t>;
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;

View File

@ -17,8 +17,8 @@
// see useFSIO5ForCriticalIssueEngineStop
#define MAGIC_OFFSET_FOR_CRITICAL_ENGINE 5
typedef Map3D<SCRIPT_TABLE_8, SCRIPT_TABLE_8, float, float, float> fsio8_Map3D_f32t;
typedef Map3D<SCRIPT_TABLE_8, SCRIPT_TABLE_8, uint8_t, float, float> fsio8_Map3D_u8t;
typedef Map3D<SCRIPT_TABLE_8, SCRIPT_TABLE_8, float, uint16_t, uint16_t> fsio8_Map3D_f32t;
typedef Map3D<SCRIPT_TABLE_8, SCRIPT_TABLE_8, uint8_t, uint16_t, uint16_t> fsio8_Map3D_u8t;
expected<float> getEngineValue(le_action_e action);

View File

@ -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"

View File

@ -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}

View File

@ -117,8 +117,9 @@ private:
float m_colMult = 1;
};
typedef Map3D<FUEL_RPM_COUNT, FUEL_LOAD_COUNT, uint8_t, float, float, efi::ratio<1, PACK_MULT_LAMBDA_CFG>> lambda_Map3D_t;
typedef Map3D<FUEL_RPM_COUNT, FUEL_LOAD_COUNT, float, float, float> fuel_Map3D_t;
typedef Map3D<FUEL_RPM_COUNT, FUEL_LOAD_COUNT, uint8_t, uint16_t, uint16_t, efi::ratio<1, PACK_MULT_LAMBDA_CFG>> lambda_Map3D_t;
typedef Map3D<FUEL_RPM_COUNT, FUEL_LOAD_COUNT, float, uint16_t, uint16_t> fuel_Map3D_t;
typedef Map3D<BARO_CORR_SIZE, BARO_CORR_SIZE, float, float, float> baroCorr_Map3D_t;
typedef Map3D<PEDAL_TO_TPS_SIZE, PEDAL_TO_TPS_SIZE, uint8_t, uint8_t, uint8_t> pedal2tps_t;
typedef Map3D<BOOST_RPM_COUNT, BOOST_LOAD_COUNT, uint8_t, uint8_t, uint8_t, efi::ratio<LOAD_1_BYTE_PACKING_MULT>> boostOpenLoop_Map3D_t;
typedef Map3D<BOOST_RPM_COUNT, BOOST_LOAD_COUNT, uint8_t, uint8_t, uint8_t> boostClosedLoop_Map3D_t;

View File

@ -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<float>(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