From 4c7b8e107a7dc4fd0cf736323b0354e40d303bc9 Mon Sep 17 00:00:00 2001 From: Thomas Stoddard Date: Fri, 23 Jan 2026 18:03:39 +0000 Subject: [PATCH] Device: RADComet: Add T1S settings --- .../neovifire3t1slinsettings.h | 2 +- .../device/tree/radcomet/radcometsettings.h | 135 ++++++++++++++++++ .../device/tree/radcomet3/radcomet3settings.h | 2 +- .../tree/radgigastar2/radgigastar2settings.h | 2 +- .../tree/radmoont1s/radmoont1ssettings.h | 2 +- 5 files changed, 139 insertions(+), 4 deletions(-) diff --git a/include/icsneo/device/tree/neovifire3t1slin/neovifire3t1slinsettings.h b/include/icsneo/device/tree/neovifire3t1slin/neovifire3t1slinsettings.h index d357415..6840eae 100644 --- a/include/icsneo/device/tree/neovifire3t1slin/neovifire3t1slinsettings.h +++ b/include/icsneo/device/tree/neovifire3t1slin/neovifire3t1slinsettings.h @@ -262,7 +262,7 @@ public: if(t1s == nullptr) return std::nullopt; - return std::make_optional((t1s->flags & ETHERNET10T1S_SETTINGS_FLAG_ENABLE_PLCA) != 0); + return std::make_optional((t1s->flags & ETHERNET10T1S_SETTINGS_FLAG_ENABLE_PLCA) != 0); } bool setT1SPLCAFor(Network net, bool enable) override { diff --git a/include/icsneo/device/tree/radcomet/radcometsettings.h b/include/icsneo/device/tree/radcomet/radcometsettings.h index 4a5f08c..848fca4 100644 --- a/include/icsneo/device/tree/radcomet/radcometsettings.h +++ b/include/icsneo/device/tree/radcomet/radcometsettings.h @@ -116,6 +116,141 @@ public: return nullptr; } } + + std::optional isT1SPLCAEnabledFor(Network net) const override { + const ETHERNET10T1S_SETTINGS* t1s = getT1SSettingsFor(net); + if(t1s == nullptr) + return std::nullopt; + + return std::make_optional((t1s->flags & ETHERNET10T1S_SETTINGS_FLAG_ENABLE_PLCA) != 0); + } + + bool setT1SPLCAFor(Network net, bool enable) override { + ETHERNET10T1S_SETTINGS* t1s = getMutableT1SSettingsFor(net); + if(t1s == nullptr) + return false; + + if(enable) + t1s->flags |= ETHERNET10T1S_SETTINGS_FLAG_ENABLE_PLCA; + else + t1s->flags &= ~ETHERNET10T1S_SETTINGS_FLAG_ENABLE_PLCA; + + return true; + } + + std::optional getT1SLocalIDFor(Network net) const override { + const ETHERNET10T1S_SETTINGS* t1s = getT1SSettingsFor(net); + if(t1s == nullptr) + return std::nullopt; + + return std::make_optional(t1s->local_id); + } + + bool setT1SLocalIDFor(Network net, uint8_t id) override { + ETHERNET10T1S_SETTINGS* t1s = getMutableT1SSettingsFor(net); + if(t1s == nullptr) + return false; + + t1s->local_id = id; + return true; + } + + std::optional getT1SMaxNodesFor(Network net) const override { + const ETHERNET10T1S_SETTINGS* t1s = getT1SSettingsFor(net); + if(t1s == nullptr) + return std::nullopt; + + return std::make_optional(t1s->max_num_nodes); + } + + bool setT1SMaxNodesFor(Network net, uint8_t nodes) override { + ETHERNET10T1S_SETTINGS* t1s = getMutableT1SSettingsFor(net); + if(t1s == nullptr) + return false; + + t1s->max_num_nodes = nodes; + return true; + } + + std::optional getT1STxOppTimerFor(Network net) const override { + const ETHERNET10T1S_SETTINGS* t1s = getT1SSettingsFor(net); + if(t1s == nullptr) + return std::nullopt; + + return std::make_optional(t1s->to_timer); + } + + bool setT1STxOppTimerFor(Network net, uint8_t timer) override { + ETHERNET10T1S_SETTINGS* t1s = getMutableT1SSettingsFor(net); + if(t1s == nullptr) + return false; + + t1s->to_timer = timer; + return true; + } + + std::optional getT1SMaxBurstFor(Network net) const override { + const ETHERNET10T1S_SETTINGS* t1s = getT1SSettingsFor(net); + if(t1s == nullptr) + return std::nullopt; + + return std::make_optional(t1s->max_burst_count); + } + + bool setT1SMaxBurstFor(Network net, uint8_t burst) override { + ETHERNET10T1S_SETTINGS* t1s = getMutableT1SSettingsFor(net); + if(t1s == nullptr) + return false; + + t1s->max_burst_count = burst; + return true; + } + + std::optional getT1SBurstTimerFor(Network net) const override { + const ETHERNET10T1S_SETTINGS* t1s = getT1SSettingsFor(net); + if(t1s == nullptr) + return std::nullopt; + + return std::make_optional(t1s->burst_timer); + } + + bool setT1SBurstTimerFor(Network net, uint8_t timer) override { + ETHERNET10T1S_SETTINGS* t1s = getMutableT1SSettingsFor(net); + if(t1s == nullptr) + return false; + + t1s->burst_timer = timer; + return true; + } + +private: + const ETHERNET10T1S_SETTINGS* getT1SSettingsFor(Network net) const { + auto cfg = getStructurePointer(); + if(cfg == nullptr) + return nullptr; + + switch(net.getNetID()) { + case Network::NetID::AE_02: return &(cfg->t1s1); + case Network::NetID::AE_03: return &(cfg->t1s2); + default: + report(APIEvent::Type::ParameterOutOfRange, APIEvent::Severity::Error); + return nullptr; + } + } + + ETHERNET10T1S_SETTINGS* getMutableT1SSettingsFor(Network net) { + auto cfg = getMutableStructurePointer(); + if(cfg == nullptr) + return nullptr; + + switch(net.getNetID()) { + case Network::NetID::AE_02: return &(cfg->t1s1); + case Network::NetID::AE_03: return &(cfg->t1s2); + default: + report(APIEvent::Type::ParameterOutOfRange, APIEvent::Severity::Error); + return nullptr; + } + } }; } diff --git a/include/icsneo/device/tree/radcomet3/radcomet3settings.h b/include/icsneo/device/tree/radcomet3/radcomet3settings.h index f5ef3dd..d2d6fb5 100644 --- a/include/icsneo/device/tree/radcomet3/radcomet3settings.h +++ b/include/icsneo/device/tree/radcomet3/radcomet3settings.h @@ -119,7 +119,7 @@ public: if(t1s == nullptr) return std::nullopt; - return std::make_optional((t1s->flags & ETHERNET10T1S_SETTINGS_FLAG_ENABLE_PLCA) != 0); + return std::make_optional((t1s->flags & ETHERNET10T1S_SETTINGS_FLAG_ENABLE_PLCA) != 0); } bool setT1SPLCAFor(Network net, bool enable) override { diff --git a/include/icsneo/device/tree/radgigastar2/radgigastar2settings.h b/include/icsneo/device/tree/radgigastar2/radgigastar2settings.h index c45ff12..8039c1a 100644 --- a/include/icsneo/device/tree/radgigastar2/radgigastar2settings.h +++ b/include/icsneo/device/tree/radgigastar2/radgigastar2settings.h @@ -254,7 +254,7 @@ namespace icsneo if(t1s == nullptr) return std::nullopt; - return std::make_optional((t1s->flags & ETHERNET10T1S_SETTINGS_FLAG_ENABLE_PLCA) != 0); + return std::make_optional((t1s->flags & ETHERNET10T1S_SETTINGS_FLAG_ENABLE_PLCA) != 0); } bool setT1SPLCAFor(Network net, bool enable) override { diff --git a/include/icsneo/device/tree/radmoont1s/radmoont1ssettings.h b/include/icsneo/device/tree/radmoont1s/radmoont1ssettings.h index 7afb90b..189d61e 100644 --- a/include/icsneo/device/tree/radmoont1s/radmoont1ssettings.h +++ b/include/icsneo/device/tree/radmoont1s/radmoont1ssettings.h @@ -53,7 +53,7 @@ public: if(t1s == nullptr) return std::nullopt; - return std::make_optional((t1s->flags & ETHERNET10T1S_SETTINGS_FLAG_ENABLE_PLCA) != 0); + return std::make_optional((t1s->flags & ETHERNET10T1S_SETTINGS_FLAG_ENABLE_PLCA) != 0); } bool setT1SPLCAFor(Network net, bool enable) override {