Compare commits

...

2 Commits

Author SHA1 Message Date
Yasser Yassine 1b00c6a05b Gigastar(2): Fix bootloaders steps 2025-10-30 14:37:12 -04:00
Kyle Schwarz ebf9409c18 Device: Guard mutex usage 2025-10-30 11:18:12 -04:00
4 changed files with 57 additions and 18 deletions

View File

@ -554,6 +554,7 @@ bool Device::goOnline() {
return false; return false;
} }
if(supportsNetworkMutex()) {
assignedClientId = com->getClientIDSync(); assignedClientId = com->getClientIDSync();
if(assignedClientId) { if(assignedClientId) {
// firmware supports clientid/mutex // firmware supports clientid/mutex
@ -575,6 +576,7 @@ bool Device::goOnline() {
} }
); );
} }
}
// (re)start the keeponline // (re)start the keeponline
keeponline = std::make_unique<Periodic>([this] { return enableNetworkCommunication(true, onlineTimeoutMs); }, std::chrono::milliseconds(onlineTimeoutMs / 4)); keeponline = std::make_unique<Periodic>([this] { return enableNetworkCommunication(true, onlineTimeoutMs); }, std::chrono::milliseconds(onlineTimeoutMs / 4));

View File

@ -28,7 +28,8 @@ struct BootloaderPhase {
Finalize, Finalize,
Reconnect, Reconnect,
EnterBootloader, EnterBootloader,
Wait Wait,
EnterApplication
}; };
virtual Type getType() const = 0; 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 { struct FlashPhase : public BootloaderPhase {
Type getType() const override { Type getType() const override {
return Type::Flash; return Type::Flash;

View File

@ -67,10 +67,23 @@ public:
} }
} }
if(useNewBootloader) { 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; BootloaderPipeline pipeline;
for(const auto& version : chipVersions) { for(const auto& version : chipVersions) {
pipeline.add<FlashPhase>(version.id, BootloaderCommunication::RADMultiChip); pipeline.add<FlashPhase>(version.id, BootloaderCommunication::RADMultiChip);
} }
pipeline.add<EnterApplicationPhase>(mainChipID);
pipeline.add<ReconnectPhase>(); pipeline.add<ReconnectPhase>();
pipeline.add<WaitPhase>(std::chrono::milliseconds(3000)); pipeline.add<WaitPhase>(std::chrono::milliseconds(3000));
return pipeline; return pipeline;

View File

@ -146,10 +146,23 @@ public:
BootloaderPipeline getBootloader() override { BootloaderPipeline getBootloader() override {
auto chipVersions = getChipVersions(); 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; BootloaderPipeline pipeline;
for(const auto& version : chipVersions) { for(const auto& version : chipVersions) {
pipeline.add<FlashPhase>(version.id, BootloaderCommunication::RADMultiChip); pipeline.add<FlashPhase>(version.id, BootloaderCommunication::RADMultiChip);
} }
pipeline.add<EnterApplicationPhase>(mainChipID);
pipeline.add<ReconnectPhase>(); pipeline.add<ReconnectPhase>();
pipeline.add<WaitPhase>(std::chrono::milliseconds(3000)); pipeline.add<WaitPhase>(std::chrono::milliseconds(3000));
return pipeline; return pipeline;