added system information/about app

This commit is contained in:
Mikayla Fischler 2024-04-13 16:18:27 -04:00
parent 57dc20692b
commit 9fe34648c2
5 changed files with 130 additions and 12 deletions

View File

@ -2,9 +2,8 @@
-- I/O Control for Pocket Integration with Supervisor & Coordinator -- I/O Control for Pocket Integration with Supervisor & Coordinator
-- --
local psil = require("scada-common.psil") local log = require("scada-common.log")
local log = require("scada-common.log") local psil = require("scada-common.psil")
local types = require("scada-common.types") local types = require("scada-common.types")
local ALARM = types.ALARM local ALARM = types.ALARM
@ -28,16 +27,21 @@ iocontrol.LINK_STATE = LINK_STATE
---@enum POCKET_APP_ID ---@enum POCKET_APP_ID
local APP_ID = { local APP_ID = {
ROOT = 1, ROOT = 1,
-- main app page
UNITS = 2, UNITS = 2,
ALARMS = 3, ABOUT = 3,
DUMMY = 4, -- diag app page
NUM_APPS = 4 ALARMS = 4,
-- other
DUMMY = 5,
NUM_APPS = 5
} }
iocontrol.APP_ID = APP_ID iocontrol.APP_ID = APP_ID
---@class pocket_ioctl ---@class pocket_ioctl
local io = { local io = {
version = "unknown",
ps = psil.create() ps = psil.create()
} }
@ -77,9 +81,16 @@ function iocontrol.alloc_nav()
local app = { local app = {
root = { _p = nil, _c = {}, nav_to = function () end, tasks = {} }, ---@type nav_tree_page root = { _p = nil, _c = {}, nav_to = function () end, tasks = {} }, ---@type nav_tree_page
cur_page = nil, ---@type nav_tree_page cur_page = nil, ---@type nav_tree_page
pane = pane,
paned_pages = {} paned_pages = {}
} }
-- delayed set of the pane if it wasn't ready at the start
---@param root_pane graphics_element multipane
function app.set_root_pane(root_pane)
app.pane = root_pane
end
-- if a pane was provided, this will switch between numbered pages -- if a pane was provided, this will switch between numbered pages
---@param idx integer page index ---@param idx integer page index
function app.switcher(idx) function app.switcher(idx)
@ -106,7 +117,7 @@ function iocontrol.alloc_nav()
function page.nav_to() function page.nav_to()
app.cur_page = page app.cur_page = page
if pane then pane.set_value(nav_to) end if app.pane then app.pane.set_value(nav_to) end
end end
else else
function page.nav_to() function page.nav_to()

View File

@ -68,6 +68,9 @@ local function main()
-- mount connected devices -- mount connected devices
ppm.mount_all() ppm.mount_all()
-- record version for GUI
iocontrol.get_db().version = POCKET_VERSION
---------------------------------------- ----------------------------------------
-- setup communications & clocks -- setup communications & clocks
---------------------------------------- ----------------------------------------

102
pocket/ui/apps/sys_apps.lua Normal file
View File

@ -0,0 +1,102 @@
--
-- System Apps
--
local comms = require("scada-common.comms")
local lockbox = require("lockbox")
local util = require("scada-common.util")
local iocontrol = require("pocket.iocontrol")
local core = require("graphics.core")
local Div = require("graphics.elements.div")
local ListBox = require("graphics.elements.listbox")
local MultiPane = require("graphics.elements.multipane")
local TextBox = require("graphics.elements.textbox")
local PushButton = require("graphics.elements.controls.push_button")
local cpair = core.cpair
local ALIGN = core.ALIGN
-- create system app pages
---@param root graphics_element parent
local function create_pages(root)
local db = iocontrol.get_db()
----------------
-- About Page --
----------------
local about_root = Div{parent=root,x=1,y=1}
local about_app = db.nav.register_app(iocontrol.APP_ID.ABOUT, about_root)
local about_page = about_app.new_page(nil, 1)
local fw_page = about_app.new_page(about_page, 2)
local hw_page = about_app.new_page(about_page, 3)
local about = Div{parent=about_root,x=1,y=2}
TextBox{parent=about,y=1,text="System Information",height=1,alignment=ALIGN.CENTER}
local btn_fg_bg = cpair(colors.lightBlue, colors.black)
local btn_active = cpair(colors.white, colors.black)
local label = cpair(colors.lightGray, colors.black)
PushButton{parent=about,x=2,y=3,text="Firmware >",fg_bg=btn_fg_bg,active_fg_bg=btn_active,callback=fw_page.nav_to}
PushButton{parent=about,x=2,y=4,text="Host Details >",fg_bg=btn_fg_bg,active_fg_bg=btn_active,callback=hw_page.nav_to}
local fw_div = Div{parent=about_root,x=1,y=2}
TextBox{parent=fw_div,y=1,text="Firmware Versions",height=1,alignment=ALIGN.CENTER}
PushButton{parent=fw_div,x=2,y=1,text="<",fg_bg=btn_fg_bg,active_fg_bg=btn_active,callback=about_page.nav_to}
local fw_list_box = ListBox{parent=fw_div,x=1,y=3,scroll_height=100,nav_fg_bg=cpair(colors.lightGray,colors.gray),nav_active=cpair(colors.white,colors.gray)}
local fw_list = Div{parent=fw_list_box,x=1,y=2,height=18}
TextBox{parent=fw_list,x=2,text="Pocket Version",height=1,alignment=ALIGN.LEFT,fg_bg=label}
TextBox{parent=fw_list,x=2,text=db.version,height=1,alignment=ALIGN.LEFT}
fw_list.line_break()
TextBox{parent=fw_list,x=2,text="Comms Version",height=1,alignment=ALIGN.LEFT,fg_bg=label}
TextBox{parent=fw_list,x=2,text=comms.version,height=1,alignment=ALIGN.LEFT}
fw_list.line_break()
TextBox{parent=fw_list,x=2,text="API Version",height=1,alignment=ALIGN.LEFT,fg_bg=label}
TextBox{parent=fw_list,x=2,text=comms.api_version,height=1,alignment=ALIGN.LEFT}
fw_list.line_break()
TextBox{parent=fw_list,x=2,text="Common Lib Version",height=1,alignment=ALIGN.LEFT,fg_bg=label}
TextBox{parent=fw_list,x=2,text=util.version,height=1,alignment=ALIGN.LEFT}
fw_list.line_break()
TextBox{parent=fw_list,x=2,text="Graphics Version",height=1,alignment=ALIGN.LEFT,fg_bg=label}
TextBox{parent=fw_list,x=2,text=core.version,height=1,alignment=ALIGN.LEFT}
fw_list.line_break()
TextBox{parent=fw_list,x=2,text="Lockbox Version",height=1,alignment=ALIGN.LEFT,fg_bg=label}
TextBox{parent=fw_list,x=2,text=lockbox.version,height=1,alignment=ALIGN.LEFT}
local hw_div = Div{parent=about_root,x=1,y=2}
TextBox{parent=hw_div,y=1,text="Host Versions",height=1,alignment=ALIGN.CENTER}
PushButton{parent=hw_div,x=2,y=1,text="<",fg_bg=btn_fg_bg,active_fg_bg=btn_active,callback=about_page.nav_to}
hw_div.line_break()
TextBox{parent=hw_div,x=2,text="Lua Version",height=1,alignment=ALIGN.LEFT,fg_bg=label}
TextBox{parent=hw_div,x=2,text=_VERSION,height=1,alignment=ALIGN.LEFT}
hw_div.line_break()
TextBox{parent=hw_div,x=2,text="Environment",height=1,alignment=ALIGN.LEFT,fg_bg=label}
TextBox{parent=hw_div,x=2,text=_HOST,height=6,alignment=ALIGN.LEFT}
local root_pane = MultiPane{parent=about_root,x=1,y=1,panes={about,fw_div,hw_div}}
about_app.set_root_pane(root_pane)
end
return create_pages

View File

@ -6,6 +6,7 @@ local iocontrol = require("pocket.iocontrol")
local diag_apps = require("pocket.ui.apps.diag_apps") local diag_apps = require("pocket.ui.apps.diag_apps")
local dummy_app = require("pocket.ui.apps.dummy_app") local dummy_app = require("pocket.ui.apps.dummy_app")
local sys_apps = require("pocket.ui.apps.sys_apps")
local conn_waiting = require("pocket.ui.components.conn_waiting") local conn_waiting = require("pocket.ui.components.conn_waiting")
@ -78,6 +79,7 @@ local function init(main)
unit_page(page_div) unit_page(page_div)
diag_apps(page_div) diag_apps(page_div)
sys_apps(page_div)
dummy_app(page_div) dummy_app(page_div)
assert(#db.nav.get_containers() == iocontrol.APP_ID.NUM_APPS, "app IDs were not sequential or some apps weren't registered") assert(#db.nav.get_containers() == iocontrol.APP_ID.NUM_APPS, "app IDs were not sequential or some apps weren't registered")

View File

@ -25,17 +25,16 @@ local function new_view(root)
local main = Div{parent=root,x=1,y=1,height=19} local main = Div{parent=root,x=1,y=1,height=19}
local app = db.nav.register_app(iocontrol.APP_ID.ROOT, main)
local apps_1 = Div{parent=main,x=1,y=1,height=15} local apps_1 = Div{parent=main,x=1,y=1,height=15}
local apps_2 = Div{parent=main,x=1,y=1,height=15} local apps_2 = Div{parent=main,x=1,y=1,height=15}
local panes = { apps_1, apps_2 } local panes = { apps_1, apps_2 }
local f_ref = {} local app_pane = AppMultiPane{parent=main,x=1,y=1,height=18,panes=panes,active_color=colors.lightGray,nav_colors=cpair(colors.lightGray,colors.gray),scroll_nav=true,drag_nav=true,callback=app.switcher}
local app_pane = AppMultiPane{parent=main,x=1,y=1,height=18,panes=panes,active_color=colors.lightGray,nav_colors=cpair(colors.lightGray,colors.gray),scroll_nav=true,drag_nav=true,callback=function(v)f_ref.callback(v)end}
local app = db.nav.register_app(iocontrol.APP_ID.ROOT, main, app_pane)
f_ref.callback = app.switcher
app.set_root_pane(app_pane)
app.new_page(app.new_page(nil, 1), 2) app.new_page(app.new_page(nil, 1), 2)
local function open(id) db.nav.open_app(id) end local function open(id) db.nav.open_app(id) end
@ -48,6 +47,7 @@ local function new_view(root)
App{parent=apps_1,x=3,y=7,text="\x08",title="DEV",callback=function()open(APP_ID.DUMMY)end,app_fg_bg=cpair(colors.black,colors.lightGray),active_fg_bg=active_fg_bg} App{parent=apps_1,x=3,y=7,text="\x08",title="DEV",callback=function()open(APP_ID.DUMMY)end,app_fg_bg=cpair(colors.black,colors.lightGray),active_fg_bg=active_fg_bg}
App{parent=apps_1,x=10,y=7,text="\x7f",title="Waste",callback=function()open(APP_ID.DUMMY)end,app_fg_bg=cpair(colors.black,colors.brown),active_fg_bg=active_fg_bg} App{parent=apps_1,x=10,y=7,text="\x7f",title="Waste",callback=function()open(APP_ID.DUMMY)end,app_fg_bg=cpair(colors.black,colors.brown),active_fg_bg=active_fg_bg}
App{parent=apps_1,x=17,y=7,text="\xb6",title="Guide",callback=function()open(APP_ID.DUMMY)end,app_fg_bg=cpair(colors.black,colors.cyan),active_fg_bg=active_fg_bg} App{parent=apps_1,x=17,y=7,text="\xb6",title="Guide",callback=function()open(APP_ID.DUMMY)end,app_fg_bg=cpair(colors.black,colors.cyan),active_fg_bg=active_fg_bg}
App{parent=apps_1,x=3,y=12,text="?",title="About",callback=function()open(APP_ID.ABOUT)end,app_fg_bg=cpair(colors.black,colors.white),active_fg_bg=active_fg_bg}
TextBox{parent=apps_2,text="Diagnostic Apps",x=1,y=2,height=1,alignment=ALIGN.CENTER} TextBox{parent=apps_2,text="Diagnostic Apps",x=1,y=2,height=1,alignment=ALIGN.CENTER}