diff --git a/bindings/python/icsneopy/device/chipid.cpp b/bindings/python/icsneopy/device/chipid.cpp index cee1db5..7df896c 100644 --- a/bindings/python/icsneopy/device/chipid.cpp +++ b/bindings/python/icsneopy/device/chipid.cpp @@ -111,7 +111,7 @@ void init_chipid(pybind11::module_& m) { .value("RAD_GALAXY_2_ZMPCHIP_ID", ChipID::RAD_GALAXY_2_ZMPCHIP_ID) .value("NewDevice59_MCHIP", ChipID::NewDevice59_MCHIP) .value("RADMoon2_Z7010_ZYNQ", ChipID::RADMoon2_Z7010_ZYNQ) - .value("neoVIFIRE2_CORE_SG4", ChipID::neoVIFIRE2_CORE_SG4) + .value("neoVIFIRE2_Core_SG4", ChipID::neoVIFIRE2_Core_SG4) .value("RADBMS_MCHIP", ChipID::RADBMS_MCHIP) .value("RADMoon2_ZL_MCHIP", ChipID::RADMoon2_ZL_MCHIP) .value("RADGigastar_USBZ_Z7010_ZYNQ", ChipID::RADGigastar_USBZ_Z7010_ZYNQ) diff --git a/include/icsneo/device/chipid.h b/include/icsneo/device/chipid.h index 19ab7e3..dd6cce1 100644 --- a/include/icsneo/device/chipid.h +++ b/include/icsneo/device/chipid.h @@ -110,7 +110,7 @@ enum class ChipID : uint8_t { RAD_GALAXY_2_ZMPCHIP_ID = 102, NewDevice59_MCHIP = 103, RADMoon2_Z7010_ZYNQ = 104, - neoVIFIRE2_CORE_SG4 = 105, + neoVIFIRE2_Core_SG4 = 105, RADBMS_MCHIP = 106, RADMoon2_ZL_MCHIP = 107, RADGigastar_USBZ_Z7010_ZYNQ = 108, diff --git a/include/icsneo/device/device.h b/include/icsneo/device/device.h index 2d5a000..ac5ad33 100644 --- a/include/icsneo/device/device.h +++ b/include/icsneo/device/device.h @@ -162,6 +162,14 @@ public: bool hasBootloader() { return !!getBootloader(); } + virtual bool supportsSwVersionValidate() const { + return true; + } + + void setBootloaderVersion(const HardwareInfo::Version& version) { + bootloaderVersion = version; + } + static std::string SerialNumToString(uint32_t serial); static uint32_t SerialStringToNum(const std::string& serial); static bool SerialStringIsNumeric(const std::string& serial); @@ -982,6 +990,7 @@ protected: LEDState ledState; void updateLEDState(); + std::optional bootloaderVersion = std::nullopt; private: neodevice_t data; diff --git a/include/icsneo/device/tree/neovifire2/neovifire2.h b/include/icsneo/device/tree/neovifire2/neovifire2.h index 6603d43..404abba 100644 --- a/include/icsneo/device/tree/neovifire2/neovifire2.h +++ b/include/icsneo/device/tree/neovifire2/neovifire2.h @@ -98,13 +98,15 @@ public: } CoreChipVariant getCoreChipVariant() { - const auto& hardwareInfo = getHardwareInfo(std::chrono::milliseconds(1000)); - if(!hardwareInfo) { - chipVariant = CoreChipVariant::Invalid; - return chipVariant; + if(!bootloaderVersion.has_value()) { + const auto& hardwareInfo = getHardwareInfo(std::chrono::milliseconds(1000)); + if(!hardwareInfo) { + chipVariant = CoreChipVariant::Invalid; + return chipVariant; + } + setBootloaderVersion(hardwareInfo->bootloaderVersion); } - const auto& bootloaderVersion = hardwareInfo->bootloaderVersion; - if(bootloaderVersion.major >= CORE_SG4_BL_MAJOR_VERSION_CUTOFF) { + if(bootloaderVersion->major >= CORE_SG4_BL_MAJOR_VERSION_CUTOFF) { chipVariant = CoreChipVariant::Core_SG4; } else { chipVariant = CoreChipVariant::Core; @@ -122,7 +124,7 @@ public: static std::vector chipsSG4 = { {ChipID::neoVIFIRE2_MCHIP, true, "MCHIP", "fire2_mchip_ief", 0, FirmwareType::IEF}, {ChipID::neoVIFIRE2_ZYNQ, true, "ZCHIP", "fire2_zchip_ief", 1, FirmwareType::IEF}, - {ChipID::neoVIFIRE2_CORE_SG4, true, "Core", "fire2_core_sg4", 2, FirmwareType::IEF} + {ChipID::neoVIFIRE2_Core_SG4, true, "Core", "fire2_core_sg4", 2, FirmwareType::IEF} }; if(chipVariant == CoreChipVariant::Core_SG4) { @@ -137,7 +139,7 @@ public: pipeline.add() .add(ChipID::neoVIFIRE2_MCHIP, BootloaderCommunication::RED); if(chipVariant == CoreChipVariant::Core_SG4) { - pipeline.add(ChipID::neoVIFIRE2_CORE_SG4, BootloaderCommunication::REDCore, false, false); + pipeline.add(ChipID::neoVIFIRE2_Core_SG4, BootloaderCommunication::REDCore, false, false); } else { pipeline.add(ChipID::neoVIFIRE2_Core, BootloaderCommunication::REDCore, false, false); } @@ -147,6 +149,10 @@ public: return pipeline; } + bool supportsSwVersionValidate() const override { + return bootloaderVersion.has_value() && (bootloaderVersion->major > 4 || (bootloaderVersion->major == 4 && bootloaderVersion->minor >= 3)); + } + std::vector getChipVersions(bool refreshComponents = true) override { if(chipVariant == CoreChipVariant::Invalid) { getCoreChipVariant();