From c4db3416b9f5381efb4572ff0603e9d7947dd009 Mon Sep 17 00:00:00 2001 From: GitHub build-firmware Action Date: Wed, 2 Sep 2020 19:34:30 +0000 Subject: [PATCH] Auto-generated configs and docs --- ...ngine_configuration_generated_structures.h | 13 +++++++----- .../controllers/algo/rusefi_generated.h | 9 +++++---- ...ngine_configuration_generated_structures.h | 13 +++++++----- .../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 | 9 +++++---- .../controllers/generated/signature_all.h | 4 ++-- .../generated/signature_frankenso_na6.h | 4 ++-- .../controllers/generated/signature_kin.h | 4 ++-- .../controllers/generated/signature_mre_f4.h | 4 ++-- .../controllers/generated/signature_mre_f7.h | 4 ++-- .../generated/signature_prometheus_405.h | 4 ++-- .../generated/signature_prometheus_469.h | 4 ++-- .../generated/signature_proteus_f4.h | 4 ++-- .../generated/signature_proteus_f7.h | 4 ++-- firmware/tunerstudio/generated/cache.zip | Bin 863972 -> 864080 bytes firmware/tunerstudio/generated/rusefi.ini | 11 +++++----- .../generated/rusefi_frankenso_na6.ini | 11 +++++----- .../tunerstudio/generated/rusefi_kinetis.ini | 11 +++++----- .../tunerstudio/generated/rusefi_mre_f4.ini | 11 +++++----- .../tunerstudio/generated/rusefi_mre_f7.ini | 11 +++++----- .../generated/rusefi_prometheus_405.ini | 11 +++++----- .../generated/rusefi_prometheus_469.ini | 11 +++++----- .../generated/rusefi_proteus_f4.ini | 11 +++++----- .../generated/rusefi_proteus_f7.ini | 11 +++++----- .../com/rusefi/config/generated/Fields.java | 19 +++++++++++------- java_console/rusefi.xml | 2 +- 29 files changed, 115 insertions(+), 93 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 5f1550f069..806ee0c234 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 Wed Sep 02 11:22:35 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Wed Sep 02 19:34:05 UTC 2020 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -1819,7 +1819,7 @@ struct engine_configuration_s { bool knockBankCyl12 : 1; /** offset 976 bit 28 */ - bool unusedBit_251_28 : 1; + bool tcuEnabled : 1; /** offset 976 bit 29 */ bool unusedBit_251_29 : 1; @@ -3355,10 +3355,13 @@ struct engine_configuration_s { */ uint16_t mc33_t_hold_tot; /** - * need 4 byte alignment * offset 4514 */ - uint8_t alignmentFill_at_4514[2]; + pin_input_mode_e tcuUpshiftButtonPinMode; + /** + * offset 4515 + */ + pin_input_mode_e tcuDownshiftButtonPinMode; /** * offset 4516 */ @@ -3656,4 +3659,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Wed Sep 02 11:22:35 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Wed Sep 02 19:34:05 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 2eacdfe708..95ffe0afd6 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -43,7 +43,6 @@ #define air_pressure_sensor_config_s_size 16 #define air_pressure_sensor_type_e_auto_enum "MT_CUSTOM", "MT_DENSO183", "MT_MPX4250", "MT_HONDA3BAR", "MT_DODGE_NEON_2003", "MT_SUBY_DENSO", "MT_GM_3_BAR", "MT_MPX4100", "MT_TOYOTA_89420_02010", "MT_MPX4250A", "MT_BOSCH_2_5", "MT_MAZDA_1_BAR" #define alignEngineSnifferAtTDC_offset 744 -#define alignmentFill_at_4514_offset 4514 #define alternator_antiwindupFreq_offset 1764 #define alternator_derivativeFilterLoss_offset 1760 #define alternatorControl_dFactor_offset 1724 @@ -1148,7 +1147,7 @@ #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD kin #define SIGNATURE_DATE 2020.09.02 -#define SIGNATURE_HASH 555686289 +#define SIGNATURE_HASH 939780321 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 #define sparkDwellRpmBins_offset 332 @@ -1249,7 +1248,10 @@ #define tcu_solenoid8_offset 1199 #define TCU_SOLENOID_COUNT 8 #define tcuDownshiftButtonPin_offset 1819 +#define tcuDownshiftButtonPinMode_offset 4515 +#define tcuEnabled_offset 976 #define tcuUpshiftButtonPin_offset 1818 +#define tcuUpshiftButtonPinMode_offset 4514 #define test557pin_offset 3101 #define thermistor_conf_s_size 28 #define ThermistorConf_size 32 @@ -1455,7 +1457,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator true #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2020.09.02.kin.555686289" +#define TS_SIGNATURE "rusEFI 2020.09.02.kin.939780321" #define TS_SINGLE_WRITE_COMMAND 'W' #define TS_SINGLE_WRITE_COMMAND_char W #define TS_TEST_COMMAND 't' // 0x74 @@ -1500,7 +1502,6 @@ #define unusedAuxVoltage1_TODO_332_offset 2713 #define unusedAuxVoltage2_TODO_332_offset 2714 #define unusedBit4_1476_offset 1476 -#define unusedBit_251_28_offset 976 #define unusedBit_251_29_offset 976 #define unusedBit_284_30_offset 976 #define unusedBit_284_31_offset 976 diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index 5ce91059a0..6be7f9feb9 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 Wed Sep 02 11:22:23 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Sep 02 19:33:49 UTC 2020 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -1819,7 +1819,7 @@ struct engine_configuration_s { bool knockBankCyl12 : 1; /** offset 976 bit 28 */ - bool unusedBit_251_28 : 1; + bool tcuEnabled : 1; /** offset 976 bit 29 */ bool unusedBit_251_29 : 1; @@ -3355,10 +3355,13 @@ struct engine_configuration_s { */ uint16_t mc33_t_hold_tot; /** - * need 4 byte alignment * offset 4514 */ - uint8_t alignmentFill_at_4514[2]; + pin_input_mode_e tcuUpshiftButtonPinMode; + /** + * offset 4515 + */ + pin_input_mode_e tcuDownshiftButtonPinMode; /** * offset 4516 */ @@ -3656,4 +3659,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Sep 02 11:22:23 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Sep 02 19:33:49 UTC 2020 diff --git a/firmware/controllers/generated/fsio_enums_generated.def b/firmware/controllers/generated/fsio_enums_generated.def index 9f8f616e04..8f300d21ec 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 Wed Sep 02 11:22:23 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Sep 02 19:33:49 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 5d99c786f8..bba0f57100 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 Wed Sep 02 11:22:23 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Sep 02 19:33:49 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 e91649ad10..188b9b29c4 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 Wed Sep 02 11:22:23 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Sep 02 19:33:49 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 f2308821e4..a760b4febb 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 Wed Sep 02 11:22:23 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Sep 02 19:33:49 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 6e935aad35..2c9e1f4bfa 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -43,7 +43,6 @@ #define air_pressure_sensor_config_s_size 16 #define air_pressure_sensor_type_e_auto_enum "MT_CUSTOM", "MT_DENSO183", "MT_MPX4250", "MT_HONDA3BAR", "MT_DODGE_NEON_2003", "MT_SUBY_DENSO", "MT_GM_3_BAR", "MT_MPX4100", "MT_TOYOTA_89420_02010", "MT_MPX4250A", "MT_BOSCH_2_5", "MT_MAZDA_1_BAR" #define alignEngineSnifferAtTDC_offset 744 -#define alignmentFill_at_4514_offset 4514 #define alternator_antiwindupFreq_offset 1764 #define alternator_derivativeFilterLoss_offset 1760 #define alternatorControl_dFactor_offset 1724 @@ -1148,7 +1147,7 @@ #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD all #define SIGNATURE_DATE 2020.09.02 -#define SIGNATURE_HASH 248208433 +#define SIGNATURE_HASH 400010561 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 #define sparkDwellRpmBins_offset 332 @@ -1249,7 +1248,10 @@ #define tcu_solenoid8_offset 1199 #define TCU_SOLENOID_COUNT 8 #define tcuDownshiftButtonPin_offset 1819 +#define tcuDownshiftButtonPinMode_offset 4515 +#define tcuEnabled_offset 976 #define tcuUpshiftButtonPin_offset 1818 +#define tcuUpshiftButtonPinMode_offset 4514 #define test557pin_offset 3101 #define thermistor_conf_s_size 28 #define ThermistorConf_size 32 @@ -1455,7 +1457,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator false #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2020.09.02.all.248208433" +#define TS_SIGNATURE "rusEFI 2020.09.02.all.400010561" #define TS_SINGLE_WRITE_COMMAND 'W' #define TS_SINGLE_WRITE_COMMAND_char W #define TS_TEST_COMMAND 't' // 0x74 @@ -1500,7 +1502,6 @@ #define unusedAuxVoltage1_TODO_332_offset 2713 #define unusedAuxVoltage2_TODO_332_offset 2714 #define unusedBit4_1476_offset 1476 -#define unusedBit_251_28_offset 976 #define unusedBit_251_29_offset 976 #define unusedBit_284_30_offset 976 #define unusedBit_284_31_offset 976 diff --git a/firmware/controllers/generated/signature_all.h b/firmware/controllers/generated/signature_all.h index ea1fc19f89..5671d8f4f2 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.09.02 -#define SIGNATURE_HASH 22152861 -#define TS_SIGNATURE "rusEFI 2020.09.02.all.22152861" +#define SIGNATURE_HASH 400010561 +#define TS_SIGNATURE "rusEFI 2020.09.02.all.400010561" diff --git a/firmware/controllers/generated/signature_frankenso_na6.h b/firmware/controllers/generated/signature_frankenso_na6.h index 6fa6f1c1da..cedac14351 100644 --- a/firmware/controllers/generated/signature_frankenso_na6.h +++ b/firmware/controllers/generated/signature_frankenso_na6.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD frankenso_na6 #define SIGNATURE_DATE 2020.09.02 -#define SIGNATURE_HASH 3387818900 -#define TS_SIGNATURE "rusEFI 2020.09.02.frankenso_na6.3387818900" +#define SIGNATURE_HASH 3748374600 +#define TS_SIGNATURE "rusEFI 2020.09.02.frankenso_na6.3748374600" diff --git a/firmware/controllers/generated/signature_kin.h b/firmware/controllers/generated/signature_kin.h index f3b303f841..90013a4a63 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.09.02 -#define SIGNATURE_HASH 780550973 -#define TS_SIGNATURE "rusEFI 2020.09.02.kin.780550973" +#define SIGNATURE_HASH 939780321 +#define TS_SIGNATURE "rusEFI 2020.09.02.kin.939780321" diff --git a/firmware/controllers/generated/signature_mre_f4.h b/firmware/controllers/generated/signature_mre_f4.h index 632583aaac..567d0fdf9e 100644 --- a/firmware/controllers/generated/signature_mre_f4.h +++ b/firmware/controllers/generated/signature_mre_f4.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD mre_f4 #define SIGNATURE_DATE 2020.09.02 -#define SIGNATURE_HASH 4210856902 -#define TS_SIGNATURE "rusEFI 2020.09.02.mre_f4.4210856902" +#define SIGNATURE_HASH 3967367194 +#define TS_SIGNATURE "rusEFI 2020.09.02.mre_f4.3967367194" diff --git a/firmware/controllers/generated/signature_mre_f7.h b/firmware/controllers/generated/signature_mre_f7.h index 6d9c98bc67..fe66e31e4b 100644 --- a/firmware/controllers/generated/signature_mre_f7.h +++ b/firmware/controllers/generated/signature_mre_f7.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD mre_f7 #define SIGNATURE_DATE 2020.09.02 -#define SIGNATURE_HASH 4210856902 -#define TS_SIGNATURE "rusEFI 2020.09.02.mre_f7.4210856902" +#define SIGNATURE_HASH 3967367194 +#define TS_SIGNATURE "rusEFI 2020.09.02.mre_f7.3967367194" diff --git a/firmware/controllers/generated/signature_prometheus_405.h b/firmware/controllers/generated/signature_prometheus_405.h index e2336ab9ce..da03a3f2b5 100644 --- a/firmware/controllers/generated/signature_prometheus_405.h +++ b/firmware/controllers/generated/signature_prometheus_405.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD prometheus_405 #define SIGNATURE_DATE 2020.09.02 -#define SIGNATURE_HASH 379864867 -#define TS_SIGNATURE "rusEFI 2020.09.02.prometheus_405.379864867" +#define SIGNATURE_HASH 2223359 +#define TS_SIGNATURE "rusEFI 2020.09.02.prometheus_405.2223359" diff --git a/firmware/controllers/generated/signature_prometheus_469.h b/firmware/controllers/generated/signature_prometheus_469.h index 4cbad5914b..c92a2db486 100644 --- a/firmware/controllers/generated/signature_prometheus_469.h +++ b/firmware/controllers/generated/signature_prometheus_469.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD prometheus_469 #define SIGNATURE_DATE 2020.09.02 -#define SIGNATURE_HASH 379864867 -#define TS_SIGNATURE "rusEFI 2020.09.02.prometheus_469.379864867" +#define SIGNATURE_HASH 2223359 +#define TS_SIGNATURE "rusEFI 2020.09.02.prometheus_469.2223359" diff --git a/firmware/controllers/generated/signature_proteus_f4.h b/firmware/controllers/generated/signature_proteus_f4.h index b4a5c86737..a4e1e87419 100644 --- a/firmware/controllers/generated/signature_proteus_f4.h +++ b/firmware/controllers/generated/signature_proteus_f4.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD proteus_f4 #define SIGNATURE_DATE 2020.09.02 -#define SIGNATURE_HASH 873220568 -#define TS_SIGNATURE "rusEFI 2020.09.02.proteus_f4.873220568" +#define SIGNATURE_HASH 579461636 +#define TS_SIGNATURE "rusEFI 2020.09.02.proteus_f4.579461636" diff --git a/firmware/controllers/generated/signature_proteus_f7.h b/firmware/controllers/generated/signature_proteus_f7.h index 92933cd01f..d19e636cc9 100644 --- a/firmware/controllers/generated/signature_proteus_f7.h +++ b/firmware/controllers/generated/signature_proteus_f7.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD proteus_f7 #define SIGNATURE_DATE 2020.09.02 -#define SIGNATURE_HASH 873220568 -#define TS_SIGNATURE "rusEFI 2020.09.02.proteus_f7.873220568" +#define SIGNATURE_HASH 579461636 +#define TS_SIGNATURE "rusEFI 2020.09.02.proteus_f7.579461636" diff --git a/firmware/tunerstudio/generated/cache.zip b/firmware/tunerstudio/generated/cache.zip index 6a9a87e875a34bc2f41dd5caeda9efcfaa31d295..bbde4752a53a4aa4059ef1149e3ac1cff7dc654d 100644 GIT binary patch delta 196847 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 I7yYaM12ygJPXGV_ delta 196664 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�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 diff --git a/firmware/tunerstudio/generated/rusefi.ini b/firmware/tunerstudio/generated/rusefi.ini index 750aac322e..6380baaa9b 100644 --- a/firmware/tunerstudio/generated/rusefi.ini +++ b/firmware/tunerstudio/generated/rusefi.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.09.02.all.22152861" + signature = "rusEFI 2020.09.02.all.400010561" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.09.02.all.22152861" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.09.02.all.400010561" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -74,7 +74,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 Wed Sep 02 17:31:59 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Sep 02 19:33:49 UTC 2020 pageSize = 20000 page = 1 @@ -556,7 +556,7 @@ page = 1 knockBankCyl10 = bits, U32, 976, [25:25], "Channel 1", "Channel 2" knockBankCyl11 = bits, U32, 976, [26:26], "Channel 1", "Channel 2" knockBankCyl12 = bits, U32, 976, [27:27], "Channel 1", "Channel 2" - unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" + tcuEnabled = bits, U32, 976, [28:28], "false", "true" unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" unusedBit_284_30 = bits, U32, 976, [30:30], "false", "true" unusedBit_284_31 = bits, U32, 976, [31:31], "false", "true" @@ -1130,7 +1130,8 @@ page = 1 mc33_t_bypass = scalar, U16, 4508, "us", 1.0, 0.0, 0, 10000, 0 mc33_t_hold_off = scalar, U16, 4510, "us", 1.0, 0.0, 0, 10000, 0 mc33_t_hold_tot = scalar, U16, 4512, "us", 1.0, 0.0, 0, 10000, 0 - alignmentFill_at_4514 = array, U08, 4514, [2], "units", 1.0, 0, -20, 100, 0 + tcuUpshiftButtonPinMode = bits, U08, 4514, [0:1], "DEFAULT", "PULLUP", "PULLDOWN", "INVALID" + tcuDownshiftButtonPinMode = bits, U08, 4515, [0:1], "DEFAULT", "PULLUP", "PULLDOWN", "INVALID" mainUnusedEnd = array, S32, 4516, [371], "units", 1.0, 0, -20, 100, 0 warning_message = string, ASCII, 6000, 120 afterstartCoolantBins = array, F32, 6120, [8], "C", 1.0, 0, -100.0, 250.0, 0 diff --git a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini index 0da3599975..c4aa1d605c 100644 --- a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini +++ b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.09.02.frankenso_na6.3387818900" + signature = "rusEFI 2020.09.02.frankenso_na6.3748374600" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.09.02.frankenso_na6.3387818900" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.09.02.frankenso_na6.3748374600" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -74,7 +74,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 Wed Sep 02 17:32:04 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Sep 02 19:33:54 UTC 2020 pageSize = 20000 page = 1 @@ -556,7 +556,7 @@ page = 1 knockBankCyl10 = bits, U32, 976, [25:25], "Channel 1", "Channel 2" knockBankCyl11 = bits, U32, 976, [26:26], "Channel 1", "Channel 2" knockBankCyl12 = bits, U32, 976, [27:27], "Channel 1", "Channel 2" - unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" + tcuEnabled = bits, U32, 976, [28:28], "false", "true" unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" unusedBit_284_30 = bits, U32, 976, [30:30], "false", "true" unusedBit_284_31 = bits, U32, 976, [31:31], "false", "true" @@ -1130,7 +1130,8 @@ page = 1 mc33_t_bypass = scalar, U16, 4508, "us", 1.0, 0.0, 0, 10000, 0 mc33_t_hold_off = scalar, U16, 4510, "us", 1.0, 0.0, 0, 10000, 0 mc33_t_hold_tot = scalar, U16, 4512, "us", 1.0, 0.0, 0, 10000, 0 - alignmentFill_at_4514 = array, U08, 4514, [2], "units", 1.0, 0, -20, 100, 0 + tcuUpshiftButtonPinMode = bits, U08, 4514, [0:1], "DEFAULT", "PULLUP", "PULLDOWN", "INVALID" + tcuDownshiftButtonPinMode = bits, U08, 4515, [0:1], "DEFAULT", "PULLUP", "PULLDOWN", "INVALID" mainUnusedEnd = array, S32, 4516, [371], "units", 1.0, 0, -20, 100, 0 warning_message = string, ASCII, 6000, 120 afterstartCoolantBins = array, F32, 6120, [8], "C", 1.0, 0, -100.0, 250.0, 0 diff --git a/firmware/tunerstudio/generated/rusefi_kinetis.ini b/firmware/tunerstudio/generated/rusefi_kinetis.ini index f6a50e52ff..df5d64f3ef 100644 --- a/firmware/tunerstudio/generated/rusefi_kinetis.ini +++ b/firmware/tunerstudio/generated/rusefi_kinetis.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.09.02.kin.780550973" + signature = "rusEFI 2020.09.02.kin.939780321" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.09.02.kin.780550973" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.09.02.kin.939780321" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -74,7 +74,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 Wed Sep 02 17:32:11 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Wed Sep 02 19:34:05 UTC 2020 pageSize = 20000 page = 1 @@ -556,7 +556,7 @@ page = 1 knockBankCyl10 = bits, U32, 976, [25:25], "Channel 1", "Channel 2" knockBankCyl11 = bits, U32, 976, [26:26], "Channel 1", "Channel 2" knockBankCyl12 = bits, U32, 976, [27:27], "Channel 1", "Channel 2" - unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" + tcuEnabled = bits, U32, 976, [28:28], "false", "true" unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" unusedBit_284_30 = bits, U32, 976, [30:30], "false", "true" unusedBit_284_31 = bits, U32, 976, [31:31], "false", "true" @@ -1130,7 +1130,8 @@ page = 1 mc33_t_bypass = scalar, U16, 4508, "us", 1.0, 0.0, 0, 10000, 0 mc33_t_hold_off = scalar, U16, 4510, "us", 1.0, 0.0, 0, 10000, 0 mc33_t_hold_tot = scalar, U16, 4512, "us", 1.0, 0.0, 0, 10000, 0 - alignmentFill_at_4514 = array, U08, 4514, [2], "units", 1.0, 0, -20, 100, 0 + tcuUpshiftButtonPinMode = bits, U08, 4514, [0:1], "DEFAULT", "PULLUP", "PULLDOWN", "INVALID" + tcuDownshiftButtonPinMode = bits, U08, 4515, [0:1], "DEFAULT", "PULLUP", "PULLDOWN", "INVALID" mainUnusedEnd = array, S32, 4516, [371], "units", 1.0, 0, -20, 100, 0 warning_message = string, ASCII, 6000, 120 afterstartCoolantBins = array, F32, 6120, [8], "C", 1.0, 0, -100.0, 250.0, 0 diff --git a/firmware/tunerstudio/generated/rusefi_mre_f4.ini b/firmware/tunerstudio/generated/rusefi_mre_f4.ini index 4c57698001..404fe625a5 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f4.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.09.02.mre_f4.4210856902" + signature = "rusEFI 2020.09.02.mre_f4.3967367194" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.09.02.mre_f4.4210856902" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.09.02.mre_f4.3967367194" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -74,7 +74,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 Wed Sep 02 17:32:03 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Sep 02 19:33:52 UTC 2020 pageSize = 20000 page = 1 @@ -556,7 +556,7 @@ page = 1 knockBankCyl10 = bits, U32, 976, [25:25], "Channel 1", "Channel 2" knockBankCyl11 = bits, U32, 976, [26:26], "Channel 1", "Channel 2" knockBankCyl12 = bits, U32, 976, [27:27], "Channel 1", "Channel 2" - unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" + tcuEnabled = bits, U32, 976, [28:28], "false", "true" unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" unusedBit_284_30 = bits, U32, 976, [30:30], "false", "true" unusedBit_284_31 = bits, U32, 976, [31:31], "false", "true" @@ -1130,7 +1130,8 @@ page = 1 mc33_t_bypass = scalar, U16, 4508, "us", 1.0, 0.0, 0, 10000, 0 mc33_t_hold_off = scalar, U16, 4510, "us", 1.0, 0.0, 0, 10000, 0 mc33_t_hold_tot = scalar, U16, 4512, "us", 1.0, 0.0, 0, 10000, 0 - alignmentFill_at_4514 = array, U08, 4514, [2], "units", 1.0, 0, -20, 100, 0 + tcuUpshiftButtonPinMode = bits, U08, 4514, [0:1], "DEFAULT", "PULLUP", "PULLDOWN", "INVALID" + tcuDownshiftButtonPinMode = bits, U08, 4515, [0:1], "DEFAULT", "PULLUP", "PULLDOWN", "INVALID" mainUnusedEnd = array, S32, 4516, [371], "units", 1.0, 0, -20, 100, 0 warning_message = string, ASCII, 6000, 120 afterstartCoolantBins = array, F32, 6120, [8], "C", 1.0, 0, -100.0, 250.0, 0 diff --git a/firmware/tunerstudio/generated/rusefi_mre_f7.ini b/firmware/tunerstudio/generated/rusefi_mre_f7.ini index 0710891ed7..2978ea3281 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.09.02.mre_f7.4210856902" + signature = "rusEFI 2020.09.02.mre_f7.3967367194" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.09.02.mre_f7.4210856902" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.09.02.mre_f7.3967367194" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -74,7 +74,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 Wed Sep 02 17:32:01 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Sep 02 19:33:51 UTC 2020 pageSize = 20000 page = 1 @@ -556,7 +556,7 @@ page = 1 knockBankCyl10 = bits, U32, 976, [25:25], "Channel 1", "Channel 2" knockBankCyl11 = bits, U32, 976, [26:26], "Channel 1", "Channel 2" knockBankCyl12 = bits, U32, 976, [27:27], "Channel 1", "Channel 2" - unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" + tcuEnabled = bits, U32, 976, [28:28], "false", "true" unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" unusedBit_284_30 = bits, U32, 976, [30:30], "false", "true" unusedBit_284_31 = bits, U32, 976, [31:31], "false", "true" @@ -1130,7 +1130,8 @@ page = 1 mc33_t_bypass = scalar, U16, 4508, "us", 1.0, 0.0, 0, 10000, 0 mc33_t_hold_off = scalar, U16, 4510, "us", 1.0, 0.0, 0, 10000, 0 mc33_t_hold_tot = scalar, U16, 4512, "us", 1.0, 0.0, 0, 10000, 0 - alignmentFill_at_4514 = array, U08, 4514, [2], "units", 1.0, 0, -20, 100, 0 + tcuUpshiftButtonPinMode = bits, U08, 4514, [0:1], "DEFAULT", "PULLUP", "PULLDOWN", "INVALID" + tcuDownshiftButtonPinMode = bits, U08, 4515, [0:1], "DEFAULT", "PULLUP", "PULLDOWN", "INVALID" mainUnusedEnd = array, S32, 4516, [371], "units", 1.0, 0, -20, 100, 0 warning_message = string, ASCII, 6000, 120 afterstartCoolantBins = array, F32, 6120, [8], "C", 1.0, 0, -100.0, 250.0, 0 diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini index d1e794082a..e478d1f71d 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.09.02.prometheus_405.379864867" + signature = "rusEFI 2020.09.02.prometheus_405.2223359" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.09.02.prometheus_405.379864867" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.09.02.prometheus_405.2223359" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -74,7 +74,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 Wed Sep 02 17:32:07 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Sep 02 19:33:59 UTC 2020 pageSize = 20000 page = 1 @@ -556,7 +556,7 @@ page = 1 knockBankCyl10 = bits, U32, 976, [25:25], "Channel 1", "Channel 2" knockBankCyl11 = bits, U32, 976, [26:26], "Channel 1", "Channel 2" knockBankCyl12 = bits, U32, 976, [27:27], "Channel 1", "Channel 2" - unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" + tcuEnabled = bits, U32, 976, [28:28], "false", "true" unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" unusedBit_284_30 = bits, U32, 976, [30:30], "false", "true" unusedBit_284_31 = bits, U32, 976, [31:31], "false", "true" @@ -1130,7 +1130,8 @@ page = 1 mc33_t_bypass = scalar, U16, 4508, "us", 1.0, 0.0, 0, 10000, 0 mc33_t_hold_off = scalar, U16, 4510, "us", 1.0, 0.0, 0, 10000, 0 mc33_t_hold_tot = scalar, U16, 4512, "us", 1.0, 0.0, 0, 10000, 0 - alignmentFill_at_4514 = array, U08, 4514, [2], "units", 1.0, 0, -20, 100, 0 + tcuUpshiftButtonPinMode = bits, U08, 4514, [0:1], "DEFAULT", "PULLUP", "PULLDOWN", "INVALID" + tcuDownshiftButtonPinMode = bits, U08, 4515, [0:1], "DEFAULT", "PULLUP", "PULLDOWN", "INVALID" mainUnusedEnd = array, S32, 4516, [371], "units", 1.0, 0, -20, 100, 0 warning_message = string, ASCII, 6000, 120 afterstartCoolantBins = array, F32, 6120, [8], "C", 1.0, 0, -100.0, 250.0, 0 diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini index f6da50ee31..0e8e64cc8c 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.09.02.prometheus_469.379864867" + signature = "rusEFI 2020.09.02.prometheus_469.2223359" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.09.02.prometheus_469.379864867" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.09.02.prometheus_469.2223359" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -74,7 +74,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 Wed Sep 02 17:32:06 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Sep 02 19:33:55 UTC 2020 pageSize = 20000 page = 1 @@ -556,7 +556,7 @@ page = 1 knockBankCyl10 = bits, U32, 976, [25:25], "Channel 1", "Channel 2" knockBankCyl11 = bits, U32, 976, [26:26], "Channel 1", "Channel 2" knockBankCyl12 = bits, U32, 976, [27:27], "Channel 1", "Channel 2" - unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" + tcuEnabled = bits, U32, 976, [28:28], "false", "true" unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" unusedBit_284_30 = bits, U32, 976, [30:30], "false", "true" unusedBit_284_31 = bits, U32, 976, [31:31], "false", "true" @@ -1130,7 +1130,8 @@ page = 1 mc33_t_bypass = scalar, U16, 4508, "us", 1.0, 0.0, 0, 10000, 0 mc33_t_hold_off = scalar, U16, 4510, "us", 1.0, 0.0, 0, 10000, 0 mc33_t_hold_tot = scalar, U16, 4512, "us", 1.0, 0.0, 0, 10000, 0 - alignmentFill_at_4514 = array, U08, 4514, [2], "units", 1.0, 0, -20, 100, 0 + tcuUpshiftButtonPinMode = bits, U08, 4514, [0:1], "DEFAULT", "PULLUP", "PULLDOWN", "INVALID" + tcuDownshiftButtonPinMode = bits, U08, 4515, [0:1], "DEFAULT", "PULLUP", "PULLDOWN", "INVALID" mainUnusedEnd = array, S32, 4516, [371], "units", 1.0, 0, -20, 100, 0 warning_message = string, ASCII, 6000, 120 afterstartCoolantBins = array, F32, 6120, [8], "C", 1.0, 0, -100.0, 250.0, 0 diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini index 38e3b32826..847c173233 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.09.02.proteus_f4.873220568" + signature = "rusEFI 2020.09.02.proteus_f4.579461636" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.09.02.proteus_f4.873220568" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.09.02.proteus_f4.579461636" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -74,7 +74,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 Wed Sep 02 17:32:10 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Sep 02 19:34:04 UTC 2020 pageSize = 20000 page = 1 @@ -556,7 +556,7 @@ page = 1 knockBankCyl10 = bits, U32, 976, [25:25], "Channel 1", "Channel 2" knockBankCyl11 = bits, U32, 976, [26:26], "Channel 1", "Channel 2" knockBankCyl12 = bits, U32, 976, [27:27], "Channel 1", "Channel 2" - unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" + tcuEnabled = bits, U32, 976, [28:28], "false", "true" unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" unusedBit_284_30 = bits, U32, 976, [30:30], "false", "true" unusedBit_284_31 = bits, U32, 976, [31:31], "false", "true" @@ -1130,7 +1130,8 @@ page = 1 mc33_t_bypass = scalar, U16, 4508, "us", 1.0, 0.0, 0, 10000, 0 mc33_t_hold_off = scalar, U16, 4510, "us", 1.0, 0.0, 0, 10000, 0 mc33_t_hold_tot = scalar, U16, 4512, "us", 1.0, 0.0, 0, 10000, 0 - alignmentFill_at_4514 = array, U08, 4514, [2], "units", 1.0, 0, -20, 100, 0 + tcuUpshiftButtonPinMode = bits, U08, 4514, [0:1], "DEFAULT", "PULLUP", "PULLDOWN", "INVALID" + tcuDownshiftButtonPinMode = bits, U08, 4515, [0:1], "DEFAULT", "PULLUP", "PULLDOWN", "INVALID" mainUnusedEnd = array, S32, 4516, [371], "units", 1.0, 0, -20, 100, 0 warning_message = string, ASCII, 6000, 120 afterstartCoolantBins = array, F32, 6120, [8], "C", 1.0, 0, -100.0, 250.0, 0 diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini index 5008fc1795..c3d1de6037 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.09.02.proteus_f7.873220568" + signature = "rusEFI 2020.09.02.proteus_f7.579461636" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.09.02.proteus_f7.873220568" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.09.02.proteus_f7.579461636" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -74,7 +74,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 Wed Sep 02 17:32:09 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Sep 02 19:34:02 UTC 2020 pageSize = 20000 page = 1 @@ -556,7 +556,7 @@ page = 1 knockBankCyl10 = bits, U32, 976, [25:25], "Channel 1", "Channel 2" knockBankCyl11 = bits, U32, 976, [26:26], "Channel 1", "Channel 2" knockBankCyl12 = bits, U32, 976, [27:27], "Channel 1", "Channel 2" - unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" + tcuEnabled = bits, U32, 976, [28:28], "false", "true" unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" unusedBit_284_30 = bits, U32, 976, [30:30], "false", "true" unusedBit_284_31 = bits, U32, 976, [31:31], "false", "true" @@ -1130,7 +1130,8 @@ page = 1 mc33_t_bypass = scalar, U16, 4508, "us", 1.0, 0.0, 0, 10000, 0 mc33_t_hold_off = scalar, U16, 4510, "us", 1.0, 0.0, 0, 10000, 0 mc33_t_hold_tot = scalar, U16, 4512, "us", 1.0, 0.0, 0, 10000, 0 - alignmentFill_at_4514 = array, U08, 4514, [2], "units", 1.0, 0, -20, 100, 0 + tcuUpshiftButtonPinMode = bits, U08, 4514, [0:1], "DEFAULT", "PULLUP", "PULLDOWN", "INVALID" + tcuDownshiftButtonPinMode = bits, U08, 4515, [0:1], "DEFAULT", "PULLUP", "PULLDOWN", "INVALID" mainUnusedEnd = array, S32, 4516, [371], "units", 1.0, 0, -20, 100, 0 warning_message = string, ASCII, 6000, 120 afterstartCoolantBins = array, F32, 6120, [8], "C", 1.0, 0, -100.0, 250.0, 0 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 81322e75dc..9337f557d7 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 Wed Sep 02 11:22:23 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Sep 02 19:33:49 UTC 2020 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -44,7 +44,6 @@ public class Fields { public static final int afterstartHoldTime_offset = 6152; public static final int air_pressure_sensor_config_s_size = 16; public static final int alignEngineSnifferAtTDC_offset = 744; - public static final int alignmentFill_at_4514_offset = 4514; public static final int alternator_antiwindupFreq_offset = 1764; public static final int alternator_derivativeFilterLoss_offset = 1760; public static final int alternatorControl_dFactor_offset = 1724; @@ -1105,7 +1104,7 @@ 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 = 248208433; + public static final int SIGNATURE_HASH = 400010561; public static final int silentTriggerError_offset = 1464; public static final int slowAdcAlpha_offset = 2088; public static final int sparkDwellRpmBins_offset = 332; @@ -1202,7 +1201,10 @@ public class Fields { public static final int tcu_solenoid8_offset = 1199; public static final int TCU_SOLENOID_COUNT = 8; public static final int tcuDownshiftButtonPin_offset = 1819; + public static final int tcuDownshiftButtonPinMode_offset = 4515; + public static final int tcuEnabled_offset = 976; public static final int tcuUpshiftButtonPin_offset = 1818; + public static final int tcuUpshiftButtonPinMode_offset = 4514; public static final int test557pin_offset = 3101; public static final int thermistor_conf_s_size = 28; public static final int ThermistorConf_size = 32; @@ -1362,7 +1364,7 @@ public class Fields { public static final char TS_SD_R_COMMAND = 'r'; public static final char TS_SD_W_COMMAND = 'w'; public static final char TS_SET_LOGGER_SWITCH = 'l'; - public static final String TS_SIGNATURE = "rusEFI 2020.09.02.all.248208433"; + public static final String TS_SIGNATURE = "rusEFI 2020.09.02.all.400010561"; public static final char TS_SINGLE_WRITE_COMMAND = 'W'; public static final int tunerStudioSerialSpeed_offset = 728; public static final int twoWireBatchIgnition_offset = 1476; @@ -1404,7 +1406,6 @@ public class Fields { public static final int unusedAuxVoltage1_TODO_332_offset = 2713; public static final int unusedAuxVoltage2_TODO_332_offset = 2714; public static final int unusedBit4_1476_offset = 1476; - public static final int unusedBit_251_28_offset = 976; public static final int unusedBit_251_29_offset = 976; public static final int unusedBit_284_30_offset = 976; public static final int unusedBit_284_31_offset = 976; @@ -1980,7 +1981,7 @@ public class Fields { public static final Field KNOCKBANKCYL10 = Field.create("KNOCKBANKCYL10", 976, FieldType.BIT, 25); public static final Field KNOCKBANKCYL11 = Field.create("KNOCKBANKCYL11", 976, FieldType.BIT, 26); public static final Field KNOCKBANKCYL12 = Field.create("KNOCKBANKCYL12", 976, FieldType.BIT, 27); - public static final Field UNUSEDBIT_251_28 = Field.create("UNUSEDBIT_251_28", 976, FieldType.BIT, 28); + public static final Field TCUENABLED = Field.create("TCUENABLED", 976, FieldType.BIT, 28); public static final Field UNUSEDBIT_251_29 = Field.create("UNUSEDBIT_251_29", 976, FieldType.BIT, 29); public static final Field UNUSEDBIT_284_30 = Field.create("UNUSEDBIT_284_30", 976, FieldType.BIT, 30); public static final Field UNUSEDBIT_284_31 = Field.create("UNUSEDBIT_284_31", 976, FieldType.BIT, 31); @@ -2508,6 +2509,8 @@ public class Fields { public static final Field MC33_T_BYPASS = Field.create("MC33_T_BYPASS", 4508, FieldType.INT16); public static final Field MC33_T_HOLD_OFF = Field.create("MC33_T_HOLD_OFF", 4510, FieldType.INT16); public static final Field MC33_T_HOLD_TOT = Field.create("MC33_T_HOLD_TOT", 4512, FieldType.INT16); + public static final Field TCUUPSHIFTBUTTONPINMODE = Field.create("TCUUPSHIFTBUTTONPINMODE", 4514, FieldType.INT8, pin_input_mode_e); + public static final Field TCUDOWNSHIFTBUTTONPINMODE = Field.create("TCUDOWNSHIFTBUTTONPINMODE", 4515, FieldType.INT8, pin_input_mode_e); public static final Field WARNING_MESSAGE = Field.create("WARNING_MESSAGE", 6000, 120, FieldType.STRING); public static final Field BOOSTTABLEOPENLOOP = Field.create("BOOSTTABLEOPENLOOP", 6248, FieldType.INT); public static final Field BOOSTTABLECLOSEDLOOP = Field.create("BOOSTTABLECLOSEDLOOP", 6328, FieldType.INT); @@ -3004,7 +3007,7 @@ public class Fields { KNOCKBANKCYL10, KNOCKBANKCYL11, KNOCKBANKCYL12, - UNUSEDBIT_251_28, + TCUENABLED, UNUSEDBIT_251_29, UNUSEDBIT_284_30, UNUSEDBIT_284_31, @@ -3523,6 +3526,8 @@ public class Fields { MC33_T_BYPASS, MC33_T_HOLD_OFF, MC33_T_HOLD_TOT, + TCUUPSHIFTBUTTONPINMODE, + TCUDOWNSHIFTBUTTONPINMODE, WARNING_MESSAGE, BOOSTTABLEOPENLOOP, BOOSTTABLECLOSEDLOOP, diff --git a/java_console/rusefi.xml b/java_console/rusefi.xml index 46b8821c41..fc429f0af5 100644 --- a/java_console/rusefi.xml +++ b/java_console/rusefi.xml @@ -1,6 +1,6 @@ - +