From e57361f7e15fd3d61ca40a372d8161ca58914ab5 Mon Sep 17 00:00:00 2001 From: "David S. Beach" Date: Fri, 11 Sep 2015 11:12:10 -0400 Subject: [PATCH 1/3] 2.1.x implementation of displayLuaScriptError() --- radio/src/gui/Taranis/view_telemetry.cpp | 44 +++++++++++++++++++++++- radio/src/lua_api.cpp | 11 ++++++ radio/src/lua_api.h | 1 + 3 files changed, 55 insertions(+), 1 deletion(-) diff --git a/radio/src/gui/Taranis/view_telemetry.cpp b/radio/src/gui/Taranis/view_telemetry.cpp index 674f77da2..1b97dc763 100644 --- a/radio/src/gui/Taranis/view_telemetry.cpp +++ b/radio/src/gui/Taranis/view_telemetry.cpp @@ -182,11 +182,53 @@ void displayCustomTelemetryScreen(uint8_t index) displayNumbersTelemetryScreen(screen); } +#if defined(LUA) + +#define LUA_SCRIPT_ERROR_Y 3*FH +// TODO more visual appealing implementation and text translations +void displayLuaScriptError(uint8_t state, int index) +{ + TelemetryScriptData & script = g_model.frsky.screens[index].script; + char filename[sizeof(script.file)+1]; + strncpy(filename, script.file, sizeof(script.file)); + filename[sizeof(script.file)] = '\0'; + + lcd_putsAtt(0, LUA_SCRIPT_ERROR_Y, filename, 0); + lcd_putsAtt(lcdLastPos, LUA_SCRIPT_ERROR_Y, ": ", 0); + switch (state) { + case SCRIPT_SYNTAX_ERROR: + lcd_putsAtt(lcdLastPos, LUA_SCRIPT_ERROR_Y, "Script syntax error", 0); + break; + case SCRIPT_PANIC: + lcd_putsAtt(lcdLastPos, LUA_SCRIPT_ERROR_Y, "Script panic", 0); + break; + case SCRIPT_KILLED: + lcd_putsAtt(lcdLastPos, LUA_SCRIPT_ERROR_Y, "Script killed", 0); + break; + default: + lcd_putsAtt(lcdLastPos, LUA_SCRIPT_ERROR_Y, "Unknown error", 0); + } +} +#endif + bool displayTelemetryScreen() { #if defined(LUA) if (TELEMETRY_SCREEN_TYPE(s_frsky_view) == TELEMETRY_SCREEN_TYPE_SCRIPT) { - return true; + uint8_t state = isTelemetryScriptAvailable(s_frsky_view); + switch (state) { + case SCRIPT_OK: + return true; //contents will be drawed by Lua Task + case SCRIPT_NOFILE: + return false; //requested lua telemetry screen not available + case SCRIPT_SYNTAX_ERROR: + case SCRIPT_PANIC: + case SCRIPT_KILLED: + //display script error + displayLuaScriptError(state, s_frsky_view+1); + return true; + } + return false; } #endif diff --git a/radio/src/lua_api.cpp b/radio/src/lua_api.cpp index 246d69a1d..42710d60a 100644 --- a/radio/src/lua_api.cpp +++ b/radio/src/lua_api.cpp @@ -1784,6 +1784,17 @@ bool luaLoadTelemetryScript(uint8_t index) return true; } +uint8_t isTelemetryScriptAvailable(uint8_t index) +{ + for (int i=0; i Date: Fri, 25 Sep 2015 17:44:32 +0200 Subject: [PATCH 2/3] Lua error display function reused --- radio/src/gui/Taranis/view_telemetry.cpp | 36 ++---------------------- radio/src/lua_api.cpp | 27 ++++++++++++------ radio/src/translations.cpp | 4 +++ radio/src/translations.h | 4 +++ radio/src/translations/cz.h.txt | 4 +++ radio/src/translations/de.h.txt | 4 +++ radio/src/translations/en.h.txt | 4 +++ radio/src/translations/es.h.txt | 4 +++ radio/src/translations/fi.h.txt | 4 +++ radio/src/translations/fr.h.txt | 4 +++ radio/src/translations/it.h.txt | 4 +++ radio/src/translations/nl.h.txt | 4 +++ radio/src/translations/pl.h.txt | 4 +++ radio/src/translations/pt.h.txt | 4 +++ radio/src/translations/se.h.txt | 4 +++ 15 files changed, 73 insertions(+), 42 deletions(-) diff --git a/radio/src/gui/Taranis/view_telemetry.cpp b/radio/src/gui/Taranis/view_telemetry.cpp index 1b97dc763..e6c6eb7cb 100644 --- a/radio/src/gui/Taranis/view_telemetry.cpp +++ b/radio/src/gui/Taranis/view_telemetry.cpp @@ -182,35 +182,6 @@ void displayCustomTelemetryScreen(uint8_t index) displayNumbersTelemetryScreen(screen); } -#if defined(LUA) - -#define LUA_SCRIPT_ERROR_Y 3*FH -// TODO more visual appealing implementation and text translations -void displayLuaScriptError(uint8_t state, int index) -{ - TelemetryScriptData & script = g_model.frsky.screens[index].script; - char filename[sizeof(script.file)+1]; - strncpy(filename, script.file, sizeof(script.file)); - filename[sizeof(script.file)] = '\0'; - - lcd_putsAtt(0, LUA_SCRIPT_ERROR_Y, filename, 0); - lcd_putsAtt(lcdLastPos, LUA_SCRIPT_ERROR_Y, ": ", 0); - switch (state) { - case SCRIPT_SYNTAX_ERROR: - lcd_putsAtt(lcdLastPos, LUA_SCRIPT_ERROR_Y, "Script syntax error", 0); - break; - case SCRIPT_PANIC: - lcd_putsAtt(lcdLastPos, LUA_SCRIPT_ERROR_Y, "Script panic", 0); - break; - case SCRIPT_KILLED: - lcd_putsAtt(lcdLastPos, LUA_SCRIPT_ERROR_Y, "Script killed", 0); - break; - default: - lcd_putsAtt(lcdLastPos, LUA_SCRIPT_ERROR_Y, "Unknown error", 0); - } -} -#endif - bool displayTelemetryScreen() { #if defined(LUA) @@ -218,14 +189,13 @@ bool displayTelemetryScreen() uint8_t state = isTelemetryScriptAvailable(s_frsky_view); switch (state) { case SCRIPT_OK: - return true; //contents will be drawed by Lua Task + return true; // contents will be drawed by Lua Task case SCRIPT_NOFILE: - return false; //requested lua telemetry screen not available + return false; // requested lua telemetry screen not available case SCRIPT_SYNTAX_ERROR: case SCRIPT_PANIC: case SCRIPT_KILLED: - //display script error - displayLuaScriptError(state, s_frsky_view+1); + luaError(state); return true; } return false; diff --git a/radio/src/lua_api.cpp b/radio/src/lua_api.cpp index 42710d60a..bc789b94c 100644 --- a/radio/src/lua_api.cpp +++ b/radio/src/lua_api.cpp @@ -1826,41 +1826,50 @@ void luaLoadPermanentScripts() char lua_warning_str[WARNING_LINE_LEN+1]; char lua_warning_info[WARNING_LINE_LEN+1]; -void luaError(uint8_t error) +void luaError(uint8_t error, bool exit_button=false) { - const char *msg = lua_tostring(L, -1); + const char * msg = lua_tostring(L, -1); + if (msg) { #if defined(SIMU) - if (!strncmp(msg, "./", 2)) msg += 2; -#else - if (!strncmp(msg, "/SCRIPTS/", 9)) msg += 9; + if (!strncmp(msg, ".", 2)) msg += 1; #endif + if (!strncmp(msg, "/SCRIPTS/", 9)) msg += 9; strncpy(lua_warning_str, msg, WARNING_LINE_LEN); lua_warning_str[WARNING_LINE_LEN] = '\0'; - POPUP_WARNING(lua_warning_str); + for (int i=0; i Date: Fri, 25 Sep 2015 18:37:24 +0200 Subject: [PATCH 3/3] Fixes #1914 --- radio/src/gui/Taranis/view_telemetry.cpp | 2 +- radio/src/lua_api.cpp | 83 +++++++++++++++--------- radio/src/lua_api.h | 3 +- 3 files changed, 54 insertions(+), 34 deletions(-) diff --git a/radio/src/gui/Taranis/view_telemetry.cpp b/radio/src/gui/Taranis/view_telemetry.cpp index e6c6eb7cb..d35a04a91 100644 --- a/radio/src/gui/Taranis/view_telemetry.cpp +++ b/radio/src/gui/Taranis/view_telemetry.cpp @@ -195,7 +195,7 @@ bool displayTelemetryScreen() case SCRIPT_SYNTAX_ERROR: case SCRIPT_PANIC: case SCRIPT_KILLED: - luaError(state); + luaError(state, false); return true; } return false; diff --git a/radio/src/lua_api.cpp b/radio/src/lua_api.cpp index bc789b94c..4b2d99839 100644 --- a/radio/src/lua_api.cpp +++ b/radio/src/lua_api.cpp @@ -1823,52 +1823,71 @@ void luaLoadPermanentScripts() } } -char lua_warning_str[WARNING_LINE_LEN+1]; -char lua_warning_info[WARNING_LINE_LEN+1]; +#define LUA_WARNING_INFO_LEN 64 +char lua_warning_info[LUA_WARNING_INFO_LEN+1]; -void luaError(uint8_t error, bool exit_button=false) +void displayLuaError(const char * title) { - const char * msg = lua_tostring(L, -1); + displayBox(title); + if (lua_warning_info[0]) { + char * split = strstr(lua_warning_info, ": "); + if (split) { + lcd_putsnAtt(WARNING_LINE_X, WARNING_LINE_Y+FH+3, lua_warning_info, split-lua_warning_info, SMLSIZE); + lcd_putsnAtt(WARNING_LINE_X, WARNING_LINE_Y+2*FH+2, split+2, lua_warning_info+LUA_WARNING_INFO_LEN-split, SMLSIZE); + } + else { + lcd_putsnAtt(WARNING_LINE_X, WARNING_LINE_Y+FH+3, lua_warning_info, 40, SMLSIZE); + } + } +} +void displayAcknowledgeLuaError(uint8_t event) +{ + s_warning_result = false; + displayLuaError(s_warning); + if (event == EVT_KEY_BREAK(KEY_EXIT)) { + s_warning = NULL; + } +} + +void luaError(uint8_t error, bool acknowledge) +{ + const char * errorTitle; + + switch (error) { + case SCRIPT_SYNTAX_ERROR: + errorTitle = STR_SCRIPT_SYNTAX_ERROR; + break; + case SCRIPT_KILLED: + errorTitle = STR_SCRIPT_KILLED; + break; + case SCRIPT_PANIC: + errorTitle = STR_SCRIPT_PANIC; + break; + default: + errorTitle = STR_SCRIPT_ERROR; + break; + } + + const char * msg = lua_tostring(L, -1); if (msg) { #if defined(SIMU) if (!strncmp(msg, ".", 2)) msg += 1; #endif if (!strncmp(msg, "/SCRIPTS/", 9)) msg += 9; - strncpy(lua_warning_str, msg, WARNING_LINE_LEN); - lua_warning_str[WARNING_LINE_LEN] = '\0'; - - for (int i=0; i