From 99742c621a9fa9c76b690fead8d0b4f502e7979c Mon Sep 17 00:00:00 2001 From: Mikayla Fischler Date: Sat, 15 Nov 2025 17:23:36 -0500 Subject: [PATCH] #647 updated reactor PLC status indicator to also reflect coroutine health --- reactor-plc/databus.lua | 39 ++++++++++++++++++++++++------- reactor-plc/panel/front_panel.lua | 4 ++-- reactor-plc/startup.lua | 2 +- 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/reactor-plc/databus.lua b/reactor-plc/databus.lua index 9975dac..ffeb516 100644 --- a/reactor-plc/databus.lua +++ b/reactor-plc/databus.lua @@ -11,11 +11,27 @@ local databus = {} -- databus PSIL databus.ps = psil.create() -local dbus_iface = { +local _dbus = { rps_scram = function () log.debug("DBUS: unset rps_scram() called") end, - rps_reset = function () log.debug("DBUS: unset rps_reset() called") end + rps_reset = function () log.debug("DBUS: unset rps_reset() called") end, + + degraded = false, + coroutines = {} } +-- evaluate and publish system health status +local function eval_status() + local ok = _dbus.degraded + + if ok then + for _, v in pairs(_dbus.coroutines) do + ok = ok and v + end + end + + databus.ps.publish("status", ok) +end + -- call to toggle heartbeat signal function databus.heartbeat() databus.ps.toggle("heartbeat") end @@ -23,15 +39,15 @@ function databus.heartbeat() databus.ps.toggle("heartbeat") end ---@param scram function reactor SCRAM function ---@param reset function RPS reset function function databus.link_rps(scram, reset) - dbus_iface.rps_scram = scram - dbus_iface.rps_reset = reset + _dbus.rps_scram = scram + _dbus.rps_reset = reset end -- transmit a command to the RPS to SCRAM -function databus.rps_scram() dbus_iface.rps_scram() end +function databus.rps_scram() _dbus.rps_scram() end -- transmit a command to the RPS to reset -function databus.rps_reset() dbus_iface.rps_reset() end +function databus.rps_reset() _dbus.rps_reset() end -- transmit firmware versions ---@param plc_v string PLC version @@ -50,17 +66,24 @@ end -- transmit hardware status ---@param plc_state plc_state function databus.tx_hw_status(plc_state) - databus.ps.publish("degraded", plc_state.degraded) databus.ps.publish("reactor_dev_state", util.trinary(plc_state.no_reactor, 1, util.trinary(plc_state.reactor_formed, 3, 2))) databus.ps.publish("has_wd_modem", plc_state.wd_modem) databus.ps.publish("has_wl_modem", plc_state.wl_modem) + + _dbus.degraded = plc_state.degraded + eval_status() end -- transmit thread (routine) statuses ---@param thread string thread name ---@param ok boolean thread state function databus.tx_rt_status(thread, ok) - databus.ps.publish(util.c("routine__", thread), ok) + local name = util.c("routine__", thread) + + databus.ps.publish(name, ok) + + _dbus.coroutines[name] = ok + eval_status() end -- transmit supervisor link state diff --git a/reactor-plc/panel/front_panel.lua b/reactor-plc/panel/front_panel.lua index 95004d2..edb987e 100644 --- a/reactor-plc/panel/front_panel.lua +++ b/reactor-plc/panel/front_panel.lua @@ -50,11 +50,11 @@ local function init(panel, config) local system = Div{parent=panel,width=14,height=18,x=2,y=3} - local degraded = LED{parent=system,label="STATUS",colors=cpair(colors.red,colors.green)} + local sys_status = LED{parent=system,label="STATUS",colors=cpair(colors.red,colors.green)} local heartbeat = LED{parent=system,label="HEARTBEAT",colors=ind_grn} system.line_break() - degraded.register(databus.ps, "degraded", degraded.update) + sys_status.register(databus.ps, "status", sys_status.update) heartbeat.register(databus.ps, "heartbeat", heartbeat.update) local reactor = LEDPair{parent=system,label="REACTOR",off=colors.red,c1=colors.yellow,c2=colors.green} diff --git a/reactor-plc/startup.lua b/reactor-plc/startup.lua index 324cb68..5e51636 100644 --- a/reactor-plc/startup.lua +++ b/reactor-plc/startup.lua @@ -19,7 +19,7 @@ local plc = require("reactor-plc.plc") local renderer = require("reactor-plc.renderer") local threads = require("reactor-plc.threads") -local R_PLC_VERSION = "v1.10.0" +local R_PLC_VERSION = "v1.10.2" local println = util.println local println_ts = util.println_ts