diff --git a/firmware/console/binary/output_channels.txt b/firmware/console/binary/output_channels.txt index 65f09429dd..3861937eed 100644 --- a/firmware/console/binary/output_channels.txt +++ b/firmware/console/binary/output_channels.txt @@ -63,7 +63,7 @@ uint16_t rpmAcceleration;dRPM;"RPM/s",1, 0, 0, 0, 0 uint16_t autoscale lambdaValue;@@GAUGE_NAME_LAMBDA@@;"",{1/@@PACK_MULT_LAMBDA@@}, 0, 0, 0, 0 uint8_t autoscale knockRetard;;"deg",{1/10}, 0, 0, 0, 0 - uint8_t idleCurrentPosition;;"",1, 0, 0, 0, 0 + uint8_t autoscale idleCurrentPosition;;"%", 0.5, 0, 0, 100, 1 uint16_t autoscale VBatt;@@GAUGE_NAME_VBAT@@;"V",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 0, 0 @@ -200,7 +200,7 @@ uint16_t rpmAcceleration;dRPM;"RPM/s",1, 0, 0, 0, 0 int16_t autoscale rawPpsSecondary;;"V",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 5, 3 - int8_t[12 iterate] autoscale knock;;"",1, 0, 0, 0, 0 + int8_t[12 iterate] autoscale knock;;"dBv",1, 0, 0, 0, 0 uint8_t autoscale tcuDesiredGear;@@GAUGE_NAME_DESIRED_GEAR@@;"gear",1, 0, 0, 0, 0 uint8_t autoscale flexPercent;@@GAUGE_NAME_FLEX@@;"%",{1/2}, 0, 0, 0, 0 @@ -228,7 +228,7 @@ uint16_t rpmAcceleration;dRPM;"RPM/s",1, 0, 0, 0, 0 int16_t autoscale vvtPositionB2I;@@GAUGE_NAME_VVT_B2I@@;"deg",{1/@@PACK_MULT_ANGLE@@}, 0, 0, 0, 0 int16_t autoscale vvtPositionB2E;@@GAUGE_NAME_VVT_B2E@@;"deg",{1/@@PACK_MULT_ANGLE@@}, 0, 0, 0, 0 - int16_t[2 iterate] autoscale fuelPidCorrection;;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 + int16_t[2 iterate] autoscale fuelPidCorrection;;"%",{1/@@PACK_MULT_PERCENT@@}, 0, -20, 20, 2 int16_t autoscale rawTps1Secondary;;"V",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 5, 3 int16_t autoscale rawTps2Primary;;"V",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 5, 3 @@ -237,18 +237,18 @@ uint16_t rpmAcceleration;dRPM;"RPM/s",1, 0, 0, 0, 0 uint16_t knockCount;"knock: count";"",1, 0, 0, 0, 0 int16_t autoscale accelerationZ;@@GAUGE_NAME_ACCEL_Z@@;"G",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 - int16_t autoscale accelerationRoll;@@GAUGE_NAME_ACCEL_ROLL@@;"",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 - int16_t autoscale accelerationYaw;@@GAUGE_NAME_ACCEL_YAW@@;"",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 + int16_t autoscale accelerationRoll;@@GAUGE_NAME_ACCEL_ROLL@@;"G",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 + int16_t autoscale accelerationYaw;@@GAUGE_NAME_ACCEL_YAW@@;"G",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 int8_t[4 iterate] autoscale vvtTargets;;"deg",1, 0, 0, 0, 0 uint16_t turboSpeed;@@GAUGE_NAME_TURBO_SPEED@@;"hz",1, 0, 0, 0, 0 struct pid_status_s - float iTerm;;"", 1, 0, -10000, 10000, 3 - float dTerm;;"", 1, 0, -10000, 10000, 3 - float output;;"", 1, 0, -10000, 10000, 3 - float error;;"", 1, 0, -10000, 10000, 3 - int resetCounter;;"", 1, 0, -10000, 10000, 0 + int16_t autoscale iTerm;;"", 0.01, 0, -327, 327, 2 + int16_t autoscale dTerm;;"", 0.01, 0, -327, 327, 2 + int16_t autoscale output;;"", 0.01, 0, -327, 327, 2 + int16_t autoscale error;;"", 0.01, 0, -327, 327, 2 + uint32_t resetCounter;;"", 1, 0, 0, 10000, 0 end_struct uint16_t[2 iterate] wbTemperature;;"deg C", 1, 0, 0, 1000, 0 @@ -260,7 +260,7 @@ uint16_t rpmAcceleration;dRPM;"RPM/s",1, 0, 0, 0, 0 int16_t autoscale accPedalSplit;;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 int16_t autoscale m_requested_pump;"DI: Pump Angle";"deg",{1/@@PACK_MULT_ANGLE@@}, 0, 0, 0, 0 - int16_t autoscale boostControlTarget;"Pump Angle";"deg",{1/@@PACK_MULT_PRESSURE@@}, 0, 0, 0, 0 + int16_t autoscale boostControlTarget;@@GAUGE_NAME_BOOST_TARGET@@;"kPa",{1/@@PACK_MULT_PRESSURE@@}, 0, 0, 0, 0 int8_t autoscale sparkCutReason;"Spark Cut Code";"code",1, 0, 0, 0, 0 int8_t autoscale fuelCutReason;"Fuel Cut Code";"code",1, 0, 0, 0, 0 float fuel_requested_percent;"DI: fuel_requested_percent";"v", 1, 0, 0, 100, 0 @@ -288,7 +288,7 @@ uint16_t rpmAcceleration;dRPM;"RPM/s",1, 0, 0, 0, 0 int luaInvocationCounter;;"count",1, 0, 0, 0, 0 int luaLastCycleDuration;;"nt",1, 0, 0, 0, 0 uint8_t testBenchIter;;"count",1, 0, 0, 0, 0 - uint8_t[75 iterate] unusedAtTheEnd;;"",1, 0, 0, 0, 0 + uint8_t[15 iterate] unusedInTheMiddle;;"",1, 0, 0, 0, 0 int16_t autoscale auxLinear1;@@GAUGE_NAME_AUX_LINEAR_1@@;"", 0.01, 0, 0, 0, 0 int16_t autoscale auxLinear2;@@GAUGE_NAME_AUX_LINEAR_2@@;"", 0.01, 0, 0, 0, 0 @@ -304,9 +304,9 @@ uint16_t rpmAcceleration;dRPM;"RPM/s",1, 0, 0, 0, 0 bit tpsAccelActive uint8_t TEMPLOG_MAP_AT_CYCLE_COUNT;;"", 1, 0, -10000, 10000, 3 - uint8_t boostControllerOutput;;"", 1, 0, -10000, 10000, 0 - uint8_t boostControllerClosedLoopPart;;"", 1, 0, -10000, 10000, 0 - uint8_t boostControllerOpenLoopPart;;"", 1, 0, -10000, 10000, 0 + uint8_t TEMPLOG_map_peak;;"", 1, 0, -10000, 10000, 3 + uint8_t autoscale boostControllerOutput;@@GAUGE_NAME_BOOST_OUTPUT@@;"%", 0.5, 0, 0, 100, 1 + uint8_t autoscale boostControllerOpenLoopPart;@@GAUGE_NAME_BOOST_OPEN_LOOP@@;"%", 0.5, 0, 0, 100, 1 float autoscale TEMPLOG_MAP_AT_SPECIAL_POINT;;"", 1, 0, -10000, 10000, 3 float autoscale TEMPLOG_MAP_AT_DIFF;;"", 1, 0, -10000, 10000, 3 @@ -321,19 +321,15 @@ uint16_t rpmAcceleration;dRPM;"RPM/s",1, 0, 0, 0, 0 uint8_t vvtSyncCounter;;"", 1, 0, -10000, 10000, 3 uint8_t vvtStateIndex;;"", 1, 0, -10000, 10000, 3 + uint16_t autoscale fallbackMap;;"kPa", 0.1, 0, 0, 1000, 1 - float autoscale TEMPLOG_MAP_INSTANT_AVERAGE;;"", 1, 0, -10000, 10000, 3 + int8_t autoscale boostControllerClosedLoopPart;@@GAUGE_NAME_BOOST_CLOSED_LOOP@@;"%", 0.5, 0, -50, 50, 1 + uint8_t unused503;;"", 1, 0, 0, 0, 0 - uint8_t fallbackMap;;"", 1, 0, -10000, 10000, 3 - uint8_t TEMPLOG_map_peak;;"", 1, 0, -10000, 10000, 3 - uint8_t TEMPLOG_map_length;;"", 1, 0, -10000, 10000, 3 - uint8_t TEMPLOG_mapIndex;;"", 1, 0, -10000, 10000, 3 - - - uint16_t autoscale timingCltCorrection;;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 - uint16_t autoscale timingIatCorrection;;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 - uint16_t autoscale timingPidCorrection;;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 - uint16_t autoscale instantMAPValue;Instant MAP;"kPa",{1/@@PACK_MULT_PRESSURE@@}, 0, 0, 0, 0 + int16_t autoscale timingCltCorrection;;"%",{1/@@PACK_MULT_PERCENT@@}, 0, -20, 20, 2 + int16_t autoscale timingIatCorrection;;"%",{1/@@PACK_MULT_PERCENT@@}, 0, -20, 20, 2 + int16_t autoscale timingPidCorrection;;"%",{1/@@PACK_MULT_PERCENT@@}, 0, -20, 20, 2 + uint16_t autoscale instantMAPValue;Instant MAP;"kPa",{1/@@PACK_MULT_PRESSURE@@}, 0, 0, 655, 2 uint16_t mostRecentTimeBetweenSparkEvents;;"", 1, 0, -10000, 10000, 3 uint16_t mostRecentTimeBetweenIgnitionEvents;;"", 1, 0, -10000, 10000, 3 @@ -341,7 +337,6 @@ uint16_t rpmAcceleration;dRPM;"RPM/s",1, 0, 0, 0, 0 uint16_t maxLockedDuration;;"", 1, 0, -10000, 10000, 3 uint16_t maxTriggerReentrant;;"", 1, 0, -10000, 10000, 3 - uint16_t canWriteOk;;"", 1, 0, -10000, 10000, 3 uint16_t canWriteNotOk;;"", 1, 0, -10000, 10000, 3 @@ -361,14 +356,16 @@ uint16_t rpmAcceleration;dRPM;"RPM/s",1, 0, 0, 0, 0 int idleState;;"", 1, 0, -10000, 10000, 3 float injectorFlowPressureRatio;;"", 1, 0, -10000, 10000, 3 - float injectorFlowPressureDelta;;"", 1, 0, -10000, 10000, 3 + float injectorFlowPressureDelta;;"kPa", 1, 0, -10000, 10000, 1 - float etbFeedForward;;"", 1, 0, -10000, 10000, 3 + float etbFeedForward;;"%", 1, 0, -10000, 10000, 3 float etbIntegralError;;"", 1, 0, -10000, 10000, 3 - float etbCurrentTarget;;"", 1, 0, -10000, 10000, 3 + float etbCurrentTarget;;"%", 1, 0, -10000, 10000, 3 pid_status_s alternatorStatus pid_status_s idleStatus pid_status_s etbStatus + pid_status_s boostStatus + uint8_t[76 iterate] unusedAtTheEnd;;"",1, 0, 0, 0, 0 end_struct diff --git a/firmware/console/binary_log/log_fields_generated.h b/firmware/console/binary_log/log_fields_generated.h index fdbd43d902..ba4e32de30 100644 --- a/firmware/console/binary_log/log_fields_generated.h +++ b/firmware/console/binary_log/log_fields_generated.h @@ -103,4 +103,8 @@ static constexpr LogField fields[] = { {engine->outputChannels.fuelCutReason, "Fuel Cut Code", "", 0}, {engine->outputChannels.auxLinear1, GAUGE_NAME_AUX_LINEAR_1, "", 2}, {engine->outputChannels.auxLinear2, GAUGE_NAME_AUX_LINEAR_2, "", 2}, + {engine->outputChannels.boostControllerOutput, GAUGE_NAME_BOOST_OUTPUT, "%", 1}, + {engine->outputChannels.boostControllerClosedLoopPart, GAUGE_NAME_BOOST_CLOSED_LOOP, "%", 1}, + {engine->outputChannels.boostControllerOpenLoopPart, GAUGE_NAME_BOOST_OPEN_LOOP, "%", 1}, + {engine->outputChannels.boostControlTarget, GAUGE_NAME_BOOST_TARGET, "kPa", 1}, }; diff --git a/firmware/controllers/actuators/alternator_controller.cpp b/firmware/controllers/actuators/alternator_controller.cpp index e77ccf39b8..e44938629b 100644 --- a/firmware/controllers/actuators/alternator_controller.cpp +++ b/firmware/controllers/actuators/alternator_controller.cpp @@ -46,7 +46,7 @@ void AlternatorController::onFastCallback() { // this block could be executed even in on/off alternator control mode // but at least we would reflect latest state #if EFI_TUNER_STUDIO - alternatorPid.postState(&engine->outputChannels.alternatorStatus); + alternatorPid.postState(engine->outputChannels.alternatorStatus); #endif /* EFI_TUNER_STUDIO */ bool alternatorShouldBeEnabledAtCurrentRpm = Sensor::getOrZero(SensorType::Rpm) > engineConfiguration->cranking.rpm; diff --git a/firmware/controllers/actuators/boost_control.cpp b/firmware/controllers/actuators/boost_control.cpp index a2fe248e80..3f9dfa1a68 100644 --- a/firmware/controllers/actuators/boost_control.cpp +++ b/firmware/controllers/actuators/boost_control.cpp @@ -111,23 +111,23 @@ percent_t BoostController::getClosedLoopImpl(float target, float manifoldPressur if (isBelowClosedLoopThreshold) { // We're below the CL threshold, inhibit CL for now m_pid.reset(); - closedLoopPart = 0; - return closedLoopPart; + return 0; } - closedLoopPart = m_pid.getOutput(target, manifoldPressure, SLOW_CALLBACK_PERIOD_MS / 1000.0f); - engine->outputChannels.boostControllerClosedLoopPart = closedLoopPart; - return closedLoopPart; + return m_pid.getOutput(target, manifoldPressure, SLOW_CALLBACK_PERIOD_MS / 1000.0f); } expected BoostController::getClosedLoop(float target, float manifoldPressure) { - auto closedLoop = getClosedLoopImpl(target, manifoldPressure); + closedLoopPart = getClosedLoopImpl(target, manifoldPressure); + + engine->outputChannels.boostControllerClosedLoopPart = closedLoopPart; + m_pid.postState(engine->outputChannels.boostStatus); #if EFI_TUNER_STUDIO engine->outputChannels.boostControlTarget = target; #endif /* EFI_TUNER_STUDIO */ - return closedLoop; + return closedLoopPart; } void BoostController::setOutput(expected output) { diff --git a/firmware/controllers/actuators/electronic_throttle.cpp b/firmware/controllers/actuators/electronic_throttle.cpp index e42d051ff3..f1375c8cbb 100644 --- a/firmware/controllers/actuators/electronic_throttle.cpp +++ b/firmware/controllers/actuators/electronic_throttle.cpp @@ -543,7 +543,7 @@ void EtbController::update() { #if EFI_TUNER_STUDIO // Only debug throttle #1 if (m_function == ETB_Throttle1) { - m_pid.postState(&engine->outputChannels.etbStatus); + m_pid.postState(engine->outputChannels.etbStatus); engine->outputChannels.etbFeedForward = engine->engineState.etbFeedForward; engine->outputChannels.etbStatus.output = directPwmValue; } diff --git a/firmware/controllers/actuators/idle_thread.cpp b/firmware/controllers/actuators/idle_thread.cpp index 5fdb5acc96..a1daa617f1 100644 --- a/firmware/controllers/actuators/idle_thread.cpp +++ b/firmware/controllers/actuators/idle_thread.cpp @@ -344,7 +344,7 @@ float IdleController::getIdlePosition() { if (engineConfiguration->idleMode == IM_AUTO) { // see also tsOutputChannels->idlePosition - getIdlePid()->postState(&engine->outputChannels.idleStatus); + getIdlePid()->postState(engine->outputChannels.idleStatus); engine->outputChannels.idleState = idleState; } else { engine->outputChannels.idleCurrentPosition = iacPosition; diff --git a/firmware/controllers/actuators/vvt.cpp b/firmware/controllers/actuators/vvt.cpp index f22cdfaf6f..fe603ce9ce 100644 --- a/firmware/controllers/actuators/vvt.cpp +++ b/firmware/controllers/actuators/vvt.cpp @@ -76,7 +76,7 @@ expected VvtController::getClosedLoop(angle_t target, angle_t observa } #if EFI_TUNER_STUDIO - static debug_mode_e debugModeByIndex[4] = {DBG_VVT_1_PID, DBG_VVT_2_PID, DBG_VVT_3_PID, DBG_VVT_4_PID}; + static constexpr const debug_mode_e debugModeByIndex[4] = {DBG_VVT_1_PID, DBG_VVT_2_PID, DBG_VVT_3_PID, DBG_VVT_4_PID}; if (engineConfiguration->debugMode == debugModeByIndex[index]) { m_pid.postState(&engine->outputChannels); diff --git a/firmware/controllers/limp_manager.h b/firmware/controllers/limp_manager.h index a52d968525..04b11af0ed 100644 --- a/firmware/controllers/limp_manager.h +++ b/firmware/controllers/limp_manager.h @@ -15,8 +15,8 @@ enum class ClearReason : uint8_t { StopRequested, // 7 EtbProblem, // 8 LaunchCut, // 9 - InjectorDutyCycle, - FloodClear, + InjectorDutyCycle, // 10 + FloodClear, // 11 }; // Only allows clearing the value, but never resetting it. diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index c3f1b168e9..a72bdf97fc 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -1735,6 +1735,10 @@ end_struct #define GAUGE_NAME_AUX_LINEAR_1 "Aux Linear 1" #define GAUGE_NAME_AUX_LINEAR_2 "Aux Linear 2" +#define GAUGE_NAME_BOOST_OUTPUT "Boost Output" +#define GAUGE_NAME_BOOST_CLOSED_LOOP "Boost Closed Loop" +#define GAUGE_NAME_BOOST_OPEN_LOOP "Boost Open Loop" +#define GAUGE_NAME_BOOST_TARGET "Boost Target" #define INDICATOR_NAME_CLUTCH_UP "clutch: up" #define INDICATOR_NAME_CLUTCH_DOWN "clutch: down" diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index e41187d009..69918abec6 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -1009,7 +1009,6 @@ canWriteOkGauge = canWriteOk,"canWriteOk", "", -10000.0,10000.0, -10000.0,10000. canWriteNotOkGauge = canWriteNotOk,"canWriteNotOk", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3 gaugeCategory = MAP Cam -TEMPLOG_MAP_INSTANT_AVERAGEGauge = TEMPLOG_MAP_INSTANT_AVERAGE,"TEMPLOG_MAP_INSTANT_AVERAGE", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3 TEMPLOG_map_peakGauge = TEMPLOG_map_peak,"TEMPLOG_map_peak", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3 TEMPLOG_MAP_AT_SPECIAL_POINTGauge = TEMPLOG_MAP_AT_SPECIAL_POINT,"TEMPLOG_MAP_AT_SPECIAL_POINT", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3 TEMPLOG_MAP_AT_DIFFGauge = TEMPLOG_MAP_AT_DIFF,"TEMPLOG_MAP_AT_DIFF", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3 @@ -1277,7 +1276,7 @@ gaugeCategory = DynoView indicator = { isFanOn }, "fan off", "fan on", white, black, green, black indicator = { isFan2On }, "fan 2 off", "fan 2 on", white, black, green, black indicator = { isMainRelayOn }, "main relay off", "main relay on", white, black, green, black - indicator = { isCylinderCleanupActivated}, "no cyl cleanup", "cyl cleanup", white, black, yellow, black + indicator = { fuelCutReason == 11 }, "no cyl cleanup", "cyl cleanup", white, black, yellow, black indicator = { isFuelPumpOn}, "pump off", "pump on", white, black, green, black indicator = { clutchUpState }, "Clutch Up", "clutch Up", white, black, red, black indicator = { clutchDownState }, "Clutch Down", "Clutch Down", white, black, yellow, black diff --git a/firmware/util/math/efi_pid.cpp b/firmware/util/math/efi_pid.cpp index 9572aec8fc..8ad13e12cf 100644 --- a/firmware/util/math/efi_pid.cpp +++ b/firmware/util/math/efi_pid.cpp @@ -135,11 +135,11 @@ void Pid::postState(TunerStudioOutputChannels *tsOutputChannels) const { postState(tsOutputChannels, 1); } -void Pid::postState(pid_status_s *pidStatus) const { - pidStatus->output = output; - pidStatus->error = getPrevError(); - pidStatus->iTerm = iTerm; - pidStatus->dTerm = dTerm; +void Pid::postState(pid_status_s& pidStatus) const { + pidStatus.output = output; + pidStatus.error = getPrevError(); + pidStatus.iTerm = iTerm; + pidStatus.dTerm = dTerm; } /** diff --git a/firmware/util/math/efi_pid.h b/firmware/util/math/efi_pid.h index 301031cff0..62d03717e1 100644 --- a/firmware/util/math/efi_pid.h +++ b/firmware/util/math/efi_pid.h @@ -58,7 +58,7 @@ public: float getPrevError(void) const; void setErrorAmplification(float coef); #if EFI_TUNER_STUDIO - void postState(pid_status_s *pidStatus) const; + void postState(pid_status_s& pidStatus) const; void postState(TunerStudioOutputChannels *tsOutputChannels) const; void postState(TunerStudioOutputChannels *tsOutputChannels, int pMult) const; #endif /* EFI_TUNER_STUDIO */