From 1b00c6a05be08a60db8e543a0a7da0ebc2ad5b7e Mon Sep 17 00:00:00 2001 From: Yasser Yassine Date: Thu, 30 Oct 2025 18:37:12 +0000 Subject: [PATCH] Gigastar(2): Fix bootloaders steps --- include/icsneo/device/bootloaderpipeline.h | 13 ++++++++++++- .../icsneo/device/tree/radgigastar/radgigastar.h | 13 +++++++++++++ .../icsneo/device/tree/radgigastar2/radgigastar2.h | 13 +++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/include/icsneo/device/bootloaderpipeline.h b/include/icsneo/device/bootloaderpipeline.h index 71476e4..5ed5326 100644 --- a/include/icsneo/device/bootloaderpipeline.h +++ b/include/icsneo/device/bootloaderpipeline.h @@ -28,7 +28,8 @@ struct BootloaderPhase { Finalize, Reconnect, EnterBootloader, - Wait + Wait, + EnterApplication }; virtual Type getType() const = 0; @@ -70,6 +71,16 @@ struct EnterBootloaderPhase : public BootloaderPhase { } }; +struct EnterApplicationPhase : public BootloaderPhase { + Type getType() const override { + return Type::EnterApplication; + } + + ChipID chip; + + EnterApplicationPhase(ChipID chip) : chip(chip) {} +}; + struct FlashPhase : public BootloaderPhase { Type getType() const override { return Type::Flash; diff --git a/include/icsneo/device/tree/radgigastar/radgigastar.h b/include/icsneo/device/tree/radgigastar/radgigastar.h index 39c656d..06442b8 100644 --- a/include/icsneo/device/tree/radgigastar/radgigastar.h +++ b/include/icsneo/device/tree/radgigastar/radgigastar.h @@ -67,10 +67,23 @@ public: } } if(useNewBootloader) { + auto mainChip = std::find_if(chipVersions.begin(), chipVersions.end(), [](const auto& chip) { return chip.name == "ZCHIP"; }); + auto usbChip = std::find_if(chipVersions.begin(), chipVersions.end(), [](const auto& chip) { return chip.name == "USB ZCHIP"; }); + + ChipID mainChipID; + if(mainChip != chipVersions.end()) { + mainChipID = mainChip->id; + } else if(usbChip != chipVersions.end()) { + mainChipID = usbChip->id; + } else { + return {}; + } + BootloaderPipeline pipeline; for(const auto& version : chipVersions) { pipeline.add(version.id, BootloaderCommunication::RADMultiChip); } + pipeline.add(mainChipID); pipeline.add(); pipeline.add(std::chrono::milliseconds(3000)); return pipeline; diff --git a/include/icsneo/device/tree/radgigastar2/radgigastar2.h b/include/icsneo/device/tree/radgigastar2/radgigastar2.h index 79d74f9..4e22e20 100644 --- a/include/icsneo/device/tree/radgigastar2/radgigastar2.h +++ b/include/icsneo/device/tree/radgigastar2/radgigastar2.h @@ -146,10 +146,23 @@ public: BootloaderPipeline getBootloader() override { auto chipVersions = getChipVersions(); + auto mainChip = std::find_if(chipVersions.begin(), chipVersions.end(), [](const auto& chip) { return chip.name == "ZCHIP"; }); + auto usbChip = std::find_if(chipVersions.begin(), chipVersions.end(), [](const auto& chip) { return chip.name == "USB ZCHIP"; }); + + ChipID mainChipID; + if(mainChip != chipVersions.end()) { + mainChipID = mainChip->id; + } else if(usbChip != chipVersions.end()) { + mainChipID = usbChip->id; + } else { + return {}; + } + BootloaderPipeline pipeline; for(const auto& version : chipVersions) { pipeline.add(version.id, BootloaderCommunication::RADMultiChip); } + pipeline.add(mainChipID); pipeline.add(); pipeline.add(std::chrono::milliseconds(3000)); return pipeline;