#580 reactor PLC changes for wired comms modems
This commit is contained in:
parent
04c53c7074
commit
454d166ac9
@ -79,8 +79,9 @@ local tmp_cfg = {
|
|||||||
SVR_Channel = nil, ---@type integer
|
SVR_Channel = nil, ---@type integer
|
||||||
PLC_Channel = nil, ---@type integer
|
PLC_Channel = nil, ---@type integer
|
||||||
ConnTimeout = nil, ---@type number
|
ConnTimeout = nil, ---@type number
|
||||||
|
WiredModem = false, ---@type string|false
|
||||||
TrustedRange = nil, ---@type number
|
TrustedRange = nil, ---@type number
|
||||||
AuthKey = nil, ---@type string|nil
|
AuthKey = "", ---@type string
|
||||||
LogMode = 0, ---@type LOG_MODE
|
LogMode = 0, ---@type LOG_MODE
|
||||||
LogPath = "",
|
LogPath = "",
|
||||||
LogDebug = false,
|
LogDebug = false,
|
||||||
@ -103,6 +104,7 @@ local fields = {
|
|||||||
{ "SVR_Channel", "SVR Channel", 16240 },
|
{ "SVR_Channel", "SVR Channel", 16240 },
|
||||||
{ "PLC_Channel", "PLC Channel", 16241 },
|
{ "PLC_Channel", "PLC Channel", 16241 },
|
||||||
{ "ConnTimeout", "Connection Timeout", 5 },
|
{ "ConnTimeout", "Connection Timeout", 5 },
|
||||||
|
{ "WiredModem", "Wired Modem", false },
|
||||||
{ "TrustedRange", "Trusted Range", 0 },
|
{ "TrustedRange", "Trusted Range", 0 },
|
||||||
{ "AuthKey", "Facility Auth Key" , ""},
|
{ "AuthKey", "Facility Auth Key" , ""},
|
||||||
{ "LogMode", "Log Mode", log.MODE.APPEND },
|
{ "LogMode", "Log Mode", log.MODE.APPEND },
|
||||||
|
|||||||
@ -47,6 +47,7 @@ function plc.load_config()
|
|||||||
config.SVR_Channel = settings.get("SVR_Channel")
|
config.SVR_Channel = settings.get("SVR_Channel")
|
||||||
config.PLC_Channel = settings.get("PLC_Channel")
|
config.PLC_Channel = settings.get("PLC_Channel")
|
||||||
config.ConnTimeout = settings.get("ConnTimeout")
|
config.ConnTimeout = settings.get("ConnTimeout")
|
||||||
|
config.WiredModem = settings.get("WiredModem")
|
||||||
config.TrustedRange = settings.get("TrustedRange")
|
config.TrustedRange = settings.get("TrustedRange")
|
||||||
config.AuthKey = settings.get("AuthKey")
|
config.AuthKey = settings.get("AuthKey")
|
||||||
|
|
||||||
@ -74,6 +75,7 @@ function plc.validate_config(cfg)
|
|||||||
cfv.assert_channel(cfg.PLC_Channel)
|
cfv.assert_channel(cfg.PLC_Channel)
|
||||||
cfv.assert_type_num(cfg.ConnTimeout)
|
cfv.assert_type_num(cfg.ConnTimeout)
|
||||||
cfv.assert_min(cfg.ConnTimeout, 2)
|
cfv.assert_min(cfg.ConnTimeout, 2)
|
||||||
|
cfv.assert((cfg.WiredModem == false) or (type(cfg.WiredModem) == "string"))
|
||||||
cfv.assert_type_num(cfg.TrustedRange)
|
cfv.assert_type_num(cfg.TrustedRange)
|
||||||
cfv.assert_min(cfg.TrustedRange, 0)
|
cfv.assert_min(cfg.TrustedRange, 0)
|
||||||
cfv.assert_type_str(cfg.AuthKey)
|
cfv.assert_type_str(cfg.AuthKey)
|
||||||
@ -542,7 +544,9 @@ function plc.comms(version, nic, reactor, rps, conn_watchdog)
|
|||||||
max_burn_rate = nil
|
max_burn_rate = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if nic.isWireless() then
|
||||||
comms.set_trusted_range(config.TrustedRange)
|
comms.set_trusted_range(config.TrustedRange)
|
||||||
|
end
|
||||||
|
|
||||||
-- PRIVATE FUNCTIONS --
|
-- PRIVATE FUNCTIONS --
|
||||||
|
|
||||||
|
|||||||
@ -18,7 +18,7 @@ local plc = require("reactor-plc.plc")
|
|||||||
local renderer = require("reactor-plc.renderer")
|
local renderer = require("reactor-plc.renderer")
|
||||||
local threads = require("reactor-plc.threads")
|
local threads = require("reactor-plc.threads")
|
||||||
|
|
||||||
local R_PLC_VERSION = "v1.8.20"
|
local R_PLC_VERSION = "v1.9.0"
|
||||||
|
|
||||||
local println = util.println
|
local println = util.println
|
||||||
local println_ts = util.println_ts
|
local println_ts = util.println_ts
|
||||||
@ -106,7 +106,9 @@ local function main()
|
|||||||
-- core PLC devices
|
-- core PLC devices
|
||||||
plc_dev = {
|
plc_dev = {
|
||||||
reactor = ppm.get_fission_reactor(),
|
reactor = ppm.get_fission_reactor(),
|
||||||
modem = ppm.get_wireless_modem()
|
modem_wired = type(config.WiredModem) == "string",
|
||||||
|
modem_iface = config.WiredModem,
|
||||||
|
modem = nil
|
||||||
},
|
},
|
||||||
|
|
||||||
-- system objects
|
-- system objects
|
||||||
@ -130,6 +132,11 @@ local function main()
|
|||||||
|
|
||||||
local plc_state = __shared_memory.plc_state
|
local plc_state = __shared_memory.plc_state
|
||||||
|
|
||||||
|
-- get the configured modem
|
||||||
|
if smem_dev.modem_wired then
|
||||||
|
smem_dev.modem = ppm.get_wired_modem(smem_dev.modem_iface)
|
||||||
|
else smem_dev.modem = ppm.get_wireless_modem() end
|
||||||
|
|
||||||
-- initial state evaluation
|
-- initial state evaluation
|
||||||
plc_state.no_reactor = smem_dev.reactor == nil
|
plc_state.no_reactor = smem_dev.reactor == nil
|
||||||
plc_state.no_modem = smem_dev.modem == nil
|
plc_state.no_modem = smem_dev.modem == nil
|
||||||
@ -149,10 +156,10 @@ local function main()
|
|||||||
plc_state.reactor_formed = false
|
plc_state.reactor_formed = false
|
||||||
end
|
end
|
||||||
|
|
||||||
-- modem is required if networked
|
-- comms modem is required if networked
|
||||||
if __shared_memory.networked and plc_state.no_modem then
|
if __shared_memory.networked and plc_state.no_modem then
|
||||||
println("init> wireless modem not found")
|
println("init> comms modem not found")
|
||||||
log.warning("init> no wireless modem on startup")
|
log.warning("init> no comms modem on startup")
|
||||||
|
|
||||||
-- scram reactor if present and enabled
|
-- scram reactor if present and enabled
|
||||||
if (smem_dev.reactor ~= nil) and plc_state.reactor_formed and smem_dev.reactor.getStatus() then
|
if (smem_dev.reactor ~= nil) and plc_state.reactor_formed and smem_dev.reactor.getStatus() then
|
||||||
|
|||||||
@ -145,7 +145,7 @@ function threads.thread__main(smem, init)
|
|||||||
plc_state.degraded = true
|
plc_state.degraded = true
|
||||||
elseif networked and type == "modem" then
|
elseif networked and type == "modem" then
|
||||||
---@cast device Modem
|
---@cast device Modem
|
||||||
-- we only care if this is our wireless modem
|
-- we only care if this is our comms modem
|
||||||
-- note, check init_ok first since nic will be nil if it is false
|
-- note, check init_ok first since nic will be nil if it is false
|
||||||
if plc_state.init_ok and nic.is_modem(device) then
|
if plc_state.init_ok and nic.is_modem(device) then
|
||||||
nic.disconnect()
|
nic.disconnect()
|
||||||
@ -154,7 +154,7 @@ function threads.thread__main(smem, init)
|
|||||||
log.warning("comms modem disconnected")
|
log.warning("comms modem disconnected")
|
||||||
|
|
||||||
local other_modem = ppm.get_wireless_modem()
|
local other_modem = ppm.get_wireless_modem()
|
||||||
if other_modem then
|
if other_modem and not plc_dev.modem_wired then
|
||||||
log.info("found another wireless modem, using it for comms")
|
log.info("found another wireless modem, using it for comms")
|
||||||
nic.connect(other_modem)
|
nic.connect(other_modem)
|
||||||
else
|
else
|
||||||
@ -167,7 +167,7 @@ function threads.thread__main(smem, init)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
log.warning("a modem was disconnected")
|
log.warning("a non-comms modem was disconnected")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -210,15 +210,17 @@ function threads.thread__main(smem, init)
|
|||||||
end
|
end
|
||||||
elseif networked and type == "modem" then
|
elseif networked and type == "modem" then
|
||||||
---@cast device Modem
|
---@cast device Modem
|
||||||
-- note, check init_ok first since nic will be nil if it is false
|
local is_comms_modem = util.trinary(plc_dev.modem_wired, plc_dev.modem_iface == param1, device.isWireless())
|
||||||
if device.isWireless() and not (plc_state.init_ok and nic.is_connected()) then
|
|
||||||
|
-- note, check init_ok since nic will be nil if it is false
|
||||||
|
if is_comms_modem and not (plc_state.init_ok and nic.is_connected()) then
|
||||||
-- reconnected modem
|
-- reconnected modem
|
||||||
plc_dev.modem = device
|
plc_dev.modem = device
|
||||||
plc_state.no_modem = false
|
plc_state.no_modem = false
|
||||||
|
|
||||||
if plc_state.init_ok then nic.connect(device) end
|
if plc_state.init_ok then nic.connect(device) end
|
||||||
|
|
||||||
println_ts("wireless modem reconnected.")
|
println_ts("comms modem reconnected.")
|
||||||
log.info("comms modem reconnected")
|
log.info("comms modem reconnected")
|
||||||
|
|
||||||
-- determine if we are still in a degraded state
|
-- determine if we are still in a degraded state
|
||||||
@ -226,9 +228,9 @@ function threads.thread__main(smem, init)
|
|||||||
plc_state.degraded = false
|
plc_state.degraded = false
|
||||||
end
|
end
|
||||||
elseif device.isWireless() then
|
elseif device.isWireless() then
|
||||||
log.info("unused wireless modem reconnected")
|
log.info("unused wireless modem connected")
|
||||||
else
|
else
|
||||||
log.info("wired modem reconnected")
|
log.info("non-comms wired modem connected")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -447,6 +447,19 @@ end
|
|||||||
---@return table|nil reactor function table
|
---@return table|nil reactor function table
|
||||||
function ppm.get_fission_reactor() return ppm.get_device("fissionReactorLogicAdapter") end
|
function ppm.get_fission_reactor() return ppm.get_device("fissionReactorLogicAdapter") end
|
||||||
|
|
||||||
|
-- get the named wired modem
|
||||||
|
---@nodiscard
|
||||||
|
---@param iface string CC peripheral interface
|
||||||
|
---@return Modem|nil modem function table
|
||||||
|
function ppm.get_wired_modem(iface)
|
||||||
|
local modem = nil
|
||||||
|
local device = ppm_sys.mounts[iface]
|
||||||
|
|
||||||
|
if device.type == "modem" then modem = device.dev end
|
||||||
|
|
||||||
|
return modem
|
||||||
|
end
|
||||||
|
|
||||||
-- get the wireless modem (if multiple, returns the first)<br>
|
-- get the wireless modem (if multiple, returns the first)<br>
|
||||||
-- if this is in a CraftOS emulated environment, wired modems will be used instead
|
-- if this is in a CraftOS emulated environment, wired modems will be used instead
|
||||||
---@nodiscard
|
---@nodiscard
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user