diff --git a/firmware/controllers/algo/engine.cpp b/firmware/controllers/algo/engine.cpp index 0bc010371e..726abf07c9 100644 --- a/firmware/controllers/algo/engine.cpp +++ b/firmware/controllers/algo/engine.cpp @@ -311,11 +311,16 @@ void Engine::updateSwitchInputs() { if (isBrainPinValid(engineConfiguration->clutchDownPin)) { engine->engineState.clutchDownState = engineConfiguration->clutchDownPinInverted ^ efiReadPin(engineConfiguration->clutchDownPin); } - if (hasAcToggle()) { - bool result = getAcToggle(); + { + bool currentState; + if (hasAcToggle()) { + currentState = getAcToggle(); + } else { + currentState = engine->engineState.lua.acRequestState; + } AcController & acController = engine->module().unmock(); - if (acController.acButtonState != result) { - acController.acButtonState = result; + if (acController.acButtonState != currentState) { + acController.acButtonState = currentState; acController.acSwitchLastChangeTimeMs = US2MS(getTimeNowUs()); } } diff --git a/firmware/controllers/lua/lua_hooks.cpp b/firmware/controllers/lua/lua_hooks.cpp index 7e1e132446..72708f871d 100644 --- a/firmware/controllers/lua/lua_hooks.cpp +++ b/firmware/controllers/lua/lua_hooks.cpp @@ -558,6 +558,11 @@ void configureRusefiLuaHooks(lua_State* l) { return 0; }); + lua_register(l, "setAcRequestState", [](lua_State* l) { + engine->engineState.lua.acRequestState = lua_toboolean(l, 1); + return 0; + }); + lua_register(l, "getCalibration", [](lua_State* l) { auto propertyName = luaL_checklstring(l, 1, nullptr); auto result = getConfigValueByName(propertyName); diff --git a/firmware/controllers/sensors/allsensors.cpp b/firmware/controllers/sensors/allsensors.cpp index ad4343c5a8..9c9b0f1407 100644 --- a/firmware/controllers/sensors/allsensors.cpp +++ b/firmware/controllers/sensors/allsensors.cpp @@ -21,5 +21,5 @@ bool getAcToggle() { } bool hasAcToggle() { - return (isBrainPinValid(engineConfiguration->acSwitch)); + return isBrainPinValid(engineConfiguration->acSwitch); }