auto-sync
This commit is contained in:
parent
1aff292d86
commit
412d4843d9
|
@ -278,10 +278,10 @@
|
||||||
#define TS_SERIAL_AF 7
|
#define TS_SERIAL_AF 7
|
||||||
|
|
||||||
#define LED_WARNING_PORT GPIOD
|
#define LED_WARNING_PORT GPIOD
|
||||||
#define LED_WARNING_PIN GPIOD_LED3
|
#define LED_WARNING_PIN 13
|
||||||
|
|
||||||
#define LED_ERROR_PORT GPIOD
|
#define LED_ERROR_PORT GPIOD
|
||||||
#define LED_ERROR_PIN GPIOD_LED5
|
#define LED_ERROR_PIN 14
|
||||||
|
|
||||||
#define EFI_WARNING_LED TRUE
|
#define EFI_WARNING_LED TRUE
|
||||||
|
|
||||||
|
|
|
@ -85,7 +85,7 @@ typedef struct {
|
||||||
egt_values_s egtValues;
|
egt_values_s egtValues;
|
||||||
float rpmAcceleration;
|
float rpmAcceleration;
|
||||||
float massAirFlowValue;
|
float massAirFlowValue;
|
||||||
float veValue;
|
float veValue; // current volumetric efficiency
|
||||||
float deltaTps;
|
float deltaTps;
|
||||||
int triggerErrorsCounter;
|
int triggerErrorsCounter;
|
||||||
float currentMapAccelDelta;
|
float currentMapAccelDelta;
|
||||||
|
@ -101,7 +101,9 @@ typedef struct {
|
||||||
float totalFuelCorrection;
|
float totalFuelCorrection;
|
||||||
floatms_t wallFuelCorrection;
|
floatms_t wallFuelCorrection;
|
||||||
float idlePosition;
|
float idlePosition;
|
||||||
int unused3[5];
|
float currentTargetAfr;
|
||||||
|
float chargeAirMass;
|
||||||
|
int unused3[3];
|
||||||
} TunerStudioOutputChannels;
|
} TunerStudioOutputChannels;
|
||||||
|
|
||||||
#endif /* TUNERSTUDIO_CONFIGURATION_H_ */
|
#endif /* TUNERSTUDIO_CONFIGURATION_H_ */
|
||||||
|
|
|
@ -398,7 +398,9 @@ static void showFuelInfo2(float rpm, float engineLoad) {
|
||||||
|
|
||||||
float baseFuelMs = getBaseTableFuel(engineConfiguration, (int) rpm, engineLoad);
|
float baseFuelMs = getBaseTableFuel(engineConfiguration, (int) rpm, engineLoad);
|
||||||
|
|
||||||
scheduleMsg(&logger, "SD magic fuel %f", sdMath(engineConfiguration, 100, 100, 14.7, convertCelsiusToKelvin(20)));
|
float magicAir = getAirMass(engineConfiguration, 1, 100, convertCelsiusToKelvin(20));
|
||||||
|
|
||||||
|
scheduleMsg(&logger, "SD magic fuel %f", sdMath(engineConfiguration, magicAir, 14.7));
|
||||||
scheduleMsg(&logger, "inj flow %fcc/min displacement %fL", engineConfiguration->injector.flow,
|
scheduleMsg(&logger, "inj flow %fcc/min displacement %fL", engineConfiguration->injector.flow,
|
||||||
engineConfiguration->specs.displacement);
|
engineConfiguration->specs.displacement);
|
||||||
|
|
||||||
|
@ -552,6 +554,7 @@ static void lcdThread(void *arg) {
|
||||||
extern WallFuel wallFuel;
|
extern WallFuel wallFuel;
|
||||||
|
|
||||||
extern fuel_Map3D_t veMap;
|
extern fuel_Map3D_t veMap;
|
||||||
|
extern fuel_Map3D_t afrMap;
|
||||||
|
|
||||||
void updateTunerStudioState(TunerStudioOutputChannels *tsOutputChannels DECLARE_ENGINE_PARAMETER_S) {
|
void updateTunerStudioState(TunerStudioOutputChannels *tsOutputChannels DECLARE_ENGINE_PARAMETER_S) {
|
||||||
#if EFI_SHAFT_POSITION_INPUT || defined(__DOXYGEN__)
|
#if EFI_SHAFT_POSITION_INPUT || defined(__DOXYGEN__)
|
||||||
|
@ -579,6 +582,7 @@ void updateTunerStudioState(TunerStudioOutputChannels *tsOutputChannels DECLARE_
|
||||||
tsOutputChannels->massAirFlowValue = hasMafSensor() ? getRealMaf() : 0;
|
tsOutputChannels->massAirFlowValue = hasMafSensor() ? getRealMaf() : 0;
|
||||||
|
|
||||||
tsOutputChannels->veValue = veMap.getValue(getMap(), rpm);
|
tsOutputChannels->veValue = veMap.getValue(getMap(), rpm);
|
||||||
|
tsOutputChannels->currentTargetAfr = afrMap.getValue(getMap(), rpm);
|
||||||
tsOutputChannels->airFuelRatio = getAfr();
|
tsOutputChannels->airFuelRatio = getAfr();
|
||||||
if (hasVBatt(PASS_ENGINE_PARAMETER_F)) {
|
if (hasVBatt(PASS_ENGINE_PARAMETER_F)) {
|
||||||
tsOutputChannels->vBatt = getVBatt(PASS_ENGINE_PARAMETER_F);
|
tsOutputChannels->vBatt = getVBatt(PASS_ENGINE_PARAMETER_F);
|
||||||
|
@ -650,6 +654,7 @@ void updateTunerStudioState(TunerStudioOutputChannels *tsOutputChannels DECLARE_
|
||||||
tsOutputChannels->baseFuel = baseFuelMs;
|
tsOutputChannels->baseFuel = baseFuelMs;
|
||||||
tsOutputChannels->pulseWidthMs = ENGINE(actualLastInjection);
|
tsOutputChannels->pulseWidthMs = ENGINE(actualLastInjection);
|
||||||
tsOutputChannels->crankingFuelMs = getCrankingFuel(PASS_ENGINE_PARAMETER_F);
|
tsOutputChannels->crankingFuelMs = getCrankingFuel(PASS_ENGINE_PARAMETER_F);
|
||||||
|
tsOutputChannels->chargeAirMass = engine->engineState.airMass;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern TunerStudioOutputChannels tsOutputChannels;
|
extern TunerStudioOutputChannels tsOutputChannels;
|
||||||
|
|
|
@ -90,6 +90,8 @@ public:
|
||||||
float iat;
|
float iat;
|
||||||
float clt;
|
float clt;
|
||||||
|
|
||||||
|
float airMass;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* that's fuel in tank - just a gauge
|
* that's fuel in tank - just a gauge
|
||||||
*/
|
*/
|
||||||
|
@ -127,7 +129,14 @@ public:
|
||||||
float currentVE;
|
float currentVE;
|
||||||
float targerAFR;
|
float targerAFR;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* pre-calculated value from simple fuel lookup
|
||||||
|
*/
|
||||||
float baseTableFuel;
|
float baseTableFuel;
|
||||||
|
/**
|
||||||
|
* fuel regardless of fuel logic mode
|
||||||
|
*/
|
||||||
|
float baseFuel;
|
||||||
|
|
||||||
angle_t injectionOffset;
|
angle_t injectionOffset;
|
||||||
};
|
};
|
||||||
|
|
|
@ -230,7 +230,11 @@ void prepareVoidConfiguration(engine_configuration_s *activeConfiguration) {
|
||||||
boardConfiguration->ignitionPins[i] = GPIO_UNASSIGNED;
|
boardConfiguration->ignitionPins[i] = GPIO_UNASSIGNED;
|
||||||
}
|
}
|
||||||
boardConfiguration->ignitionPinMode = OM_DEFAULT;
|
boardConfiguration->ignitionPinMode = OM_DEFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setDefaultBasePins(DECLARE_ENGINE_PARAMETER_F) {
|
||||||
|
engineConfiguration->fatalErrorPin = GPIOD_14;
|
||||||
|
engineConfiguration->warninigPin = GPIOD_13;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -564,6 +568,7 @@ void setDefaultConfiguration(DECLARE_ENGINE_PARAMETER_F) {
|
||||||
|
|
||||||
engineConfiguration->communicationPin = GPIOD_15;
|
engineConfiguration->communicationPin = GPIOD_15;
|
||||||
engineConfiguration->runningPin = GPIOD_12;
|
engineConfiguration->runningPin = GPIOD_12;
|
||||||
|
setDefaultBasePins(PASS_ENGINE_PARAMETER_F);
|
||||||
engineConfiguration->binarySerialTxPin = GPIOC_10;
|
engineConfiguration->binarySerialTxPin = GPIOC_10;
|
||||||
engineConfiguration->binarySerialRxPin = GPIOC_11;
|
engineConfiguration->binarySerialRxPin = GPIOC_11;
|
||||||
engineConfiguration->consoleSerialTxPin = GPIOC_10;
|
engineConfiguration->consoleSerialTxPin = GPIOC_10;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Wed Nov 18 19:07:01 EST 2015
|
// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Tue Dec 01 20:29:19 EST 2015
|
||||||
// begin
|
// begin
|
||||||
#include "rusefi_types.h"
|
#include "rusefi_types.h"
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -1428,7 +1428,23 @@ typedef struct {
|
||||||
* offset 2212
|
* offset 2212
|
||||||
*/
|
*/
|
||||||
float mapAccelEnrichmentMultiplier;
|
float mapAccelEnrichmentMultiplier;
|
||||||
/** total size 2216*/
|
/**
|
||||||
|
* offset 2216
|
||||||
|
*/
|
||||||
|
brain_pin_e fatalErrorPin;
|
||||||
|
/**
|
||||||
|
* offset 2220
|
||||||
|
*/
|
||||||
|
brain_pin_e warninigPin;
|
||||||
|
/**
|
||||||
|
* offset 2224
|
||||||
|
*/
|
||||||
|
brain_pin_e configResetPin;
|
||||||
|
/**
|
||||||
|
* offset 2228
|
||||||
|
*/
|
||||||
|
int unused[197];
|
||||||
|
/** total size 3016*/
|
||||||
} engine_configuration_s;
|
} engine_configuration_s;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -1437,143 +1453,143 @@ typedef struct {
|
||||||
*/
|
*/
|
||||||
engine_configuration_s engineConfiguration;
|
engine_configuration_s engineConfiguration;
|
||||||
/**
|
/**
|
||||||
* offset 2216
|
* offset 3016
|
||||||
*/
|
*/
|
||||||
le_formula_t le_formulas[LE_COMMAND_COUNT];
|
le_formula_t le_formulas[LE_COMMAND_COUNT];
|
||||||
/**
|
/**
|
||||||
* offset 5416
|
* offset 6216
|
||||||
*/
|
*/
|
||||||
le_formula_t timingMultiplier;
|
le_formula_t timingMultiplier;
|
||||||
/**
|
/**
|
||||||
* offset 5616
|
* offset 6416
|
||||||
*/
|
*/
|
||||||
le_formula_t timingAdditive;
|
le_formula_t timingAdditive;
|
||||||
/**
|
/**
|
||||||
* offset 5816
|
* offset 6616
|
||||||
*/
|
*/
|
||||||
float cltFuelCorrBins[CLT_CURVE_SIZE];
|
float cltFuelCorrBins[CLT_CURVE_SIZE];
|
||||||
/**
|
/**
|
||||||
* offset 5880
|
* offset 6680
|
||||||
*/
|
*/
|
||||||
float cltFuelCorr[CLT_CURVE_SIZE];
|
float cltFuelCorr[CLT_CURVE_SIZE];
|
||||||
/**
|
/**
|
||||||
* offset 5944
|
* offset 6744
|
||||||
*/
|
*/
|
||||||
float iatFuelCorrBins[IAT_CURVE_SIZE];
|
float iatFuelCorrBins[IAT_CURVE_SIZE];
|
||||||
/**
|
/**
|
||||||
* offset 6008
|
* offset 6808
|
||||||
*/
|
*/
|
||||||
float iatFuelCorr[IAT_CURVE_SIZE];
|
float iatFuelCorr[IAT_CURVE_SIZE];
|
||||||
/**
|
/**
|
||||||
* offset 6072
|
* offset 6872
|
||||||
*/
|
*/
|
||||||
float crankingFuelCoef[CRANKING_CURVE_SIZE];
|
float crankingFuelCoef[CRANKING_CURVE_SIZE];
|
||||||
/**
|
/**
|
||||||
* offset 6104
|
* offset 6904
|
||||||
*/
|
*/
|
||||||
float crankingFuelBins[CRANKING_CURVE_SIZE];
|
float crankingFuelBins[CRANKING_CURVE_SIZE];
|
||||||
/**
|
/**
|
||||||
* offset 6136
|
* offset 6936
|
||||||
*/
|
*/
|
||||||
float crankingCycleCoef[CRANKING_CURVE_SIZE];
|
float crankingCycleCoef[CRANKING_CURVE_SIZE];
|
||||||
/**
|
/**
|
||||||
* offset 6168
|
* offset 6968
|
||||||
*/
|
*/
|
||||||
float crankingCycleBins[CRANKING_CURVE_SIZE];
|
float crankingCycleBins[CRANKING_CURVE_SIZE];
|
||||||
/**
|
/**
|
||||||
* CLT-based adjustment for simple manual idle controller
|
* CLT-based adjustment for simple manual idle controller
|
||||||
* offset 6200
|
* offset 7000
|
||||||
*/
|
*/
|
||||||
float cltIdleCorrBins[CLT_CURVE_SIZE];
|
float cltIdleCorrBins[CLT_CURVE_SIZE];
|
||||||
/**
|
/**
|
||||||
* offset 6264
|
* offset 7064
|
||||||
*/
|
*/
|
||||||
float cltIdleCorr[CLT_CURVE_SIZE];
|
float cltIdleCorr[CLT_CURVE_SIZE];
|
||||||
/**
|
/**
|
||||||
* kg/hour value.
|
* kg/hour value.
|
||||||
* By the way 2.081989116 kg/h = 1 ft³/m
|
* By the way 2.081989116 kg/h = 1 ft³/m
|
||||||
* offset 6328
|
* offset 7128
|
||||||
*/
|
*/
|
||||||
float mafDecoding[MAF_DECODING_COUNT];
|
float mafDecoding[MAF_DECODING_COUNT];
|
||||||
/**
|
/**
|
||||||
* offset 7352
|
* offset 8152
|
||||||
*/
|
*/
|
||||||
float mafDecodingBins[MAF_DECODING_COUNT];
|
float mafDecodingBins[MAF_DECODING_COUNT];
|
||||||
/**
|
/**
|
||||||
* offset 8376
|
* offset 9176
|
||||||
*/
|
*/
|
||||||
ignition_table_t ignitionIatCorrTable;
|
ignition_table_t ignitionIatCorrTable;
|
||||||
/**
|
/**
|
||||||
* offset 9400
|
* offset 10200
|
||||||
*/
|
*/
|
||||||
float ignitionIatCorrLoadBins[IGN_LOAD_COUNT];
|
float ignitionIatCorrLoadBins[IGN_LOAD_COUNT];
|
||||||
/**
|
/**
|
||||||
* offset 9464
|
* offset 10264
|
||||||
*/
|
*/
|
||||||
float ignitionIatCorrRpmBins[IGN_RPM_COUNT];
|
float ignitionIatCorrRpmBins[IGN_RPM_COUNT];
|
||||||
/**
|
/**
|
||||||
* offset 9528
|
* offset 10328
|
||||||
*/
|
*/
|
||||||
ignition_table_t injectionPhase;
|
ignition_table_t injectionPhase;
|
||||||
/**
|
/**
|
||||||
* offset 10552
|
* offset 11352
|
||||||
*/
|
*/
|
||||||
float injPhaseLoadBins[FUEL_LOAD_COUNT];
|
float injPhaseLoadBins[FUEL_LOAD_COUNT];
|
||||||
/**
|
/**
|
||||||
* offset 10616
|
* offset 11416
|
||||||
*/
|
*/
|
||||||
float injPhaseRpmBins[FUEL_RPM_COUNT];
|
float injPhaseRpmBins[FUEL_RPM_COUNT];
|
||||||
/**
|
/**
|
||||||
* offset 10680
|
* offset 11480
|
||||||
*/
|
*/
|
||||||
fuel_table_t fuelTable;
|
fuel_table_t fuelTable;
|
||||||
/**
|
/**
|
||||||
* offset 11704
|
* offset 12504
|
||||||
*/
|
*/
|
||||||
float fuelLoadBins[FUEL_LOAD_COUNT];
|
float fuelLoadBins[FUEL_LOAD_COUNT];
|
||||||
/**
|
/**
|
||||||
* RPM is float and not integer in order to use unified methods for interpolation
|
* RPM is float and not integer in order to use unified methods for interpolation
|
||||||
* offset 11768
|
* offset 12568
|
||||||
*/
|
*/
|
||||||
float fuelRpmBins[FUEL_RPM_COUNT];
|
float fuelRpmBins[FUEL_RPM_COUNT];
|
||||||
/**
|
/**
|
||||||
* offset 11832
|
* offset 12632
|
||||||
*/
|
*/
|
||||||
ignition_table_t ignitionTable;
|
ignition_table_t ignitionTable;
|
||||||
/**
|
/**
|
||||||
* offset 12856
|
* offset 13656
|
||||||
*/
|
*/
|
||||||
float ignitionLoadBins[IGN_LOAD_COUNT];
|
float ignitionLoadBins[IGN_LOAD_COUNT];
|
||||||
/**
|
/**
|
||||||
* offset 12920
|
* offset 13720
|
||||||
*/
|
*/
|
||||||
float ignitionRpmBins[IGN_RPM_COUNT];
|
float ignitionRpmBins[IGN_RPM_COUNT];
|
||||||
/**
|
/**
|
||||||
* offset 12984
|
* offset 13784
|
||||||
*/
|
*/
|
||||||
ve_table_t veTable;
|
ve_table_t veTable;
|
||||||
/**
|
/**
|
||||||
* offset 14008
|
* offset 14808
|
||||||
*/
|
*/
|
||||||
float veLoadBins[FUEL_LOAD_COUNT];
|
float veLoadBins[FUEL_LOAD_COUNT];
|
||||||
/**
|
/**
|
||||||
* offset 14072
|
* offset 14872
|
||||||
*/
|
*/
|
||||||
float veRpmBins[FUEL_RPM_COUNT];
|
float veRpmBins[FUEL_RPM_COUNT];
|
||||||
/**
|
/**
|
||||||
* offset 14136
|
* offset 14936
|
||||||
*/
|
*/
|
||||||
afr_table_t afrTable;
|
afr_table_t afrTable;
|
||||||
/**
|
/**
|
||||||
* offset 15160
|
* offset 15960
|
||||||
*/
|
*/
|
||||||
float afrLoadBins[FUEL_LOAD_COUNT];
|
float afrLoadBins[FUEL_LOAD_COUNT];
|
||||||
/**
|
/**
|
||||||
* offset 15224
|
* offset 16024
|
||||||
*/
|
*/
|
||||||
float afrRpmBins[FUEL_RPM_COUNT];
|
float afrRpmBins[FUEL_RPM_COUNT];
|
||||||
/** total size 15288*/
|
/** total size 16088*/
|
||||||
} persistent_config_s;
|
} persistent_config_s;
|
||||||
|
|
||||||
// end
|
// end
|
||||||
// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Wed Nov 18 19:07:01 EST 2015
|
// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Tue Dec 01 20:29:19 EST 2015
|
||||||
|
|
|
@ -74,13 +74,15 @@ floatms_t getBaseFuel(int rpm DECLARE_ENGINE_PARAMETER_S) {
|
||||||
floatms_t tpsAccelEnrich = ENGINE(tpsAccelEnrichment.getTpsEnrichment(PASS_ENGINE_PARAMETER_F));
|
floatms_t tpsAccelEnrich = ENGINE(tpsAccelEnrichment.getTpsEnrichment(PASS_ENGINE_PARAMETER_F));
|
||||||
|
|
||||||
if (CONFIG(algorithm) == LM_SPEED_DENSITY) {
|
if (CONFIG(algorithm) == LM_SPEED_DENSITY) {
|
||||||
return tpsAccelEnrich + getSpeedDensityFuel(rpm PASS_ENGINE_PARAMETER);
|
engine->engineState.baseFuel = getSpeedDensityFuel(rpm PASS_ENGINE_PARAMETER);
|
||||||
} else if (engineConfiguration->algorithm == LM_REAL_MAF) {
|
} else if (engineConfiguration->algorithm == LM_REAL_MAF) {
|
||||||
float maf = getRealMaf(PASS_ENGINE_PARAMETER_F) + engine->mapAccelEnrichment.getMapEnrichment(PASS_ENGINE_PARAMETER_F);
|
float maf = getRealMaf(PASS_ENGINE_PARAMETER_F) + engine->mapAccelEnrichment.getMapEnrichment(PASS_ENGINE_PARAMETER_F);
|
||||||
return tpsAccelEnrich + getRealMafFuel(maf, rpm PASS_ENGINE_PARAMETER);
|
engine->engineState.baseFuel = getRealMafFuel(maf, rpm PASS_ENGINE_PARAMETER);
|
||||||
} else {
|
} else {
|
||||||
return tpsAccelEnrich + engine->engineState.baseTableFuel;
|
engine->engineState.baseFuel = engine->engineState.baseTableFuel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return tpsAccelEnrich + engine->engineState.baseFuel;
|
||||||
}
|
}
|
||||||
|
|
||||||
float getinjectionOffset(int rpm DECLARE_ENGINE_PARAMETER_S) {
|
float getinjectionOffset(int rpm DECLARE_ENGINE_PARAMETER_S) {
|
||||||
|
|
|
@ -722,70 +722,71 @@
|
||||||
#define decelEnleanmentMultiplier_offset 2204
|
#define decelEnleanmentMultiplier_offset 2204
|
||||||
#define mapAccelEnrichmentThreshold_offset 2208
|
#define mapAccelEnrichmentThreshold_offset 2208
|
||||||
#define mapAccelEnrichmentMultiplier_offset 2212
|
#define mapAccelEnrichmentMultiplier_offset 2212
|
||||||
#define le_formulas1_offset 2216
|
#define fatalErrorPin_offset 2216
|
||||||
#define le_formulas2_offset 2416
|
#define warninigPin_offset 2220
|
||||||
#define le_formulas2_offset_hex 970
|
#define configResetPin_offset 2224
|
||||||
#define le_formulas3_offset 2616
|
#define unused_offset 2228
|
||||||
#define le_formulas4_offset 2816
|
#define le_formulas1_offset 3016
|
||||||
#define le_formulas5_offset 3016
|
#define le_formulas2_offset 3216
|
||||||
#define le_formulas6_offset 3216
|
#define le_formulas3_offset 3416
|
||||||
#define le_formulas7_offset 3416
|
#define le_formulas4_offset 3616
|
||||||
#define le_formulas8_offset 3616
|
#define le_formulas5_offset 3816
|
||||||
#define le_formulas9_offset 3816
|
#define le_formulas6_offset 4016
|
||||||
#define le_formulas10_offset 4016
|
#define le_formulas7_offset 4216
|
||||||
#define le_formulas11_offset 4216
|
#define le_formulas7_offset_hex 1078
|
||||||
#define le_formulas11_offset_hex 1078
|
#define le_formulas8_offset 4416
|
||||||
#define le_formulas12_offset 4416
|
#define le_formulas8_offset_hex 1140
|
||||||
#define le_formulas12_offset_hex 1140
|
#define le_formulas9_offset 4616
|
||||||
#define le_formulas13_offset 4616
|
#define le_formulas9_offset_hex 1208
|
||||||
#define le_formulas13_offset_hex 1208
|
#define le_formulas10_offset 4816
|
||||||
#define le_formulas14_offset 4816
|
#define le_formulas11_offset 5016
|
||||||
#define le_formulas15_offset 5016
|
#define le_formulas11_offset_hex 1398
|
||||||
#define le_formulas15_offset_hex 1398
|
#define le_formulas12_offset 5216
|
||||||
#define le_formulas16_offset 5216
|
#define le_formulas12_offset_hex 1460
|
||||||
#define le_formulas16_offset_hex 1460
|
#define le_formulas13_offset 5416
|
||||||
#define timingMultiplier_offset 5416
|
#define le_formulas13_offset_hex 1528
|
||||||
#define timingMultiplier_offset_hex 1528
|
#define le_formulas14_offset 5616
|
||||||
#define timingAdditive_offset 5616
|
#define le_formulas15_offset 5816
|
||||||
#define cltFuelCorrBins_offset 5816
|
#define le_formulas16_offset 6016
|
||||||
#define cltFuelCorr_offset 5880
|
#define le_formulas16_offset_hex 1780
|
||||||
#define iatFuelCorrBins_offset 5944
|
#define timingMultiplier_offset 6216
|
||||||
#define iatFuelCorrBins_offset_hex 1738
|
#define timingMultiplier_offset_hex 1848
|
||||||
#define iatFuelCorr_offset 6008
|
#define timingAdditive_offset 6416
|
||||||
#define iatFuelCorr_offset_hex 1778
|
#define timingAdditive_offset_hex 1910
|
||||||
#define crankingFuelCoef_offset 6072
|
#define cltFuelCorrBins_offset 6616
|
||||||
#define crankingFuelBins_offset 6104
|
#define cltFuelCorr_offset 6680
|
||||||
#define crankingCycleCoef_offset 6136
|
#define iatFuelCorrBins_offset 6744
|
||||||
#define crankingCycleBins_offset 6168
|
#define iatFuelCorr_offset 6808
|
||||||
#define crankingCycleBins_offset_hex 1818
|
#define crankingFuelCoef_offset 6872
|
||||||
#define cltIdleCorrBins_offset 6200
|
#define crankingFuelBins_offset 6904
|
||||||
#define cltIdleCorrBins_offset_hex 1838
|
#define crankingCycleCoef_offset 6936
|
||||||
#define cltIdleCorr_offset 6264
|
#define crankingCycleBins_offset 6968
|
||||||
#define cltIdleCorr_offset_hex 1878
|
#define cltIdleCorrBins_offset 7000
|
||||||
#define mafDecoding_offset 6328
|
#define cltIdleCorr_offset 7064
|
||||||
#define mafDecodingBins_offset 7352
|
#define mafDecoding_offset 7128
|
||||||
#define ignitionIatCorrTable_offset 8376
|
#define mafDecodingBins_offset 8152
|
||||||
#define ignitionIatCorrLoadBins_offset 9400
|
#define ignitionIatCorrTable_offset 9176
|
||||||
#define ignitionIatCorrRpmBins_offset 9464
|
#define ignitionIatCorrLoadBins_offset 10200
|
||||||
#define injectionPhase_offset 9528
|
#define ignitionIatCorrRpmBins_offset 10264
|
||||||
#define injectionPhase_offset_hex 2538
|
#define ignitionIatCorrRpmBins_offset_hex 2818
|
||||||
#define injPhaseLoadBins_offset 10552
|
#define injectionPhase_offset 10328
|
||||||
#define injPhaseLoadBins_offset_hex 2938
|
#define injectionPhase_offset_hex 2858
|
||||||
#define injPhaseRpmBins_offset 10616
|
#define injPhaseLoadBins_offset 11352
|
||||||
#define injPhaseRpmBins_offset_hex 2978
|
#define injPhaseRpmBins_offset 11416
|
||||||
#define fuelTable_offset 10680
|
#define fuelTable_offset 11480
|
||||||
#define fuelLoadBins_offset 11704
|
#define fuelLoadBins_offset 12504
|
||||||
#define fuelRpmBins_offset 11768
|
#define fuelRpmBins_offset 12568
|
||||||
#define ignitionTable_offset 11832
|
#define fuelRpmBins_offset_hex 3118
|
||||||
#define ignitionLoadBins_offset 12856
|
#define ignitionTable_offset 12632
|
||||||
#define ignitionLoadBins_offset_hex 3238
|
#define ignitionTable_offset_hex 3158
|
||||||
#define ignitionRpmBins_offset 12920
|
#define ignitionLoadBins_offset 13656
|
||||||
#define ignitionRpmBins_offset_hex 3278
|
#define ignitionLoadBins_offset_hex 3558
|
||||||
#define veTable_offset 12984
|
#define ignitionRpmBins_offset 13720
|
||||||
#define veLoadBins_offset 14008
|
#define ignitionRpmBins_offset_hex 3598
|
||||||
#define veRpmBins_offset 14072
|
#define veTable_offset 13784
|
||||||
#define afrTable_offset 14136
|
#define veLoadBins_offset 14808
|
||||||
#define afrTable_offset_hex 3738
|
#define veRpmBins_offset 14872
|
||||||
#define afrLoadBins_offset 15160
|
#define afrTable_offset 14936
|
||||||
#define afrRpmBins_offset 15224
|
#define afrLoadBins_offset 15960
|
||||||
#define TOTAL_CONFIG_SIZE 15288
|
#define afrRpmBins_offset 16024
|
||||||
|
#define TOTAL_CONFIG_SIZE 16088
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
#include "engine.h"
|
#include "engine.h"
|
||||||
|
|
||||||
#define FLASH_DATA_VERSION 8900
|
#define FLASH_DATA_VERSION 9000
|
||||||
|
|
||||||
void readFromFlash(void);
|
void readFromFlash(void);
|
||||||
void initFlash(Logging *sharedLogger);
|
void initFlash(Logging *sharedLogger);
|
||||||
|
|
|
@ -48,19 +48,22 @@ float getTCharge(int rpm, float tps, float coolantTemp, float airTemp) {
|
||||||
*/
|
*/
|
||||||
#define GAS_R 0.28705
|
#define GAS_R 0.28705
|
||||||
|
|
||||||
|
float getAirMass(engine_configuration_s *engineConfiguration, float VE, float MAP, float tempK) {
|
||||||
|
// todo: pre-calculate cylinder displacement to save one division
|
||||||
|
float cylinderDisplacement = engineConfiguration->specs.displacement / engineConfiguration->specs.cylindersCount;
|
||||||
|
return (cylinderDisplacement * VE * MAP) / (GAS_R * tempK);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return per cylinder injection time, in seconds
|
* @return per cylinder injection time, in seconds
|
||||||
*/
|
*/
|
||||||
float sdMath(engine_configuration_s *engineConfiguration, float VE, float MAP, float AFR, float tempK) {
|
float sdMath(engine_configuration_s *engineConfiguration, float airMass, float AFR) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* todo: pre-calculate gramm/second injector flow to save one multiplication
|
* todo: pre-calculate gramm/second injector flow to save one multiplication
|
||||||
* open question if that's needed since that's just a multiplication
|
* open question if that's needed since that's just a multiplication
|
||||||
*/
|
*/
|
||||||
float injectorFlowRate = cc_minute_to_gramm_second(engineConfiguration->injector.flow);
|
float injectorFlowRate = cc_minute_to_gramm_second(engineConfiguration->injector.flow);
|
||||||
// todo: pre-calculate cylinder displacement to save one division
|
|
||||||
float cylinderDisplacement = engineConfiguration->specs.displacement / engineConfiguration->specs.cylindersCount;
|
|
||||||
float airMass = (cylinderDisplacement * VE * MAP) / (GAS_R * tempK);
|
|
||||||
/**
|
/**
|
||||||
* injection_pulse_duration = fuel_mass / injector_flow
|
* injection_pulse_duration = fuel_mass / injector_flow
|
||||||
* fuel_mass = air_mass / target_afr
|
* fuel_mass = air_mass / target_afr
|
||||||
|
@ -86,7 +89,9 @@ float getSpeedDensityFuel(int rpm DECLARE_ENGINE_PARAMETER_S) {
|
||||||
|
|
||||||
float adjMap = map + engine->mapAccelEnrichment.getMapEnrichment(PASS_ENGINE_PARAMETER_F);
|
float adjMap = map + engine->mapAccelEnrichment.getMapEnrichment(PASS_ENGINE_PARAMETER_F);
|
||||||
|
|
||||||
return sdMath(engineConfiguration, ENGINE(engineState.currentVE), adjMap, ENGINE(engineState.targerAFR), tChargeK) * 1000;
|
engine->engineState.airMass = getAirMass(engineConfiguration, ENGINE(engineState.currentVE), adjMap, tChargeK);
|
||||||
|
|
||||||
|
return sdMath(engineConfiguration, engine->engineState.airMass, ENGINE(engineState.targerAFR)) * 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const baro_corr_table_t default_baro_corr = {
|
static const baro_corr_table_t default_baro_corr = {
|
||||||
|
|
|
@ -11,7 +11,8 @@
|
||||||
|
|
||||||
float getTCharge(int rpm, float tps, float coolantTemp, float airTemp);
|
float getTCharge(int rpm, float tps, float coolantTemp, float airTemp);
|
||||||
void setDetaultVETable(persistent_config_s *config);
|
void setDetaultVETable(persistent_config_s *config);
|
||||||
float sdMath(engine_configuration_s *engineConfiguration, float VE, float MAP, float AFR, float tempK);
|
float getAirMass(engine_configuration_s *engineConfiguration, float VE, float MAP, float tempK);
|
||||||
|
float sdMath(engine_configuration_s *engineConfiguration, float airMass, float AFR);
|
||||||
|
|
||||||
#define gramm_second_to_cc_minute(gs) ((gs) / 0.0119997981)
|
#define gramm_second_to_cc_minute(gs) ((gs) / 0.0119997981)
|
||||||
|
|
||||||
|
|
|
@ -230,7 +230,7 @@ adc_channel_e fuelLevelSensor;
|
||||||
|
|
||||||
float vehicleSpeedCoef;This coefficient translates vehicle speed input frequency (in Hz) into vehicle speed, km/h;"coef", 1, 0, 0.01, 2000.0, 2
|
float vehicleSpeedCoef;This coefficient translates vehicle speed input frequency (in Hz) into vehicle speed, km/h;"coef", 1, 0, 0.01, 2000.0, 2
|
||||||
|
|
||||||
custom can_nbc_e 4 bits, U32, @OFFSET@, [0:1], "BMW", "FIAT", "VAG" , "INVALID"
|
custom can_nbc_e 4 bits, U32, @OFFSET@, [0:1], "BMW", "FIAT", "VAG" , "MAZDA RX8"
|
||||||
can_nbc_e canNbcType;
|
can_nbc_e canNbcType;
|
||||||
|
|
||||||
int canSleepPeriod;CANbus thread period, ms;"ms", 1, 0, 0, 1000.0, 2
|
int canSleepPeriod;CANbus thread period, ms;"ms", 1, 0, 0, 1000.0, 2
|
||||||
|
@ -621,6 +621,13 @@ baro_corr_table_t baroCorrTable;
|
||||||
float mapAccelEnrichmentThreshold;;"roc", 1, 0, 0, 200, 3
|
float mapAccelEnrichmentThreshold;;"roc", 1, 0, 0, 200, 3
|
||||||
float mapAccelEnrichmentMultiplier;;"coeff", 1, 0, 0, 200, 3
|
float mapAccelEnrichmentMultiplier;;"coeff", 1, 0, 0, 200, 3
|
||||||
|
|
||||||
|
|
||||||
|
brain_pin_e fatalErrorPin;
|
||||||
|
brain_pin_e warninigPin;
|
||||||
|
brain_pin_e configResetPin;
|
||||||
|
int[197] unused;
|
||||||
|
|
||||||
|
|
||||||
end_struct
|
end_struct
|
||||||
|
|
||||||
engine_configuration_s engineConfiguration;
|
engine_configuration_s engineConfiguration;
|
||||||
|
|
|
@ -275,5 +275,5 @@ int getRusEfiVersion(void) {
|
||||||
return 123; // this is here to make the compiler happy about the unused array
|
return 123; // this is here to make the compiler happy about the unused array
|
||||||
if (UNUSED_CCM_SIZE[0] * 0 != 0)
|
if (UNUSED_CCM_SIZE[0] * 0 != 0)
|
||||||
return 3211; // this is here to make the compiler happy about the unused array
|
return 3211; // this is here to make the compiler happy about the unused array
|
||||||
return 20151124;
|
return 20151201;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,8 +3,15 @@
|
||||||
; this should stop TS from looking for the CAN ID in the 2nd byte location and allow the page reads to work correctly.
|
; this should stop TS from looking for the CAN ID in the 2nd byte location and allow the page reads to work correctly.
|
||||||
enable2ndByteCanID = false
|
enable2ndByteCanID = false
|
||||||
|
|
||||||
|
;This enables the "full" CAN/serial commands so this INI can be used anywhere on the CAN network.
|
||||||
|
#unset CAN_COMMANDS
|
||||||
|
|
||||||
[TunerStudio]
|
[TunerStudio]
|
||||||
|
#if CAN_COMMANDS
|
||||||
|
queryCommand = "r\x00\x0f\x00\x00\x00\x14" ; Verify against signature.
|
||||||
|
#else
|
||||||
queryCommand = "S"
|
queryCommand = "S"
|
||||||
|
#endif
|
||||||
signature = "MShift v0.01" ; signature is expected to be 7 or more characters.
|
signature = "MShift v0.01" ; signature is expected to be 7 or more characters.
|
||||||
|
|
||||||
[Constants]
|
[Constants]
|
||||||
|
@ -40,9 +47,9 @@ enable2ndByteCanID = false
|
||||||
|
|
||||||
; see PAGE_0_SIZE in C source code
|
; see PAGE_0_SIZE in C source code
|
||||||
; CONFIG_DEFINITION_START
|
; CONFIG_DEFINITION_START
|
||||||
; this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Wed Nov 18 19:07:01 EST 2015
|
; this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Tue Dec 01 20:29:19 EST 2015
|
||||||
|
|
||||||
pageSize = 15288
|
pageSize = 16088
|
||||||
page = 1
|
page = 1
|
||||||
engineType = bits, S32, 0, [0:2], "AUDI_AAN", "DODGE_NEON_1995", "FORD_ASPIRE_1996", "FORD_FIESTA", "NISSAN_PRIMERA", "HONDA_ACCORD", "FORD_INLINE_6_1995", "GY6_139QMB"
|
engineType = bits, S32, 0, [0:2], "AUDI_AAN", "DODGE_NEON_1995", "FORD_ASPIRE_1996", "FORD_FIESTA", "NISSAN_PRIMERA", "HONDA_ACCORD", "FORD_INLINE_6_1995", "GY6_139QMB"
|
||||||
;skipping headerMagicValue offset 4
|
;skipping headerMagicValue offset 4
|
||||||
|
@ -114,7 +121,7 @@ page = 1
|
||||||
fanOffTemperature = scalar, F32, 480, "*C", 1, 0, 0, 1000.0, 2
|
fanOffTemperature = scalar, F32, 480, "*C", 1, 0, 0, 1000.0, 2
|
||||||
fuelLevelSensor = bits, U32, 484, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
|
fuelLevelSensor = bits, U32, 484, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
|
||||||
vehicleSpeedCoef = scalar, F32, 488, "coef", 1, 0, 0.01, 2000.0, 2
|
vehicleSpeedCoef = scalar, F32, 488, "coef", 1, 0, 0.01, 2000.0, 2
|
||||||
canNbcType = bits, U32, 492, [0:1], "BMW", "FIAT", "VAG" , "INVALID"
|
canNbcType = bits, U32, 492, [0:1], "BMW", "FIAT", "VAG" , "MAZDA RX8"
|
||||||
canSleepPeriod = scalar, S32, 496, "ms", 1, 0, 0, 1000.0, 2
|
canSleepPeriod = scalar, S32, 496, "ms", 1, 0, 0, 1000.0, 2
|
||||||
operationMode = bits, U32, 500, [0:1], "INVALID", "4 stroke without cam sensor", "4 stroke with cam sensor", "2 stroke"
|
operationMode = bits, U32, 500, [0:1], "INVALID", "4 stroke without cam sensor", "4 stroke with cam sensor", "2 stroke"
|
||||||
displayMode = bits, U32, 504, [0:1], "none", "hd44780", "hd44780 over pcf8574", "INVALID"
|
displayMode = bits, U32, 504, [0:1], "none", "hd44780", "hd44780 over pcf8574", "INVALID"
|
||||||
|
@ -510,55 +517,59 @@ page = 1
|
||||||
decelEnleanmentMultiplier = scalar, F32, 2204, "coeff", 1, 0, 0, 200, 3
|
decelEnleanmentMultiplier = scalar, F32, 2204, "coeff", 1, 0, 0, 200, 3
|
||||||
mapAccelEnrichmentThreshold = scalar, F32, 2208, "roc", 1, 0, 0, 200, 3
|
mapAccelEnrichmentThreshold = scalar, F32, 2208, "roc", 1, 0, 0, 200, 3
|
||||||
mapAccelEnrichmentMultiplier = scalar, F32, 2212, "coeff", 1, 0, 0, 200, 3
|
mapAccelEnrichmentMultiplier = scalar, F32, 2212, "coeff", 1, 0, 0, 200, 3
|
||||||
le_formulas1 = array, U08, 2216, [200],"char", 1, 0, 0.0, 3.0, 2
|
fatalErrorPin = bits, U32, 2216, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
|
||||||
le_formulas2 = array, U08, 2416, [200],"char", 1, 0, 0.0, 3.0, 2
|
warninigPin = bits, U32, 2220, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
|
||||||
le_formulas3 = array, U08, 2616, [200],"char", 1, 0, 0.0, 3.0, 2
|
configResetPin = bits, U32, 2224, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
|
||||||
le_formulas4 = array, U08, 2816, [200],"char", 1, 0, 0.0, 3.0, 2
|
;skipping unused offset 2228
|
||||||
le_formulas5 = array, U08, 3016, [200],"char", 1, 0, 0.0, 3.0, 2
|
le_formulas1 = array, U08, 3016, [200],"char", 1, 0, 0.0, 3.0, 2
|
||||||
le_formulas6 = array, U08, 3216, [200],"char", 1, 0, 0.0, 3.0, 2
|
le_formulas2 = array, U08, 3216, [200],"char", 1, 0, 0.0, 3.0, 2
|
||||||
le_formulas7 = array, U08, 3416, [200],"char", 1, 0, 0.0, 3.0, 2
|
le_formulas3 = array, U08, 3416, [200],"char", 1, 0, 0.0, 3.0, 2
|
||||||
le_formulas8 = array, U08, 3616, [200],"char", 1, 0, 0.0, 3.0, 2
|
le_formulas4 = array, U08, 3616, [200],"char", 1, 0, 0.0, 3.0, 2
|
||||||
le_formulas9 = array, U08, 3816, [200],"char", 1, 0, 0.0, 3.0, 2
|
le_formulas5 = array, U08, 3816, [200],"char", 1, 0, 0.0, 3.0, 2
|
||||||
le_formulas10 = array, U08, 4016, [200],"char", 1, 0, 0.0, 3.0, 2
|
le_formulas6 = array, U08, 4016, [200],"char", 1, 0, 0.0, 3.0, 2
|
||||||
le_formulas11 = array, U08, 4216, [200],"char", 1, 0, 0.0, 3.0, 2
|
le_formulas7 = array, U08, 4216, [200],"char", 1, 0, 0.0, 3.0, 2
|
||||||
le_formulas12 = array, U08, 4416, [200],"char", 1, 0, 0.0, 3.0, 2
|
le_formulas8 = array, U08, 4416, [200],"char", 1, 0, 0.0, 3.0, 2
|
||||||
le_formulas13 = array, U08, 4616, [200],"char", 1, 0, 0.0, 3.0, 2
|
le_formulas9 = array, U08, 4616, [200],"char", 1, 0, 0.0, 3.0, 2
|
||||||
le_formulas14 = array, U08, 4816, [200],"char", 1, 0, 0.0, 3.0, 2
|
le_formulas10 = array, U08, 4816, [200],"char", 1, 0, 0.0, 3.0, 2
|
||||||
le_formulas15 = array, U08, 5016, [200],"char", 1, 0, 0.0, 3.0, 2
|
le_formulas11 = array, U08, 5016, [200],"char", 1, 0, 0.0, 3.0, 2
|
||||||
le_formulas16 = array, U08, 5216, [200],"char", 1, 0, 0.0, 3.0, 2
|
le_formulas12 = array, U08, 5216, [200],"char", 1, 0, 0.0, 3.0, 2
|
||||||
timingMultiplier = array, U08, 5416, [200],"char", 1, 0, 0.0, 3.0, 2
|
le_formulas13 = array, U08, 5416, [200],"char", 1, 0, 0.0, 3.0, 2
|
||||||
timingAdditive = array, U08, 5616, [200],"char", 1, 0, 0.0, 3.0, 2
|
le_formulas14 = array, U08, 5616, [200],"char", 1, 0, 0.0, 3.0, 2
|
||||||
cltFuelCorrBins = array, F32, 5816, [16], "C", 1, 0, -100.0, 250.0, 2
|
le_formulas15 = array, U08, 5816, [200],"char", 1, 0, 0.0, 3.0, 2
|
||||||
cltFuelCorr = array, F32, 5880, [16], "%", 1, 0, 0.0, 500.0, 2
|
le_formulas16 = array, U08, 6016, [200],"char", 1, 0, 0.0, 3.0, 2
|
||||||
iatFuelCorrBins = array, F32, 5944, [16], "C", 1, 0, -100.0, 250.0, 2
|
timingMultiplier = array, U08, 6216, [200],"char", 1, 0, 0.0, 3.0, 2
|
||||||
iatFuelCorr = array, F32, 6008, [16], "%", 1, 0, 0.0, 500.0, 2
|
timingAdditive = array, U08, 6416, [200],"char", 1, 0, 0.0, 3.0, 2
|
||||||
crankingFuelCoef = array, F32, 6072, [8], "%", 1, 0, 0.0, 700.0, 2
|
cltFuelCorrBins = array, F32, 6616, [16], "C", 1, 0, -100.0, 250.0, 2
|
||||||
crankingFuelBins = array, F32, 6104, [8], "C", 1, 0, -80.0, 170.0, 2
|
cltFuelCorr = array, F32, 6680, [16], "%", 1, 0, 0.0, 500.0, 2
|
||||||
crankingCycleCoef = array, F32, 6136, [8], "%", 1, 0, 0.0, 500.0, 2
|
iatFuelCorrBins = array, F32, 6744, [16], "C", 1, 0, -100.0, 250.0, 2
|
||||||
crankingCycleBins = array, F32, 6168, [8], "C", 1, 0, -80.0, 170.0, 2
|
iatFuelCorr = array, F32, 6808, [16], "%", 1, 0, 0.0, 500.0, 2
|
||||||
cltIdleCorrBins = array, F32, 6200, [16], "C", 1, 0, -100.0, 250.0, 2
|
crankingFuelCoef = array, F32, 6872, [8], "%", 1, 0, 0.0, 700.0, 2
|
||||||
cltIdleCorr = array, F32, 6264, [16], "%", 1, 0, 0.0, 500.0, 2
|
crankingFuelBins = array, F32, 6904, [8], "C", 1, 0, -80.0, 170.0, 2
|
||||||
mafDecoding = array, F32, 6328, [256], "kg/hour", 1, 0, -500.0, 4000.0, 2
|
crankingCycleCoef = array, F32, 6936, [8], "%", 1, 0, 0.0, 500.0, 2
|
||||||
mafDecodingBins = array, F32, 7352, [256], "V", 1, 0, -5.0, 150.0, 2
|
crankingCycleBins = array, F32, 6968, [8], "C", 1, 0, -80.0, 170.0, 2
|
||||||
ignitionIatCorrTable = array, F32, 8376, [16x16],"deg", 1, 0, -720, 720, 2
|
cltIdleCorrBins = array, F32, 7000, [16], "C", 1, 0, -100.0, 250.0, 2
|
||||||
ignitionIatCorrLoadBins = array, F32, 9400, [16], "Load", 1, 0.0, 0, 300.0, 2
|
cltIdleCorr = array, F32, 7064, [16], "%", 1, 0, 0.0, 500.0, 2
|
||||||
ignitionIatCorrRpmBins = array, F32, 9464, [16], "RPM", 1, 0.0, 0, 18000.0, 2
|
mafDecoding = array, F32, 7128, [256], "kg/hour", 1, 0, -500.0, 4000.0, 2
|
||||||
injectionPhase = array, F32, 9528, [16x16],"deg", 1, 0, -720, 720, 2
|
mafDecodingBins = array, F32, 8152, [256], "V", 1, 0, -5.0, 150.0, 2
|
||||||
injPhaseLoadBins = array, F32, 10552, [16], "Load", 1, 0.0, 0, 300.0, 2
|
ignitionIatCorrTable = array, F32, 9176, [16x16],"deg", 1, 0, -720, 720, 2
|
||||||
injPhaseRpmBins = array, F32, 10616, [16], "RPM", 1, 0.0, 0, 18000.0, 2
|
ignitionIatCorrLoadBins = array, F32, 10200, [16], "Load", 1, 0.0, 0, 300.0, 2
|
||||||
fuelTable = array, F32, 10680, [16x16],"ms", 1, 0, 0.0, 300.0, 2
|
ignitionIatCorrRpmBins = array, F32, 10264, [16], "RPM", 1, 0.0, 0, 18000.0, 2
|
||||||
fuelLoadBins = array, F32, 11704, [16], "V", 1, 0, 0.0, 300.0, 2
|
injectionPhase = array, F32, 10328, [16x16],"deg", 1, 0, -720, 720, 2
|
||||||
fuelRpmBins = array, F32, 11768, [16], "RPM", 1, 0, 0.0, 25500.0, 2
|
injPhaseLoadBins = array, F32, 11352, [16], "Load", 1, 0.0, 0, 300.0, 2
|
||||||
ignitionTable = array, F32, 11832, [16x16],"deg", 1, 0, -720, 720, 2
|
injPhaseRpmBins = array, F32, 11416, [16], "RPM", 1, 0.0, 0, 18000.0, 2
|
||||||
ignitionLoadBins = array, F32, 12856, [16], "Load", 1, 0.0, 0, 300.0, 2
|
fuelTable = array, F32, 11480, [16x16],"ms", 1, 0, 0.0, 300.0, 2
|
||||||
ignitionRpmBins = array, F32, 12920, [16], "RPM", 1, 0.0, 0, 18000.0, 2
|
fuelLoadBins = array, F32, 12504, [16], "V", 1, 0, 0.0, 300.0, 2
|
||||||
veTable = array, F32, 12984, [16x16],"%", 1, 0, 0, 999.0, 2
|
fuelRpmBins = array, F32, 12568, [16], "RPM", 1, 0, 0.0, 25500.0, 2
|
||||||
veLoadBins = array, F32, 14008, [16], "%", 1, 0.0, 0, 300.0, 2
|
ignitionTable = array, F32, 12632, [16x16],"deg", 1, 0, -720, 720, 2
|
||||||
veRpmBins = array, F32, 14072, [16], "RPM", 1, 0.0, 0, 18000.0, 2
|
ignitionLoadBins = array, F32, 13656, [16], "Load", 1, 0.0, 0, 300.0, 2
|
||||||
afrTable = array, F32, 14136, [16x16],"deg", 1, 0, 0, 25.0, 2
|
ignitionRpmBins = array, F32, 13720, [16], "RPM", 1, 0.0, 0, 18000.0, 2
|
||||||
afrLoadBins = array, F32, 15160, [16], "%", 1, 0.0, 0, 300.0, 2
|
veTable = array, F32, 13784, [16x16],"%", 1, 0, 0, 999.0, 2
|
||||||
afrRpmBins = array, F32, 15224, [16], "RPM", 1, 0.0, 0, 18000.0, 2
|
veLoadBins = array, F32, 14808, [16], "%", 1, 0.0, 0, 300.0, 2
|
||||||
; total TS size = 15288
|
veRpmBins = array, F32, 14872, [16], "RPM", 1, 0.0, 0, 18000.0, 2
|
||||||
|
afrTable = array, F32, 14936, [16x16],"deg", 1, 0, 0, 25.0, 2
|
||||||
|
afrLoadBins = array, F32, 15960, [16], "%", 1, 0.0, 0, 300.0, 2
|
||||||
|
afrRpmBins = array, F32, 16024, [16], "RPM", 1, 0.0, 0, 18000.0, 2
|
||||||
|
; total TS size = 16088
|
||||||
; CONFIG_DEFINITION_END
|
; CONFIG_DEFINITION_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -606,7 +617,12 @@ page = 1
|
||||||
; see TS_FILE_VERSION in firmware code
|
; see TS_FILE_VERSION in firmware code
|
||||||
fileVersion = { 20150625 }
|
fileVersion = { 20150625 }
|
||||||
|
|
||||||
|
#if CAN_COMMANDS
|
||||||
|
;full version that works anywhere - be sure to change the no. bytes requested
|
||||||
|
ochGetCommand = "r\x00\x07\x00\x00\x01\x98"
|
||||||
|
#else
|
||||||
ochGetCommand = "O"
|
ochGetCommand = "O"
|
||||||
|
#endif
|
||||||
|
|
||||||
; see OUTPUT_CHANNELS_SIZE in console source code
|
; see OUTPUT_CHANNELS_SIZE in console source code
|
||||||
ochBlockSize = 196
|
ochBlockSize = 196
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<component name="libraryTable">
|
<component name="libraryTable">
|
||||||
<library name="jcip-annotations-1.0">
|
<library name="jcip-annotations">
|
||||||
<CLASSES>
|
<CLASSES>
|
||||||
<root url="jar://$PROJECT_DIR$/lib/jcip-annotations-1.0.jar!/" />
|
<root url="jar://$PROJECT_DIR$/lib/jcip-annotations-1.0.jar!/" />
|
||||||
</CLASSES>
|
</CLASSES>
|
|
@ -0,0 +1,15 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="jlatexmath">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/lib/jlatexmath-1.0.3.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/lib/jlatexmath-src-1.0.3.zip!/jlatexmath-1.0.3/examples/Basic" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/lib/jlatexmath-src-1.0.3.zip!/jlatexmath-1.0.3/examples/Export" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/lib/jlatexmath-src-1.0.3.zip!/jlatexmath-1.0.3/examples/GIWS/src" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/lib/jlatexmath-src-1.0.3.zip!/jlatexmath-1.0.3/examples/Macros" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/lib/jlatexmath-src-1.0.3.zip!/jlatexmath-1.0.3/src" />
|
||||||
|
</SOURCES>
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -1,5 +1,5 @@
|
||||||
<component name="libraryTable">
|
<component name="libraryTable">
|
||||||
<library name="miglayout-4.0">
|
<library name="miglayout">
|
||||||
<CLASSES>
|
<CLASSES>
|
||||||
<root url="jar://$PROJECT_DIR$/lib/miglayout-4.0.jar!/" />
|
<root url="jar://$PROJECT_DIR$/lib/miglayout-4.0.jar!/" />
|
||||||
</CLASSES>
|
</CLASSES>
|
|
@ -1,5 +1,5 @@
|
||||||
<component name="libraryTable">
|
<component name="libraryTable">
|
||||||
<library name="swing-layout-1.0">
|
<library name="swing-layout">
|
||||||
<CLASSES>
|
<CLASSES>
|
||||||
<root url="jar://$PROJECT_DIR$/lib/swing-layout-1.0.jar!/" />
|
<root url="jar://$PROJECT_DIR$/lib/swing-layout-1.0.jar!/" />
|
||||||
</CLASSES>
|
</CLASSES>
|
|
@ -8,7 +8,7 @@
|
||||||
<target name="compile">
|
<target name="compile">
|
||||||
<mkdir dir="build/classes"/>
|
<mkdir dir="build/classes"/>
|
||||||
<javac debug="yes" destdir="build/classes"
|
<javac debug="yes" destdir="build/classes"
|
||||||
classpath="lib/jcip-annotations-1.0.jar:lib/swing-layout-1.0.jar:lib/jep.jar:lib/log4j.jar:lib/junit.jar:lib/jssc.jar:lib/SteelSeries-3.9.30.jar:lib/annotations.jar:lib/miglayout-4.0.jar:lib/surfaceplotter-2.0.1.jar">
|
classpath="lib/jcip-annotations-1.0.jar:lib/jlatexmath-1.0.3.jar:lib/swing-layout-1.0.jar:lib/jep.jar:lib/log4j.jar:lib/junit.jar:lib/jssc.jar:lib/SteelSeries-3.9.30.jar:lib/annotations.jar:lib/miglayout-4.0.jar:lib/surfaceplotter-2.0.1.jar">
|
||||||
<src path="autotest/src"/>
|
<src path="autotest/src"/>
|
||||||
<src path="io/src"/>
|
<src path="io/src"/>
|
||||||
<src path="models/src"/>
|
<src path="models/src"/>
|
||||||
|
@ -68,6 +68,7 @@
|
||||||
<zipfileset src="lib/batik/batik-svggen.jar" includes="**/*.class"/>
|
<zipfileset src="lib/batik/batik-svggen.jar" includes="**/*.class"/>
|
||||||
<zipfileset src="lib/batik/batik-awt-util.jar" includes="**/*.class"/>
|
<zipfileset src="lib/batik/batik-awt-util.jar" includes="**/*.class"/>
|
||||||
<zipfileset src="lib/batik/batik-util.jar" includes="**/*.class"/>
|
<zipfileset src="lib/batik/batik-util.jar" includes="**/*.class"/>
|
||||||
|
<zipfileset src="lib/jlatexmath-1.0.3.jar" includes="**/*.class"/>
|
||||||
</jar>
|
</jar>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,6 @@
|
||||||
<orderEntry type="library" name="junit" level="project" />
|
<orderEntry type="library" name="junit" level="project" />
|
||||||
<orderEntry type="module" module-name="models" />
|
<orderEntry type="module" module-name="models" />
|
||||||
<orderEntry type="module" module-name="logging" exported="" />
|
<orderEntry type="module" module-name="logging" exported="" />
|
||||||
<orderEntry type="library" name="jcip-annotations-1.0" level="project" />
|
<orderEntry type="library" name="jcip-annotations" level="project" />
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
|
@ -1,5 +1,5 @@
|
||||||
package com.rusefi;
|
package com.rusefi;
|
||||||
|
|
||||||
public interface TsPageSize {
|
public interface TsPageSize {
|
||||||
int IMAGE_SIZE = 15288;
|
int IMAGE_SIZE = 16088;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,8 @@ import static com.rusefi.binaryprotocol.IoHelper.*;
|
||||||
* 3/6/2015
|
* 3/6/2015
|
||||||
*/
|
*/
|
||||||
public class BinaryProtocol {
|
public class BinaryProtocol {
|
||||||
private static final int OUTPUT_CHANNELS_SIZE = 196;
|
// todo: is this auto-synched with rusefi.ini?
|
||||||
|
public static final int OUTPUT_CHANNELS_SIZE = 196;
|
||||||
|
|
||||||
private static final int BLOCKING_FACTOR = 256;
|
private static final int BLOCKING_FACTOR = 256;
|
||||||
private static final byte RESPONSE_OK = 0;
|
private static final byte RESPONSE_OK = 0;
|
||||||
|
@ -51,6 +52,10 @@ public class BinaryProtocol {
|
||||||
public static final char COMMAND_HELLO = 'S';
|
public static final char COMMAND_HELLO = 'S';
|
||||||
public static final char COMMAND_PROTOCOL = 'F';
|
public static final char COMMAND_PROTOCOL = 'F';
|
||||||
public static final char COMMAND_CRC_CHECK_COMMAND = 'k';
|
public static final char COMMAND_CRC_CHECK_COMMAND = 'k';
|
||||||
|
public static final char COMMAND_PAGE = 'P';
|
||||||
|
public static final char COMMAND_READ = 'R';
|
||||||
|
public static final char COMMAND_CHUNK_WRITE = 'C';
|
||||||
|
public static final char COMMAND_BURN = 'B';
|
||||||
|
|
||||||
private final Logger logger;
|
private final Logger logger;
|
||||||
private final IoStream stream;
|
private final IoStream stream;
|
||||||
|
@ -65,6 +70,8 @@ public class BinaryProtocol {
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public static BinaryProtocol instance;
|
public static BinaryProtocol instance;
|
||||||
public boolean isClosed;
|
public boolean isClosed;
|
||||||
|
// todo: make a singleton?
|
||||||
|
public static byte[] currentOutputs;
|
||||||
|
|
||||||
public BinaryProtocol(final Logger logger, IoStream stream) {
|
public BinaryProtocol(final Logger logger, IoStream stream) {
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
|
@ -269,7 +276,7 @@ public class BinaryProtocol {
|
||||||
byte[] packet = new byte[packetSize];
|
byte[] packet = new byte[packetSize];
|
||||||
incomingData.getData(packet);
|
incomingData.getData(packet);
|
||||||
int packetCrc = swap32(incomingData.getInt());
|
int packetCrc = swap32(incomingData.getInt());
|
||||||
int actualCrc = crc32(packet);
|
int actualCrc = getCrc32(packet);
|
||||||
|
|
||||||
boolean isCrcOk = actualCrc == packetCrc;
|
boolean isCrcOk = actualCrc == packetCrc;
|
||||||
if (!isCrcOk) {
|
if (!isCrcOk) {
|
||||||
|
@ -298,7 +305,7 @@ public class BinaryProtocol {
|
||||||
int requestSize = Math.min(remainingSize, BLOCKING_FACTOR);
|
int requestSize = Math.min(remainingSize, BLOCKING_FACTOR);
|
||||||
|
|
||||||
byte packet[] = new byte[7];
|
byte packet[] = new byte[7];
|
||||||
packet[0] = 'R';
|
packet[0] = COMMAND_READ;
|
||||||
putShort(packet, 1, 0); // page
|
putShort(packet, 1, 0); // page
|
||||||
putShort(packet, 3, swap16(offset));
|
putShort(packet, 3, swap16(offset));
|
||||||
putShort(packet, 5, swap16(requestSize));
|
putShort(packet, 5, swap16(requestSize));
|
||||||
|
@ -357,7 +364,7 @@ public class BinaryProtocol {
|
||||||
isBurnPending = true;
|
isBurnPending = true;
|
||||||
|
|
||||||
byte packet[] = new byte[7 + size];
|
byte packet[] = new byte[7 + size];
|
||||||
packet[0] = 'C';
|
packet[0] = COMMAND_CHUNK_WRITE;
|
||||||
putShort(packet, 1, 0); // page
|
putShort(packet, 1, 0); // page
|
||||||
putShort(packet, 3, swap16(offset));
|
putShort(packet, 3, swap16(offset));
|
||||||
putShort(packet, 5, swap16(size));
|
putShort(packet, 5, swap16(size));
|
||||||
|
@ -383,7 +390,7 @@ public class BinaryProtocol {
|
||||||
while (true) {
|
while (true) {
|
||||||
if (isClosed)
|
if (isClosed)
|
||||||
return;
|
return;
|
||||||
byte[] response = executeCommand(new byte[]{'B'}, "burn", false);
|
byte[] response = executeCommand(new byte[]{COMMAND_BURN}, "burn", false);
|
||||||
if (!checkResponseCode(response, RESPONSE_BURN_OK) || response.length != 1) {
|
if (!checkResponseCode(response, RESPONSE_BURN_OK) || response.length != 1) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -461,6 +468,8 @@ public class BinaryProtocol {
|
||||||
if (response == null || response.length != (OUTPUT_CHANNELS_SIZE + 1) || response[0] != RESPONSE_OK)
|
if (response == null || response.length != (OUTPUT_CHANNELS_SIZE + 1) || response[0] != RESPONSE_OK)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
currentOutputs = response;
|
||||||
|
|
||||||
for (Sensor sensor : Sensor.values()) {
|
for (Sensor sensor : Sensor.values()) {
|
||||||
if (sensor.getType() == FieldType.FLOAT) {
|
if (sensor.getType() == FieldType.FLOAT) {
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ public class IncomingDataBuffer {
|
||||||
logger.trace(freshData.length + " byte(s) arrived");
|
logger.trace(freshData.length + " byte(s) arrived");
|
||||||
synchronized (cbb) {
|
synchronized (cbb) {
|
||||||
if (cbb.size() - cbb.length() < freshData.length) {
|
if (cbb.size() - cbb.length() < freshData.length) {
|
||||||
logger.error("buffer overflow not expected");
|
logger.error("IncomingDataBuffer: buffer overflow not expected");
|
||||||
cbb.clear();
|
cbb.clear();
|
||||||
}
|
}
|
||||||
cbb.put(freshData);
|
cbb.put(freshData);
|
||||||
|
|
|
@ -9,9 +9,13 @@ import java.util.zip.CRC32;
|
||||||
* 3/6/2015
|
* 3/6/2015
|
||||||
*/
|
*/
|
||||||
public class IoHelper {
|
public class IoHelper {
|
||||||
public static int crc32(byte[] packet) {
|
public static int getCrc32(byte[] packet) {
|
||||||
|
return getCrc32(packet, 0, packet.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getCrc32(byte[] packet, int offset, int length) {
|
||||||
CRC32 c = new CRC32();
|
CRC32 c = new CRC32();
|
||||||
c.update(packet);
|
c.update(packet, offset, length);
|
||||||
return (int) c.getValue();
|
return (int) c.getValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +29,7 @@ public class IoHelper {
|
||||||
packet[1] = (byte) command.length;
|
packet[1] = (byte) command.length;
|
||||||
|
|
||||||
System.arraycopy(command, 0, packet, 2, command.length);
|
System.arraycopy(command, 0, packet, 2, command.length);
|
||||||
int crc = crc32(command);
|
int crc = getCrc32(command);
|
||||||
|
|
||||||
putInt(packet, packet.length - 4, crc);
|
putInt(packet, packet.length - 4, crc);
|
||||||
return packet;
|
return packet;
|
||||||
|
|
|
@ -17,11 +17,11 @@ public class CRCTest {
|
||||||
public void testCrc() {
|
public void testCrc() {
|
||||||
{
|
{
|
||||||
byte[] a = {'A'};
|
byte[] a = {'A'};
|
||||||
assertEquals(0xD3D99E8B, IoHelper.crc32(a));
|
assertEquals(0xD3D99E8B, IoHelper.getCrc32(a));
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
byte[] a = {'S'};
|
byte[] a = {'S'};
|
||||||
assertEquals(0x2060EFC3, IoHelper.crc32(a));
|
assertEquals(0x2060EFC3, IoHelper.getCrc32(a));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,10 +4,7 @@ import com.rusefi.FileLog;
|
||||||
import com.rusefi.binaryprotocol.BinaryProtocol;
|
import com.rusefi.binaryprotocol.BinaryProtocol;
|
||||||
import com.rusefi.binaryprotocol.IoHelper;
|
import com.rusefi.binaryprotocol.IoHelper;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.*;
|
||||||
import java.io.DataInputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.net.ServerSocket;
|
import java.net.ServerSocket;
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
|
|
||||||
|
@ -86,11 +83,11 @@ public class BinaryProtocolServer {
|
||||||
System.out.println("Got [" + (char) command + "/" + command + "] command");
|
System.out.println("Got [" + (char) command + "/" + command + "] command");
|
||||||
|
|
||||||
int crc = in.readInt();
|
int crc = in.readInt();
|
||||||
if (crc != IoHelper.crc32(packet))
|
if (crc != IoHelper.getCrc32(packet))
|
||||||
throw new IllegalStateException("CRC mismatch");
|
throw new IllegalStateException("CRC mismatch");
|
||||||
|
|
||||||
|
|
||||||
TcpIoStream stream = new TcpIoStream(clientSocket.getOutputStream(), null);
|
TcpIoStream stream = new TcpIoStream(clientSocket.getInputStream(), clientSocket.getOutputStream());
|
||||||
if (command == BinaryProtocol.COMMAND_HELLO) {
|
if (command == BinaryProtocol.COMMAND_HELLO) {
|
||||||
BinaryProtocol.sendCrcPacket((TS_OK + TS_SIGNATURE).getBytes(), FileLog.LOGGER, stream);
|
BinaryProtocol.sendCrcPacket((TS_OK + TS_SIGNATURE).getBytes(), FileLog.LOGGER, stream);
|
||||||
} else if (command == BinaryProtocol.COMMAND_PROTOCOL) {
|
} else if (command == BinaryProtocol.COMMAND_PROTOCOL) {
|
||||||
|
@ -99,12 +96,42 @@ public class BinaryProtocolServer {
|
||||||
} else if (command == BinaryProtocol.COMMAND_CRC_CHECK_COMMAND) {
|
} else if (command == BinaryProtocol.COMMAND_CRC_CHECK_COMMAND) {
|
||||||
short page = dis.readShort();
|
short page = dis.readShort();
|
||||||
short offset = dis.readShort();
|
short offset = dis.readShort();
|
||||||
short count = dis.readShort();
|
short count = dis.readShort(); // no swap here? interesting!
|
||||||
System.out.println("CRC check " + page + "/" + offset + "/" + count);
|
System.out.println("CRC check " + page + "/" + offset + "/" + count);
|
||||||
|
BinaryProtocol bp = BinaryProtocol.instance;
|
||||||
|
int result = IoHelper.getCrc32(bp.getController().getContent(), offset, count);
|
||||||
|
ByteArrayOutputStream response = new ByteArrayOutputStream();
|
||||||
|
response.write(TS_OK.charAt(0));
|
||||||
|
new DataOutputStream(response).write(result);
|
||||||
|
BinaryProtocol.sendCrcPacket(response.toByteArray(), FileLog.LOGGER, stream);
|
||||||
|
} else if (command == BinaryProtocol.COMMAND_PAGE) {
|
||||||
|
BinaryProtocol.sendCrcPacket(TS_OK.getBytes(), FileLog.LOGGER, stream);
|
||||||
|
} else if (command == BinaryProtocol.COMMAND_READ) {
|
||||||
|
short page = dis.readShort();
|
||||||
|
short offset = swap16(dis.readShort());
|
||||||
|
short count = swap16(dis.readShort());
|
||||||
|
System.out.println("read " + page + "/" + offset + "/" + count);
|
||||||
|
BinaryProtocol bp = BinaryProtocol.instance;
|
||||||
|
|
||||||
|
byte[] response = new byte[1 + count];
|
||||||
|
response[0] = (byte) TS_OK.charAt(0);
|
||||||
|
System.arraycopy(bp.getController().getContent(), offset, response, 1, count);
|
||||||
|
BinaryProtocol.sendCrcPacket(response, FileLog.LOGGER, stream);
|
||||||
|
} else if (command == BinaryProtocol.COMMAND_OUTPUTS) {
|
||||||
|
|
||||||
|
byte[] response = new byte[1 + BinaryProtocol.OUTPUT_CHANNELS_SIZE];
|
||||||
|
response[0] = (byte) TS_OK.charAt(0);
|
||||||
|
byte[] currentOutputs = BinaryProtocol.currentOutputs;
|
||||||
|
if (currentOutputs != null)
|
||||||
|
System.arraycopy(currentOutputs, 1, response, 1, BinaryProtocol.OUTPUT_CHANNELS_SIZE);
|
||||||
|
BinaryProtocol.sendCrcPacket(response, FileLog.LOGGER, stream);
|
||||||
|
} else {
|
||||||
|
FileLog.MAIN.logLine("Error: unknown command " + command);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static short swap16(short x) {
|
||||||
|
return (short) (((x) << 8) | ((x) >> 8));
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -100,7 +100,7 @@ public class TcpConnector implements LinkConnector {
|
||||||
};
|
};
|
||||||
// ioStream.setDataListener(listener1);
|
// ioStream.setDataListener(listener1);
|
||||||
|
|
||||||
bp = new BinaryProtocol(FileLog.LOGGER, new TcpIoStream(os, stream));
|
bp = new BinaryProtocol(FileLog.LOGGER, new TcpIoStream(stream, os));
|
||||||
|
|
||||||
boolean result = bp.connectAndReadConfiguration(listener1);
|
boolean result = bp.connectAndReadConfiguration(listener1);
|
||||||
if (result) {
|
if (result) {
|
||||||
|
|
|
@ -5,7 +5,6 @@ import com.rusefi.io.DataListener;
|
||||||
import com.rusefi.io.IoStream;
|
import com.rusefi.io.IoStream;
|
||||||
import com.rusefi.io.LinkManager;
|
import com.rusefi.io.LinkManager;
|
||||||
|
|
||||||
import java.io.BufferedInputStream;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
|
@ -15,12 +14,16 @@ import java.io.OutputStream;
|
||||||
* 5/11/2015.
|
* 5/11/2015.
|
||||||
*/
|
*/
|
||||||
public class TcpIoStream implements IoStream {
|
public class TcpIoStream implements IoStream {
|
||||||
private final OutputStream os;
|
private final InputStream input;
|
||||||
private final InputStream stream;
|
private final OutputStream output;
|
||||||
|
|
||||||
public TcpIoStream(OutputStream os, InputStream stream) {
|
public TcpIoStream(InputStream input, OutputStream output) {
|
||||||
this.os = os;
|
if (input == null)
|
||||||
this.stream = stream;
|
throw new NullPointerException("input");
|
||||||
|
if (output == null)
|
||||||
|
throw new NullPointerException("output");
|
||||||
|
this.output = output;
|
||||||
|
this.input = input;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -30,8 +33,8 @@ public class TcpIoStream implements IoStream {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void write(byte[] bytes) throws IOException {
|
public void write(byte[] bytes) throws IOException {
|
||||||
os.write(bytes);
|
output.write(bytes);
|
||||||
os.flush();
|
output.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -50,13 +53,12 @@ public class TcpIoStream implements IoStream {
|
||||||
byte b[] = new byte[1];
|
byte b[] = new byte[1];
|
||||||
while (true) {
|
while (true) {
|
||||||
try {
|
try {
|
||||||
int result = stream.read(b);
|
int result = input.read(b);
|
||||||
if (result == -1) {
|
if (result == -1)
|
||||||
System.err.println("End of stream?");
|
throw new IOException("TcpIoStream: End of input?");
|
||||||
}
|
|
||||||
listener.onDataArrived(b);
|
listener.onDataArrived(b);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
System.err.println("End of connection");
|
System.err.println("TcpIoStream: End of connection");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,20 @@
|
||||||
package com.rusefi.io.tcp.test;
|
package com.rusefi.io.tcp.test;
|
||||||
|
|
||||||
|
import com.rusefi.ConfigurationImage;
|
||||||
|
import com.rusefi.FileLog;
|
||||||
|
import com.rusefi.binaryprotocol.BinaryProtocol;
|
||||||
import com.rusefi.io.tcp.BinaryProtocolServer;
|
import com.rusefi.io.tcp.BinaryProtocolServer;
|
||||||
|
import com.rusefi.io.tcp.TcpIoStream;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
|
||||||
class BinaryProtocolServerSandbox {
|
class BinaryProtocolServerSandbox {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
TcpIoStream stream = new TcpIoStream(new ByteArrayInputStream(new byte[0]), new ByteArrayOutputStream());
|
||||||
|
BinaryProtocol.instance = new BinaryProtocol(FileLog.LOGGER, stream);
|
||||||
|
BinaryProtocol.instance.setController(new ConfigurationImage(new byte[14008]));
|
||||||
|
BinaryProtocol.currentOutputs = new byte[1 + BinaryProtocol.OUTPUT_CHANNELS_SIZE];
|
||||||
BinaryProtocolServer.start();
|
BinaryProtocolServer.start();
|
||||||
}
|
}
|
||||||
}
|
}
|
Binary file not shown.
Binary file not shown.
|
@ -1,6 +1,6 @@
|
||||||
package com.rusefi.config;
|
package com.rusefi.config;
|
||||||
|
|
||||||
// this file was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Wed Nov 18 19:07:01 EST 2015
|
// this file was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Tue Dec 01 20:29:19 EST 2015
|
||||||
public class Fields {
|
public class Fields {
|
||||||
public static final Field ENGINETYPE = new Field("ENGINETYPE", 0, FieldType.INT);
|
public static final Field ENGINETYPE = new Field("ENGINETYPE", 0, FieldType.INT);
|
||||||
public static final Field HEADERMAGICVALUE = new Field("HEADERMAGICVALUE", 4, FieldType.INT);
|
public static final Field HEADERMAGICVALUE = new Field("HEADERMAGICVALUE", 4, FieldType.INT);
|
||||||
|
@ -454,28 +454,31 @@ public class Fields {
|
||||||
public static final Field DECELENLEANMENTMULTIPLIER = new Field("DECELENLEANMENTMULTIPLIER", 2204, FieldType.FLOAT);
|
public static final Field DECELENLEANMENTMULTIPLIER = new Field("DECELENLEANMENTMULTIPLIER", 2204, FieldType.FLOAT);
|
||||||
public static final Field MAPACCELENRICHMENTTHRESHOLD = new Field("MAPACCELENRICHMENTTHRESHOLD", 2208, FieldType.FLOAT);
|
public static final Field MAPACCELENRICHMENTTHRESHOLD = new Field("MAPACCELENRICHMENTTHRESHOLD", 2208, FieldType.FLOAT);
|
||||||
public static final Field MAPACCELENRICHMENTMULTIPLIER = new Field("MAPACCELENRICHMENTMULTIPLIER", 2212, FieldType.FLOAT);
|
public static final Field MAPACCELENRICHMENTMULTIPLIER = new Field("MAPACCELENRICHMENTMULTIPLIER", 2212, FieldType.FLOAT);
|
||||||
public static final Field LE_FORMULAS1 = new Field("LE_FORMULAS1", 2216, FieldType.INT);
|
public static final Field FATALERRORPIN = new Field("FATALERRORPIN", 2216, FieldType.INT, brain_pin_e);
|
||||||
public static final Field LE_FORMULAS2 = new Field("LE_FORMULAS2", 2416, FieldType.INT);
|
public static final Field WARNINIGPIN = new Field("WARNINIGPIN", 2220, FieldType.INT, brain_pin_e);
|
||||||
public static final Field LE_FORMULAS3 = new Field("LE_FORMULAS3", 2616, FieldType.INT);
|
public static final Field CONFIGRESETPIN = new Field("CONFIGRESETPIN", 2224, FieldType.INT, brain_pin_e);
|
||||||
public static final Field LE_FORMULAS4 = new Field("LE_FORMULAS4", 2816, FieldType.INT);
|
public static final Field LE_FORMULAS1 = new Field("LE_FORMULAS1", 3016, FieldType.INT);
|
||||||
public static final Field LE_FORMULAS5 = new Field("LE_FORMULAS5", 3016, FieldType.INT);
|
public static final Field LE_FORMULAS2 = new Field("LE_FORMULAS2", 3216, FieldType.INT);
|
||||||
public static final Field LE_FORMULAS6 = new Field("LE_FORMULAS6", 3216, FieldType.INT);
|
public static final Field LE_FORMULAS3 = new Field("LE_FORMULAS3", 3416, FieldType.INT);
|
||||||
public static final Field LE_FORMULAS7 = new Field("LE_FORMULAS7", 3416, FieldType.INT);
|
public static final Field LE_FORMULAS4 = new Field("LE_FORMULAS4", 3616, FieldType.INT);
|
||||||
public static final Field LE_FORMULAS8 = new Field("LE_FORMULAS8", 3616, FieldType.INT);
|
public static final Field LE_FORMULAS5 = new Field("LE_FORMULAS5", 3816, FieldType.INT);
|
||||||
public static final Field LE_FORMULAS9 = new Field("LE_FORMULAS9", 3816, FieldType.INT);
|
public static final Field LE_FORMULAS6 = new Field("LE_FORMULAS6", 4016, FieldType.INT);
|
||||||
public static final Field LE_FORMULAS10 = new Field("LE_FORMULAS10", 4016, FieldType.INT);
|
public static final Field LE_FORMULAS7 = new Field("LE_FORMULAS7", 4216, FieldType.INT);
|
||||||
public static final Field LE_FORMULAS11 = new Field("LE_FORMULAS11", 4216, FieldType.INT);
|
public static final Field LE_FORMULAS8 = new Field("LE_FORMULAS8", 4416, FieldType.INT);
|
||||||
public static final Field LE_FORMULAS12 = new Field("LE_FORMULAS12", 4416, FieldType.INT);
|
public static final Field LE_FORMULAS9 = new Field("LE_FORMULAS9", 4616, FieldType.INT);
|
||||||
public static final Field LE_FORMULAS13 = new Field("LE_FORMULAS13", 4616, FieldType.INT);
|
public static final Field LE_FORMULAS10 = new Field("LE_FORMULAS10", 4816, FieldType.INT);
|
||||||
public static final Field LE_FORMULAS14 = new Field("LE_FORMULAS14", 4816, FieldType.INT);
|
public static final Field LE_FORMULAS11 = new Field("LE_FORMULAS11", 5016, FieldType.INT);
|
||||||
public static final Field LE_FORMULAS15 = new Field("LE_FORMULAS15", 5016, FieldType.INT);
|
public static final Field LE_FORMULAS12 = new Field("LE_FORMULAS12", 5216, FieldType.INT);
|
||||||
public static final Field LE_FORMULAS16 = new Field("LE_FORMULAS16", 5216, FieldType.INT);
|
public static final Field LE_FORMULAS13 = new Field("LE_FORMULAS13", 5416, FieldType.INT);
|
||||||
public static final Field TIMINGMULTIPLIER = new Field("TIMINGMULTIPLIER", 5416, FieldType.INT);
|
public static final Field LE_FORMULAS14 = new Field("LE_FORMULAS14", 5616, FieldType.INT);
|
||||||
public static final Field TIMINGADDITIVE = new Field("TIMINGADDITIVE", 5616, FieldType.INT);
|
public static final Field LE_FORMULAS15 = new Field("LE_FORMULAS15", 5816, FieldType.INT);
|
||||||
public static final Field IGNITIONIATCORRTABLE = new Field("IGNITIONIATCORRTABLE", 8376, FieldType.INT);
|
public static final Field LE_FORMULAS16 = new Field("LE_FORMULAS16", 6016, FieldType.INT);
|
||||||
public static final Field INJECTIONPHASE = new Field("INJECTIONPHASE", 9528, FieldType.INT);
|
public static final Field TIMINGMULTIPLIER = new Field("TIMINGMULTIPLIER", 6216, FieldType.INT);
|
||||||
public static final Field FUELTABLE = new Field("FUELTABLE", 10680, FieldType.INT);
|
public static final Field TIMINGADDITIVE = new Field("TIMINGADDITIVE", 6416, FieldType.INT);
|
||||||
public static final Field IGNITIONTABLE = new Field("IGNITIONTABLE", 11832, FieldType.INT);
|
public static final Field IGNITIONIATCORRTABLE = new Field("IGNITIONIATCORRTABLE", 9176, FieldType.INT);
|
||||||
public static final Field VETABLE = new Field("VETABLE", 12984, FieldType.INT);
|
public static final Field INJECTIONPHASE = new Field("INJECTIONPHASE", 10328, FieldType.INT);
|
||||||
public static final Field AFRTABLE = new Field("AFRTABLE", 14136, FieldType.INT);
|
public static final Field FUELTABLE = new Field("FUELTABLE", 11480, FieldType.INT);
|
||||||
|
public static final Field IGNITIONTABLE = new Field("IGNITIONTABLE", 12632, FieldType.INT);
|
||||||
|
public static final Field VETABLE = new Field("VETABLE", 13784, FieldType.INT);
|
||||||
|
public static final Field AFRTABLE = new Field("AFRTABLE", 14936, FieldType.INT);
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,6 +96,8 @@ public enum Sensor {
|
||||||
temperatureFuelCorrection(SensorCategory.OPERATIONS, FieldType.FLOAT, 164, BackgroundColor.MUD, 0, 5),
|
temperatureFuelCorrection(SensorCategory.OPERATIONS, FieldType.FLOAT, 164, BackgroundColor.MUD, 0, 5),
|
||||||
wallFuelCorrection(SensorCategory.OPERATIONS, FieldType.FLOAT, 168, BackgroundColor.MUD),
|
wallFuelCorrection(SensorCategory.OPERATIONS, FieldType.FLOAT, 168, BackgroundColor.MUD),
|
||||||
idlePosition(SensorCategory.OPERATIONS, FieldType.FLOAT, 172, BackgroundColor.MUD),
|
idlePosition(SensorCategory.OPERATIONS, FieldType.FLOAT, 172, BackgroundColor.MUD),
|
||||||
|
TARGET_AFR(SensorCategory.OPERATIONS, FieldType.FLOAT, 176, BackgroundColor.MUD),
|
||||||
|
CHARGE_AIR_MASS(SensorCategory.OPERATIONS, FieldType.FLOAT, 180, BackgroundColor.MUD),
|
||||||
|
|
||||||
INJ_1_2_DELTA("inj 1-2 delta", SensorCategory.SNIFFING),
|
INJ_1_2_DELTA("inj 1-2 delta", SensorCategory.SNIFFING),
|
||||||
INJ_3_4_DELTA("inj 3-4 delta", SensorCategory.SNIFFING),
|
INJ_3_4_DELTA("inj 3-4 delta", SensorCategory.SNIFFING),
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
<orderEntry type="library" name="log4j" level="project" />
|
<orderEntry type="library" name="log4j" level="project" />
|
||||||
<orderEntry type="library" name="jep" level="project" />
|
<orderEntry type="library" name="jep" level="project" />
|
||||||
<orderEntry type="library" name="swing-layout-1.0" level="project" />
|
<orderEntry type="library" name="swing-layout" level="project" />
|
||||||
<orderEntry type="module" module-name="ui" />
|
<orderEntry type="module" module-name="ui" />
|
||||||
<orderEntry type="module" module-name="io" />
|
<orderEntry type="module" module-name="io" />
|
||||||
<orderEntry type="module" module-name="models" />
|
<orderEntry type="module" module-name="models" />
|
||||||
|
|
|
@ -7,21 +7,21 @@
|
||||||
<ecuid>RUSEFI</ecuid>
|
<ecuid>RUSEFI</ecuid>
|
||||||
<make>rusEfi</make>
|
<make>rusEfi</make>
|
||||||
<model>rusEfi</model>
|
<model>rusEfi</model>
|
||||||
<filesize>15288</filesize>
|
<filesize>16088</filesize>
|
||||||
</romid>
|
</romid>
|
||||||
|
|
||||||
<table type="3D" name="Ignition Advance"
|
<table type="3D" name="Ignition Advance"
|
||||||
category="Ignition"
|
category="Ignition"
|
||||||
storageaddress="2e38"
|
storageaddress="3158"
|
||||||
sizex="16" sizey="16" storagetype="float" endian="big">
|
sizex="16" sizey="16" storagetype="float" endian="big">
|
||||||
<scaling units="Engine Load" expression="x" to_byte="x" format="0.00" fineincrement=".1"
|
<scaling units="Engine Load" expression="x" to_byte="x" format="0.00" fineincrement=".1"
|
||||||
coarseincrement="1"/>
|
coarseincrement="1"/>
|
||||||
<table type="X Axis" storageaddress="3238" storagetype="float" endian="big"
|
<table type="X Axis" storageaddress="3558" storagetype="float" endian="big"
|
||||||
logparam="engine_load">
|
logparam="engine_load">
|
||||||
<scaling units="degree" expression="x" to_byte="x" format="0.00" fineincrement=".1"
|
<scaling units="degree" expression="x" to_byte="x" format="0.00" fineincrement=".1"
|
||||||
coarseincrement="1"/>
|
coarseincrement="1"/>
|
||||||
</table>
|
</table>
|
||||||
<table type="Y Axis" storageaddress="3278" storagetype="float" endian="big"
|
<table type="Y Axis" storageaddress="3598" storagetype="float" endian="big"
|
||||||
logparam="rpm">
|
logparam="rpm">
|
||||||
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
|
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
|
||||||
</table>
|
</table>
|
||||||
|
@ -29,16 +29,16 @@
|
||||||
|
|
||||||
<table type="3D" name="Ignition Advance IAT correction"
|
<table type="3D" name="Ignition Advance IAT correction"
|
||||||
category="Ignition"
|
category="Ignition"
|
||||||
storageaddress="20b8"
|
storageaddress="23d8"
|
||||||
sizex="16" sizey="16" storagetype="float" endian="big">
|
sizex="16" sizey="16" storagetype="float" endian="big">
|
||||||
<scaling units="Engine Load" expression="x" to_byte="x" format="0.00" fineincrement=".1"
|
<scaling units="Engine Load" expression="x" to_byte="x" format="0.00" fineincrement=".1"
|
||||||
coarseincrement="1"/>
|
coarseincrement="1"/>
|
||||||
<table type="X Axis" storageaddress="24b8" storagetype="float"
|
<table type="X Axis" storageaddress="27d8" storagetype="float"
|
||||||
endian="big" logparam="engine_load">
|
endian="big" logparam="engine_load">
|
||||||
<scaling units="temperature, C" expression="x" to_byte="x" format="0.00" fineincrement=".1"
|
<scaling units="temperature, C" expression="x" to_byte="x" format="0.00" fineincrement=".1"
|
||||||
coarseincrement="1"/>
|
coarseincrement="1"/>
|
||||||
</table>
|
</table>
|
||||||
<table type="Y Axis" storageaddress="24f8" storagetype="float" endian="big"
|
<table type="Y Axis" storageaddress="2818" storagetype="float" endian="big"
|
||||||
logparam="rpm">
|
logparam="rpm">
|
||||||
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
|
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
|
||||||
</table>
|
</table>
|
||||||
|
@ -46,16 +46,16 @@
|
||||||
|
|
||||||
<table type="3D" name="Volumetric Efficiency"
|
<table type="3D" name="Volumetric Efficiency"
|
||||||
category="Fuel"
|
category="Fuel"
|
||||||
storageaddress="32b8"
|
storageaddress="35d8"
|
||||||
sizex="16" sizey="16" storagetype="float" endian="big">
|
sizex="16" sizey="16" storagetype="float" endian="big">
|
||||||
<scaling units="Engine Load" expression="x" to_byte="x" format="0.00" fineincrement=".1"
|
<scaling units="Engine Load" expression="x" to_byte="x" format="0.00" fineincrement=".1"
|
||||||
coarseincrement="1"/>
|
coarseincrement="1"/>
|
||||||
<table type="X Axis" storageaddress="36b8" storagetype="float" endian="big"
|
<table type="X Axis" storageaddress="39d8" storagetype="float" endian="big"
|
||||||
logparam="engine_load">
|
logparam="engine_load">
|
||||||
<scaling units="degree" expression="x" to_byte="x" format="0.00" fineincrement=".1"
|
<scaling units="degree" expression="x" to_byte="x" format="0.00" fineincrement=".1"
|
||||||
coarseincrement="1"/>
|
coarseincrement="1"/>
|
||||||
</table>
|
</table>
|
||||||
<table type="Y Axis" storageaddress="36f8" storagetype="float" endian="big"
|
<table type="Y Axis" storageaddress="3a18" storagetype="float" endian="big"
|
||||||
logparam="rpm">
|
logparam="rpm">
|
||||||
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
|
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
|
||||||
</table>
|
</table>
|
||||||
|
@ -63,16 +63,16 @@
|
||||||
|
|
||||||
<table type="3D" name="Fuel Table"
|
<table type="3D" name="Fuel Table"
|
||||||
category="Fuel"
|
category="Fuel"
|
||||||
storageaddress="29b8" sizex="16"
|
storageaddress="2cd8" sizex="16"
|
||||||
sizey="16" storagetype="float" endian="big">
|
sizey="16" storagetype="float" endian="big">
|
||||||
<scaling units="Engine Load" expression="x" to_byte="x" format="0.00" fineincrement=".1"
|
<scaling units="Engine Load" expression="x" to_byte="x" format="0.00" fineincrement=".1"
|
||||||
coarseincrement="1"/>
|
coarseincrement="1"/>
|
||||||
<table type="X Axis" storageaddress="2db8" storagetype="float" endian="big"
|
<table type="X Axis" storageaddress="30d8" storagetype="float" endian="big"
|
||||||
logparam="engine_load">
|
logparam="engine_load">
|
||||||
<scaling units="degree" expression="x" to_byte="x" format="0.00" fineincrement=".1"
|
<scaling units="degree" expression="x" to_byte="x" format="0.00" fineincrement=".1"
|
||||||
coarseincrement="1"/>
|
coarseincrement="1"/>
|
||||||
</table>
|
</table>
|
||||||
<table type="Y Axis" storageaddress="2df8" storagetype="float" endian="big"
|
<table type="Y Axis" storageaddress="3118" storagetype="float" endian="big"
|
||||||
logparam="rpm">
|
logparam="rpm">
|
||||||
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
|
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
|
||||||
</table>
|
</table>
|
||||||
|
@ -80,15 +80,15 @@
|
||||||
|
|
||||||
<table type="3D" name="Target AFR"
|
<table type="3D" name="Target AFR"
|
||||||
category="Fuel"
|
category="Fuel"
|
||||||
storageaddress="3738" sizex="16"
|
storageaddress="3a58" sizex="16"
|
||||||
sizey="16" storagetype="float" endian="big">
|
sizey="16" storagetype="float" endian="big">
|
||||||
<scaling units="Engine Load" expression="x" to_byte="x" format="0.00" fineincrement=".1"
|
<scaling units="Engine Load" expression="x" to_byte="x" format="0.00" fineincrement=".1"
|
||||||
coarseincrement="1"/>
|
coarseincrement="1"/>
|
||||||
<table type="X Axis" storageaddress="3b38" storagetype="float" endian="big">
|
<table type="X Axis" storageaddress="3e58" storagetype="float" endian="big">
|
||||||
<scaling units="degree" expression="x" to_byte="x" format="0.00" fineincrement=".1"
|
<scaling units="degree" expression="x" to_byte="x" format="0.00" fineincrement=".1"
|
||||||
coarseincrement="1"/>
|
coarseincrement="1"/>
|
||||||
</table>
|
</table>
|
||||||
<table type="Y Axis" storageaddress="3b78" storagetype="float" endian="big">
|
<table type="Y Axis" storageaddress="3e98" storagetype="float" endian="big">
|
||||||
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
|
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
|
||||||
</table>
|
</table>
|
||||||
</table>
|
</table>
|
||||||
|
@ -108,20 +108,20 @@
|
||||||
|
|
||||||
<table type="2D" name="Coolant-based Warnup Enrichment"
|
<table type="2D" name="Coolant-based Warnup Enrichment"
|
||||||
category="Fuel"
|
category="Fuel"
|
||||||
storageaddress="16f8" sizex="16"
|
storageaddress="1a18" sizex="16"
|
||||||
storagetype="float" endian="big">
|
storagetype="float" endian="big">
|
||||||
<scaling units="Target Boost (psia) Compensation (%)" expression="x" to_byte="x" format="0.00"
|
<scaling units="Target Boost (psia) Compensation (%)" expression="x" to_byte="x" format="0.00"
|
||||||
fineincrement=".01" coarseincrement="0.1"/>
|
fineincrement=".01" coarseincrement="0.1"/>
|
||||||
<table type="X Axis" storageaddress="16b8" storagetype="float" endian="big">
|
<table type="X Axis" storageaddress="19d8" storagetype="float" endian="big">
|
||||||
<scaling units="uni" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
|
<scaling units="uni" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
|
||||||
</table>
|
</table>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<table type="2D" name="Intake air temperature-based extra idle air" storageaddress="1878"
|
<table type="2D" name="Intake air temperature-based extra idle air" storageaddress="1b98"
|
||||||
sizex="16" storagetype="float" endian="big">
|
sizex="16" storagetype="float" endian="big">
|
||||||
<scaling units="Target Boost (psia) Compensation (%)" expression="x" to_byte="x" format="0.00"
|
<scaling units="Target Boost (psia) Compensation (%)" expression="x" to_byte="x" format="0.00"
|
||||||
fineincrement=".01" coarseincrement="0.1"/>
|
fineincrement=".01" coarseincrement="0.1"/>
|
||||||
<table type="X Axis" storageaddress="1838" storagetype="float" endian="big">
|
<table type="X Axis" storageaddress="1b58" storagetype="float" endian="big">
|
||||||
<scaling units="uni" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
|
<scaling units="uni" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
|
||||||
</table>
|
</table>
|
||||||
</table>
|
</table>
|
||||||
|
|
|
@ -29,11 +29,10 @@ import static com.rusefi.ui.storage.PersistentConfiguration.getConfig;
|
||||||
* (c) Andrey Belomutskiy 2013-2015
|
* (c) Andrey Belomutskiy 2013-2015
|
||||||
*
|
*
|
||||||
* @see StartupFrame
|
* @see StartupFrame
|
||||||
* @see com.rusefi.ui.engine.EngineSnifferPanel
|
* @see EngineSnifferPanel
|
||||||
* @see com.rusefi.StartupFrame
|
|
||||||
*/
|
*/
|
||||||
public class Launcher {
|
public class Launcher {
|
||||||
public static final int CONSOLE_VERSION = 20151124;
|
public static final int CONSOLE_VERSION = 20151202;
|
||||||
public static final boolean SHOW_STIMULATOR = false;
|
public static final boolean SHOW_STIMULATOR = false;
|
||||||
private static final String TAB_INDEX = "main_tab";
|
private static final String TAB_INDEX = "main_tab";
|
||||||
protected static final String PORT_KEY = "port";
|
protected static final String PORT_KEY = "port";
|
||||||
|
@ -81,9 +80,9 @@ public class Launcher {
|
||||||
tabbedPane.add("Log Viewer", new LogViewer(engineSnifferPanel));
|
tabbedPane.add("Log Viewer", new LogViewer(engineSnifferPanel));
|
||||||
|
|
||||||
ConnectionWatchdog.start();
|
ConnectionWatchdog.start();
|
||||||
BinaryProtocolServer.start();
|
|
||||||
|
|
||||||
tabbedPane.addTab("Gauges", new GaugesPanel(getConfig().getRoot().getChild("gauges")).getContent());
|
tabbedPane.addTab("Gauges", new GaugesPanel(getConfig().getRoot().getChild("gauges")).getContent());
|
||||||
|
tabbedPane.addTab("Formulas", new FormulasPane().getContent());
|
||||||
tabbedPane.addTab("Engine Sniffer", engineSnifferPanel.getPanel());
|
tabbedPane.addTab("Engine Sniffer", engineSnifferPanel.getPanel());
|
||||||
tabbedPane.addTab("Sensor Sniffer", new SensorSnifferPane(getConfig().getRoot().getChild("sensor_sniffer")).getPanel());
|
tabbedPane.addTab("Sensor Sniffer", new SensorSnifferPane(getConfig().getRoot().getChild("sensor_sniffer")).getPanel());
|
||||||
|
|
||||||
|
@ -134,6 +133,7 @@ public class Launcher {
|
||||||
tableEditor.showContent();
|
tableEditor.showContent();
|
||||||
settingsTab.showContent();
|
settingsTab.showContent();
|
||||||
logsManager.showContent();
|
logsManager.showContent();
|
||||||
|
BinaryProtocolServer.start();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,8 @@ public class StartupFrame {
|
||||||
private static final String LOGO = "logo.gif";
|
private static final String LOGO = "logo.gif";
|
||||||
private static final String LINK_TEXT = "rusEfi (c) 2012-2015";
|
private static final String LINK_TEXT = "rusEfi (c) 2012-2015";
|
||||||
private static final String URI = "http://rusefi.com/?java_console";
|
private static final String URI = "http://rusefi.com/?java_console";
|
||||||
|
private static final String VCP_DRIVER_TEXT = "vcp driver";
|
||||||
|
private static final String VCP_DRIVER_URI = "http://www.st.com/st-web-ui/static/active/en/st_prod_software_internet/resource/technical/software/driver/stsw-stm32102.zip";
|
||||||
|
|
||||||
private final JFrame frame;
|
private final JFrame frame;
|
||||||
private final Timer scanPortsTimes = new Timer(1000, new ActionListener() {
|
private final Timer scanPortsTimes = new Timer(1000, new ActionListener() {
|
||||||
|
@ -104,6 +106,7 @@ public class StartupFrame {
|
||||||
});
|
});
|
||||||
|
|
||||||
leftPanel.add(connectPanel);
|
leftPanel.add(connectPanel);
|
||||||
|
leftPanel.add(new URLLabel(VCP_DRIVER_TEXT, VCP_DRIVER_URI));
|
||||||
leftPanel.add(horizontalLine);
|
leftPanel.add(horizontalLine);
|
||||||
|
|
||||||
findAndApplyPorts();
|
findAndApplyPorts();
|
||||||
|
|
|
@ -26,7 +26,7 @@ public class FirmwareFlasher extends ProcessStatusWindow {
|
||||||
button.addActionListener(new ActionListener() {
|
button.addActionListener(new ActionListener() {
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent event) {
|
public void actionPerformed(ActionEvent event) {
|
||||||
int dialogResult = JOptionPane.showConfirmDialog(button, "Do you really want to update firmware? Please disconnect battery before erasing.",
|
int dialogResult = JOptionPane.showConfirmDialog(button, "Do you really want to update firmware? Please disconnect vehicle battery before erasing.",
|
||||||
"Please disconnect from vehicle", JOptionPane.YES_NO_OPTION);
|
"Please disconnect from vehicle", JOptionPane.YES_NO_OPTION);
|
||||||
if (dialogResult != JOptionPane.YES_OPTION)
|
if (dialogResult != JOptionPane.YES_OPTION)
|
||||||
return;
|
return;
|
||||||
|
@ -54,7 +54,7 @@ public class FirmwareFlasher extends ProcessStatusWindow {
|
||||||
fileName +
|
fileName +
|
||||||
" verify reset exit 0x08000000\"");
|
" verify reset exit 0x08000000\"");
|
||||||
if (error.toString().contains(NO_DRIVER_MESSAGE_TAG)) {
|
if (error.toString().contains(NO_DRIVER_MESSAGE_TAG)) {
|
||||||
wnd.appendMsg(" !!! ERROR: looks like stm32 driver is not installe? !!!");
|
wnd.appendMsg(" !!! ERROR: looks like stm32 driver is not installed? The link is above !!!");
|
||||||
} else if (error.toString().contains(SUCCESS_MESSAGE_TAG) && !error.toString().contains(FAILED_MESSAGE_TAG)) {
|
} else if (error.toString().contains(SUCCESS_MESSAGE_TAG) && !error.toString().contains(FAILED_MESSAGE_TAG)) {
|
||||||
wnd.appendMsg("!!! Looks good!!!");
|
wnd.appendMsg("!!! Looks good!!!");
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -0,0 +1,110 @@
|
||||||
|
package com.rusefi.ui;
|
||||||
|
|
||||||
|
import com.rusefi.ConfigurationImage;
|
||||||
|
import com.rusefi.binaryprotocol.BinaryProtocol;
|
||||||
|
import com.rusefi.config.Fields;
|
||||||
|
import com.rusefi.core.Sensor;
|
||||||
|
import com.rusefi.core.SensorCentral;
|
||||||
|
import com.rusefi.ui.config.ConfigField;
|
||||||
|
import org.scilab.forge.jlatexmath.TeXConstants;
|
||||||
|
import org.scilab.forge.jlatexmath.TeXFormula;
|
||||||
|
import org.scilab.forge.jlatexmath.TeXIcon;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
|
||||||
|
public class FormulasPane {
|
||||||
|
private final JPanel content = new JPanel(new BorderLayout());
|
||||||
|
private final JPanel centerProxy = new JPanel(new BorderLayout());
|
||||||
|
|
||||||
|
public FormulasPane() {
|
||||||
|
content.add(centerProxy, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
updateFormula();
|
||||||
|
new Timer(200, new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
updateFormula();
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateFormula() {
|
||||||
|
|
||||||
|
BinaryProtocol bp = BinaryProtocol.instance;
|
||||||
|
if (bp == null)
|
||||||
|
return;
|
||||||
|
ConfigurationImage ci = bp.getController();
|
||||||
|
if (ci == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
String IAT = oneDecimal(Sensor.IAT);
|
||||||
|
String MAP = oneDecimal(Sensor.MAP);
|
||||||
|
String T_CHARGE = oneDecimal(Sensor.T_CHARGE);
|
||||||
|
|
||||||
|
double rpm = SensorCentral.getInstance().getValue(Sensor.RPM);
|
||||||
|
String RPM = "" + (int) rpm;
|
||||||
|
String VE = oneDecimal(Sensor.CURRENT_VE);
|
||||||
|
String TARGET_AFR = oneDecimal(Sensor.TARGET_AFR);
|
||||||
|
String tpsStr = oneDecimal(Sensor.TPS);
|
||||||
|
String chargeAirMass = String.format("%.3fgm", SensorCentral.getInstance().getValue(Sensor.CHARGE_AIR_MASS));
|
||||||
|
|
||||||
|
float displacement = (Float) ConfigField.getValue(ci, Fields.DISPLACEMENT);
|
||||||
|
int cylinderCount = (int) ConfigField.getValue(ci, Fields.CYLINDERSCOUNT);
|
||||||
|
String cylinderDisplacement = oneDecimal(displacement / cylinderCount);
|
||||||
|
String injectorFlow = oneDecimal((float)ConfigField.getValue(ci, Fields.INJECTOR_FLOW));
|
||||||
|
|
||||||
|
String tCharge = "$Tcharge=f(CLT=" + oneDecimal(Sensor.CLT) + "C,IAT=" + IAT
|
||||||
|
+ "C,TPS=" + tpsStr + "\\%, RPM = " + RPM + ")=" + T_CHARGE + "C$";
|
||||||
|
|
||||||
|
String rpm_map = "RPM=" + RPM + ",MAP=" + MAP + "kPa";
|
||||||
|
String mCharge = "$Airmass (g/cyl) =\\frac{(V_Cylinder = " + cylinderDisplacement + "L) " +
|
||||||
|
"* (VE(" + rpm_map + ") = " + VE + "\\%) " +
|
||||||
|
"* (MAP = " + MAP + "Kpa)" +
|
||||||
|
"}{" +
|
||||||
|
"(GAS_R = 0.28705) * ((Tcharge = " + T_CHARGE + "C) + 273.15)} = " +
|
||||||
|
chargeAirMass +
|
||||||
|
"$";
|
||||||
|
|
||||||
|
String injTime = "$Injection_Time (ms) = \\frac{" +
|
||||||
|
"($Airmass = " + chargeAirMass + ")" +
|
||||||
|
"}{" +
|
||||||
|
"(TargetAFR (" + rpm_map + ") = " + TARGET_AFR + ")" +
|
||||||
|
" * (injectorFlow = " + injectorFlow + " cc/min)" +
|
||||||
|
"} = " + "yyy" + "ms$";
|
||||||
|
|
||||||
|
String newLine = "\r\n \\\\ ";
|
||||||
|
String page = tCharge + newLine + newLine + newLine +
|
||||||
|
mCharge + newLine + newLine + newLine +
|
||||||
|
injTime + newLine;
|
||||||
|
|
||||||
|
TeXFormula formula = new TeXFormula(page);
|
||||||
|
TeXIcon icon = formula.createTeXIcon(TeXConstants.STYLE_DISPLAY, 20);
|
||||||
|
|
||||||
|
BufferedImage image = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB);
|
||||||
|
Graphics2D g2 = image.createGraphics();
|
||||||
|
g2.setColor(Color.white);
|
||||||
|
g2.fillRect(0, 0, icon.getIconWidth(), icon.getIconHeight());
|
||||||
|
JLabel label = new JLabel(icon);
|
||||||
|
|
||||||
|
centerProxy.removeAll();
|
||||||
|
centerProxy.add(label, BorderLayout.CENTER);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String oneDecimal(Sensor sensor) {
|
||||||
|
return oneDecimal(SensorCentral.getInstance().getValue(sensor));
|
||||||
|
}
|
||||||
|
|
||||||
|
private String oneDecimal(double ve) {
|
||||||
|
return String.format("%.1f", ve);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JPanel getContent() {
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,17 +1,21 @@
|
||||||
package com.rusefi.ui;
|
package com.rusefi.ui;
|
||||||
|
|
||||||
import com.rusefi.ui.util.FrameHelper;
|
import com.rusefi.ui.util.FrameHelper;
|
||||||
|
import com.rusefi.ui.util.URLLabel;
|
||||||
import com.rusefi.ui.util.UiUtils;
|
import com.rusefi.ui.util.UiUtils;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create(c) Andrey Belomutskiy 2013-2015
|
* (c) Andrey Belomutskiy 2013-2015
|
||||||
* 3/7/2015
|
* 3/7/2015
|
||||||
*/
|
*/
|
||||||
public class StatusWindow {
|
public class StatusWindow {
|
||||||
|
// todo: extract driver from console bundle? find a separate driver bundle?
|
||||||
|
private static final String CONSOLE_DRIVER_URI = "http://www.st.com/st-web-ui/static/active/en/st_prod_software_internet/resource/technical/software/utility/stsw-link004.zip";
|
||||||
private final JTextArea log = new JTextArea();
|
private final JTextArea log = new JTextArea();
|
||||||
|
private final JPanel content = new JPanel(new BorderLayout());
|
||||||
private final JScrollPane messagesScroll = new JScrollPane(log, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED) {
|
private final JScrollPane messagesScroll = new JScrollPane(log, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED) {
|
||||||
@Override
|
@Override
|
||||||
public Dimension getPreferredSize() {
|
public Dimension getPreferredSize() {
|
||||||
|
@ -24,9 +28,12 @@ public class StatusWindow {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showFrame(String title) {
|
public void showFrame(String title) {
|
||||||
|
content.add(new URLLabel("stm32 driver", CONSOLE_DRIVER_URI), BorderLayout.NORTH);
|
||||||
|
content.add(messagesScroll, BorderLayout.CENTER);
|
||||||
|
|
||||||
FrameHelper f = new FrameHelper();
|
FrameHelper f = new FrameHelper();
|
||||||
f.getFrame().setTitle(title);
|
f.getFrame().setTitle(title);
|
||||||
f.showFrame(messagesScroll, false);
|
f.showFrame(content, false);
|
||||||
UiUtils.centerWindow(f.getFrame());
|
UiUtils.centerWindow(f.getFrame());
|
||||||
log.setText(""); // let's remove stuff from previous invocation
|
log.setText(""); // let's remove stuff from previous invocation
|
||||||
}
|
}
|
||||||
|
|
|
@ -93,6 +93,11 @@ abstract class BaseConfigField {
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
protected ByteBuffer getByteBuffer(ConfigurationImage ci) {
|
protected ByteBuffer getByteBuffer(ConfigurationImage ci) {
|
||||||
|
return getByteBuffer(ci, field);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public static ByteBuffer getByteBuffer(ConfigurationImage ci, Field field) {
|
||||||
byte data[] = ci.getRange(field.getOffset(), 4);
|
byte data[] = ci.getRange(field.getOffset(), 4);
|
||||||
ByteBuffer wrapped = ByteBuffer.wrap(data);
|
ByteBuffer wrapped = ByteBuffer.wrap(data);
|
||||||
wrapped.order(ByteOrder.LITTLE_ENDIAN);
|
wrapped.order(ByteOrder.LITTLE_ENDIAN);
|
||||||
|
|
|
@ -9,11 +9,9 @@ import com.rusefi.ui.util.JTextFieldWithWidth;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.event.KeyAdapter;
|
import java.awt.event.KeyAdapter;
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.ByteOrder;
|
|
||||||
|
|
||||||
public class ConfigField extends BaseConfigField {
|
public class ConfigField extends BaseConfigField {
|
||||||
private final JTextField view = new JTextFieldWithWidth(200);
|
private final JTextField view = new JTextFieldWithWidth(200);
|
||||||
|
@ -54,14 +52,20 @@ public class ConfigField extends BaseConfigField {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void loadValue(ConfigurationImage ci) {
|
protected void loadValue(ConfigurationImage ci) {
|
||||||
|
Number value = getValue(ci, field);
|
||||||
|
setValue(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public static Number getValue(ConfigurationImage ci, Field field) {
|
||||||
Number value;
|
Number value;
|
||||||
ByteBuffer wrapped = getByteBuffer(ci);
|
ByteBuffer wrapped = getByteBuffer(ci, field);
|
||||||
if (field.getType() == FieldType.INT) {
|
if (field.getType() == FieldType.INT) {
|
||||||
value = wrapped.getInt();
|
value = wrapped.getInt();
|
||||||
} else {
|
} else {
|
||||||
value = wrapped.getFloat();
|
value = wrapped.getFloat();
|
||||||
}
|
}
|
||||||
setValue(value);
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -10,7 +10,7 @@
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
<orderEntry type="module" module-name="io" />
|
<orderEntry type="module" module-name="io" />
|
||||||
<orderEntry type="library" name="jssc" level="project" />
|
<orderEntry type="library" name="jssc" level="project" />
|
||||||
<orderEntry type="library" name="miglayout-4.0" level="project" />
|
<orderEntry type="library" name="miglayout" level="project" />
|
||||||
<orderEntry type="library" name="annotations" level="project" />
|
<orderEntry type="library" name="annotations" level="project" />
|
||||||
<orderEntry type="library" name="junit" level="project" />
|
<orderEntry type="library" name="junit" level="project" />
|
||||||
<orderEntry type="library" name="surfaceplotter" level="project" />
|
<orderEntry type="library" name="surfaceplotter" level="project" />
|
||||||
|
@ -19,5 +19,6 @@
|
||||||
<orderEntry type="library" name="SteelSeries" level="project" />
|
<orderEntry type="library" name="SteelSeries" level="project" />
|
||||||
<orderEntry type="module" module-name="autotest" />
|
<orderEntry type="module" module-name="autotest" />
|
||||||
<orderEntry type="module" module-name="romraider" />
|
<orderEntry type="module" module-name="romraider" />
|
||||||
|
<orderEntry type="library" name="jlatexmath" level="project" />
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
|
@ -27,6 +27,10 @@ void testSpeedDensity(void) {
|
||||||
|
|
||||||
eth.ec->injector.flow = gramm_second_to_cc_minute(5.303);
|
eth.ec->injector.flow = gramm_second_to_cc_minute(5.303);
|
||||||
|
|
||||||
|
float airMass = getAirMass(eth.ec, 0.92, 98, 293.16);
|
||||||
|
|
||||||
|
assertEquals(0.9371, airMass);
|
||||||
|
|
||||||
// 0.01414 sec or 14.14 ms
|
// 0.01414 sec or 14.14 ms
|
||||||
assertEquals(0.01414, sdMath(eth.ec, 0.92, 98, 12.5, 293.16));
|
assertEquals(0.01414, sdMath(eth.ec, airMass, 12.5));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue