From 8b22f000ccf6e0d998a8259e54b43a90dfa1db70 Mon Sep 17 00:00:00 2001 From: GitHub build-firmware Action Date: Mon, 27 Jul 2020 05:00:36 +0000 Subject: [PATCH] Auto-generated configs and docs --- ...ngine_configuration_generated_structures.h | 10 +++++----- .../controllers/algo/rusefi_generated.h | 8 ++++---- ...ngine_configuration_generated_structures.h | 10 +++++----- .../generated/fsio_enums_generated.def | 2 +- .../controllers/generated/fsio_getters.def | 2 +- firmware/controllers/generated/fsio_names.def | 2 +- .../controllers/generated/fsio_strings.def | 2 +- .../controllers/generated/rusefi_generated.h | 8 ++++---- .../controllers/generated/signature_all.h | 6 +++--- .../generated/signature_frankenso_na6.h | 6 +++--- .../controllers/generated/signature_kin.h | 6 +++--- .../controllers/generated/signature_mre_f4.h | 6 +++--- .../controllers/generated/signature_mre_f7.h | 6 +++--- .../generated/signature_prometheus_405.h | 6 +++--- .../generated/signature_prometheus_469.h | 6 +++--- .../generated/signature_proteus_f4.h | 6 +++--- .../generated/signature_proteus_f7.h | 6 +++--- firmware/tunerstudio/generated/cache.zip | Bin 843650 -> 843551 bytes firmware/tunerstudio/generated/rusefi.ini | 16 ++++++++-------- .../generated/rusefi_frankenso_na6.ini | 16 ++++++++-------- .../tunerstudio/generated/rusefi_kinetis.ini | 16 ++++++++-------- .../tunerstudio/generated/rusefi_mre_f4.ini | 16 ++++++++-------- .../tunerstudio/generated/rusefi_mre_f7.ini | 16 ++++++++-------- .../generated/rusefi_prometheus_405.ini | 16 ++++++++-------- .../generated/rusefi_prometheus_469.ini | 16 ++++++++-------- .../generated/rusefi_proteus_f4.ini | 16 ++++++++-------- .../generated/rusefi_proteus_f7.ini | 16 ++++++++-------- .../com/rusefi/config/generated/Fields.java | 8 ++++---- java_console/rusefi.xml | 2 +- 29 files changed, 126 insertions(+), 126 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index 02faa5a771..23249f1dd7 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 26 19:09:03 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Mon Jul 27 05:00:27 UTC 2020 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -832,7 +832,7 @@ struct engine_configuration_s { */ float knockBandCustom; /** - * On single-coil or wasted spark setups you have to lower dwell at high RPM + * On Single-Coil or Wasted Spark setups you have to lower dwell at high RPM * offset 332 */ float sparkDwellRpmBins[DWELL_CURVE_SIZE]; @@ -892,7 +892,7 @@ struct engine_configuration_s { */ angle_t crankingTimingAngle; /** - * "One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle + * "Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle * set ignition_mode X * offset 440 */ @@ -2143,7 +2143,7 @@ struct engine_configuration_s { offset 1476 bit 14 */ bool useOnlyRisingEdgeForTrigger : 1; /** - * This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark). + * This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark). offset 1476 bit 15 */ bool twoWireBatchIgnition : 1; /** @@ -3533,4 +3533,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 26 19:09:03 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Mon Jul 27 05:00:27 UTC 2020 diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index 00e03a4d67..b7c795320d 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -305,7 +305,7 @@ #define enableLaunchRetard_offset 976 #define enableVerboseCanTx_offset 744 #define engine_configuration_s_size 6000 -#define engine_load_mode_e_enum "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID" +#define engine_load_mode_e_enum "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID" #define ENGINE_MAKE_BMW "BMW" #define ENGINE_MAKE_GM "GM" #define ENGINE_MAKE_LADA "Lada" @@ -1075,8 +1075,8 @@ #define showHumanReadableWarning_offset 976 #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD kin -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2735505253 +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 3491848358 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 #define sparkDwellRpmBins_offset 332 @@ -1344,7 +1344,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator true #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2020.07.26.kin.2735505253" +#define TS_SIGNATURE "rusEFI 2020.07.27.kin.3491848358" #define TS_SINGLE_WRITE_COMMAND 'W' #define tunerStudioSerialSpeed_offset 728 #define twoWireBatchIgnition_offset 1476 diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index e813ce50e5..8c53516355 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:16 UTC 2020 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -832,7 +832,7 @@ struct engine_configuration_s { */ float knockBandCustom; /** - * On single-coil or wasted spark setups you have to lower dwell at high RPM + * On Single-Coil or Wasted Spark setups you have to lower dwell at high RPM * offset 332 */ float sparkDwellRpmBins[DWELL_CURVE_SIZE]; @@ -892,7 +892,7 @@ struct engine_configuration_s { */ angle_t crankingTimingAngle; /** - * "One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle + * "Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle * set ignition_mode X * offset 440 */ @@ -2143,7 +2143,7 @@ struct engine_configuration_s { offset 1476 bit 14 */ bool useOnlyRisingEdgeForTrigger : 1; /** - * This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark). + * This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark). offset 1476 bit 15 */ bool twoWireBatchIgnition : 1; /** @@ -3533,4 +3533,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:16 UTC 2020 diff --git a/firmware/controllers/generated/fsio_enums_generated.def b/firmware/controllers/generated/fsio_enums_generated.def index f8061c8950..768f6d6128 100644 --- a/firmware/controllers/generated/fsio_enums_generated.def +++ b/firmware/controllers/generated/fsio_enums_generated.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:16 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer FSIO_SETTING_FANONTEMPERATURE = 1000, diff --git a/firmware/controllers/generated/fsio_getters.def b/firmware/controllers/generated/fsio_getters.def index 2a72c4a745..a94902ec75 100644 --- a/firmware/controllers/generated/fsio_getters.def +++ b/firmware/controllers/generated/fsio_getters.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:16 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer case FSIO_SETTING_FANONTEMPERATURE: diff --git a/firmware/controllers/generated/fsio_names.def b/firmware/controllers/generated/fsio_names.def index f46e7172d4..6358971982 100644 --- a/firmware/controllers/generated/fsio_names.def +++ b/firmware/controllers/generated/fsio_names.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:16 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer static LENameOrdinalPair lefanOnTemperature(FSIO_SETTING_FANONTEMPERATURE, "cfg_fanOnTemperature"); diff --git a/firmware/controllers/generated/fsio_strings.def b/firmware/controllers/generated/fsio_strings.def index 942b35e90e..2d181c1f7c 100644 --- a/firmware/controllers/generated/fsio_strings.def +++ b/firmware/controllers/generated/fsio_strings.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:16 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer case FSIO_SETTING_FANONTEMPERATURE: diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index c0d3d184cf..25de9b2743 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -305,7 +305,7 @@ #define enableLaunchRetard_offset 976 #define enableVerboseCanTx_offset 744 #define engine_configuration_s_size 6000 -#define engine_load_mode_e_enum "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID" +#define engine_load_mode_e_enum "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID" #define ENGINE_MAKE_BMW "BMW" #define ENGINE_MAKE_GM "GM" #define ENGINE_MAKE_LADA "Lada" @@ -1075,8 +1075,8 @@ #define showHumanReadableWarning_offset 976 #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD all -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 1848812543 +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 488619068 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 #define sparkDwellRpmBins_offset 332 @@ -1344,7 +1344,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator false #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2020.07.26.all.1848812543" +#define TS_SIGNATURE "rusEFI 2020.07.27.all.488619068" #define TS_SINGLE_WRITE_COMMAND 'W' #define tunerStudioSerialSpeed_offset 728 #define twoWireBatchIgnition_offset 1476 diff --git a/firmware/controllers/generated/signature_all.h b/firmware/controllers/generated/signature_all.h index 551f4619e6..4776974625 100644 --- a/firmware/controllers/generated/signature_all.h +++ b/firmware/controllers/generated/signature_all.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD all -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 1848812543 -#define TS_SIGNATURE "rusEFI 2020.07.26.all.1848812543" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 488619068 +#define TS_SIGNATURE "rusEFI 2020.07.27.all.488619068" diff --git a/firmware/controllers/generated/signature_frankenso_na6.h b/firmware/controllers/generated/signature_frankenso_na6.h index b39a979bc1..466d3beefc 100644 --- a/firmware/controllers/generated/signature_frankenso_na6.h +++ b/firmware/controllers/generated/signature_frankenso_na6.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD frankenso_na6 -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2964705052 -#define TS_SIGNATURE "rusEFI 2020.07.26.frankenso_na6.2964705052" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 3281572063 +#define TS_SIGNATURE "rusEFI 2020.07.27.frankenso_na6.3281572063" diff --git a/firmware/controllers/generated/signature_kin.h b/firmware/controllers/generated/signature_kin.h index 7209efa488..3de7f03257 100644 --- a/firmware/controllers/generated/signature_kin.h +++ b/firmware/controllers/generated/signature_kin.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD kin -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2735505253 -#define TS_SIGNATURE "rusEFI 2020.07.26.kin.2735505253" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 3491848358 +#define TS_SIGNATURE "rusEFI 2020.07.27.kin.3491848358" diff --git a/firmware/controllers/generated/signature_mre_f4.h b/firmware/controllers/generated/signature_mre_f4.h index 49d7a37413..0d4120a71c 100644 --- a/firmware/controllers/generated/signature_mre_f4.h +++ b/firmware/controllers/generated/signature_mre_f4.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD mre_f4 -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 667710833 -#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f4.667710833" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 1424059058 +#define TS_SIGNATURE "rusEFI 2020.07.27.mre_f4.1424059058" diff --git a/firmware/controllers/generated/signature_mre_f7.h b/firmware/controllers/generated/signature_mre_f7.h index 32c51d18cc..2cd4726351 100644 --- a/firmware/controllers/generated/signature_mre_f7.h +++ b/firmware/controllers/generated/signature_mre_f7.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD mre_f7 -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 667710833 -#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f7.667710833" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 1424059058 +#define TS_SIGNATURE "rusEFI 2020.07.27.mre_f7.1424059058" diff --git a/firmware/controllers/generated/signature_prometheus_405.h b/firmware/controllers/generated/signature_prometheus_405.h index 350be31347..26b04527ca 100644 --- a/firmware/controllers/generated/signature_prometheus_405.h +++ b/firmware/controllers/generated/signature_prometheus_405.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD prometheus_405 -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2603514747 -#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_405.2603514747" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 3892536504 +#define TS_SIGNATURE "rusEFI 2020.07.27.prometheus_405.3892536504" diff --git a/firmware/controllers/generated/signature_prometheus_469.h b/firmware/controllers/generated/signature_prometheus_469.h index 7d34426963..01ad89fd07 100644 --- a/firmware/controllers/generated/signature_prometheus_469.h +++ b/firmware/controllers/generated/signature_prometheus_469.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD prometheus_469 -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2603514747 -#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_469.2603514747" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 3892536504 +#define TS_SIGNATURE "rusEFI 2020.07.27.prometheus_469.3892536504" diff --git a/firmware/controllers/generated/signature_proteus_f4.h b/firmware/controllers/generated/signature_proteus_f4.h index 808253fa23..109aa5d9c6 100644 --- a/firmware/controllers/generated/signature_proteus_f4.h +++ b/firmware/controllers/generated/signature_proteus_f4.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD proteus_f4 -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 3819164208 -#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f4.3819164208" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 2425277939 +#define TS_SIGNATURE "rusEFI 2020.07.27.proteus_f4.2425277939" diff --git a/firmware/controllers/generated/signature_proteus_f7.h b/firmware/controllers/generated/signature_proteus_f7.h index 57c42c4072..34bd42e683 100644 --- a/firmware/controllers/generated/signature_proteus_f7.h +++ b/firmware/controllers/generated/signature_proteus_f7.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD proteus_f7 -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 3819164208 -#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f7.3819164208" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 2425277939 +#define TS_SIGNATURE "rusEFI 2020.07.27.proteus_f7.2425277939" diff --git a/firmware/tunerstudio/generated/cache.zip b/firmware/tunerstudio/generated/cache.zip index 836de805be81598268c9d583561613d554d5e901..e0b9e823c7565f5978d8c0e63ec9cbe73a086db7 100644 GIT binary patch delta 220194 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 delta 243049 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

vF>D=BGPvW;{%kcu9v{pd0Xhu)|$A1%oiu|mmY z1q6JVz5IXL@khmql)dx90l<_>O&2ZY7A@r!E$0?3=M_E7Evi$=NKCRSA{QF|1JWKj z?LZD}Dv|0^f*;+wHUH5cd85k5h8(I}+oEQbROU%J3%;q|T93Y)T=^ra8vf0?b;;uX zAt0{wlMbEq|X}CqI8%Qx9sO!#74Hhll&cU*}}%?|oea z;;?!gqR(@m4OEIJU#$lh&n@&vMwWn)pxOy>O6I7V(em(&=g5l(4&VSMehM5MNdzdQ zSqEbFjD1K$`W~jU9L<8fvr?f*{oS>$OTA9HV2uK+)$Ws=2z}5e#bp(0!4l@U7fii* z;E#XM8nW`Sw;Z_P5;%uvn0@vps08PaXeVgF7=2|a9|bdy%Lt~L`J)jcDmF8Vq-8oF z==K_VNAHB>Ri4e-Y5w`xsO%VSM%}0CjX?&i{L~v&fkeA^$l^_>SBx zB%!9sp$jMU9+p!wpVi?2Cct#TVh@+g8BD{R&)t*^C&jL^PA7K6oxnHpZfseZ$^n0f ze88TmGyt}{B##F-Zae{Km3{0kJrmrxi``5At11m>U;!wXtUH_Dqc@Ej^SXImD})j) zfw?$4bV|o7DJLr_rzHN$yZJfRw5vIT2K)cnD}MM``<33%14``zrn6b?`xZZ-CDPkls>i z^hyF}pdSQHqM^`Yo*q_4D(e$Hb?9+ef2L=YIhrt{`&PD52Oy`-NF`-lOjzpzu% zZ|f;137fnmaKCCiuy?};k41lKAMfdY(oPWGvzLUSOZP5Pgh&P`uf1??M`5t|fIfHW zE_0_tM5u6WlEpfOO@McB)m;e(OP{5)`*}u*y$;T91$>4tkkwZHf=6E=b zD`If#0eI{KS(yim7g!iGJy@aq1z)y3lb1#s;)iUjz8eGQOs-7i`av&NwoncjZK3Nu zia!hB;oOJB>xS4i!{SW5=|XCoycF32!}YNZT;Tc%EEQIS76~xy%%SVWC^6c!5_`o{ zJY1(M?M(c|8E{s3Gvj}Rg!X*YtFXbI65^fYk+WC_1` z!J+VstxdTWdbuLEDfCu7e4ZjpA6^7_eOb4Wr{90cr5F0P-m`zcz*vmhDyOmy8Cif> z(t{o!nN7=jmj4X~>4skj8+7F*u?;89$HTEV4E!m++CRAztAmQ-UR*ASHe@OXfaAw7 zKCJ2mg9OV7=U+6X+3J@e)qeLfeDqd=h!N4#yLD}rHHVrben#8A#9a+jMnfVLmDs~f z+vVUiG3+fwA##6Nt3`^)k4a^_xdC~s2+5RqN;d*H1X@A2pexQHvTvuUw=n1q3c<~P zxN9BlTF1NA$*y&}Yn|)O=fo*N#*xZ^a*$Ytq~pYkuF-#duBVLbgB}c`jo#`7S{zhy zue^7-SK^-~_*qt|@WDTi;Nv*?JjFtgaI|+~);m%)p*5}|dGrV1FVhHAsw#botx#*a z>mzF77@9cQJLRNfg6BwqP%P}7X(*rtN8mVt&mzKp206tNR6$_*IU95FHziUo7Q^xi z?6Mk8u|$8(ma+6P!B@omGX?qyHG70msmV$PajFL>Ww3PCN_{0CyDDPOdiK|CzRaTY zXB)rLB3)d5Il25-VOSGiRz9k|0B4w~Ejqum8G3zs(*=e13g7T~^3jj-60V*el%O;% z7Ja?clddtSaSeB16E9*E-C=@*iboFL&7a?V%Nl<^##s7`x+ZDGz8m`z*TbGJChlJA zK=jXymFjis^_qoh8jb!>q%UD#TDBirOzRny(+Uz9A-vJ^2IUZOJ(dsb`T15(W5|8m z(}y4gTFG$K70bgive_y;95L$uwM2G0eom~vRb{0)wr_A{C^6{t?9n4Wob_?ZnUG8> zeKvnQDJ!>TFAo&88Mk|eKNp&6QUZ&8mmDr#xG{TJ>d{4Pk@vUlt(8s`P1{fz=s777 zl#_E(?Qac^6A&H`&&u(dcu}MW?tP0wWT5=uppn!NvXf{d5-c%+v@hYrqUFN_hw&0s zs`Rk-R{{3(0c8PLj*mEcvLJ0g+{&X*nI3h?A-EZOMVXBR&M0dt6_aMB@lm4 z!97$Zu=V8~T*n1VSXEv$((rQ0IR%bXAu2vwk$OXmvg~S1 zkZ5+5;9Wn&z4EaPOaDj_p4#L4TAyS&$OuqUOA&HRJJ@E&me+PRINa#59 z2k1I40-TlUP<=B3U?L8i#+`&yfoKGsL#jqR!*gQv4E@aZbAYgzOB%?c&>nx(97-VI zr_c5KYP&yrm|^lh`xFQpw3sd*=on*?CYpDdZ^x=CswtLc zq3|eRC7fprdH5i^m`();Sj5DD&yM$X;=+PK!$WoLq$U!t9<^mvM(SKL|EnVdsVJcA z%9S5CCm14A&n<5=QN5*Txhj9AlR?V7NB*a64ZPR1hwa~*N)RYR?Q>q0CoXJy%)5MC$@98N^X$k{c z=h#z`+1Q8uWIbpE2rJ_dx#hGra}H$2riBf)Lk&pQj_6DK`}lS(D~uHYin%UIE}!kb5P>_w=Ss~+QT#$xKnZDNyt%cI{MJhGW}p-)lke*^-wX#df%^A zKhO&eJ7~q1tytWFk`6r}y&vbn6FYb&KYQ35Il{w%nI3y&%1HFVmphhash_9fH)D|3 zT2)XfL+wb14xfS7$p3%LNDnCb6S)D0OlqK|3BQ(w)xaB%{h^P7gpXaE|2*fI5ZaY?UZ&=U(%C1mh&Ht;Z1b?kEpx(64dQ_qOd5>VLG~JpSWhQS&0=-rfS}FWdmK z{^kY;@^BuZSTldp!r=&u%eGHUT;2mX*S~+@-Iyx6Ykip=OkP~N(prg{J9p-T;S2T$ zsHhc)vsy8&y0fpgE#hr|uGv=iGf6!zZtjV&DHTfcY1P^4AXkc}`-Wew!H{&eh=_BO z>l)d7`0hT>QQLn7F2rT?YYDtkTCTW#hhwe;79V^+HyprUtmW!TeGjcnu9CKUmH7BJ#J%4zG;{VF<+}Xf?SOPEDRyj;1 z?DWv_s-XNRA%te+d>S$1nC^;r`n+%5Ao-0V<~?y1r>dbI!E@pfPDy-F0={p(Fhp@g zw+MmGmo|Se%N068#k~Y9qP+_1w&;2#URKxj z&<}@8QtU|CL+%Rk!M0Fyy5)m0zso1qpu0>#Gj9YxXG}$7Aqv?MEih6C7ETDG%t%m1 zM4Epr{LZ>=Bzg>qrp^>=B|76N@b@j%j0@ZvipyMlAys!+6fhUBq%O=G^07gKi1DS?OgmAPjeRNgb z45Fy=v9Mp{p*;k_$W%vLN{F7X>qRCMBcy+z?wv$-ts;g9>?jnD6ARb3od~M}BmdpQ z@K&M)tjP7O`o9Vz0DO)&eII?um=J9l5yPhCQtr#zDlQtsK_XNHeS1bIQw0R8WQ*Kf zF}MNpA0q~YD2f1fiybZCS|dI3U<8My<-y`AWpBasw(MLI$9n8TlQ#`{{FL7J}4iu`*VL+{0nsHqWY01&T957bA;84u64}DpitW>vYU%^ zrZvIh^x3fg)9IWh%k%S*^vj_Vy58LXY8@V`j`)B3_&DjB zNB*N#Eb(Gu)f3r8B?I){-Dk-@N)ft=Kqqw;UKfZV=lqrORn!fOY1)#nK1WNgRr)oHacxzM*VsrR>Zd zr*3D_-WoGifm&0-0JHoE-^Qvss941iEKz?({Ik!wTT)ld1oMgu?O&?)4F?nNt;AV#XCzw#s-^1ANa;^#u=Jtzd=meWh=@2Ueu7!h zJ5ow}lg_p})X*Rx7p;G(?aznP<;XKwS$w0}LA6XbeBMzwU>BbX{45CA?VTI?Bs8ZO zKuSD`QLmCmfT4^7A9wogTHE^5@iEMbHa;JRYMVwIj2GA0E;>;EU&4OTzU;nj)Bh9g z7vBs^f;aKxn@fW0vz6gN6cyje=e;UMOesz9vvzS}{DFJ=*ExT4dPAl8y;&)Il?PZX zBDg72zK5VMa{D%n0OzebTS~G!{#=;&9KV{W5#BD)o6$!V9?POcIzNPGQ8|zeGxicM z7$|@Vruft*fk^~i?`CDd((d|j#O*x?v3>Da%3utg zZO%!yqlZQ0gkSNavYHXAj1&e!O0~0`Ef_hi&V`XL7el)K%$<&xbDC0A!5GS}144~t zdMYL~Ng-x)PXqlv0;iG7P>)>(t8KmQVuh8BNb90Op0_Vb`y)BD<$9lOS&rsu(B z{G5010XYaswcv@0&@DD}!-!Q$Ty@XIff|k{!b_?qcRUAiQ#Ry4Y(C915V$(#W>sV0 z+(G0OG)A2AcbEcQEugV8eyKIC8l84Ody+=}gC8Rq6QgQeK+3aK;LF%;S}s_grf(EY zfLDJ=&H;KF1lJz)Li+?M7_u~VCX_}L3&)nqpw^*T}%ELzsz-pU5Hmi(NyN zCE3Z^<+!qS7n4JZFm zLs5FLpb(J6a^*g0lwNw$5Q&StY2?b#OE1XKUu-0gROg1iiC`BPUZ&VJNu(bv>a#`s z+;`_+#0V54Tk>Rpy3p58UMlm9St&E;`Xh98k#6=wd_@%!u=bsVB{~%E!MeiCUsh$MJ00$l ze=2ns)%3~trnT_BA)6G#@kD>ezYl@dS99F#Q(F2XR z8X!K2y?1gH!GSycBG#eOmPFfDn!m{52_&SBxBntP#zqFHZ>-c)^3cLJ&ki2REQ@6Y zrHQ7`T5cEyPhwYEvN(fRUGu2q41{r+N!#V2FQaMFhYd#Uigv-{u-$*c$U$PPn3q`M zx13CBS*5ZU6Xh90tRSM1_IneJR7s?2;96F;*OJN>pJ{g-D({+agiNY(#G^@a{n*6k zv=fAJlEl&;c3YA%O%hKiq*k1MfznI{*R^H=IZz+5H)PC$g~?{CAk?TEJe{&C0z)Cw zhL9A=v-~#OyK9m9Z zg;AoHBux++7SF+D1J5Cl%K=bL%3~2+E4oVJvdB#3{z$()nR#+&BJ)am8RT1l&RxPW ziJk`QPqDO#j4$B$qkKNJ41d&y3Q0tFdlZ{3iJWX-Z3Q|7nZ18Uj7r+=l1$)ZTywu@-b<$Xmbd_ zM}VFqt}pw9oLzN**g*dS=zs}`cr?i|kB1kEPZ&7Gw+l6}kG&a`! z_EDNa1L6Y6Gr(|x_|8}5*-{LpuXz?^|n^wAL<sSJbI8vS8{s*3an#S*0a zO*`9O#=#yEO^9*CN0k~{D}arLA=!lwu6f9xCg=;Ru(d+R9|=ZG5JjhVfgTF(*a$Kg zDIap`0uNz59!L|3tt_oz4u{1U3|FUCWjx0zBn-p1@2N{?^t_UK<&L?6YtC&}akVMKRk z%8nsH=(B*`D2N{^!D4=>JR4$Fg?Qj+V-CofIFBi=mOnHRvhB@2<7MQb1M!_~nhvL2 zE}`EEsD*}?yKGoUmlCPBxpTIxAlFphgS?`W0Vscp9f$}5N&;;XbGfo+`>IiO?3Ug9 z>1QBQs@Ha_Rc~eq6hb97puFeby>KmWW->TA;w6)H%g<`e6c>h0Q*mlRyos z{d9l01{4H26MO`P@{b#6XMWQ)A}*}su+W=UE_($Bo}6mDoxxI1(WT#n!MTQgw3)xj zBV;dojW%qHn;W}T%WjW{g&(Y;SvS_hSP z7JEf&{WWP8E4xv6$xaI|@VYBfRMU~s>f;txs_ z^jwc03KDw2oucu?v-0_r5rWVh^^A90G7J!%H^jcwCBH@^1vw&zj(ghgqQ={VueX2R z<-8aWT)jA0TrA_5Uw+f%k!Q&6l{coDyMS|fvBYbp34_gJFSMlX1eTN>V;Q?6Q8QtYKxFA=@Nm zftfG_EGeZ7ro70bT_Qz9ahmx6Ovj84`<@le(WqSsRpg#T#)aHMj>s(!T+3uY%z=u4 zD$JE4rn}CQaJoZ7h?w&THB4W@NyM#@GeQk(9cPQMV1fh<)bygRg>nUiw-|p0p+T!L zSgDe3+`26ur*W+M?=31F?=l^{c$p-R_Q@4MZ3x}xm=j=KX77P_@3!yIs|S0mdY1u> zU0}Uq5r3-D7vWMxD~U?N%zp@pfDCj9GwVO_-WwpUWILsWPrD9RHWS|rvWodJ&L}58 z&KcyWSZCRcl5Q*~Yh7!lb*+Du*Me5ojjd+owl*Bi)Pn#jVz>jV3R8pz({Q@9yGaZ7 z`f{o~wF!5w&0~I@6MkodF`)6OnFiECHXjc#*G_l*kKh@dQGQ{w=vBZ}zMV4~m3Ohe zT6KL^jkD6E3)+*zJ$DO<>ghBweNb9hXw{)jAC&c&pcGO|=XiCf%3^<4tMw-7x!3!4 zqgk(6Y-UbxkHDaQEv~ho6m8^GpX=QAYiB_@AfBIZWg0PzQ`j_6M6xn?i^VdQaC~$w zj9Hku<8(Y7nTSWyk$skC7v9NRFz8;no1^=`GbnNm_FL(>GDDhBpRH|`u#JCS+)x}nB}yZ?Z-${y&QXOD8pq=NbO!8-`v3?+HC^v^+g<14 z_VSYC&Og^NZWsV3BNmbk$f9uo`0)Jvu72I9HtSBKb=ju!=jUiHNzx9xS8X)RX~->} zG)^En0ur^p0?p>ubBgQ60cf-|1jd_M1{f5|ZPr^?{p-yw=M;ZWa~CfmaZxW2g=fOz zC~b#1_oIn7LfHpCK4`QPv6Ml4A}q)OF|Y^t6i&ovM1Cm@#SfEEH7&V$18FpvOW3kL z3G06LQk403D8nold7x<%@vgTB!kBzpFAV6`=(?CMjhcu=2T?xxT>*Ly{hhARgJqNO zJk3_2hgt3YM>&6p(3OujRAq`8Ka>TBBIy&hpLr`WU#TX;Xh@vYY^Lb*q_g1!Uk^fm z^nhON8)GHvN0v$Xs=wZo0_MGz<{J-c-k zrtadIcA8nC>dx=K;n%XjbL92OZR3FK6z&3tWF4mJmPnN~ArG8xM0}=ZT!X zaZ!73Ir7X&*j0`r(3~Q1nnIM35gF9wltmcOjw8{CxPTchLwtNw!3zih?ORqNhn!Ii z3(IpOpMB)wo9(Vh^T_iUx|C+uA7WK7M;Rs2Ab1z9KFW1OG>>( z-d{$;8=ohU2GeII?mCoS6bB)GWnW2bb4 zmVLRY<=oW6+|;Ao)Z^ULlibwP+|;wY)KVcgwU~dKnme{q?$}DXV=Lv3t&}^qQtsGF zxnnDxp$LO@(0_pi%id~`(+IZMYiEkb93Yx_LEAA?hA}&~lyf@?<8MpQ6l!u!QASIt zl2jD=*N8jq_@jy@3Mi$YwR2o+J>14upk@#($gEWY7tlBLVz#D#Gpyv#fVww>1DhJ@ zo27p(TkjNsmKvhC!O+yIM9rZ4l+29ze%9Zjh)cD-_bSw@Vfufyq z`?Ox9b~nI^LCN92H7(~Q%TnrCsi|F&oru&xNjuV<8FOrF+SxR?0u62x05ZCDZRe)T z_!6h-v?TqkJK9uSF7l{T+5T}cd4=vxA=7`pDM?FOH-a!{-P`80eOg%4xOjYD%(@s9 z2AySLY#1^)WMaaCJYr3_q{T#sJf_j{{pP;$1==1_a2ul2$la;MDX$cirW+)}hvQr0 zzZUsy(XOv3*HWVAw}@iN_@cUujcEezTBZtGM_0iXT(%WUdDWx?fPOjLa zEo&pPfJhX7D7wSGm9#-FQ`R@a!61->MxJMm$|ojk!wRLWA`ZVJbfy>VVq`ddhb5pY z_tF|NL%T)m@u7e(tz5*e9wL8X3nPm4L4(@yQZX)f(CewV1H#!<&Yp(>YJa*hb5zyN zEwVjBPk52YhXWD!jklG`$3$mTIVUD((&WmDoV{WwEO~8T;JT9QV62-c-vMB5Se?eo z4FTy;F*lsmH$##1ok3lh&e5R61>3vsF>E(2KQKcWI(@QG-Xv<7KlJI^&`WXAyEOJEA zvsf_Rz!NJvVR5jiq)s>qnN$#*XtIn=O+_^NW7n)hH$?5k>GOXNW-o^fo*yg)gQ<9o zt4IV|p8@JH^diyXWEoF@!|@D0cwNn$2ZAo z7D1yE#7mfwyUveioxiNgw4X{O%H-qTEVV1waUQP~bX;khxy&Ua9LW|umdJHek5RvR zH`bzyiOLBansCRvOO9x z-IU7LxAkr2-L)lq#}6)CL|(bp0Z*iG-8oI;?h{wOZ2mlC^fJ-qge%5P>4$&Ycg5&& ziu8|@Z;B49S)P;bOTt{Uj#_l9pQX_WUG>W*Jz?Nv-uVs@o%`-lhOm7o~c z+$)xHwzx8vvNjxd7=p2kB{=PYh<)6FWss!Z{d*m3duL7)+lbnPh~NF9dZ|iA5x^rBi>|<)Huq`)E|q!_S)f#%IQ>#Q$o@cuTF-FH@-w2uf{a_ z2OHQ?JYClJit~QXoo4DSd1yLY@U{7C!HQUueHM}Es=jHZA(C1avD@+qGg7bU!a^oP z(#aSIdi8ObI}f|^siN6$^$w}@WNSp!7rtVq*L!xcww1G>Sb8h=kkb;)b+O@b8_8r!K&KbW)n4Oo`U(1WhDc4R26{$pW)Ksy|P1l8sBt#rF7! z6w8=>&k3dKocBu~bOgjNlP})n5h&QYPuPH&QvU8!aYenyqgU?%S(g}5zv^1%XX9qF zD|&ofN=+6q#vyq917ugLhd4JVZlfktt%6S#i!YFEhu3@znZ#?UO}5zxQ1)0&(&mt5 z7ya^Wfi0fV+%2er%bVas2FlMvE@oN|aU{FaUx<*WmX_@n zB?u!So>D+-J}~dTaK>Gml1kulL?^#7Z}NFDnxX0*xe}h)I!QIWCjb1 zra}BI#<99L7AV#NsQqMw8Er^^h#4vwWB(g6kk<3E7lHZ5?;U3z=)K5k>Joi*R;2Q+ z@{22(%I48#`1%23uLoZ983)EF6`)KH;U16Dr~bm3L)t~0YxLwUvi3|&N9_0Y@gp+mTA-m+_wtkLr4Y zROu;|w;|&FV~tb^TJ|T$uDN=A>#P&GJIOo7;Lp%sJbZ_74DW&UsgINBS25?yP<6f| zvZzv-YvobowUzpGWx?)E7QOcmxd)T+quU)Lo(S^vb%>7MG}CrTnlRRR-9gvg+g?~W z$)kB#^~wBJUeEsC8--Kl9beq1tqAVzUsAXf=r+II=WpBc5RZ?JeA9o@SEcr zd~UIqd{Q~sitp; z3mZQl@v=Lbm(etn#7AbaJJz(Zkr<1!P5ca{p1owA+17FaMPs%y zan5RWYUv&yQg5y&!@|_%!dY(L)e`F1UGT;p?OfBC$m)|AE5;qDEwweQq>z=cds(pWM@l&3@hWA(RvDr^=U8)kzBVty3}KVv1tdixza$vIvZ4@&`uU4?_@!?&2wuFy{_!jSEx}7s8;x3H9|%;P7s*Aw+^b=B z?QnU&kYsxKHj~yPz1tCFt3;PbORg*DTwj{WT~Z|?*;K2SUA+?&9~G4&BV!QNIE1qQ zU=hC@_2on>gEkdnd|iq?Y4WK^OQ&sz%VOB=gvELKs2Z){5U0bFgnTC3`d5;z-#K2Q z>axQpJG3MytU~O_je2I%s+9Wml!~N}#k1AhOJ6+BqCI?&G3r{%sd49<#+Y1bsm-!S zCHyqh+zeTpotqm)JPIbojnhO%%()9uwTrgp%SG0^be-2uDlJcpsEd=Hd(Cc79zhs2 zV4F~yn--XBhofapM=hmu@ol(L$HN#Yq9b+rfn1T^;=b$$rdg12x4$S3@#pHMJ_1gXtkWutYSgu7hL5Rv%O^TpgAzSvtN>; zOzy}hvZgl9?n3WJ>22CsJ!&{xPc5$=tUXABmwZj<(2CP(1NKMilo(p@j{ z=`LmdoN@Ik-Zzz13&(U+k*C6`nS?5orxa_Z&cd8&?YKqAvEfI&{W79QgghC#o7h?i zuXhMXaQmhtYI?0`)%f)~_of?HcjrI8btcgxe)?%!+(q2Zs*ITZ*8;MUV%c`z+wyOv z@i=G_zRjKN-JgPb{_L{=0uo4~*j@y{Yv_m7fq^3ExuH<+3e7SO? zgx*H&c+;-NmC~deHOQ;V>`NyH(J4|=cZaUtn2aaTs_=Pqq-w^x*Z70H*W*x0dfyD9 zRfFhD5-L{_<2R^p&Kz@#$Rd0@QGah2C0>oL661@nX?c1__7r>9M&W0^nqvhO>}NIZ z%)83-NeQ*}=x>FLAqXa^KUofkgyz4eXXOrh^?cl-;!;|lZjzEi_FYHw)5`)S&7{Xq zTQ3b>KNr(AZGzm-zc_xZ=vH4?joy`feA%u1rU)wQ6F7dbF0Y8ZK!1ihMAULCaw;?-^RlOv$&hS915O@m$n? z^SQdJpXCaJH)Hd=)MPKa4V6zaBZkvOA~V=g=TA|;-| zF_izr%#7Gs=cuIoR~FH|FG?9qR%s&9`4R^4j%x#~S#Gg4Jl*usVI`7&ojXi2()1%0 z=JkZuGm;axIq?FVUwokuzTe$N1wJ=PHoJG{}3(5X&yE5)Kp|jenFzrd?BPaLqREiES1&mT{q zD(3K$4-rhVSf>Ta(7F~dMJV~Hjf~)paa`+H_?n*7^DIzhjkeh=pXAo~NQ9@Eh(u;i z!96wph^XS(J3%X41@2<{!MR=^-Y%6(RQsc^5ynRR*gbkrtd@lo>|zx&kr zMb((_@d%TFxLGM9hR(zA(io=6%&RzA`kZ z^ZG=eFj-`4cX0Mmr?w}x<)2%KySx1wg}WFvZMu5VybYezYOm_lNV4v(FEUquif@#7 z>=`gOI<8)d5T)1m;9y`kBBoQ6v65sDM6rgSmx$(J8?V^d+4d6{oA|_Rw{Y zk}H{H6ZDg0&WWhqE8vovZ$L-+FCQj}a}bZk{fg2Y9y_f#|3mMaQA4usO9h=b%12P8 z4+gd_mN5BTN*eVu7JQ9!-oLd&NX1?|+%)?#v18JL(SoqXM7b>6Lun=SvYlwh%+VgY z+jJJ$@+<8RnG#Yyl<6CYHDoIc8BOxBTf|^y`5tlK-_e&9#q+#pld?>hh?lp_ue&rx zqiSgO@Zn{`&zurk@!i+Q9OT&PXs@YQpcH)!Osb035Wf57$p{5={RfhaDh`qOPPYn< z7!MRlBp#V!yHJ?P*D(>Rups2P=$YaBTpO7%9c15sc}2T?B4qamee39OKtsLYO9H}; z>e9J${+~8QWZQZ|)Xyl7&k)XxzK!J|`hGqqd&VdsBv-B_xyB)&dOm0xm+sql=2Dc* zeqNawc2hMagsbiDms8b@ynqcoZZh;h0K}R}Qa&@hkO|%h3+vC30 z?{pfq_oY^PJw;LBR{h_7t7`7J=*v458^%(tza+Lt%7qqFAk!U>Iz+ z#DM!6yS?AI!ONYzW(M{1q=mJ<-K}NI3Ey<7+tt5b<@mOVXbt`n+tiofaJ@|lF^f7< z7uGN^v?=l|=-4iPA+8WlmApPhW0T-LL3TN3{fl&S7~w4Zvi_HOUh7_p+cd&yn}_&U zV-D$L<%XW&ptIHU^%TSGX0%N)%wa6`t>&xkN*5-crq?o##Nj`(l(pVXGvfJtFYv5d zi>_CPP0uJ<=lz2}dsO9)7h18oB}c zpnGK|O1@^1nHrW|)B#Re5qtOgPb%MFB1M04O6K~)Cu6$78W84LBCKL3evYHN<%;LV z>swV9?MDzP&DRMHbj!KevoISbLJE7&_OGt03v*C%c-mi}sagLn$k2_mtB5-E1XU+F zVm03whwF!VT%!4Pg3qPG*r%_|*s}k^6?eC(oYH{JB6)R%j0|^~%A>(a*9{q8-ym&f zxGlU)79T`5q9`4=qqi4*W`m$?0=KSdSA?N+E0NvUZq~S|z_756M2N=tXX7^JWTqIKdpuLnlh12V>F+-=4wd6;h;_L7Ks4xlnu(C|WdHxEk z{)?WG_W3(|Uc_4Cl#{vL=9_T{k=_Y5vhhha^6^Qt$@ZJ-RcV1%2|LsaDl_?%sM`uX zvI**UvR{}mE$({zFU|y=z4UxBVmtcHN6$}nM|RbA`fV$HH|CtRc%RD1$e4cCV!(gg z7hGvT^Wt8!72kb97vV`N*`%ihyw4vU@+Fk!_r9w0VT&tB%;PcQ0#kT!wZBt&-kSOA zV9|+3^pJO#J3^uDD2|LX!@aY! z<-D=XQ-W$7Y>90`lFx9RDQ;Mks)@W(C%U=*{%zA@FxL?I*N7XMZEk9fLY`Klhbd42 ztWh*^sLQl+2#a^|bqdb(#);uqH1Q*jXxB0X_wZlHPgqi&x#Z7DEm`6uom1K*+_4v3 z=oVmDCC((0|K8;Cz)@3Nr!6T~vQKka?}H08E9-OxiXV^o&a&Uq*jK!gF!6~x8y~&2 ztVWtLtNNVw$q%}yL4MXVCg1lTiZ@>iM{z5w1W!Dv3@5nZ8ua<`l7vrD$QzFlf<+SE z$?0;APZjn%?g^d!_g|9F=eIm)^89|t>abZPd+Qm^o6Of@CXTc6-6^eXvZ~*n8d5K2 z8+(M<;Lx*gUnWA_S^NCx%D0#f#79+?^sWXvW~Ml)HmFy%O^!H=J&4^J&L|p zK1A^7sv3g~ZDJswh|YDK=-@L2S?dzU_qR~jaL=X{FiS-}y_t*5jTJJSf7$$OVsq2A ze|p+%)<5PM=~sOItIK=gKHblQyt$>#4^_UeU9=c`bDgL(WX$8^>{P!rbG`6!M*ZNn zPG7Yr#mbW>GY0TllkA=*S7q?lk*hvOYJ8e|Qunco){;b_#!vN5=Pvo%Y-XnT^JQ=R zyivBFLpL|&+6!#cOa${2Pd1zvO7H79f6Znzmn-b{__}g%N?sRbjDOZS_LYV5Gq&n= z#g}Bz+>;kI(QQKCV|ChmF3BoN_{T`B%q<;{$$Oam`c?N}w5^20`2Ls<0OoiFA!LY~kC_`WxSc zn+y{NUyPAR$-Rb5>I@_tv0&ZuSBY^|EuqYMppahWSwi2MEPCrk#^F3`>Ng+yKkmMa z#BK$cV?bQ48Sir?h}|%P_v`Lr@AG5z$LIAO&T@O0$q(J#D0t5|5Vfar!ZnWV=nuij zue3GT%{hl;DF$!5?PbSNBWA7$X!PBBFKHb;lJ z9%_HS!SgK0%M@oTNZ-0MI6XaS`C8`{wE=BK4<^*coyF9dua~;Wz31NT8DhLNZq{Ek z65w!^cwqJU+E@N3KSWoXnS(5I56RV>ta-D+5)e3;T*ncNXUY-1Fl1deQU8edgrqE^ zq73%Oc26H)>~k`>pnH5YbY-R5zr@q3H$BT|$*}Ib?>D|kOV`-yl@)W2edjvf06z-Z z{&)Jpr%{2*`SsfOyDOTasfMFo^#<{7Pi9cYZ?CN(Dy{Y_5k<}=)6HRP3spf`#YY~< zQ5bsJS0%q1ot|DyA(;45HfV*XRAg`BRd866QxordSA%cxb4RhHB+l2Lk&@r|Nz%pq}P4c>Y>d^@&cdHwkwUeYe{FcciN4JoE;wrx|d&Aa}+*A zYjFHwV#D39*BDsGkB**CzWMGe&-%vm%p}e8dBU>m?dARS1CQMX7izmO7RHiYZ;#mosMZU!U`%3kr5PWaiKb zq%B98qfG?b&qakyJr~}_ZeHsdu-)lbZK_4`O5N(_2b4pez#?sv?X3X;v`6;|$zwL} z6Lb65yvg&A<l)q&b=&At30wR;uf-r~qHc|& zRC-8i*prv{HB1fCO#EKmDM<@d{lK(=2llXuA}+n?dY zJ1)iHF5X#aCG-u*zc%W?Jzuy-%@VM-kd|%EJ9B7uICDTpY|zQcX+Z8GOMSjGV_902 z?oO80kd_cC^4=jwIa97i^%GL#M;@4e6Fti0z2neT@<3(<)x@0E{e>)Wb<4zo@=p5I z-fe$gw2I~UOlm`LEOrZ(G%ns$=Eq_9L;YnnSGb?n7}kuQ{Sa7_=N^Sw=c^YhS)OZN znJ2Ugt9x!k^C_XdvZ5!hcK@tUL2!knylNeJVgFMNQB;u5=m182sm$$#h<0Abh$vMR z4k;tQwN_Sj|^BLlD?g)CD6l$DbyE*1% z*Es9FJmQgvDo825d8>t3ZIMsoY)`FHuG77DdY2daB+O)c#gbT44L;6jTc6I=w;1b7 zowe!MS0boYv3C%6xqars&fTLE)saVVLUQif6I>RsL4-K178g%hg{AJiAbqrEokQv>-24!>932aHdog@SYPNhAp%&R3V)Yy z{$h4*w?R|qqK4xSBDeXGyOvUwg!Q@22Jg+b=;I@gx9pRASgaO)b}#p8=tZHuvrM~I z;*){mq;>0t`2F03b}~Yb&b^Rge6%e$1h`l zsXv9Zy36dB4`w*cwTvX`88Td>ziht zfQW!wTUN_m-@%k>6T`mRZ;ovrC0-Vew%_q@(HLYC@E6Qc7BZvem+w_2S`2wSYDd%K zYe!a*`hsJ^RdB7X=7PrQYyI9dqa(f7Cr=d3%pYf1tLkNfV(WfHlTG->4FYqS@u=o+egbF3S4AKdj1csOC2XT7%Yx~E$+#r7z} zWuZhqlQaEJdEf3_C5s*`_S8#Oqd4+(zKE^!{z%tAfNE|CYP~HtpqlafX2bF;k#ef7 z55vtUW2wYJ+G=$wCH@!c%jFW}KQfg(KW1m~Zf>^;``g&H%mn#c#C1{D8caEIhH&I0 zVo21+hi;<0#h3?#chKW*MAy_TR$pqrkQum%>a(}B{o>&9D2$7*5dYF=dFb2}fBL{~3WW+P?X;#rUFUbkr!eV_YDi{{2RJZ_Z(ArHiF zQfanj?`{npX0X_9sXE6VG|SL7Z1gx_{F<(HTb}K!8prO#7SqLpwU2kTgyOm`3!vyS zXJSWhoWB0L%Rx5;z3yKgPMqzsZf(^@w$I}>r@DE{;0{kn!I(rIuc)g$$4*f=#-b$T zyyu1C&%L{7W0c+fz_>B-a;d_H+XicrKh6Z)rN|^q4w%(ZFqLL*?-J=$6YU@MuZs&n z)+XYX9lEMoR62g^CUZeue}2U)oo&s~`r;GkGW=E!oft3ky5m1=WORIKtEyIW?QnNg zCP$%hoUQNqu(Jsl>1pb&rTdPrz4H=Ht$Cc*Qe4D1=-H8lS|gv_PsKiATw-3AKdK>b z$|!ht)l(|<_SMs8 zZ}uQmv@SW(-t$KJ$bBWva&l`Q?Q>t%S8k@Aa_cvCGde8=j zUsN|A&N`~yKW#)MMx_2mt;?k6Mmsay2{F(q^7C6 zD<65IuC(!K8M97q^O-bLoyk}~-*o@GjarimZ>0*(6ogy~nnIb=i)Mbd-n5R5u8h?z zN)$4_zNYNAuJf?H%6F4yF!DpcfttZ5z5bJ7KTa`HUp8FgwAdjoTxN)7`}(m(Z|B&| zS>IW-j$wb7;WUFyk}ytpm*Gq!ZE=5=&g(Unttp+?t4*5`sZp~eD{(QRB<@#leCUqd z_32QJaH)$MnIEA>=`fRtkNRz%uQxUy{XA_kGJ^i-72;91YgkR`zJ6nx-SYjGPK{YX z|D2-yXr|3-YqYj&cA(*DHvRbO#c9I3uU7L$FCqvA7>YyRXa~$uwq6y^Pe}RfXvun1 zQmnM+3|F7lt*gG8;r`y);tg@(*UAdlCGy8z%`G{O(*>SW`G8Uq{Sj0(+dfSHz~LNa zexsc4`@*AAvnt;xINwLS7~9Xq3(x7^xH9>0n0BwSyXqomzLx9eUNB3J)@T6pZeZzX z)x~!ZmZ7{^1Bqn80SA#&!ztaCFNUwOjI$Ged@1|b|4ROHdiUj&lpgx1AulRk zhxXOMnM;pM@}_QgqAF{hJnI5)b$*Ua=Ve0o;q(++xJ#v{j?odSh^ampY4aWsKC( zn3iK1O@pIZWKQJ+=YFD!7ySpXJ&eo0M z;NM!X^|L>Zh*%Ajq^7d5EVo5lKX^awTzZ8=7-zcWbz1Fl8j)c03mB3OS)u9q^6F~& z2d>n|rrfJk)s`nw=f?~N>XAM;tH?CNtiFxS>5LrWO~OvRPh-Z8j1l-8 z&7Y0o%8%tPbdjcIJPx$HaBd5b+^Zk2o6VWdS&pzEA< zA^;)n8fP0&R*$JnM!nMQ*s)=}b-qi$h3|a657|?U&v4^9$wj)|bCLX<6&bI)61$9C z>E@h|Hc&DOc)WO;KHGK$&GCiX|=_!w|&Ux@Hi5K67=RjnH? z#5?Y1winbQBd=_GW8{mEc7IWvJYH9%(oCE|QC5?foBC1N+%ymR)_iAbS?Q0YVb_VD z*=NPxqe=9+&alingzB~6c$Kutc(W%x zRmW^Decin6{)95st~$T|63(|!!`sR{A}@??COvO%3UxU3LXkf@sN;5xfG(F{X!8jI zw>GicZQl^b&y4U8h_1|KC@N)T-F<@pUiQmV<3eA2_ch=~zcGYHe|jxRy>j|_wz%MW?rm*V3c zgx+}nE3`z3w8#4^Ao}M3fCvC00Ehq} z0)PkrA^?a0AOe6003ra003ZT@2mm4ghyWl0fCvC00Ehq}0)PkrA^?a0AOe6003ra0 z03ZT@2mm4ghyWl0fCvC00Ehq}0)PkrA^?a0AOe6003ra003ZT@2mm4ghyWl0fCvC0 z0Ehq}0)PkrA^?a0AOe6003ra0_yHgSfCvC00Ehq}0)PkrA^?a0AOe6003ra003ZT@ z2mm4ghyWl0fCvC00Ehq}0)PkrA^?a0AOe6003ra003ZT@2mm4ghyWl0fCvC00Ehq} z0)PkrA^?a0AOe6003ra0{%-&gg()FD=BzydH`zZt5Oys84>dIHM4<6oh{}Sn9_KHG zXwQW}`PUGJ-HLGWuZX-GfyA$o^1pl{a+Z`Wy=OCJrAAH&1Pvx=i9kg54b~<4=Kz-o zTq1CZz$F5g2wWm?iNGZSmk3-UaEZVr0+$F}B5;YoB?6ZSTq1CZz$F5g2wWm?iNGZS zmk3-UaEZVr0+$F}B5;YoB?6ZSTq1CZz$F5g2wWm?iNGZSmk3-UaEZVr0+$F}B5;Yo zB?6ZSTq1CZz$F5g2wWm?iNGZSmk3-UaEZVrA_SKRTq1CZz$F5g2wWm?iNGZSmk3-U zaEZVr0+$F}B5;YoB?6ZSTq1CZz$F5g2wWm?iNGZSmk3-UaEZVr0+$F}B5;YoB?6ZS zTq1CZz$F5g2wWm?iNGZSmk3-UaEbnVmk8?wVX!WdEZILY5O(~VBsvJaG$+*fE%cKl zItXD&B6`fMC85Bt@t-cyK^W^2(PNHV6SDmp{u?J^{S7D5`$8xs+lIx7{y6|A0-OkN zBEX3NCjy)Za3a8o04D;R2yi06i2x@8oCt6tz=;4S0-OkNBEX3NCjy)Za3a8o04D;R z2yi06i2x@8oCt6tz=;4S0-OkNBEX3NCjy)Za3a8o04D;R2yi06i2x@8oCt6tz=;4S z0-OkNBEX3NCjy)Za3a8o04D;R2yi06i2x@W0GtSLBEX3NCjy)Za3a8o04D;R2yi06 zi2x@8oCt6tz=;4S0-OkNBEX3NCjy)Za3a8o04D;R2yi06i2x@8oCt6tz=;4S0-OkN zBEX3NCjy)Za3a8o04D;R2ymkR9w)*&L6|umqSIvm$UxZfZ=C2Ll%Y?g`)dd-%qoQu zHXwS0cMu&gAW~!brO@gVE<#TW51$r+ASOl}WSlZ2lKr**k2(=*km#grJ60$9=K!4u zbRy7+Kqms72y`OQi9ja;od|Ry(1}1N0-XqSBG8FICjy-abRy7+Kqms72y`OQi9ja; zod|Ry(1}1N0-XqSBG8FICjy-abRy7+Kqms72y`OQi9ja;od|Ry(1}1N0-XqSBG8FI zCjy-abRy7+Kqms72y`OQi9ja;od|Ry(1}1N0-XqSA|KF+Kqms72y`OQi9ja;od|Ry z(1}1N0-XqSBG8FICjy-abRy7+Kqms72y`OQi9ja;od|Ry(1}1N0-XqSBG8FICjy-a zbRy7+Kqms72y`OQi9ja;od|Ry(24$UI?-Vz;xlCb$UxZf7oDi<46)v?A*@bxiR3@{ z(AY^5R!nsnk_A&YfF!3NM-cro4Q5k?IN&eE=&3X|EnbzF{nx4fhKkrzw)CFOl$9De zArLf}inqikW#3| ziU2ACs0g4UfQkSr0;mX}B7lkjDgvkopdx^Z04f5g2%sW>iU2ACs0g4UfQkSr0;mX} zB7lkjDgvkopdx^Z04f5g2%sW>iU2ACs0g4UfQkSr0;mX}B7lkjDgvkopdx^Z04f5g z$Oxb!fQkSr0;mX}B7lkjDgvkopdx^Z04f5g2%sW>iU2ACs0g4UfQkSr0;mX}B7lkj zDgvkopdx^Z04f5g2%sW>iU2ACs0g4UfQkSr0;mX}B7lkjDgvnJzlVyjP7nqQ6|rKx z#7TI_{^5bJ;M2&5vAia;s?sR*PZkcvPm z0;ve3B9MweDgvnpq#}@tKq>;M2&5vAia;s?sR*PZkcvPm0;ve3B9MweDgvnpq#}@t zKq>;M2&5vAia;s?sR*PZkcvPm0;ve3B9MweDgvnpq#}@tKq>;M2&5vAia;s?sR*PZ zkcvPm(gCRmq#}@tKq>;M2&5vAia;s?sR*PZkcvPm0;ve3B9MweDgvnpq#}@tKq>;M z2&5vAia;s?sR*PZkcvPm0;ve3B9MweDgvnpq#}@tKq>;M2&5vAivDj>(LH9e!rJIKJi5+s%WHS$v|I&?H;OYhlCS*ei|0zq>T2f>S0;604dZ9vi}U@xl^ zix>TK0A2)m5#U9D7Xe-bcoE=5fENK?1b7kPMSvFpUIcg%;6;EJ0bT@n5#U9D7Xe-b zcoE=5fENK?1b7kPMSvFpUIcg%;6;EJ0bT@n5#U9D7Xe-bcoE=5fENK?1b7kPMSvFp zUIcg%;6;EJ0bT@n5#U9D7Xe-bcoE=5fENK?1b7kPMSvFpUIcg%;6;EJ0bW!NcoE=5 zfENK?1b7kPMSvFpUIcg%;6;EJ0bT@n5#U9D7Xe-bcoE=5fENK?1b7kPMSvFpUIcg% z;6;EJ0bT@n5#U9D7Xe-bcoE=5fENK?1b7kPMgKisge8M8SiDG)>>n8jJN}Ip9fYuG zk;ZSKpGpxngjI@^e~tXai4JN$93_+fHS!ZDqT%=#PIL@$2qQ3x2$M^Rlq35`2EvYi(?ka$6B^{X-$Lay z$QWF_gODmc(vJC;Dl0sMo)#WHEdoJIj5tVWqDM;pRvY3*FcV%rpN2duO3wT%RD{v! zL`n%aV|^k$EgW20#LqbnQqE6hzR$x)AOa*22sQ)>;y)knFwZ)XJT!kO!pwFenekh^ z@e!DWQ6$$NQxx7|Q#|~!DGjYiR?$DqqW5g3tklQ}fuOmFgW&q@)c1Dq(G5siO#M3~ zJx$C1ylTuWc6K6Vdjf>Jw*w}Vhx8ad0fOjHiAQ^o%y^4V1enQsF7d={W0M?wh~7TBixPT5&idhSbkmU|Itg}5&Q~St>AEA zCc2SAG=GZ!)j^jzAsUC47BgW^$nn2TbkGCdv?U=rj-CUv*oCC}<8%j&;PF`hoR0lH z@{sVqPs;kQcKCn0H5V|}?~!7nZU5@zpeV?-X2ui`frutVAOwFaBGDy67c#J8*t?K4 zG=C_?kbb~kRjob|M!y)zjPcmTBgN=^Kr;O?_sT);x&aYp#(+rtU@`tQ;p9Qm1;f85 zENn*}`r{@4`VtiQ?UIuQiO>zqEEwGe>`Soye|C#`(2IRVoWa!eA|*xt5Z9CVZ0vs# z``v^hMj&KV{%dli{SaY!+WLr4aiKV<&wOzS8aI)VQ` zo&72Cug=&w4(8+&`F8^L`Sx2=$9}sz#!oQ(qeuaogQw%K{Tw_MaoVu`>{B8!&z>L; z|J9J_AJX(Xr0*XI#YG^rsSpVH-zG1lL82%5xiPnCkjw{nuxiRcX(&&+xNdkOX s3}y_w7Jo`>z^36IX26V%A$bn}Od!C%J0cK`*v})%2!w7r68qKv1B!T2!2kdN diff --git a/firmware/tunerstudio/generated/rusefi.ini b/firmware/tunerstudio/generated/rusefi.ini index c54f77e07e..b4813c11b0 100644 --- a/firmware/tunerstudio/generated/rusefi.ini +++ b/firmware/tunerstudio/generated/rusefi.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.all.1848812543" + signature = "rusEFI 2020.07.27.all.488619068" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.all.1848812543" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.27.all.488619068" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:16 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -672,7 +672,7 @@ page = 1 acSwitchAdc = bits, U08, 1469, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" vRefAdcChannel = bits, U08, 1470, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbNeutralPosition = scalar, U08, 1471, "%", 1, 0, 0, 100, 0 - idleMode = bits, U32, 1472, [0:0], "Automatic", "Manual" + idleMode = bits, U32, 1472, [0:0], "Closed Loop", "Open Loop" isInjectionEnabled = bits, U32, 1476, [0:0], "false", "true" isIgnitionEnabled = bits, U32, 1476, [1:1], "false", "true" isCylinderCleanupEnabled= bits, U32, 1476, [2:2], "false", "true" @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" diff --git a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini index 61c82f5680..acf48284a3 100644 --- a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini +++ b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.frankenso_na6.2964705052" + signature = "rusEFI 2020.07.27.frankenso_na6.3281572063" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.frankenso_na6.2964705052" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.27.frankenso_na6.3281572063" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:57 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:21 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -672,7 +672,7 @@ page = 1 acSwitchAdc = bits, U08, 1469, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" vRefAdcChannel = bits, U08, 1470, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbNeutralPosition = scalar, U08, 1471, "%", 1, 0, 0, 100, 0 - idleMode = bits, U32, 1472, [0:0], "Automatic", "Manual" + idleMode = bits, U32, 1472, [0:0], "Closed Loop", "Open Loop" isInjectionEnabled = bits, U32, 1476, [0:0], "false", "true" isIgnitionEnabled = bits, U32, 1476, [1:1], "false", "true" isCylinderCleanupEnabled= bits, U32, 1476, [2:2], "false", "true" @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" diff --git a/firmware/tunerstudio/generated/rusefi_kinetis.ini b/firmware/tunerstudio/generated/rusefi_kinetis.ini index 803ce6c06f..f498407f71 100644 --- a/firmware/tunerstudio/generated/rusefi_kinetis.ini +++ b/firmware/tunerstudio/generated/rusefi_kinetis.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.kin.2735505253" + signature = "rusEFI 2020.07.27.kin.3491848358" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.kin.2735505253" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.27.kin.3491848358" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 26 19:09:03 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Mon Jul 27 05:00:27 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -672,7 +672,7 @@ page = 1 acSwitchAdc = bits, U08, 1469, [0:4] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" vRefAdcChannel = bits, U08, 1470, [0:4] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbNeutralPosition = scalar, U08, 1471, "%", 1, 0, 0, 100, 0 - idleMode = bits, U32, 1472, [0:0], "Automatic", "Manual" + idleMode = bits, U32, 1472, [0:0], "Closed Loop", "Open Loop" isInjectionEnabled = bits, U32, 1476, [0:0], "false", "true" isIgnitionEnabled = bits, U32, 1476, [1:1], "false", "true" isCylinderCleanupEnabled= bits, U32, 1476, [2:2], "false", "true" @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" diff --git a/firmware/tunerstudio/generated/rusefi_mre_f4.ini b/firmware/tunerstudio/generated/rusefi_mre_f4.ini index 58ad30fb24..96ac2a6f1b 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f4.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.mre_f4.667710833" + signature = "rusEFI 2020.07.27.mre_f4.1424059058" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.mre_f4.667710833" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.27.mre_f4.1424059058" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:56 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:20 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -672,7 +672,7 @@ page = 1 acSwitchAdc = bits, U08, 1469, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" vRefAdcChannel = bits, U08, 1470, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbNeutralPosition = scalar, U08, 1471, "%", 1, 0, 0, 100, 0 - idleMode = bits, U32, 1472, [0:0], "Automatic", "Manual" + idleMode = bits, U32, 1472, [0:0], "Closed Loop", "Open Loop" isInjectionEnabled = bits, U32, 1476, [0:0], "false", "true" isIgnitionEnabled = bits, U32, 1476, [1:1], "false", "true" isCylinderCleanupEnabled= bits, U32, 1476, [2:2], "false", "true" @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" diff --git a/firmware/tunerstudio/generated/rusefi_mre_f7.ini b/firmware/tunerstudio/generated/rusefi_mre_f7.ini index 3823196c9c..a9d228b1f9 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.mre_f7.667710833" + signature = "rusEFI 2020.07.27.mre_f7.1424059058" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.mre_f7.667710833" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.27.mre_f7.1424059058" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:55 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:18 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -672,7 +672,7 @@ page = 1 acSwitchAdc = bits, U08, 1469, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" vRefAdcChannel = bits, U08, 1470, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbNeutralPosition = scalar, U08, 1471, "%", 1, 0, 0, 100, 0 - idleMode = bits, U32, 1472, [0:0], "Automatic", "Manual" + idleMode = bits, U32, 1472, [0:0], "Closed Loop", "Open Loop" isInjectionEnabled = bits, U32, 1476, [0:0], "false", "true" isIgnitionEnabled = bits, U32, 1476, [1:1], "false", "true" isCylinderCleanupEnabled= bits, U32, 1476, [2:2], "false", "true" @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini index 1d3f5a0834..f6ff268df0 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.prometheus_405.2603514747" + signature = "rusEFI 2020.07.27.prometheus_405.3892536504" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.prometheus_405.2603514747" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.27.prometheus_405.3892536504" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:59 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:23 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -672,7 +672,7 @@ page = 1 acSwitchAdc = bits, U08, 1469, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" vRefAdcChannel = bits, U08, 1470, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbNeutralPosition = scalar, U08, 1471, "%", 1, 0, 0, 100, 0 - idleMode = bits, U32, 1472, [0:0], "Automatic", "Manual" + idleMode = bits, U32, 1472, [0:0], "Closed Loop", "Open Loop" isInjectionEnabled = bits, U32, 1476, [0:0], "false", "true" isIgnitionEnabled = bits, U32, 1476, [1:1], "false", "true" isCylinderCleanupEnabled= bits, U32, 1476, [2:2], "false", "true" @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini index 24ea251add..f973dd421c 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.prometheus_469.2603514747" + signature = "rusEFI 2020.07.27.prometheus_469.3892536504" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.prometheus_469.2603514747" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.27.prometheus_469.3892536504" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:58 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:22 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -672,7 +672,7 @@ page = 1 acSwitchAdc = bits, U08, 1469, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" vRefAdcChannel = bits, U08, 1470, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbNeutralPosition = scalar, U08, 1471, "%", 1, 0, 0, 100, 0 - idleMode = bits, U32, 1472, [0:0], "Automatic", "Manual" + idleMode = bits, U32, 1472, [0:0], "Closed Loop", "Open Loop" isInjectionEnabled = bits, U32, 1476, [0:0], "false", "true" isIgnitionEnabled = bits, U32, 1476, [1:1], "false", "true" isCylinderCleanupEnabled= bits, U32, 1476, [2:2], "false", "true" @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini index d663c65beb..83ac17b91a 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.proteus_f4.3819164208" + signature = "rusEFI 2020.07.27.proteus_f4.2425277939" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.proteus_f4.3819164208" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.27.proteus_f4.2425277939" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:09:02 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:26 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -672,7 +672,7 @@ page = 1 acSwitchAdc = bits, U08, 1469, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" vRefAdcChannel = bits, U08, 1470, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbNeutralPosition = scalar, U08, 1471, "%", 1, 0, 0, 100, 0 - idleMode = bits, U32, 1472, [0:0], "Automatic", "Manual" + idleMode = bits, U32, 1472, [0:0], "Closed Loop", "Open Loop" isInjectionEnabled = bits, U32, 1476, [0:0], "false", "true" isIgnitionEnabled = bits, U32, 1476, [1:1], "false", "true" isCylinderCleanupEnabled= bits, U32, 1476, [2:2], "false", "true" @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini index 4c7c4eea48..fd80feeb04 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.proteus_f7.3819164208" + signature = "rusEFI 2020.07.27.proteus_f7.2425277939" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.proteus_f7.3819164208" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.27.proteus_f7.2425277939" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:09:00 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:25 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -672,7 +672,7 @@ page = 1 acSwitchAdc = bits, U08, 1469, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" vRefAdcChannel = bits, U08, 1470, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbNeutralPosition = scalar, U08, 1471, "%", 1, 0, 0, 100, 0 - idleMode = bits, U32, 1472, [0:0], "Automatic", "Manual" + idleMode = bits, U32, 1472, [0:0], "Closed Loop", "Open Loop" isInjectionEnabled = bits, U32, 1476, [0:0], "false", "true" isIgnitionEnabled = bits, U32, 1476, [1:1], "false", "true" isCylinderCleanupEnabled= bits, U32, 1476, [2:2], "false", "true" @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" 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 84305b9f26..39128f8d75 100644 --- a/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java +++ b/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java @@ -1,6 +1,6 @@ package com.rusefi.config.generated; -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:16 UTC 2020 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -1057,7 +1057,7 @@ public class Fields { public static final int servoOutputPins8_offset = 3147; public static final int showHumanReadableWarning_offset = 976; public static final int showSdCardWarning_offset = 76; - public static final int SIGNATURE_HASH = 1848812543; + public static final int SIGNATURE_HASH = 488619068; public static final int silentTriggerError_offset = 1464; public static final int slowAdcAlpha_offset = 2088; public static final int sparkDwellRpmBins_offset = 332; @@ -1304,7 +1304,7 @@ public class Fields { public static final int TS_RESPONSE_COMMAND_OK = 7; public static final int TS_RESPONSE_OK = 0; public static final char TS_SET_LOGGER_SWITCH = 'l'; - public static final String TS_SIGNATURE = "rusEFI 2020.07.26.all.1848812543"; + public static final String TS_SIGNATURE = "rusEFI 2020.07.27.all.488619068"; public static final char TS_SINGLE_WRITE_COMMAND = 'W'; public static final int tunerStudioSerialSpeed_offset = 728; public static final int twoWireBatchIgnition_offset = 1476; @@ -1506,7 +1506,7 @@ public class Fields { public static final Field CYLINDERBORE = Field.create("CYLINDERBORE", 408, FieldType.FLOAT); public static final Field SENSORSNIFFERRPMTHRESHOLD = Field.create("SENSORSNIFFERRPMTHRESHOLD", 412, FieldType.INT); public static final Field RPMHARDLIMIT = Field.create("RPMHARDLIMIT", 416, FieldType.INT); - public static final String[] engine_load_mode_e = {"MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID"}; + public static final String[] engine_load_mode_e = {"MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID"}; public static final Field FUELALGORITHM = Field.create("FUELALGORITHM", 420, FieldType.INT, engine_load_mode_e); public static final Field CRANKINGINJECTIONMODE = Field.create("CRANKINGINJECTIONMODE", 424, FieldType.INT); public static final Field INJECTIONMODE = Field.create("INJECTIONMODE", 428, FieldType.INT); diff --git a/java_console/rusefi.xml b/java_console/rusefi.xml index 457521fdac..c3f5dd6c62 100644 --- a/java_console/rusefi.xml +++ b/java_console/rusefi.xml @@ -1,6 +1,6 @@ - +