From 46591b8cc896788080a67baa4e8c4c41f6fd8c26 Mon Sep 17 00:00:00 2001 From: Frankie Arzu <32604366+frankiearzu@users.noreply.github.com> Date: Thu, 17 Nov 2022 01:46:47 -0600 Subject: [PATCH] Make both work on EdgeTx and OpenTX --- ...FwdPrg_OTX_05.lua => DSM FwdPrg_05_BW.lua} | 112 +++++++---- ...Prg_ETX_05.lua => DSM FwdPrg_05_Color.lua} | 181 ++++++++++++------ Lua_scripts/DSMLIB/DsmFwPrgLib.lua | 2 +- Lua_scripts/DSMLIB/DsmFwPrgLib.luac | Bin 32338 -> 29271 bytes Lua_scripts/DSMLIB/DsmFwPrgSIMLib.luac | Bin 21237 -> 20481 bytes Lua_scripts/DSMLIB/readme.txt | 9 +- 6 files changed, 208 insertions(+), 96 deletions(-) rename Lua_scripts/{DSM FwdPrg_OTX_05.lua => DSM FwdPrg_05_BW.lua} (77%) rename Lua_scripts/{DSM FwdPrg_ETX_05.lua => DSM FwdPrg_05_Color.lua} (81%) diff --git a/Lua_scripts/DSM FwdPrg_OTX_05.lua b/Lua_scripts/DSM FwdPrg_05_BW.lua similarity index 77% rename from Lua_scripts/DSM FwdPrg_OTX_05.lua rename to Lua_scripts/DSM FwdPrg_05_BW.lua index a3ce33f..357ba41 100644 --- a/Lua_scripts/DSM FwdPrg_OTX_05.lua +++ b/Lua_scripts/DSM FwdPrg_05_BW.lua @@ -1,4 +1,4 @@ -local toolName = "TNS|DSM Forward Prog v0.5 (OTX B&W) |TNE" +local toolName = "TNS|DSM Forward Prog v0.5 (Text B&W) |TNE" ---- ######################################################################### ---- # # @@ -36,16 +36,27 @@ local DISP_ATTR = dsmLib.DISP_ATTR local DSM_Context = dsmLib.DSM_Context -local LCD_X_LINE_MENU = 10 +local LCD_W_USABLE = LCD_W-10 +-- X for Menu Lines +local LCD_X_LINE_MENU = 10 +-- X offsets for (Title: [Value] debugInfo) lines local LCD_X_LINE_TITLE = 10 local LCD_X_LINE_VALUE = 230 local LCD_X_LINE_DEBUG = 390 +-- Line Height: make it smaller debugging info tp LCD (some space buttom) +local LCD_Y_LINE_HEIGHT = (DEBUG_ON_LCD and 23) or 27 -- if DEBUG 23 else 27 +-- Y offsets local LCD_Y_MENU_TITLE = 20 -local LCD_Y_LINE_START = LCD_Y_MENU_TITLE + 30 -local LCD_Y_LINE_HEIGHT = (DEBUG_ON_LCD and 23) or 27 -- if DEBUG 23 else 27 +-- Y offet +local LCD_Y_LINE_FIRST = LCD_Y_MENU_TITLE + 30 +local LCD_Y_LOWER_BUTTONS = LCD_Y_LINE_FIRST + 7 * LCD_Y_LINE_HEIGHT -local LCD_Y_LOWER_BUTTONS = LCD_Y_LINE_START + 7 * LCD_Y_LINE_HEIGHT +local LCD_W_BUTTONS = 47 +local LCD_H_BUTTONS = 25 +local LCD_X_RIGHT_BUTTONS = LCD_W - LCD_W_BUTTONS - 5 + +local TEXT_SIZE = 0 -- NORMAL local lastRefresh=0 -- Last time the screen was refreshed local REFRESH_GUI_MS = 500/10 -- 500ms.. Screen Refresh Rate.. to not use unneded CPU time (in 10ms units to be compatible with getTime()) @@ -71,47 +82,55 @@ end local function GUI_Diplay_Button(x,y,w,h,text,selected) local attr = (selected) and INVERS or 0 -- INVERS if line Selected - lcd.drawText(x+5,y+2, text, attr) - lcd.drawRectangle(x, y, w, h, LIGHTGREY) + lcd.drawText(x+5,y+2, text, attr + TEXT_SIZE) + lcd.drawRectangle(x, y, w, h, LINE_COLOR) end local function GUI_Display_Menu(menu) local ctx = DSM_Context - local w= LCD_W-100 -- usable Width for the Menu/Lines + local w= LCD_W_USABLE - LCD_W_BUTTONS - 10 -- usable Width for the Menu/Lines -- Center Header local tw = openTx_lcd_sizeText(menu.Text) local x = w/2 - tw/2 -- Center of Screen - Center of Text - lcd.drawText(x,LCD_Y_MENU_TITLE,menu.Text,BOLD) -- orig MIDSIZE + + local bold = 0 + if (TEXT_SIZE~=SMLSIZE) then -- Ignore Bold on small size screens + bold = BOLD + end + lcd.drawText(x,LCD_Y_MENU_TITLE,menu.Text,bold + TEXT_SIZE) -- Back if menu.BackId ~= 0 then - GUI_Diplay_Button(437-5,LCD_Y_MENU_TITLE,47,25,"Back",ctx.SelLine == dsmLib.BACK_BUTTON) + GUI_Diplay_Button(LCD_X_RIGHT_BUTTONS,LCD_Y_MENU_TITLE,LCD_W_BUTTONS,LCD_H_BUTTONS,"Back",ctx.SelLine == dsmLib.BACK_BUTTON) end -- Next ? if menu.NextId ~= 0 then - GUI_Diplay_Button(437-5,LCD_Y_LOWER_BUTTONS,47,25,"Next",ctx.SelLine == dsmLib.NEXT_BUTTON) + GUI_Diplay_Button(LCD_X_RIGHT_BUTTONS,LCD_Y_LOWER_BUTTONS,LCD_W_BUTTONS,LCD_H_BUTTONS,"Next",ctx.SelLine == dsmLib.NEXT_BUTTON) end -- Prev? if menu.PrevId ~= 0 then - GUI_Diplay_Button(0,LCD_Y_LOWER_BUTTONS,47,25,"Prev",ctx.SelLine == dsmLib.PREV_BUTTON) + GUI_Diplay_Button(0,LCD_Y_LOWER_BUTTONS,LCD_W_BUTTONS,LCD_H_BUTTONS,"Prev",ctx.SelLine == dsmLib.PREV_BUTTON) end -- Debug into LCD - if (DEBUG_ON_LCD) then lcd.drawText(0,LCD_Y_MENU_TITLE,dsmLib.phase2String(ctx.Phase),SMLSIZE + BLUE) end -- Phase we are in - if (DEBUG_ON_LCD) then lcd.drawText(LCD_X_LINE_MENU,240,dsmLib.menu2String(menu),SMLSIZE + BLUE) end -- Menu Info + if (DEBUG_ON_LCD) then lcd.drawText(0,LCD_Y_MENU_TITLE,dsmLib.phase2String(ctx.Phase),TEXT_SIZE + WARNING_COLOR) end -- Phase we are in + if (DEBUG_ON_LCD) then lcd.drawText(LCD_X_LINE_MENU,240,dsmLib.menu2String(menu),TEXT_SIZE + WARNING_COLOR) end -- Menu Info end local function GUI_Display_Line_Menu(x,y,w,h,line,selected) - local attr = (selected) and INVERS or 0 -- INVERS if line Selected + local attr = (selected and INVERS) or 0 -- INVERS if line Selected local bold = 0 local text = line.Text if dsmLib.isSelectableLine(line) then -- Menu Line - text = text .. " -->" --OPENTX + text = text .. " |>" --OPENTX else -- SubHeaders and plain text lines - bold = (dsmLib.isDisplayAttr(line.TextAttr,DISP_ATTR.BOLD) and BOLD) or 0 + if (TEXT_SIZE~=SMLSIZE) then -- ignore bold on small size screens + bold = (dsmLib.isDisplayAttr(line.TextAttr,DISP_ATTR.BOLD) and BOLD) or 0 + end + if dsmLib.isDisplayAttr(line.TextAttr,DISP_ATTR.RIGHT) then -- Right Align??? local tw = openTx_lcd_sizeText(line.Text)+4 x = LCD_X_LINE_VALUE - tw -- Right @@ -121,14 +140,14 @@ local function GUI_Display_Line_Menu(x,y,w,h,line,selected) end end - lcd.drawText(x,y, text, attr + bold) + lcd.drawText(x,y, text, attr + bold + TEXT_SIZE) end ------------------------------------------------------------------------------------------------------------ local function GUI_Display_Line_Value(lineNum, line, value, selected, editing) local bold = 0 - local y = LCD_Y_LINE_START+(LCD_Y_LINE_HEIGHT*lineNum) + local y = LCD_Y_LINE_FIRST+(LCD_Y_LINE_HEIGHT*lineNum) local x = LCD_X_LINE_TITLE ---------- NAME Part @@ -139,7 +158,9 @@ local function GUI_Display_Line_Value(lineNum, line, value, selected, editing) header = header .. " " .. value -- Flight mode display attributes - bold = (dsmLib.isDisplayAttr(line.TextAttr,DISP_ATTR.BOLD) and BOLD) or 0 + if (TEXT_SIZE~=SMLSIZE) then -- ignore bold on small size screens + bold = (dsmLib.isDisplayAttr(line.TextAttr,DISP_ATTR.BOLD) and BOLD) or 0 + end if dsmLib.isDisplayAttr(line.TextAttr,DISP_ATTR.RIGHT) then -- Right Align local tw = openTx_lcd_sizeText(header)+4 @@ -153,7 +174,7 @@ local function GUI_Display_Line_Value(lineNum, line, value, selected, editing) header = header .. ":" end - lcd.drawText(x, y, header, bold) -- display Line Header + lcd.drawText(x, y, header, bold + TEXT_SIZE) -- display Line Header --------- VALUE PART, Skip for Flight Mode since already show the value if not dsmLib.isFlightModeText(line.TextId) then @@ -168,28 +189,29 @@ local function GUI_Display_Line_Value(lineNum, line, value, selected, editing) end end - lcd.drawText(LCD_X_LINE_VALUE,y, value, attrib) -- display value + lcd.drawText(LCD_X_LINE_VALUE,y, value, attrib + TEXT_SIZE) -- display value end - if (DEBUG_ON_LCD) then lcd.drawText(LCD_X_LINE_DEBUG,y, line.MinMaxDebug or "", SMLSIZE) end -- display debug + if (DEBUG_ON_LCD) then lcd.drawText(LCD_X_LINE_DEBUG,y, line.MinMaxDebug or "", TEXT_SIZE + WARNING_COLOR) end -- display debug end ------------------------------------------------------------------------------------------------------------ local function GUI_Display() local ctx = DSM_Context lcd.clear() - if LCD_W == 480 then local header = "DSM Fwrd Programming " if ctx.Phase ~= PHASE.RX_VERSION then header = header .. "RX "..ctx.RX.Name.." v"..ctx.RX.Version end --Draw title - lcd.drawFilledRectangle(0, 0, LCD_W, 20, TITLE_BGCOLOR) - lcd.drawText(5, 0, header, MENU_TITLE_COLOR) + if (TEXT_SIZE~=SMLSIZE) then -- ignore tool title small size screens + lcd.drawFilledRectangle(0, 0, LCD_W, 20, TITLE_BGCOLOR) + lcd.drawText(5, 0, header, MENU_TITLE_COLOR + TEXT_SIZE) + end --Draw RX Menu if ctx.Phase == PHASE.RX_VERSION then - lcd.drawText(LCD_X_LINE_TITLE,100,"No compatible DSM RX...", BLINK) + lcd.drawText(LCD_X_LINE_TITLE,50,"No compatible DSM RX...", BLINK + TEXT_SIZE) else local menu = ctx.Menu if menu.Text ~= nil then @@ -201,13 +223,13 @@ local function GUI_Display() if i == ctx.SelLine then -- DEBUG: Display Selected Line info for ON SCREEN Debugging - if (DEBUG_ON_LCD) then lcd.drawText(LCD_X_LINE_TITLE,255,dsmLib.menuLine2String(line),SMLSIZE+BLUE) end + if (DEBUG_ON_LCD) then lcd.drawText(LCD_X_LINE_TITLE,255,dsmLib.menuLine2String(line),TEXT_SIZE + WARNING_COLOR) end end if line ~= nil and line.Type ~= 0 then if line.Type == LINE_TYPE.MENU then -- Menu Line - GUI_Display_Line_Menu(LCD_X_LINE_MENU,LCD_Y_LINE_START+(LCD_Y_LINE_HEIGHT*i), 350, LCD_Y_LINE_HEIGHT, line, i == ctx.SelLine) + GUI_Display_Line_Menu(LCD_X_LINE_MENU,LCD_Y_LINE_FIRST+(LCD_Y_LINE_HEIGHT*i), 350, LCD_Y_LINE_HEIGHT, line, i == ctx.SelLine) else -- list/value line local value = line.Val @@ -219,7 +241,7 @@ local function GUI_Display() if (imgValue) then -- Optional Image for a Value --TODO: Pending feature.. create images and put bitmap instead of a message --Display the image/Alternate Text - lcd.drawText(LCD_X_LINE_TITLE, LCD_Y_LINE_START+LCD_Y_LINE_HEIGHT, "Img:"..imgValue) + lcd.drawText(LCD_X_LINE_TITLE, LCD_Y_LINE_FIRST+LCD_Y_LINE_HEIGHT, "Img:"..imgValue) end end @@ -230,9 +252,7 @@ local function GUI_Display() end -- for end end - else - -- Different Resolution - end + end ------------------------------------------------------------------------------------------------------------- @@ -342,9 +362,35 @@ local function GUI_HandleEvent(event, touchState) end end +local function init_screen_pos() + if LCD_W == 480 then -- TX16 + -- use defaults in the script header + elseif LCD_W == 128 then --TX12 (128x64) -- Still needs some work on the vertical + DEBUG_ON_LCD = false -- no space for this + TEXT_SIZE = SMLSIZE + LCD_W_USABLE = 128 + + LCD_W_BUTTONS = 30 + LCD_H_BUTTONS = 17 + LCD_X_RIGHT_BUTTONS = 128 - LCD_W_BUTTONS - 5 + + LCD_X_LINE_MENU = 0 + -- X offsets for (Title: [Value] debugInfo) lines + LCD_X_LINE_TITLE = 0 + LCD_X_LINE_VALUE = 90 + LCD_X_LINE_DEBUG = 110 + + LCD_Y_LINE_HEIGHT = 17 + LCD_Y_MENU_TITLE = 0 + LCD_Y_LINE_FIRST = LCD_Y_MENU_TITLE + 17 + LCD_Y_LOWER_BUTTONS = LCD_Y_LINE_FIRST + 7 * LCD_Y_LINE_HEIGHT + end +end + ------------------------------------------------------------------------------------------------------------ -- Init local function DSM_Init() + init_screen_pos() dsmLib.Init(toolName) -- Initialize Library return dsmLib.StartConnection() end diff --git a/Lua_scripts/DSM FwdPrg_ETX_05.lua b/Lua_scripts/DSM FwdPrg_05_Color.lua similarity index 81% rename from Lua_scripts/DSM FwdPrg_ETX_05.lua rename to Lua_scripts/DSM FwdPrg_05_Color.lua index 5ff3344..ff2c824 100644 --- a/Lua_scripts/DSM FwdPrg_ETX_05.lua +++ b/Lua_scripts/DSM FwdPrg_05_Color.lua @@ -1,4 +1,4 @@ -local toolName = "TNS|DSM Forward Prog v0.5 (EdgeTx) |TNE" +local toolName = "TNS|DSM Forward Prog v0.5 (Color+Touch) |TNE" local VERSION = "v0.5" ---- ######################################################################### @@ -18,12 +18,10 @@ local VERSION = "v0.5" ---- # # ---- ######################################################################### --- Code is based on the code/work by: Pascal Langer (Author of the Multi-Module) --- Rewrite/Enhancements By: Francisco Arzu - -local SIMULATION_ON = false -- FALSE: use real communication to DSM RX (DEFAULT), TRUE: use a simulated version of RX +local SIMULATION_ON = true -- FALSE: use real communication to DSM RX (DEFAULT), TRUE: use a simulated version of RX local DEBUG_ON = 1 -- 0=NO DEBUG, 1=HIGH LEVEL 2=LOW LEVEL (Debug logged into the /LOGS/dsm.log) local DEBUG_ON_LCD = false -- Interactive Information on LCD of Menu data from RX +local USE_SPECKTRUM_COLORS = true -- true: Use spectrum colors, false: use theme colors (default on OpenTX) local dsmLib if (SIMULATION_ON) then @@ -39,17 +37,6 @@ local DISP_ATTR = dsmLib.DISP_ATTR local DSM_Context = dsmLib.DSM_Context -local LCD_X_LINE_MENU = 30 -local LCD_X_LINE_TITLE = 30 -local LCD_X_LINE_VALUE = 230 -local LCD_X_LINE_DEBUG = 390 - -local LCD_Y_MENU_TITLE = 20 -local LCD_Y_LINE_START = LCD_Y_MENU_TITLE + 30 -local LCD_Y_LINE_HEIGHT = (DEBUG_ON_LCD and 23) or 27 -- if DEBUG 23 else 27 - -local LCD_Y_LOWER_BUTTONS = LCD_Y_LINE_START + 3 + (7 * LCD_Y_LINE_HEIGHT) - local lastRefresh=0 -- Last time the screen was refreshed local REFRESH_GUI_MS = 300/10 -- 300ms.. Screen Refresh Rate.. to not waste CPU time (in 10ms units to be compatible with getTime()) local originalValue = nil @@ -57,6 +44,52 @@ local originalValue = nil local touchButtonArea = {} local EDIT_BUTTON = { DEFAULT=1001, DEC_10=1002, DEC_1=1003, INC_1=1004, INC_10=5, OK=1006, ESC=1007 } +local IS_EDGETX = false -- DEFAULT until Init changed it + +local LCD_Y_MENU_TITLE = 20 +local LCD_W_MENU_TITLE = LCD_W-100 + +local LCD_X_LINE_MENU = 30 +local LCD_W_LINE_MENU = 350 + +local LCD_X_LINE_TITLE = 30 +local LCD_X_LINE_VALUE = 230 +local LCD_X_LINE_DEBUG = 390 + + +local LCD_Y_LINE_START = LCD_Y_MENU_TITLE + 30 +local LCD_Y_LINE_HEIGHT = (DEBUG_ON_LCD and 23) or 27 -- if DEBUG 23 else 27 + +local LCD_Y_LOWER_BUTTONS = LCD_Y_LINE_START + 3 + (7 * LCD_Y_LINE_HEIGHT) + + +-- TOOL HEADER +local LCD_TOOL_HDR_COLOR = MENU_TITLE_COLOR +local LCD_TOOL_HDR_BGCOLOR = TITLE_BGCOLOR +-- MENU HEADER +local LCD_MENU_COLOR = MENU_TITLE_COLOR +local LCD_MENU_BGCOLOR = MENU_TITLE_BGCOLOR +-- LINE SELECTED +local LCD_SELECTED_COLOR = TEXT_INVERTED_COLOR +local LCD_SELECTED_BGCOLOR = TEXT_INVERTED_BGCOLOR +local LCD_EDIT_BGCOLOR = WARNING_COLOR +-- NORMAL TEXT +local LCD_NORMAL_COLOR = TEXT_COLOR +local LCD_DISABLE_COLOR = TEXT_DISABLE_COLOR +local LCD_DEBUG_COLOR = LINE_COLOR +-- NORMAL BOX FRAME COLOR +local LCD_BOX_COLOR = TEXT_DISABLE_COLOR + + + +--------------------- lcd.sizeText replacement ------------------------------------------------- +-- EdgeTx dont have lcd.sizeText, so we do an equivalent one using the string length and 5px per character +local function my_lcd_sizeText(s) + print(string.format("EdgeTX=%s",IS_EDGETX)) + -- return: If IS_EDGETX then lcd.sizeText() else string.len() + return (IS_EDGETX and lcd.sizeText(s)) or (string.len(s)*10) +end + local function GUI_SwitchSimulationOFF() dsmLib.ReleaseConnection() @@ -96,29 +129,32 @@ end ---------- Return Color to display Menu Lines ---------------------------------------------------------------- local function GUI_GetTextColor(lineNum) local ctx = DSM_Context - local txtColor = BLACK + local txtColor = LCD_NORMAL_COLOR -- Gray Out any other line except the one been edited - if (ctx.isEditing() and ctx.EditLine~=lineNum) then txtColor=LIGHTGREY end + if (ctx.isEditing() and ctx.EditLine~=lineNum) then txtColor=LCD_DISABLE_COLOR end return txtColor end local function GUI_GetFrameColor(lineNum) -- Frame Color for Value/Menu Boxes local ctx = DSM_Context - local txtColor = LIGHTGREY --ORANGE + local txtColor = LCD_BOX_COLOR -- Gray Out any other line except the one been edited - if (ctx.isEditing() and ctx.EditLine~=lineNum) then txtColor=LIGHTGREY end + if (ctx.EditLine~=lineNum) then txtColor=LCD_DISABLE_COLOR end return txtColor end -------------------------------------------------------------------------------------------------------- -- Display Text inside a Rectangle. Inv: true means solid rectangle, false=only perimeter local function GUI_Display_Boxed_Text(lineNum,x,y,w,h,text,inv) + local ctx = DSM_Context local txtColor = GUI_GetTextColor(lineNum) local frameColor = GUI_GetFrameColor(lineNum) - + -- If editing this lineNum, chose EDIT Color, else SELECTED Color + local selectedBGColor = (ctx.EditLine==lineNum and LCD_EDIT_BGCOLOR) or LCD_SELECTED_BGCOLOR + if (inv) then - txtColor = WHITE - lcd.drawFilledRectangle(x-5, y-2, w, h, ORANGE) + txtColor = LCD_SELECTED_COLOR + lcd.drawFilledRectangle(x-5, y-2, w, h, selectedBGColor) else lcd.drawRectangle(x-5, y-2, w, h, frameColor) end @@ -141,8 +177,8 @@ local function GUI_Display_Line_Menu(lineNum,line,selected) local x = LCD_X_LINE_MENU if dsmLib.isSelectableLine(line) then -- Draw Selectable Menus in Boxes - GUI_Display_Boxed_Text(lineNum,x, y, 350, LCD_Y_LINE_HEIGHT, line.Text,selected) - GUI_addTouchButton(x, y, 350, LCD_Y_LINE_HEIGHT,lineNum) + GUI_Display_Boxed_Text(lineNum,x, y, LCD_W_LINE_MENU, LCD_Y_LINE_HEIGHT, line.Text,selected) + GUI_addTouchButton(x, y, LCD_W_LINE_MENU, LCD_Y_LINE_HEIGHT,lineNum) else -- Non Selectable Menu Lines, plain text -- Can be use for sub headers or just regular text lines (like warnings) @@ -150,10 +186,10 @@ local function GUI_Display_Line_Menu(lineNum,line,selected) local bold = (dsmLib.isDisplayAttr(line.TextAttr,DISP_ATTR.BOLD) and BOLD) or 0 if dsmLib.isDisplayAttr(line.TextAttr,DISP_ATTR.RIGHT) then -- Right Align??? - local tw = lcd.sizeText(line.Text)+4 + local tw = my_lcd_sizeText(line.Text)+4 x = LCD_X_LINE_VALUE - tw -- Right elseif dsmLib.isDisplayAttr(line.TextAttr,DISP_ATTR.CENTER) then -- Center?? - local tw = lcd.sizeText(line.Text) + local tw = my_lcd_sizeText(line.Text) x = x + (LCD_X_LINE_VALUE - LCD_X_LINE_MENU)/2 - tw/2 -- Center - 1/2 Text end @@ -184,10 +220,10 @@ local function GUI_Display_Line_Value(lineNum, line, value, selected, editing) bold = (dsmLib.isDisplayAttr(line.TextAttr,DISP_ATTR.BOLD) and BOLD) or 0 if dsmLib.isDisplayAttr(line.TextAttr,DISP_ATTR.RIGHT) then -- Right Align - local tw = lcd.sizeText(header)+4 + local tw = my_lcd_sizeText(header)+4 x = LCD_X_LINE_VALUE - tw -- Right elseif dsmLib.isDisplayAttr(line.TextAttr,DISP_ATTR.CENTER) then -- Centered - local tw = (lcd.sizeText(header)) + local tw = my_lcd_sizeText(header) x = x + (LCD_X_LINE_VALUE - LCD_X_LINE_TITLE)/2 - tw/2 -- Center - 1/2 Text end else @@ -203,7 +239,7 @@ local function GUI_Display_Line_Value(lineNum, line, value, selected, editing) if dsmLib.isSelectableLine(line) then -- Can select/edit value, Box it - local tw = lcd.sizeText(value)+10 -- Width of the Text in the lcd + local tw = my_lcd_sizeText(value)+10 -- Width of the Text in the lcd GUI_Display_Boxed_Text(lineNum,LCD_X_LINE_VALUE,y,tw,LCD_Y_LINE_HEIGHT,value,selected) GUI_addTouchButton(LCD_X_LINE_VALUE,y,tw,LCD_Y_LINE_HEIGHT,lineNum) else -- Not Editable, Plain Text @@ -212,18 +248,19 @@ local function GUI_Display_Line_Value(lineNum, line, value, selected, editing) end -- Debug info for line Value RANGE when Debug on LCD - if (DEBUG_ON_LCD) then lcd.drawText(LCD_X_LINE_DEBUG, y, line.MinMaxDebug or "", SMLSIZE + BLUE) end -- display debug Min/Max + if (DEBUG_ON_LCD) then lcd.drawText(LCD_X_LINE_DEBUG, y, line.MinMaxDebug or "", SMLSIZE + LCD_DEBUG_COLOR) end -- display debug Min/Max end local function GUI_Display_Menu(menu) local ctx = DSM_Context - local w= LCD_W-100 -- usable Width for the Menu/Lines + local w= LCD_W_MENU_TITLE -- Center Header - local tw = lcd.sizeText(menu.Text) + local tw = my_lcd_sizeText(menu.Text) local x = w/2 - tw/2 -- Center of Screen - Center of Text - lcd.drawFilledRectangle(0, LCD_Y_MENU_TITLE-2, w, LCD_Y_LINE_HEIGHT-2, DARKGREY) - lcd.drawText(x,LCD_Y_MENU_TITLE,menu.Text, WHITE + BOLD) -- orig MIDSIZE + + lcd.drawFilledRectangle(0, LCD_Y_MENU_TITLE-2, w, LCD_Y_LINE_HEIGHT-2, LCD_MENU_BGCOLOR) + lcd.drawText(x,LCD_Y_MENU_TITLE,menu.Text, LCD_MENU_COLOR + BOLD) -- Back Button if menu.BackId ~= 0 then @@ -242,8 +279,8 @@ local function GUI_Display_Menu(menu) end -- Debug on LCD, Show the menu Indo and Phase we are on - if (DEBUG_ON_LCD) then lcd.drawText(0,LCD_Y_MENU_TITLE,dsmLib.phase2String(ctx.Phase),SMLSIZE+BLUE) end -- Phase we are in - if (DEBUG_ON_LCD) then lcd.drawText(0,240,dsmLib.menu2String(menu),SMLSIZE+BLUE) end -- Menu Info + if (DEBUG_ON_LCD) then lcd.drawText(0,LCD_Y_MENU_TITLE,dsmLib.phase2String(ctx.Phase),SMLSIZE+LCD_DEBUG_COLOR) end -- Phase we are in + if (DEBUG_ON_LCD) then lcd.drawText(0,240,dsmLib.menu2String(menu),SMLSIZE+LCD_DEBUG_COLOR) end -- Menu Info end ------------------------------------------------------------------------------------------------------------ @@ -303,13 +340,14 @@ local function GUI_Display() end --Draw title - lcd.drawFilledRectangle(0, 0, LCD_W, 17, TITLE_BGCOLOR) - lcd.drawText(5, 0, header, MENU_TITLE_COLOR + SMLSIZE) + lcd.drawFilledRectangle(0, 0, LCD_W, 17, LCD_TOOL_HDR_BGCOLOR) + lcd.drawText(5, 0, header, LCD_TOOL_HDR_COLOR + SMLSIZE) --Draw RX Menu if ctx.Phase == PHASE.RX_VERSION then lcd.drawText(LCD_X_LINE_TITLE,100,"No compatible DSM RX...", BLINK) else local menu = ctx.Menu + if menu.Text ~= nil then GUI_Display_Menu(menu) @@ -319,7 +357,7 @@ local function GUI_Display() if i == ctx.SelLine then -- DEBUG: Display Selected Line info for ON SCREEN Debugging - if (DEBUG_ON_LCD) then lcd.drawText(0,255,dsmLib.menuLine2String(line),SMLSIZE+BLUE) end + if (DEBUG_ON_LCD) then lcd.drawText(0,255,dsmLib.menuLine2String(line),SMLSIZE + LCD_DEBUG_COLOR) end end if line ~= nil and line.Type ~= 0 then @@ -347,7 +385,7 @@ local function GUI_Display() end -- if Line[i]~=nil end -- for - if ctx.isEditing() then + if IS_EDGETX and ctx.isEditing() then GUI_Display_Edit_Buttons(ctx.MenuLines[ctx.EditLine]) end end @@ -409,24 +447,26 @@ local function GUI_HandleEvent(event, touchState) local menuLines = ctx.MenuLines local editInc = nil - if (event == EVT_TOUCH_TAP and ctx.isEditing()) then -- Touch and Editing - local button = GUI_getTouchButton(touchState.x, touchState.y) - if (button) then - event, editInc = GUI_Translate_Edit_Buttons(button) - end - end - - if (event == EVT_TOUCH_TAP or event == EVT_TOUCH_FIRST) and not ctx.isEditing() then -- Touch and NOT editing - if (DEBUG_ON) then dsmLib.LOG_write("%s: EVT_TOUCH_TAP %d,%d\n",dsmLib.phase2String(ctx.Phase),touchState.x, touchState.y) end + if (IS_EDGETX) then + if (event == EVT_TOUCH_TAP and ctx.isEditing()) then -- Touch and Editing local button = GUI_getTouchButton(touchState.x, touchState.y) - if button then - -- Found a valid line - ctx.SelLine = button - ctx.Refresh_Display=true - if event == EVT_TOUCH_TAP then -- EVT_TOUCH_FIRST only move focus - event = EVT_VIRTUAL_ENTER - end + if (button) then + event, editInc = GUI_Translate_Edit_Buttons(button) end + end + + if (event == EVT_TOUCH_TAP or event == EVT_TOUCH_FIRST) and not ctx.isEditing() then -- Touch and NOT editing + if (DEBUG_ON) then dsmLib.LOG_write("%s: EVT_TOUCH_TAP %d,%d\n",dsmLib.phase2String(ctx.Phase),touchState.x, touchState.y) end + local button = GUI_getTouchButton(touchState.x, touchState.y) + if button then + -- Found a valid line + ctx.SelLine = button + ctx.Refresh_Display=true + if event == EVT_TOUCH_TAP then -- EVT_TOUCH_FIRST only move focus + event = EVT_VIRTUAL_ENTER + end + end + end end if event == EVT_VIRTUAL_EXIT then @@ -511,9 +551,36 @@ local function GUI_HandleEvent(event, touchState) end end +local function init_colors() + -- osName in OpenTX is nil, otherwise is EDGETX + local ver, radio, maj, minor, rev, osname = getVersion() + IS_EDGETX = osname~=nil + + if (IS_EDGETX and USE_SPECKTRUM_COLORS) then + -- SPECKTRUM COLORS (only works on EDGETX) + -- TOOL HEADER + LCD_TOOL_HDR_COLOR = MENU_TITLE_COLOR + LCD_TOOL_HDR_BGCOLOR = TITLE_BGCOLOR + -- MENU HEADER + LCD_MENU_COLOR = WHITE + LCD_MENU_BGCOLOR = DARKGREY + -- LINE SELECTED + LCD_SELECTED_COLOR = WHITE + LCD_SELECTED_BGCOLOR = ORANGE + LCD_EDIT_BGCOLOR = WARNING_COLOR + -- NORMAL TEXT + LCD_NORMAL_COLOR = BLACK + LCD_DISABLE_COLOR = LIGHTGREY + LCD_DEBUG_COLOR = BLUE + -- NORMAL BOX FRAME COLOR + LCD_BOX_COLOR = LIGHTGREY + end +end + ------------------------------------------------------------------------------------------------------------ -- Init local function DSM_Init() + init_colors() dsmLib.Init(toolName) -- Initialize Library return dsmLib.StartConnection() end diff --git a/Lua_scripts/DSMLIB/DsmFwPrgLib.lua b/Lua_scripts/DSMLIB/DsmFwPrgLib.lua index 59f4a14..7b50a73 100644 --- a/Lua_scripts/DSMLIB/DsmFwPrgLib.lua +++ b/Lua_scripts/DSMLIB/DsmFwPrgLib.lua @@ -1133,7 +1133,7 @@ local function DSM_Init_Text(rxId) Text[0x00AD] = "Gain Channel Select" -- Safe mode options, Ihnibit + thi values - local safeMode = {0x0003,0x00B0,0x00B1} -- inh (gap), "Self-Level/Angle Dem, Envelope + local safeModeOptions = {0x0003,0x00B0,0x00B1} -- inh (gap), "Self-Level/Angle Dem, Envelope Text[0x00B0] = "Self-Level/Angle Dem" Text[0x00B1] = "Envelope" diff --git a/Lua_scripts/DSMLIB/DsmFwPrgLib.luac b/Lua_scripts/DSMLIB/DsmFwPrgLib.luac index 187e740b9d5a6131792c2ad1c38ce249d284c351..fb0950a313a49368885a71a4c5da8f409fae4a89 100644 GIT binary patch delta 7972 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 Xm@2MhlB%S`QYHNG)+UU8zUqGgl}kPy delta 10670 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 dd-+<4Jy(3=S{b}OI>cMod{m#el z?tdok?ulJbYTK?Uh_Tq$UAy9GzwTD8O2gX<1?e(;B4!4POR}X1(kVd@G}TZX`^6$& zyWoMCe90{H4+YgKIg4B(A^K$-%Grwxv%LW%1O4)7`6iuacC^(BIx?Fa2#aMMH zhJ{wJdm>?J%ZtvN4KHM^_;{`O^#HGAv(7@rceesowY^Q0okrOr3mu!?3LSNGolCYh z+<;A6VZ*DTr2E5;MDHf6ZEIfbNZJFLj*Hj5K&g76`>N0AqaZzj{=7i*f{@?)qI;1w zDy$ZkTz|Wz*9#wXBrkhG!3(y0_qH5{4MFOOloxz&eIwNCRYpk((mD9O<3hq@KEtH) z^;(TpLa$yUyys$xbmY{Lt5rcdgZBJdU~BHSkH%dnTC9h49n%-2UT|Z{ix#U@9g|g< z_XcKs5;fGChq|X=FSY{vu`FCU=|gp_FD78o;Q4rJhs+63AV{64PgfNK#_{Z<*x26W zj_li8EtfoZ5f!)z-N{5k0p>_YbT8;00*MapEq=h%dFRN&3f%@~CdS}xX%xPc?o|tx z?qCtZs5F#2M@FY8WD9burR}k)8KhpU2Vt>MudpD98XV2((bx=t7$1hG<4Ks05A`2| z9tDXI4!|y|d>T)|Pw|Q7pYe?mtXHy+=W@J4o$&G41^8wD{H)O`0DYZzE3Z=pDDW}= zk1HpPjQ7Lrcou5o-$QOh>heu=CPN{lPQ*g;_rGOoVFQzli`_mtt{WrA6|3Hh8 zX{%c(UU_X!lEBEn2lw;CBW=JR#v3QRnZhvQ?1O6IDR{SVt@&eNMufZR9_U#J;hlwh z@bcn5l$O33jHcz$IJ;p|ooX`mfk-%q{@K;TX_L;t-i?0h@5-YPQ?Dt`f9UlAdfe4H zEeSWZA=uHT;9D&PziOjdi}{>bI#7|Ql>QI)N;YS5Q+yE(m)Pw*$oi08VvQgo3`%D@ zlY1s}m5&~+eZ+j6dLr{I{a#C@Emh}SxR9TjzB;*7=8`!4py!%@>8TStZJS7=QzX{p z6lj*6l44pak@-QUR5YFzjXnBb)nt1a>7T~_Fh_DUm6^;;az_!r+p4W8d?rn{)?mSg zQ}9M3;uJ(N;=Bx|dRlV6gJMa5AJ%=$U7O{G&Qt2XiQ L=VlguGyDGrKqbqE delta 2660 zcmb_ey>lBy6u-0OlT88+#Kew`vEm>;Vq2DM9E_Pvbdt{U+0sdo&L1?~9Mal8kR_oz zg@h&vHAT!8(1nIR#zVnO3TEIBpn-~E(xsrl4KvX3-tMhVj>8NyVT-+e?{?qE@4bC* z?|dcy`L#SSmTTK3Ne=ZN4BU}llwi~vcC}n-IZaPeUPT7|LXKU;MR7$fYm)K|u3_YK zL$l0xi@+K{n*J(}TDT}}1)DN@xoD}TS(22~_zy-(O|Mz0b<->u0n^a7%oEIFN!#c! z2k|Vu(labe^jgo*Ye?n_S?lALoivMRNP3oL%(cF%AM_hyM_ndF9N>3chp@+`7o zGCQwOdvagWs79p)L_M-Reh73F!h{H^D_jtj@ts*Y#BUn4oE4*E_Z6NcmF z9M|K#vz!IIB574f-P^EhZGZm@_>abWN9S0iIJEVvn2KX@jmRhY!%5!)g24`i+w%x9Q zd=^Y#XB%E44?su?GZZ-a#&uE#eN0czp?~!DM^QkT)T>sBRETpOH1#11hF*6-8p{@X zCUlJ!Lm_I1X4&^{s0LyDJ2VdS)o_G)g1QhiS5m@Uf`lv`EbaH{8vHiedw~w~X0uBp z$4B-z2V#(qVif-mIE-XSXmJ(*wGL(92nYZrfDXl!J-Y>7vCZ_bZ<2ZQbKg(QgG@PZ zK_EO9CIJJ7P*BXoE{y%8JZY;)96VlZxL&cY1+AgLHhR%qce0rJVeLCrzVit zgOehOg?e!*0P{)QgVKG>#TE`J7uOC?K!Enc7hygKv(Ozr4DVh5@=ss)Z1{l@+f#PsLp&}V>@x2^ra)dZ)+Mek(n#`%)1x=$z~YHZ zKf?U*Qgn&g?K~E9e&}{R*~tV9zK@FTbLs5V+aQEY6<|J?T8FuJIxb6x@#!CA_#DlA zgP(h|n{pJj9IJIA{hCm0I`?=mF#t@H_7}`M z%iq3^irBs3r4J~hU`F(OF{eSeO)cY>Ji3@oFch8a5lRIVXYed$QIL`%Mg7S7l36XJ zcXf0TvXfose*;ittDoFYo2{Mls+KO#CuVVei;k|IW*3x~DsHQMKj|BNbX6He&uDV> zO)&VQRlK14t5Ie)RA}CNdT|R3?8jo=T?U!Hpq3i;9@J9y27p6d#zbZeZF8oq=YvAL zL0T^BH3Eyd*!*H_VKunASp8YQ4O-bTkxZQE!prH)a|`j6tu7_Bur|+v`RQ7u=VWyi zcggQ=qV<-xtPQPH*70c}Tt@dru(^+-ynqesIn^w{<3yB~j$=YWA{LLuH-hGl1;#RU zGpG5T7y%~RE#mH4egl_exzj{9Ro%4Gc}P)VLRU7@v~d9fXB)#gjMEdUT_={pGs?dthl>x+&WHg92~wzZcG7?EV2muiFOz diff --git a/Lua_scripts/DSMLIB/readme.txt b/Lua_scripts/DSMLIB/readme.txt index e56de1f..a2bc279 100644 --- a/Lua_scripts/DSMLIB/readme.txt +++ b/Lua_scripts/DSMLIB/readme.txt @@ -9,8 +9,8 @@ Rewrite/Enhancements By: Francisco Arzu Deployment: -/SCRIPTS/TOOLS/Dsm FwdPrg_OTX_05.lua -- OpenTX version, no touch (black/white radios) -/SCRIPTS/TOOLS/Dsm FwdPrg_ETX_05.lua -- EdgeTX version, touch +/SCRIPTS/TOOLS/DsmFwdPrg_05_BaW.lua -- OpenTX/EdgeTx version, no touch (black/white radios) +/SCRIPTS/TOOLS/DsmFwdPrg_05_Color.lua -- EdgeTX/OpenTx Color version, +touch /SCRIPTS/TOOLS/DSMLIB/ -- Libraries (ALL CAPITALS) to hide them from the Tools menu /SCRIPTS/TOOLS/DSMLIB/DsmFwPrgLib.lub -- DSM Protocol Message and Menu engine /SCRIPTS/TOOLS/DSMLIB/DsmFwPrgSIMLib.lub -- Simulation of AR631 for GUI Development in Companion @@ -18,7 +18,7 @@ Deployment: /LOGS/dsm_log.txt -- Readable log of the last RX session, usefull for debuging new RX -Version 0.05 +Version 0.5 - Make the code more readable and understadable - Separate the DSM Forwards Programing logic from the GUI - Log the comunnication with the RX on a /LOGS/dsm_log.txt to allow to debug it easier @@ -33,13 +33,12 @@ Known Problems: special Save/Restart type of menu.. but it does not reset the RX. maybe another meesage needs to be send 3. Some Menu List line types (LINE_TYPE.LIST_MENU1), the range (min/max) seems to be incorrect, but cannot see in the data how to fix it Some of the valid values are not even sequential, very spread apart. There has to be a list of valid options somewhere (in RX or config for each field). - Currenly adding valid values inside the scrip to override the RX 4. The RX return unknow lines when requesting the Lines for a menu. Realy don't understand what they are for. in some menus, seems to stay stuck in the same return line or no response to the request, making the RX reset/close the connection. Did a fix to stop requesting the same menu line if the response is the same. This gives an empty menu, but does not reset the connection. -Version 0.02 +Version 0.2 Original Version from Pascal Langer