mirror of
https://github.com/intrepidcs/libicsneo.git
synced 2026-08-05 09:28:40 +02:00
Support software controllable termination
This commit is contained in:
@@ -191,6 +191,31 @@ public:
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
virtual std::vector<TerminationGroup> getTerminationGroups() const override {
|
||||
return {
|
||||
{
|
||||
Network(Network::NetID::HSCAN),
|
||||
Network(Network::NetID::HSCAN3),
|
||||
Network(Network::NetID::HSCAN5),
|
||||
Network(Network::NetID::HSCAN7)
|
||||
},
|
||||
{
|
||||
Network(Network::NetID::MSCAN),
|
||||
Network(Network::NetID::HSCAN2),
|
||||
Network(Network::NetID::HSCAN4),
|
||||
Network(Network::NetID::HSCAN6)
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
protected:
|
||||
const uint64_t* getTerminationEnables() const override {
|
||||
auto cfg = getStructurePointer<neovifire2_settings_t>();
|
||||
if(cfg == nullptr)
|
||||
return nullptr;
|
||||
return &cfg->termination_enables;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -152,6 +152,31 @@ public:
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
virtual std::vector<TerminationGroup> getTerminationGroups() const override {
|
||||
return {
|
||||
{
|
||||
Network(Network::NetID::HSCAN),
|
||||
Network(Network::NetID::HSCAN3),
|
||||
Network(Network::NetID::HSCAN5),
|
||||
Network(Network::NetID::HSCAN7)
|
||||
},
|
||||
{
|
||||
Network(Network::NetID::MSCAN),
|
||||
Network(Network::NetID::HSCAN2),
|
||||
Network(Network::NetID::HSCAN4),
|
||||
Network(Network::NetID::HSCAN6)
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
protected:
|
||||
const uint64_t* getTerminationEnables() const override {
|
||||
auto cfg = getStructurePointer<radgigalog_settings_t>();
|
||||
if(cfg == nullptr)
|
||||
return nullptr;
|
||||
return &cfg->termination_enables;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -133,6 +133,29 @@ public:
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
virtual std::vector<TerminationGroup> getTerminationGroups() const override {
|
||||
return {
|
||||
{
|
||||
Network(Network::NetID::HSCAN),
|
||||
Network(Network::NetID::HSCAN2),
|
||||
Network(Network::NetID::HSCAN3),
|
||||
Network(Network::NetID::HSCAN4)
|
||||
},
|
||||
{
|
||||
Network(Network::NetID::MSCAN),
|
||||
Network(Network::NetID::HSCAN5)
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
protected:
|
||||
const uint64_t* getTerminationEnables() const override {
|
||||
auto cfg = getStructurePointer<radgigastar_settings_t>();
|
||||
if(cfg == nullptr)
|
||||
return nullptr;
|
||||
return &cfg->termination_enables;
|
||||
}
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
|
||||
@@ -37,6 +37,21 @@ public:
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
virtual std::vector<TerminationGroup> getTerminationGroups() const override {
|
||||
return {
|
||||
{ Network(Network::NetID::HSCAN) },
|
||||
{ Network(Network::NetID::HSCAN2) }
|
||||
};
|
||||
}
|
||||
|
||||
protected:
|
||||
const uint64_t* getTerminationEnables() const override {
|
||||
auto cfg = getStructurePointer<valuecan4_4_2el_settings_t>();
|
||||
if(cfg == nullptr)
|
||||
return nullptr;
|
||||
return &cfg->termination_enables;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -36,6 +36,21 @@ public:
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
virtual std::vector<TerminationGroup> getTerminationGroups() const override {
|
||||
return {
|
||||
{ Network(Network::NetID::HSCAN) },
|
||||
{ Network(Network::NetID::HSCAN2) }
|
||||
};
|
||||
}
|
||||
|
||||
protected:
|
||||
const uint64_t* getTerminationEnables() const override {
|
||||
auto cfg = getStructurePointer<valuecan4_1_2_settings_t>();
|
||||
if(cfg == nullptr)
|
||||
return nullptr;
|
||||
return &cfg->termination_enables;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -45,6 +45,27 @@ public:
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
virtual std::vector<TerminationGroup> getTerminationGroups() const override {
|
||||
return {
|
||||
{
|
||||
Network(Network::NetID::HSCAN),
|
||||
Network(Network::NetID::HSCAN3)
|
||||
},
|
||||
{
|
||||
Network(Network::NetID::HSCAN2),
|
||||
Network(Network::NetID::HSCAN4)
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
protected:
|
||||
const uint64_t* getTerminationEnables() const override {
|
||||
auto cfg = getStructurePointer<valuecan4_4_2el_settings_t>();
|
||||
if(cfg == nullptr)
|
||||
return nullptr;
|
||||
return &cfg->termination_enables;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -37,6 +37,21 @@ public:
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
virtual std::vector<TerminationGroup> getTerminationGroups() const override {
|
||||
return {
|
||||
{ Network(Network::NetID::HSCAN) },
|
||||
{ Network(Network::NetID::HSCAN2) }
|
||||
};
|
||||
}
|
||||
|
||||
protected:
|
||||
const uint64_t* getTerminationEnables() const override {
|
||||
auto cfg = getStructurePointer<valuecan4_industrial_settings_t>();
|
||||
if(cfg == nullptr)
|
||||
return nullptr;
|
||||
return &cfg->termination_enables;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -82,6 +82,55 @@ public:
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
virtual std::vector<TerminationGroup> getTerminationGroups() const override {
|
||||
return {
|
||||
{ Network(Network::NetID::HSCAN) }
|
||||
};
|
||||
}
|
||||
|
||||
bool refresh(bool ignoreChecksum = false) override {
|
||||
// Because VividCAN uses a nonstandard 16-bit termination_enables
|
||||
// we need to keep the standard 64-bit values in memory and update
|
||||
// the structure when applying
|
||||
if(!IDeviceSettings::refresh(ignoreChecksum))
|
||||
return false;
|
||||
auto cfg = getStructurePointer<vividcan_settings_t>();
|
||||
if(cfg == nullptr)
|
||||
return false;
|
||||
activeTerminationEnables = queuedTerminationEnables = cfg->termination_enables;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool apply(bool permanent = true) override {
|
||||
auto cfg = getMutableStructurePointer<vividcan_settings_t>();
|
||||
if(cfg)
|
||||
cfg->termination_enables = uint16_t(queuedTerminationEnables & 0xFFFF);
|
||||
|
||||
const bool success = IDeviceSettings::apply(permanent);
|
||||
if(success)
|
||||
activeTerminationEnables = cfg->termination_enables;
|
||||
return success;
|
||||
}
|
||||
|
||||
protected:
|
||||
const uint64_t* getTerminationEnables() const override {
|
||||
// Check the structure pointer even though we're not using it so
|
||||
// all of the other checks that go along with it are performed
|
||||
if(getStructurePointer<vividcan_settings_t>() == nullptr)
|
||||
return nullptr;
|
||||
return &activeTerminationEnables;
|
||||
}
|
||||
|
||||
uint64_t* getMutableTerminationEnables() override {
|
||||
if(getMutableStructurePointer<vividcan_settings_t>() == nullptr)
|
||||
return nullptr;
|
||||
return &queuedTerminationEnables;
|
||||
}
|
||||
|
||||
private:
|
||||
uint64_t queuedTerminationEnables = 0;
|
||||
uint64_t activeTerminationEnables = 0;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user