From 6f51dc9e5eb922fa25a91b1f4ac67ffe09bd08b2 Mon Sep 17 00:00:00 2001 From: GitHub build-firmware Action Date: Sun, 5 Jul 2020 20:30:05 +0000 Subject: [PATCH] Auto-generated configs and docs --- ...ngine_configuration_generated_structures.h | 4 ++-- .../controllers/algo/rusefi_generated.h | 6 ++++-- ...ngine_configuration_generated_structures.h | 4 ++-- .../generated/fsio_enums_generated.def | 2 +- .../controllers/generated/fsio_getters.def | 2 +- firmware/controllers/generated/fsio_names.def | 2 +- .../controllers/generated/fsio_strings.def | 2 +- .../controllers/generated/rusefi_generated.h | 6 ++++-- .../controllers/generated/signature_all.h | 4 ++-- .../controllers/generated/signature_fra.h | 4 ++-- .../controllers/generated/signature_kin.h | 4 ++-- .../controllers/generated/signature_mre.h | 4 ++-- .../controllers/generated/signature_pro.h | 4 ++-- .../controllers/generated/signature_pth.h | 4 ++-- firmware/tunerstudio/cache.zip | Bin 386787 -> 386973 bytes firmware/tunerstudio/rusefi.ini | 12 +++++++----- firmware/tunerstudio/rusefi_frankenso.ini | 12 +++++++----- firmware/tunerstudio/rusefi_kinetis.ini | 12 +++++++----- firmware/tunerstudio/rusefi_microrusefi.ini | 12 +++++++----- firmware/tunerstudio/rusefi_prometheus.ini | 12 +++++++----- firmware/tunerstudio/rusefi_proteus.ini | 12 +++++++----- .../com/rusefi/config/generated/Fields.java | 7 ++++--- java_console/rusefi.xml | 2 +- 23 files changed, 75 insertions(+), 58 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index dcace5fc52..e3a7dfe115 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 05 01:09:22 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 05 20:29:52 UTC 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONFIG_BOARDS_KINETIS_CONFIG_CONTROLLERS_ALGO_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -3522,4 +3522,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 05 01:09:22 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 05 20:29:52 UTC 2020 diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index c0e03b4839..5257c9769a 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -559,6 +559,7 @@ #define GAUGE_NAME_FUEL_IAT_CORR "fuel: IAT correction" #define GAUGE_NAME_FUEL_INJ_DUTY "fuel: injector duty cycle" #define GAUGE_NAME_FUEL_LAST_INJECTION "fuel: Last injection" +#define GAUGE_NAME_FUEL_LOAD "fuel: load" #define GAUGE_NAME_FUEL_PID_CORR "fuel: Short-term fuel trim" #define GAUGE_NAME_FUEL_RUNNING "fuel: running" #define GAUGE_NAME_FUEL_TPS_EXTRA "fuel: TPS acceleration extra fuel ms" @@ -568,6 +569,7 @@ #define GAUGE_NAME_FUEL_WALL_CORRECTION "fuel: wall corr ms" #define GAUGE_NAME_IAC "Idle Air Valve" #define GAUGE_NAME_IAT "IAT" +#define GAUGE_NAME_IGNITION_LOAD "ign: load" #define GAUGE_NAME_INJECTOR_LAG "fuel: injector lag" #define GAUGE_NAME_KNOCK_COUNTER "knock: counter" #define GAUGE_NAME_KNOCK_LEVEL "knock: current level" @@ -1058,7 +1060,7 @@ #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD kin #define SIGNATURE_DATE 2020.07.05 -#define SIGNATURE_HASH 3200863293 +#define SIGNATURE_HASH 231064814 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 #define sparkDwellRpmBins_offset 332 @@ -1318,7 +1320,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator true #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2020.07.05.kin.3200863293" +#define TS_SIGNATURE "rusEFI 2020.07.05.kin.231064814" #define TS_SINGLE_WRITE_COMMAND 'W' #define tunerStudioSerialSpeed_offset 728 #define twoWireBatchIgnition_offset 1476 diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index 08a84d0368..6c6524c194 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 05 01:09:15 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 05 20:29:44 UTC 2020 // by class com.rusefi.output.CHeaderConsumer // begin #ifndef CONTROLLERS_GENERATED_ENGINE_CONFIGURATION_GENERATED_STRUCTURES_H @@ -3522,4 +3522,4 @@ typedef struct persistent_config_s persistent_config_s; #endif // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 05 01:09:15 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 05 20:29:44 UTC 2020 diff --git a/firmware/controllers/generated/fsio_enums_generated.def b/firmware/controllers/generated/fsio_enums_generated.def index 972cf4f616..714cb398cd 100644 --- a/firmware/controllers/generated/fsio_enums_generated.def +++ b/firmware/controllers/generated/fsio_enums_generated.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 05 01:09:15 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 05 20:29:44 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer FSIO_SETTING_FANONTEMPERATURE = 1000, diff --git a/firmware/controllers/generated/fsio_getters.def b/firmware/controllers/generated/fsio_getters.def index 23191caa5a..6bbce147da 100644 --- a/firmware/controllers/generated/fsio_getters.def +++ b/firmware/controllers/generated/fsio_getters.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 05 01:09:15 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 05 20:29:44 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer case FSIO_SETTING_FANONTEMPERATURE: diff --git a/firmware/controllers/generated/fsio_names.def b/firmware/controllers/generated/fsio_names.def index d6d6d0d537..36b43e3fd8 100644 --- a/firmware/controllers/generated/fsio_names.def +++ b/firmware/controllers/generated/fsio_names.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 05 01:09:15 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 05 20:29:44 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer static LENameOrdinalPair lefanOnTemperature(FSIO_SETTING_FANONTEMPERATURE, "cfg_fanOnTemperature"); diff --git a/firmware/controllers/generated/fsio_strings.def b/firmware/controllers/generated/fsio_strings.def index eb9e9eb0cb..25e8fdd1fa 100644 --- a/firmware/controllers/generated/fsio_strings.def +++ b/firmware/controllers/generated/fsio_strings.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 05 01:09:15 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 05 20:29:44 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer case FSIO_SETTING_FANONTEMPERATURE: diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index ab36f30655..5ce9832b6b 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -559,6 +559,7 @@ #define GAUGE_NAME_FUEL_IAT_CORR "fuel: IAT correction" #define GAUGE_NAME_FUEL_INJ_DUTY "fuel: injector duty cycle" #define GAUGE_NAME_FUEL_LAST_INJECTION "fuel: Last injection" +#define GAUGE_NAME_FUEL_LOAD "fuel: load" #define GAUGE_NAME_FUEL_PID_CORR "fuel: Short-term fuel trim" #define GAUGE_NAME_FUEL_RUNNING "fuel: running" #define GAUGE_NAME_FUEL_TPS_EXTRA "fuel: TPS acceleration extra fuel ms" @@ -568,6 +569,7 @@ #define GAUGE_NAME_FUEL_WALL_CORRECTION "fuel: wall corr ms" #define GAUGE_NAME_IAC "Idle Air Valve" #define GAUGE_NAME_IAT "IAT" +#define GAUGE_NAME_IGNITION_LOAD "ign: load" #define GAUGE_NAME_INJECTOR_LAG "fuel: injector lag" #define GAUGE_NAME_KNOCK_COUNTER "knock: counter" #define GAUGE_NAME_KNOCK_LEVEL "knock: current level" @@ -1058,7 +1060,7 @@ #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD all #define SIGNATURE_DATE 2020.07.05 -#define SIGNATURE_HASH 1945604263 +#define SIGNATURE_HASH 3237681268 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 #define sparkDwellRpmBins_offset 332 @@ -1318,7 +1320,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator false #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2020.07.05.all.1945604263" +#define TS_SIGNATURE "rusEFI 2020.07.05.all.3237681268" #define TS_SINGLE_WRITE_COMMAND 'W' #define tunerStudioSerialSpeed_offset 728 #define twoWireBatchIgnition_offset 1476 diff --git a/firmware/controllers/generated/signature_all.h b/firmware/controllers/generated/signature_all.h index 306a3b35a6..ffa89b890d 100644 --- a/firmware/controllers/generated/signature_all.h +++ b/firmware/controllers/generated/signature_all.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD all #define SIGNATURE_DATE 2020.07.05 -#define SIGNATURE_HASH 3057196371 -#define TS_SIGNATURE "rusEFI 2020.07.05.all.3057196371" +#define SIGNATURE_HASH 3237681268 +#define TS_SIGNATURE "rusEFI 2020.07.05.all.3237681268" diff --git a/firmware/controllers/generated/signature_fra.h b/firmware/controllers/generated/signature_fra.h index 1122271f00..70f0bbf3bb 100644 --- a/firmware/controllers/generated/signature_fra.h +++ b/firmware/controllers/generated/signature_fra.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD fra #define SIGNATURE_DATE 2020.07.05 -#define SIGNATURE_HASH 1757311408 -#define TS_SIGNATURE "rusEFI 2020.07.05.fra.1757311408" +#define SIGNATURE_HASH 511472791 +#define TS_SIGNATURE "rusEFI 2020.07.05.fra.511472791" diff --git a/firmware/controllers/generated/signature_kin.h b/firmware/controllers/generated/signature_kin.h index 416783ada5..bd0bc05c30 100644 --- a/firmware/controllers/generated/signature_kin.h +++ b/firmware/controllers/generated/signature_kin.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD kin #define SIGNATURE_DATE 2020.07.05 -#define SIGNATURE_HASH 2064105929 -#define TS_SIGNATURE "rusEFI 2020.07.05.kin.2064105929" +#define SIGNATURE_HASH 231064814 +#define TS_SIGNATURE "rusEFI 2020.07.05.kin.231064814" diff --git a/firmware/controllers/generated/signature_mre.h b/firmware/controllers/generated/signature_mre.h index 4686203dd6..806260ead4 100644 --- a/firmware/controllers/generated/signature_mre.h +++ b/firmware/controllers/generated/signature_mre.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD mre #define SIGNATURE_DATE 2020.07.05 -#define SIGNATURE_HASH 4291283933 -#define TS_SIGNATURE "rusEFI 2020.07.05.mre.4291283933" +#define SIGNATURE_HASH 2298859258 +#define TS_SIGNATURE "rusEFI 2020.07.05.mre.2298859258" diff --git a/firmware/controllers/generated/signature_pro.h b/firmware/controllers/generated/signature_pro.h index cba10e419e..759ab745ca 100644 --- a/firmware/controllers/generated/signature_pro.h +++ b/firmware/controllers/generated/signature_pro.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD pro #define SIGNATURE_DATE 2020.07.05 -#define SIGNATURE_HASH 1000893596 -#define TS_SIGNATURE "rusEFI 2020.07.05.pro.1000893596" +#define SIGNATURE_HASH 1298819515 +#define TS_SIGNATURE "rusEFI 2020.07.05.pro.1298819515" diff --git a/firmware/controllers/generated/signature_pth.h b/firmware/controllers/generated/signature_pth.h index 7ff27eeb10..0ac55fa967 100644 --- a/firmware/controllers/generated/signature_pth.h +++ b/firmware/controllers/generated/signature_pth.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD pth #define SIGNATURE_DATE 2020.07.05 -#define SIGNATURE_HASH 1126548951 -#define TS_SIGNATURE "rusEFI 2020.07.05.pth.1126548951" +#define SIGNATURE_HASH 904380656 +#define TS_SIGNATURE "rusEFI 2020.07.05.pth.904380656" diff --git a/firmware/tunerstudio/cache.zip b/firmware/tunerstudio/cache.zip index 1100a32851f2a05a3d34b204f91f41bee8afc02f..3b5e9020be43d8225fe8e9e927079d66872cf85d 100644 GIT binary patch delta 151288 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 diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index 9095d4c509..3609381652 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -45,12 +45,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.05.all.3057196371" + signature = "rusEFI 2020.07.05.all.3237681268" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.05.all.3057196371" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.05.all.3237681268" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -88,7 +88,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 05 01:33:54 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 05 20:29:44 UTC 2020 pageSize = 20000 page = 1 @@ -2262,6 +2262,7 @@ gaugeCategory = Ignition ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 dwellGauge = sparkDwellValue, "Dwell", "mSec", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1 coilDutyCycleGauge = coilDutyCycle, "dwell: coil duty cycle", "perc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 + ignitionLoadGauge = ignitionLoad, "ign: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 gaugeCategory = Acceleration Enrichment engineLoadDeltaGauge = engineLoadDelta,"AE: load change","value", 0, 120, 10, 10, 100, 100, 1, 1 @@ -2286,6 +2287,7 @@ gaugeCategory = Fueling fuelRunningGauge = fuelRunning, "fuel: running", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 baseFuelGauge = baseFuel, "fuel: base", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 fuelPidCorrectionGauge = fuelPidCorrection, "fuel: Short-term fuel trim", "%", -10, 10, -8, -5, 5, 8, 3, 1 + fuelingLoadGauge = fuelingLoad, "fuel: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 gaugeCategory = Throttle Body (incl. ETB) pedalPositionGauge = throttlePedalPosition, "Throttle pedal position", "%", 0, 120, 0, 0, 100, 100, 1, 1 @@ -2535,14 +2537,14 @@ menuDialog = main subMenu = std_separator # Targets & closed loop - subMenu = afrTableTbl, "Target AFR", 0, {isInjectionEnabled == 1 && (fuelAlgorithm == LM_SPEED_DENSITY || fuelAlgorithm == LM_REAL_MAF)} + subMenu = afrTableTbl, "Target AFR", 0, {isInjectionEnabled == 1} subMenu = fuelClosedLoopDialog, "Closed loop fuel correction", 0, {isInjectionEnabled == 1} subMenu = coastingFuelCutControl, "Deceleration fuel cutoff (DFCO)", 0, {isInjectionEnabled == 1} subMenu = std_separator # Fuel table/VE subMenu = fuelTableDialog, "Fuel table", 0, {isInjectionEnabled == 1 && fuelAlgorithm != LM_SPEED_DENSITY && fuelAlgorithm != LM_REAL_MAF} - subMenu = veTableDialog, "VE", 0, {isInjectionEnabled == 1 && (fuelAlgorithm == LM_SPEED_DENSITY || fuelAlgorithm == LM_REAL_MAF)} + subMenu = veTableDialog, "VE", 0, {isInjectionEnabled == 1} subMenu = injPhaseTableTbl, "Injection phase", 0, {isInjectionEnabled == 1} subMenu = std_separator diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index ec5eb8e93e..27f7fd3758 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -45,12 +45,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.05.fra.1757311408" + signature = "rusEFI 2020.07.05.fra.511472791" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.05.fra.1757311408" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.05.fra.511472791" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -88,7 +88,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 05 01:33:57 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 05 20:29:48 UTC 2020 pageSize = 20000 page = 1 @@ -2262,6 +2262,7 @@ gaugeCategory = Ignition ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 dwellGauge = sparkDwellValue, "Dwell", "mSec", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1 coilDutyCycleGauge = coilDutyCycle, "dwell: coil duty cycle", "perc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 + ignitionLoadGauge = ignitionLoad, "ign: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 gaugeCategory = Acceleration Enrichment engineLoadDeltaGauge = engineLoadDelta,"AE: load change","value", 0, 120, 10, 10, 100, 100, 1, 1 @@ -2286,6 +2287,7 @@ gaugeCategory = Fueling fuelRunningGauge = fuelRunning, "fuel: running", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 baseFuelGauge = baseFuel, "fuel: base", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 fuelPidCorrectionGauge = fuelPidCorrection, "fuel: Short-term fuel trim", "%", -10, 10, -8, -5, 5, 8, 3, 1 + fuelingLoadGauge = fuelingLoad, "fuel: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 gaugeCategory = Throttle Body (incl. ETB) pedalPositionGauge = throttlePedalPosition, "Throttle pedal position", "%", 0, 120, 0, 0, 100, 100, 1, 1 @@ -2535,14 +2537,14 @@ menuDialog = main subMenu = std_separator # Targets & closed loop - subMenu = afrTableTbl, "Target AFR", 0, {isInjectionEnabled == 1 && (fuelAlgorithm == LM_SPEED_DENSITY || fuelAlgorithm == LM_REAL_MAF)} + subMenu = afrTableTbl, "Target AFR", 0, {isInjectionEnabled == 1} subMenu = fuelClosedLoopDialog, "Closed loop fuel correction", 0, {isInjectionEnabled == 1} subMenu = coastingFuelCutControl, "Deceleration fuel cutoff (DFCO)", 0, {isInjectionEnabled == 1} subMenu = std_separator # Fuel table/VE subMenu = fuelTableDialog, "Fuel table", 0, {isInjectionEnabled == 1 && fuelAlgorithm != LM_SPEED_DENSITY && fuelAlgorithm != LM_REAL_MAF} - subMenu = veTableDialog, "VE", 0, {isInjectionEnabled == 1 && (fuelAlgorithm == LM_SPEED_DENSITY || fuelAlgorithm == LM_REAL_MAF)} + subMenu = veTableDialog, "VE", 0, {isInjectionEnabled == 1} subMenu = injPhaseTableTbl, "Injection phase", 0, {isInjectionEnabled == 1} subMenu = std_separator diff --git a/firmware/tunerstudio/rusefi_kinetis.ini b/firmware/tunerstudio/rusefi_kinetis.ini index 95df6c3651..dc253dae80 100644 --- a/firmware/tunerstudio/rusefi_kinetis.ini +++ b/firmware/tunerstudio/rusefi_kinetis.ini @@ -45,12 +45,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.05.kin.2064105929" + signature = "rusEFI 2020.07.05.kin.231064814" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.05.kin.2064105929" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.05.kin.231064814" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -88,7 +88,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 05 01:34:01 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 05 20:29:52 UTC 2020 pageSize = 20000 page = 1 @@ -2262,6 +2262,7 @@ gaugeCategory = Ignition ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 dwellGauge = sparkDwellValue, "Dwell", "mSec", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1 coilDutyCycleGauge = coilDutyCycle, "dwell: coil duty cycle", "perc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 + ignitionLoadGauge = ignitionLoad, "ign: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 gaugeCategory = Acceleration Enrichment engineLoadDeltaGauge = engineLoadDelta,"AE: load change","value", 0, 120, 10, 10, 100, 100, 1, 1 @@ -2286,6 +2287,7 @@ gaugeCategory = Fueling fuelRunningGauge = fuelRunning, "fuel: running", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 baseFuelGauge = baseFuel, "fuel: base", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 fuelPidCorrectionGauge = fuelPidCorrection, "fuel: Short-term fuel trim", "%", -10, 10, -8, -5, 5, 8, 3, 1 + fuelingLoadGauge = fuelingLoad, "fuel: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 gaugeCategory = Throttle Body (incl. ETB) pedalPositionGauge = throttlePedalPosition, "Throttle pedal position", "%", 0, 120, 0, 0, 100, 100, 1, 1 @@ -2535,14 +2537,14 @@ menuDialog = main subMenu = std_separator # Targets & closed loop - subMenu = afrTableTbl, "Target AFR", 0, {isInjectionEnabled == 1 && (fuelAlgorithm == LM_SPEED_DENSITY || fuelAlgorithm == LM_REAL_MAF)} + subMenu = afrTableTbl, "Target AFR", 0, {isInjectionEnabled == 1} subMenu = fuelClosedLoopDialog, "Closed loop fuel correction", 0, {isInjectionEnabled == 1} subMenu = coastingFuelCutControl, "Deceleration fuel cutoff (DFCO)", 0, {isInjectionEnabled == 1} subMenu = std_separator # Fuel table/VE subMenu = fuelTableDialog, "Fuel table", 0, {isInjectionEnabled == 1 && fuelAlgorithm != LM_SPEED_DENSITY && fuelAlgorithm != LM_REAL_MAF} - subMenu = veTableDialog, "VE", 0, {isInjectionEnabled == 1 && (fuelAlgorithm == LM_SPEED_DENSITY || fuelAlgorithm == LM_REAL_MAF)} + subMenu = veTableDialog, "VE", 0, {isInjectionEnabled == 1} subMenu = injPhaseTableTbl, "Injection phase", 0, {isInjectionEnabled == 1} subMenu = std_separator diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index 3552442d40..1f415fc353 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -45,12 +45,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.05.mre.4291283933" + signature = "rusEFI 2020.07.05.mre.2298859258" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.05.mre.4291283933" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.05.mre.2298859258" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -88,7 +88,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 05 01:33:56 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 05 20:29:46 UTC 2020 pageSize = 20000 page = 1 @@ -2262,6 +2262,7 @@ gaugeCategory = Ignition ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 dwellGauge = sparkDwellValue, "Dwell", "mSec", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1 coilDutyCycleGauge = coilDutyCycle, "dwell: coil duty cycle", "perc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 + ignitionLoadGauge = ignitionLoad, "ign: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 gaugeCategory = Acceleration Enrichment engineLoadDeltaGauge = engineLoadDelta,"AE: load change","value", 0, 120, 10, 10, 100, 100, 1, 1 @@ -2286,6 +2287,7 @@ gaugeCategory = Fueling fuelRunningGauge = fuelRunning, "fuel: running", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 baseFuelGauge = baseFuel, "fuel: base", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 fuelPidCorrectionGauge = fuelPidCorrection, "fuel: Short-term fuel trim", "%", -10, 10, -8, -5, 5, 8, 3, 1 + fuelingLoadGauge = fuelingLoad, "fuel: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 gaugeCategory = Throttle Body (incl. ETB) pedalPositionGauge = throttlePedalPosition, "Throttle pedal position", "%", 0, 120, 0, 0, 100, 100, 1, 1 @@ -2535,14 +2537,14 @@ menuDialog = main subMenu = std_separator # Targets & closed loop - subMenu = afrTableTbl, "Target AFR", 0, {isInjectionEnabled == 1 && (fuelAlgorithm == LM_SPEED_DENSITY || fuelAlgorithm == LM_REAL_MAF)} + subMenu = afrTableTbl, "Target AFR", 0, {isInjectionEnabled == 1} subMenu = fuelClosedLoopDialog, "Closed loop fuel correction", 0, {isInjectionEnabled == 1} subMenu = coastingFuelCutControl, "Deceleration fuel cutoff (DFCO)", 0, {isInjectionEnabled == 1} subMenu = std_separator # Fuel table/VE subMenu = fuelTableDialog, "Fuel table", 0, {isInjectionEnabled == 1 && fuelAlgorithm != LM_SPEED_DENSITY && fuelAlgorithm != LM_REAL_MAF} - subMenu = veTableDialog, "VE", 0, {isInjectionEnabled == 1 && (fuelAlgorithm == LM_SPEED_DENSITY || fuelAlgorithm == LM_REAL_MAF)} + subMenu = veTableDialog, "VE", 0, {isInjectionEnabled == 1} subMenu = injPhaseTableTbl, "Injection phase", 0, {isInjectionEnabled == 1} subMenu = std_separator diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index dac140f356..9013c7190c 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -45,12 +45,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.05.pth.1126548951" + signature = "rusEFI 2020.07.05.pth.904380656" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.05.pth.1126548951" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.05.pth.904380656" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -88,7 +88,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 05 01:33:58 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 05 20:29:49 UTC 2020 pageSize = 20000 page = 1 @@ -2262,6 +2262,7 @@ gaugeCategory = Ignition ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 dwellGauge = sparkDwellValue, "Dwell", "mSec", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1 coilDutyCycleGauge = coilDutyCycle, "dwell: coil duty cycle", "perc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 + ignitionLoadGauge = ignitionLoad, "ign: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 gaugeCategory = Acceleration Enrichment engineLoadDeltaGauge = engineLoadDelta,"AE: load change","value", 0, 120, 10, 10, 100, 100, 1, 1 @@ -2286,6 +2287,7 @@ gaugeCategory = Fueling fuelRunningGauge = fuelRunning, "fuel: running", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 baseFuelGauge = baseFuel, "fuel: base", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 fuelPidCorrectionGauge = fuelPidCorrection, "fuel: Short-term fuel trim", "%", -10, 10, -8, -5, 5, 8, 3, 1 + fuelingLoadGauge = fuelingLoad, "fuel: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 gaugeCategory = Throttle Body (incl. ETB) pedalPositionGauge = throttlePedalPosition, "Throttle pedal position", "%", 0, 120, 0, 0, 100, 100, 1, 1 @@ -2535,14 +2537,14 @@ menuDialog = main subMenu = std_separator # Targets & closed loop - subMenu = afrTableTbl, "Target AFR", 0, {isInjectionEnabled == 1 && (fuelAlgorithm == LM_SPEED_DENSITY || fuelAlgorithm == LM_REAL_MAF)} + subMenu = afrTableTbl, "Target AFR", 0, {isInjectionEnabled == 1} subMenu = fuelClosedLoopDialog, "Closed loop fuel correction", 0, {isInjectionEnabled == 1} subMenu = coastingFuelCutControl, "Deceleration fuel cutoff (DFCO)", 0, {isInjectionEnabled == 1} subMenu = std_separator # Fuel table/VE subMenu = fuelTableDialog, "Fuel table", 0, {isInjectionEnabled == 1 && fuelAlgorithm != LM_SPEED_DENSITY && fuelAlgorithm != LM_REAL_MAF} - subMenu = veTableDialog, "VE", 0, {isInjectionEnabled == 1 && (fuelAlgorithm == LM_SPEED_DENSITY || fuelAlgorithm == LM_REAL_MAF)} + subMenu = veTableDialog, "VE", 0, {isInjectionEnabled == 1} subMenu = injPhaseTableTbl, "Injection phase", 0, {isInjectionEnabled == 1} subMenu = std_separator diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index 57b69ad723..9b37bf6570 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -45,12 +45,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.05.pro.1000893596" + signature = "rusEFI 2020.07.05.pro.1298819515" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.05.pro.1000893596" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.05.pro.1298819515" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -88,7 +88,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 05 01:34:00 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 05 20:29:51 UTC 2020 pageSize = 20000 page = 1 @@ -2262,6 +2262,7 @@ gaugeCategory = Ignition ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 dwellGauge = sparkDwellValue, "Dwell", "mSec", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1 coilDutyCycleGauge = coilDutyCycle, "dwell: coil duty cycle", "perc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 + ignitionLoadGauge = ignitionLoad, "ign: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 gaugeCategory = Acceleration Enrichment engineLoadDeltaGauge = engineLoadDelta,"AE: load change","value", 0, 120, 10, 10, 100, 100, 1, 1 @@ -2286,6 +2287,7 @@ gaugeCategory = Fueling fuelRunningGauge = fuelRunning, "fuel: running", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 baseFuelGauge = baseFuel, "fuel: base", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 fuelPidCorrectionGauge = fuelPidCorrection, "fuel: Short-term fuel trim", "%", -10, 10, -8, -5, 5, 8, 3, 1 + fuelingLoadGauge = fuelingLoad, "fuel: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 gaugeCategory = Throttle Body (incl. ETB) pedalPositionGauge = throttlePedalPosition, "Throttle pedal position", "%", 0, 120, 0, 0, 100, 100, 1, 1 @@ -2535,14 +2537,14 @@ menuDialog = main subMenu = std_separator # Targets & closed loop - subMenu = afrTableTbl, "Target AFR", 0, {isInjectionEnabled == 1 && (fuelAlgorithm == LM_SPEED_DENSITY || fuelAlgorithm == LM_REAL_MAF)} + subMenu = afrTableTbl, "Target AFR", 0, {isInjectionEnabled == 1} subMenu = fuelClosedLoopDialog, "Closed loop fuel correction", 0, {isInjectionEnabled == 1} subMenu = coastingFuelCutControl, "Deceleration fuel cutoff (DFCO)", 0, {isInjectionEnabled == 1} subMenu = std_separator # Fuel table/VE subMenu = fuelTableDialog, "Fuel table", 0, {isInjectionEnabled == 1 && fuelAlgorithm != LM_SPEED_DENSITY && fuelAlgorithm != LM_REAL_MAF} - subMenu = veTableDialog, "VE", 0, {isInjectionEnabled == 1 && (fuelAlgorithm == LM_SPEED_DENSITY || fuelAlgorithm == LM_REAL_MAF)} + subMenu = veTableDialog, "VE", 0, {isInjectionEnabled == 1} subMenu = injPhaseTableTbl, "Injection phase", 0, {isInjectionEnabled == 1} subMenu = std_separator diff --git a/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java b/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java index e8259f9f18..5c8119b525 100644 --- a/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java +++ b/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java @@ -1,6 +1,6 @@ package com.rusefi.config.generated; -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 05 01:09:15 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 05 20:29:44 UTC 2020 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -554,6 +554,7 @@ public class Fields { public static final String GAUGE_NAME_FUEL_IAT_CORR = "fuel: IAT correction"; public static final String GAUGE_NAME_FUEL_INJ_DUTY = "fuel: injector duty cycle"; public static final String GAUGE_NAME_FUEL_LAST_INJECTION = "fuel: Last injection"; + public static final String GAUGE_NAME_FUEL_LOAD = "fuel: load"; public static final String GAUGE_NAME_FUEL_PID_CORR = "fuel: Short-term fuel trim"; public static final String GAUGE_NAME_FUEL_RUNNING = "fuel: running"; public static final String GAUGE_NAME_FUEL_TPS_EXTRA = "fuel: TPS acceleration extra fuel ms"; @@ -563,6 +564,7 @@ public class Fields { public static final String GAUGE_NAME_FUEL_WALL_CORRECTION = "fuel: wall corr ms"; public static final String GAUGE_NAME_IAC = "Idle Air Valve"; public static final String GAUGE_NAME_IAT = "IAT"; + public static final String GAUGE_NAME_IGNITION_LOAD = "ign: load"; public static final String GAUGE_NAME_INJECTOR_LAG = "fuel: injector lag"; public static final String GAUGE_NAME_KNOCK_COUNTER = "knock: counter"; public static final String GAUGE_NAME_KNOCK_LEVEL = "knock: current level"; @@ -1039,7 +1041,6 @@ public class Fields { public static final int servoOutputPins8_offset = 3147; public static final int showHumanReadableWarning_offset = 976; public static final int showSdCardWarning_offset = 76; - public static final int SIGNATURE_HASH = 1945604263; public static final int silentTriggerError_offset = 1464; public static final int slowAdcAlpha_offset = 2088; public static final int sparkDwellRpmBins_offset = 332; @@ -1278,7 +1279,7 @@ public class Fields { public static final int TS_RESPONSE_COMMAND_OK = 7; public static final int TS_RESPONSE_OK = 0; public static final char TS_SET_LOGGER_SWITCH = 'l'; - public static final String TS_SIGNATURE = "rusEFI 2020.07.05.all.1945604263"; + public static final String TS_SIGNATURE = "rusEFI 2020.07.05.all.3237681268"; public static final char TS_SINGLE_WRITE_COMMAND = 'W'; public static final int tunerStudioSerialSpeed_offset = 728; public static final int twoWireBatchIgnition_offset = 1476; diff --git a/java_console/rusefi.xml b/java_console/rusefi.xml index d7fc2c34fa..d6aedc0ff9 100644 --- a/java_console/rusefi.xml +++ b/java_console/rusefi.xml @@ -1,6 +1,6 @@ - +