From 42fa6ded7ff1f8e01f97c1e40c99249d4fc166cd Mon Sep 17 00:00:00 2001 From: Mark Haslinghuis Date: Thu, 18 Dec 2025 23:32:08 +0100 Subject: [PATCH 1/3] Initial board qualifation --- locales/en/messages.json | 3 +++ src/js/tabs/firmware_flasher.js | 35 +++++++++++++++++++++++++++++++++ src/tabs/firmware_flasher.html | 7 +++++++ 3 files changed, 45 insertions(+) diff --git a/locales/en/messages.json b/locales/en/messages.json index ba6c71a66ed..e5b274cc625 100755 --- a/locales/en/messages.json +++ b/locales/en/messages.json @@ -7738,6 +7738,9 @@ "firmwareFlasherOptionLabelLegacy": { "message": "Legacy" }, + "firmwareFlasherOptionLabelNotQualified": { + "message": "Non qualified target — flash at your own risk - not officially supported" + }, "coreBuild": { "message": "Core Only" }, diff --git a/src/js/tabs/firmware_flasher.js b/src/js/tabs/firmware_flasher.js index 143cb04e312..999b519e85a 100644 --- a/src/js/tabs/firmware_flasher.js +++ b/src/js/tabs/firmware_flasher.js @@ -274,8 +274,35 @@ firmware_flasher.initialize = async function (callback) { $("a.load_remote_file").text(i18n.getMessage("firmwareFlasherButtonLoadOnline")); } + const targetQualificationNotice = $("#targetQualificationNotice"); + const targetQualificationLabel = $("#targetQualificationNotice .target-qualification-label"); + + function findTargetDescriptor(targetName) { + return self.targets?.find((descriptor) => descriptor.target === targetName); + } + + function updateTargetQualification(targetName) { + if (!targetName || targetName === "0") { + targetQualificationNotice.hide(); + return; + } + + const targetDescriptor = findTargetDescriptor(targetName) ?? self.targetDetail; + const descriptorGroup = targetDescriptor?.group; + const isQualified = descriptorGroup === "supported" || targetDescriptor?.partnerApproved === true; + + targetQualificationLabel.text( + isQualified + ? i18n.getMessage("firmwareFlasherOptionLabelVerifiedPartner") + : i18n.getMessage("firmwareFlasherOptionLabelNotQualified"), + ); + + targetQualificationNotice.show(); + } + async function populateTargetList(targets) { if (!targets || !ispConnected()) { + updateTargetQualification(null); $('select[name="board"]').empty().append(''); $('select[name="firmware_version"]').empty().append(''); @@ -562,6 +589,7 @@ firmware_flasher.initialize = async function (callback) { } self.targetDetail = detail; + updateTargetQualification(detail.target); if (detail.cloudBuild === true) { $("div.build_configuration").slideDown(); @@ -603,6 +631,7 @@ firmware_flasher.initialize = async function (callback) { } catch (error) { console.error("Failed to load target:", error); loadFailed(); + updateTargetQualification(null); return; } @@ -704,6 +733,8 @@ firmware_flasher.initialize = async function (callback) { self.enableLoadRemoteFileButton(false); let target = $(this).val(); + updateTargetQualification(null); + // exception for board flashed with local custom firmware if (target === null) { target = "0"; @@ -739,6 +770,8 @@ firmware_flasher.initialize = async function (callback) { )}`, ), ); + + updateTargetQualification(null); } else { // Show a loading message as there is a delay in loading a configuration versions_e.empty(); @@ -1024,6 +1057,8 @@ firmware_flasher.initialize = async function (callback) { }), self.FLASH_MESSAGE_TYPES.NEUTRAL, ); + + updateTargetQualification(null); } } } diff --git a/src/tabs/firmware_flasher.html b/src/tabs/firmware_flasher.html index a61d78246f5..daf71e78c93 100644 --- a/src/tabs/firmware_flasher.html +++ b/src/tabs/firmware_flasher.html @@ -11,6 +11,13 @@
+ + +
+ +