From 9dbf3896d8e5cf30461d732e118e1f46368e746d Mon Sep 17 00:00:00 2001 From: rusefillc Date: Tue, 21 Nov 2023 11:53:15 -0500 Subject: [PATCH] luaDigitalState into TS --- firmware/controllers/algo/engine_state.txt | 4 ++++ firmware/controllers/lua/lua.cpp | 5 +++++ firmware/controllers/lua/lua_hooks.cpp | 12 ++++++++++-- firmware/controllers/lua/lua_hooks.h | 1 + 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/firmware/controllers/algo/engine_state.txt b/firmware/controllers/algo/engine_state.txt index c9f7c809f6..e98b39af76 100644 --- a/firmware/controllers/algo/engine_state.txt +++ b/firmware/controllers/algo/engine_state.txt @@ -43,6 +43,10 @@ struct_no_prefix engine_state_s bit acrEngineMovedRecently ! same field is used for narrow band heater enable and wide band enable via CAN bit heaterControlEnabled + bit luaDigitalState0 + bit luaDigitalState1 + bit luaDigitalState2 + bit luaDigitalState3 uint32_t startStopStateToggleCounter float egtValue1 diff --git a/firmware/controllers/lua/lua.cpp b/firmware/controllers/lua/lua.cpp index 682c1dd0ef..ec2dec0bef 100644 --- a/firmware/controllers/lua/lua.cpp +++ b/firmware/controllers/lua/lua.cpp @@ -335,6 +335,11 @@ static bool runOneLua(lua_Alloc alloc, const char* script) { chThdSleep(TIME_US2I(luaTickPeriodUs)); engine->outputChannels.luaLastCycleDuration = (getTimeNowNt() - beforeNt); engine->outputChannels.luaInvocationCounter++; + + engine->engineState.luaDigitalState0 = getAuxDigital(0); + engine->engineState.luaDigitalState1 = getAuxDigital(1); + engine->engineState.luaDigitalState2 = getAuxDigital(2); + engine->engineState.luaDigitalState3 = getAuxDigital(3); } resetLua(); diff --git a/firmware/controllers/lua/lua_hooks.cpp b/firmware/controllers/lua/lua_hooks.cpp index e5a9db34f4..2a3ad4ccb7 100644 --- a/firmware/controllers/lua/lua_hooks.cpp +++ b/firmware/controllers/lua/lua_hooks.cpp @@ -326,6 +326,14 @@ static int lua_getDigital(lua_State* l) { return 1; } +bool getAuxDigital(int index) { +#if EFI_PROD_CODE + return efiReadPin(engineConfiguration->luaDigitalInputPins[index]); +#else + return false; +#endif +} + static int lua_getAuxDigital(lua_State* l) { auto idx = luaL_checkinteger(l, 1); if (idx < 0 || idx >= LUA_DIGITAL_INPUT_COUNT) { @@ -341,7 +349,7 @@ static int lua_getAuxDigital(lua_State* l) { } #if !EFI_SIMULATOR - bool state = efiReadPin(engineConfiguration->luaDigitalInputPins[idx]); + bool state = getAuxDigital(idx); lua_pushboolean(l, state); #endif // !EFI_SIMULATOR @@ -637,7 +645,7 @@ static int lua_vincpy(lua_State* l) { size_t sourceIndex = luaL_checknumber(l, 2); size_t destinationIndex = luaL_checknumber(l, 3); size_t size = luaL_checknumber(l, 4); - for (int i = 0;ivinNumber[sourceIndex + i]); lua_rawseti(l, 1, destinationIndex + i); } diff --git a/firmware/controllers/lua/lua_hooks.h b/firmware/controllers/lua/lua_hooks.h index 6e2f6dde8c..0ec8b9012b 100644 --- a/firmware/controllers/lua/lua_hooks.h +++ b/firmware/controllers/lua/lua_hooks.h @@ -6,3 +6,4 @@ void luaDeInitPins(); struct AirmassModelBase; AirmassModelBase& getLuaAirmassModel(); +bool getAuxDigital(int index);