From bc6f5eca9c86a14738d94c913275390adecee58c Mon Sep 17 00:00:00 2001 From: Kyle Schwarz Date: Wed, 17 Apr 2024 14:23:11 -0400 Subject: [PATCH] Device: Conditionally retrieve component versions --- device/device.cpp | 11 +++++++---- include/icsneo/device/device.h | 2 ++ include/icsneo/device/tree/etherbadge/etherbadge.h | 2 ++ include/icsneo/device/tree/neovifire2/neovifire2.h | 4 +++- include/icsneo/device/tree/neovifire3/neovifire3.h | 2 ++ .../device/tree/neovifire3flexray/neovifire3flexray.h | 2 ++ include/icsneo/device/tree/neovired2/neovired2.h | 2 ++ include/icsneo/device/tree/plasion/neoviion.h | 2 ++ include/icsneo/device/tree/radepsilon/radepsilon.h | 2 ++ include/icsneo/device/tree/radjupiter/radjupiter.h | 2 ++ include/icsneo/device/tree/radmoon2/radmoon2zl.h | 2 ++ include/icsneo/device/tree/radmoon3/radmoon3.h | 2 ++ include/icsneo/device/tree/radmoonduo/radmoonduo.h | 2 ++ include/icsneo/device/tree/radpluto/radpluto.h | 2 ++ include/icsneo/device/tree/valuecan3/valuecan3.h | 2 ++ include/icsneo/device/tree/valuecan4/valuecan4.h | 2 ++ include/icsneo/device/tree/vividcan/vividcan.h | 2 ++ 17 files changed, 40 insertions(+), 5 deletions(-) diff --git a/device/device.cpp b/device/device.cpp index 63b010e..4dc688f 100644 --- a/device/device.cpp +++ b/device/device.cpp @@ -220,10 +220,13 @@ bool Device::open(OpenFlags flags, OpenStatusHandler handler) { // Get component versions *after* the extension "onDeviceOpen" hooks (e.g. device reflashes) - if (auto compVersions = com->getComponentVersionsSync()) - componentVersions = std::move(*compVersions); - else - report(APIEvent::Type::NoDeviceResponse, APIEvent::Severity::EventWarning); + if(supportsComponentVersions()) { + if(auto compVersions = com->getComponentVersionsSync()) + componentVersions = std::move(*compVersions); + else + // It's possible the device is on older firmware so don't return false here + report(APIEvent::Type::NoDeviceResponse, APIEvent::Severity::EventWarning); + } if(!settings->disabled) { // Since we will not fail the open if a settings read fails, diff --git a/include/icsneo/device/device.h b/include/icsneo/device/device.h index 0fdc1e5..2b37057 100644 --- a/include/icsneo/device/device.h +++ b/include/icsneo/device/device.h @@ -715,6 +715,8 @@ public: virtual bool isOnlineSupported() const { return true; } + virtual bool supportsComponentVersions() const { return false; } + protected: bool online = false; int messagePollingCallbackID = 0; diff --git a/include/icsneo/device/tree/etherbadge/etherbadge.h b/include/icsneo/device/tree/etherbadge/etherbadge.h index db45040..ed3acab 100644 --- a/include/icsneo/device/tree/etherbadge/etherbadge.h +++ b/include/icsneo/device/tree/etherbadge/etherbadge.h @@ -26,6 +26,8 @@ public: return supportedNetworks; } + bool supportsComponentVersions() const override { return true; } + protected: EtherBADGE(neodevice_t neodevice, const driver_factory_t& makeDriver) : Device(neodevice) { initialize(makeDriver); diff --git a/include/icsneo/device/tree/neovifire2/neovifire2.h b/include/icsneo/device/tree/neovifire2/neovifire2.h index e08a30c..eaaac6e 100644 --- a/include/icsneo/device/tree/neovifire2/neovifire2.h +++ b/include/icsneo/device/tree/neovifire2/neovifire2.h @@ -87,6 +87,8 @@ public: }; } + bool supportsComponentVersions() const override { return true; } + protected: NeoVIFIRE2(neodevice_t neodevice, const driver_factory_t& makeDriver) : Device(neodevice) { initialize(makeDriver); @@ -99,7 +101,7 @@ protected: } } - bool currentDriverSupportsDFU() const override { return com->driver->isEthernet(); } + bool currentDriverSupportsDFU() const override { return !com->driver->isEthernet(); } void setupPacketizer(Packetizer& packetizer) override { Device::setupPacketizer(packetizer); diff --git a/include/icsneo/device/tree/neovifire3/neovifire3.h b/include/icsneo/device/tree/neovifire3/neovifire3.h index cb00a63..9c0c702 100644 --- a/include/icsneo/device/tree/neovifire3/neovifire3.h +++ b/include/icsneo/device/tree/neovifire3/neovifire3.h @@ -50,6 +50,8 @@ public: return supportedNetworks; } + bool supportsComponentVersions() const override { return true; } + protected: NeoVIFIRE3(neodevice_t neodevice, const driver_factory_t& makeDriver) : Device(neodevice) { initialize(makeDriver); diff --git a/include/icsneo/device/tree/neovifire3flexray/neovifire3flexray.h b/include/icsneo/device/tree/neovifire3flexray/neovifire3flexray.h index e7f4a1d..d97f45a 100644 --- a/include/icsneo/device/tree/neovifire3flexray/neovifire3flexray.h +++ b/include/icsneo/device/tree/neovifire3flexray/neovifire3flexray.h @@ -52,6 +52,8 @@ public: return supportedNetworks; } + bool supportsComponentVersions() const override { return true; } + protected: NeoVIFIRE3FlexRay(neodevice_t neodevice, const driver_factory_t& makeDriver) : Device(neodevice) { initialize(makeDriver); diff --git a/include/icsneo/device/tree/neovired2/neovired2.h b/include/icsneo/device/tree/neovired2/neovired2.h index f93a744..e4ba909 100644 --- a/include/icsneo/device/tree/neovired2/neovired2.h +++ b/include/icsneo/device/tree/neovired2/neovired2.h @@ -35,6 +35,8 @@ public: return supportedNetworks; } + bool supportsComponentVersions() const override { return true; } + protected: NeoVIRED2(neodevice_t neodevice, const driver_factory_t& makeDriver) : Device(neodevice) { initialize(makeDriver); diff --git a/include/icsneo/device/tree/plasion/neoviion.h b/include/icsneo/device/tree/plasion/neoviion.h index b3896f3..b1c2ccb 100644 --- a/include/icsneo/device/tree/plasion/neoviion.h +++ b/include/icsneo/device/tree/plasion/neoviion.h @@ -15,6 +15,8 @@ public: // USB PID is 0x0901, standard driver is FTDI ICSNEO_FINDABLE_DEVICE_BY_PID(NeoVIION, DeviceType::ION, 0x0901); + bool supportsComponentVersions() const override { return true; } + private: NeoVIION(neodevice_t neodevice, const driver_factory_t& makeDriver) : Plasion(neodevice) { initialize(makeDriver); diff --git a/include/icsneo/device/tree/radepsilon/radepsilon.h b/include/icsneo/device/tree/radepsilon/radepsilon.h index b0f1454..3b51a8a 100644 --- a/include/icsneo/device/tree/radepsilon/radepsilon.h +++ b/include/icsneo/device/tree/radepsilon/radepsilon.h @@ -24,6 +24,8 @@ public: return supportedNetworks; } + bool supportsComponentVersions() const override { return true; } + protected: RADEpsilon(neodevice_t neodevice, const driver_factory_t& makeDriver) : Device(neodevice) { initialize(makeDriver); diff --git a/include/icsneo/device/tree/radjupiter/radjupiter.h b/include/icsneo/device/tree/radjupiter/radjupiter.h index 103e377..9050237 100644 --- a/include/icsneo/device/tree/radjupiter/radjupiter.h +++ b/include/icsneo/device/tree/radjupiter/radjupiter.h @@ -29,6 +29,8 @@ public: bool getEthPhyRegControlSupported() const override { return true; } + bool supportsComponentVersions() const override { return true; } + protected: RADJupiter(neodevice_t neodevice, const driver_factory_t& makeDriver) : Device(neodevice) { initialize(makeDriver); diff --git a/include/icsneo/device/tree/radmoon2/radmoon2zl.h b/include/icsneo/device/tree/radmoon2/radmoon2zl.h index 8c4ef40..c56eade 100644 --- a/include/icsneo/device/tree/radmoon2/radmoon2zl.h +++ b/include/icsneo/device/tree/radmoon2/radmoon2zl.h @@ -16,6 +16,8 @@ public: uint8_t getPhyAddrOrPort() const override { return 1; } + bool supportsComponentVersions() const override { return true; } + protected: RADMoon2ZL(neodevice_t neodevice, const driver_factory_t& makeDriver) : RADMoon2Base(neodevice) { initialize(makeDriver); diff --git a/include/icsneo/device/tree/radmoon3/radmoon3.h b/include/icsneo/device/tree/radmoon3/radmoon3.h index 225efe7..4d3e7e6 100644 --- a/include/icsneo/device/tree/radmoon3/radmoon3.h +++ b/include/icsneo/device/tree/radmoon3/radmoon3.h @@ -27,6 +27,8 @@ public: bool isOnlineSupported() const override { return false; } + bool supportsComponentVersions() const override { return true; } + protected: RADMoon3(neodevice_t neodevice, const driver_factory_t& makeDriver) : Device(neodevice) { initialize(makeDriver); diff --git a/include/icsneo/device/tree/radmoonduo/radmoonduo.h b/include/icsneo/device/tree/radmoonduo/radmoonduo.h index 73b37f1..e8f5347 100644 --- a/include/icsneo/device/tree/radmoonduo/radmoonduo.h +++ b/include/icsneo/device/tree/radmoonduo/radmoonduo.h @@ -25,6 +25,8 @@ public: bool getEthPhyRegControlSupported() const override { return true; } + bool supportsComponentVersions() const override { return true; } + protected: RADMoonDuo(neodevice_t neodevice, const driver_factory_t& makeDriver) : Device(neodevice) { initialize(makeDriver); diff --git a/include/icsneo/device/tree/radpluto/radpluto.h b/include/icsneo/device/tree/radpluto/radpluto.h index 2ca9339..c7f4190 100644 --- a/include/icsneo/device/tree/radpluto/radpluto.h +++ b/include/icsneo/device/tree/radpluto/radpluto.h @@ -34,6 +34,8 @@ public: bool getEthPhyRegControlSupported() const override { return true; } + bool supportsComponentVersions() const override { return true; } + protected: RADPluto(neodevice_t neodevice, const driver_factory_t& makeDriver) : Device(neodevice) { initialize(makeDriver); diff --git a/include/icsneo/device/tree/valuecan3/valuecan3.h b/include/icsneo/device/tree/valuecan3/valuecan3.h index e78e383..d534041 100644 --- a/include/icsneo/device/tree/valuecan3/valuecan3.h +++ b/include/icsneo/device/tree/valuecan3/valuecan3.h @@ -22,6 +22,8 @@ public: return supportedNetworks; } + bool supportsComponentVersions() const override { return true; } + private: ValueCAN3(neodevice_t neodevice, const driver_factory_t& makeDriver) : Device(neodevice) { initialize(makeDriver); diff --git a/include/icsneo/device/tree/valuecan4/valuecan4.h b/include/icsneo/device/tree/valuecan4/valuecan4.h index fd4517b..8addc3f 100644 --- a/include/icsneo/device/tree/valuecan4/valuecan4.h +++ b/include/icsneo/device/tree/valuecan4/valuecan4.h @@ -12,6 +12,8 @@ class ValueCAN4 : public Device { public: // All ValueCAN 4 devices share a USB PID of 0x1101 + bool supportsComponentVersions() const override { return true; } + protected: using Device::Device; diff --git a/include/icsneo/device/tree/vividcan/vividcan.h b/include/icsneo/device/tree/vividcan/vividcan.h index fd7204f..aedeefc 100644 --- a/include/icsneo/device/tree/vividcan/vividcan.h +++ b/include/icsneo/device/tree/vividcan/vividcan.h @@ -29,6 +29,8 @@ public: bool isOnlineSupported() const override { return false; } + bool supportsComponentVersions() const override { return true; } + protected: VividCAN(neodevice_t neodevice, const driver_factory_t& makeDriver) : Device(neodevice) { initialize(makeDriver);