Skip to content

Commit 1dc5e28

Browse files
authored
Virtual events (#257)
Virtual events
2 parents 4fd9cbe + b23df65 commit 1dc5e28

File tree

7 files changed

+115
-63
lines changed

7 files changed

+115
-63
lines changed

src/BF/use_tools_menu_instead_of_this.txt

Whitespace-only changes.

src/SCRIPTS/BF/HORUS/horuspre.lua

+10-10
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
PageFiles =
22
{
3-
"pids1.lua",
4-
"pids2.lua",
5-
"rates.lua",
6-
"pid_advanced.lua",
7-
"filters.lua",
8-
"pwm.lua",
9-
"rx.lua",
10-
"vtx.lua",
11-
"rescue.lua",
12-
"gpspids.lua",
3+
{ title = "PIDs 1", script = "pids1.lua"},
4+
{ title = "PIDs 2", script = "pids2.lua"},
5+
{ title = "Rates", script = "rates.lua"},
6+
{ title = "Advanced PIDs", script = "pid_advanced.lua"},
7+
{ title = "Filters", script = "filters.lua"},
8+
{ title = "vTX Settings", script = "vtx.lua"},
9+
{ title = "Gyro / Motor", script = "pwm.lua"},
10+
{ title = "Rx", script = "rx.lua"},
11+
{ title = "GPS Rescue", script = "rescue.lua", requiredVersion = 1.041},
12+
{ title = "GPS PIDs", script = "gpspids.lua", requiredVersion = 1.041},
1313
}
1414

1515
MenuBox = { x=120, y=100, w=200, x_offset=68, h_line=20, h_offset=6 }

src/SCRIPTS/BF/NV14/nv14pre.lua

+10-10
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
PageFiles =
22
{
3-
"pids1.lua",
4-
"pids2.lua",
5-
"rates.lua",
6-
"pid_advanced.lua",
7-
"filters.lua",
8-
"pwm.lua",
9-
"rx.lua",
10-
"vtx.lua",
11-
"rescue.lua",
12-
"gpspids.lua",
3+
{ title = "PIDs 1", script = "pids1.lua"},
4+
{ title = "PIDs 2", script = "pids2.lua"},
5+
{ title = "Rates", script = "rates.lua"},
6+
{ title = "Advanced PIDs", script = "pid_advanced.lua"},
7+
{ title = "Filters", script = "filters.lua"},
8+
{ title = "vTX Settings", script = "vtx.lua"},
9+
{ title = "Gyro / Motor", script = "pwm.lua"},
10+
{ title = "Rx", script = "rx.lua"},
11+
{ title = "GPS Rescue", script = "rescue.lua", requiredVersion = 1.041},
12+
{ title = "GPS PIDs", script = "gpspids.lua", requiredVersion = 1.041},
1313
}
1414

1515
MenuBox = { x= (LCD_W -200)/2, y=LCD_H/2, w=200, x_offset=68, h_line=20, h_offset=6 }

src/SCRIPTS/BF/X7/x7pre.lua

+9-9
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
PageFiles =
22
{
3-
"pids1.lua",
4-
"pids2.lua",
5-
"rates.lua",
6-
"pid_advanced.lua",
7-
"filters.lua",
8-
"pwm.lua",
9-
"vtx.lua",
10-
"rescue.lua",
11-
"gpspids.lua",
3+
{ title = "vTX Settings", script = "vtx.lua"},
4+
{ title = "Gyro / Motor", script = "pwm.lua"},
5+
{ title = "PIDs 1", script = "pids1.lua"},
6+
{ title = "PIDs 2", script = "pids2.lua"},
7+
{ title = "Rates", script = "rates.lua"},
8+
{ title = "Advanced PIDs", script = "pid_advanced.lua"},
9+
{ title = "Filters", script = "filters.lua"},
10+
{ title = "GPS Rescue", script = "rescue.lua", requiredVersion = 1.041},
11+
{ title = "GPS PIDs", script = "gpspids.lua", requiredVersion = 1.041},
1212
}
1313

1414
MenuBox = { x=15, y=12, w=100, x_offset=36, h_line=8, h_offset=3 }

src/SCRIPTS/BF/X9/x9pre.lua

+10-10
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
PageFiles =
22
{
3-
"pids1.lua",
4-
"pids2.lua",
5-
"rates.lua",
6-
"pid_advanced.lua",
7-
"filters.lua",
8-
"pwm.lua",
9-
"rx.lua",
10-
"vtx.lua",
11-
"rescue.lua",
12-
"gpspids.lua",
3+
{ title = "PIDs 1", script = "pids1.lua"},
4+
{ title = "PIDs 2", script = "pids2.lua"},
5+
{ title = "Rates", script = "rates.lua"},
6+
{ title = "Advanced PIDs", script = "pid_advanced.lua"},
7+
{ title = "Filters", script = "filters.lua"},
8+
{ title = "vTX Settings", script = "vtx.lua"},
9+
{ title = "Gyro / Motor", script = "pwm.lua"},
10+
{ title = "Rx", script = "rx.lua"},
11+
{ title = "GPS Rescue", script = "rescue.lua", requiredVersion = 1.041},
12+
{ title = "GPS PIDs", script = "gpspids.lua", requiredVersion = 1.041},
1313
}
1414

1515
MenuBox = { x=40, y=12, w=120, x_offset=36, h_line=8, h_offset=3 }

src/SCRIPTS/BF/ui.lua

+74-22
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ local pageStatus =
33
display = 2,
44
editing = 3,
55
saving = 4,
6-
displayMenu = 5,
6+
popupMenu = 5,
7+
mainMenu = 6,
78
}
89

910
local uiMsp =
@@ -12,7 +13,8 @@ local uiMsp =
1213
eepromWrite = 250
1314
}
1415

15-
local currentState = pageStatus.display
16+
local menuLine = 1
17+
local currentState = pageStatus.mainMenu
1618
local requestTimeout = 80 -- 800ms request timeout
1719
local currentPage = 1
1820
local currentLine = 1
@@ -22,9 +24,10 @@ local saveRetries = 0
2224
local saveMaxRetries = 0
2325
local pageRequested = false
2426
local telemetryScreenActive = false
25-
local menuActive = false
27+
local popupMenuActive = false
2628
local lastRunTS = 0
2729
local killEnterBreak = 0
30+
local stopDisplay = true
2831
local scrollPixelsY = 0
2932

3033
local Page = nil
@@ -72,7 +75,7 @@ local function eepromWrite()
7275
protocol.mspRead(uiMsp.eepromWrite)
7376
end
7477

75-
local menuList = {
78+
local popupMenuList = {
7679
{
7780
t = "save page",
7881
f = saveSettings
@@ -151,8 +154,12 @@ local function incLine(inc)
151154
currentLine = clipValue(currentLine + inc, 1, #(Page.fields))
152155
end
153156

154-
local function incMenu(inc)
155-
menuActive = clipValue(menuActive + inc, 1, #(menuList))
157+
local function incMainMenu(inc)
158+
menuLine = clipValue(menuLine + inc, 1, #(PageFiles))
159+
end
160+
161+
local function incPopupMenu(inc)
162+
popupMenuActive = clipValue(popupMenuActive + inc, 1, #(popupMenuList))
156163
end
157164

158165
local function requestPage()
@@ -258,21 +265,21 @@ local function incValue(inc)
258265
end
259266
end
260267

261-
local function drawMenu()
268+
local function drawPopupMenu()
262269
local x = MenuBox.x
263270
local y = MenuBox.y
264271
local w = MenuBox.w
265272
local h_line = MenuBox.h_line
266273
local h_offset = MenuBox.h_offset
267-
local h = #(menuList) * h_line + h_offset*2
274+
local h = #(popupMenuList) * h_line + h_offset*2
268275

269276
lcd.drawFilledRectangle(x,y,w,h,backgroundFill)
270277
lcd.drawRectangle(x,y,w-1,h-1,foregroundColor)
271278
lcd.drawText(x+h_line/2,y+h_offset,"Menu:",globalTextOptions)
272279

273-
for i,e in ipairs(menuList) do
280+
for i,e in ipairs(popupMenuList) do
274281
local text_options = globalTextOptions
275-
if menuActive == i then
282+
if popupMenuActive == i then
276283
text_options = text_options + INVERS
277284
end
278285
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)
284291
-- if lastRunTS old than 500ms
285292
if lastRunTS + 50 < now then
286293
invalidatePages()
294+
if useMenu then
295+
currentState = pageStatus.mainMenu
296+
else
297+
currentState = pageStatus.display
298+
end
287299
end
288300
lastRunTS = now
289301
if (currentState == pageStatus.saving) then
@@ -301,26 +313,26 @@ function run_ui(event)
301313
mspProcessTxQ()
302314
-- navigation
303315
if isTelemetryScript and event == EVT_VIRTUAL_MENU_LONG then -- telemetry script
304-
menuActive = 1
305-
currentState = pageStatus.displayMenu
316+
popupMenuActive = 1
317+
currentState = pageStatus.popupMenu
306318
elseif (not isTelemetryScript) and event == EVT_VIRTUAL_ENTER_LONG then -- standalone
307-
menuActive = 1
319+
popupMenuActive = 1
308320
killEnterBreak = 1
309-
currentState = pageStatus.displayMenu
321+
currentState = pageStatus.popupMenu
310322
-- menu is currently displayed
311-
elseif currentState == pageStatus.displayMenu then
323+
elseif currentState == pageStatus.popupMenu then
312324
if event == EVT_VIRTUAL_EXIT then
313325
currentState = pageStatus.display
314326
elseif event == EVT_VIRTUAL_PREV then
315-
incMenu(-1)
327+
incPopupMenu(-1)
316328
elseif event == EVT_VIRTUAL_NEXT then
317-
incMenu(1)
329+
incPopupMenu(1)
318330
elseif event == EVT_VIRTUAL_ENTER then
319331
if killEnterBreak == 1 then
320332
killEnterBreak = 0
321333
else
322334
currentState = pageStatus.display
323-
menuList[menuActive].f()
335+
popupMenuList[popupMenuActive].f()
324336
end
325337
end
326338
-- normal page viewing
@@ -341,7 +353,11 @@ function run_ui(event)
341353
currentState = pageStatus.editing
342354
end
343355
elseif event == EVT_VIRTUAL_EXIT then
344-
return protocol.exitFunc();
356+
if useMenu then
357+
stopDisplay = true
358+
else
359+
return protocol.exitFunc();
360+
end
345361
end
346362
-- editing value
347363
elseif currentState == pageStatus.editing then
@@ -356,7 +372,7 @@ function run_ui(event)
356372
end
357373
local nextPage = currentPage
358374
while Page == nil do
359-
Page = assert(loadScript(radio.templateHome .. PageFiles[currentPage]))()
375+
Page = assert(loadScript(radio.templateHome .. PageFiles[currentPage].script))()
360376
if Page.requiredVersion and apiVersion > 0 and Page.requiredVersion > apiVersion then
361377
incPage(1)
362378

@@ -379,8 +395,8 @@ function run_ui(event)
379395
if protocol.rssi() == 0 then
380396
lcd.drawText(NoTelem[1],NoTelem[2],NoTelem[3],NoTelem[4])
381397
end
382-
if currentState == pageStatus.displayMenu then
383-
drawMenu()
398+
if currentState == pageStatus.popupMenu then
399+
drawPopupMenu()
384400
elseif currentState == pageStatus.saving then
385401
lcd.drawFilledRectangle(SaveBox.x,SaveBox.y,SaveBox.w,SaveBox.h,backgroundFill)
386402
lcd.drawRectangle(SaveBox.x,SaveBox.y,SaveBox.w,SaveBox.h,SOLID)
@@ -390,6 +406,42 @@ function run_ui(event)
390406
lcd.drawText(SaveBox.x+SaveBox.x_offset,SaveBox.y+SaveBox.h_offset,"Retrying",DBLSIZE + (globalTextOptions))
391407
end
392408
end
409+
if currentState == pageStatus.mainMenu and useMenu then
410+
if event == EVT_VIRTUAL_EXIT then
411+
return 2
412+
elseif event == EVT_VIRTUAL_NEXT then
413+
incMainMenu(1)
414+
elseif event == EVT_VIRTUAL_PREV then
415+
incMainMenu(-1)
416+
end
417+
lcd.clear()
418+
lcd.drawScreenTitle("Betaflight Config", 0, 0)
419+
for i=1, #PageFiles do
420+
local yMinLim = 10
421+
local yMaxLim = LCD_H - 8
422+
local currentLineY = (menuLine-1)*8 + yMinLim
423+
if currentLineY <= yMaxLim then
424+
scrollPixelsY = 0
425+
elseif currentLineY - scrollPixelsY <= yMinLim then
426+
scrollPixelsY = currentLineY - yMinLim*2
427+
elseif currentLineY - scrollPixelsY >= yMaxLim then
428+
scrollPixelsY = currentLineY - yMaxLim + 6
429+
end
430+
local attr = (menuLine == i and INVERS or 0)
431+
if event == EVT_VIRTUAL_ENTER and attr == INVERS then
432+
Page = assert(loadScript(radio.templateHome .. PageFiles[i].script))()
433+
currentPage = i
434+
currentState = pageStatus.display
435+
end
436+
if ((i-1)*8 + yMinLim - scrollPixelsY) >= yMinLim and ((i-1)*8 + yMinLim - scrollPixelsY) <= yMaxLim then
437+
lcd.drawText(6, (i-1)*8 + yMinLim - scrollPixelsY, PageFiles[i].title, attr)
438+
end
439+
end
440+
end
441+
if stopDisplay then
442+
currentState = pageStatus.mainMenu
443+
stopDisplay = false
444+
end
393445
processMspReply(mspPollReply())
394446
return 0
395447
end
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
local toolName = "TNS|Betaflight setup|TNE"
12
SCRIPT_HOME = "/SCRIPTS/BF"
23

34
apiVersion = 0
5+
useMenu = true
46

57
protocol = assert(loadScript(SCRIPT_HOME.."/protocols.lua"))()
68
radio = assert(loadScript(SCRIPT_HOME.."/radios.lua"))()
@@ -9,8 +11,6 @@ assert(loadScript(radio.preLoad))()
911
assert(loadScript(protocol.transport))()
1012
assert(loadScript(SCRIPT_HOME.."/MSP/common.lua"))()
1113

12-
isTelemetryScript = false
13-
1414
local run_ui = assert(loadScript(SCRIPT_HOME.."/ui.lua"))()
1515

1616
return { run=run_ui }

0 commit comments

Comments
 (0)