Whatever we call it, how ever we implement it - we need live data / remote view into rusEFI actual state #3353

This commit is contained in:
rusefillc 2021-10-14 00:47:26 -04:00
parent 6f3a453dc9
commit ff864ec0bf
5 changed files with 30 additions and 23 deletions

View File

@ -8,52 +8,49 @@ static Deadband<200> maxRpmDeadband;
static Deadband<5> maxCltDeadband;
static Deadband<5> maxTpsDeadband;
static bool getAcState(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
bool AcState::getAcState(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
auto rpm = Sensor::getOrZero(SensorType::Rpm);
// Engine too slow, disable
if (rpm < 500) {
engineTooSlow = rpm < 500;
if (engineTooSlow) {
return false;
}
// Engine too fast, disable
auto maxRpm = CONFIG(maxAcRpm);
if (maxRpm != 0) {
if (maxRpmDeadband.gt(rpm, maxRpm)) {
return false;
}
engineTooFast = maxRpm != 0 && maxRpmDeadband.gt(rpm, maxRpm);
if (engineTooFast) {
return false;
}
auto clt = Sensor::get(SensorType::Clt);
noClt = !clt;
// No AC with failed CLT
if (!clt) {
if (noClt) {
return false;
}
// Engine too hot, disable
auto maxClt = CONFIG(maxAcClt);
if (maxClt != 0) {
if (maxCltDeadband.gt(maxClt, clt.Value)) {
return false;
}
engineTooHot = (maxClt != 0) && maxCltDeadband.gt(maxClt, clt.Value);
if (engineTooHot) {
return false;
}
// TPS too high, disable
auto maxTps = CONFIG(maxAcTps);
if (maxTps != 0) {
auto tps = Sensor::getOrZero(SensorType::Tps1);
if (maxTpsDeadband.gt(maxTps, tps)) {
tpsTooHigh = maxTps != 0 && maxTpsDeadband.gt(maxTps, Sensor::getOrZero(SensorType::Tps1));
if (tpsTooHigh) {
return false;
}
}
acButtonState = ENGINE(acSwitchState);
// All conditions allow AC, simply pass thru switch
return ENGINE(acSwitchState);
return acButtonState;
}
bool updateAc(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
bool AcState::updateAc(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
bool isEnabled = getAcState(PASS_ENGINE_PARAMETER_SIGNATURE);
enginePins.acRelay.setValue(isEnabled);

View File

@ -1,6 +1,13 @@
#pragma once
#include "engine_ptr.h"
#include "ac_control_generated.h"
// Returns true if AC is currently active
bool updateAc(DECLARE_ENGINE_PARAMETER_SIGNATURE);
class AcState final : public ac_control_s {
public:
// Returns true if AC is currently active
bool updateAc(DECLARE_ENGINE_PARAMETER_SIGNATURE);
private:
bool getAcState(DECLARE_ENGINE_PARAMETER_SIGNATURE);
};

View File

@ -225,7 +225,7 @@ void Engine::periodicSlowCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
runHardcodedFsio(PASS_ENGINE_PARAMETER_SIGNATURE);
#endif /* EFI_FSIO */
bool acActive = updateAc(PASS_ENGINE_PARAMETER_SIGNATURE);
bool acActive = acState.updateAc(PASS_ENGINE_PARAMETER_SIGNATURE);
updateFans(acActive PASS_ENGINE_PARAMETER_SUFFIX);
updateGppwm();

View File

@ -20,6 +20,7 @@
#include "gear_controller.h"
#include "limp_manager.h"
#include "pin_repository.h"
#include "ac_control.h"
#if EFI_SIGNAL_EXECUTOR_ONE_TIMER
// PROD real firmware uses this implementation
@ -88,6 +89,7 @@ public:
DECLARE_ENGINE_PTR;
Engine();
AcState acState;
bool enableOverdwellProtection = true;
bool isPwmEnabled = true;
int triggerActivitySecond = 0;

View File

@ -1762,6 +1762,7 @@ end_struct
#define LDS_ALTERNATOR_PID_STATE_INDEX 9
#define LDS_CJ125_PID_STATE_INDEX 10
#define LDS_TRIGGER_STATE_STATE_INDEX 11
#define LDS_AC_STATE 12