From ea87d9c9befabd76c840de9bea0994f7c82dd6de Mon Sep 17 00:00:00 2001 From: rusefillc Date: Thu, 14 Oct 2021 15:17:09 -0400 Subject: [PATCH 1/4] Whatever we call it, no matter how we do it - we need live data / remote view into rusEFI actual state #3353 dead code --- .../actuators/electronic_throttle.cpp | 41 ------------- .../controllers/actuators/idle_thread.cpp | 43 +------------- .../controllers/algo/accel_enrichment.cpp | 12 ++-- firmware/controllers/algo/fuel_math.cpp | 57 ++++--------------- firmware/controllers/math/speed_density.cpp | 33 ++++------- .../controllers/trigger/trigger_decoder.cpp | 26 --------- 6 files changed, 28 insertions(+), 184 deletions(-) diff --git a/firmware/controllers/actuators/electronic_throttle.cpp b/firmware/controllers/actuators/electronic_throttle.cpp index b16b80dabd..6b56c66b47 100644 --- a/firmware/controllers/actuators/electronic_throttle.cpp +++ b/firmware/controllers/actuators/electronic_throttle.cpp @@ -564,47 +564,6 @@ void EtbController::update() { && m_function == ETB_Throttle1; ClosedLoopController::update(); - - DISPLAY_STATE(Engine) -DISPLAY(DISPLAY_IF(1)) - DISPLAY_TEXT(Electronic_Throttle); - DISPLAY_SENSOR(TPS) - DISPLAY_TEXT(eol); - - DISPLAY_TEXT(Pedal); - DISPLAY_SENSOR(PPS); - DISPLAY(DISPLAY_CONFIG(throttlePedalPositionAdcChannel)); - DISPLAY_TEXT(eol); - - DISPLAY_TEXT(Feed_forward); - DISPLAY(DISPLAY_FIELD(etbFeedForward)); - DISPLAY_TEXT(eol); - - DISPLAY_STATE(ETB_pid) - DISPLAY_TEXT(input); - DISPLAY(DISPLAY_FIELD(input)); - DISPLAY_TEXT(Output); - DISPLAY(DISPLAY_FIELD(output)); - DISPLAY_TEXT(iTerm); - DISPLAY(DISPLAY_FIELD(iTerm)); - DISPLAY_TEXT(eol); - DISPLAY(DISPLAY_FIELD(errorAmplificationCoef)); - DISPLAY(DISPLAY_FIELD(previousError)); - DISPLAY_TEXT(eol); - - DISPLAY_TEXT(Settings); - DISPLAY(DISPLAY_CONFIG(ETB_PFACTOR)); - DISPLAY(DISPLAY_CONFIG(ETB_IFACTOR)); - DISPLAY(DISPLAY_CONFIG(ETB_DFACTOR)); - DISPLAY_TEXT(eol); - DISPLAY(DISPLAY_CONFIG(ETB_OFFSET)); - DISPLAY(DISPLAY_CONFIG(ETB_PERIODMS)); - DISPLAY_TEXT(eol); - DISPLAY(DISPLAY_CONFIG(ETB_MINVALUE)); - DISPLAY(DISPLAY_CONFIG(ETB_MAXVALUE)); -/* DISPLAY_ELSE */ - DISPLAY_TEXT(No_Pedal_Sensor); -/* DISPLAY_ENDIF */ } void EtbController::autoCalibrateTps() { diff --git a/firmware/controllers/actuators/idle_thread.cpp b/firmware/controllers/actuators/idle_thread.cpp index 5f27d77da4..4a2da867ec 100644 --- a/firmware/controllers/actuators/idle_thread.cpp +++ b/firmware/controllers/actuators/idle_thread.cpp @@ -598,46 +598,9 @@ void startIdleThread(DECLARE_ENGINE_PARAMETER_SIGNATURE) { initIdleHardware(PASS_ENGINE_PARAMETER_SIGNATURE); #endif /* EFI_UNIT_TEST */ - DISPLAY_STATE(Engine) - DISPLAY_TEXT(Idle_State); - engine->engineState.idle.DISPLAY_FIELD(idleState) = INIT; - DISPLAY_TEXT(EOL); - DISPLAY_TEXT(Base_Position); - engine->engineState.idle.DISPLAY_FIELD(baseIdlePosition) = -100.0f; - DISPLAY_TEXT(Position_with_Adjustments); - engine->engineState.idle.DISPLAY_FIELD(currentIdlePosition) = -100.0f; - DISPLAY_TEXT(EOL); - DISPLAY_TEXT(EOL); - DISPLAY_SENSOR(TPS); - DISPLAY_TEXT(EOL); - DISPLAY_TEXT(Throttle_Up_State); - DISPLAY(DISPLAY_FIELD(throttlePedalUpState)); - DISPLAY(DISPLAY_CONFIG(throttlePedalUpPin)); - - DISPLAY_TEXT(eol); - DISPLAY(DISPLAY_IF(isAutomaticIdle)) - - DISPLAY_STATE(idle_pid) - DISPLAY_TEXT(Output); - DISPLAY(DISPLAY_FIELD(output)); - DISPLAY_TEXT(iTerm); - DISPLAY(DISPLAY_FIELD(iTerm)); - DISPLAY_TEXT(eol); - - DISPLAY_TEXT(Settings); - DISPLAY(DISPLAY_CONFIG(IDLERPMPID_PFACTOR)); - DISPLAY(DISPLAY_CONFIG(IDLERPMPID_IFACTOR)); - DISPLAY(DISPLAY_CONFIG(IDLERPMPID_DFACTOR)); - DISPLAY(DISPLAY_CONFIG(IDLERPMPID_OFFSET)); - - - DISPLAY_TEXT(eol); - DISPLAY_TEXT(ETB_Idle); - DISPLAY_STATE(Engine) - DISPLAY(DISPLAY_FIELD(etbIdleAddition)); - /* DISPLAY_ELSE */ - DISPLAY_TEXT(Manual_idle_control); - /* DISPLAY_ENDIF */ + engine->engineState.idle.idleState = INIT; + engine->engineState.idle.baseIdlePosition = -100.0f; + engine->engineState.idle.currentIdlePosition = -100.0f; #if ! EFI_UNIT_TEST diff --git a/firmware/controllers/algo/accel_enrichment.cpp b/firmware/controllers/algo/accel_enrichment.cpp index 8b15361f62..ad1d052ba4 100644 --- a/firmware/controllers/algo/accel_enrichment.cpp +++ b/firmware/controllers/algo/accel_enrichment.cpp @@ -80,8 +80,7 @@ floatms_t WallFuel::adjust(floatms_t desiredFuel DECLARE_ENGINE_PARAMETER_SUFFIX // if tau is really small, we get div/0. // you probably meant to disable wwae. - DISPLAY_STATE(wall_fuel) - float tau = CONFIG(DISPLAY_CONFIG(wwaeTau)); + float tau = CONFIG(wwaeTau); if (tau < 0.01f) { return desiredFuel; } @@ -93,7 +92,7 @@ floatms_t WallFuel::adjust(floatms_t desiredFuel DECLARE_ENGINE_PARAMETER_SUFFIX } float alpha = expf_taylor(-120 / (rpm * tau)); - float beta = CONFIG(DISPLAY_CONFIG(wwaeBeta)); + float beta = CONFIG(wwaeBeta); #if EFI_TUNER_STUDIO if (engineConfiguration->debugMode == DBG_KNOCK) { @@ -136,11 +135,8 @@ floatms_t WallFuel::adjust(floatms_t desiredFuel DECLARE_ENGINE_PARAMETER_SUFFIX } #endif // EFI_TUNER_STUDIO - DISPLAY_TEXT(Current_Wall_Fuel_Film); - DISPLAY_FIELD(wallFuel) = fuelFilmMassNext; - DISPLAY_TEXT(Fuel correction); - DISPLAY_FIELD(wallFuelCorrection) = M_cmd - desiredFuel; - DISPLAY_TEXT(ms); + wallFuel = fuelFilmMassNext; + wallFuelCorrection = M_cmd - desiredFuel; return M_cmd; } diff --git a/firmware/controllers/algo/fuel_math.cpp b/firmware/controllers/algo/fuel_math.cpp index 7051320693..c7873a0368 100644 --- a/firmware/controllers/algo/fuel_math.cpp +++ b/firmware/controllers/algo/fuel_math.cpp @@ -42,14 +42,7 @@ static mapEstimate_Map3D_t mapEstimationTable; #if EFI_ENGINE_CONTROL -DISPLAY_STATE(Engine) - -DISPLAY(DISPLAY_FIELD(sparkDwell)) -DISPLAY(DISPLAY_FIELD(dwellAngle)) -DISPLAY(DISPLAY_FIELD(cltTimingCorrection)) -DISPLAY_TEXT(eol); - -DISPLAY(DISPLAY_IF(isCrankingState)) float getCrankingFuel3( +float getCrankingFuel3( float baseFuel, uint32_t revolutionCounterSinceStart DECLARE_ENGINE_PARAMETER_SUFFIX) { // these magic constants are in Celsius @@ -63,44 +56,35 @@ DISPLAY(DISPLAY_IF(isCrankingState)) float getCrankingFuel3( /** * Cranking fuel changes over time */ - DISPLAY_TEXT(Duration_coef); - engine->engineState.DISPLAY_PREFIX(cranking).DISPLAY_FIELD(durationCoefficient) = interpolate2d(revolutionCounterSinceStart, config->crankingCycleBins, + engine->engineState.cranking.durationCoefficient = interpolate2d(revolutionCounterSinceStart, config->crankingCycleBins, config->crankingCycleCoef); - DISPLAY_TEXT(eol); /** * Cranking fuel is different depending on engine coolant temperature * If the sensor is failed, use 20 deg C */ auto clt = Sensor::get(SensorType::Clt); - DISPLAY_TEXT(Coolant_coef); - engine->engineState.DISPLAY_PREFIX(cranking).DISPLAY_FIELD(coolantTemperatureCoefficient) = + engine->engineState.cranking.coolantTemperatureCoefficient = interpolate2d(clt.value_or(20), config->crankingFuelBins, config->crankingFuelCoef); - DISPLAY_SENSOR(CLT); - DISPLAY_TEXT(eol); auto tps = Sensor::get(SensorType::DriverThrottleIntent); - DISPLAY_TEXT(TPS_coef); - engine->engineState.DISPLAY_PREFIX(cranking).DISPLAY_FIELD(tpsCoefficient) = tps.Valid ? 1 : interpolate2d(tps.Value, engineConfiguration->crankingTpsBins, + engine->engineState.cranking.tpsCoefficient = tps.Valid ? 1 : interpolate2d(tps.Value, engineConfiguration->crankingTpsBins, engineConfiguration->crankingTpsCoef); /* - engine->engineState.DISPLAY_PREFIX(cranking).DISPLAY_FIELD(tpsCoefficient) = + engine->engineState.cranking.tpsCoefficient = tps.Valid ? interpolate2d(tps.Value, engineConfiguration->crankingTpsBins, engineConfiguration->crankingTpsCoef) : 1; // in case of failed TPS, don't correct.*/ - DISPLAY_SENSOR(TPS); - DISPLAY_TEXT(eol); floatms_t crankingFuel = baseCrankingFuel * engine->engineState.cranking.durationCoefficient * engine->engineState.cranking.coolantTemperatureCoefficient * engine->engineState.cranking.tpsCoefficient; - DISPLAY_TEXT(Cranking_fuel); - engine->engineState.DISPLAY_PREFIX(cranking).DISPLAY_FIELD(fuel) = crankingFuel * 1000; + engine->engineState.cranking.fuel = crankingFuel * 1000; if (crankingFuel <= 0) { warning(CUSTOM_ERR_ZERO_CRANKING_FUEL, "Cranking fuel value %f", crankingFuel); @@ -108,29 +92,16 @@ DISPLAY(DISPLAY_IF(isCrankingState)) float getCrankingFuel3( return crankingFuel; } -/* DISPLAY_ELSE */ - floatms_t getRunningFuel(floatms_t baseFuel DECLARE_ENGINE_PARAMETER_SUFFIX) { ScopePerf perf(PE::GetRunningFuel); - DISPLAY_TEXT(Base_fuel); - ENGINE(engineState.DISPLAY_PREFIX(running).DISPLAY_FIELD(baseFuel)) = baseFuel; - DISPLAY_TEXT(eol); + ENGINE(engineState.running.baseFuel) = baseFuel; + float iatCorrection = ENGINE(engineState.running.intakeTemperatureCoefficient); - DISPLAY_TEXT(Intake_coef); - float iatCorrection = ENGINE(engineState.DISPLAY_PREFIX(running).DISPLAY_FIELD(intakeTemperatureCoefficient)); - DISPLAY_SENSOR(IAT); - DISPLAY_TEXT(eol); + float cltCorrection = ENGINE(engineState.running.coolantTemperatureCoefficient); - DISPLAY_TEXT(Coolant_coef); - float cltCorrection = ENGINE(engineState.DISPLAY_PREFIX(running).DISPLAY_FIELD(coolantTemperatureCoefficient)); - DISPLAY_SENSOR(CLT); - DISPLAY_TEXT(eol); - - DISPLAY_TEXT(Post_cranking_coef); - float postCrankingFuelCorrection = ENGINE(engineState.DISPLAY_PREFIX(running).DISPLAY_FIELD(postCrankingFuelCorrection)); - DISPLAY_TEXT(eol); + float postCrankingFuelCorrection = ENGINE(engineState.running.postCrankingFuelCorrection); float baroCorrection = ENGINE(engineState.baroCorrection); @@ -140,15 +111,9 @@ floatms_t getRunningFuel(floatms_t baseFuel DECLARE_ENGINE_PARAMETER_SUFFIX) { floatms_t runningFuel = baseFuel * baroCorrection * iatCorrection * cltCorrection * postCrankingFuelCorrection; efiAssert(CUSTOM_ERR_ASSERT, !cisnan(runningFuel), "NaN runningFuel", 0); - DISPLAY_TEXT(eol); - DISPLAY_TEXT(Running_fuel); - ENGINE(engineState.DISPLAY_PREFIX(running).DISPLAY_FIELD(fuel)) = runningFuel * 1000; - DISPLAY_TEXT(eol); + ENGINE(engineState.running.fuel) = runningFuel * 1000; - DISPLAY_TEXT(Injector_lag); - DISPLAY(DISPLAY_PREFIX(running).DISPLAY_FIELD(injectorLag)); - DISPLAY_SENSOR(VBATT); return runningFuel; } diff --git a/firmware/controllers/math/speed_density.cpp b/firmware/controllers/math/speed_density.cpp index f564b86b01..464dc3e40b 100644 --- a/firmware/controllers/math/speed_density.cpp +++ b/firmware/controllers/math/speed_density.cpp @@ -48,9 +48,7 @@ temperature_t getTCharge(int rpm, float tps DECLARE_ENGINE_PARAMETER_SUFFIX) { float coolantTemp = clt.Value; - DISPLAY_STATE(Engine) - - if ((engine->engineState.sd.DISPLAY_IF(isTChargeAirModel) = (CONFIG(tChargeMode) == TCHARGE_MODE_AIR_INTERP))) { + if ((engine->engineState.sd.isTChargeAirModel = (CONFIG(tChargeMode) == TCHARGE_MODE_AIR_INTERP))) { const floatms_t gramsPerMsToKgPerHour = (3600.0f * 1000.0f) / 1000.0f; // We're actually using an 'old' airMass calculated for the previous cycle, but it's ok, we're not having any self-excitaton issues floatms_t airMassForEngine = engine->engineState.sd./***display*/airMassInOneCylinder * CONFIG(specs.cylindersCount); @@ -58,32 +56,21 @@ temperature_t getTCharge(int rpm, float tps DECLARE_ENGINE_PARAMETER_SUFFIX) { // And if the engine is stopped (0 rpm), then airFlow is also zero (avoiding NaN division) floatms_t airFlow = (rpm == 0) ? 0 : airMassForEngine * gramsPerMsToKgPerHour / getEngineCycleDuration(rpm PASS_ENGINE_PARAMETER_SUFFIX); // just interpolate between user-specified min and max coefs, based on the max airFlow value - DISPLAY_TEXT(interpolate_Air_Flow) - engine->engineState.DISPLAY_FIELD(airFlow) = airFlow; - DISPLAY_TEXT(Between) + engine->engineState.airFlow = airFlow; engine->engineState.sd.Tcharge_coff = interpolateClamped(0.0, - CONFIG(DISPLAY_CONFIG(tChargeAirCoefMin)), - CONFIG(DISPLAY_CONFIG(tChargeAirFlowMax)), - CONFIG(DISPLAY_CONFIG(tChargeAirCoefMax)), airFlow); + CONFIG(tChargeAirCoefMin), + CONFIG(tChargeAirFlowMax), + CONFIG(tChargeAirCoefMax), airFlow); // save it for console output (instead of MAF massAirFlow) - } else/* DISPLAY_ELSE */ { - // TCHARGE_MODE_RPM_TPS - DISPLAY_TEXT(interpolate_3D) - DISPLAY_SENSOR(RPM) - DISPLAY_TEXT(and) - DISPLAY_SENSOR(TPS) - DISPLAY_TEXT(EOL) - DISPLAY_TEXT(Between) + } else { float minRpmKcurrentTPS = interpolateMsg("minRpm", tpMin, - CONFIG(DISPLAY_CONFIG(tChargeMinRpmMinTps)), tpMax, - CONFIG(DISPLAY_CONFIG(tChargeMinRpmMaxTps)), tps); - DISPLAY_TEXT(EOL) + CONFIG(tChargeMinRpmMinTps), tpMax, + CONFIG(tChargeMinRpmMaxTps), tps); float maxRpmKcurrentTPS = interpolateMsg("maxRpm", tpMin, - CONFIG(DISPLAY_CONFIG(tChargeMaxRpmMinTps)), tpMax, - CONFIG(DISPLAY_CONFIG(tChargeMaxRpmMaxTps)), tps); + CONFIG(tChargeMaxRpmMinTps), tpMax, + CONFIG(tChargeMaxRpmMaxTps), tps); engine->engineState.sd.Tcharge_coff = interpolateMsg("Kcurr", rpmMin, minRpmKcurrentTPS, rpmMax, maxRpmKcurrentTPS, rpm); - /* DISPLAY_ENDIF */ } if (cisnan(engine->engineState.sd.Tcharge_coff)) { diff --git a/firmware/controllers/trigger/trigger_decoder.cpp b/firmware/controllers/trigger/trigger_decoder.cpp index cd07de5da7..bdbe19c532 100644 --- a/firmware/controllers/trigger/trigger_decoder.cpp +++ b/firmware/controllers/trigger/trigger_decoder.cpp @@ -527,32 +527,6 @@ void TriggerState::decodeTriggerEvent( bool isSynchronizationPoint; bool wasSynchronized = getShaftSynchronized(); - DISPLAY_STATE(Trigger_State) - DISPLAY_TEXT(Current_Gap); - DISPLAY(DISPLAY_FIELD(currentGap)); - DISPLAY_TEXT(EOL); - - DISPLAY_STATE(Trigger_Central) - DISPLAY(DISPLAY_CONFIG(TRIGGERINPUTPINS1)); - DISPLAY_TEXT("Trigger 1: Fall"); - DISPLAY(DISPLAY_FIELD(HWEVENTCOUNTERS1)); - DISPLAY_TEXT(", Rise"); - DISPLAY(DISPLAY_FIELD(HWEVENTCOUNTERS2)); - DISPLAY_TEXT(EOL); - - DISPLAY(DISPLAY_CONFIG(TRIGGERINPUTPINS2)); - DISPLAY_TEXT("Trigger 2: Fall"); - DISPLAY(DISPLAY_FIELD(HWEVENTCOUNTERS3)); - DISPLAY_TEXT(", Rise"); - DISPLAY(DISPLAY_FIELD(HWEVENTCOUNTERS4)); - DISPLAY_TEXT(EOL); - - DISPLAY_TEXT(VVT_1); - DISPLAY(DISPLAY_CONFIG(CAMINPUTS1)); - DISPLAY(DISPLAY_FIELD(vvtEventRiseCounter)); - DISPLAY(DISPLAY_FIELD(vvtEventFallCounter)); - DISPLAY(DISPLAY_FIELD(vvtCamCounter)); - if (triggerShape.isSynchronizationNeeded) { currentGap = 1.0 * toothDurations[0] / toothDurations[1]; From 0254a141df2da069f79bcbf3473d5a901d70f24e Mon Sep 17 00:00:00 2001 From: rusefillc Date: Thu, 14 Oct 2021 15:17:30 -0400 Subject: [PATCH 2/4] Whatever we call it, no matter how we do it - we need live data / remote view into rusEFI actual state #3353 progress --- firmware/console/binary/tunerstudio.cpp | 2 ++ unit_tests/global_mocks.cpp | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/firmware/console/binary/tunerstudio.cpp b/firmware/console/binary/tunerstudio.cpp index 56c62424a6..69b95f17d7 100644 --- a/firmware/console/binary/tunerstudio.cpp +++ b/firmware/console/binary/tunerstudio.cpp @@ -240,6 +240,8 @@ static const void * getStructAddr(int structId) { return static_cast(&engine->triggerCentral); case LDS_TRIGGER_STATE_STATE_INDEX: return static_cast(&engine->triggerCentral.triggerState); + case LDS_AC_STATE: + return static_cast(&engine->acState); #if EFI_ELECTRONIC_THROTTLE_BODY case LDS_ETB_PID_STATE_INDEX: return engine->etbControllers[0]->getPidState(); diff --git a/unit_tests/global_mocks.cpp b/unit_tests/global_mocks.cpp index 78d9953122..1f3ce3f275 100644 --- a/unit_tests/global_mocks.cpp +++ b/unit_tests/global_mocks.cpp @@ -12,6 +12,10 @@ efitimeus_t getTimeNowUs(void) { return timeNowUs; } +efitimesec_t getTimeNowSeconds(void) { + return getTimeNowUs() / 1000 / 1000; +} + efitick_t getTimeNowNt(void) { return getTimeNowUs() * US_TO_NT_MULTIPLIER; } From 4871e8ba426d375e0d947350554ccbd07debe1d3 Mon Sep 17 00:00:00 2001 From: rusefillc Date: Thu, 14 Oct 2021 15:17:59 -0400 Subject: [PATCH 3/4] Whatever we call it, no matter how we do it - we need live data / remote view into rusEFI actual state #3353 dead code --- firmware/controllers/core/common_headers.h | 42 ---------------------- 1 file changed, 42 deletions(-) diff --git a/firmware/controllers/core/common_headers.h b/firmware/controllers/core/common_headers.h index 9d1a3ef75c..ad6ce10f97 100644 --- a/firmware/controllers/core/common_headers.h +++ b/firmware/controllers/core/common_headers.h @@ -32,48 +32,6 @@ #include "cli_registry.h" #endif /* __cplusplus */ -/** - * reference to configuration parameter. - */ -#define DISPLAY_CONFIG(x) x -/** - * The main annotation of live data - reference to dynamic state variable - * See also 'TS_GET_STRUCT' - * The advantage of Live Data is that there is no need to copy data into tsOutputChannels structure - Live Data is reading exactly - * the same data as actual runtime logic. It's also important to have annotations of the View as close to actual implementation as possible - * to increase the changes of those being in sync. - * - * One day Live Data could be replace with a Domain Specific Language - * One day all Live Data could be provided to TS without data copy to tsOutputChannels - the idea is to have a virtual tsOutputChannels - * where rusEfi would pull data from different memory ranges depending on the requested offset, more or less virtual pages. This could depend - * on the TS bugfix described in https://github.com/rusefi/rusefi/issues/794? - * - */ -#define DISPLAY_FIELD(x) x -/** - * Advanced tag to access fields within data structures - * "running.fuel" variable would be referenced as DISPLAY_PREFIX(running).DISPLAY_FIELD(fuel) - */ -#define DISPLAY_PREFIX(x) x - -/** - * we use this 'DISPLAY' macro if value is not used by C++ code in current context and we want to hide it from compiler - */ -#define DISPLAY(x) - -#define DISPLAY_TAG(x) -/** - * Just a human-readable comment. '_' underscore symbols become spaces. EOL is handled as new line. - */ -#define DISPLAY_TEXT(x) -#define DISPLAY_STATE(x) -/** - * Reference to one of 'output' channels/standard gauges. - */ -#define DISPLAY_SENSOR(x) {} -#define DISPLAY_IF(x) x - #ifndef FIRMWARE_ID #define FIRMWARE_ID "source" #endif - From 01d4b7ef7ac7abe22cc5df4ff13eb3209c86654e Mon Sep 17 00:00:00 2001 From: rusefillc Date: Thu, 14 Oct 2021 15:18:13 -0400 Subject: [PATCH 4/4] Whatever we call it, no matter how we do it - we need live data / remote view into rusEFI actual state #3353 progress --- firmware/controllers/actuators/ac_control.cpp | 1 + .../generated/ac_control_generated.h | 10 +++++++--- firmware/integration/ac_control.txt | 2 ++ firmware/tunerstudio/generated/cache.zip | Bin 2092456 -> 2092472 bytes .../rusefi/config/generated/AcControl.java | 4 +++- 5 files changed, 13 insertions(+), 4 deletions(-) diff --git a/firmware/controllers/actuators/ac_control.cpp b/firmware/controllers/actuators/ac_control.cpp index b1751f7932..8139801b1d 100644 --- a/firmware/controllers/actuators/ac_control.cpp +++ b/firmware/controllers/actuators/ac_control.cpp @@ -9,6 +9,7 @@ static Deadband<5> maxCltDeadband; static Deadband<5> maxTpsDeadband; bool AcState::getAcState(DECLARE_ENGINE_PARAMETER_SIGNATURE) { + latest_usage_ac_control = getTimeNowSeconds(); auto rpm = Sensor::getOrZero(SensorType::Rpm); engineTooSlow = rpm < 500; diff --git a/firmware/controllers/generated/ac_control_generated.h b/firmware/controllers/generated/ac_control_generated.h index 54252ecb9f..9722c3f93f 100644 --- a/firmware/controllers/generated/ac_control_generated.h +++ b/firmware/controllers/generated/ac_control_generated.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEFI tool ConfigDefinition.jar based on (unknown script) integration/ac_control.txt Thu Oct 14 00:25:42 EDT 2021 +// this section was generated automatically by rusEFI tool ConfigDefinition.jar based on (unknown script) integration/ac_control.txt Thu Oct 14 14:49:24 EDT 2021 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -101,8 +101,12 @@ struct ac_control_s { /** offset 0 bit 31 */ bool unusedBit_6_31 : 1; - /** total size 4*/ + /** + * offset 4 + */ + int latest_usage_ac_control = (int)0; + /** total size 8*/ }; // end -// this section was generated automatically by rusEFI tool ConfigDefinition.jar based on (unknown script) integration/ac_control.txt Thu Oct 14 00:25:42 EDT 2021 +// this section was generated automatically by rusEFI tool ConfigDefinition.jar based on (unknown script) integration/ac_control.txt Thu Oct 14 14:49:24 EDT 2021 diff --git a/firmware/integration/ac_control.txt b/firmware/integration/ac_control.txt index 4b5de671c7..b0e4ea3026 100644 --- a/firmware/integration/ac_control.txt +++ b/firmware/integration/ac_control.txt @@ -8,4 +8,6 @@ bit tpsTooHigh bit acButtonState +int latest_usage_ac_control; + end_struct diff --git a/firmware/tunerstudio/generated/cache.zip b/firmware/tunerstudio/generated/cache.zip index 4e27fbd057dc37b4794d1a2d9bf3bbbe3ec304c4..cfc3ce5b95faf663cf5e38ff1a8af74746adcfb4 100644 GIT binary patch delta 7065 zcmai333$%e(tnraP2Pws5)rbD*hxf!T3fQ%Zqt%bM3IFgNJx-S1c|LhYir18B_zZe zk|1iYpmwdOQp9%cbRq3`+uMGoOKF{}go@36One&@7bLPxB??2nBvJO;b zWiQk(G%PeOv?;f(O#NVSnk||M%?`~T&5Y)NRu9b)tv;F)nlqXUnk!lZG&eMNw1#LN zXpPW3(Hf&QLGwcMM)TRfIL)`^6J8nXY;Opd&R?h6250Td93NlPhA!XjbRx*H&wE*Y z|6H(ZjZ5Z@_HJ)2cE2%nw(IO(l}_8LZufllKZZF8W!+0h(?9ZCq)!k3^>k=P@qpyb zpT^wg$ED4?N5nOMoPKi3;eR@noi4rl)2$aR1{o)hY#O;SdB6|r46lbR{VDcdpQ7nc zuDd@oMn>4#H#r(Jab}uMr`v%R8KE~g=p4|~=@P>Ek74A^SBFt6z4XICDn?>xCZsl7=AyJEE)AtH-f1KFl`DX5lv2@WcLBPptOaK%UUffcD%X8D9Z|} z_W&b(6uk~f*(eGH`TJ-r*J(5b*Yrne{pF)+ur~BINQW3201`O{%By3jlbBnv1ZWRq zs23!e@sRY6rDo{wiba2JECp))H)|%k$5E#maYCGk3lv~!9JQ@o|3Bg=NJWMgA~Ip| z)D2UBu8auqwfGufZ}uA_eJpDb!~pACi(?pD2WQY&>ZU+<&j)DHSn4f$$2U`x+ysiK zfgYa#I1`tR!=m;kkRSS&$D?1JK<#V#Jrk+D!SpzH1b`MLVwWvC-(VbluL;oiO`>r0 zGgW_X6173ULiJB3Q3v!_EkfUU9Q8y$VjLxaz~mbsV$ETEt+jX1ud%j%e2ulgK^2B# zL13c~2;d_?1i4MJAdB_vWU*eD0*j}Tkyj>`zDJ7mBT{InHWUf+Q;MubmYP11I>0cm z7!5y|2YHKBca;Q{ZZ>HJV!2 zTIy7h6iuybt#x``YZ>V^*1Y*_I)y2hcaMV0tuv^lVnS6gCS*|XD`vlikucd#)50Wb z(bI6GOuTd&#VYNf7)&)yrvSx7jR7-gI!=RS%Qj4xEvuSNqm*2XzVlukqq*KI)#qsFK=UztJSuPk?(NdYhxHxmcNV)Nomv1vbxW*W^k0bf50Au#i`Sx7E3 zcgdu9kxAVs&qUoYb9E-Ag2c_HaUf@B)4R3Pd(WY+!bxe!nS)bn=C9|_Xpo?}f{8>J z2JXpRN(LF6MPore%c5wIviV37|7_}weo8j>+|1{*k!EHsvHQ=%ip{)W9!&&!Igb)S zhRvrDAecH5L^}WrL@!~13{@-;^S%q|9VnzPq$H4=3uQ4q7Rh2TYq;KppDjXkT)6xD zI210t;(Zzd@&KG+?{n_)0ZrCNbMXh%7o_?FiqeQT$1X+&M)!>3f>dPx?#0MD#YsBb zFF}GSPSSbk5=1wemn}ie)ZmKkm|(M%`e86)DNO*`x0I%V_ikL)wv0L$liCdCw^Lwg`7-J*+;=0uJzPd1 zO0lvOvqG0sI}!PP2GQc>6f9iRh2X9&M-5J5=M{*fGf!H9bqew3pI6Y^=!dREMmV$I zDlGQmN`zVZlR^GaLnW(33w<>)>0?@gu)h45()58GmxFKya^Y&|oydWomcILH#5Azq zU@fLetEq=3iIPFrY%I%p4dM~lkNxtn{**O{v(lG1A6SDp2lC4`IC~`nI4YOs8xG|2 z)m+Q~l^MZ|>!F63YhkLl1M33A_JRDt96B6keAbe`aC#NA#I?9dl}rL!zLvTxj2CNZ z!Yiz4pWyz@=PjS0Oy+abJa}gOREDG7pr!b;8G17G%j3`cwyuXgR z1E^vhGFI^3GUOL>oZ9OpdDI$XyYrB@`K-?u5|vNy$n4TsEciq|uC#ov&bOG8lN`Gq zCpn+<*5d@pbX-{*sFT8#Y)IXJY)}hWIT{fAHc*#Z&c1-UU{db_8ZLv9FnbG7ck&sg zy;)yK-9#e0G^`M(IiGV2DWw*}cOx)9=Aj#Dis9fE6+SP1u#pBTrqd=$Q?zIkO;gmX zh{h?pu!u4gU9PsM;b!XhikYF9LtD6FGbJf18sS^CL1DI77%^ntN(1%FIC?7$HpEwP zd=Bu=Y^ApPc&^@xQ!NCidK`(K zKqi|xY=;!gtQ|DKX#RaL2ge|q4|kvvo7uG(hr-OU#S|_w*{oy5*eo;uSWJ;1y?5fx zW#+{@QHRWYYbUCbnLF+hvUnGqSjyk-!ogU|mr4=$z!GX#)1RjG3rg@RSjyj*P^fX~ zpOyu@S&B<&>7N`@0LODmQ7Q$XpK-5oh?epl%gEob*T}JDG+0I@E59m3Rw^CIN}t`R zC5n?;lD-?Y1T*&SriqF+-$UA1`sm$xHm}{nS~w&;rPsAE2Iw;s}mA zKw}jB;s8ym#Tj^zI;v3w&5QF7;vQ5mVxsyWF7L^BzuY8m8J4_wPG;oOefnreq;a^vsS?kFEKmAi_ zsyp802yl~sv*pmPHr|}N2#}+W2xKZGhWSPO(GeU?6JJz{{ae`avLocH*=}-F6a$Vz z64KU=@2;bE?6QgKarRLn%qdWkuR7Ur!Kd&fq=MY|N12oRIeF{bv(M+qZWE_~GoI;T z$G!8Yk*py&djGh1^*hU5=dQE2x7Ve^o%@Mh7RP4cH&?M<*UrkFn~&_cG7qtL$|Mh- zevDk3Lcg+VcGxN#oo+)%oi4yie`BJ(rXO<*2inAok6{7plkGWb6ZPbh6#IJo!!dGK zG5luI+U36jq!{6|2APx2O)IF6vXq$E=Wr{%PDe(au7{PSyE6ndh|4R;PpQ5>tJU>A z_!YUPjZxRqN_Flmd-mG^C!CK{GiAE2zwND5SGVNIyKZE5r)> z&;5Xi#>5dPF|p{Nnf*4BkCs0DPm+sax`_`c(a{74j(OzJl3(5=XRh~!titCDNR~Vl zNhePGg4|VP8r;|%-_u^F`_Nyfi?Fh`T%@edI9|NY0as++v9Hq9oE88sW#R2=NCXDoc3q1KX0_nJxd)pq@AM&r<{@f$;POot4vVJ_nUkqwDj9v)D(eEN9QjlEy2^(J}RTvYm}5Pd-mBTzU>yh>341$sd#I z^X1g~{@micz;-{6!FSVZ)q~X{>t?;5)gr4ixZ*rsE++o!E@m2=I`R4fC(`nz{{>k> z`+Ja_+aQwmy!nC{I&=Y{I$6Y}7pXm$rP$VEmy1$#f-XY)$TYDkea34s&OG_9v#++45tjr)s^Gdi zA_?HaFST9v*|DT3!lcvv%S)#lVCCNG2hLpo6MBu;KXmrs?5||$QWle*JM%nN^-kqy z(U)3kRi6wW+zz|h1H0MV3hC4f3(}>R&h>fNB|%b^(=e%;mt3MA>I~J*%obMDv-4bX zjyvLRIOE~Q4wW*SDlt3EJEy|2p&GZ`D9M%L>1-wJ=Ep99Hi6o~yQ0l{ssxAHYJ#$f z4b1$;Wpek0^){=A4ZDo{r6n$%*Q~4uaoT0PL`?koWlWwHz_%{rHy^%Ed=2(;u)=E2 zqrR3;DRVJqOz7mweo45?RTz(K5_G&Bt%a*Dh7532k38FwVY>-wP)GmlB>E z$n$PfC$1dS$jkwE1Ud8$1WALHAdr{c5nxrt@V)WNJMxLp6}8c@X{6F<&U5aQOM_Ye z^*~x=VpY)ePQ2}>XQW6yhHO{(eB4>SSAHfYE*HGx{K@%~4i zIjj7eamAoUE`0YM`B)ZioUrnhpfNwyW~hZ5O{-rC>Z#Sc@^|-S3#1S~V9%T{+gR#w zyZa(g-WbF4wQ2B1eL$6JT(aJi%NC&=%Bg>%Y5xYd3@84^Qy$cu?x7F0tFP|mYW~U~9%#jalE##*O1HHEzhiJdilldkD#uD~-ASP5}3P_}909uT{Qx|E4iJ zU2W{gTOZ2&BbaYDAghTke&R&dXJTU-KPFdI2kWk@xfO;T2S1YCNqq$4zZ<>yl8sj@ z-usB$?J-fk%?-S23pF$jF?(?v2d@t7@mQ?+KZdmmvzJ(lUxX+4L|B7^b0IK%S(Hw`9Mk z_}HTTq%gi1=fi#m8$S){&{ILW_!LM(Ci$?djZFw2v$1jDY)=~#_k1R=X*ra?Kzt$9 zryZ9(ll2R>6W@DQi+z2qFS~B=b>oUpe0_QPbJ6?oIj~<}FOpFHP6l(o!`PGp8GDU0 z3w<3q?mMj(p8ofRk5}WmiF4HHdRc`!Xp=?1M-lX|LLWXoS4g2-ERtT|OI3*d9)ls< zEQ4=u_jML^RsAmQOr)LIlqa~7J6pjY+3w4$cKCMX_CE-+a@tU}gX4an&V1o}au^vf zec+I~e>Q4jHUHm Uyeo9NUHV=6C%HP^;b8>sKO?j55dZ)H delta 7551 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 diff --git a/java_console/models/src/main/java/com/rusefi/config/generated/AcControl.java b/java_console/models/src/main/java/com/rusefi/config/generated/AcControl.java index 9a521b4ef9..e391b288e7 100644 --- a/java_console/models/src/main/java/com/rusefi/config/generated/AcControl.java +++ b/java_console/models/src/main/java/com/rusefi/config/generated/AcControl.java @@ -1,6 +1,6 @@ package com.rusefi.config.generated; -// this file was generated automatically by rusEFI tool ConfigDefinition.jar based on (unknown script) integration/ac_control.txt Thu Oct 14 00:25:42 EDT 2021 +// this file was generated automatically by rusEFI tool ConfigDefinition.jar based on (unknown script) integration/ac_control.txt Thu Oct 14 14:49:24 EDT 2021 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -38,6 +38,7 @@ public class AcControl { public static final Field UNUSEDBIT_6_29 = Field.create("UNUSEDBIT_6_29", 0, FieldType.BIT, 29); public static final Field UNUSEDBIT_6_30 = Field.create("UNUSEDBIT_6_30", 0, FieldType.BIT, 30); public static final Field UNUSEDBIT_6_31 = Field.create("UNUSEDBIT_6_31", 0, FieldType.BIT, 31); + public static final Field LATEST_USAGE_AC_CONTROL = Field.create("LATEST_USAGE_AC_CONTROL", 4, FieldType.INT); public static final Field[] VALUES = { ENGINETOOSLOW, ENGINETOOFAST, @@ -71,5 +72,6 @@ public class AcControl { UNUSEDBIT_6_29, UNUSEDBIT_6_30, UNUSEDBIT_6_31, + LATEST_USAGE_AC_CONTROL, }; }