diff --git a/firmware/config/engines/toyota_jzs147.cpp b/firmware/config/engines/toyota_jzs147.cpp index e4420bcf81..6580ad72ad 100644 --- a/firmware/config/engines/toyota_jzs147.cpp +++ b/firmware/config/engines/toyota_jzs147.cpp @@ -102,6 +102,9 @@ void setToyota_2jz_vics(DECLARE_ENGINE_PARAMETER_F) { boardConfiguration->isSdCardEnabled = true; + setOperationMode(engineConfiguration, FOUR_STROKE_CRANK_SENSOR); + engineConfiguration->trigger.type = TT_2JZ_3_34; + } diff --git a/firmware/console/binary/tunerstudio_configuration.h b/firmware/console/binary/tunerstudio_configuration.h index a03b98f03a..eac7637971 100644 --- a/firmware/console/binary/tunerstudio_configuration.h +++ b/firmware/console/binary/tunerstudio_configuration.h @@ -81,6 +81,7 @@ typedef struct { unsigned int isAcSwitchEngaged : 1; // bit 4 unsigned int isTriggerError : 1; // bit 5 unsigned int hasFatalError : 1; // bit 6 + unsigned int isWarnNow : 1; // bit 7 int tsConfigVersion; egt_values_s egtValues; float rpmAcceleration; diff --git a/firmware/console/status_loop.cpp b/firmware/console/status_loop.cpp index 840fc5a9e8..43481196b4 100644 --- a/firmware/console/status_loop.cpp +++ b/firmware/console/status_loop.cpp @@ -638,7 +638,10 @@ void updateTunerStudioState(TunerStudioOutputChannels *tsOutputChannels DECLARE_ tsOutputChannels->baseFuel = engine->engineState.baseFuel; tsOutputChannels->actualLastInjection = ENGINE(actualLastInjection); - tsOutputChannels->timeSeconds = getTimeNowSeconds(); + efitimesec_t now = getTimeNowSeconds(); + tsOutputChannels->timeSeconds = now; + + tsOutputChannels->isWarnNow = isWarningNow(now); if (engineConfiguration->debugMode == DBG_TPS_ACCEL) { tsOutputChannels->debugIntField1 = engine->tpsAccelEnrichment.cb.getSize(); diff --git a/firmware/controllers/algo/engine.cpp b/firmware/controllers/algo/engine.cpp index 80be8c0dbc..6f47d12c7a 100644 --- a/firmware/controllers/algo/engine.cpp +++ b/firmware/controllers/algo/engine.cpp @@ -139,6 +139,7 @@ EngineState::EngineState() { tpsAccelEnrich = 0; tChargeK = 0; currentVE = 0; + timeOfPreviousWarning = -10; } void EngineState::updateSlowSensors(DECLARE_ENGINE_PARAMETER_F) { diff --git a/firmware/controllers/algo/engine.h b/firmware/controllers/algo/engine.h index 708e236741..bf30e0ed57 100644 --- a/firmware/controllers/algo/engine.h +++ b/firmware/controllers/algo/engine.h @@ -124,6 +124,7 @@ public: int warningCounter; int lastErrorCode; + efitimesec_t timeOfPreviousWarning; float airMass; diff --git a/firmware/controllers/algo/error_handling.h b/firmware/controllers/algo/error_handling.h index d48ab92e19..81ddd5d452 100644 --- a/firmware/controllers/algo/error_handling.h +++ b/firmware/controllers/algo/error_handling.h @@ -18,6 +18,7 @@ int getVtSizeEstimate(void); #include "obd_error_codes.h" #include "efifeatures.h" #include "stdbool.h" +#include "rusefi_types.h" void assertVtList(void); @@ -27,6 +28,7 @@ void assertVtList(void); * */ int warning(obd_code_e code, const char *fmt, ...); +bool isWarningNow(efitimesec_t now); /** * Something really bad had happened - firmware cannot function * diff --git a/firmware/controllers/algo/rusefi_types.h b/firmware/controllers/algo/rusefi_types.h index 538f2ead3b..620ae63bbb 100644 --- a/firmware/controllers/algo/rusefi_types.h +++ b/firmware/controllers/algo/rusefi_types.h @@ -8,9 +8,12 @@ #define CONTROLLERS_ALGO_RUSEFI_TYPES_H_ #include +#include #include "rusefi_enums.h" #include "rusefi_generated.h" +// time in seconds +typedef time_t efitimesec_t; /** * integer time in milliseconds diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index 2a79ee5c43..a97dbd7214 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -176,7 +176,7 @@ efitimems_t currentTimeMillis(void) { } // todo: this overflows pretty fast! -int getTimeNowSeconds(void) { +efitimesec_t getTimeNowSeconds(void) { return currentTimeMillis() / 1000; } diff --git a/firmware/controllers/error_handling.cpp b/firmware/controllers/error_handling.cpp index 21db372f82..91540f8405 100644 --- a/firmware/controllers/error_handling.cpp +++ b/firmware/controllers/error_handling.cpp @@ -16,7 +16,6 @@ #include "lcd_HD44780.h" #endif /* EFI_HD44780_LCD */ -static time_t timeOfPreviousWarning = -10; static LoggingWithStorage logger("error handling"); EXTERN_ENGINE; @@ -55,6 +54,10 @@ static char warningBuffer[WARNING_BUFFER_SIZE]; static bool isWarningStreamInitialized = false; static MemoryStream warningStream; +bool isWarningNow(efitimesec_t now) { + return absI(now - engine->engineState.timeOfPreviousWarning) < 10; +} + /** * OBD_PCM_Processor_Fault is the general error code for now * @@ -64,10 +67,10 @@ int warning(obd_code_e code, const char *fmt, ...) { efiAssert(isWarningStreamInitialized, "warn stream", false); UNUSED(code); - int now = getTimeNowSeconds(); - if (absI(now - timeOfPreviousWarning) < 10 || !warningEnabled) + efitimesec_t now = getTimeNowSeconds(); + if (isWarningNow(now) || !warningEnabled) return true; // we just had another warning, let's not spam - timeOfPreviousWarning = now; + engine->engineState.timeOfPreviousWarning = now; engine->engineState.warningCounter++; engine->engineState.lastErrorCode = code; diff --git a/firmware/controllers/math/efitime.h b/firmware/controllers/math/efitime.h index 83f8f9259a..ef3ebbde19 100644 --- a/firmware/controllers/math/efitime.h +++ b/firmware/controllers/math/efitime.h @@ -55,7 +55,7 @@ efitimems_t currentTimeMillis(void); /** * @brief Current system time in seconds. */ -int getTimeNowSeconds(void); +efitimesec_t getTimeNowSeconds(void); #ifdef __cplusplus } diff --git a/firmware/controllers/trigger/trigger_toyota.cpp b/firmware/controllers/trigger/trigger_toyota.cpp index b191a476d1..6b3d766173 100644 --- a/firmware/controllers/trigger/trigger_toyota.cpp +++ b/firmware/controllers/trigger/trigger_toyota.cpp @@ -46,69 +46,71 @@ void initialize2jzGE1_12(TriggerShape *s) { } void initialize2jzGE3_34(TriggerShape *s) { - s->initialize(FOUR_STROKE_CAM_SENSOR, true); + setToothedWheelConfiguration(s, 36, 2, FOUR_STROKE_CRANK_SENSOR); - float camD = 720 / 6; // 120 - - float crankAngle = 20; // skipping two teeth - - for (int i = 0; i < 10; i++) { - s->addEvent(crankAngle + 5, T_SECONDARY, TV_RISE, -1, 721); - s->addEvent(crankAngle + 9.9, T_SECONDARY, TV_FALL, -1, 721); // 120 - crankAngle += 10; - } // 2 + 10 - - float camAngle = 0; - camAngle += camD; - s->addEvent(camAngle, T_PRIMARY, TV_RISE, -1, 721); // 120 - - for (int i = 0; i < 12; i++) { - s->addEvent(crankAngle + 5, T_SECONDARY, TV_RISE, -1, 721); - s->addEvent(crankAngle + 9.9, T_SECONDARY, TV_FALL, -1, 721); // 120 - crankAngle += 10; - } // 2 + 22 - - - camAngle += camD; - s->addEvent(camAngle, T_PRIMARY, TV_FALL, -1, 721); // 240 - - for (int i = 0; i < 12; i++) { - s->addEvent(crankAngle + 5, T_SECONDARY, TV_RISE, -1, 721); - s->addEvent(crankAngle + 9.9, T_SECONDARY, TV_FALL, -1, 721); // 120 - crankAngle += 10; - } // 2 + 34 - - camAngle += camD; - s->addEvent(camAngle, T_PRIMARY, TV_RISE, -1, 721); // 360 - - crankAngle += 20; // skipping two teeth one more time - for (int i = 0; i < 10; i++) { - s->addEvent(crankAngle + 5, T_SECONDARY, TV_RISE, -1, 721); - s->addEvent(crankAngle + 9.9, T_SECONDARY, TV_FALL, -1, 721); // 120 - crankAngle += 10; - } // 2 + 10 - - camAngle += camD; - s->addEvent(camAngle, T_PRIMARY, TV_FALL, -1, 721); // 480 - - for (int i = 0; i < 12; i++) { - s->addEvent(crankAngle + 5, T_SECONDARY, TV_RISE, -1, 721); - s->addEvent(crankAngle + 9.9, T_SECONDARY, TV_FALL, -1, 721); // 120 - crankAngle += 10; - } // 2 + 22 - - camAngle += camD; - s->addEvent(camAngle, T_PRIMARY, TV_RISE, -1, 721); // 600 - - - for (int i = 0; i < 12; i++) { - s->addEvent(crankAngle + 5, T_SECONDARY, TV_RISE, -1, 721); - s->addEvent(crankAngle + 9.9, T_SECONDARY, TV_FALL, -1, 721); // 120 - crankAngle += 10; - } // 2 + 32 - camAngle += camD; - s->addEvent(camAngle, T_PRIMARY, TV_FALL, -1, 721); // 720 - - s->isSynchronizationNeeded = false; +// s->initialize(FOUR_STROKE_CAM_SENSOR, true); +// +// float camD = 720 / 6; // 120 +// +// float crankAngle = 20; // skipping two teeth +// +// for (int i = 0; i < 10; i++) { +// s->addEvent(crankAngle + 5, T_SECONDARY, TV_RISE, -1, 721); +// s->addEvent(crankAngle + 9.9, T_SECONDARY, TV_FALL, -1, 721); // 120 +// crankAngle += 10; +// } // 2 + 10 +// +// float camAngle = 0; +// camAngle += camD; +// s->addEvent(camAngle, T_PRIMARY, TV_RISE, -1, 721); // 120 +// +// for (int i = 0; i < 12; i++) { +// s->addEvent(crankAngle + 5, T_SECONDARY, TV_RISE, -1, 721); +// s->addEvent(crankAngle + 9.9, T_SECONDARY, TV_FALL, -1, 721); // 120 +// crankAngle += 10; +// } // 2 + 22 +// +// +// camAngle += camD; +// s->addEvent(camAngle, T_PRIMARY, TV_FALL, -1, 721); // 240 +// +// for (int i = 0; i < 12; i++) { +// s->addEvent(crankAngle + 5, T_SECONDARY, TV_RISE, -1, 721); +// s->addEvent(crankAngle + 9.9, T_SECONDARY, TV_FALL, -1, 721); // 120 +// crankAngle += 10; +// } // 2 + 34 +// +// camAngle += camD; +// s->addEvent(camAngle, T_PRIMARY, TV_RISE, -1, 721); // 360 +// +// crankAngle += 20; // skipping two teeth one more time +// for (int i = 0; i < 10; i++) { +// s->addEvent(crankAngle + 5, T_SECONDARY, TV_RISE, -1, 721); +// s->addEvent(crankAngle + 9.9, T_SECONDARY, TV_FALL, -1, 721); // 120 +// crankAngle += 10; +// } // 2 + 10 +// +// camAngle += camD; +// s->addEvent(camAngle, T_PRIMARY, TV_FALL, -1, 721); // 480 +// +// for (int i = 0; i < 12; i++) { +// s->addEvent(crankAngle + 5, T_SECONDARY, TV_RISE, -1, 721); +// s->addEvent(crankAngle + 9.9, T_SECONDARY, TV_FALL, -1, 721); // 120 +// crankAngle += 10; +// } // 2 + 22 +// +// camAngle += camD; +// s->addEvent(camAngle, T_PRIMARY, TV_RISE, -1, 721); // 600 +// +// +// for (int i = 0; i < 12; i++) { +// s->addEvent(crankAngle + 5, T_SECONDARY, TV_RISE, -1, 721); +// s->addEvent(crankAngle + 9.9, T_SECONDARY, TV_FALL, -1, 721); // 120 +// crankAngle += 10; +// } // 2 + 32 +// camAngle += camD; +// s->addEvent(camAngle, T_PRIMARY, TV_FALL, -1, 721); // 720 +// +// s->isSynchronizationNeeded = false; } diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index e52f5cc3ef..3e40eef70e 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -804,6 +804,7 @@ fileVersion = { 20160702 } ind_iat_error = bits, U32, 80, [3:3], "true", "false"; ind_isTriggerError = bits, U32, 80, [5:5], "true", "false"; ind_hasFatalError=bits, U32, 80, [6:6], "true", "false"; + ind_isWarnNow =bits, U32, 80, [7:7], "true", "false"; firmwareTsVersion = scalar,U32, 84, "version", 1, 0 egt1 = scalar, S16, 88, "°C", 1, 0 egt2 = scalar, S16, 90, "°C", 1, 0 @@ -1158,6 +1159,7 @@ fileVersion = { 20160702 } ; important status indicator = { ind_hasFatalError }, "", "FATAL ERROR", green, black, red, black indicator = { firmwareTsVersion == fileVersion }, "WRONG VERSION", "version", red, black, green, black + indicator = { ind_isWarnNow }, "", "warn", green, black, red, black indicator = { ind_check_engine }, "ok", "Check engine", green, black, red, black indicator = { isIgnitionEnabledIndicator}, "no ignition", "ignition", red, black, green, black indicator = { ind_injection_enabled}, "no injection", "injection", red, black, green, black