diff --git a/radio/src/gui/colorlcd/standalone_lua.cpp b/radio/src/gui/colorlcd/standalone_lua.cpp index 5d54816a782..2be86944bcb 100644 --- a/radio/src/gui/colorlcd/standalone_lua.cpp +++ b/radio/src/gui/colorlcd/standalone_lua.cpp @@ -126,7 +126,7 @@ void StandaloneLuaWindow::checkEvents() if (luaState != INTERPRETER_RELOAD_PERMANENT_SCRIPTS) { // if LUA finished a full cycle, // invalidate to display the screen buffer - if (luaTask(0, true)) { invalidate(); } + if (luaTask(true)) { invalidate(); } } if (luaState == INTERPRETER_RELOAD_PERMANENT_SCRIPTS) { diff --git a/radio/src/lua/interface.cpp b/radio/src/lua/interface.cpp index b6073d970d4..7fa68db68d0 100644 --- a/radio/src/lua/interface.cpp +++ b/radio/src/lua/interface.cpp @@ -1255,14 +1255,11 @@ static bool resumeLua(bool init, bool allowLcdUsage) } //resumeLua(...) -bool luaTask(event_t evt, bool allowLcdUsage) +bool luaTask(bool allowLcdUsage) { bool init = false; bool scriptWasRun = false; - // Add event to buffer - if (evt != 0) { luaPushEvent(evt); } - // For preemption luaCycleStart = get_tmr10ms(); diff --git a/radio/src/lua/lua_api.h b/radio/src/lua/lua_api.h index a80afede465..6cc3a21e404 100644 --- a/radio/src/lua/lua_api.h +++ b/radio/src/lua/lua_api.h @@ -189,7 +189,7 @@ extern ScriptInternalData scriptInternalData[MAX_SCRIPTS]; extern ScriptInputsOutputs scriptInputsOutputs[MAX_SCRIPTS]; void luaClose(lua_State ** L); -bool luaTask(event_t evt, bool allowLcdUsage); +bool luaTask(bool allowLcdUsage); void checkLuaMemoryUsage(); void luaExec(const char * filename); void luaDoGc(lua_State * L, bool full); diff --git a/radio/src/main.cpp b/radio/src/main.cpp index 625f92e8ddc..d15fcee93a1 100644 --- a/radio/src/main.cpp +++ b/radio/src/main.cpp @@ -34,6 +34,10 @@ #include "cli.h" #endif +#if defined(LUA) + #include "lua/lua_event.h" +#endif + uint8_t currentSpeakerVolume = 255; uint8_t requiredSpeakerVolume = 255; uint8_t currentBacklightBright = 0; @@ -394,7 +398,7 @@ void guiMain(event_t evt) } DEBUG_TIMER_START(debugTimerLua); - luaTask(0, false); + luaTask(false); DEBUG_TIMER_STOP(debugTimerLua); t0 = get_tmr10ms() - t0; @@ -429,14 +433,17 @@ void guiMain(event_t evt) bool handleGui(event_t event) { bool refreshNeeded; #if defined(LUA) - refreshNeeded = luaTask(event, true); - if (menuHandlers[menuLevel] == menuViewTelemetry && - TELEMETRY_SCREEN_TYPE(s_frsky_view) == TELEMETRY_SCREEN_TYPE_SCRIPT) { - menuHandlers[menuLevel](event); - } + bool isTelemView = + menuHandlers[menuLevel] == menuViewTelemetry && + TELEMETRY_SCREEN_TYPE(s_frsky_view) == TELEMETRY_SCREEN_TYPE_SCRIPT; + bool isStandalone = scriptInternalData[0].reference == SCRIPT_STANDALONE; + if (isTelemView || isStandalone) luaPushEvent(event); + refreshNeeded = luaTask(true); + if (isTelemView) + menuHandlers[menuLevel](event); else if (scriptInternalData[0].reference != SCRIPT_STANDALONE) #endif -// No foreground Lua script is running - clear the screen show normal menu + // No foreground Lua script is running - clear the screen show normal menu { lcdClear(); menuHandlers[menuLevel](event); @@ -460,7 +467,7 @@ void guiMain(event_t evt) } // run Lua scripts that don't use LCD (to use CPU time while LCD DMA is running) - luaTask(0, false); + luaTask(false); t0 = get_tmr10ms() - t0; if (t0 > maxLuaDuration) {