Add LSFTCAN and SWCAN support

This commit is contained in:
Paul Hollinsky
2019-01-22 13:14:28 -05:00
parent c313801a21
commit ae78122cbe
10 changed files with 107 additions and 14 deletions
+20
View File
@@ -370,6 +370,26 @@ public:
return static_cast<CANFD_SETTINGS*>((void*)(settings.data() + (offset - settingsInDeviceRAM.data())));
}
virtual const CAN_SETTINGS* getLSFTCANSettingsFor(Network net) const { (void)net; return nullptr; }
CAN_SETTINGS* getMutableLSFTCANSettingsFor(Network net) {
if(disabled || readonly)
return nullptr;
const uint8_t* offset = (const uint8_t*)getLSFTCANSettingsFor(net);
if(offset == nullptr)
return nullptr;
return static_cast<CAN_SETTINGS*>((void*)(settings.data() + (offset - settingsInDeviceRAM.data())));
}
virtual const SWCAN_SETTINGS* getSWCANSettingsFor(Network net) const { (void)net; return nullptr; }
SWCAN_SETTINGS* getMutableSWCANSettingsFor(Network net) {
if(disabled || readonly)
return nullptr;
const uint8_t* offset = (const uint8_t*)getSWCANSettingsFor(net);
if(offset == nullptr)
return nullptr;
return static_cast<SWCAN_SETTINGS*>((void*)(settings.data() + (offset - settingsInDeviceRAM.data())));
}
const void* getRawStructurePointer() const { return settingsInDeviceRAM.data(); }
void* getMutableRawStructurePointer() { return settings.data(); }
template<typename T> const T* getStructurePointer() const { return static_cast<const T*>(getRawStructurePointer()); }
@@ -27,14 +27,10 @@ public:
Network::NetID::MSCAN,
Network::NetID::HSCAN2,
Network::NetID::HSCAN3,
Network::NetID::HSCAN4,
Network::NetID::HSCAN5,
Network::NetID::LSFTCAN,
Network::NetID::LSFTCAN2,
Network::NetID::SWCAN,
Network::NetID::SWCAN2,
Network::NetID::LIN,
Network::NetID::LIN2,
@@ -113,6 +113,20 @@ public:
return &(cfg->can3);
case Network::NetID::HSCAN3:
return &(cfg->can4);
case Network::NetID::LSFTCAN:
return &(cfg->lsftcan);
default:
return nullptr;
}
}
const CAN_SETTINGS* getLSFTCANSettingsFor(Network net) const override { return getCANSettingsFor(net); }
const SWCAN_SETTINGS* getSWCANSettingsFor(Network net) const override {
auto cfg = getStructurePointer<neovifire_settings_t>();
if(cfg == nullptr)
return nullptr;
switch(net.getNetID()) {
case Network::NetID::SWCAN:
return &(cfg->swcan);
default:
return nullptr;
}
@@ -135,6 +135,10 @@ public:
return &(cfg->can7);
case Network::NetID::HSCAN7:
return &(cfg->can8);
case Network::NetID::LSFTCAN:
return &(cfg->lsftcan1);
case Network::NetID::LSFTCAN2:
return &(cfg->lsftcan2);
default:
return nullptr;
}
@@ -164,6 +168,20 @@ public:
return nullptr;
}
}
const CAN_SETTINGS* getLSFTCANSettingsFor(Network net) const override { return getCANSettingsFor(net); }
const SWCAN_SETTINGS* getSWCANSettingsFor(Network net) const override {
auto cfg = getStructurePointer<neovifire2_settings_t>();
if(cfg == nullptr)
return nullptr;
switch(net.getNetID()) {
case Network::NetID::SWCAN:
return &(cfg->swcan1);
case Network::NetID::SWCAN2:
return &(cfg->swcan2);
default:
return nullptr;
}
}
};
}