diff --git a/coordinator/coordinator.lua b/coordinator/coordinator.lua index c877eb6..f4c8b69 100644 --- a/coordinator/coordinator.lua +++ b/coordinator/coordinator.lua @@ -279,11 +279,12 @@ function coordinator.comms(version, nic, sv_watchdog) -- send an API establish request response ---@param packet scada_packet ---@param ack ESTABLISH_ACK - local function _send_api_establish_ack(packet, ack) + ---@param data any? + local function _send_api_establish_ack(packet, ack, data) local s_pkt = comms.scada_packet() local m_pkt = comms.mgmt_packet() - m_pkt.make(MGMT_TYPE.ESTABLISH, { ack }) + m_pkt.make(MGMT_TYPE.ESTABLISH, { ack, data }) s_pkt.make(packet.src_addr(), packet.seq_num() + 1, PROTOCOL.SCADA_MGMT, m_pkt.raw_sendable()) nic.transmit(config.PKT_Channel, config.CRD_Channel, s_pkt) @@ -493,7 +494,8 @@ function coordinator.comms(version, nic, sv_watchdog) local id = apisessions.establish_session(src_addr, firmware_v) coordinator.log_comms(util.c("API_ESTABLISH: pocket (", firmware_v, ") [@", src_addr, "] connected with session ID ", id)) - _send_api_establish_ack(packet.scada_frame, ESTABLISH_ACK.ALLOW) + local conf = iocontrol.get_db().facility.conf + _send_api_establish_ack(packet.scada_frame, ESTABLISH_ACK.ALLOW, { conf.num_units, conf.cooling }) else log.debug(util.c("API_ESTABLISH: illegal establish packet for device ", dev_type, " on pocket channel")) _send_api_establish_ack(packet.scada_frame, ESTABLISH_ACK.DENY) diff --git a/coordinator/iocontrol.lua b/coordinator/iocontrol.lua index 2bd3a95..c91e24d 100644 --- a/coordinator/iocontrol.lua +++ b/coordinator/iocontrol.lua @@ -67,6 +67,7 @@ function iocontrol.init(conf, comms, temp_scale) -- facility data structure ---@class ioctl_facility io.facility = { + conf = conf, num_units = conf.num_units, tank_mode = conf.cooling.fac_tank_mode, tank_defs = conf.cooling.fac_tank_defs, diff --git a/pocket/pocket.lua b/pocket/pocket.lua index 402bd19..0d3b8da 100644 --- a/pocket/pocket.lua +++ b/pocket/pocket.lua @@ -126,7 +126,7 @@ function pocket.comms(version, nic, sv_watchdog, api_watchdog) -- attempt coordinator API connection establishment local function _send_api_establish() - _send_crd(MGMT_TYPE.ESTABLISH, { comms.version, version, DEVICE_TYPE.PKT }) + _send_crd(MGMT_TYPE.ESTABLISH, { comms.version, version, DEVICE_TYPE.PKT, comms.api_version }) end -- keep alive ack to supervisor @@ -252,7 +252,7 @@ function pocket.comms(version, nic, sv_watchdog, api_watchdog) ---@param max integer? ---@return boolean local function _check_length(packet, length, max) - local ok = util.trinary(max == nil, packet.length == length, packet.length >= length and packet.length <= max) + local ok = util.trinary(max == nil, packet.length == length, packet.length >= length and packet.length <= (max or 0)) if not ok then local fmt = "[comms] RX_PACKET{r_chan=%d,proto=%d,type=%d}: packet length mismatch -> expect %d != actual %d" log.debug(util.sprintf(fmt, packet.scada_frame.remote_channel(), packet.scada_frame.protocol(), packet.type)) @@ -322,7 +322,7 @@ function pocket.comms(version, nic, sv_watchdog, api_watchdog) log.warning("pocket coordinator KEEP_ALIVE trip time > 750ms (" .. trip_time .. "ms)") end - log.debug("pocket coordinator TT = " .. trip_time .. "ms") + -- log.debug("pocket coordinator TT = " .. trip_time .. "ms") _send_api_keep_alive_ack(timestamp) @@ -428,7 +428,7 @@ function pocket.comms(version, nic, sv_watchdog, api_watchdog) log.warning("pocket supervisor KEEP_ALIVE trip time > 750ms (" .. trip_time .. "ms)") end - log.debug("pocket supervisor TT = " .. trip_time .. "ms") + -- log.debug("pocket supervisor TT = " .. trip_time .. "ms") _send_sv_keep_alive_ack(timestamp) diff --git a/pocket/startup.lua b/pocket/startup.lua index 8400e3b..622ee78 100644 --- a/pocket/startup.lua +++ b/pocket/startup.lua @@ -18,7 +18,7 @@ local iocontrol = require("pocket.iocontrol") local pocket = require("pocket.pocket") local renderer = require("pocket.renderer") -local POCKET_VERSION = "v0.7.4-alpha" +local POCKET_VERSION = "v0.7.5-alpha" local println = util.println local println_ts = util.println_ts