From 9266d7d8e1fa9e7e7ac669e56c938507e3327949 Mon Sep 17 00:00:00 2001 From: Mikayla Fischler Date: Sun, 18 Jun 2023 00:40:01 -0400 Subject: [PATCH] #258 versioned graphics component --- ccmsi.lua | 267 ++++++++++++++++++++---------------------- graphics/core.lua | 2 + imgen.py | 7 +- install_manifest.json | 2 +- 4 files changed, 137 insertions(+), 141 deletions(-) diff --git a/ccmsi.lua b/ccmsi.lua index a8fff8a..b3bc16d 100644 --- a/ccmsi.lua +++ b/ccmsi.lua @@ -20,7 +20,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. local function println(message) print(tostring(message)) end local function print(message) term.write(tostring(message)) end -local CCMSI_VERSION = "v1.2" +local CCMSI_VERSION = "v1.3" local install_dir = "/.install-cache" local manifest_path = "https://mikaylafischler.github.io/cc-mek-scada/manifests/" @@ -54,6 +54,68 @@ local function write_install_manifest(manifest, dependencies) imfile.close() end +-- ask the user yes or no +---@nodiscard +---@param question string +---@param default boolean +---@return boolean|nil +local function ask_y_n(question, default) + print(question) + + if default == true then + print(" (Y/n)? ") + else + print(" (y/N)? ") + end + + local response = read(nil, nil) + + if response == "" then + return default + elseif response == "Y" or response == "y" then + return true + elseif response == "N" or response == "n" then + return false + else + return nil + end +end + +-- print out a white + blue text message
+-- automatically adds a space +---@param message string message +---@param package string dependency/package/version +local function pkg_message(message, package) + term.setTextColor(colors.white) + print(message .. " ") + term.setTextColor(colors.blue) + println(package) + term.setTextColor(colors.white) +end + +-- indicate actions to be taken based on package differences for installs/updates +---@param name string package name +---@param _local_v string|nil local version +---@param _remote_v string remote version +local function show_pkg_change(name, _local_v, _remote_v) + if _local_v ~= nil then + if _local_v ~= _remote_v then + print("[" .. name .. "] updating ") + term.setTextColor(colors.blue) + print(_local_v) + term.setTextColor(colors.white) + print(" \xbb ") + term.setTextColor(colors.blue) + println(_local_v) + term.setTextColor(colors.white) + elseif mode == "install" then + pkg_message("[" .. name .. "] reinstalling", _local_v) + end + else + pkg_message("[" .. name .. "] new install of", _remote_v) + end +end + -- -- get and validate command line options -- @@ -230,6 +292,13 @@ elseif mode == "install" or mode == "update" then -- GET LOCAL MANIFEST -- ------------------------ + local ver = { + app = { v_local = nil, v_remote = nil, changed = false }, + boot = { v_local = nil, v_remote = nil, changed = false }, + comms = { v_local = nil, v_remote = nil, changed = false }, + graphics = { v_local = nil, v_remote = nil, changed = false } + } + local imfile = fs.open("install_manifest.json", "r") local local_ok = false local local_manifest = {} @@ -239,10 +308,6 @@ elseif mode == "install" or mode == "update" then imfile.close() end - local local_app_version = nil - local local_comms_version = nil - local local_boot_version = nil - -- try to find local versions if not local_ok then if mode == "update" then @@ -252,9 +317,10 @@ elseif mode == "install" or mode == "update" then return end else - local_app_version = local_manifest.versions[app] - local_comms_version = local_manifest.versions.comms - local_boot_version = local_manifest.versions.bootloader + ver.boot.v_local = local_manifest.versions.bootloader + ver.app.v_local = local_manifest.versions[app] + ver.comms.v_local = local_manifest.versions.comms + ver.graphics.v_local = local_manifest.versions.graphics if local_manifest.versions[app] == nil then term.setTextColor(colors.red) @@ -271,93 +337,43 @@ elseif mode == "install" or mode == "update" then end end - local remote_app_version = manifest.versions[app] - local remote_comms_version = manifest.versions.comms - local remote_boot_version = manifest.versions.bootloader + ver.boot.v_remote = manifest.versions.bootloader + ver.app.v_remote = manifest.versions[app] + ver.comms.v_remote = manifest.versions.comms + ver.graphics.v_remote = manifest.versions.graphics term.setTextColor(colors.green) if mode == "install" then - println("installing " .. app .. " files...") + println("Installing " .. app .. " files...") elseif mode == "update" then - println("updating " .. app .. " files... (keeping old config.lua)") + println("Updating " .. app .. " files... (keeping old config.lua)") end term.setTextColor(colors.white) -- display bootloader version change information - if local_boot_version ~= nil then - if local_boot_version ~= remote_boot_version then - print("[bootldr] updating ") - term.setTextColor(colors.blue) - print(local_boot_version) - term.setTextColor(colors.white) - print(" \xbb ") - term.setTextColor(colors.blue) - println(remote_boot_version) - term.setTextColor(colors.white) - elseif mode == "install" then - print("[bootldr] reinstalling ") - term.setTextColor(colors.blue) - println(local_boot_version) - term.setTextColor(colors.white) - end - else - print("[bootldr] new install of ") - term.setTextColor(colors.blue) - println(remote_boot_version) - term.setTextColor(colors.white) - end + show_pkg_change("bootldr", ver.boot.v_local, ver.boot.v_remote) + ver.boot.changed = ver.boot.v_local ~= ver.boot.v_remote -- display app version change information - if local_app_version ~= nil then - if local_app_version ~= remote_app_version then - print("[" .. app .. "] updating ") - term.setTextColor(colors.blue) - print(local_app_version) - term.setTextColor(colors.white) - print(" \xbb ") - term.setTextColor(colors.blue) - println(remote_app_version) - term.setTextColor(colors.white) - elseif mode == "install" then - print("[" .. app .. "] reinstalling ") - term.setTextColor(colors.blue) - println(local_app_version) - term.setTextColor(colors.white) - end - else - print("[" .. app .. "] new install of ") - term.setTextColor(colors.blue) - println(remote_app_version) + show_pkg_change(app, ver.app.v_local, ver.app.v_remote) + ver.app.changed = ver.app.v_local ~= ver.app.v_remote + + -- display comms version change information + show_pkg_change("comms", ver.comms.v_local, ver.comms.v_remote) + ver.comms.changed = ver.comms.v_local ~= ver.comms.v_remote + if ver.comms.changed then + print("[comms] ") + term.setTextColor(colors.yellow) + println("other devices on the network will require an update") term.setTextColor(colors.white) end - -- display comms version change information - if local_comms_version ~= nil then - if local_comms_version ~= remote_comms_version then - print("[comms] updating ") - term.setTextColor(colors.blue) - print(local_comms_version) - term.setTextColor(colors.white) - print(" \xbb ") - term.setTextColor(colors.blue) - println(remote_comms_version) - term.setTextColor(colors.white) - print("[comms] ") - term.setTextColor(colors.yellow) - println("other devices on the network will require an update") - term.setTextColor(colors.white) - elseif mode == "install" then - print("[comms] reinstalling ") - term.setTextColor(colors.blue) - println(local_comms_version) - term.setTextColor(colors.white) - end - else - print("[comms] new install of ") - term.setTextColor(colors.blue) - println(remote_comms_version) - term.setTextColor(colors.white) - end + -- display graphics version change information + show_pkg_change("graphics", ver.graphics.v_local, ver.graphics.v_remote) + ver.graphics.changed = ver.graphics.v_local ~= ver.graphics.v_remote + + -- ask for confirmation + if not ask_y_n("Continue?", false) then return end -------------------------- -- START INSTALL/UPDATE -- @@ -386,18 +402,13 @@ elseif mode == "install" or mode == "update" then println("WARNING: Insufficient space available for a full download!") term.setTextColor(colors.white) println("Files can be downloaded one by one, so if you are replacing a current install this will not be a problem unless installation fails.") - println("Do you wish to continue? (y/N)") - - local confirm = read() - if confirm ~= "y" and confirm ~= "Y" then - println("installation cancelled") + if mode == "update" then println("If installation still fails, delete this device's log file and try again.") end + if not ask_y_n("Do you wish to continue?", false) then + println("Operation cancelled.") return end end ----@diagnostic disable-next-line: undefined-field - os.sleep(2) - local success = true if not single_file_mode then @@ -408,20 +419,14 @@ elseif mode == "install" or mode == "update" then -- download all dependencies for _, dependency in pairs(dependencies) do - if mode == "update" and ((dependency == "system" and local_boot_version == remote_boot_version) or (local_app_version == remote_app_version)) then - -- skip system package if unchanged, skip app package if not changed - -- skip packages that have no version if app version didn't change - term.setTextColor(colors.white) - print("skipping download of unchanged package ") - term.setTextColor(colors.blue) - println(dependency) + if mode == "update" and ((dependency == "system" and ver.boot.changed) or + (dependency == "graphics" and ver.graphics.changed) or + (ver.changed.app)) then + pkg_message("skipping download of unchanged package", dependency) else - term.setTextColor(colors.white) - print("downloading package ") - term.setTextColor(colors.blue) - println(dependency) - + pkg_message("downloading package", dependency) term.setTextColor(colors.lightGray) + local files = file_list[dependency] for _, file in pairs(files) do println("GET " .. file) @@ -444,20 +449,14 @@ elseif mode == "install" or mode == "update" then -- copy in downloaded files (installation) if success then for _, dependency in pairs(dependencies) do - if mode == "update" and ((dependency == "system" and local_boot_version == remote_boot_version) or (local_app_version == remote_app_version)) then - -- skip system package if unchanged, skip app package if not changed - -- skip packages that have no version if app version didn't change - term.setTextColor(colors.white) - print("skipping install of unchanged package ") - term.setTextColor(colors.blue) - println(dependency) + if mode == "update" and ((dependency == "system" and ver.boot.changed) or + (dependency == "graphics" and ver.graphics.changed) or + (ver.changed.app)) then + pkg_message("skipping install of unchanged package", dependency) else - term.setTextColor(colors.white) - print("installing package ") - term.setTextColor(colors.blue) - println(dependency) - + pkg_message("installing package", dependency) term.setTextColor(colors.lightGray) + local files = file_list[dependency] for _, file in pairs(files) do if mode == "install" or file ~= config_file then @@ -478,36 +477,30 @@ elseif mode == "install" or mode == "update" then write_install_manifest(manifest, dependencies) term.setTextColor(colors.green) if mode == "install" then - println("installation completed successfully") + println("Installation completed successfully.") else - println("update completed successfully") + println("Update completed successfully.") end else if mode == "install" then term.setTextColor(colors.red) - println("installation failed") + println("Installation failed.") else term.setTextColor(colors.orange) - println("update failed, existing files unmodified") + println("Update failed, existing files unmodified.") end end else -- go through all files and replace one by one for _, dependency in pairs(dependencies) do - if mode == "update" and ((dependency == "system" and local_boot_version == remote_boot_version) or (local_app_version == remote_app_version)) then - -- skip system package if unchanged, skip app package if not changed - -- skip packages that have no version if app version didn't change - term.setTextColor(colors.white) - print("skipping install of unchanged package ") - term.setTextColor(colors.blue) - println(dependency) + if mode == "update" and ((dependency == "system" and ver.boot.changed) or + (dependency == "graphics" and ver.graphics.changed) or + (ver.changed.app)) then + pkg_message("skipping install of unchanged package", dependency) else - term.setTextColor(colors.white) - print("installing package ") - term.setTextColor(colors.blue) - println(dependency) - + pkg_message("installing package", dependency) term.setTextColor(colors.lightGray) + local files = file_list[dependency] for _, file in pairs(files) do if mode == "install" or file ~= config_file then @@ -534,16 +527,16 @@ elseif mode == "install" or mode == "update" then write_install_manifest(manifest, dependencies) term.setTextColor(colors.green) if mode == "install" then - println("installation completed successfully") + println("Installation completed successfully.") else - println("update completed successfully") + println("Update completed successfully.") end else term.setTextColor(colors.red) if mode == "install" then - println("installation failed, files may have been skipped") + println("Installation failed, files may have been skipped.") else - println("update failed, files may have been skipped") + println("Update failed, files may have been skipped.") end end end @@ -576,8 +569,8 @@ elseif mode == "remove" or mode == "purge" then println("purging all " .. app .. " files...") end ----@diagnostic disable-next-line: undefined-field - os.sleep(2) + -- ask for confirmation + if not ask_y_n("Continue?", false) then return end local file_list = manifest.files local dependencies = manifest.depends[app] @@ -666,7 +659,7 @@ elseif mode == "remove" or mode == "purge" then end term.setTextColor(colors.green) - println("done!") + println("Done!") end term.setTextColor(colors.white) diff --git a/graphics/core.lua b/graphics/core.lua index 58b6b8c..d99ef3b 100644 --- a/graphics/core.lua +++ b/graphics/core.lua @@ -7,6 +7,8 @@ local flasher = require("graphics.flasher") local core = {} +core.version = "1.0.0" + core.flasher = flasher core.events = events diff --git a/imgen.py b/imgen.py index bd34822..63f28cf 100644 --- a/imgen.py +++ b/imgen.py @@ -23,11 +23,11 @@ def dir_size(path): return total # get the version of an application at the provided path -def get_version(path, is_comms = False): +def get_version(path, is_lib = False): ver = "" - string = "comms.version = \"" + string = ".version = \"" - if not is_comms: + if not is_lib: string = "_VERSION = \"" f = open(path, "r") @@ -49,6 +49,7 @@ def make_manifest(size): "installer" : get_version("./ccmsi.lua"), "bootloader" : get_version("./startup.lua"), "comms" : get_version("./scada-common/comms.lua", True), + "graphics" : get_version("./graphics/core.lua", True), "reactor-plc" : get_version("./reactor-plc/startup.lua"), "rtu" : get_version("./rtu/startup.lua"), "supervisor" : get_version("./supervisor/startup.lua"), diff --git a/install_manifest.json b/install_manifest.json index c75c072..62b1edc 100644 --- a/install_manifest.json +++ b/install_manifest.json @@ -1 +1 @@ -{"versions": {"installer": "v1.2", "bootloader": "0.2", "comms": "2.0.0", "reactor-plc": "v1.4.6", "rtu": "v1.3.6", "supervisor": "v0.17.7", "coordinator": "v0.16.1", "pocket": "alpha-v0.4.5"}, "files": {"system": ["initenv.lua", "startup.lua"], "common": ["scada-common/crypto.lua", "scada-common/ppm.lua", "scada-common/comms.lua", "scada-common/psil.lua", "scada-common/rsio.lua", "scada-common/constants.lua", "scada-common/mqueue.lua", "scada-common/tcd.lua", "scada-common/crash.lua", "scada-common/log.lua", "scada-common/types.lua", "scada-common/util.lua"], "graphics": ["graphics/element.lua", "graphics/events.lua", "graphics/flasher.lua", "graphics/core.lua", "graphics/elements/listbox.lua", "graphics/elements/textbox.lua", "graphics/elements/displaybox.lua", "graphics/elements/pipenet.lua", "graphics/elements/rectangle.lua", "graphics/elements/div.lua", "graphics/elements/multipane.lua", "graphics/elements/tiling.lua", "graphics/elements/colormap.lua", "graphics/elements/indicators/alight.lua", "graphics/elements/indicators/icon.lua", "graphics/elements/indicators/power.lua", "graphics/elements/indicators/rad.lua", "graphics/elements/indicators/state.lua", "graphics/elements/indicators/light.lua", "graphics/elements/indicators/vbar.lua", "graphics/elements/indicators/led.lua", "graphics/elements/indicators/coremap.lua", "graphics/elements/indicators/data.lua", "graphics/elements/indicators/ledpair.lua", "graphics/elements/indicators/hbar.lua", "graphics/elements/indicators/trilight.lua", "graphics/elements/indicators/ledrgb.lua", "graphics/elements/controls/switch_button.lua", "graphics/elements/controls/spinbox_numeric.lua", "graphics/elements/controls/hazard_button.lua", "graphics/elements/controls/push_button.lua", "graphics/elements/controls/radio_button.lua", "graphics/elements/controls/multi_button.lua", "graphics/elements/controls/tabbar.lua", "graphics/elements/controls/sidebar.lua", "graphics/elements/animations/waiting.lua"], "lockbox": ["lockbox/init.lua", "lockbox/LICENSE", "lockbox/kdf/pbkdf2.lua", "lockbox/util/bit.lua", "lockbox/util/array.lua", "lockbox/util/stream.lua", "lockbox/util/queue.lua", "lockbox/digest/sha2_224.lua", "lockbox/digest/sha1.lua", "lockbox/digest/sha2_256.lua", "lockbox/cipher/aes128.lua", "lockbox/cipher/aes256.lua", "lockbox/cipher/aes192.lua", "lockbox/cipher/mode/ofb.lua", "lockbox/cipher/mode/cbc.lua", "lockbox/cipher/mode/ctr.lua", "lockbox/cipher/mode/cfb.lua", "lockbox/mac/hmac.lua", "lockbox/padding/ansix923.lua", "lockbox/padding/pkcs7.lua", "lockbox/padding/zero.lua", "lockbox/padding/isoiec7816.lua"], "reactor-plc": ["reactor-plc/renderer.lua", "reactor-plc/threads.lua", "reactor-plc/databus.lua", "reactor-plc/plc.lua", "reactor-plc/config.lua", "reactor-plc/startup.lua", "reactor-plc/panel/front_panel.lua", "reactor-plc/panel/style.lua"], "rtu": ["rtu/renderer.lua", "rtu/threads.lua", "rtu/rtu.lua", "rtu/databus.lua", "rtu/modbus.lua", "rtu/config.lua", "rtu/startup.lua", "rtu/panel/front_panel.lua", "rtu/panel/style.lua", "rtu/dev/sps_rtu.lua", "rtu/dev/envd_rtu.lua", "rtu/dev/boilerv_rtu.lua", "rtu/dev/redstone_rtu.lua", "rtu/dev/sna_rtu.lua", "rtu/dev/imatrix_rtu.lua", "rtu/dev/turbinev_rtu.lua"], "supervisor": ["supervisor/renderer.lua", "supervisor/databus.lua", "supervisor/supervisor.lua", "supervisor/unit.lua", "supervisor/config.lua", "supervisor/startup.lua", "supervisor/unitlogic.lua", "supervisor/facility.lua", "supervisor/panel/pgi.lua", "supervisor/panel/front_panel.lua", "supervisor/panel/style.lua", "supervisor/panel/components/rtu_entry.lua", "supervisor/panel/components/pdg_entry.lua", "supervisor/session/coordinator.lua", "supervisor/session/svqtypes.lua", "supervisor/session/pocket.lua", "supervisor/session/svsessions.lua", "supervisor/session/rtu.lua", "supervisor/session/plc.lua", "supervisor/session/rsctl.lua", "supervisor/session/rtu/boilerv.lua", "supervisor/session/rtu/txnctrl.lua", "supervisor/session/rtu/unit_session.lua", "supervisor/session/rtu/turbinev.lua", "supervisor/session/rtu/envd.lua", "supervisor/session/rtu/imatrix.lua", "supervisor/session/rtu/sps.lua", "supervisor/session/rtu/qtypes.lua", "supervisor/session/rtu/sna.lua", "supervisor/session/rtu/redstone.lua"], "coordinator": ["coordinator/coordinator.lua", "coordinator/renderer.lua", "coordinator/iocontrol.lua", "coordinator/sounder.lua", "coordinator/config.lua", "coordinator/startup.lua", "coordinator/process.lua", "coordinator/ui/dialog.lua", "coordinator/ui/style.lua", "coordinator/ui/layout/main_view.lua", "coordinator/ui/layout/unit_view.lua", "coordinator/ui/components/reactor.lua", "coordinator/ui/components/processctl.lua", "coordinator/ui/components/unit_overview.lua", "coordinator/ui/components/boiler.lua", "coordinator/ui/components/unit_detail.lua", "coordinator/ui/components/imatrix.lua", "coordinator/ui/components/turbine.lua", "coordinator/session/pocket.lua", "coordinator/session/apisessions.lua"], "pocket": ["pocket/pocket.lua", "pocket/renderer.lua", "pocket/config.lua", "pocket/coreio.lua", "pocket/startup.lua", "pocket/ui/main.lua", "pocket/ui/style.lua", "pocket/ui/components/conn_waiting.lua", "pocket/ui/pages/turbine_page.lua", "pocket/ui/pages/reactor_page.lua", "pocket/ui/pages/home_page.lua", "pocket/ui/pages/unit_page.lua", "pocket/ui/pages/boiler_page.lua"]}, "depends": {"reactor-plc": ["system", "common", "graphics"], "rtu": ["system", "common", "graphics"], "supervisor": ["system", "common", "graphics"], "coordinator": ["system", "common", "graphics"], "pocket": ["system", "common", "graphics"]}, "sizes": {"manifest": 5781, "system": 1991, "common": 92736, "graphics": 144532, "lockbox": 100797, "reactor-plc": 97335, "rtu": 102240, "supervisor": 315402, "coordinator": 197991, "pocket": 37581}} \ No newline at end of file +{"versions": {"installer": "v1.3", "bootloader": "0.2", "comms": "2.0.0", "graphics": "1.0.0", "reactor-plc": "v1.4.6", "rtu": "v1.3.6", "supervisor": "v0.17.7", "coordinator": "v0.16.1", "pocket": "alpha-v0.4.5"}, "files": {"system": ["initenv.lua", "startup.lua"], "common": ["scada-common/crypto.lua", "scada-common/ppm.lua", "scada-common/comms.lua", "scada-common/psil.lua", "scada-common/rsio.lua", "scada-common/constants.lua", "scada-common/mqueue.lua", "scada-common/tcd.lua", "scada-common/crash.lua", "scada-common/log.lua", "scada-common/types.lua", "scada-common/util.lua"], "graphics": ["graphics/element.lua", "graphics/events.lua", "graphics/flasher.lua", "graphics/core.lua", "graphics/elements/listbox.lua", "graphics/elements/textbox.lua", "graphics/elements/displaybox.lua", "graphics/elements/pipenet.lua", "graphics/elements/rectangle.lua", "graphics/elements/div.lua", "graphics/elements/multipane.lua", "graphics/elements/tiling.lua", "graphics/elements/colormap.lua", "graphics/elements/indicators/alight.lua", "graphics/elements/indicators/icon.lua", "graphics/elements/indicators/power.lua", "graphics/elements/indicators/rad.lua", "graphics/elements/indicators/state.lua", "graphics/elements/indicators/light.lua", "graphics/elements/indicators/vbar.lua", "graphics/elements/indicators/led.lua", "graphics/elements/indicators/coremap.lua", "graphics/elements/indicators/data.lua", "graphics/elements/indicators/ledpair.lua", "graphics/elements/indicators/hbar.lua", "graphics/elements/indicators/trilight.lua", "graphics/elements/indicators/ledrgb.lua", "graphics/elements/controls/switch_button.lua", "graphics/elements/controls/spinbox_numeric.lua", "graphics/elements/controls/hazard_button.lua", "graphics/elements/controls/push_button.lua", "graphics/elements/controls/radio_button.lua", "graphics/elements/controls/multi_button.lua", "graphics/elements/controls/tabbar.lua", "graphics/elements/controls/sidebar.lua", "graphics/elements/animations/waiting.lua"], "lockbox": ["lockbox/init.lua", "lockbox/LICENSE", "lockbox/kdf/pbkdf2.lua", "lockbox/util/bit.lua", "lockbox/util/array.lua", "lockbox/util/stream.lua", "lockbox/util/queue.lua", "lockbox/digest/sha2_224.lua", "lockbox/digest/sha1.lua", "lockbox/digest/sha2_256.lua", "lockbox/cipher/aes128.lua", "lockbox/cipher/aes256.lua", "lockbox/cipher/aes192.lua", "lockbox/cipher/mode/ofb.lua", "lockbox/cipher/mode/cbc.lua", "lockbox/cipher/mode/ctr.lua", "lockbox/cipher/mode/cfb.lua", "lockbox/mac/hmac.lua", "lockbox/padding/ansix923.lua", "lockbox/padding/pkcs7.lua", "lockbox/padding/zero.lua", "lockbox/padding/isoiec7816.lua"], "reactor-plc": ["reactor-plc/renderer.lua", "reactor-plc/threads.lua", "reactor-plc/databus.lua", "reactor-plc/plc.lua", "reactor-plc/config.lua", "reactor-plc/startup.lua", "reactor-plc/panel/front_panel.lua", "reactor-plc/panel/style.lua"], "rtu": ["rtu/renderer.lua", "rtu/threads.lua", "rtu/rtu.lua", "rtu/databus.lua", "rtu/modbus.lua", "rtu/config.lua", "rtu/startup.lua", "rtu/panel/front_panel.lua", "rtu/panel/style.lua", "rtu/dev/sps_rtu.lua", "rtu/dev/envd_rtu.lua", "rtu/dev/boilerv_rtu.lua", "rtu/dev/redstone_rtu.lua", "rtu/dev/sna_rtu.lua", "rtu/dev/imatrix_rtu.lua", "rtu/dev/turbinev_rtu.lua"], "supervisor": ["supervisor/renderer.lua", "supervisor/databus.lua", "supervisor/supervisor.lua", "supervisor/unit.lua", "supervisor/config.lua", "supervisor/startup.lua", "supervisor/unitlogic.lua", "supervisor/facility.lua", "supervisor/panel/pgi.lua", "supervisor/panel/front_panel.lua", "supervisor/panel/style.lua", "supervisor/panel/components/rtu_entry.lua", "supervisor/panel/components/pdg_entry.lua", "supervisor/session/coordinator.lua", "supervisor/session/svqtypes.lua", "supervisor/session/pocket.lua", "supervisor/session/svsessions.lua", "supervisor/session/rtu.lua", "supervisor/session/plc.lua", "supervisor/session/rsctl.lua", "supervisor/session/rtu/boilerv.lua", "supervisor/session/rtu/txnctrl.lua", "supervisor/session/rtu/unit_session.lua", "supervisor/session/rtu/turbinev.lua", "supervisor/session/rtu/envd.lua", "supervisor/session/rtu/imatrix.lua", "supervisor/session/rtu/sps.lua", "supervisor/session/rtu/qtypes.lua", "supervisor/session/rtu/sna.lua", "supervisor/session/rtu/redstone.lua"], "coordinator": ["coordinator/coordinator.lua", "coordinator/renderer.lua", "coordinator/iocontrol.lua", "coordinator/sounder.lua", "coordinator/config.lua", "coordinator/startup.lua", "coordinator/process.lua", "coordinator/ui/dialog.lua", "coordinator/ui/style.lua", "coordinator/ui/layout/main_view.lua", "coordinator/ui/layout/unit_view.lua", "coordinator/ui/components/reactor.lua", "coordinator/ui/components/processctl.lua", "coordinator/ui/components/unit_overview.lua", "coordinator/ui/components/boiler.lua", "coordinator/ui/components/unit_detail.lua", "coordinator/ui/components/imatrix.lua", "coordinator/ui/components/turbine.lua", "coordinator/session/pocket.lua", "coordinator/session/apisessions.lua"], "pocket": ["pocket/pocket.lua", "pocket/renderer.lua", "pocket/config.lua", "pocket/coreio.lua", "pocket/startup.lua", "pocket/ui/main.lua", "pocket/ui/style.lua", "pocket/ui/components/conn_waiting.lua", "pocket/ui/pages/turbine_page.lua", "pocket/ui/pages/reactor_page.lua", "pocket/ui/pages/home_page.lua", "pocket/ui/pages/unit_page.lua", "pocket/ui/pages/boiler_page.lua"]}, "depends": {"reactor-plc": ["system", "common", "graphics"], "rtu": ["system", "common", "graphics"], "supervisor": ["system", "common", "graphics"], "coordinator": ["system", "common", "graphics"], "pocket": ["system", "common", "graphics"]}, "sizes": {"manifest": 5802, "system": 1991, "common": 92736, "graphics": 144556, "lockbox": 100797, "reactor-plc": 97335, "rtu": 102240, "supervisor": 315402, "coordinator": 197991, "pocket": 37581}} \ No newline at end of file