Merge remote-tracking branch 'upstream/master' into mock-airmass

This commit is contained in:
Matthew Kennedy 2020-07-28 13:26:19 -07:00
commit 281c636bef
79 changed files with 395 additions and 17981 deletions

View File

@ -18,6 +18,7 @@ jobs:
# Board configurations
- build-target: frankenso_na6
folder: frankenso
ini-file: rusefi_frankenso_na6.ini
- build-target: kinetis
folder: kinetis
@ -28,7 +29,7 @@ jobs:
- build-target: mre_f4_hardware_QC_special_build
folder: microrusefi
ini-file: rusefi_microrusefi.ini
ini-file: rusefi_mre_f4.ini
- build-target: mre_f7
folder: microrusefi

View File

@ -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 Tue Jul 28 13:12:25 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 Tue Jul 28 13:12:25 UTC 2020

View File

@ -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.28
#define SIGNATURE_HASH 2529711359
#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.28.kin.2529711359"
#define TS_SINGLE_WRITE_COMMAND 'W'
#define tunerStudioSerialSpeed_offset 728
#define twoWireBatchIgnition_offset 1476

View File

@ -166,6 +166,14 @@ static void setupDefaultSensorInputs() {
// iat = "23 - AN temp 2"
engineConfiguration->iat.adcChannel = EFI_ADC_1;
engineConfiguration->iat.config.bias_resistor = 2700;
setCommonNTCSensor(&engineConfiguration->auxTempSensor1, 2700);
setCommonNTCSensor(&engineConfiguration->auxTempSensor2, 2700);
#if HW_CHECK_MODE
engineConfiguration->auxTempSensor1.adcChannel = EFI_ADC_2;
engineConfiguration->auxTempSensor2.adcChannel = EFI_ADC_3;
#endif // HW_CHECK_MODE
}
void setPinConfigurationOverrides(void) {

View File

@ -898,10 +898,12 @@ int tunerStudioHandleCrcCommand(ts_channel_s *tsChannel, char *data, int incomin
break;
#endif /* ENABLE_PERF_TRACE */
case TS_GET_CONFIG_ERROR: {
#if HW_CHECK_MODE
#define configError "FACTORY_MODE_PLEASE_CONTACT_SUPPORT"
#else
char * configError = getFirmwareError();
#if HW_CHECK_MODE
// analog input errors are returned as firmware error in QC mode
if (!hasFirmwareError()) {
strcpy(configError, "FACTORY_MODE_PLEASE_CONTACT_SUPPORT");
}
#endif // HW_CHECK_MODE
sr5SendResponse(tsChannel, TS_CRC, reinterpret_cast<const uint8_t*>(configError), strlen(configError));
break;

View File

@ -323,7 +323,7 @@ static void showFuelInfo2(float rpm, float engineLoad) {
#if EFI_ENGINE_CONTROL
static void showFuelInfo(void) {
showFuelInfo2((float) GET_RPM(), getEngineLoadT(PASS_ENGINE_PARAMETER_SIGNATURE));
showFuelInfo2((float) GET_RPM(), getFuelingLoad(PASS_ENGINE_PARAMETER_SIGNATURE));
}
#endif

View File

@ -315,7 +315,7 @@ void TpsAccelEnrichment::onEngineCycleTps(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
}
void LoadAccelEnrichment::onEngineCycle(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
onNewValue(getEngineLoadT(PASS_ENGINE_PARAMETER_SIGNATURE) PASS_ENGINE_PARAMETER_SUFFIX);
onNewValue(getFuelingLoad(PASS_ENGINE_PARAMETER_SIGNATURE) PASS_ENGINE_PARAMETER_SUFFIX);
}
AccelEnrichment::AccelEnrichment() {

View File

@ -130,6 +130,14 @@ static void cylinderCleanupControl(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
#endif
}
#if HW_CHECK_MODE
static void assertCloseTo(const char * msg, float actual, float expected) {
if (actual < 0.9 * expected || actual > 1.1 * expected) {
firmwareError(OBD_PCM_Processor_Fault, "%s analog input validation failed %f vs %f", msg, actual, expected);
}
}
#endif // HW_CHECK_MODE
void Engine::periodicSlowCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
ScopePerf perf(PE::EnginePeriodicSlowCallback);
@ -163,7 +171,14 @@ void Engine::periodicSlowCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
}
#endif
slowCallBackWasInvoked = TRUE;
slowCallBackWasInvoked = true;
#if HW_CHECK_MODE
assertCloseTo("clt", Sensor::get(SensorType::Clt).Value, 49.3);
assertCloseTo("iat", Sensor::get(SensorType::Iat).Value, 73.2);
assertCloseTo("aut1", Sensor::get(SensorType::AuxTemp1).Value, 13.8);
assertCloseTo("aut2", Sensor::get(SensorType::AuxTemp2).Value, 6.2);
#endif // HW_CHECK_MODE
}

View File

@ -123,7 +123,7 @@ static void handleGetDataRequest(const CANRxFrame& rx) {
obdSendValue(1, pid, 2, (2<<8)|(0)); // 2 = "Closed loop, using oxygen sensor feedback to determine fuel mix"
break;
case PID_ENGINE_LOAD:
obdSendValue(1, pid, 1, getEngineLoadT(PASS_ENGINE_PARAMETER_SIGNATURE) * 2.55f);
obdSendValue(1, pid, 1, getFuelingLoad(PASS_ENGINE_PARAMETER_SIGNATURE) * 2.55f);
break;
case PID_COOLANT_TEMP:
obdSendValue(1, pid, 1, Sensor::get(SensorType::Clt).value_or(0) + 40.0f);

View File

@ -1,2 +1,2 @@
#pragma once
#define VCS_DATE 20200727
#define VCS_DATE 20200728

View File

@ -324,6 +324,8 @@ static void printAnalogInfo(void) {
printAnalogChannelInfo("pPS", engineConfiguration->throttlePedalPositionAdcChannel);
printAnalogChannelInfo("CLT", engineConfiguration->clt.adcChannel);
printAnalogChannelInfo("IAT", engineConfiguration->iat.adcChannel);
printAnalogChannelInfo("AuxT1", engineConfiguration->auxTempSensor1.adcChannel);
printAnalogChannelInfo("AuxT2", engineConfiguration->auxTempSensor2.adcChannel);
printAnalogChannelInfo("MAF", engineConfiguration->mafAdcChannel);
for (int i = 0; i < FSIO_ANALOG_INPUT_COUNT ; i++) {
adc_channel_e ch = engineConfiguration->fsioAdc[i];

View File

@ -528,7 +528,7 @@ void updatePrimeInjectionPulseState(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
static void showMainInfo(Engine *engine) {
#if EFI_PROD_CODE
int rpm = GET_RPM();
float el = getEngineLoadT(PASS_ENGINE_PARAMETER_SIGNATURE);
float el = getFuelingLoad(PASS_ENGINE_PARAMETER_SIGNATURE);
scheduleMsg(logger, "rpm %d engine_load %.2f", rpm, el);
scheduleMsg(logger, "fuel %.2fms timing %.2f", getInjectionDuration(rpm PASS_ENGINE_PARAMETER_SUFFIX), engine->engineState.timingAdvance);
#endif /* EFI_PROD_CODE */

View File

@ -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 Tue Jul 28 13:12:08 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 Tue Jul 28 13:12:08 UTC 2020

View File

@ -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 Tue Jul 28 13:12:08 UTC 2020
// by class com.rusefi.output.FileFsioSettingsConsumer
FSIO_SETTING_FANONTEMPERATURE = 1000,

View File

@ -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 Tue Jul 28 13:12:08 UTC 2020
// by class com.rusefi.output.FileFsioSettingsConsumer
case FSIO_SETTING_FANONTEMPERATURE:

View File

@ -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 Tue Jul 28 13:12:08 UTC 2020
// by class com.rusefi.output.FileFsioSettingsConsumer
static LENameOrdinalPair lefanOnTemperature(FSIO_SETTING_FANONTEMPERATURE, "cfg_fanOnTemperature");

View File

@ -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 Tue Jul 28 13:12:08 UTC 2020
// by class com.rusefi.output.FileFsioSettingsConsumer
case FSIO_SETTING_FANONTEMPERATURE:

View File

@ -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.28
#define SIGNATURE_HASH 1542883429
#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.28.all.1542883429"
#define TS_SINGLE_WRITE_COMMAND 'W'
#define tunerStudioSerialSpeed_offset 728
#define twoWireBatchIgnition_offset 1476

View File

@ -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.28
#define SIGNATURE_HASH 1542883429
#define TS_SIGNATURE "rusEFI 2020.07.28.all.1542883429"

View File

@ -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.28
#define SIGNATURE_HASH 2238833798
#define TS_SIGNATURE "rusEFI 2020.07.28.frankenso_na6.2238833798"

View File

@ -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.28
#define SIGNATURE_HASH 2529711359
#define TS_SIGNATURE "rusEFI 2020.07.28.kin.2529711359"

View File

@ -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.28
#define SIGNATURE_HASH 302538475
#define TS_SIGNATURE "rusEFI 2020.07.28.mre_f4.302538475"

View File

@ -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.28
#define SIGNATURE_HASH 302538475
#define TS_SIGNATURE "rusEFI 2020.07.28.mre_f7.302538475"

View File

@ -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.28
#define SIGNATURE_HASH 2934591713
#define TS_SIGNATURE "rusEFI 2020.07.28.prometheus_405.2934591713"

View File

@ -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.28
#define SIGNATURE_HASH 2934591713
#define TS_SIGNATURE "rusEFI 2020.07.28.prometheus_469.2934591713"

View File

@ -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.28
#define SIGNATURE_HASH 3597138346
#define TS_SIGNATURE "rusEFI 2020.07.28.proteus_f4.3597138346"

View File

@ -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.28
#define SIGNATURE_HASH 3597138346
#define TS_SIGNATURE "rusEFI 2020.07.28.proteus_f7.3597138346"

View File

@ -84,7 +84,7 @@ float fuelClosedLoopCorrection(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
return 1.0f;
}
size_t binIdx = computeStftBin(GET_RPM(), getEngineLoadT(PASS_ENGINE_PARAMETER_SIGNATURE), CONFIG(stft));
size_t binIdx = computeStftBin(GET_RPM(), getFuelingLoad(PASS_ENGINE_PARAMETER_SIGNATURE), CONFIG(stft));
#if EFI_TUNER_STUDIO
if (engineConfiguration->debugMode == DBG_FUEL_PID_CORRECTION) {

View File

@ -18,6 +18,9 @@
! rename the bit or substitute unused integer with any new fields of the same size
! invoke gen_config.bat to apply the tools which would generate .h and .ini files
!
! Q: Which files to include into Pull Requests?
! A: Please only include source files (.txt and .input) into a PR, we have amazing GitHub Actions which would do the rest really
! really nicely!
!
! each field is declared as
! type name;comment
@ -432,7 +435,7 @@ ThermistorConf iat;
float knockBandCustom;+We calculate knock band based of cylinderBore\n Use this to override - kHz knock band override;"kHz", 1, 0.0, 0.0, 10.0, 2
float[DWELL_CURVE_SIZE] sparkDwellRpmBins;On single-coil or wasted spark setups you have to lower dwell at high RPM;"RPM", 1, 0.0, 0.0, 18000, 2
float[DWELL_CURVE_SIZE] sparkDwellRpmBins;On Single Coil or Wasted Spark setups you have to lower dwell at high RPM;"RPM", 1, 0.0, 0.0, 18000, 2
float[DWELL_CURVE_SIZE] sparkDwellValues;;"ms", 1, 0.0, 0.0, 30.0, 2
struct_no_prefix specs_s
@ -457,7 +460,7 @@ int sensorSnifferRpmThreshold;+Disable sensor sniffer above this rpm;"RPM",
int rpmHardLimit;set rpm_hard_limit X;"rpm", 1, 0, 0, 20000.0, 2
#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"
custom engine_load_mode_e 4 bits, U32, @OFFSET@, [0:2], @@engine_load_mode_e_enum@@
@ -470,8 +473,8 @@ injection_mode_e injectionMode;+This is where the fuel injection type is defined
angle_t 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?;"deg", 1, 0.0, -720, 720, 2
angle_t 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; "deg", 1, 0.0, -360, 360, 2
custom ignition_mode_e 4 bits, U32, @OFFSET@, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors"
ignition_mode_e 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
custom ignition_mode_e 4 bits, U32, @OFFSET@, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors"
ignition_mode_e 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
angle_t ignitionOffset;+this value could be used to offset the whole ignition timing table by a constant;"RPM", 1, 0, 0, 3000.0, 0
@ -950,7 +953,7 @@ custom idle_mode_e 4 bits, U32, @OFFSET@, [0:0], "Automatic", "Manual"
bit isManualSpinningMode;Usually if we have no trigger events that means engine is stopped\nUnless we are troubleshooting and spinning the engine by hand - this case a longer\ndelay is needed
bit twoWireBatchInjection;+This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection
bit useOnlyRisingEdgeForTrigger;+VR sensors are only precise on rising front\nenable trigger_only_front
bit twoWireBatchIgnition;+This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark).
bit twoWireBatchIgnition;+This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark).
bit useFixedBaroCorrFromMap
bit useSeparateAdvanceForCranking;+This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant.
bit useAdvanceCorrectionsForCranking;+This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle).
@ -1673,4 +1676,4 @@ end_struct
#define show_test_presets true
#define show_Frankenso_presets true
#define show_microRusEFI_presets true
#define show_Proteus_presets true
#define show_Proteus_presets true

View File

@ -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.28.all.1542883429"
[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.28.all.1542883429" ; 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 Tue Jul 28 13:12:08 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
@ -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"
@ -1491,8 +1491,8 @@ page = 1
internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0
coolant = scalar, S16, 12, "deg C",{1/100}, 0.0
intake = scalar, S16, 14, "deg C",{1/100}, 0.0
; todo: aux1
; todo: aux2
auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0
auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0
; throttle, pedal
@ -2227,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1
internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0
OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0
idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1
AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1
AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1
gaugeCategory = Ignition
ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1

File diff suppressed because it is too large Load Diff

View File

@ -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.28.frankenso_na6.2238833798"
[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.28.frankenso_na6.2238833798" ; 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 Tue Jul 28 13:12: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
@ -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"
@ -1491,8 +1491,8 @@ page = 1
internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0
coolant = scalar, S16, 12, "deg C",{1/100}, 0.0
intake = scalar, S16, 14, "deg C",{1/100}, 0.0
; todo: aux1
; todo: aux2
auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0
auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0
; throttle, pedal
@ -2227,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1
internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0
OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0
idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1
AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1
AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1
gaugeCategory = Ignition
ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1

View File

@ -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.28.kin.2529711359"
[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.28.kin.2529711359" ; 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 Tue Jul 28 13:12: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
@ -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"
@ -1491,8 +1491,8 @@ page = 1
internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0
coolant = scalar, S16, 12, "deg C",{1/100}, 0.0
intake = scalar, S16, 14, "deg C",{1/100}, 0.0
; todo: aux1
; todo: aux2
auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0
auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0
; throttle, pedal
@ -2227,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1
internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0
OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0
idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1
AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1
AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1
gaugeCategory = Ignition
ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1

File diff suppressed because it is too large Load Diff

View File

@ -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.28.mre_f4.302538475"
[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.28.mre_f4.302538475" ; 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 Tue Jul 28 13:12:17 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
@ -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"
@ -1491,8 +1491,8 @@ page = 1
internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0
coolant = scalar, S16, 12, "deg C",{1/100}, 0.0
intake = scalar, S16, 14, "deg C",{1/100}, 0.0
; todo: aux1
; todo: aux2
auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0
auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0
; throttle, pedal
@ -2227,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1
internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0
OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0
idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1
AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1
AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1
gaugeCategory = Ignition
ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1

View File

@ -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.28.mre_f7.302538475"
[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.28.mre_f7.302538475" ; 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 Tue Jul 28 13:12: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
@ -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"
@ -1491,8 +1491,8 @@ page = 1
internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0
coolant = scalar, S16, 12, "deg C",{1/100}, 0.0
intake = scalar, S16, 14, "deg C",{1/100}, 0.0
; todo: aux1
; todo: aux2
auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0
auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0
; throttle, pedal
@ -2227,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1
internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0
OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0
idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1
AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1
AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1
gaugeCategory = Ignition
ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1

File diff suppressed because it is too large Load Diff

View File

@ -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.28.prometheus_405.2934591713"
[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.28.prometheus_405.2934591713" ; 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 Tue Jul 28 13:12: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
@ -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"
@ -1491,8 +1491,8 @@ page = 1
internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0
coolant = scalar, S16, 12, "deg C",{1/100}, 0.0
intake = scalar, S16, 14, "deg C",{1/100}, 0.0
; todo: aux1
; todo: aux2
auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0
auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0
; throttle, pedal
@ -2227,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1
internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0
OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0
idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1
AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1
AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1
gaugeCategory = Ignition
ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1

View File

@ -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.28.prometheus_469.2934591713"
[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.28.prometheus_469.2934591713" ; 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 Tue Jul 28 13:12: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
@ -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"
@ -1491,8 +1491,8 @@ page = 1
internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0
coolant = scalar, S16, 12, "deg C",{1/100}, 0.0
intake = scalar, S16, 14, "deg C",{1/100}, 0.0
; todo: aux1
; todo: aux2
auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0
auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0
; throttle, pedal
@ -2227,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1
internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0
OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0
idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1
AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1
AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1
gaugeCategory = Ignition
ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1

File diff suppressed because it is too large Load Diff

View File

@ -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.28.proteus_f4.3597138346"
[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.28.proteus_f4.3597138346" ; 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 Tue Jul 28 13:12: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
@ -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"
@ -1491,8 +1491,8 @@ page = 1
internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0
coolant = scalar, S16, 12, "deg C",{1/100}, 0.0
intake = scalar, S16, 14, "deg C",{1/100}, 0.0
; todo: aux1
; todo: aux2
auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0
auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0
; throttle, pedal
@ -2227,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1
internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0
OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0
idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1
AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1
AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1
gaugeCategory = Ignition
ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1

View File

@ -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.28.proteus_f7.3597138346"
[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.28.proteus_f7.3597138346" ; 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 Tue Jul 28 13:12: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
@ -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"
@ -1491,8 +1491,8 @@ page = 1
internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0
coolant = scalar, S16, 12, "deg C",{1/100}, 0.0
intake = scalar, S16, 14, "deg C",{1/100}, 0.0
; todo: aux1
; todo: aux2
auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0
auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0
; throttle, pedal
@ -2227,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1
internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0
OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0
idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1
AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1
AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1
gaugeCategory = Ignition
ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1

View File

@ -206,8 +206,8 @@ enable2ndByteCanID = false
internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0
coolant = scalar, S16, 12, "deg C",{1/@@PACK_MULT_TEMPERATURE@@}, 0.0
intake = scalar, S16, 14, "deg C",{1/@@PACK_MULT_TEMPERATURE@@}, 0.0
; todo: aux1
; todo: aux2
auxt1 = scalar, S16, 16, "deg C",{1/@@PACK_MULT_TEMPERATURE@@}, 0.0
auxt2 = scalar, S16, 18, "deg C",{1/@@PACK_MULT_TEMPERATURE@@}, 0.0
; throttle, pedal
@ -942,6 +942,8 @@ gaugeCategory = Sensors - Extra 1
internalMcuTemperatureGauge = internalMcuTemperature, @@GAUGE_NAME_ECU_TEMPERATURE@@, "C", 0, 100, 0, 0, 75, 100, 0, 0
OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0
idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1
AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1
AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1
gaugeCategory = Ignition
ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1

View File

@ -1,6 +1,6 @@
package com.rusefi.autodetect;
import com.rusefi.FileLog;
import com.devexperts.logging.Logging;
import com.rusefi.NamedThreadFactory;
import com.rusefi.io.IoStream;
import com.rusefi.io.LinkManager;
@ -19,19 +19,23 @@ import java.util.function.Function;
* Andrey Belomutskiy, (c) 2013-2020
*/
public class PortDetector {
private final static Logging log = Logging.getLogging(PortDetector.class);
private static final NamedThreadFactory AUTO_DETECT_PORT = new NamedThreadFactory("AutoDetectPort");
/**
* Connect to all serial ports and find out which one respond first
* @param callback
* @return port name on which rusEFI was detected or null if none
*/
@Nullable
public static String autoDetectSerial(Function<IoStream, Void> callback) {
String[] serialPorts = getPortNames();
if (serialPorts.length == 0) {
System.err.println("No serial ports detected");
log.error("No serial ports detected");
return null;
}
FileLog.MAIN.logLine("Trying " + Arrays.toString(serialPorts));
log.info("Trying " + Arrays.toString(serialPorts));
List<Thread> serialFinder = new ArrayList<>();
CountDownLatch portFound = new CountDownLatch(1);
AtomicReference<String> result = new AtomicReference<>();

View File

@ -0,0 +1,5 @@
package com.rusefi.io;
public interface ConnectionFailedListener {
void onConnectionFailed();
}

View File

@ -4,13 +4,11 @@ package com.rusefi.io;
* @author Andrey Belomutskiy
* 3/1/2017
*/
public interface ConnectionStateListener {
public interface ConnectionStateListener extends ConnectionFailedListener {
ConnectionStateListener VOID = new AbstractConnectionStateListener();
/**
* This method is invoked once we have connection & configuration from controller
*/
void onConnectionEstablished();
void onConnectionFailed();
}

View File

@ -196,7 +196,7 @@ public class LinkManager implements Closeable {
return connector;
}
public void start(String port, ConnectionStateListener stateListener) {
public void start(String port, ConnectionFailedListener stateListener) {
Objects.requireNonNull(port, "port");
log.info("LinkManager: Starting " + port);
if (isLogViewerMode(port)) {

View File

@ -29,7 +29,7 @@ public class BinaryProtocolProxy {
*/
public static final int USER_IO_TIMEOUT = 10 * Timeouts.MINUTE;
public static ServerSocketReference createProxy(IoStream targetEcuSocket, int serverProxyPort, AtomicInteger relayCommandCounter) {
public static ServerSocketReference createProxy(IoStream targetEcuSocket, int serverProxyPort, AtomicInteger relayCommandCounter) throws IOException {
Function<Socket, Runnable> clientSocketRunnableFactory = clientSocket -> () -> {
TcpIoStream clientStream = null;
try {

View File

@ -43,25 +43,25 @@ public class BinaryProtocolServer implements BinaryProtocolCommands {
public AtomicInteger unknownCommands = new AtomicInteger();
public static final Function<Integer, ServerSocket> SECURE_SOCKET_FACTORY = rusEFISSLContext::getSSLServerSocket;
public static final ServerSocketFunction SECURE_SOCKET_FACTORY = rusEFISSLContext::getSSLServerSocket;
public static final Function<Integer, ServerSocket> PLAIN_SOCKET_FACTORY = port -> {
try {
ServerSocket serverSocket = new ServerSocket(port);
log.info("ServerSocket " + port + " created");
return serverSocket;
} catch (IOException e) {
throw new IllegalStateException("Error binding server socket " + port, e);
}
public static final ServerSocketFunction PLAIN_SOCKET_FACTORY = port -> {
ServerSocket serverSocket = new ServerSocket(port);
log.info("ServerSocket " + port + " created");
return serverSocket;
};
private static ConcurrentHashMap<String, ThreadFactory> THREAD_FACTORIES_BY_NAME = new ConcurrentHashMap<>();
public void start(LinkManager linkManager) {
try {
start(linkManager, DEFAULT_PROXY_PORT, Listener.empty(), new Context());
} catch (IOException e) {
log.error("Error starting local proxy", e);
}
}
public void start(LinkManager linkManager, int port, Listener serverSocketCreationCallback, Context context) {
public void start(LinkManager linkManager, int port, Listener serverSocketCreationCallback, Context context) throws IOException {
log.info("BinaryProtocolServer on " + port);
Function<Socket, Runnable> clientSocketRunnableFactory = clientSocket -> () -> {
@ -84,11 +84,11 @@ public class BinaryProtocolServer implements BinaryProtocolCommands {
* @param serverSocketCreationCallback this callback is invoked once we open the server socket
* @return
*/
public static ServerSocketReference tcpServerSocket(int port, String threadName, Function<Socket, Runnable> socketRunnableFactory, Listener serverSocketCreationCallback) {
public static ServerSocketReference tcpServerSocket(int port, String threadName, Function<Socket, Runnable> socketRunnableFactory, Listener serverSocketCreationCallback) throws IOException {
return tcpServerSocket(socketRunnableFactory, port, threadName, serverSocketCreationCallback, PLAIN_SOCKET_FACTORY);
}
public static ServerSocketReference tcpServerSocket(Function<Socket, Runnable> clientSocketRunnableFactory, int port, String threadName, Listener serverSocketCreationCallback, Function<Integer, ServerSocket> nonSecureSocketFunction) {
public static ServerSocketReference tcpServerSocket(Function<Socket, Runnable> clientSocketRunnableFactory, int port, String threadName, Listener serverSocketCreationCallback, ServerSocketFunction nonSecureSocketFunction) throws IOException {
ThreadFactory threadFactory = getThreadFactory(threadName);
Objects.requireNonNull(serverSocketCreationCallback, "serverSocketCreationCallback");
@ -232,7 +232,7 @@ public class BinaryProtocolServer implements BinaryProtocolCommands {
int fromPacket = IoHelper.getCrc32(packet);
if (crc != fromPacket)
throw new IllegalStateException("CRC mismatch crc=" + Integer.toString(crc, 16) + " vs packet=" + Integer.toString(fromPacket, 16) + " len=" + packet.length + " data: " + IoStream.printHexBinary(packet));
// todo?! in.onPacketArrived();
in.onPacketArrived();
return new Packet(packet, crc);
}

View File

@ -0,0 +1,8 @@
package com.rusefi.io.tcp;
import java.io.IOException;
import java.net.ServerSocket;
public interface ServerSocketFunction {
ServerSocket apply(int port) throws IOException;
}

View File

@ -7,10 +7,7 @@ import com.rusefi.io.serial.AbstractIoStream;
import com.rusefi.shared.FileUtil;
import org.jetbrains.annotations.NotNull;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.*;
import java.net.Socket;
/**
@ -37,10 +34,7 @@ public class TcpIoStream extends AbstractIoStream {
throw new NullPointerException("socket");
this.socket = socket;
InputStream input = new BufferedInputStream(socket.getInputStream());
OutputStream output = socket.getOutputStream();
if (output == null)
throw new NullPointerException("output");
this.output = output;
this.output = new BufferedOutputStream(socket.getOutputStream());
this.input = input;
this.dataBuffer = IncomingDataBuffer.createDataBuffer(loggingPrefix, this);
}

View File

@ -34,7 +34,11 @@ public class NetworkConnector implements Closeable {
private final static Logging log = Logging.getLogging(NetworkConnector.class);
private boolean isClosed;
public NetworkConnectorResult runNetworkConnector(String authToken, String controllerPort, NetworkConnectorContext context, ReconnectListener reconnectListener) {
public NetworkConnectorResult start(String authToken, String controllerPort, NetworkConnectorContext context) {
return start(authToken, controllerPort, context, ReconnectListener.VOID);
}
public NetworkConnectorResult start(String authToken, String controllerPort, NetworkConnectorContext context, ReconnectListener reconnectListener) {
LinkManager controllerConnector = new LinkManager()
.setCompositeLogicEnabled(false)
.setNeedPullData(false);
@ -74,7 +78,7 @@ public class NetworkConnector implements Closeable {
proxyReconnectSemaphore.acquire();
try {
runNetworkConnector(context.serverPortForControllers(), controllerConnector, authToken, (String message) -> {
start(context.serverPortForControllers(), controllerConnector, authToken, (String message) -> {
log.error(message + " Disconnect from proxy server detected, now sleeping " + context.reconnectDelay() + " seconds");
sleep(context.reconnectDelay() * Timeouts.SECOND);
log.debug("Releasing semaphore");
@ -94,7 +98,7 @@ public class NetworkConnector implements Closeable {
}
@NotNull
private static SessionDetails runNetworkConnector(int serverPortForControllers, LinkManager linkManager, String authToken, final TcpIoStream.DisconnectListener disconnectListener, int oneTimeToken, ControllerInfo controllerInfo, final NetworkConnectorContext context) throws IOException {
private static SessionDetails start(int serverPortForControllers, LinkManager linkManager, String authToken, final TcpIoStream.DisconnectListener disconnectListener, int oneTimeToken, ControllerInfo controllerInfo, final NetworkConnectorContext context) throws IOException {
IoStream targetEcuSocket = linkManager.getConnector().getBinaryProtocol().getStream();
SessionDetails deviceSessionDetails = new SessionDetails(controllerInfo, authToken, oneTimeToken);

View File

@ -47,7 +47,7 @@ public class TestHelper {
}
@NotNull
public static BinaryProtocolServer createVirtualController(ConfigurationImage ci, int port, Listener serverSocketCreationCallback, BinaryProtocolServer.Context context) {
public static BinaryProtocolServer createVirtualController(ConfigurationImage ci, int port, Listener serverSocketCreationCallback, BinaryProtocolServer.Context context) throws IOException {
BinaryProtocolState state = new BinaryProtocolState();
state.setController(ci);
state.setCurrentOutputs(new byte[1 + Fields.TS_OUTPUT_SIZE]);
@ -83,9 +83,13 @@ public class TestHelper {
public static BinaryProtocolServer createVirtualController(int controllerPort, ConfigurationImage controllerImage, BinaryProtocolServer.Context context) throws InterruptedException {
CountDownLatch controllerCreated = new CountDownLatch(1);
BinaryProtocolServer server = createVirtualController(controllerImage, controllerPort, parameter -> controllerCreated.countDown(), context);
assertLatch(controllerCreated);
return server;
try {
BinaryProtocolServer server = createVirtualController(controllerImage, controllerPort, parameter -> controllerCreated.countDown(), context);
assertLatch(controllerCreated);
return server;
} catch (IOException e) {
throw new IllegalStateException(e);
}
}
public static SessionDetails createTestSession(String authToken, String signature) {

View File

@ -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 Tue Jul 28 13:12:08 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 = 1542883429;
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.28.all.1542883429";
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);

View File

@ -32,6 +32,8 @@ public enum Sensor {
INT_TEMP(GAUGE_NAME_CPU_TEMP, SensorCategory.OPERATIONS, FieldType.INT8, 10, 1, 0, 5, "C"),
CLT(GAUGE_NAME_CLT, SensorCategory.SENSOR_INPUTS, FieldType.INT16, 12, 1.0 / PACK_MULT_TEMPERATURE, -40, 150, "deg C"),
IAT(GAUGE_NAME_IAT, SensorCategory.SENSOR_INPUTS, FieldType.INT16, 14, 1.0 / PACK_MULT_TEMPERATURE, -40, 150, "deg C"),
AuxT1("AuxT1", SensorCategory.SENSOR_INPUTS, FieldType.INT16, 16, 1.0 / PACK_MULT_TEMPERATURE, -40, 150, "deg C"),
AuxT2("AuxT2", SensorCategory.SENSOR_INPUTS, FieldType.INT16, 18, 1.0 / PACK_MULT_TEMPERATURE, -40, 150, "deg C"),
// throttle, pedal
TPS(GAUGE_NAME_TPS, SensorCategory.SENSOR_INPUTS, FieldType.INT16, 20, 1.0 / PACK_MULT_PERCENT, 0, 100, "%"), // throttle position sensor

View File

@ -11,9 +11,9 @@ import java.util.concurrent.CopyOnWriteArrayList;
* <p/>
* Date: 1/6/13
* Andrey Belomutskiy, (c) 2013-2020
* @see SensorLog
*/
public class SensorCentral implements ISensorCentral {
public static final String RPM_KEY = "rpm";
private static final SensorCentral INSTANCE = new SensorCentral();
private final SensorsHolder sensorsHolder = new SensorsHolder();

View File

@ -1,6 +1,6 @@
<roms>
<!-- was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh Sun Jul 26 19:08:54 UTC 2020 -->
<!-- was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh Tue Jul 28 13:12:13 UTC 2020 -->
<rom>
<romid>

View File

@ -82,14 +82,12 @@ public class SensorLogger {
Sensor.engineMakeCodeNameCrc16,
Sensor.tuneCrc16,
};
private final UIContext uiContext;
private List<SensorLog> sensorLogs;
private final List<SensorLog> sensorLogs;
private boolean isInitialized;
public SensorLogger(UIContext uiContext) {
this.uiContext = uiContext;
sensorLogs = Arrays.asList(new PlainTextSensorLog(uiContext), new BinarySensorLogRestarter());
}

View File

@ -5,7 +5,6 @@ import com.rusefi.auth.AutoTokenUtil;
import com.rusefi.autodetect.PortDetector;
import com.rusefi.proxy.NetworkConnector;
import com.rusefi.proxy.NetworkConnectorContext;
import com.rusefi.tools.online.ProxyClient;
import com.rusefi.ui.AuthTokenPanel;
public class NetworkConnectorStartup {
@ -25,7 +24,7 @@ public class NetworkConnectorStartup {
NetworkConnectorContext connectorContext = new NetworkConnectorContext();
NetworkConnector.NetworkConnectorResult networkConnectorResult = new NetworkConnector().runNetworkConnector(authToken, autoDetectedPort, connectorContext, NetworkConnector.ReconnectListener.VOID);
NetworkConnector.NetworkConnectorResult networkConnectorResult = new NetworkConnector().start(authToken, autoDetectedPort, connectorContext);
log.info("Running with oneTimeToken=" + networkConnectorResult.getOneTimeToken());
}
}

View File

@ -13,6 +13,7 @@ import com.rusefi.ui.util.UiUtils;
import java.util.TimeZone;
import static com.devexperts.logging.Logging.getLogging;
import static com.rusefi.ui.storage.PersistentConfiguration.getConfig;
public class MainFrame {
@ -21,7 +22,7 @@ public class MainFrame {
/**
* @see StartupFrame
*/
private FrameHelper frame = new FrameHelper() {
private final FrameHelper frame = new FrameHelper() {
@Override
protected void onWindowOpened() {
FileLog.MAIN.logLine("onWindowOpened");
@ -42,22 +43,13 @@ public class MainFrame {
}
};
public ConnectionStateListener listener;
public ConnectionFailedListener listener;
public MainFrame(ConsoleUI consoleUI, TabbedPanel tabbedPane) {
this.consoleUI = consoleUI;
this.tabbedPane = tabbedPane;
listener = new AbstractConnectionStateListener() {
@Override
public void onConnectionEstablished() {
FileLog.MAIN.logLine("onConnectionEstablished");
// tabbedPane.romEditorPane.showContent();
tabbedPane.settingsTab.showContent();
tabbedPane.logsManager.showContent();
tabbedPane.fuelTunePane.showContent();
new BinaryProtocolServer().start(consoleUI.uiContext.getLinkManager());
}
listener = () -> {
};
}
@ -87,8 +79,6 @@ public class MainFrame {
@Override
public void onConnectionEstablished() {
FileLog.MAIN.logLine("onConnectionEstablished");
// tabbedPane.romEditorPane.showContent();
tabbedPane.settingsTab.showContent();
tabbedPane.logsManager.showContent();
tabbedPane.fuelTunePane.showContent();

View File

@ -8,6 +8,7 @@ import com.rusefi.server.rusEFISSLContext;
import com.rusefi.tools.online.HttpUtil;
import org.jetbrains.annotations.NotNull;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.concurrent.CountDownLatch;
@ -16,13 +17,21 @@ import static com.rusefi.TestHelper.assertLatch;
public class BackendTestHelper {
public static void runApplicationConnectorBlocking(Backend backend, int serverPortForRemoteUsers) throws InterruptedException {
CountDownLatch applicationServerCreated = new CountDownLatch(1);
backend.runApplicationConnector(serverPortForRemoteUsers, parameter -> applicationServerCreated.countDown());
try {
backend.runApplicationConnector(serverPortForRemoteUsers, parameter -> applicationServerCreated.countDown());
} catch (IOException e) {
throw new IllegalStateException(e);
}
assertLatch(applicationServerCreated);
}
public static void runControllerConnectorBlocking(Backend backend, int serverPortForControllers) throws InterruptedException {
CountDownLatch controllerServerCreated = new CountDownLatch(1);
backend.runControllerConnector(serverPortForControllers, parameter -> controllerServerCreated.countDown());
try {
backend.runControllerConnector(serverPortForControllers, parameter -> controllerServerCreated.countDown());
} catch (IOException e) {
throw new IllegalStateException(e);
}
assertLatch(controllerServerCreated);
}

View File

@ -101,7 +101,7 @@ public class FullServerTest {
};
// start "rusEFI network connector" to connect controller with backend since in real life controller has only local serial port it does not have network
NetworkConnector.NetworkConnectorResult networkConnectorResult = new NetworkConnector().runNetworkConnector(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, networkConnectorContext, NetworkConnector.ReconnectListener.VOID);
NetworkConnector.NetworkConnectorResult networkConnectorResult = new NetworkConnector().start(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, networkConnectorContext, NetworkConnector.ReconnectListener.VOID);
ControllerInfo controllerInfo = networkConnectorResult.getControllerInfo();
TestHelper.assertLatch("controllerRegistered", controllerRegistered);

View File

@ -1,6 +1,5 @@
package com.rusefi;
import com.opensr5.Logger;
import com.rusefi.config.generated.Fields;
import com.rusefi.io.IoStream;
import com.rusefi.io.commands.GetOutputsCommand;
@ -34,8 +33,6 @@ import static org.junit.Assert.assertEquals;
* https://github.com/rusefi/web_backend/blob/master/documentation/rusEFI%20remote.png
*/
public class ServerTest {
private final static Logger logger = Logger.CONSOLE;
@Before
public void setup() throws MalformedURLException {
BackendTestHelper.commonServerTest();
@ -126,7 +123,7 @@ covered by FullServerTest
TestHelper.createVirtualController(controllerPort, new ConfigurationImage(Fields.TOTAL_CONFIG_SIZE), logger);
// start "rusEFI network connector" to connect controller with backend since in real life controller has only local serial port it does not have network
SessionDetails deviceSessionDetails = NetworkConnector.runNetworkConnector(MockRusEfiDevice.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, serverPortForControllers);
SessionDetails deviceSessionDetails = NetworkConnector.start(MockRusEfiDevice.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, serverPortForControllers);
assertTrue(controllerRegistered.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS));

View File

@ -10,6 +10,7 @@ import com.rusefi.io.tcp.BinaryProtocolProxy;
import com.rusefi.io.tcp.BinaryProtocolServer;
import org.junit.Test;
import java.io.IOException;
import java.util.Objects;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicInteger;
@ -83,7 +84,7 @@ public class TcpCommunicationIntegrationTest {
}
@Test
public void testProxy() throws InterruptedException {
public void testProxy() throws InterruptedException, IOException {
ConfigurationImage serverImage = TestHelper.prepareImage(239, TestHelper.createIniField(Fields.CYLINDERSCOUNT));
int controllerPort = 6102;

View File

@ -75,7 +75,7 @@ public class NetworkConnectorTest {
reconnectCounter.countDown();
}
};
new NetworkConnector().runNetworkConnector(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, connectorContext, reconnectListener);
new NetworkConnector().start(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, connectorContext, reconnectListener);
assertLatch(reconnectCounter);

View File

@ -161,7 +161,7 @@ public class Backend implements Closeable {
}
}
public void runApplicationConnector(int serverPortForApplications, Listener<?> serverSocketCreationCallback) {
public void runApplicationConnector(int serverPortForApplications, Listener<?> serverSocketCreationCallback) throws IOException {
this.serverPortForApplications = serverPortForApplications;
// connection from authenticator app which proxies for Tuner Studio
// authenticator pushed hello packet on connect
@ -246,7 +246,7 @@ public class Backend implements Closeable {
log.info("Disconnecting application " + applicationConnectionState);
}
public void runControllerConnector(int serverPortForControllers, Listener<?> serverSocketCreationCallback) {
public void runControllerConnector(int serverPortForControllers, Listener<?> serverSocketCreationCallback) throws IOException {
this.serverPortForControllers = serverPortForControllers;
log.info("Starting controller connector at " + serverPortForControllers);
controllerConnector = BinaryProtocolServer.tcpServerSocket(controllerSocket -> () -> {

View File

@ -4,8 +4,10 @@ import com.rusefi.proxy.client.LocalApplicationProxy;
import com.rusefi.tools.online.HttpUtil;
import com.rusefi.tools.online.ProxyClient;
import java.io.IOException;
public class BackendLauncher {
public static void main(String[] args) {
public static void main(String[] args) throws IOException {
/* todo
rusEFISSLContext.setupCertificates(new File("keystore.jks"), System.getProperty("RUSEFI_KEYSTORE_PASSWORD"));
*/

View File

@ -79,6 +79,7 @@ public class ControllerConnectionState {
public String toString() {
return "ControllerConnectionState{" +
"userDetails=" + userDetails +
", controllerKey=" + controllerKey +
", isClosed=" + isClosed +
", twoKindSemaphore=" + twoKindSemaphore +
'}';

View File

@ -1,15 +1,84 @@
package com.rusefi.ts_plugin;
import com.rusefi.auth.AutoTokenUtil;
import com.rusefi.autodetect.PortDetector;
import com.rusefi.autoupdate.AutoupdateUtil;
import com.rusefi.proxy.NetworkConnector;
import com.rusefi.proxy.NetworkConnectorContext;
import com.rusefi.ui.AuthTokenPanel;
import com.rusefi.ui.util.URLLabel;
import org.putgemin.VerticalFlowLayout;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* @see PluginEntry
*/
public class BroadcastTab {
private final JComponent content = new JPanel();
private final JComponent content = new JPanel(new VerticalFlowLayout());
private final JLabel status = new JLabel();
private final JButton disconnect = new JButton("Disconnect");
private NetworkConnector networkConnector;
public BroadcastTab() {
// NetworkConnector
JButton broadcast = new JButton("Broadcast");
disconnect.setEnabled(false);
broadcast.addActionListener(e -> {
String authToken = AuthTokenPanel.getAuthToken();
if (!AutoTokenUtil.isToken(authToken)) {
status.setText("Auth token is required to broadcast ECU");
return;
}
new Thread(() -> {
String autoDetectedPort = PortDetector.autoDetectSerial(null);
SwingUtilities.invokeLater(() -> {
startBroadcasting(authToken, autoDetectedPort);
});
}).start();
});
disconnect.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
networkConnector.close();
disconnect.setEnabled(false);
}
});
content.add(broadcast);
content.add(status);
content.add(disconnect);
content.add(new URLLabel(RemoteTab.HOWTO_REMOTE_TUNING));
content.add(new JLabel(PluginEntry.LOGO));
AutoupdateUtil.trueLayout(content);
}
private void startBroadcasting(String authToken, String autoDetectedPort) {
if (autoDetectedPort == null) {
status.setText("<html>rusEFI ECU not detected.<br/>Please make sure that TunerStudio is currently not connected to ECU.</html>");
} else {
status.setText("rusEFI detected at " + autoDetectedPort);
disconnect.setEnabled(true);
NetworkConnectorContext connectorContext = new NetworkConnectorContext();
new Thread(() -> {
networkConnector = new NetworkConnector();
NetworkConnector.NetworkConnectorResult networkConnectorResult = networkConnector.start(authToken, autoDetectedPort, connectorContext);
SwingUtilities.invokeLater(() -> status.setText("One time password to connect to this ECU: " + networkConnectorResult.getOneTimeToken()));
}).start();
}
AutoupdateUtil.trueLayout(content);
}
public JComponent getContent() {

View File

@ -1,6 +1,7 @@
package com.rusefi.ts_plugin;
import com.efiAnalytics.plugin.ecu.ControllerAccess;
import com.rusefi.autoupdate.AutoupdateUtil;
import com.rusefi.ts_plugin.util.ManifestHelper;
import com.rusefi.tune.xml.Constant;
@ -11,10 +12,17 @@ import java.util.function.Supplier;
/**
* {@link TsPluginLauncher} creates an instance of this class via reflection.
* @see UploadTab upload tune & TODO upload logs
* @see RemoteTab remote ECU access & control
* @see BroadcastTab offer your ECU for remove access & control
* @see PluginBodySandbox
*/
public class PluginEntry implements TsPluginBody {
private final JPanel content = new JPanel(new BorderLayout());
static final ImageIcon LOGO = AutoupdateUtil.loadIcon("/rusefi_online_color_300.png");
/**
* the real constructor - this one is invoked via reflection
*/

View File

@ -29,10 +29,14 @@ import java.util.concurrent.atomic.AtomicReference;
import static com.rusefi.ui.storage.PersistentConfiguration.getConfig;
/**
* see RemoteTabSandbox
* remote ECU access & control
*
* @see RemoteTabSandbox
* @see PluginEntry
*/
public class RemoteTab {
private static final String APPLICATION_PORT = "application_port";
public static final String HOWTO_REMOTE_TUNING = "https://github.com/rusefi/rusefi/wiki/HOWTO-Remote-Tuning";
private final JComponent content = new JPanel(new BorderLayout());
private final JPanel list = new JPanel(new VerticalFlowLayout());
@ -87,7 +91,7 @@ public class RemoteTab {
topPanel.add(oneTimePasswordControl);
topLines.add(topPanel);
topLines.add(new URLLabel("https://github.com/rusefi/rusefi/wiki/HOWTO-Remote-Tuning"));
topLines.add(new URLLabel(HOWTO_REMOTE_TUNING));
content.add(topLines, BorderLayout.NORTH);
content.add(list, BorderLayout.CENTER);

View File

@ -142,8 +142,7 @@ public class UploadTab {
content.add(uploadView.getContent());
content.add(upload);
ImageIcon LOGO = AutoupdateUtil.loadIcon("/rusefi_online_color_300.png");
content.add(new JLabel(LOGO));
content.add(new JLabel(PluginEntry.LOGO));
content.add(tokenPanel.getContent());
content.add(new URLLabel(REO_URL));

View File

@ -14,7 +14,9 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
/**
* @see PluginLauncherSandbox
* Sandbox for plugin body
*
* @see PluginLauncherSandbox for plugin auto-update launcher
*/
public class PluginBodySandbox {

View File

@ -2,6 +2,9 @@ package com.rusefi.ts_plugin;
import com.rusefi.ui.util.FrameHelper;
/**
* @see PluginBodySandbox
*/
public class RemoteTabSandbox {
public static void main(String[] args) {
new FrameHelper().showFrame(new RemoteTab().getContent());

View File

@ -2,6 +2,9 @@ package com.rusefi.ts_plugin;
import javax.swing.*;
/**
* Sandbox for {@link TsPluginLauncher}
*/
public class PluginLauncherSandbox {
public static void main(String[] args) {
JFrame frame = new JFrame();

View File

@ -7,7 +7,12 @@ import org.putgemin.VerticalFlowLayout;
import javax.swing.*;
/**
* This class is the more permanent part of the plug, it's responsible for refreshing and launcher PluginEntry via reflections.
* which downloads the main more volatile UI part (PluginEntry)
*
* by the way TS installs stuff into %user%\.efianalytics\TunerStudio\plugins folder
* @see PluginLauncherSandbox sandbox for this
* see PluginEntry
*/
public class TsPluginLauncher implements ApplicationPlugin {
public static final int BUILD_VERSION = 3;

View File

@ -20,9 +20,13 @@ import java.util.concurrent.atomic.AtomicInteger;
import static com.rusefi.ts_plugin.TsPluginLauncher.VERSION;
/**
* Download fresh copy of {@link #PLUGIN_BODY_JAR} and launch {@link #PLUGIN_ENTRY_CLASS} via reflection.
*/
public class Updater {
private static final String PLUGIN_ENTRY_CLASS = "com.rusefi.ts_plugin.PluginEntry";
private static final String PLUGIN_BODY_JAR = "rusefi_plugin_body.jar";
public static final String LOCAL_JAR_FILE_NAME = FileUtil.RUSEFI_SETTINGS_FOLDER + File.separator + PLUGIN_BODY_JAR;
private static final String LOCAL_JAR_FILE_NAME = FileUtil.RUSEFI_SETTINGS_FOLDER + File.separator + PLUGIN_BODY_JAR;
private static final String TITLE = "rusEFI plugin installer " + VERSION;
private final JPanel content = new JPanel(new VerticalFlowLayout());
@ -187,7 +191,7 @@ public class Updater {
private static Class getPluginClass() throws MalformedURLException, ClassNotFoundException {
URLClassLoader jarClassLoader = AutoupdateUtil.getClassLoaderByJar(LOCAL_JAR_FILE_NAME);
return Class.forName("com.rusefi.ts_plugin.PluginEntry", true, jarClassLoader);
return Class.forName(PLUGIN_ENTRY_CLASS, true, jarClassLoader);
}
private void replaceWith(TsPluginBody instance) {