diff --git a/src/BF/use_tools_menu_instead_of_this.txt b/src/BF/use_tools_menu_instead_of_this.txt new file mode 100644 index 00000000..e69de29b diff --git a/src/SCRIPTS/BF/HORUS/horuspre.lua b/src/SCRIPTS/BF/HORUS/horuspre.lua index 3164c631..1102279d 100644 --- a/src/SCRIPTS/BF/HORUS/horuspre.lua +++ b/src/SCRIPTS/BF/HORUS/horuspre.lua @@ -1,15 +1,15 @@ PageFiles = { - "pids1.lua", - "pids2.lua", - "rates.lua", - "pid_advanced.lua", - "filters.lua", - "pwm.lua", - "rx.lua", - "vtx.lua", - "rescue.lua", - "gpspids.lua", + { title = "PIDs 1", script = "pids1.lua"}, + { title = "PIDs 2", script = "pids2.lua"}, + { title = "Rates", script = "rates.lua"}, + { title = "Advanced PIDs", script = "pid_advanced.lua"}, + { title = "Filters", script = "filters.lua"}, + { title = "vTX Settings", script = "vtx.lua"}, + { title = "Gyro / Motor", script = "pwm.lua"}, + { title = "Rx", script = "rx.lua"}, + { title = "GPS Rescue", script = "rescue.lua", requiredVersion = 1.041}, + { title = "GPS PIDs", script = "gpspids.lua", requiredVersion = 1.041}, } MenuBox = { x=120, y=100, w=200, x_offset=68, h_line=20, h_offset=6 } diff --git a/src/SCRIPTS/BF/NV14/nv14pre.lua b/src/SCRIPTS/BF/NV14/nv14pre.lua index 5d6ffcd1..d1071cbe 100644 --- a/src/SCRIPTS/BF/NV14/nv14pre.lua +++ b/src/SCRIPTS/BF/NV14/nv14pre.lua @@ -1,15 +1,15 @@ PageFiles = { - "pids1.lua", - "pids2.lua", - "rates.lua", - "pid_advanced.lua", - "filters.lua", - "pwm.lua", - "rx.lua", - "vtx.lua", - "rescue.lua", - "gpspids.lua", + { title = "PIDs 1", script = "pids1.lua"}, + { title = "PIDs 2", script = "pids2.lua"}, + { title = "Rates", script = "rates.lua"}, + { title = "Advanced PIDs", script = "pid_advanced.lua"}, + { title = "Filters", script = "filters.lua"}, + { title = "vTX Settings", script = "vtx.lua"}, + { title = "Gyro / Motor", script = "pwm.lua"}, + { title = "Rx", script = "rx.lua"}, + { title = "GPS Rescue", script = "rescue.lua", requiredVersion = 1.041}, + { title = "GPS PIDs", script = "gpspids.lua", requiredVersion = 1.041}, } MenuBox = { x= (LCD_W -200)/2, y=LCD_H/2, w=200, x_offset=68, h_line=20, h_offset=6 } diff --git a/src/SCRIPTS/BF/X7/x7pre.lua b/src/SCRIPTS/BF/X7/x7pre.lua index 90eb3b06..b6e53000 100644 --- a/src/SCRIPTS/BF/X7/x7pre.lua +++ b/src/SCRIPTS/BF/X7/x7pre.lua @@ -1,14 +1,14 @@ PageFiles = { - "pids1.lua", - "pids2.lua", - "rates.lua", - "pid_advanced.lua", - "filters.lua", - "pwm.lua", - "vtx.lua", - "rescue.lua", - "gpspids.lua", + { title = "vTX Settings", script = "vtx.lua"}, + { title = "Gyro / Motor", script = "pwm.lua"}, + { title = "PIDs 1", script = "pids1.lua"}, + { title = "PIDs 2", script = "pids2.lua"}, + { title = "Rates", script = "rates.lua"}, + { title = "Advanced PIDs", script = "pid_advanced.lua"}, + { title = "Filters", script = "filters.lua"}, + { title = "GPS Rescue", script = "rescue.lua", requiredVersion = 1.041}, + { title = "GPS PIDs", script = "gpspids.lua", requiredVersion = 1.041}, } MenuBox = { x=15, y=12, w=100, x_offset=36, h_line=8, h_offset=3 } diff --git a/src/SCRIPTS/BF/X9/x9pre.lua b/src/SCRIPTS/BF/X9/x9pre.lua index 474bbefd..c7505682 100644 --- a/src/SCRIPTS/BF/X9/x9pre.lua +++ b/src/SCRIPTS/BF/X9/x9pre.lua @@ -1,15 +1,15 @@ PageFiles = { - "pids1.lua", - "pids2.lua", - "rates.lua", - "pid_advanced.lua", - "filters.lua", - "pwm.lua", - "rx.lua", - "vtx.lua", - "rescue.lua", - "gpspids.lua", + { title = "PIDs 1", script = "pids1.lua"}, + { title = "PIDs 2", script = "pids2.lua"}, + { title = "Rates", script = "rates.lua"}, + { title = "Advanced PIDs", script = "pid_advanced.lua"}, + { title = "Filters", script = "filters.lua"}, + { title = "vTX Settings", script = "vtx.lua"}, + { title = "Gyro / Motor", script = "pwm.lua"}, + { title = "Rx", script = "rx.lua"}, + { title = "GPS Rescue", script = "rescue.lua", requiredVersion = 1.041}, + { title = "GPS PIDs", script = "gpspids.lua", requiredVersion = 1.041}, } MenuBox = { x=40, y=12, w=120, x_offset=36, h_line=8, h_offset=3 } diff --git a/src/SCRIPTS/BF/ui.lua b/src/SCRIPTS/BF/ui.lua index afe25857..1f6b9800 100644 --- a/src/SCRIPTS/BF/ui.lua +++ b/src/SCRIPTS/BF/ui.lua @@ -3,7 +3,8 @@ local pageStatus = display = 2, editing = 3, saving = 4, - displayMenu = 5, + popupMenu = 5, + mainMenu = 6, } local uiMsp = @@ -12,7 +13,8 @@ local uiMsp = eepromWrite = 250 } -local currentState = pageStatus.display +local menuLine = 1 +local currentState = pageStatus.mainMenu local requestTimeout = 80 -- 800ms request timeout local currentPage = 1 local currentLine = 1 @@ -22,9 +24,10 @@ local saveRetries = 0 local saveMaxRetries = 0 local pageRequested = false local telemetryScreenActive = false -local menuActive = false +local popupMenuActive = false local lastRunTS = 0 local killEnterBreak = 0 +local stopDisplay = true local scrollPixelsY = 0 local Page = nil @@ -72,7 +75,7 @@ local function eepromWrite() protocol.mspRead(uiMsp.eepromWrite) end -local menuList = { +local popupMenuList = { { t = "save page", f = saveSettings @@ -151,8 +154,12 @@ local function incLine(inc) currentLine = clipValue(currentLine + inc, 1, #(Page.fields)) end -local function incMenu(inc) - menuActive = clipValue(menuActive + inc, 1, #(menuList)) +local function incMainMenu(inc) + menuLine = clipValue(menuLine + inc, 1, #(PageFiles)) +end + +local function incPopupMenu(inc) + popupMenuActive = clipValue(popupMenuActive + inc, 1, #(popupMenuList)) end local function requestPage() @@ -258,21 +265,21 @@ local function incValue(inc) end end -local function drawMenu() +local function drawPopupMenu() local x = MenuBox.x local y = MenuBox.y local w = MenuBox.w local h_line = MenuBox.h_line local h_offset = MenuBox.h_offset - local h = #(menuList) * h_line + h_offset*2 + local h = #(popupMenuList) * h_line + h_offset*2 lcd.drawFilledRectangle(x,y,w,h,backgroundFill) lcd.drawRectangle(x,y,w-1,h-1,foregroundColor) lcd.drawText(x+h_line/2,y+h_offset,"Menu:",globalTextOptions) - for i,e in ipairs(menuList) do + for i,e in ipairs(popupMenuList) do local text_options = globalTextOptions - if menuActive == i then + if popupMenuActive == i then text_options = text_options + INVERS end lcd.drawText(x+MenuBox.x_offset,y+(i-1)*h_line+h_offset,e.t,text_options) @@ -284,6 +291,11 @@ function run_ui(event) -- if lastRunTS old than 500ms if lastRunTS + 50 < now then invalidatePages() + if useMenu then + currentState = pageStatus.mainMenu + else + currentState = pageStatus.display + end end lastRunTS = now if (currentState == pageStatus.saving) then @@ -301,26 +313,26 @@ function run_ui(event) mspProcessTxQ() -- navigation if isTelemetryScript and event == EVT_VIRTUAL_MENU_LONG then -- telemetry script - menuActive = 1 - currentState = pageStatus.displayMenu + popupMenuActive = 1 + currentState = pageStatus.popupMenu elseif (not isTelemetryScript) and event == EVT_VIRTUAL_ENTER_LONG then -- standalone - menuActive = 1 + popupMenuActive = 1 killEnterBreak = 1 - currentState = pageStatus.displayMenu + currentState = pageStatus.popupMenu -- menu is currently displayed - elseif currentState == pageStatus.displayMenu then + elseif currentState == pageStatus.popupMenu then if event == EVT_VIRTUAL_EXIT then currentState = pageStatus.display elseif event == EVT_VIRTUAL_PREV then - incMenu(-1) + incPopupMenu(-1) elseif event == EVT_VIRTUAL_NEXT then - incMenu(1) + incPopupMenu(1) elseif event == EVT_VIRTUAL_ENTER then if killEnterBreak == 1 then killEnterBreak = 0 else currentState = pageStatus.display - menuList[menuActive].f() + popupMenuList[popupMenuActive].f() end end -- normal page viewing @@ -341,7 +353,11 @@ function run_ui(event) currentState = pageStatus.editing end elseif event == EVT_VIRTUAL_EXIT then - return protocol.exitFunc(); + if useMenu then + stopDisplay = true + else + return protocol.exitFunc(); + end end -- editing value elseif currentState == pageStatus.editing then @@ -356,7 +372,7 @@ function run_ui(event) end local nextPage = currentPage while Page == nil do - Page = assert(loadScript(radio.templateHome .. PageFiles[currentPage]))() + Page = assert(loadScript(radio.templateHome .. PageFiles[currentPage].script))() if Page.requiredVersion and apiVersion > 0 and Page.requiredVersion > apiVersion then incPage(1) @@ -379,8 +395,8 @@ function run_ui(event) if protocol.rssi() == 0 then lcd.drawText(NoTelem[1],NoTelem[2],NoTelem[3],NoTelem[4]) end - if currentState == pageStatus.displayMenu then - drawMenu() + if currentState == pageStatus.popupMenu then + drawPopupMenu() elseif currentState == pageStatus.saving then lcd.drawFilledRectangle(SaveBox.x,SaveBox.y,SaveBox.w,SaveBox.h,backgroundFill) lcd.drawRectangle(SaveBox.x,SaveBox.y,SaveBox.w,SaveBox.h,SOLID) @@ -390,6 +406,42 @@ function run_ui(event) lcd.drawText(SaveBox.x+SaveBox.x_offset,SaveBox.y+SaveBox.h_offset,"Retrying",DBLSIZE + (globalTextOptions)) end end + if currentState == pageStatus.mainMenu and useMenu then + if event == EVT_VIRTUAL_EXIT then + return 2 + elseif event == EVT_VIRTUAL_NEXT then + incMainMenu(1) + elseif event == EVT_VIRTUAL_PREV then + incMainMenu(-1) + end + lcd.clear() + lcd.drawScreenTitle("Betaflight Config", 0, 0) + for i=1, #PageFiles do + local yMinLim = 10 + local yMaxLim = LCD_H - 8 + local currentLineY = (menuLine-1)*8 + yMinLim + if currentLineY <= yMaxLim then + scrollPixelsY = 0 + elseif currentLineY - scrollPixelsY <= yMinLim then + scrollPixelsY = currentLineY - yMinLim*2 + elseif currentLineY - scrollPixelsY >= yMaxLim then + scrollPixelsY = currentLineY - yMaxLim + 6 + end + local attr = (menuLine == i and INVERS or 0) + if event == EVT_VIRTUAL_ENTER and attr == INVERS then + Page = assert(loadScript(radio.templateHome .. PageFiles[i].script))() + currentPage = i + currentState = pageStatus.display + end + if ((i-1)*8 + yMinLim - scrollPixelsY) >= yMinLim and ((i-1)*8 + yMinLim - scrollPixelsY) <= yMaxLim then + lcd.drawText(6, (i-1)*8 + yMinLim - scrollPixelsY, PageFiles[i].title, attr) + end + end + end + if stopDisplay then + currentState = pageStatus.mainMenu + stopDisplay = false + end processMspReply(mspPollReply()) return 0 end diff --git a/src/BF/bf.lua b/src/SCRIPTS/TOOLS/bf.lua similarity index 86% rename from src/BF/bf.lua rename to src/SCRIPTS/TOOLS/bf.lua index eb4da1c0..8e93fb3a 100644 --- a/src/BF/bf.lua +++ b/src/SCRIPTS/TOOLS/bf.lua @@ -1,6 +1,8 @@ +local toolName = "TNS|Betaflight setup|TNE" SCRIPT_HOME = "/SCRIPTS/BF" apiVersion = 0 +useMenu = true protocol = assert(loadScript(SCRIPT_HOME.."/protocols.lua"))() radio = assert(loadScript(SCRIPT_HOME.."/radios.lua"))() @@ -9,8 +11,6 @@ assert(loadScript(radio.preLoad))() assert(loadScript(protocol.transport))() assert(loadScript(SCRIPT_HOME.."/MSP/common.lua"))() -isTelemetryScript = false - local run_ui = assert(loadScript(SCRIPT_HOME.."/ui.lua"))() return { run=run_ui }