Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(lua): Do not pass key event that triggered telemetry view to lua #4168

Merged
merged 10 commits into from
Nov 6, 2023
2 changes: 1 addition & 1 deletion radio/src/gui/colorlcd/standalone_lua.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
5 changes: 1 addition & 4 deletions radio/src/lua/interface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down
2 changes: 1 addition & 1 deletion radio/src/lua/lua_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
21 changes: 14 additions & 7 deletions radio/src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -429,11 +433,14 @@ 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
Expand All @@ -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) {
Expand Down