From 86860af6409f2477b18e314e425b49935ed0bd36 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Wed, 9 Oct 2019 09:47:06 +0200 Subject: [PATCH 1/5] kill events generated after a MINUS --- src/SCRIPTS/BF/ui.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/src/SCRIPTS/BF/ui.lua b/src/SCRIPTS/BF/ui.lua index f61c7568..39e7a30e 100644 --- a/src/SCRIPTS/BF/ui.lua +++ b/src/SCRIPTS/BF/ui.lua @@ -352,6 +352,7 @@ function run_ui(event) incValue(1) elseif event == userEvent.press.minus or event == userEvent.repeatPress.minus or event == userEvent.dial.left then incValue(-1) + killEvents(event) end end local nextPage = currentPage From 210250008450921052422cd2ecbaa1c80b540d40 Mon Sep 17 00:00:00 2001 From: Richard Cooper Date: Wed, 9 Oct 2019 22:21:24 +0100 Subject: [PATCH 2/5] Add to tools screen in OpenTx 2.3 --- src/SCRIPTS/TOOLS/bf.lua | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/SCRIPTS/TOOLS/bf.lua diff --git a/src/SCRIPTS/TOOLS/bf.lua b/src/SCRIPTS/TOOLS/bf.lua new file mode 100644 index 00000000..855771e3 --- /dev/null +++ b/src/SCRIPTS/TOOLS/bf.lua @@ -0,0 +1,15 @@ +local toolName = "TNS|Betaflight setup|TNE" +SCRIPT_HOME = "/SCRIPTS/BF" + +apiVersion = 0 + +protocol = assert(loadScript(SCRIPT_HOME.."/protocols.lua"))() +radio = assert(loadScript(SCRIPT_HOME.."/radios.lua"))() + +assert(loadScript(radio.preLoad))() +assert(loadScript(protocol.transport))() +assert(loadScript(SCRIPT_HOME.."/MSP/common.lua"))() + +local run_ui = assert(loadScript(SCRIPT_HOME.."/ui.lua"))() + +return { run=run_ui } From 017be690df5f834112d2393e15453d31e04ed651 Mon Sep 17 00:00:00 2001 From: Richard Cooper Date: Thu, 10 Oct 2019 11:12:11 +0100 Subject: [PATCH 3/5] Add txt file to hint tools menu use. --- src/BF/use_tools_menu_instead_of_this.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/BF/use_tools_menu_instead_of_this.txt 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 From 8874b62e5e0c058257f59ae4911a68edbe3a6b85 Mon Sep 17 00:00:00 2001 From: Richard Cooper Date: Thu, 10 Oct 2019 13:13:40 +0100 Subject: [PATCH 4/5] removed BF/bf.lua --- src/BF/bf.lua | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 src/BF/bf.lua diff --git a/src/BF/bf.lua b/src/BF/bf.lua deleted file mode 100644 index eb4da1c0..00000000 --- a/src/BF/bf.lua +++ /dev/null @@ -1,16 +0,0 @@ -SCRIPT_HOME = "/SCRIPTS/BF" - -apiVersion = 0 - -protocol = assert(loadScript(SCRIPT_HOME.."/protocols.lua"))() -radio = assert(loadScript(SCRIPT_HOME.."/radios.lua"))() - -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 } From 33f99b581a0d28894f7f097564e36e19d1b529d1 Mon Sep 17 00:00:00 2001 From: Richard Cooper Date: Wed, 9 Oct 2019 22:34:27 +0100 Subject: [PATCH 5/5] Add menu only for tools screen. --- src/SCRIPTS/BF/HORUS/horuspre.lua | 20 +++---- src/SCRIPTS/BF/NV14/nv14pre.lua | 20 +++---- src/SCRIPTS/BF/X7/x7pre.lua | 18 +++--- src/SCRIPTS/BF/X9/x9pre.lua | 20 +++---- src/SCRIPTS/BF/ui.lua | 96 ++++++++++++++++++++++++------- src/SCRIPTS/TOOLS/bf.lua | 1 + 6 files changed, 114 insertions(+), 61 deletions(-) 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 e4430fed..72a2e5a6 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 @@ -355,7 +371,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) @@ -378,8 +394,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) @@ -389,6 +405,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/SCRIPTS/TOOLS/bf.lua b/src/SCRIPTS/TOOLS/bf.lua index 855771e3..8e93fb3a 100644 --- a/src/SCRIPTS/TOOLS/bf.lua +++ b/src/SCRIPTS/TOOLS/bf.lua @@ -2,6 +2,7 @@ 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"))()