From 41115e3ff4289051f12cfdb7cb2c76bf9c9938de Mon Sep 17 00:00:00 2001 From: GitHub build-firmware Action Date: Tue, 31 May 2022 21:12:51 +0000 Subject: [PATCH 1/5] Auto-generated configs and docs --- .../cypress/config/controllers/algo/rusefi_generated.h | 4 ++-- .../kinetis/config/controllers/algo/rusefi_generated.h | 4 ++-- .../config/controllers/algo/rusefi_generated.h | 4 ++-- firmware/controllers/generated/rusefi_generated.h | 4 ++-- firmware/controllers/generated/signature_48way.h | 4 ++-- firmware/controllers/generated/signature_all.h | 4 ++-- firmware/controllers/generated/signature_alphax-2chan.h | 4 ++-- firmware/controllers/generated/signature_alphax-4chan.h | 4 ++-- firmware/controllers/generated/signature_atlas.h | 4 ++-- firmware/controllers/generated/signature_core8.h | 4 ++-- firmware/controllers/generated/signature_f407-discovery.h | 4 ++-- firmware/controllers/generated/signature_f429-discovery.h | 4 ++-- firmware/controllers/generated/signature_frankenso_na6.h | 4 ++-- firmware/controllers/generated/signature_harley81.h | 4 ++-- firmware/controllers/generated/signature_hellen-gm-e67.h | 4 ++-- firmware/controllers/generated/signature_hellen-nb1.h | 4 ++-- .../controllers/generated/signature_hellen121nissan.h | 4 ++-- firmware/controllers/generated/signature_hellen121vag.h | 4 ++-- firmware/controllers/generated/signature_hellen128.h | 4 ++-- .../controllers/generated/signature_hellen154hyundai.h | 4 ++-- firmware/controllers/generated/signature_hellen72.h | 4 ++-- firmware/controllers/generated/signature_hellen81.h | 4 ++-- firmware/controllers/generated/signature_hellen88bmw.h | 4 ++-- firmware/controllers/generated/signature_hellenNA6.h | 4 ++-- firmware/controllers/generated/signature_hellenNA8_96.h | 4 ++-- firmware/controllers/generated/signature_hellen_cypress.h | 4 ++-- firmware/controllers/generated/signature_kin.h | 4 ++-- firmware/controllers/generated/signature_mre_f4.h | 4 ++-- firmware/controllers/generated/signature_mre_f7.h | 4 ++-- firmware/controllers/generated/signature_prometheus_405.h | 4 ++-- firmware/controllers/generated/signature_prometheus_469.h | 4 ++-- firmware/controllers/generated/signature_proteus_f4.h | 4 ++-- firmware/controllers/generated/signature_proteus_f7.h | 4 ++-- firmware/controllers/generated/signature_proteus_h7.h | 4 ++-- firmware/controllers/generated/signature_subaru_eg33_f7.h | 4 ++-- firmware/controllers/generated/signature_tdg-pdm8.h | 4 ++-- firmware/tunerstudio/generated/rusefi.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_48way.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_alphax-2chan.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_alphax-4chan.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_atlas.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_core8.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_f407-discovery.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_f429-discovery.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_frankenso_na6.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_harley81.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_hellen-gm-e67.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_hellen-nb1.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_hellen121nissan.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_hellen121vag.ini | 8 ++++---- .../tunerstudio/generated/rusefi_hellen128mercedes.ini | 8 ++++---- .../tunerstudio/generated/rusefi_hellen154hyundai.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_hellen72.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_hellen81.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_hellen88bmw.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_hellenNA6.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_hellenNA8_96.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_hellen_cypress.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_kinetis.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_mre_f4.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_mre_f7.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_prometheus_405.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_prometheus_469.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_proteus_f4.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_proteus_f7.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_proteus_h7.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_subaru_eg33_f7.ini | 8 ++++---- firmware/tunerstudio/generated/rusefi_tdg-pdm8.ini | 8 ++++---- .../src/main/java/com/rusefi/config/generated/Fields.java | 5 +++-- 69 files changed, 203 insertions(+), 202 deletions(-) diff --git a/firmware/config/boards/hellen/cypress/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/hellen/cypress/config/controllers/algo/rusefi_generated.h index 09ebe52904..7f885ad507 100644 --- a/firmware/config/boards/hellen/cypress/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/hellen/cypress/config/controllers/algo/rusefi_generated.h @@ -1923,7 +1923,7 @@ #define show_Frankenso_presets true #define show_test_presets true #define showHumanReadableWarning_offset 940 -#define SIGNATURE_HASH 3682590292 +#define SIGNATURE_HASH 97933817 #define silentTriggerError_offset 1340 #define skippedWheelOnCam_offset 1340 #define slowAdcAlpha_offset 1580 @@ -2478,7 +2478,7 @@ #define ts_show_tunerstudio_port true #define ts_show_vr_threshold_2 true #define ts_show_vr_threshold_all true -#define TS_SIGNATURE "rusEFI 2022.05.31.hellen_cypress.3682590292" +#define TS_SIGNATURE "rusEFI 2022.05.31.hellen_cypress.97933817" #define TS_SINGLE_WRITE_COMMAND 'W' #define TS_SINGLE_WRITE_COMMAND_char W #define TS_TEST_COMMAND 't' 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 a85ae0496a..8cfeb90465 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -1909,7 +1909,7 @@ #define show_Frankenso_presets true #define show_test_presets true #define showHumanReadableWarning_offset 940 -#define SIGNATURE_HASH 2235349465 +#define SIGNATURE_HASH 1536507508 #define silentTriggerError_offset 1340 #define skippedWheelOnCam_offset 1340 #define slowAdcAlpha_offset 1580 @@ -2464,7 +2464,7 @@ #define ts_show_tunerstudio_port true #define ts_show_vr_threshold_2 true #define ts_show_vr_threshold_all true -#define TS_SIGNATURE "rusEFI 2022.05.31.kin.2235349465" +#define TS_SIGNATURE "rusEFI 2022.05.31.kin.1536507508" #define TS_SINGLE_WRITE_COMMAND 'W' #define TS_SINGLE_WRITE_COMMAND_char W #define TS_TEST_COMMAND 't' diff --git a/firmware/config/boards/subaru_eg33/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/subaru_eg33/config/controllers/algo/rusefi_generated.h index 8a1226a803..164e31c8ed 100644 --- a/firmware/config/boards/subaru_eg33/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/subaru_eg33/config/controllers/algo/rusefi_generated.h @@ -1889,7 +1889,7 @@ #define show_Proteus_presets false #define show_test_presets false #define showHumanReadableWarning_offset 940 -#define SIGNATURE_HASH 4044521695 +#define SIGNATURE_HASH 800786290 #define silentTriggerError_offset 1340 #define skippedWheelOnCam_offset 1340 #define slowAdcAlpha_offset 1580 @@ -2445,7 +2445,7 @@ #define ts_show_tunerstudio_port false #define ts_show_vr_threshold_2 true #define ts_show_vr_threshold_all true -#define TS_SIGNATURE "rusEFI 2022.05.31.subaru_eg33_f7.4044521695" +#define TS_SIGNATURE "rusEFI 2022.05.31.subaru_eg33_f7.800786290" #define TS_SINGLE_WRITE_COMMAND 'W' #define TS_SINGLE_WRITE_COMMAND_char W #define TS_TEST_COMMAND 't' diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index de057668b5..e4f5437392 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -1923,7 +1923,7 @@ #define show_Frankenso_presets true #define show_test_presets true #define showHumanReadableWarning_offset 940 -#define SIGNATURE_HASH 2656276574 +#define SIGNATURE_HASH 1090131955 #define silentTriggerError_offset 1340 #define skippedWheelOnCam_offset 1340 #define slowAdcAlpha_offset 1580 @@ -2478,7 +2478,7 @@ #define ts_show_tunerstudio_port true #define ts_show_vr_threshold_2 true #define ts_show_vr_threshold_all true -#define TS_SIGNATURE "rusEFI 2022.05.31.all.2656276574" +#define TS_SIGNATURE "rusEFI 2022.05.31.all.1090131955" #define TS_SINGLE_WRITE_COMMAND 'W' #define TS_SINGLE_WRITE_COMMAND_char W #define TS_TEST_COMMAND 't' diff --git a/firmware/controllers/generated/signature_48way.h b/firmware/controllers/generated/signature_48way.h index 9e5b185d31..49ae5db4d0 100644 --- a/firmware/controllers/generated/signature_48way.h +++ b/firmware/controllers/generated/signature_48way.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 3471933178 -#define TS_SIGNATURE "rusEFI 2022.05.31.48way.3471933178" +#define SIGNATURE_HASH 274266455 +#define TS_SIGNATURE "rusEFI 2022.05.31.48way.274266455" diff --git a/firmware/controllers/generated/signature_all.h b/firmware/controllers/generated/signature_all.h index 5f700a48d1..d4712ea7bc 100644 --- a/firmware/controllers/generated/signature_all.h +++ b/firmware/controllers/generated/signature_all.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 2656276574 -#define TS_SIGNATURE "rusEFI 2022.05.31.all.2656276574" +#define SIGNATURE_HASH 1090131955 +#define TS_SIGNATURE "rusEFI 2022.05.31.all.1090131955" diff --git a/firmware/controllers/generated/signature_alphax-2chan.h b/firmware/controllers/generated/signature_alphax-2chan.h index b6f643e604..b8bb17b109 100644 --- a/firmware/controllers/generated/signature_alphax-2chan.h +++ b/firmware/controllers/generated/signature_alphax-2chan.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 2889944370 -#define TS_SIGNATURE "rusEFI 2022.05.31.alphax-2chan.2889944370" +#define SIGNATURE_HASH 1927842463 +#define TS_SIGNATURE "rusEFI 2022.05.31.alphax-2chan.1927842463" diff --git a/firmware/controllers/generated/signature_alphax-4chan.h b/firmware/controllers/generated/signature_alphax-4chan.h index 7ea992bd07..97030a5b54 100644 --- a/firmware/controllers/generated/signature_alphax-4chan.h +++ b/firmware/controllers/generated/signature_alphax-4chan.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 3185540893 -#define TS_SIGNATURE "rusEFI 2022.05.31.alphax-4chan.3185540893" +#define SIGNATURE_HASH 1668741296 +#define TS_SIGNATURE "rusEFI 2022.05.31.alphax-4chan.1668741296" diff --git a/firmware/controllers/generated/signature_atlas.h b/firmware/controllers/generated/signature_atlas.h index 179b3e063a..7eba6fcb48 100644 --- a/firmware/controllers/generated/signature_atlas.h +++ b/firmware/controllers/generated/signature_atlas.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 2191091065 -#define TS_SIGNATURE "rusEFI 2022.05.31.atlas.2191091065" +#define SIGNATURE_HASH 1546707668 +#define TS_SIGNATURE "rusEFI 2022.05.31.atlas.1546707668" diff --git a/firmware/controllers/generated/signature_core8.h b/firmware/controllers/generated/signature_core8.h index 0e4a4012c5..92806c977b 100644 --- a/firmware/controllers/generated/signature_core8.h +++ b/firmware/controllers/generated/signature_core8.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 1757397415 -#define TS_SIGNATURE "rusEFI 2022.05.31.core8.1757397415" +#define SIGNATURE_HASH 3054913034 +#define TS_SIGNATURE "rusEFI 2022.05.31.core8.3054913034" diff --git a/firmware/controllers/generated/signature_f407-discovery.h b/firmware/controllers/generated/signature_f407-discovery.h index 3bd329750d..4fb0376a44 100644 --- a/firmware/controllers/generated/signature_f407-discovery.h +++ b/firmware/controllers/generated/signature_f407-discovery.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 2656276574 -#define TS_SIGNATURE "rusEFI 2022.05.31.f407-discovery.2656276574" +#define SIGNATURE_HASH 1090131955 +#define TS_SIGNATURE "rusEFI 2022.05.31.f407-discovery.1090131955" diff --git a/firmware/controllers/generated/signature_f429-discovery.h b/firmware/controllers/generated/signature_f429-discovery.h index b5105aefd4..526724825e 100644 --- a/firmware/controllers/generated/signature_f429-discovery.h +++ b/firmware/controllers/generated/signature_f429-discovery.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 2656276574 -#define TS_SIGNATURE "rusEFI 2022.05.31.f429-discovery.2656276574" +#define SIGNATURE_HASH 1090131955 +#define TS_SIGNATURE "rusEFI 2022.05.31.f429-discovery.1090131955" diff --git a/firmware/controllers/generated/signature_frankenso_na6.h b/firmware/controllers/generated/signature_frankenso_na6.h index ca15a1b11e..905ff49cad 100644 --- a/firmware/controllers/generated/signature_frankenso_na6.h +++ b/firmware/controllers/generated/signature_frankenso_na6.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 3695144090 -#define TS_SIGNATURE "rusEFI 2022.05.31.frankenso_na6.3695144090" +#define SIGNATURE_HASH 43445047 +#define TS_SIGNATURE "rusEFI 2022.05.31.frankenso_na6.43445047" diff --git a/firmware/controllers/generated/signature_harley81.h b/firmware/controllers/generated/signature_harley81.h index a196a3ee88..1607c5a34d 100644 --- a/firmware/controllers/generated/signature_harley81.h +++ b/firmware/controllers/generated/signature_harley81.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 3938438945 -#define TS_SIGNATURE "rusEFI 2022.05.31.harley81.3938438945" +#define SIGNATURE_HASH 873875596 +#define TS_SIGNATURE "rusEFI 2022.05.31.harley81.873875596" diff --git a/firmware/controllers/generated/signature_hellen-gm-e67.h b/firmware/controllers/generated/signature_hellen-gm-e67.h index 1862d364a8..203d50220a 100644 --- a/firmware/controllers/generated/signature_hellen-gm-e67.h +++ b/firmware/controllers/generated/signature_hellen-gm-e67.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 3649656519 -#define TS_SIGNATURE "rusEFI 2022.05.31.hellen-gm-e67.3649656519" +#define SIGNATURE_HASH 119591274 +#define TS_SIGNATURE "rusEFI 2022.05.31.hellen-gm-e67.119591274" diff --git a/firmware/controllers/generated/signature_hellen-nb1.h b/firmware/controllers/generated/signature_hellen-nb1.h index 3cf5f9fec2..89bd3411c6 100644 --- a/firmware/controllers/generated/signature_hellen-nb1.h +++ b/firmware/controllers/generated/signature_hellen-nb1.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 101596056 -#define TS_SIGNATURE "rusEFI 2022.05.31.hellen-nb1.101596056" +#define SIGNATURE_HASH 3634871349 +#define TS_SIGNATURE "rusEFI 2022.05.31.hellen-nb1.3634871349" diff --git a/firmware/controllers/generated/signature_hellen121nissan.h b/firmware/controllers/generated/signature_hellen121nissan.h index dc6b16f532..1aabaae695 100644 --- a/firmware/controllers/generated/signature_hellen121nissan.h +++ b/firmware/controllers/generated/signature_hellen121nissan.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 1086799659 -#define TS_SIGNATURE "rusEFI 2022.05.31.hellen121nissan.1086799659" +#define SIGNATURE_HASH 2658056326 +#define TS_SIGNATURE "rusEFI 2022.05.31.hellen121nissan.2658056326" diff --git a/firmware/controllers/generated/signature_hellen121vag.h b/firmware/controllers/generated/signature_hellen121vag.h index 0698f58ce9..ffa8b344f0 100644 --- a/firmware/controllers/generated/signature_hellen121vag.h +++ b/firmware/controllers/generated/signature_hellen121vag.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 3688233508 -#define TS_SIGNATURE "rusEFI 2022.05.31.hellen121vag.3688233508" +#define SIGNATURE_HASH 92044681 +#define TS_SIGNATURE "rusEFI 2022.05.31.hellen121vag.92044681" diff --git a/firmware/controllers/generated/signature_hellen128.h b/firmware/controllers/generated/signature_hellen128.h index 39e940e55a..be03929d6a 100644 --- a/firmware/controllers/generated/signature_hellen128.h +++ b/firmware/controllers/generated/signature_hellen128.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 4034415759 -#define TS_SIGNATURE "rusEFI 2022.05.31.hellen128.4034415759" +#define SIGNATURE_HASH 785500962 +#define TS_SIGNATURE "rusEFI 2022.05.31.hellen128.785500962" diff --git a/firmware/controllers/generated/signature_hellen154hyundai.h b/firmware/controllers/generated/signature_hellen154hyundai.h index 4c34ad99a7..d1a3762293 100644 --- a/firmware/controllers/generated/signature_hellen154hyundai.h +++ b/firmware/controllers/generated/signature_hellen154hyundai.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 102556378 -#define TS_SIGNATURE "rusEFI 2022.05.31.hellen154hyundai.102556378" +#define SIGNATURE_HASH 3635766647 +#define TS_SIGNATURE "rusEFI 2022.05.31.hellen154hyundai.3635766647" diff --git a/firmware/controllers/generated/signature_hellen72.h b/firmware/controllers/generated/signature_hellen72.h index fede2c0094..5a93da1805 100644 --- a/firmware/controllers/generated/signature_hellen72.h +++ b/firmware/controllers/generated/signature_hellen72.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 1593047254 -#define TS_SIGNATURE "rusEFI 2022.05.31.hellen72.1593047254" +#define SIGNATURE_HASH 2153414523 +#define TS_SIGNATURE "rusEFI 2022.05.31.hellen72.2153414523" diff --git a/firmware/controllers/generated/signature_hellen81.h b/firmware/controllers/generated/signature_hellen81.h index da78e2172c..63981589d7 100644 --- a/firmware/controllers/generated/signature_hellen81.h +++ b/firmware/controllers/generated/signature_hellen81.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 1661489395 -#define TS_SIGNATURE "rusEFI 2022.05.31.hellen81.1661489395" +#define SIGNATURE_HASH 3181500254 +#define TS_SIGNATURE "rusEFI 2022.05.31.hellen81.3181500254" diff --git a/firmware/controllers/generated/signature_hellen88bmw.h b/firmware/controllers/generated/signature_hellen88bmw.h index e44a46f415..327d01b15b 100644 --- a/firmware/controllers/generated/signature_hellen88bmw.h +++ b/firmware/controllers/generated/signature_hellen88bmw.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 3267647226 -#define TS_SIGNATURE "rusEFI 2022.05.31.hellen88bmw.3267647226" +#define SIGNATURE_HASH 476959063 +#define TS_SIGNATURE "rusEFI 2022.05.31.hellen88bmw.476959063" diff --git a/firmware/controllers/generated/signature_hellenNA6.h b/firmware/controllers/generated/signature_hellenNA6.h index 1f1be63252..17c7a763e8 100644 --- a/firmware/controllers/generated/signature_hellenNA6.h +++ b/firmware/controllers/generated/signature_hellenNA6.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 483942718 -#define TS_SIGNATURE "rusEFI 2022.05.31.hellenNA6.483942718" +#define SIGNATURE_HASH 3262244499 +#define TS_SIGNATURE "rusEFI 2022.05.31.hellenNA6.3262244499" diff --git a/firmware/controllers/generated/signature_hellenNA8_96.h b/firmware/controllers/generated/signature_hellenNA8_96.h index c4033efdea..ef2b19b3c1 100644 --- a/firmware/controllers/generated/signature_hellenNA8_96.h +++ b/firmware/controllers/generated/signature_hellenNA8_96.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 2736452759 -#define TS_SIGNATURE "rusEFI 2022.05.31.hellenNA8_96.2736452759" +#define SIGNATURE_HASH 2108912442 +#define TS_SIGNATURE "rusEFI 2022.05.31.hellenNA8_96.2108912442" diff --git a/firmware/controllers/generated/signature_hellen_cypress.h b/firmware/controllers/generated/signature_hellen_cypress.h index de78cae193..3f711a87a3 100644 --- a/firmware/controllers/generated/signature_hellen_cypress.h +++ b/firmware/controllers/generated/signature_hellen_cypress.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on hellen_cypress_gen_config.bat null // -#define SIGNATURE_HASH 3682590292 -#define TS_SIGNATURE "rusEFI 2022.05.31.hellen_cypress.3682590292" +#define SIGNATURE_HASH 97933817 +#define TS_SIGNATURE "rusEFI 2022.05.31.hellen_cypress.97933817" diff --git a/firmware/controllers/generated/signature_kin.h b/firmware/controllers/generated/signature_kin.h index 8f1b1b7b3b..6420cc2160 100644 --- a/firmware/controllers/generated/signature_kin.h +++ b/firmware/controllers/generated/signature_kin.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on kinetis_gen_config.bat null // -#define SIGNATURE_HASH 2235349465 -#define TS_SIGNATURE "rusEFI 2022.05.31.kin.2235349465" +#define SIGNATURE_HASH 1536507508 +#define TS_SIGNATURE "rusEFI 2022.05.31.kin.1536507508" diff --git a/firmware/controllers/generated/signature_mre_f4.h b/firmware/controllers/generated/signature_mre_f4.h index 8ad8a27592..62ea5d2a0a 100644 --- a/firmware/controllers/generated/signature_mre_f4.h +++ b/firmware/controllers/generated/signature_mre_f4.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 3544265194 -#define TS_SIGNATURE "rusEFI 2022.05.31.mre_f4.3544265194" +#define SIGNATURE_HASH 233354823 +#define TS_SIGNATURE "rusEFI 2022.05.31.mre_f4.233354823" diff --git a/firmware/controllers/generated/signature_mre_f7.h b/firmware/controllers/generated/signature_mre_f7.h index 15200e67d5..37b02c0924 100644 --- a/firmware/controllers/generated/signature_mre_f7.h +++ b/firmware/controllers/generated/signature_mre_f7.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 3544265194 -#define TS_SIGNATURE "rusEFI 2022.05.31.mre_f7.3544265194" +#define SIGNATURE_HASH 233354823 +#define TS_SIGNATURE "rusEFI 2022.05.31.mre_f7.233354823" diff --git a/firmware/controllers/generated/signature_prometheus_405.h b/firmware/controllers/generated/signature_prometheus_405.h index 138554b9ea..3d340c1cbf 100644 --- a/firmware/controllers/generated/signature_prometheus_405.h +++ b/firmware/controllers/generated/signature_prometheus_405.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 3468249528 -#define TS_SIGNATURE "rusEFI 2022.05.31.prometheus_405.3468249528" +#define SIGNATURE_HASH 269536789 +#define TS_SIGNATURE "rusEFI 2022.05.31.prometheus_405.269536789" diff --git a/firmware/controllers/generated/signature_prometheus_469.h b/firmware/controllers/generated/signature_prometheus_469.h index f6d20e8c94..fbc66977a5 100644 --- a/firmware/controllers/generated/signature_prometheus_469.h +++ b/firmware/controllers/generated/signature_prometheus_469.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 3468249528 -#define TS_SIGNATURE "rusEFI 2022.05.31.prometheus_469.3468249528" +#define SIGNATURE_HASH 269536789 +#define TS_SIGNATURE "rusEFI 2022.05.31.prometheus_469.269536789" diff --git a/firmware/controllers/generated/signature_proteus_f4.h b/firmware/controllers/generated/signature_proteus_f4.h index e5f9326d8a..ff1879841f 100644 --- a/firmware/controllers/generated/signature_proteus_f4.h +++ b/firmware/controllers/generated/signature_proteus_f4.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 974085174 -#define TS_SIGNATURE "rusEFI 2022.05.31.proteus_f4.974085174" +#define SIGNATURE_HASH 3836140443 +#define TS_SIGNATURE "rusEFI 2022.05.31.proteus_f4.3836140443" diff --git a/firmware/controllers/generated/signature_proteus_f7.h b/firmware/controllers/generated/signature_proteus_f7.h index b50558af69..94965f1d60 100644 --- a/firmware/controllers/generated/signature_proteus_f7.h +++ b/firmware/controllers/generated/signature_proteus_f7.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 974085174 -#define TS_SIGNATURE "rusEFI 2022.05.31.proteus_f7.974085174" +#define SIGNATURE_HASH 3836140443 +#define TS_SIGNATURE "rusEFI 2022.05.31.proteus_f7.3836140443" diff --git a/firmware/controllers/generated/signature_proteus_h7.h b/firmware/controllers/generated/signature_proteus_h7.h index 78706ff5a9..6d2f567de6 100644 --- a/firmware/controllers/generated/signature_proteus_h7.h +++ b/firmware/controllers/generated/signature_proteus_h7.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 974085174 -#define TS_SIGNATURE "rusEFI 2022.05.31.proteus_h7.974085174" +#define SIGNATURE_HASH 3836140443 +#define TS_SIGNATURE "rusEFI 2022.05.31.proteus_h7.3836140443" diff --git a/firmware/controllers/generated/signature_subaru_eg33_f7.h b/firmware/controllers/generated/signature_subaru_eg33_f7.h index 1e1d212799..ed1c01f7d0 100644 --- a/firmware/controllers/generated/signature_subaru_eg33_f7.h +++ b/firmware/controllers/generated/signature_subaru_eg33_f7.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on config/boards/subaru_eg33/config/gen_subaru_config.sh null // -#define SIGNATURE_HASH 4044521695 -#define TS_SIGNATURE "rusEFI 2022.05.31.subaru_eg33_f7.4044521695" +#define SIGNATURE_HASH 800786290 +#define TS_SIGNATURE "rusEFI 2022.05.31.subaru_eg33_f7.800786290" diff --git a/firmware/controllers/generated/signature_tdg-pdm8.h b/firmware/controllers/generated/signature_tdg-pdm8.h index 3d27ba1e07..62049a4bb9 100644 --- a/firmware/controllers/generated/signature_tdg-pdm8.h +++ b/firmware/controllers/generated/signature_tdg-pdm8.h @@ -2,5 +2,5 @@ // was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh null // -#define SIGNATURE_HASH 878403082 -#define TS_SIGNATURE "rusEFI 2022.05.31.tdg-pdm8.878403082" +#define SIGNATURE_HASH 3941783975 +#define TS_SIGNATURE "rusEFI 2022.05.31.tdg-pdm8.3941783975" diff --git a/firmware/tunerstudio/generated/rusefi.ini b/firmware/tunerstudio/generated/rusefi.ini index 2746b27283..82b0e2f3f7 100644 --- a/firmware/tunerstudio/generated/rusefi.ini +++ b/firmware/tunerstudio/generated/rusefi.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.all.2656276574" + signature = "rusEFI 2022.05.31.all.1090131955" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.all.2656276574" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.all.1090131955" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:41:06 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:23 UTC 2022 pageSize = 21352 page = 1 @@ -5508,7 +5508,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_48way.ini b/firmware/tunerstudio/generated/rusefi_48way.ini index bd10a95f8d..a040fa48c6 100644 --- a/firmware/tunerstudio/generated/rusefi_48way.ini +++ b/firmware/tunerstudio/generated/rusefi_48way.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.48way.3471933178" + signature = "rusEFI 2022.05.31.48way.274266455" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.48way.3471933178" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.48way.274266455" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:40:53 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:05 UTC 2022 pageSize = 21352 page = 1 @@ -5505,7 +5505,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_alphax-2chan.ini b/firmware/tunerstudio/generated/rusefi_alphax-2chan.ini index 765ba3603f..9ff7504385 100644 --- a/firmware/tunerstudio/generated/rusefi_alphax-2chan.ini +++ b/firmware/tunerstudio/generated/rusefi_alphax-2chan.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.alphax-2chan.2889944370" + signature = "rusEFI 2022.05.31.alphax-2chan.1927842463" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.alphax-2chan.2889944370" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.alphax-2chan.1927842463" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:40:32 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:37 UTC 2022 pageSize = 21352 page = 1 @@ -5502,7 +5502,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_alphax-4chan.ini b/firmware/tunerstudio/generated/rusefi_alphax-4chan.ini index 28d556162a..a3c3b9bc69 100644 --- a/firmware/tunerstudio/generated/rusefi_alphax-4chan.ini +++ b/firmware/tunerstudio/generated/rusefi_alphax-4chan.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.alphax-4chan.3185540893" + signature = "rusEFI 2022.05.31.alphax-4chan.1668741296" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.alphax-4chan.3185540893" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.alphax-4chan.1668741296" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:40:33 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:39 UTC 2022 pageSize = 21352 page = 1 @@ -5503,7 +5503,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_atlas.ini b/firmware/tunerstudio/generated/rusefi_atlas.ini index 95c0f4bf4b..5e94937dfe 100644 --- a/firmware/tunerstudio/generated/rusefi_atlas.ini +++ b/firmware/tunerstudio/generated/rusefi_atlas.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.atlas.2191091065" + signature = "rusEFI 2022.05.31.atlas.1546707668" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.atlas.2191091065" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.atlas.1546707668" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:41:04 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:20 UTC 2022 pageSize = 21352 page = 1 @@ -5508,7 +5508,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_core8.ini b/firmware/tunerstudio/generated/rusefi_core8.ini index 8631607d58..184c251697 100644 --- a/firmware/tunerstudio/generated/rusefi_core8.ini +++ b/firmware/tunerstudio/generated/rusefi_core8.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.core8.1757397415" + signature = "rusEFI 2022.05.31.core8.3054913034" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.core8.1757397415" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.core8.3054913034" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:40:52 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:03 UTC 2022 pageSize = 21352 page = 1 @@ -5505,7 +5505,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_f407-discovery.ini b/firmware/tunerstudio/generated/rusefi_f407-discovery.ini index d6afc40cb0..59cd66392e 100644 --- a/firmware/tunerstudio/generated/rusefi_f407-discovery.ini +++ b/firmware/tunerstudio/generated/rusefi_f407-discovery.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.f407-discovery.2656276574" + signature = "rusEFI 2022.05.31.f407-discovery.1090131955" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.f407-discovery.2656276574" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.f407-discovery.1090131955" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:41:02 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:16 UTC 2022 pageSize = 21352 page = 1 @@ -5508,7 +5508,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_f429-discovery.ini b/firmware/tunerstudio/generated/rusefi_f429-discovery.ini index 75006d0a7e..296c540ce2 100644 --- a/firmware/tunerstudio/generated/rusefi_f429-discovery.ini +++ b/firmware/tunerstudio/generated/rusefi_f429-discovery.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.f429-discovery.2656276574" + signature = "rusEFI 2022.05.31.f429-discovery.1090131955" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.f429-discovery.2656276574" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.f429-discovery.1090131955" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:41:03 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:18 UTC 2022 pageSize = 21352 page = 1 @@ -5508,7 +5508,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini index 74d953890d..d11db005df 100644 --- a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini +++ b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.frankenso_na6.3695144090" + signature = "rusEFI 2022.05.31.frankenso_na6.43445047" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.frankenso_na6.3695144090" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.frankenso_na6.43445047" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:40:54 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:07 UTC 2022 pageSize = 21352 page = 1 @@ -5508,7 +5508,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_harley81.ini b/firmware/tunerstudio/generated/rusefi_harley81.ini index 4ae98f34ca..262bc79569 100644 --- a/firmware/tunerstudio/generated/rusefi_harley81.ini +++ b/firmware/tunerstudio/generated/rusefi_harley81.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.harley81.3938438945" + signature = "rusEFI 2022.05.31.harley81.873875596" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.harley81.3938438945" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.harley81.873875596" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:40:35 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:40 UTC 2022 pageSize = 21352 page = 1 @@ -5503,7 +5503,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_hellen-gm-e67.ini b/firmware/tunerstudio/generated/rusefi_hellen-gm-e67.ini index 6cd0b3b645..e8b0d08071 100644 --- a/firmware/tunerstudio/generated/rusefi_hellen-gm-e67.ini +++ b/firmware/tunerstudio/generated/rusefi_hellen-gm-e67.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.hellen-gm-e67.3649656519" + signature = "rusEFI 2022.05.31.hellen-gm-e67.119591274" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.hellen-gm-e67.3649656519" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.hellen-gm-e67.119591274" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:40:46 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:55 UTC 2022 pageSize = 21352 page = 1 @@ -5504,7 +5504,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_hellen-nb1.ini b/firmware/tunerstudio/generated/rusefi_hellen-nb1.ini index 80975bcaa2..cbf6ea7e59 100644 --- a/firmware/tunerstudio/generated/rusefi_hellen-nb1.ini +++ b/firmware/tunerstudio/generated/rusefi_hellen-nb1.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.hellen-nb1.101596056" + signature = "rusEFI 2022.05.31.hellen-nb1.3634871349" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.hellen-nb1.101596056" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.hellen-nb1.3634871349" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:40:44 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:53 UTC 2022 pageSize = 21352 page = 1 @@ -5504,7 +5504,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_hellen121nissan.ini b/firmware/tunerstudio/generated/rusefi_hellen121nissan.ini index 16488d3da9..ab65f089ed 100644 --- a/firmware/tunerstudio/generated/rusefi_hellen121nissan.ini +++ b/firmware/tunerstudio/generated/rusefi_hellen121nissan.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.hellen121nissan.1086799659" + signature = "rusEFI 2022.05.31.hellen121nissan.2658056326" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.hellen121nissan.1086799659" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.hellen121nissan.2658056326" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:40:38 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:45 UTC 2022 pageSize = 21352 page = 1 @@ -5503,7 +5503,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_hellen121vag.ini b/firmware/tunerstudio/generated/rusefi_hellen121vag.ini index 3fe094b899..1a05602d00 100644 --- a/firmware/tunerstudio/generated/rusefi_hellen121vag.ini +++ b/firmware/tunerstudio/generated/rusefi_hellen121vag.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.hellen121vag.3688233508" + signature = "rusEFI 2022.05.31.hellen121vag.92044681" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.hellen121vag.3688233508" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.hellen121vag.92044681" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:40:37 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:44 UTC 2022 pageSize = 21352 page = 1 @@ -5504,7 +5504,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_hellen128mercedes.ini b/firmware/tunerstudio/generated/rusefi_hellen128mercedes.ini index 6566698849..cf8c2a78e7 100644 --- a/firmware/tunerstudio/generated/rusefi_hellen128mercedes.ini +++ b/firmware/tunerstudio/generated/rusefi_hellen128mercedes.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.hellen128.4034415759" + signature = "rusEFI 2022.05.31.hellen128.785500962" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.hellen128.4034415759" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.hellen128.785500962" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:40:36 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:42 UTC 2022 pageSize = 21352 page = 1 @@ -5503,7 +5503,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_hellen154hyundai.ini b/firmware/tunerstudio/generated/rusefi_hellen154hyundai.ini index 5779b6e2f6..434c865052 100644 --- a/firmware/tunerstudio/generated/rusefi_hellen154hyundai.ini +++ b/firmware/tunerstudio/generated/rusefi_hellen154hyundai.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.hellen154hyundai.102556378" + signature = "rusEFI 2022.05.31.hellen154hyundai.3635766647" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.hellen154hyundai.102556378" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.hellen154hyundai.3635766647" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:40:40 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:47 UTC 2022 pageSize = 21352 page = 1 @@ -5503,7 +5503,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_hellen72.ini b/firmware/tunerstudio/generated/rusefi_hellen72.ini index dde4900c8e..07a43015a6 100644 --- a/firmware/tunerstudio/generated/rusefi_hellen72.ini +++ b/firmware/tunerstudio/generated/rusefi_hellen72.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.hellen72.1593047254" + signature = "rusEFI 2022.05.31.hellen72.2153414523" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.hellen72.1593047254" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.hellen72.2153414523" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:40:42 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:50 UTC 2022 pageSize = 21352 page = 1 @@ -5504,7 +5504,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_hellen81.ini b/firmware/tunerstudio/generated/rusefi_hellen81.ini index f0425db16b..34d7447e50 100644 --- a/firmware/tunerstudio/generated/rusefi_hellen81.ini +++ b/firmware/tunerstudio/generated/rusefi_hellen81.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.hellen81.1661489395" + signature = "rusEFI 2022.05.31.hellen81.3181500254" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.hellen81.1661489395" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.hellen81.3181500254" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:40:43 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:51 UTC 2022 pageSize = 21352 page = 1 @@ -5503,7 +5503,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_hellen88bmw.ini b/firmware/tunerstudio/generated/rusefi_hellen88bmw.ini index c43b3ad017..d2d77d22b5 100644 --- a/firmware/tunerstudio/generated/rusefi_hellen88bmw.ini +++ b/firmware/tunerstudio/generated/rusefi_hellen88bmw.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.hellen88bmw.3267647226" + signature = "rusEFI 2022.05.31.hellen88bmw.476959063" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.hellen88bmw.3267647226" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.hellen88bmw.476959063" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:40:41 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:48 UTC 2022 pageSize = 21352 page = 1 @@ -5503,7 +5503,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_hellenNA6.ini b/firmware/tunerstudio/generated/rusefi_hellenNA6.ini index 6361450593..f254910c29 100644 --- a/firmware/tunerstudio/generated/rusefi_hellenNA6.ini +++ b/firmware/tunerstudio/generated/rusefi_hellenNA6.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.hellenNA6.483942718" + signature = "rusEFI 2022.05.31.hellenNA6.3262244499" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.hellenNA6.483942718" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.hellenNA6.3262244499" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:40:47 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:56 UTC 2022 pageSize = 21352 page = 1 @@ -5504,7 +5504,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_hellenNA8_96.ini b/firmware/tunerstudio/generated/rusefi_hellenNA8_96.ini index 0f181a727a..aba3660c57 100644 --- a/firmware/tunerstudio/generated/rusefi_hellenNA8_96.ini +++ b/firmware/tunerstudio/generated/rusefi_hellenNA8_96.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.hellenNA8_96.2736452759" + signature = "rusEFI 2022.05.31.hellenNA8_96.2108912442" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.hellenNA8_96.2736452759" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.hellenNA8_96.2108912442" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:40:48 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:58 UTC 2022 pageSize = 21352 page = 1 @@ -5504,7 +5504,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_hellen_cypress.ini b/firmware/tunerstudio/generated/rusefi_hellen_cypress.ini index a95e62613e..ddb100f017 100644 --- a/firmware/tunerstudio/generated/rusefi_hellen_cypress.ini +++ b/firmware/tunerstudio/generated/rusefi_hellen_cypress.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.hellen_cypress.3682590292" + signature = "rusEFI 2022.05.31.hellen_cypress.97933817" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.hellen_cypress.3682590292" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.hellen_cypress.97933817" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on hellen_cypress_gen_config.bat integration/rusefi_config.txt Mon May 30 23:41:08 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on hellen_cypress_gen_config.bat integration/rusefi_config.txt Tue May 31 21:10:26 UTC 2022 pageSize = 21352 page = 1 @@ -5508,7 +5508,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_kinetis.ini b/firmware/tunerstudio/generated/rusefi_kinetis.ini index 089646c929..f14948fc57 100644 --- a/firmware/tunerstudio/generated/rusefi_kinetis.ini +++ b/firmware/tunerstudio/generated/rusefi_kinetis.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.kin.2235349465" + signature = "rusEFI 2022.05.31.kin.1536507508" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.kin.2235349465" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.kin.1536507508" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Mon May 30 23:41:07 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Tue May 31 21:10:24 UTC 2022 pageSize = 21324 page = 1 @@ -5469,7 +5469,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_mre_f4.ini b/firmware/tunerstudio/generated/rusefi_mre_f4.ini index bca8b434ed..5134dd8262 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f4.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.mre_f4.3544265194" + signature = "rusEFI 2022.05.31.mre_f4.233354823" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.mre_f4.3544265194" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.mre_f4.233354823" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:40:51 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:01 UTC 2022 pageSize = 21352 page = 1 @@ -5505,7 +5505,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_mre_f7.ini b/firmware/tunerstudio/generated/rusefi_mre_f7.ini index e0e5d30980..28aeee6334 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f7.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.mre_f7.3544265194" + signature = "rusEFI 2022.05.31.mre_f7.233354823" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.mre_f7.3544265194" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.mre_f7.233354823" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:40:49 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:00 UTC 2022 pageSize = 21352 page = 1 @@ -5505,7 +5505,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini index 39627493ed..d39db71cc8 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.prometheus_405.3468249528" + signature = "rusEFI 2022.05.31.prometheus_405.269536789" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.prometheus_405.3468249528" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.prometheus_405.269536789" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:40:57 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:10 UTC 2022 pageSize = 21352 page = 1 @@ -5503,7 +5503,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini index ace1d63f15..9e85aaa61f 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.prometheus_469.3468249528" + signature = "rusEFI 2022.05.31.prometheus_469.269536789" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.prometheus_469.3468249528" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.prometheus_469.269536789" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:40:55 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:08 UTC 2022 pageSize = 21352 page = 1 @@ -5503,7 +5503,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini index a21bd185b4..8e8ee6bf7e 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.proteus_f4.974085174" + signature = "rusEFI 2022.05.31.proteus_f4.3836140443" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.proteus_f4.974085174" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.proteus_f4.3836140443" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:40:59 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:13 UTC 2022 pageSize = 21352 page = 1 @@ -5501,7 +5501,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini index d2824bacc3..d6a1bea13d 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.proteus_f7.974085174" + signature = "rusEFI 2022.05.31.proteus_f7.3836140443" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.proteus_f7.974085174" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.proteus_f7.3836140443" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:40:58 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:11 UTC 2022 pageSize = 21352 page = 1 @@ -5501,7 +5501,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_proteus_h7.ini b/firmware/tunerstudio/generated/rusefi_proteus_h7.ini index 97b87dc8cf..b420eb7b7d 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_h7.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_h7.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.proteus_h7.974085174" + signature = "rusEFI 2022.05.31.proteus_h7.3836140443" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.proteus_h7.974085174" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.proteus_h7.3836140443" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:41:00 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:15 UTC 2022 pageSize = 21352 page = 1 @@ -5501,7 +5501,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_subaru_eg33_f7.ini b/firmware/tunerstudio/generated/rusefi_subaru_eg33_f7.ini index da6fe1e0ca..cfee78b9a7 100644 --- a/firmware/tunerstudio/generated/rusefi_subaru_eg33_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_subaru_eg33_f7.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.subaru_eg33_f7.4044521695" + signature = "rusEFI 2022.05.31.subaru_eg33_f7.800786290" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.subaru_eg33_f7.4044521695" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.subaru_eg33_f7.800786290" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on config/boards/subaru_eg33/config/gen_subaru_config.sh integration/rusefi_config.txt Mon May 30 23:41:09 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on config/boards/subaru_eg33/config/gen_subaru_config.sh integration/rusefi_config.txt Tue May 31 21:10:27 UTC 2022 pageSize = 21352 page = 1 @@ -5504,7 +5504,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" diff --git a/firmware/tunerstudio/generated/rusefi_tdg-pdm8.ini b/firmware/tunerstudio/generated/rusefi_tdg-pdm8.ini index 39aaa68fd4..3c257aa52b 100644 --- a/firmware/tunerstudio/generated/rusefi_tdg-pdm8.ini +++ b/firmware/tunerstudio/generated/rusefi_tdg-pdm8.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.tdg-pdm8.878403082" + signature = "rusEFI 2022.05.31.tdg-pdm8.3941783975" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.tdg-pdm8.878403082" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.05.31.tdg-pdm8.3941783975" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon May 30 23:41:05 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:21 UTC 2022 pageSize = 21352 page = 1 @@ -5508,7 +5508,7 @@ dialog = electronic_throttleDialog, "electronic_throttle" field = "Crank Sensor (Primary channel)", triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 5 || trigger_type == 10 || trigger_type == 20 || trigger_type == 26 || trigger_type == 27 || trigger_type == 39 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 62 || trigger_type == 70 || trigger_type == 71 || trigger_type == 74) && ( ( (trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) && skippedWheelOnCam) || !(trigger_type == 8 || trigger_type == 9 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69) ) )) } field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } + field = "Secondary channel", triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) } field = "Invert Secondary", invertSecondaryTriggerSignal, { triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 2 || trigger_type == 3 || trigger_type == 4 || trigger_type == 11 || trigger_type == 12 || trigger_type == 13 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 21 || trigger_type == 25 || trigger_type == 28 || trigger_type == 29 || trigger_type == 31 || trigger_type == 34 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 50 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) } field = "#VVT or Cam for 60/2 goes below" field = "#If your engine has no exhaust cam sensor, use intake cam inputs" 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 665d3a17f6..575f04e8a3 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 Mon May 30 23:41:11 UTC 2022 +// this file was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:29 UTC 2022 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -1871,6 +1871,7 @@ public class Fields { public static final int servoOutputPins7_offset = 2066; public static final int servoOutputPins8_offset = 2068; public static final int showHumanReadableWarning_offset = 940; + public static final int SIGNATURE_HASH = 1090131955; public static final int silentTriggerError_offset = 1340; public static final int skippedWheelOnCam_offset = 1340; public static final int slowAdcAlpha_offset = 1580; @@ -2361,7 +2362,7 @@ public class Fields { public static final int TS_RESPONSE_UNDERRUN = 0x80; public static final int TS_RESPONSE_UNRECOGNIZED_COMMAND = 0x83; public static final char TS_SET_LOGGER_SWITCH = 'l'; - public static final String TS_SIGNATURE = "rusEFI 2022.05.31.all.2656276574"; + public static final String TS_SIGNATURE = "rusEFI 2022.05.31.all.1090131955"; public static final char TS_SINGLE_WRITE_COMMAND = 'W'; public static final char TS_TEST_COMMAND = 't'; public static final int TS_TOTAL_OUTPUT_SIZE = 1016; From 7748997f56acb976d95dcf56cd5878c2837ed771 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 31 May 2022 16:55:45 -0700 Subject: [PATCH 2/5] test new parser TS layout (#4220) * layout tests * code analysis * LOL java changes its line ending behavior based on your platform * jar --- java_tools/ConfigDefinition.jar | Bin 5648325 -> 5653923 bytes .../rusefi/newparse/layout/ArrayLayout.java | 2 +- .../newparse/layout/BitGroupLayout.java | 7 +- .../rusefi/newparse/layout/ScalarLayout.java | 8 +- .../rusefi/newparse/layout/StringLayout.java | 1 - .../rusefi/newparse/layout/StructLayout.java | 5 +- .../newparse/layout/StructNamePrefixer.java | 5 +- .../rusefi/newparse/layout/UnionLayout.java | 11 +- .../rusefi/newparse/layout/UnusedLayout.java | 3 - .../newparse/outputs/CStructWriter.java | 4 +- .../rusefi/newparse/outputs/TsMetadata.java | 4 +- .../com/rusefi/newparse/outputs/TsWriter.java | 12 +- .../com/rusefi/newparse/parsing/Struct.java | 1 - .../com/rusefi/test/newParse/LayoutTest.java | 232 ++++++++++++++++++ .../rusefi/test/newParse/NewParseHelper.java | 52 +++- 15 files changed, 312 insertions(+), 35 deletions(-) create mode 100644 java_tools/configuration_definition/src/test/java/com/rusefi/test/newParse/LayoutTest.java diff --git a/java_tools/ConfigDefinition.jar b/java_tools/ConfigDefinition.jar index 7c3b08900ec64466a87ea1fa77e3089d2e6be692..ee3a2e899b929ef7c9962141511a305a6f057fd3 100644 GIT binary patch delta 117223 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%0A7q<4e%*NLEopShfmQ2;l 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μ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

n-&d$N8J4gP*VO+G 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 z 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 X*Iu!=++nf9LTY4KBei8Xe(n4pPA?`D delta 111188 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 bdou{9f=(jDZ@YfGer%{moiu|TxuO0C(ntn2 diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/ArrayLayout.java b/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/ArrayLayout.java index c7a7a06386..a7b3dd94e5 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/ArrayLayout.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/ArrayLayout.java @@ -58,7 +58,7 @@ public class ArrayLayout extends Layout { @Override public String toString() { - return "Array of " + this.prototypeLayout.toString() + " length " + this.length[0] + " " + super.toString(); + return "Array of " + this.prototypeLayout + " length " + this.length[0] + " " + super.toString(); } @Override diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/BitGroupLayout.java b/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/BitGroupLayout.java index 4c569f674d..2b82ab2bc6 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/BitGroupLayout.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/BitGroupLayout.java @@ -2,16 +2,13 @@ package com.rusefi.newparse.layout; import com.rusefi.newparse.outputs.TsMetadata; import com.rusefi.newparse.parsing.BitGroup; -import com.rusefi.newparse.parsing.EnumField; -import com.rusefi.newparse.parsing.Type; -import com.rusefi.newparse.parsing.UnusedField; import java.io.PrintStream; import java.util.List; import java.util.stream.Collectors; public class BitGroupLayout extends Layout { - private class BitLayout { + private static class BitLayout { public final String name; public final String comment; public final String trueValue; @@ -55,7 +52,7 @@ public class BitGroupLayout extends Layout { String name = prefixer.get(bit.name); - ps.print(prefixer.get(bit.name)); + ps.print(name); ps.print(" = bits, U32, "); ps.print(actualOffset); ps.print(", ["); diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/ScalarLayout.java b/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/ScalarLayout.java index 395d146e97..d5bc51b620 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/ScalarLayout.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/ScalarLayout.java @@ -9,10 +9,10 @@ import com.rusefi.newparse.parsing.Type; import java.io.PrintStream; public class ScalarLayout extends Layout { - private String name; - private Type type; - private FieldOptions options; - private boolean autoscale; + public final String name; + private final Type type; + private final FieldOptions options; + private final boolean autoscale; public ScalarLayout(ScalarField field) { this.name = field.name; diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/StringLayout.java b/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/StringLayout.java index b2f597ea58..7a57ce4af9 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/StringLayout.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/StringLayout.java @@ -2,7 +2,6 @@ package com.rusefi.newparse.layout; import com.rusefi.newparse.outputs.TsMetadata; import com.rusefi.newparse.parsing.StringField; -import com.rusefi.newparse.parsing.UnusedField; import java.io.PrintStream; diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/StructLayout.java b/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/StructLayout.java index bece08fdbf..57eab6edb0 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/StructLayout.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/StructLayout.java @@ -4,12 +4,11 @@ import com.rusefi.newparse.outputs.TsMetadata; import com.rusefi.newparse.parsing.*; import java.io.PrintStream; -import java.lang.reflect.Array; import java.util.ArrayList; import java.util.List; public class StructLayout extends Layout { - /*private*/public List children = new ArrayList<>(); + /*private*/public final List children = new ArrayList<>(); public final String typeName; private final String name; @@ -93,7 +92,7 @@ public class StructLayout extends Layout { return addStruct(offset, sf.struct, sf.name); } - Layout l = null; + Layout l; if (f instanceof ScalarField) { l = new ScalarLayout((ScalarField)f); } else if (f instanceof EnumField) { diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/StructNamePrefixer.java b/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/StructNamePrefixer.java index ff66293406..6f971b6d54 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/StructNamePrefixer.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/StructNamePrefixer.java @@ -1,10 +1,9 @@ package com.rusefi.newparse.layout; import java.util.Stack; -import java.util.stream.Collectors; public class StructNamePrefixer { - private Stack stack = new Stack<>(); + private final Stack stack = new Stack<>(); private int idx = -1; public void pop() { @@ -36,7 +35,7 @@ public class StructNamePrefixer { String get(String name) { // stack has no prefixes, just return the plain name (no join necessary) - name = stack.stream().collect(Collectors.joining()) + name; + name = String.join("", stack) + name; // Append the array index if necessary (for iterated arrays) if (this.idx != -1) { diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/UnionLayout.java b/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/UnionLayout.java index 57b4bf1edb..a9467e6760 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/UnionLayout.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/UnionLayout.java @@ -7,12 +7,11 @@ import com.rusefi.newparse.parsing.ScalarField; import com.rusefi.newparse.parsing.Union; import java.io.PrintStream; -import java.lang.reflect.Array; import java.util.ArrayList; import java.util.List; public class UnionLayout extends Layout { - private List children = new ArrayList<>(); + private final List children = new ArrayList<>(); public UnionLayout(Union u) { for (Field f : u.fields) { @@ -36,24 +35,24 @@ public class UnionLayout extends Layout { @Override public void setOffset(int offset) { super.setOffset(offset); - this.children.stream().forEach(c -> c.setOffset(offset)); + this.children.forEach(c -> c.setOffset(offset)); } @Override public void setOffsetWithinStruct(int offset) { super.setOffsetWithinStruct(offset); - this.children.stream().forEach(c -> c.setOffsetWithinStruct(offset)); + this.children.forEach(c -> c.setOffsetWithinStruct(offset)); } @Override public int getSize() { - return this.children.stream().map(l -> l.getSize()).max(Integer::compare).get(); + return this.children.stream().map(Layout::getSize).max(Integer::compare).get(); } @Override public int getAlignment() { // The alignment of the union is the largest alignment required by one of the members - return this.children.stream().map(l -> l.getAlignment()).max(Integer::compare).get(); + return this.children.stream().map(Layout::getAlignment).max(Integer::compare).get(); } @Override diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/UnusedLayout.java b/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/UnusedLayout.java index 88192e5a1f..f1fae6236b 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/UnusedLayout.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/layout/UnusedLayout.java @@ -1,12 +1,9 @@ package com.rusefi.newparse.layout; import com.rusefi.newparse.outputs.TsMetadata; -import com.rusefi.newparse.parsing.EnumField; -import com.rusefi.newparse.parsing.Type; import com.rusefi.newparse.parsing.UnusedField; import java.io.PrintStream; -import java.util.Random; public class UnusedLayout extends Layout { private final int size; diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/outputs/CStructWriter.java b/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/outputs/CStructWriter.java index 1b6a3b4be3..f1d6463dc7 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/outputs/CStructWriter.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/outputs/CStructWriter.java @@ -13,8 +13,10 @@ import java.io.PrintStream; */ public class CStructWriter { public void writeCStructs(ParseState parser, String outputFile) throws FileNotFoundException { - PrintStream ps = new PrintStream(new FileOutputStream(outputFile)); + writeCStructs(parser, new PrintStream(new FileOutputStream(outputFile))); + } + public void writeCStructs(ParseState parser, PrintStream ps) { ps.println( "// begin\n" + "#pragma once\n" + diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/outputs/TsMetadata.java b/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/outputs/TsMetadata.java index 5209bd0fa8..fa5427f7ee 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/outputs/TsMetadata.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/outputs/TsMetadata.java @@ -5,7 +5,7 @@ import java.util.ArrayList; import java.util.List; public class TsMetadata { - private List comments = new ArrayList<>(); + private final List comments = new ArrayList<>(); public void addComment(String name, String comment) { if (comment == null) { return; @@ -27,6 +27,6 @@ public class TsMetadata { } public void writeComments(PrintStream ps) { - this.comments.stream().forEach(ps::println); + this.comments.forEach(ps::println); } } diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/outputs/TsWriter.java b/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/outputs/TsWriter.java index 24491446cd..908036de76 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/outputs/TsWriter.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/outputs/TsWriter.java @@ -17,9 +17,14 @@ public class TsWriter { private static final Pattern OPTIONAL_LINE = Pattern.compile("@@if_([a-zA-Z0-9_]+)"); - public void writeTunerstudio(ParseState parser, String inputFile, String outputFile) throws FileNotFoundException, IOException { - BufferedReader is = new BufferedReader(new FileReader(inputFile)); + public void writeTunerstudio(ParseState parser, String inputFile, String outputFile) throws IOException { PrintStream ps = new PrintStream(new FileOutputStream(outputFile)); + writeTunerstudio(parser, inputFile, ps); + ps.close(); + } + + public void writeTunerstudio(ParseState parser, String inputFile, PrintStream ps) throws IOException { + BufferedReader is = new BufferedReader(new FileReader(inputFile)); while (is.ready()) { String line = is.readLine(); @@ -80,10 +85,9 @@ public class TsWriter { } is.close(); - ps.close(); } - private void writeLayoutAndComments(ParseState parser, PrintStream ps) { + public void writeLayoutAndComments(ParseState parser, PrintStream ps) { StructLayout root = new StructLayout(0, "root", parser.getLastStruct()); TsMetadata meta = new TsMetadata(); diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/parsing/Struct.java b/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/parsing/Struct.java index 36c7c45ae1..386bb82b66 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/parsing/Struct.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/newparse/parsing/Struct.java @@ -1,6 +1,5 @@ package com.rusefi.newparse.parsing; -import java.io.PrintStream; import java.util.List; public class Struct implements Field { diff --git a/java_tools/configuration_definition/src/test/java/com/rusefi/test/newParse/LayoutTest.java b/java_tools/configuration_definition/src/test/java/com/rusefi/test/newParse/LayoutTest.java new file mode 100644 index 0000000000..27b28b518b --- /dev/null +++ b/java_tools/configuration_definition/src/test/java/com/rusefi/test/newParse/LayoutTest.java @@ -0,0 +1,232 @@ +package com.rusefi.test.newParse; + +import org.junit.Assert; +import org.junit.Test; + +import java.io.IOException; + +import static com.rusefi.test.newParse.NewParseHelper.parseToTs; + +public class LayoutTest { + @Test + public void singleField() throws IOException { + String ts = parseToTs("struct_no_prefix myStruct\n" + + "int8_t xyz;comment;\"units\", 1, 2, 3, 4, 5\n" + + "end_struct"); + + Assert.assertEquals( + "pageSize = 4\n" + + "page = 1\n" + + "xyz = scalar, S08, 0, \"units\", 1, 2, 3, 4, 5\n" + + "; unused 3 bytes at offset 1\n" + + "; total TS size = 4\n" + + "[SettingContextHelp]\n" + + "\txyz = \"comment\"\n", ts); + } + + @Test + public void twoFieldsSameSize() throws IOException { + String ts = parseToTs("struct_no_prefix myStruct\n" + + "int32_t abc;;\"\", 1, 2, 3, 4, 5\n" + + "int32_t xyz;;\"\", 6, 7, 8, 9, 10\n" + + "end_struct"); + + Assert.assertEquals( + "pageSize = 8\n" + + "page = 1\n" + + "abc = scalar, S32, 0, \"\", 1, 2, 3, 4, 5\n" + + "xyz = scalar, S32, 4, \"\", 6, 7, 8, 9, 10\n" + + "; total TS size = 8\n" + + "[SettingContextHelp]\n", ts); + } + + @Test + public void twoFieldsBigThenSmall() throws IOException { + String ts = parseToTs("struct_no_prefix myStruct\n" + + "int32_t abc;;\"\", 1, 2, 3, 4, 5\n" + + "int8_t xyz;;\"\", 6, 7, 8, 9, 10\n" + + "end_struct"); + + Assert.assertEquals( + "pageSize = 8\n" + + "page = 1\n" + + "abc = scalar, S32, 0, \"\", 1, 2, 3, 4, 5\n" + + "xyz = scalar, S08, 4, \"\", 6, 7, 8, 9, 10\n" + + "; unused 3 bytes at offset 5\n" + + "; total TS size = 8\n" + + "[SettingContextHelp]\n", ts); + } + + @Test + public void twoFieldsSmallThenBig() throws IOException { + String ts = parseToTs("struct_no_prefix myStruct\n" + + "int8_t abc;;\"\", 1, 2, 3, 4, 5\n" + + "int32_t xyz;;\"\", 6, 7, 8, 9, 10\n" + + "end_struct"); + + Assert.assertEquals( + "pageSize = 8\n" + + "page = 1\n" + + "abc = scalar, S08, 0, \"\", 1, 2, 3, 4, 5\n" + + "; unused 3 bytes at offset 1\n" + + "xyz = scalar, S32, 4, \"\", 6, 7, 8, 9, 10\n" + + "; total TS size = 8\n" + + "[SettingContextHelp]\n", ts); + } + + @Test + public void threeFieldsSmallInMisalignment() throws IOException { + String ts = parseToTs("struct_no_prefix myStruct\n" + + "int16_t abc\n" + + "int8_t def\n" + + "int32_t xyz\n" + + "end_struct"); + + Assert.assertEquals( + "pageSize = 8\n" + + "page = 1\n" + + "abc = scalar, S16, 0, \"\", 1, 0, 0, 0, 0\n" + + "def = scalar, S08, 2, \"\", 1, 0, 0, 0, 0\n" + + "; unused 1 bytes at offset 3\n" + + "xyz = scalar, S32, 4, \"\", 1, 0, 0, 0, 0\n" + + "; total TS size = 8\n" + + "[SettingContextHelp]\n", ts); + } + + @Test + public void twoFieldsArrayThenBig() throws IOException { + String ts = parseToTs("struct_no_prefix myStruct\n" + + "int8_t[10] abc;;\"\", 1, 2, 3, 4, 5\n" + + "int32_t xyz;;\"\", 6, 7, 8, 9, 10\n" + + "end_struct"); + + Assert.assertEquals( + "pageSize = 16\n" + + "page = 1\n" + + "abc = array, S08, 0, [10], \"\", 1, 2, 3, 4, 5\n" + + "; unused 2 bytes at offset 10\n" + + "xyz = scalar, S32, 12, \"\", 6, 7, 8, 9, 10\n" + + "; total TS size = 16\n" + + "[SettingContextHelp]\n", ts); + } + + @Test + public void singleFieldMultiDimArray() throws IOException { + String ts = parseToTs("struct_no_prefix myStruct\n" + + "int8_t[10 x 5] abc;;\"\", 1, 2, 3, 4, 5\n" + + "end_struct"); + + Assert.assertEquals( + "pageSize = 52\n" + + "page = 1\n" + + "abc = array, S08, 0, [10x5], \"\", 1, 2, 3, 4, 5\n" + + "; unused 2 bytes at offset 50\n" + + "; total TS size = 52\n" + + "[SettingContextHelp]\n", ts); + } + + @Test + public void structs() throws IOException { + String ts = parseToTs( + "struct s1\n" + + "int32_t abc\n" + + "uint8_t def\n" + + "end_struct\n" + + "struct_no_prefix rootStruct\n" + + "s1 a\n" + + "s1 b\n" + + "end_struct"); + + Assert.assertEquals( + "pageSize = 16\n" + + "page = 1\n" + + "a_abc = scalar, S32, 0, \"\", 1, 0, 0, 0, 0\n" + + "a_def = scalar, U08, 4, \"\", 1, 0, 0, 0, 0\n" + + "; unused 3 bytes at offset 5\n" + + "b_abc = scalar, S32, 8, \"\", 1, 0, 0, 0, 0\n" + + "b_def = scalar, U08, 12, \"\", 1, 0, 0, 0, 0\n" + + "; unused 3 bytes at offset 13\n" + + "; total TS size = 16\n" + + "[SettingContextHelp]\n", ts); + } + + @Test + public void arrayIterate() throws IOException { + String ts = parseToTs( + "struct_no_prefix rootStruct\n" + + "int32_t[4 iterate] myArr\n" + + "end_struct"); + + Assert.assertEquals( + "pageSize = 16\n" + + "page = 1\n" + + "myArr1 = scalar, S32, 0, \"\", 1, 0, 0, 0, 0\n" + + "myArr2 = scalar, S32, 4, \"\", 1, 0, 0, 0, 0\n" + + "myArr3 = scalar, S32, 8, \"\", 1, 0, 0, 0, 0\n" + + "myArr4 = scalar, S32, 12, \"\", 1, 0, 0, 0, 0\n" + + "; total TS size = 16\n" + + "[SettingContextHelp]\n", ts); + } + + @Test + public void arrayZeroLength() throws IOException { + String ts = parseToTs( + "struct_no_prefix rootStruct\n" + + "int32_t[0] myArr\n" + + "end_struct"); + + Assert.assertEquals( + "pageSize = 0\n" + + "page = 1\n" + + "; total TS size = 0\n" + + "[SettingContextHelp]\n", ts); + } + + @Test + public void arrayOfStructsIterate() throws IOException { + String ts = parseToTs( + "struct s1\n" + + "uint8_t var1\n" + + "uint16_t var2\n" + + "end_struct\n" + + "struct_no_prefix rootStruct\n" + + "s1[4 iterate] arr\n" + + "end_struct"); + + Assert.assertEquals( + "pageSize = 16\n" + + "page = 1\n" + + "arr1_var1 = scalar, U08, 0, \"\", 1, 0, 0, 0, 0\n" + + "; unused 1 bytes at offset 1\n" + + "arr1_var2 = scalar, U16, 2, \"\", 1, 0, 0, 0, 0\n" + + "arr2_var1 = scalar, U08, 4, \"\", 1, 0, 0, 0, 0\n" + + "; unused 1 bytes at offset 5\n" + + "arr2_var2 = scalar, U16, 6, \"\", 1, 0, 0, 0, 0\n" + + "arr3_var1 = scalar, U08, 8, \"\", 1, 0, 0, 0, 0\n" + + "; unused 1 bytes at offset 9\n" + + "arr3_var2 = scalar, U16, 10, \"\", 1, 0, 0, 0, 0\n" + + "arr4_var1 = scalar, U08, 12, \"\", 1, 0, 0, 0, 0\n" + + "; unused 1 bytes at offset 13\n" + + "arr4_var2 = scalar, U16, 14, \"\", 1, 0, 0, 0, 0\n" + + "; total TS size = 16\n" + + "[SettingContextHelp]\n", ts); + } + + @Test + public void bits() throws IOException { + String ts = parseToTs("struct_no_prefix myStruct\n" + + "bit first\n" + + "bit second\n" + + "bit withOpt,\"a\",\"b\"\n" + + "end_struct"); + + Assert.assertEquals( + "pageSize = 4\n" + + "page = 1\n" + + "first = bits, U32, 0, [0:0], \"false\", \"true\"\n" + + "second = bits, U32, 0, [1:1], \"false\", \"true\"\n" + + "withOpt = bits, U32, 0, [2:2], \"b\", \"a\"\n" + + "; total TS size = 4\n" + + "[SettingContextHelp]\n", ts); + } +} diff --git a/java_tools/configuration_definition/src/test/java/com/rusefi/test/newParse/NewParseHelper.java b/java_tools/configuration_definition/src/test/java/com/rusefi/test/newParse/NewParseHelper.java index d18b2c42c3..2f9d07185f 100644 --- a/java_tools/configuration_definition/src/test/java/com/rusefi/test/newParse/NewParseHelper.java +++ b/java_tools/configuration_definition/src/test/java/com/rusefi/test/newParse/NewParseHelper.java @@ -2,8 +2,11 @@ package com.rusefi.test.newParse; import com.rusefi.RusefiParseErrorStrategy; import com.rusefi.newparse.ParseState; +import com.rusefi.newparse.outputs.CStructWriter; +import com.rusefi.newparse.outputs.TsWriter; -import java.io.IOException; +import java.io.*; +import java.nio.charset.StandardCharsets; public class NewParseHelper { public static ParseState parse(String input) throws IOException { @@ -11,4 +14,51 @@ public class NewParseHelper { RusefiParseErrorStrategy.parseDefinitionString(parseState.getListener(), input); return parseState; } + + private static class PrintStreamAlwaysUnix extends PrintStream { + public PrintStreamAlwaysUnix(OutputStream out, boolean autoFlush, String encoding) throws UnsupportedEncodingException { + super(out, autoFlush, encoding); + } + + @Override + public void println() { + print('\n'); + } + + @Override + public void println(String s) { + print(s); + println(); + } + } + + public static String parseToTs(String input) throws IOException { + ParseState state = parse(input); + + TsWriter writer = new TsWriter(); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + final String utf8 = StandardCharsets.UTF_8.name(); + + PrintStream ps = new PrintStreamAlwaysUnix(baos, true, utf8); + + writer.writeLayoutAndComments(state, ps); + + return baos.toString(utf8); + } + + public static String parseToC(String input) throws IOException { + ParseState state = parse(input); + + CStructWriter writer = new CStructWriter(); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + final String utf8 = StandardCharsets.UTF_8.name(); + + PrintStream ps = new PrintStreamAlwaysUnix(baos, true, utf8); + + writer.writeCStructs(state, ps); + + return baos.toString(utf8); + } } From fc8a3efdee5f57a4eb6a38f880de68455ba7a233 Mon Sep 17 00:00:00 2001 From: GitHub build-firmware Action Date: Wed, 1 Jun 2022 00:03:12 +0000 Subject: [PATCH 3/5] Auto-generated configs and docs --- .../cypress/config/controllers/algo/rusefi_generated.h | 2 +- .../kinetis/config/controllers/algo/rusefi_generated.h | 2 +- .../subaru_eg33/config/controllers/algo/rusefi_generated.h | 2 +- firmware/controllers/generated/rusefi_generated.h | 2 +- firmware/controllers/generated/signature_48way.h | 2 +- firmware/controllers/generated/signature_all.h | 2 +- firmware/controllers/generated/signature_alphax-2chan.h | 2 +- firmware/controllers/generated/signature_alphax-4chan.h | 2 +- firmware/controllers/generated/signature_atlas.h | 2 +- firmware/controllers/generated/signature_core8.h | 2 +- firmware/controllers/generated/signature_f407-discovery.h | 2 +- firmware/controllers/generated/signature_f429-discovery.h | 2 +- firmware/controllers/generated/signature_frankenso_na6.h | 2 +- firmware/controllers/generated/signature_harley81.h | 2 +- firmware/controllers/generated/signature_hellen-gm-e67.h | 2 +- firmware/controllers/generated/signature_hellen-nb1.h | 2 +- firmware/controllers/generated/signature_hellen121nissan.h | 2 +- firmware/controllers/generated/signature_hellen121vag.h | 2 +- firmware/controllers/generated/signature_hellen128.h | 2 +- firmware/controllers/generated/signature_hellen154hyundai.h | 2 +- firmware/controllers/generated/signature_hellen72.h | 2 +- firmware/controllers/generated/signature_hellen81.h | 2 +- firmware/controllers/generated/signature_hellen88bmw.h | 2 +- firmware/controllers/generated/signature_hellenNA6.h | 2 +- firmware/controllers/generated/signature_hellenNA8_96.h | 2 +- firmware/controllers/generated/signature_hellen_cypress.h | 2 +- firmware/controllers/generated/signature_kin.h | 2 +- firmware/controllers/generated/signature_mre_f4.h | 2 +- firmware/controllers/generated/signature_mre_f7.h | 2 +- firmware/controllers/generated/signature_prometheus_405.h | 2 +- firmware/controllers/generated/signature_prometheus_469.h | 2 +- firmware/controllers/generated/signature_proteus_f4.h | 2 +- firmware/controllers/generated/signature_proteus_f7.h | 2 +- firmware/controllers/generated/signature_proteus_h7.h | 2 +- firmware/controllers/generated/signature_subaru_eg33_f7.h | 2 +- firmware/controllers/generated/signature_tdg-pdm8.h | 2 +- firmware/tunerstudio/generated/rusefi.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_48way.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_alphax-2chan.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_alphax-4chan.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_atlas.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_core8.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_f407-discovery.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_f429-discovery.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_frankenso_na6.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_harley81.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_hellen-gm-e67.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_hellen-nb1.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_hellen121nissan.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_hellen121vag.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_hellen128mercedes.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_hellen154hyundai.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_hellen72.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_hellen81.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_hellen88bmw.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_hellenNA6.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_hellenNA8_96.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_hellen_cypress.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_kinetis.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_mre_f4.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_mre_f7.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_prometheus_405.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_prometheus_469.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_proteus_f4.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_proteus_f7.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_proteus_h7.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_subaru_eg33_f7.ini | 6 +++--- firmware/tunerstudio/generated/rusefi_tdg-pdm8.ini | 6 +++--- .../src/main/java/com/rusefi/config/generated/Fields.java | 4 ++-- 69 files changed, 134 insertions(+), 134 deletions(-) diff --git a/firmware/config/boards/hellen/cypress/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/hellen/cypress/config/controllers/algo/rusefi_generated.h index 7f885ad507..338a346230 100644 --- a/firmware/config/boards/hellen/cypress/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/hellen/cypress/config/controllers/algo/rusefi_generated.h @@ -2478,7 +2478,7 @@ #define ts_show_tunerstudio_port true #define ts_show_vr_threshold_2 true #define ts_show_vr_threshold_all true -#define TS_SIGNATURE "rusEFI 2022.05.31.hellen_cypress.97933817" +#define TS_SIGNATURE "rusEFI 2022.06.01.hellen_cypress.97933817" #define TS_SINGLE_WRITE_COMMAND 'W' #define TS_SINGLE_WRITE_COMMAND_char W #define TS_TEST_COMMAND 't' 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 8cfeb90465..df77df4cb6 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -2464,7 +2464,7 @@ #define ts_show_tunerstudio_port true #define ts_show_vr_threshold_2 true #define ts_show_vr_threshold_all true -#define TS_SIGNATURE "rusEFI 2022.05.31.kin.1536507508" +#define TS_SIGNATURE "rusEFI 2022.06.01.kin.1536507508" #define TS_SINGLE_WRITE_COMMAND 'W' #define TS_SINGLE_WRITE_COMMAND_char W #define TS_TEST_COMMAND 't' diff --git a/firmware/config/boards/subaru_eg33/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/subaru_eg33/config/controllers/algo/rusefi_generated.h index 164e31c8ed..bc32ab2375 100644 --- a/firmware/config/boards/subaru_eg33/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/subaru_eg33/config/controllers/algo/rusefi_generated.h @@ -2445,7 +2445,7 @@ #define ts_show_tunerstudio_port false #define ts_show_vr_threshold_2 true #define ts_show_vr_threshold_all true -#define TS_SIGNATURE "rusEFI 2022.05.31.subaru_eg33_f7.800786290" +#define TS_SIGNATURE "rusEFI 2022.06.01.subaru_eg33_f7.800786290" #define TS_SINGLE_WRITE_COMMAND 'W' #define TS_SINGLE_WRITE_COMMAND_char W #define TS_TEST_COMMAND 't' diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index e4f5437392..ff76f62007 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -2478,7 +2478,7 @@ #define ts_show_tunerstudio_port true #define ts_show_vr_threshold_2 true #define ts_show_vr_threshold_all true -#define TS_SIGNATURE "rusEFI 2022.05.31.all.1090131955" +#define TS_SIGNATURE "rusEFI 2022.06.01.all.1090131955" #define TS_SINGLE_WRITE_COMMAND 'W' #define TS_SINGLE_WRITE_COMMAND_char W #define TS_TEST_COMMAND 't' diff --git a/firmware/controllers/generated/signature_48way.h b/firmware/controllers/generated/signature_48way.h index 49ae5db4d0..8887b36648 100644 --- a/firmware/controllers/generated/signature_48way.h +++ b/firmware/controllers/generated/signature_48way.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 274266455 -#define TS_SIGNATURE "rusEFI 2022.05.31.48way.274266455" +#define TS_SIGNATURE "rusEFI 2022.06.01.48way.274266455" diff --git a/firmware/controllers/generated/signature_all.h b/firmware/controllers/generated/signature_all.h index d4712ea7bc..5681a5af36 100644 --- a/firmware/controllers/generated/signature_all.h +++ b/firmware/controllers/generated/signature_all.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 1090131955 -#define TS_SIGNATURE "rusEFI 2022.05.31.all.1090131955" +#define TS_SIGNATURE "rusEFI 2022.06.01.all.1090131955" diff --git a/firmware/controllers/generated/signature_alphax-2chan.h b/firmware/controllers/generated/signature_alphax-2chan.h index b8bb17b109..6d1a33f94d 100644 --- a/firmware/controllers/generated/signature_alphax-2chan.h +++ b/firmware/controllers/generated/signature_alphax-2chan.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 1927842463 -#define TS_SIGNATURE "rusEFI 2022.05.31.alphax-2chan.1927842463" +#define TS_SIGNATURE "rusEFI 2022.06.01.alphax-2chan.1927842463" diff --git a/firmware/controllers/generated/signature_alphax-4chan.h b/firmware/controllers/generated/signature_alphax-4chan.h index 97030a5b54..cd87ff0395 100644 --- a/firmware/controllers/generated/signature_alphax-4chan.h +++ b/firmware/controllers/generated/signature_alphax-4chan.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 1668741296 -#define TS_SIGNATURE "rusEFI 2022.05.31.alphax-4chan.1668741296" +#define TS_SIGNATURE "rusEFI 2022.06.01.alphax-4chan.1668741296" diff --git a/firmware/controllers/generated/signature_atlas.h b/firmware/controllers/generated/signature_atlas.h index 7eba6fcb48..cc14d460e6 100644 --- a/firmware/controllers/generated/signature_atlas.h +++ b/firmware/controllers/generated/signature_atlas.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 1546707668 -#define TS_SIGNATURE "rusEFI 2022.05.31.atlas.1546707668" +#define TS_SIGNATURE "rusEFI 2022.06.01.atlas.1546707668" diff --git a/firmware/controllers/generated/signature_core8.h b/firmware/controllers/generated/signature_core8.h index 92806c977b..98ce2287ca 100644 --- a/firmware/controllers/generated/signature_core8.h +++ b/firmware/controllers/generated/signature_core8.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 3054913034 -#define TS_SIGNATURE "rusEFI 2022.05.31.core8.3054913034" +#define TS_SIGNATURE "rusEFI 2022.06.01.core8.3054913034" diff --git a/firmware/controllers/generated/signature_f407-discovery.h b/firmware/controllers/generated/signature_f407-discovery.h index 4fb0376a44..60b58f898c 100644 --- a/firmware/controllers/generated/signature_f407-discovery.h +++ b/firmware/controllers/generated/signature_f407-discovery.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 1090131955 -#define TS_SIGNATURE "rusEFI 2022.05.31.f407-discovery.1090131955" +#define TS_SIGNATURE "rusEFI 2022.06.01.f407-discovery.1090131955" diff --git a/firmware/controllers/generated/signature_f429-discovery.h b/firmware/controllers/generated/signature_f429-discovery.h index 526724825e..52ab13b2c5 100644 --- a/firmware/controllers/generated/signature_f429-discovery.h +++ b/firmware/controllers/generated/signature_f429-discovery.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 1090131955 -#define TS_SIGNATURE "rusEFI 2022.05.31.f429-discovery.1090131955" +#define TS_SIGNATURE "rusEFI 2022.06.01.f429-discovery.1090131955" diff --git a/firmware/controllers/generated/signature_frankenso_na6.h b/firmware/controllers/generated/signature_frankenso_na6.h index 905ff49cad..edb46e9625 100644 --- a/firmware/controllers/generated/signature_frankenso_na6.h +++ b/firmware/controllers/generated/signature_frankenso_na6.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 43445047 -#define TS_SIGNATURE "rusEFI 2022.05.31.frankenso_na6.43445047" +#define TS_SIGNATURE "rusEFI 2022.06.01.frankenso_na6.43445047" diff --git a/firmware/controllers/generated/signature_harley81.h b/firmware/controllers/generated/signature_harley81.h index 1607c5a34d..bf450d0305 100644 --- a/firmware/controllers/generated/signature_harley81.h +++ b/firmware/controllers/generated/signature_harley81.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 873875596 -#define TS_SIGNATURE "rusEFI 2022.05.31.harley81.873875596" +#define TS_SIGNATURE "rusEFI 2022.06.01.harley81.873875596" diff --git a/firmware/controllers/generated/signature_hellen-gm-e67.h b/firmware/controllers/generated/signature_hellen-gm-e67.h index 203d50220a..b2722e5cd5 100644 --- a/firmware/controllers/generated/signature_hellen-gm-e67.h +++ b/firmware/controllers/generated/signature_hellen-gm-e67.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 119591274 -#define TS_SIGNATURE "rusEFI 2022.05.31.hellen-gm-e67.119591274" +#define TS_SIGNATURE "rusEFI 2022.06.01.hellen-gm-e67.119591274" diff --git a/firmware/controllers/generated/signature_hellen-nb1.h b/firmware/controllers/generated/signature_hellen-nb1.h index 89bd3411c6..7ef22399cf 100644 --- a/firmware/controllers/generated/signature_hellen-nb1.h +++ b/firmware/controllers/generated/signature_hellen-nb1.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 3634871349 -#define TS_SIGNATURE "rusEFI 2022.05.31.hellen-nb1.3634871349" +#define TS_SIGNATURE "rusEFI 2022.06.01.hellen-nb1.3634871349" diff --git a/firmware/controllers/generated/signature_hellen121nissan.h b/firmware/controllers/generated/signature_hellen121nissan.h index 1aabaae695..d73e16dcdb 100644 --- a/firmware/controllers/generated/signature_hellen121nissan.h +++ b/firmware/controllers/generated/signature_hellen121nissan.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 2658056326 -#define TS_SIGNATURE "rusEFI 2022.05.31.hellen121nissan.2658056326" +#define TS_SIGNATURE "rusEFI 2022.06.01.hellen121nissan.2658056326" diff --git a/firmware/controllers/generated/signature_hellen121vag.h b/firmware/controllers/generated/signature_hellen121vag.h index ffa8b344f0..3ff16634c9 100644 --- a/firmware/controllers/generated/signature_hellen121vag.h +++ b/firmware/controllers/generated/signature_hellen121vag.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 92044681 -#define TS_SIGNATURE "rusEFI 2022.05.31.hellen121vag.92044681" +#define TS_SIGNATURE "rusEFI 2022.06.01.hellen121vag.92044681" diff --git a/firmware/controllers/generated/signature_hellen128.h b/firmware/controllers/generated/signature_hellen128.h index be03929d6a..8714d7f3ae 100644 --- a/firmware/controllers/generated/signature_hellen128.h +++ b/firmware/controllers/generated/signature_hellen128.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 785500962 -#define TS_SIGNATURE "rusEFI 2022.05.31.hellen128.785500962" +#define TS_SIGNATURE "rusEFI 2022.06.01.hellen128.785500962" diff --git a/firmware/controllers/generated/signature_hellen154hyundai.h b/firmware/controllers/generated/signature_hellen154hyundai.h index d1a3762293..03e606e17c 100644 --- a/firmware/controllers/generated/signature_hellen154hyundai.h +++ b/firmware/controllers/generated/signature_hellen154hyundai.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 3635766647 -#define TS_SIGNATURE "rusEFI 2022.05.31.hellen154hyundai.3635766647" +#define TS_SIGNATURE "rusEFI 2022.06.01.hellen154hyundai.3635766647" diff --git a/firmware/controllers/generated/signature_hellen72.h b/firmware/controllers/generated/signature_hellen72.h index 5a93da1805..1d649fb396 100644 --- a/firmware/controllers/generated/signature_hellen72.h +++ b/firmware/controllers/generated/signature_hellen72.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 2153414523 -#define TS_SIGNATURE "rusEFI 2022.05.31.hellen72.2153414523" +#define TS_SIGNATURE "rusEFI 2022.06.01.hellen72.2153414523" diff --git a/firmware/controllers/generated/signature_hellen81.h b/firmware/controllers/generated/signature_hellen81.h index 63981589d7..b41b79161d 100644 --- a/firmware/controllers/generated/signature_hellen81.h +++ b/firmware/controllers/generated/signature_hellen81.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 3181500254 -#define TS_SIGNATURE "rusEFI 2022.05.31.hellen81.3181500254" +#define TS_SIGNATURE "rusEFI 2022.06.01.hellen81.3181500254" diff --git a/firmware/controllers/generated/signature_hellen88bmw.h b/firmware/controllers/generated/signature_hellen88bmw.h index 327d01b15b..4d819d79f2 100644 --- a/firmware/controllers/generated/signature_hellen88bmw.h +++ b/firmware/controllers/generated/signature_hellen88bmw.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 476959063 -#define TS_SIGNATURE "rusEFI 2022.05.31.hellen88bmw.476959063" +#define TS_SIGNATURE "rusEFI 2022.06.01.hellen88bmw.476959063" diff --git a/firmware/controllers/generated/signature_hellenNA6.h b/firmware/controllers/generated/signature_hellenNA6.h index 17c7a763e8..a2161ff9d9 100644 --- a/firmware/controllers/generated/signature_hellenNA6.h +++ b/firmware/controllers/generated/signature_hellenNA6.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 3262244499 -#define TS_SIGNATURE "rusEFI 2022.05.31.hellenNA6.3262244499" +#define TS_SIGNATURE "rusEFI 2022.06.01.hellenNA6.3262244499" diff --git a/firmware/controllers/generated/signature_hellenNA8_96.h b/firmware/controllers/generated/signature_hellenNA8_96.h index ef2b19b3c1..c431233a34 100644 --- a/firmware/controllers/generated/signature_hellenNA8_96.h +++ b/firmware/controllers/generated/signature_hellenNA8_96.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 2108912442 -#define TS_SIGNATURE "rusEFI 2022.05.31.hellenNA8_96.2108912442" +#define TS_SIGNATURE "rusEFI 2022.06.01.hellenNA8_96.2108912442" diff --git a/firmware/controllers/generated/signature_hellen_cypress.h b/firmware/controllers/generated/signature_hellen_cypress.h index 3f711a87a3..fc005bfb01 100644 --- a/firmware/controllers/generated/signature_hellen_cypress.h +++ b/firmware/controllers/generated/signature_hellen_cypress.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 97933817 -#define TS_SIGNATURE "rusEFI 2022.05.31.hellen_cypress.97933817" +#define TS_SIGNATURE "rusEFI 2022.06.01.hellen_cypress.97933817" diff --git a/firmware/controllers/generated/signature_kin.h b/firmware/controllers/generated/signature_kin.h index 6420cc2160..f4a9927713 100644 --- a/firmware/controllers/generated/signature_kin.h +++ b/firmware/controllers/generated/signature_kin.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 1536507508 -#define TS_SIGNATURE "rusEFI 2022.05.31.kin.1536507508" +#define TS_SIGNATURE "rusEFI 2022.06.01.kin.1536507508" diff --git a/firmware/controllers/generated/signature_mre_f4.h b/firmware/controllers/generated/signature_mre_f4.h index 62ea5d2a0a..58924c2b8d 100644 --- a/firmware/controllers/generated/signature_mre_f4.h +++ b/firmware/controllers/generated/signature_mre_f4.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 233354823 -#define TS_SIGNATURE "rusEFI 2022.05.31.mre_f4.233354823" +#define TS_SIGNATURE "rusEFI 2022.06.01.mre_f4.233354823" diff --git a/firmware/controllers/generated/signature_mre_f7.h b/firmware/controllers/generated/signature_mre_f7.h index 37b02c0924..371467385e 100644 --- a/firmware/controllers/generated/signature_mre_f7.h +++ b/firmware/controllers/generated/signature_mre_f7.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 233354823 -#define TS_SIGNATURE "rusEFI 2022.05.31.mre_f7.233354823" +#define TS_SIGNATURE "rusEFI 2022.06.01.mre_f7.233354823" diff --git a/firmware/controllers/generated/signature_prometheus_405.h b/firmware/controllers/generated/signature_prometheus_405.h index 3d340c1cbf..822dd786ec 100644 --- a/firmware/controllers/generated/signature_prometheus_405.h +++ b/firmware/controllers/generated/signature_prometheus_405.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 269536789 -#define TS_SIGNATURE "rusEFI 2022.05.31.prometheus_405.269536789" +#define TS_SIGNATURE "rusEFI 2022.06.01.prometheus_405.269536789" diff --git a/firmware/controllers/generated/signature_prometheus_469.h b/firmware/controllers/generated/signature_prometheus_469.h index fbc66977a5..0c229538b3 100644 --- a/firmware/controllers/generated/signature_prometheus_469.h +++ b/firmware/controllers/generated/signature_prometheus_469.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 269536789 -#define TS_SIGNATURE "rusEFI 2022.05.31.prometheus_469.269536789" +#define TS_SIGNATURE "rusEFI 2022.06.01.prometheus_469.269536789" diff --git a/firmware/controllers/generated/signature_proteus_f4.h b/firmware/controllers/generated/signature_proteus_f4.h index ff1879841f..00f9b8bd47 100644 --- a/firmware/controllers/generated/signature_proteus_f4.h +++ b/firmware/controllers/generated/signature_proteus_f4.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 3836140443 -#define TS_SIGNATURE "rusEFI 2022.05.31.proteus_f4.3836140443" +#define TS_SIGNATURE "rusEFI 2022.06.01.proteus_f4.3836140443" diff --git a/firmware/controllers/generated/signature_proteus_f7.h b/firmware/controllers/generated/signature_proteus_f7.h index 94965f1d60..9ce3f87209 100644 --- a/firmware/controllers/generated/signature_proteus_f7.h +++ b/firmware/controllers/generated/signature_proteus_f7.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 3836140443 -#define TS_SIGNATURE "rusEFI 2022.05.31.proteus_f7.3836140443" +#define TS_SIGNATURE "rusEFI 2022.06.01.proteus_f7.3836140443" diff --git a/firmware/controllers/generated/signature_proteus_h7.h b/firmware/controllers/generated/signature_proteus_h7.h index 6d2f567de6..37facd3476 100644 --- a/firmware/controllers/generated/signature_proteus_h7.h +++ b/firmware/controllers/generated/signature_proteus_h7.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 3836140443 -#define TS_SIGNATURE "rusEFI 2022.05.31.proteus_h7.3836140443" +#define TS_SIGNATURE "rusEFI 2022.06.01.proteus_h7.3836140443" diff --git a/firmware/controllers/generated/signature_subaru_eg33_f7.h b/firmware/controllers/generated/signature_subaru_eg33_f7.h index ed1c01f7d0..d29c476a4a 100644 --- a/firmware/controllers/generated/signature_subaru_eg33_f7.h +++ b/firmware/controllers/generated/signature_subaru_eg33_f7.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 800786290 -#define TS_SIGNATURE "rusEFI 2022.05.31.subaru_eg33_f7.800786290" +#define TS_SIGNATURE "rusEFI 2022.06.01.subaru_eg33_f7.800786290" diff --git a/firmware/controllers/generated/signature_tdg-pdm8.h b/firmware/controllers/generated/signature_tdg-pdm8.h index 62049a4bb9..8fb5bdc888 100644 --- a/firmware/controllers/generated/signature_tdg-pdm8.h +++ b/firmware/controllers/generated/signature_tdg-pdm8.h @@ -3,4 +3,4 @@ // #define SIGNATURE_HASH 3941783975 -#define TS_SIGNATURE "rusEFI 2022.05.31.tdg-pdm8.3941783975" +#define TS_SIGNATURE "rusEFI 2022.06.01.tdg-pdm8.3941783975" diff --git a/firmware/tunerstudio/generated/rusefi.ini b/firmware/tunerstudio/generated/rusefi.ini index 82b0e2f3f7..1ae1373bdb 100644 --- a/firmware/tunerstudio/generated/rusefi.ini +++ b/firmware/tunerstudio/generated/rusefi.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.all.1090131955" + signature = "rusEFI 2022.06.01.all.1090131955" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.all.1090131955" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.all.1090131955" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:23 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:42 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_48way.ini b/firmware/tunerstudio/generated/rusefi_48way.ini index a040fa48c6..b0169d0166 100644 --- a/firmware/tunerstudio/generated/rusefi_48way.ini +++ b/firmware/tunerstudio/generated/rusefi_48way.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.48way.274266455" + signature = "rusEFI 2022.06.01.48way.274266455" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.48way.274266455" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.48way.274266455" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:05 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:24 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_alphax-2chan.ini b/firmware/tunerstudio/generated/rusefi_alphax-2chan.ini index 9ff7504385..5e8c4b0095 100644 --- a/firmware/tunerstudio/generated/rusefi_alphax-2chan.ini +++ b/firmware/tunerstudio/generated/rusefi_alphax-2chan.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.alphax-2chan.1927842463" + signature = "rusEFI 2022.06.01.alphax-2chan.1927842463" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.alphax-2chan.1927842463" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.alphax-2chan.1927842463" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:37 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 23:59:57 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_alphax-4chan.ini b/firmware/tunerstudio/generated/rusefi_alphax-4chan.ini index a3c3b9bc69..288793dd01 100644 --- a/firmware/tunerstudio/generated/rusefi_alphax-4chan.ini +++ b/firmware/tunerstudio/generated/rusefi_alphax-4chan.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.alphax-4chan.1668741296" + signature = "rusEFI 2022.06.01.alphax-4chan.1668741296" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.alphax-4chan.1668741296" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.alphax-4chan.1668741296" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:39 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 23:59:58 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_atlas.ini b/firmware/tunerstudio/generated/rusefi_atlas.ini index 5e94937dfe..19e9f2ed14 100644 --- a/firmware/tunerstudio/generated/rusefi_atlas.ini +++ b/firmware/tunerstudio/generated/rusefi_atlas.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.atlas.1546707668" + signature = "rusEFI 2022.06.01.atlas.1546707668" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.atlas.1546707668" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.atlas.1546707668" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:20 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:39 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_core8.ini b/firmware/tunerstudio/generated/rusefi_core8.ini index 184c251697..81da12cb71 100644 --- a/firmware/tunerstudio/generated/rusefi_core8.ini +++ b/firmware/tunerstudio/generated/rusefi_core8.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.core8.3054913034" + signature = "rusEFI 2022.06.01.core8.3054913034" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.core8.3054913034" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.core8.3054913034" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:03 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:23 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_f407-discovery.ini b/firmware/tunerstudio/generated/rusefi_f407-discovery.ini index 59cd66392e..db9b5a12bc 100644 --- a/firmware/tunerstudio/generated/rusefi_f407-discovery.ini +++ b/firmware/tunerstudio/generated/rusefi_f407-discovery.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.f407-discovery.1090131955" + signature = "rusEFI 2022.06.01.f407-discovery.1090131955" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.f407-discovery.1090131955" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.f407-discovery.1090131955" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:16 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:36 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_f429-discovery.ini b/firmware/tunerstudio/generated/rusefi_f429-discovery.ini index 296c540ce2..7385a8cfb2 100644 --- a/firmware/tunerstudio/generated/rusefi_f429-discovery.ini +++ b/firmware/tunerstudio/generated/rusefi_f429-discovery.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.f429-discovery.1090131955" + signature = "rusEFI 2022.06.01.f429-discovery.1090131955" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.f429-discovery.1090131955" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.f429-discovery.1090131955" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:18 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:37 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini index d11db005df..8d851ea7aa 100644 --- a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini +++ b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.frankenso_na6.43445047" + signature = "rusEFI 2022.06.01.frankenso_na6.43445047" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.frankenso_na6.43445047" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.frankenso_na6.43445047" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:07 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:26 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_harley81.ini b/firmware/tunerstudio/generated/rusefi_harley81.ini index 262bc79569..199622d8bb 100644 --- a/firmware/tunerstudio/generated/rusefi_harley81.ini +++ b/firmware/tunerstudio/generated/rusefi_harley81.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.harley81.873875596" + signature = "rusEFI 2022.06.01.harley81.873875596" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.harley81.873875596" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.harley81.873875596" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:40 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:00 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_hellen-gm-e67.ini b/firmware/tunerstudio/generated/rusefi_hellen-gm-e67.ini index e8b0d08071..7682f64165 100644 --- a/firmware/tunerstudio/generated/rusefi_hellen-gm-e67.ini +++ b/firmware/tunerstudio/generated/rusefi_hellen-gm-e67.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.hellen-gm-e67.119591274" + signature = "rusEFI 2022.06.01.hellen-gm-e67.119591274" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.hellen-gm-e67.119591274" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.hellen-gm-e67.119591274" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:55 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:15 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_hellen-nb1.ini b/firmware/tunerstudio/generated/rusefi_hellen-nb1.ini index cbf6ea7e59..c62573aa67 100644 --- a/firmware/tunerstudio/generated/rusefi_hellen-nb1.ini +++ b/firmware/tunerstudio/generated/rusefi_hellen-nb1.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.hellen-nb1.3634871349" + signature = "rusEFI 2022.06.01.hellen-nb1.3634871349" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.hellen-nb1.3634871349" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.hellen-nb1.3634871349" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:53 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:13 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_hellen121nissan.ini b/firmware/tunerstudio/generated/rusefi_hellen121nissan.ini index ab65f089ed..b9e15e2fbd 100644 --- a/firmware/tunerstudio/generated/rusefi_hellen121nissan.ini +++ b/firmware/tunerstudio/generated/rusefi_hellen121nissan.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.hellen121nissan.2658056326" + signature = "rusEFI 2022.06.01.hellen121nissan.2658056326" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.hellen121nissan.2658056326" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.hellen121nissan.2658056326" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:45 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:05 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_hellen121vag.ini b/firmware/tunerstudio/generated/rusefi_hellen121vag.ini index 1a05602d00..184f1266b4 100644 --- a/firmware/tunerstudio/generated/rusefi_hellen121vag.ini +++ b/firmware/tunerstudio/generated/rusefi_hellen121vag.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.hellen121vag.92044681" + signature = "rusEFI 2022.06.01.hellen121vag.92044681" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.hellen121vag.92044681" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.hellen121vag.92044681" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:44 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:03 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_hellen128mercedes.ini b/firmware/tunerstudio/generated/rusefi_hellen128mercedes.ini index cf8c2a78e7..c6025ff0ff 100644 --- a/firmware/tunerstudio/generated/rusefi_hellen128mercedes.ini +++ b/firmware/tunerstudio/generated/rusefi_hellen128mercedes.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.hellen128.785500962" + signature = "rusEFI 2022.06.01.hellen128.785500962" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.hellen128.785500962" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.hellen128.785500962" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:42 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:02 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_hellen154hyundai.ini b/firmware/tunerstudio/generated/rusefi_hellen154hyundai.ini index 434c865052..4b8a7b6379 100644 --- a/firmware/tunerstudio/generated/rusefi_hellen154hyundai.ini +++ b/firmware/tunerstudio/generated/rusefi_hellen154hyundai.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.hellen154hyundai.3635766647" + signature = "rusEFI 2022.06.01.hellen154hyundai.3635766647" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.hellen154hyundai.3635766647" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.hellen154hyundai.3635766647" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:47 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:07 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_hellen72.ini b/firmware/tunerstudio/generated/rusefi_hellen72.ini index 07a43015a6..82964b1c13 100644 --- a/firmware/tunerstudio/generated/rusefi_hellen72.ini +++ b/firmware/tunerstudio/generated/rusefi_hellen72.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.hellen72.2153414523" + signature = "rusEFI 2022.06.01.hellen72.2153414523" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.hellen72.2153414523" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.hellen72.2153414523" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:50 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:10 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_hellen81.ini b/firmware/tunerstudio/generated/rusefi_hellen81.ini index 34d7447e50..fe419283d1 100644 --- a/firmware/tunerstudio/generated/rusefi_hellen81.ini +++ b/firmware/tunerstudio/generated/rusefi_hellen81.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.hellen81.3181500254" + signature = "rusEFI 2022.06.01.hellen81.3181500254" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.hellen81.3181500254" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.hellen81.3181500254" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:51 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:11 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_hellen88bmw.ini b/firmware/tunerstudio/generated/rusefi_hellen88bmw.ini index d2d77d22b5..9b3b9a4e61 100644 --- a/firmware/tunerstudio/generated/rusefi_hellen88bmw.ini +++ b/firmware/tunerstudio/generated/rusefi_hellen88bmw.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.hellen88bmw.476959063" + signature = "rusEFI 2022.06.01.hellen88bmw.476959063" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.hellen88bmw.476959063" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.hellen88bmw.476959063" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:48 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:08 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_hellenNA6.ini b/firmware/tunerstudio/generated/rusefi_hellenNA6.ini index f254910c29..521255f51e 100644 --- a/firmware/tunerstudio/generated/rusefi_hellenNA6.ini +++ b/firmware/tunerstudio/generated/rusefi_hellenNA6.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.hellenNA6.3262244499" + signature = "rusEFI 2022.06.01.hellenNA6.3262244499" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.hellenNA6.3262244499" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.hellenNA6.3262244499" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:56 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:16 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_hellenNA8_96.ini b/firmware/tunerstudio/generated/rusefi_hellenNA8_96.ini index aba3660c57..9fc4040e25 100644 --- a/firmware/tunerstudio/generated/rusefi_hellenNA8_96.ini +++ b/firmware/tunerstudio/generated/rusefi_hellenNA8_96.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.hellenNA8_96.2108912442" + signature = "rusEFI 2022.06.01.hellenNA8_96.2108912442" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.hellenNA8_96.2108912442" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.hellenNA8_96.2108912442" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:09:58 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:18 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_hellen_cypress.ini b/firmware/tunerstudio/generated/rusefi_hellen_cypress.ini index ddb100f017..94bb2dec6a 100644 --- a/firmware/tunerstudio/generated/rusefi_hellen_cypress.ini +++ b/firmware/tunerstudio/generated/rusefi_hellen_cypress.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.hellen_cypress.97933817" + signature = "rusEFI 2022.06.01.hellen_cypress.97933817" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.hellen_cypress.97933817" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.hellen_cypress.97933817" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on hellen_cypress_gen_config.bat integration/rusefi_config.txt Tue May 31 21:10:26 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on hellen_cypress_gen_config.bat integration/rusefi_config.txt Wed Jun 01 00:00:44 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_kinetis.ini b/firmware/tunerstudio/generated/rusefi_kinetis.ini index f14948fc57..3bd8b68016 100644 --- a/firmware/tunerstudio/generated/rusefi_kinetis.ini +++ b/firmware/tunerstudio/generated/rusefi_kinetis.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.kin.1536507508" + signature = "rusEFI 2022.06.01.kin.1536507508" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.kin.1536507508" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.kin.1536507508" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Tue May 31 21:10:24 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Wed Jun 01 00:00:43 UTC 2022 pageSize = 21324 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_mre_f4.ini b/firmware/tunerstudio/generated/rusefi_mre_f4.ini index 5134dd8262..7b6505e96d 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f4.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.mre_f4.233354823" + signature = "rusEFI 2022.06.01.mre_f4.233354823" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.mre_f4.233354823" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.mre_f4.233354823" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:01 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:21 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_mre_f7.ini b/firmware/tunerstudio/generated/rusefi_mre_f7.ini index 28aeee6334..f805217965 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f7.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.mre_f7.233354823" + signature = "rusEFI 2022.06.01.mre_f7.233354823" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.mre_f7.233354823" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.mre_f7.233354823" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:00 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:19 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini index d39db71cc8..68a41bfa66 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.prometheus_405.269536789" + signature = "rusEFI 2022.06.01.prometheus_405.269536789" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.prometheus_405.269536789" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.prometheus_405.269536789" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:10 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:29 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini index 9e85aaa61f..dd313b9fc9 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.prometheus_469.269536789" + signature = "rusEFI 2022.06.01.prometheus_469.269536789" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.prometheus_469.269536789" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.prometheus_469.269536789" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:08 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:28 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini index 8e8ee6bf7e..bd9108b0b4 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.proteus_f4.3836140443" + signature = "rusEFI 2022.06.01.proteus_f4.3836140443" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.proteus_f4.3836140443" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.proteus_f4.3836140443" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:13 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:32 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini index d6a1bea13d..8cf6fc46c6 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.proteus_f7.3836140443" + signature = "rusEFI 2022.06.01.proteus_f7.3836140443" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.proteus_f7.3836140443" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.proteus_f7.3836140443" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:11 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:31 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_proteus_h7.ini b/firmware/tunerstudio/generated/rusefi_proteus_h7.ini index b420eb7b7d..44b4443cc4 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_h7.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_h7.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.proteus_h7.3836140443" + signature = "rusEFI 2022.06.01.proteus_h7.3836140443" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.proteus_h7.3836140443" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.proteus_h7.3836140443" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:15 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:34 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_subaru_eg33_f7.ini b/firmware/tunerstudio/generated/rusefi_subaru_eg33_f7.ini index cfee78b9a7..d4c839fa73 100644 --- a/firmware/tunerstudio/generated/rusefi_subaru_eg33_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_subaru_eg33_f7.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.subaru_eg33_f7.800786290" + signature = "rusEFI 2022.06.01.subaru_eg33_f7.800786290" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.subaru_eg33_f7.800786290" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.subaru_eg33_f7.800786290" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on config/boards/subaru_eg33/config/gen_subaru_config.sh integration/rusefi_config.txt Tue May 31 21:10:27 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on config/boards/subaru_eg33/config/gen_subaru_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:46 UTC 2022 pageSize = 21352 page = 1 diff --git a/firmware/tunerstudio/generated/rusefi_tdg-pdm8.ini b/firmware/tunerstudio/generated/rusefi_tdg-pdm8.ini index 3c257aa52b..1be36d585f 100644 --- a/firmware/tunerstudio/generated/rusefi_tdg-pdm8.ini +++ b/firmware/tunerstudio/generated/rusefi_tdg-pdm8.ini @@ -32,12 +32,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2022.05.31.tdg-pdm8.3941783975" + signature = "rusEFI 2022.06.01.tdg-pdm8.3941783975" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmware version for title bar. - signature = "rusEFI 2022.05.31.tdg-pdm8.3941783975" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2022.06.01.tdg-pdm8.3941783975" ; signature is expected to be 7 or more characters. ; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C useLegacyFTempUnits = false @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; name = scalar, type, offset, units, scale, translate, lo, hi, digits ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue May 31 21:10:21 UTC 2022 +; this section was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:40 UTC 2022 pageSize = 21352 page = 1 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 575f04e8a3..67754a4370 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 Tue May 31 21:10:29 UTC 2022 +// this file was generated automatically by rusEFI tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jun 01 00:00:48 UTC 2022 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -2362,7 +2362,7 @@ public class Fields { public static final int TS_RESPONSE_UNDERRUN = 0x80; public static final int TS_RESPONSE_UNRECOGNIZED_COMMAND = 0x83; public static final char TS_SET_LOGGER_SWITCH = 'l'; - public static final String TS_SIGNATURE = "rusEFI 2022.05.31.all.1090131955"; + public static final String TS_SIGNATURE = "rusEFI 2022.06.01.all.1090131955"; public static final char TS_SINGLE_WRITE_COMMAND = 'W'; public static final char TS_TEST_COMMAND = 't'; public static final int TS_TOTAL_OUTPUT_SIZE = 1016; From ad2f6695f327f9d6b0f7bd1765576fa07a6f5f58 Mon Sep 17 00:00:00 2001 From: GitHub set-date Action Date: Wed, 1 Jun 2022 00:23:07 +0000 Subject: [PATCH 4/5] Update date --- firmware/controllers/date_stamp.h | 2 +- firmware/svnversion.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/firmware/controllers/date_stamp.h b/firmware/controllers/date_stamp.h index c7ad743d16..d4447fe859 100644 --- a/firmware/controllers/date_stamp.h +++ b/firmware/controllers/date_stamp.h @@ -1,2 +1,2 @@ #pragma once -#define VCS_DATE 20220531 +#define VCS_DATE 20220601 diff --git a/firmware/svnversion.h b/firmware/svnversion.h index 9e9938274a..2f3f0b74ea 100644 --- a/firmware/svnversion.h +++ b/firmware/svnversion.h @@ -1,12 +1,12 @@ // This file was generated by Version2Header -// Tue May 31 00:20:30 UTC 2022 +// Wed Jun 01 00:23:06 UTC 2022 #ifndef GIT_HASH -#define GIT_HASH "45eeb49ca72222cf7d8a8a241034927ca87ae0b1" +#define GIT_HASH "fc8a3efdee5f57a4eb6a38f880de68455ba7a233" #endif #ifndef VCS_VERSION -#define VCS_VERSION "40599" +#define VCS_VERSION "40609" #endif From 6e50600a07aae3dad3d3854cbe63b2e7472910c6 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 31 May 2022 18:40:00 -0700 Subject: [PATCH 5/5] only check if youhave a sensor (#4223) --- firmware/controllers/limp_manager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/firmware/controllers/limp_manager.cpp b/firmware/controllers/limp_manager.cpp index 8cbdf810fe..cbb13af12f 100644 --- a/firmware/controllers/limp_manager.cpp +++ b/firmware/controllers/limp_manager.cpp @@ -47,8 +47,8 @@ void LimpManager::updateState(int rpm, efitick_t nowNt) { if (engine->rpmCalculator.isRunning()) { uint16_t minOilPressure = engineConfiguration->minOilPressureAfterStart; - // Only check if the setting is enabled - if (minOilPressure > 0) { + // Only check if the setting is enabled and you have an oil pressure sensor + if (minOilPressure > 0 && Sensor::hasSensor(SensorType::OilPressure)) { // Has it been long enough we should have pressure? bool isTimedOut = engine->rpmCalculator.getSecondsSinceEngineStart(nowNt) > 5.0f;