From 8f260b9ca57fe69b799b8f735b39734d32af7e57 Mon Sep 17 00:00:00 2001 From: xyzroe Date: Wed, 8 May 2024 03:24:02 +0300 Subject: [PATCH] 20240508 Web UI: - Resolved issues with commands button failure states - Fix ability to flash CC2652 if no revision design detected - Add ESP restart after Zigbee flashing - Add "Erase complete" message before Zigbee flashing Code: = Corrected errors with the trash ZB version - Fixed ZB version detection during boot - Ensured status returns for both ZB LED toggle and firmware check buttons --- lib/CCTools/src/CCTools.cpp | 3 +- lib/CCTools/src/CCTools.h | 2 +- src/main.cpp | 8 +++--- src/version.h | 2 +- src/web.cpp | 18 ++++++++++-- src/websrc/js/functions.js | 56 +++++++++++++++---------------------- src/websrc/json/de.json | 3 +- src/websrc/json/en.json | 3 +- src/websrc/json/es.json | 3 +- src/websrc/json/fr.json | 3 +- src/websrc/json/it.json | 3 +- src/websrc/json/ja.json | 3 +- src/websrc/json/pl.json | 3 +- src/websrc/json/pt.json | 3 +- src/websrc/json/ru.json | 3 +- src/websrc/json/tr.json | 3 +- src/websrc/json/uk.json | 3 +- src/websrc/json/zh.json | 3 +- src/zb.cpp | 17 ++++++++--- src/zb.h | 4 +-- 20 files changed, 86 insertions(+), 60 deletions(-) diff --git a/lib/CCTools/src/CCTools.cpp b/lib/CCTools/src/CCTools.cpp index 7f75a4a..fcc5487 100644 --- a/lib/CCTools/src/CCTools.cpp +++ b/lib/CCTools/src/CCTools.cpp @@ -426,7 +426,7 @@ bool CommandInterface::_ledToggle(bool ledState) CommandInterface::zbInfoStruct CommandInterface::_checkFwVer() { zbInfoStruct chip; - for (uint8_t i = 0; i < 6; i++) + for (uint8_t i = 0; i < 10; i++) { if (_stream.read() != cmdFrameStart || _stream.read() != 0x0a || _stream.read() != 0x61 || _stream.read() != cmdVer2) { // check for packet start @@ -456,6 +456,7 @@ CommandInterface::zbInfoStruct CommandInterface::_checkFwVer() return chip; } } + chip.fwRev = 0; return chip; } diff --git a/lib/CCTools/src/CCTools.h b/lib/CCTools/src/CCTools.h index 896fdc1..c89326d 100644 --- a/lib/CCTools/src/CCTools.h +++ b/lib/CCTools/src/CCTools.h @@ -108,7 +108,7 @@ class CommandInterface } else if (chip_id == 0x3202 && wafer_id == 0xBB41 && pg_rev == 0x3) { - return "CC2652P2_?"; + return "CC2652P2_"; } else if (chip_id == 0x3102 && wafer_id == 0xBB41 && pg_rev == 0x3) { diff --git a/src/main.cpp b/src/main.cpp index 81f26fd..b504420 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -128,8 +128,6 @@ void startServers(bool usb = false) startAP(false); - zbFwCheck(); - if (!vars.apStarted) { if (vpnCfg.wgEnable) @@ -575,11 +573,13 @@ void setup() setupCoordinatorMode(); vars.connectedClients = 0; - LOGD("done"); - xTaskCreate(updateWebTask, "update Web Task", 2048, NULL, 7, NULL); printNVSFreeSpace(); + + zbFwCheck(); + + LOGD("done"); } WiFiClient client[10]; diff --git a/src/version.h b/src/version.h index c9dbee1..46291e0 100644 --- a/src/version.h +++ b/src/version.h @@ -1,4 +1,4 @@ // AUTO GENERATED FILE #ifndef VERSION - #define VERSION "20240507" + #define VERSION "20240508" #endif diff --git a/src/web.cpp b/src/web.cpp index 043a1a4..96ea362 100644 --- a/src/web.cpp +++ b/src/web.cpp @@ -642,13 +642,27 @@ void handleApi() } break; case CMD_ZB_CHK_FW: - zbFwCheck(); + if (zbFwCheck()) + { + serverWeb.send(HTTP_CODE_OK, contTypeText, result); + } + else + { + serverWeb.send(HTTP_CODE_INTERNAL_SERVER_ERROR, contTypeText, result); + } break; case CMD_ZB_CHK_HW: zbHwCheck(); break; case CMD_ZB_LED_TOG: - zbLedToggle(); + if (zbLedToggle()) + { + serverWeb.send(HTTP_CODE_OK, contTypeText, result); + } + else + { + serverWeb.send(HTTP_CODE_INTERNAL_SERVER_ERROR, contTypeText, result); + } break; case CMD_ESP_FAC_RES: if (serverWeb.hasArg(argConf)) diff --git a/src/websrc/js/functions.js b/src/websrc/js/functions.js index 043aa37..40fdb4c 100644 --- a/src/websrc/js/functions.js +++ b/src/websrc/js/functions.js @@ -621,15 +621,15 @@ function apiGetPage(page, doneCall, loader = true) { if (cmd == 3) { modalConstructor("restartWait"); } - }, 1000, jbtn); + }, 2000, jbtn); }).fail(function () { spiner.remove(); jbtn.prop("disabled", false); statusFail.appendTo(jbtn); setTimeout(function (jbtn) { statusFail.remove(); - }, 1000, jbtn); - alert(i18next.t('c.ercn')); + }, 2000, jbtn); + //alert(i18next.t('c.ercn')); }); } }); @@ -1319,6 +1319,10 @@ function updateRootEvents(callback) { data = i18next.t('md.zg.fu.st'); } + if (e.data == "erase") { + data = i18next.t('md.zg.fu.er'); + } + if (e.data == "finish") { data = i18next.t('md.zg.fu.fn'); $(".progress").addClass(classHide); @@ -1340,7 +1344,15 @@ function updateRootEvents(callback) { data = i18next.t('md.zg.fu.f', { file: fileName }); } else { - data = i18next.t('md.zg.fu.nv', { ver: e.data }); + let ver = "Unknown"; + if (e.data != 0) { + ver = e.data; + } + data = i18next.t('md.zg.fu.nv', { ver: ver }); + setTimeout(function () { + espReboot(); + restartWait(); + }, 2000); } $("#zbFlshPgsTxt").html(data); }, false); @@ -1490,45 +1502,23 @@ function updateProgressBar(id, current, min, max) { //progressBar.textContent = width.toFixed(0) + '%'; // Отображаем проценты внутри прогресс бара } -function findLatestVersions(data, deviceName) { - const categories = ['router', 'coordinator']; - const result = {}; - - categories.forEach(category => { - if (data[category]) { - Object.keys(data[category]).forEach(subCategory => { - if (subCategory.startsWith(deviceName)) { - Object.keys(data[category][subCategory]).forEach(file => { - const fileInfo = data[category][subCategory][file]; - if (!result[category] || result[category].ver < fileInfo.ver) { - result[category] = { - file: file, - ver: fileInfo.ver, - link: fileInfo.link, - notes: fileInfo.notes - }; - } - }); - } - }); - } - }); - - return result; -} function findAllVersionsSorted(data, chip) { const categories = ['router', 'coordinator', 'thread']; const result = {}; const chipMap = { "CC2652P2_launchpad": "CC2652P2_launchpad", "CC2652P2_other": "CC2652P2_other", "CC2652P7": "CC2652P7", "CC2652RB": "CC2652RB" }; - const deviceName = chipMap[chip]; - if (!deviceName) throw new Error("Unsupported chip type or deviceName not set."); + let deviceName = chipMap[chip]; + if (!deviceName) { + //throw new Error("Unsupported chip type or deviceName not set."); + console.error("error with ZB chip detect"); + deviceName = chip; + } categories.forEach(category => { if (data[category]) { Object.keys(data[category]).forEach(subCategory => { - if (subCategory == deviceName) { + if (subCategory.startsWith(deviceName)) { Object.keys(data[category][subCategory]).forEach(file => { const fileInfo = data[category][subCategory][file]; if (!result[category]) { diff --git a/src/websrc/json/de.json b/src/websrc/json/de.json index 9f61fe1..661fd69 100644 --- a/src/websrc/json/de.json +++ b/src/websrc/json/de.json @@ -105,7 +105,8 @@ "f": "Wird geflasht: {{file}}", "fn": "Erfolgreich geflasht!", "nv": "Neue Version: {{ver}}", - "st": "CC2652-Blitz startet..." + "st": "CC2652-Blitz startet...", + "er": "Löschen beendet" } } }, diff --git a/src/websrc/json/en.json b/src/websrc/json/en.json index 430a6aa..2163339 100644 --- a/src/websrc/json/en.json +++ b/src/websrc/json/en.json @@ -402,7 +402,8 @@ "f": "Going to flash: {{file}}", "fn": "The firmware was successfully installed!", "nv": "New version: {{ver}}", - "st": "CC2652 flash is starting..." + "st": "CC2652 flash is starting...", + "er": "Erase finished" } } }, diff --git a/src/websrc/json/es.json b/src/websrc/json/es.json index f1b92e9..f18f853 100644 --- a/src/websrc/json/es.json +++ b/src/websrc/json/es.json @@ -105,7 +105,8 @@ "f": "Va a flashear: {{archivo}}", "fn": "¡Flasheado exitosamente!", "nv": "Nueva versión: {{ver}}", - "st": "CC2652 flash iniciando..." + "st": "CC2652 flash iniciando...", + "er": "Borrar terminado" } } }, diff --git a/src/websrc/json/fr.json b/src/websrc/json/fr.json index 7374174..db081cb 100644 --- a/src/websrc/json/fr.json +++ b/src/websrc/json/fr.json @@ -105,7 +105,8 @@ "f": "Va flasher : {{file}}", "fn": "Flashé avec succès !", "nv": "Nouvelle version : {{ver}}", - "st": "Démarrage du flash CC2652..." + "st": "Démarrage du flash CC2652...", + "er": "Effacement terminé" } } }, diff --git a/src/websrc/json/it.json b/src/websrc/json/it.json index 015b5a1..ceaa5ce 100644 --- a/src/websrc/json/it.json +++ b/src/websrc/json/it.json @@ -105,7 +105,8 @@ "f": "Flash: {{file}}", "fn": "Flashato con successo!", "nv": "Nuova versione: {{ver}}", - "st": "Avvio flash CC2652..." + "st": "Avvio flash CC2652...", + "er": "Cancellazione terminata" } } }, diff --git a/src/websrc/json/ja.json b/src/websrc/json/ja.json index bfe45a5..9203207 100644 --- a/src/websrc/json/ja.json +++ b/src/websrc/json/ja.json @@ -105,7 +105,8 @@ "f": "フラッシュに移動します: {{file}}", "fn": "無事フラッシュされました!", "nv": "新しいバージョン: {{ver}}", - "st": "CC2652 フラッシュが起動しています..." + "st": "CC2652 フラッシュが起動しています...", + "er": "消去完了" } } }, diff --git a/src/websrc/json/pl.json b/src/websrc/json/pl.json index 65f822b..38b0b10 100644 --- a/src/websrc/json/pl.json +++ b/src/websrc/json/pl.json @@ -105,7 +105,8 @@ "f": "Zamierzam flashować: {{file}}", "fn": "Flashowanie pomyślnie!", "nv": "Nowa wersja: {{ver}}", - "st": "Uruchamianie lampy błyskowej CC2652..." + "st": "Uruchamianie lampy błyskowej CC2652...", + "er": "Wymazywanie zakończone" } } }, diff --git a/src/websrc/json/pt.json b/src/websrc/json/pt.json index b38f124..af7c19e 100644 --- a/src/websrc/json/pt.json +++ b/src/websrc/json/pt.json @@ -105,7 +105,8 @@ "f": "Indo piscar: {{file}}", "fn": "Piscou com sucesso!", "nv": "Nova versão: {{ver}}", - "st": "Flash CC2652 iniciando..." + "st": "Flash CC2652 iniciando...", + "er": "Apagar concluído" } } }, diff --git a/src/websrc/json/ru.json b/src/websrc/json/ru.json index b316329..82579fe 100644 --- a/src/websrc/json/ru.json +++ b/src/websrc/json/ru.json @@ -105,7 +105,8 @@ "f": "Прошивка: {{file}}", "fn": "Прошивка прошла успешно!", "nv": "Новая версия: {{ver}}", - "st": "Начинается прошивка CC2652..." + "st": "Начинается прошивка CC2652...", + "er": "Стирание завершено" } } }, diff --git a/src/websrc/json/tr.json b/src/websrc/json/tr.json index 1fe55dd..6cefe18 100644 --- a/src/websrc/json/tr.json +++ b/src/websrc/json/tr.json @@ -105,7 +105,8 @@ "f": "Flash'a gidiyor: {{file}}", "fn": "Başarıyla yanıp söndü!", "nv": "Yeni sürüm: {{ver}}", - "st": "CC2652 flaş başlangıç..." + "st": "CC2652 flaş başlangıç...", + "er": "Silme tamamlandı" } } }, diff --git a/src/websrc/json/uk.json b/src/websrc/json/uk.json index 7e3e5f8..d6a10aa 100644 --- a/src/websrc/json/uk.json +++ b/src/websrc/json/uk.json @@ -402,7 +402,8 @@ "f": "Прошивка: {{файл}}", "fn": "Прошивку успішно встановлено!", "nv": "Нова версія: {{ver}}", - "st": "Починається прошивка CC2652..." + "st": "Починається прошивка CC2652...", + "er": "Стирання завершено" } } }, diff --git a/src/websrc/json/zh.json b/src/websrc/json/zh.json index 1760be8..89e0b0d 100644 --- a/src/websrc/json/zh.json +++ b/src/websrc/json/zh.json @@ -105,7 +105,8 @@ "f": "即将闪现:{{file}}", "fn": "刷机成功!", "nv": "新版本:{{ver}}", - "st": "CC2652闪存启动..." + "st": "CC2652闪存启动...", + "er": "擦除完毕" } } }, diff --git a/src/zb.cpp b/src/zb.cpp index f4285cb..364ff8a 100644 --- a/src/zb.cpp +++ b/src/zb.cpp @@ -34,11 +34,17 @@ String tag_ZB = "[ZB]"; extern CCTools CCTool; -void zbFwCheck() +bool zbFwCheck() { if (CCTool.checkFirmwareVersion()) { printLogMsg(tag_ZB + " fw: " + String(CCTool.chip.fwRev)); + return true; + } + else + { + printLogMsg(tag_ZB + " fw: unknown!"); + return false; } } @@ -65,24 +71,26 @@ void zbHwCheck() CCTool.restart(); } -void zbLedToggle() +bool zbLedToggle() { if (CCTool.ledToggle()) { if (CCTool.ledState == 1) { printLogMsg("[ZB] LED toggle ON"); - //vars.zbLedState = 1; + // vars.zbLedState = 1; } else { printLogMsg("[ZB] LED toggle OFF"); - //vars.zbLedState = 0; + // vars.zbLedState = 0; } + return true; } else { printLogMsg("[ZB] LED toggle ERROR"); + return false; } } @@ -187,6 +195,7 @@ bool eraseWriteZbUrl(const char *url, std::function progressShow, C } CCTool.eraseFlash(); + sendEvent("ZB_FW_info", 11, String("erase")); printLogMsg("Erase completed!"); int totalSize = http.getSize(); diff --git a/src/zb.h b/src/zb.h index 9ddd51f..27b3a55 100644 --- a/src/zb.h +++ b/src/zb.h @@ -1,6 +1,6 @@ -void zbFwCheck(); +bool zbFwCheck(); void zbHwCheck(); -void zbLedToggle(); +bool zbLedToggle(); bool zigbeeErase(); void flashZbUrl(String url); bool eraseWriteZbUrl(const char *url, std::function progressShow, CCTools &CCTool);