auto-sync

This commit is contained in:
rusEfi 2015-12-02 20:10:06 -05:00
parent 1aff292d86
commit 412d4843d9
44 changed files with 550 additions and 273 deletions

View File

@ -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

View File

@ -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_ */

View File

@ -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;

View File

@ -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;
}; };

View File

@ -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;

View File

@ -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

View File

@ -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) {

View File

@ -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

View File

@ -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);

View File

@ -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 = {

View File

@ -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)

View File

@ -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;

View File

@ -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;
} }

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -1,5 +1,5 @@
package com.rusefi; package com.rusefi;
public interface TsPageSize { public interface TsPageSize {
int IMAGE_SIZE = 15288; int IMAGE_SIZE = 16088;
} }

View File

@ -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) {

View File

@ -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);

View File

@ -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;

View File

@ -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));
} }
} }

View File

@ -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));
} }
} }

View File

@ -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) {

View File

@ -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;
} }
} }

View File

@ -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.

View File

@ -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);
} }

View File

@ -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),

View File

@ -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" />

View File

@ -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>

View File

@ -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();
} }
}); });

View File

@ -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();

View File

@ -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 {

View File

@ -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;
}
}

View File

@ -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
} }

View File

@ -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);

View File

@ -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;
} }
} }

View File

@ -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>

View File

@ -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));
} }