mirror of
https://github.com/intrepidcs/libicsneo.git
synced 2026-08-05 01:18:36 +02:00
Device: Add bootloader information & getChipVersions()
This commit is contained in:
committed by
Kyle Schwarz
parent
99a2ca4f0d
commit
0bd733bc5d
@@ -24,6 +24,88 @@ public:
|
||||
bool supportsTC10() const override { return true; }
|
||||
bool supportsGPTP() const override { return true; }
|
||||
|
||||
ProductID getProductID() const override {
|
||||
return ProductID::RADGigastar;
|
||||
}
|
||||
|
||||
const std::vector<ChipInfo>& getChipInfo() const override {
|
||||
static std::vector<ChipInfo> chips = {
|
||||
{ChipID::RADGigastar_ZYNQ, true, "ZCHIP", "RADGigastar2_T1S_LIN_SW_bin", 1, FirmwareType::Zip},
|
||||
{ChipID::RADGigastar_FFG_ZYNQ, false, "ZCHIP", "RADGigastar_FFG_SW_bin", 1, FirmwareType::Zip},
|
||||
{ChipID::RADGigastar_USBZ_ZYNQ, true, "USB ZCHIP", "RADGigastar_USBz_SW_bin", 2, FirmwareType::Zip},
|
||||
{ChipID::RADGigastar_USBZ_Z7010_ZYNQ, false, "USB ZCHIP", "RADGigastar_USBz_Z7010_SW_bin", 2, FirmwareType::Zip},
|
||||
{ChipID::RADGigastar_USBZ_Z7007S_ZYNQ, false, "USB ZCHIP", "RADGigastar_USBz_Z7007s_SW_bin", 2, FirmwareType::Zip},
|
||||
};
|
||||
return chips;
|
||||
}
|
||||
|
||||
BootloaderPipeline getBootloader() override {
|
||||
if(supportsComponentVersions()) {
|
||||
auto chipVersions = getChipVersions();
|
||||
auto mainVersion = std::find_if(chipVersions.begin(), chipVersions.end(), [](const auto& ver) { return ver.name == "ZCHIP"; });
|
||||
if(mainVersion != chipVersions.end()) {
|
||||
static constexpr uint8_t NewBootloaderMajor = 0;
|
||||
static constexpr uint8_t NewBootloaderMinor = 0;
|
||||
|
||||
if(
|
||||
mainVersion->major > NewBootloaderMajor ||
|
||||
(mainVersion->major == NewBootloaderMajor && mainVersion->minor > NewBootloaderMinor)
|
||||
) {
|
||||
BootloaderPipeline pipeline;
|
||||
for(const auto& version : chipVersions) {
|
||||
pipeline.add<FlashPhase>(version.id, BootloaderCommunication::RADMultiChip);
|
||||
}
|
||||
pipeline.add<ReconnectPhase>();
|
||||
pipeline.add<WaitPhase>(std::chrono::milliseconds(3000));
|
||||
return pipeline;
|
||||
}
|
||||
}
|
||||
}
|
||||
// If we've reached this point, then we use the legacy flashing
|
||||
if(com->driver->isEthernet()) {
|
||||
return BootloaderPipeline()
|
||||
.add<FlashPhase>(ChipID::RADGigastar_ZYNQ, BootloaderCommunication::RAD)
|
||||
.add<ReconnectPhase>()
|
||||
.add<WaitPhase>(std::chrono::milliseconds(3000));
|
||||
}
|
||||
return BootloaderPipeline()
|
||||
.add<FlashPhase>(ChipID::RADGigastar_USBZ_ZYNQ, BootloaderCommunication::RAD)
|
||||
.add<ReconnectPhase>()
|
||||
.add<WaitPhase>(std::chrono::milliseconds(3000));
|
||||
}
|
||||
|
||||
std::vector<VersionReport> getChipVersions(bool refreshComponents = true) override {
|
||||
if(refreshComponents) {
|
||||
refreshComponentVersions();
|
||||
}
|
||||
if(supportsComponentVersions()) {
|
||||
return Device::getChipVersions(false);
|
||||
}
|
||||
static constexpr size_t MainPeriphIndex = 1;
|
||||
static constexpr size_t USBPeriphIndex = 2;
|
||||
|
||||
std::vector<VersionReport> chipVersions;
|
||||
auto& appVersions = getVersions();
|
||||
|
||||
if(appVersions.size() < 3 && !appVersions.empty()) {
|
||||
if(appVersions[0]) {
|
||||
chipVersions.push_back({ChipID::RADGigastar_ZYNQ, "ZCHIP", appVersions[0]->major, appVersions[0]->minor, 0, 0});
|
||||
}
|
||||
} else {
|
||||
if(MainPeriphIndex < appVersions.size()) {
|
||||
if(appVersions[MainPeriphIndex]) {
|
||||
chipVersions.push_back({ChipID::RADGigastar_ZYNQ, "ZCHIP", appVersions[MainPeriphIndex]->major, appVersions[MainPeriphIndex]->minor, 0, 0});
|
||||
}
|
||||
}
|
||||
if(USBPeriphIndex < appVersions.size()) {
|
||||
if(appVersions[USBPeriphIndex]) {
|
||||
chipVersions.push_back({ChipID::RADGigastar_USBZ_ZYNQ, "USB ZCHIP", appVersions[USBPeriphIndex]->major, appVersions[USBPeriphIndex]->minor, 0, 0});
|
||||
}
|
||||
}
|
||||
}
|
||||
return chipVersions;
|
||||
}
|
||||
|
||||
protected:
|
||||
RADGigastar(neodevice_t neodevice, const driver_factory_t& makeDriver) : Device(neodevice) {
|
||||
initialize<RADGigastarSettings, Disk::ExtExtractorDiskReadDriver, Disk::NeoMemoryDiskDriver>(makeDriver);
|
||||
|
||||
Reference in New Issue
Block a user