Add better Zigbee firmware Upload Transfer GUI

This commit is contained in:
Theo Arends 2020-09-01 13:05:46 +02:00
parent c081f47dd1
commit 73e49803cc
26 changed files with 116 additions and 23 deletions

View File

@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Зареждането започна" #define D_UPLOAD_STARTED "Зареждането започна"
#define D_UPGRADE_STARTED "Обновяването започна" #define D_UPGRADE_STARTED "Обновяването започна"
#define D_UPLOAD_DONE "Зареждането завърши" #define D_UPLOAD_DONE "Зареждането завърши"
#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started" #define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Не е избран файл" #define D_UPLOAD_ERR_1 "Не е избран файл"
#define D_UPLOAD_ERR_2 "Недостатъчно свободно място" #define D_UPLOAD_ERR_2 "Недостатъчно свободно място"

View File

@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Nahrávání zahájeno" #define D_UPLOAD_STARTED "Nahrávání zahájeno"
#define D_UPGRADE_STARTED "Zahájení aktualizace" #define D_UPGRADE_STARTED "Zahájení aktualizace"
#define D_UPLOAD_DONE "Nahrávání ukončeno" #define D_UPLOAD_DONE "Nahrávání ukončeno"
#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started" #define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Soubor nebyl vybrán" #define D_UPLOAD_ERR_1 "Soubor nebyl vybrán"
#define D_UPLOAD_ERR_2 "Málo místa" #define D_UPLOAD_ERR_2 "Málo místa"

View File

@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Upload gestartet" #define D_UPLOAD_STARTED "Upload gestartet"
#define D_UPGRADE_STARTED "Update gestartet" #define D_UPGRADE_STARTED "Update gestartet"
#define D_UPLOAD_DONE "Upload abgeschlossen" #define D_UPLOAD_DONE "Upload abgeschlossen"
#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started" #define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Keine Datei ausgewählt" #define D_UPLOAD_ERR_1 "Keine Datei ausgewählt"
#define D_UPLOAD_ERR_2 "Ungenügend Speicherplatz" #define D_UPLOAD_ERR_2 "Ungenügend Speicherplatz"

View File

@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Η μεταφόρτωση ξεκίνησε" #define D_UPLOAD_STARTED "Η μεταφόρτωση ξεκίνησε"
#define D_UPGRADE_STARTED "Η αναβάθμιση ξεκίνησε" #define D_UPGRADE_STARTED "Η αναβάθμιση ξεκίνησε"
#define D_UPLOAD_DONE "Η μεταφόρτωση ολοκληρώθηκε" #define D_UPLOAD_DONE "Η μεταφόρτωση ολοκληρώθηκε"
#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started" #define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Δεν έχει επιλεγεί αρχείο" #define D_UPLOAD_ERR_1 "Δεν έχει επιλεγεί αρχείο"
#define D_UPLOAD_ERR_2 "Δεν υπάρχει επαρκής χώρος" #define D_UPLOAD_ERR_2 "Δεν υπάρχει επαρκής χώρος"

View File

@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Upload started" #define D_UPLOAD_STARTED "Upload started"
#define D_UPGRADE_STARTED "Upgrade started" #define D_UPGRADE_STARTED "Upgrade started"
#define D_UPLOAD_DONE "Upload done" #define D_UPLOAD_DONE "Upload done"
#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started" #define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "No file selected" #define D_UPLOAD_ERR_1 "No file selected"
#define D_UPLOAD_ERR_2 "Not enough space" #define D_UPLOAD_ERR_2 "Not enough space"

View File

@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Cargando archivo" #define D_UPLOAD_STARTED "Cargando archivo"
#define D_UPGRADE_STARTED "Actualización iniciada" #define D_UPGRADE_STARTED "Actualización iniciada"
#define D_UPLOAD_DONE "Carga finalizada" #define D_UPLOAD_DONE "Carga finalizada"
#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started" #define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Ningún archivo seleccionado" #define D_UPLOAD_ERR_1 "Ningún archivo seleccionado"
#define D_UPLOAD_ERR_2 "Espacio insuficiente" #define D_UPLOAD_ERR_2 "Espacio insuficiente"

View File

@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Téléchargement lancé" #define D_UPLOAD_STARTED "Téléchargement lancé"
#define D_UPGRADE_STARTED "Mise à jour lancée" #define D_UPGRADE_STARTED "Mise à jour lancée"
#define D_UPLOAD_DONE "Téléchargement terminé" #define D_UPLOAD_DONE "Téléchargement terminé"
#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started" #define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Aucun fichier sélectionné" #define D_UPLOAD_ERR_1 "Aucun fichier sélectionné"
#define D_UPLOAD_ERR_2 "Espace insuffisant" #define D_UPLOAD_ERR_2 "Espace insuffisant"

View File

@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "העלאה מתחילה" #define D_UPLOAD_STARTED "העלאה מתחילה"
#define D_UPGRADE_STARTED "שדרוג מתחיל" #define D_UPGRADE_STARTED "שדרוג מתחיל"
#define D_UPLOAD_DONE "העלאה הסתיימה" #define D_UPLOAD_DONE "העלאה הסתיימה"
#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started" #define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "לא נבחר קובץ" #define D_UPLOAD_ERR_1 "לא נבחר קובץ"
#define D_UPLOAD_ERR_2 "אין מספיק מקום" #define D_UPLOAD_ERR_2 "אין מספיק מקום"

View File

@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Feltöltés elindítva" #define D_UPLOAD_STARTED "Feltöltés elindítva"
#define D_UPGRADE_STARTED "Frissítés elindítva" #define D_UPGRADE_STARTED "Frissítés elindítva"
#define D_UPLOAD_DONE "Feltöltés kész" #define D_UPLOAD_DONE "Feltöltés kész"
#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started" #define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Nincs fájl kijelölve" #define D_UPLOAD_ERR_1 "Nincs fájl kijelölve"
#define D_UPLOAD_ERR_2 "Nincs elég memória" #define D_UPLOAD_ERR_2 "Nincs elég memória"

View File

@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Caricamento..." #define D_UPLOAD_STARTED "Caricamento..."
#define D_UPGRADE_STARTED "Aggiornamento..." #define D_UPGRADE_STARTED "Aggiornamento..."
#define D_UPLOAD_DONE "Caricamento completato" #define D_UPLOAD_DONE "Caricamento completato"
#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started" #define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Nessun file selezionato" #define D_UPLOAD_ERR_1 "Nessun file selezionato"
#define D_UPLOAD_ERR_2 "Spazio insufficiente" #define D_UPLOAD_ERR_2 "Spazio insufficiente"

View File

@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "업로드 시작됨" #define D_UPLOAD_STARTED "업로드 시작됨"
#define D_UPGRADE_STARTED "업그레이드 시작됨" #define D_UPGRADE_STARTED "업그레이드 시작됨"
#define D_UPLOAD_DONE "업그레이드 완료" #define D_UPLOAD_DONE "업그레이드 완료"
#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started" #define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "파일이 선택되지 않았습니다" #define D_UPLOAD_ERR_1 "파일이 선택되지 않았습니다"
#define D_UPLOAD_ERR_2 "용량이 충분하지 않습니다" #define D_UPLOAD_ERR_2 "용량이 충분하지 않습니다"

View File

@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Verzending gestart" #define D_UPLOAD_STARTED "Verzending gestart"
#define D_UPGRADE_STARTED "Opwaarderen gestart" #define D_UPGRADE_STARTED "Opwaarderen gestart"
#define D_UPLOAD_DONE "Opwaarderen klaar" #define D_UPLOAD_DONE "Opwaarderen klaar"
#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started" #define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Geen bestand gekozen" #define D_UPLOAD_ERR_1 "Geen bestand gekozen"
#define D_UPLOAD_ERR_2 "Onvoldoende geheugen ruimte" #define D_UPLOAD_ERR_2 "Onvoldoende geheugen ruimte"

View File

@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Wgrywanie rozpoczęte" #define D_UPLOAD_STARTED "Wgrywanie rozpoczęte"
#define D_UPGRADE_STARTED "Aktualizacja rozpoczęta" #define D_UPGRADE_STARTED "Aktualizacja rozpoczęta"
#define D_UPLOAD_DONE "Wgrywanie zakończone" #define D_UPLOAD_DONE "Wgrywanie zakończone"
#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started" #define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Nie wybrano pliku" #define D_UPLOAD_ERR_1 "Nie wybrano pliku"
#define D_UPLOAD_ERR_2 "Niewystarczająca ilość miejsca" #define D_UPLOAD_ERR_2 "Niewystarczająca ilość miejsca"

View File

@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Início do envio" #define D_UPLOAD_STARTED "Início do envio"
#define D_UPGRADE_STARTED "Atualização iniciada" #define D_UPGRADE_STARTED "Atualização iniciada"
#define D_UPLOAD_DONE "Atualização finalizada" #define D_UPLOAD_DONE "Atualização finalizada"
#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started" #define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Nenhum arquivo selecionado" #define D_UPLOAD_ERR_1 "Nenhum arquivo selecionado"
#define D_UPLOAD_ERR_2 "Não existe memória disponível" #define D_UPLOAD_ERR_2 "Não existe memória disponível"

View File

@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Envio Iniciado" #define D_UPLOAD_STARTED "Envio Iniciado"
#define D_UPGRADE_STARTED "Atualização Iniciada" #define D_UPGRADE_STARTED "Atualização Iniciada"
#define D_UPLOAD_DONE "Atualização Finalizada" #define D_UPLOAD_DONE "Atualização Finalizada"
#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started" #define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Nenhum ficheiro selecionado" #define D_UPLOAD_ERR_1 "Nenhum ficheiro selecionado"
#define D_UPLOAD_ERR_2 "Não existe espaço disponível" #define D_UPLOAD_ERR_2 "Não existe espaço disponível"

View File

@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Încărcare începută" #define D_UPLOAD_STARTED "Încărcare începută"
#define D_UPGRADE_STARTED "Actualizare începută" #define D_UPGRADE_STARTED "Actualizare începută"
#define D_UPLOAD_DONE "Încărcare terminată" #define D_UPLOAD_DONE "Încărcare terminată"
#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started" #define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Nici un fișier selectat" #define D_UPLOAD_ERR_1 "Nici un fișier selectat"
#define D_UPLOAD_ERR_2 "Spațiu insuficient" #define D_UPLOAD_ERR_2 "Spațiu insuficient"

View File

@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Загрузка началась" #define D_UPLOAD_STARTED "Загрузка началась"
#define D_UPGRADE_STARTED "Обновление началось" #define D_UPGRADE_STARTED "Обновление началось"
#define D_UPLOAD_DONE "Загрузка завершена" #define D_UPLOAD_DONE "Загрузка завершена"
#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started" #define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Файл не выбран" #define D_UPLOAD_ERR_1 "Файл не выбран"
#define D_UPLOAD_ERR_2 "Недостаточно места" #define D_UPLOAD_ERR_2 "Недостаточно места"

View File

@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Nahrávanie spustené" #define D_UPLOAD_STARTED "Nahrávanie spustené"
#define D_UPGRADE_STARTED "Aktualizácia spustená" #define D_UPGRADE_STARTED "Aktualizácia spustená"
#define D_UPLOAD_DONE "Nahrávanie ukončené" #define D_UPLOAD_DONE "Nahrávanie ukončené"
#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started" #define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Súbor nebol vybraný" #define D_UPLOAD_ERR_1 "Súbor nebol vybraný"
#define D_UPLOAD_ERR_2 "Málo miesta" #define D_UPLOAD_ERR_2 "Málo miesta"

View File

@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Uppladdning startad" #define D_UPLOAD_STARTED "Uppladdning startad"
#define D_UPGRADE_STARTED "Uppgradeing startad" #define D_UPGRADE_STARTED "Uppgradeing startad"
#define D_UPLOAD_DONE "Uppladdning klar" #define D_UPLOAD_DONE "Uppladdning klar"
#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started" #define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Ingen fil vald" #define D_UPLOAD_ERR_1 "Ingen fil vald"
#define D_UPLOAD_ERR_2 "Inte tillräckligt med ledigt utrymme" #define D_UPLOAD_ERR_2 "Inte tillräckligt med ledigt utrymme"

View File

@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Yükleme başlatıldı" #define D_UPLOAD_STARTED "Yükleme başlatıldı"
#define D_UPGRADE_STARTED "YÜkestlme başlatıldı" #define D_UPGRADE_STARTED "YÜkestlme başlatıldı"
#define D_UPLOAD_DONE "Yükleme Tamamlandı" #define D_UPLOAD_DONE "Yükleme Tamamlandı"
#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started" #define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Dosya seçilmedi" #define D_UPLOAD_ERR_1 "Dosya seçilmedi"
#define D_UPLOAD_ERR_2 "Boş yer yok" #define D_UPLOAD_ERR_2 "Boş yer yok"

View File

@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "Завантаження почалось" #define D_UPLOAD_STARTED "Завантаження почалось"
#define D_UPGRADE_STARTED "Оновлення почалось" #define D_UPGRADE_STARTED "Оновлення почалось"
#define D_UPLOAD_DONE "Завантаження завершено" #define D_UPLOAD_DONE "Завантаження завершено"
#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started" #define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "Файл не вибраний" #define D_UPLOAD_ERR_1 "Файл не вибраний"
#define D_UPLOAD_ERR_2 "Недостатньо місця" #define D_UPLOAD_ERR_2 "Недостатньо місця"

View File

@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "开始上传" #define D_UPLOAD_STARTED "开始上传"
#define D_UPGRADE_STARTED "开始升级" #define D_UPGRADE_STARTED "开始升级"
#define D_UPLOAD_DONE "上传完成" #define D_UPLOAD_DONE "上传完成"
#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started" #define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "没有选择任何文件" #define D_UPLOAD_ERR_1 "没有选择任何文件"
#define D_UPLOAD_ERR_2 "没有足够空间" #define D_UPLOAD_ERR_2 "没有足够空间"

View File

@ -351,6 +351,7 @@
#define D_UPLOAD_STARTED "已開始上傳" #define D_UPLOAD_STARTED "已開始上傳"
#define D_UPGRADE_STARTED "已開始升級" #define D_UPGRADE_STARTED "已開始升級"
#define D_UPLOAD_DONE "已上傳完成" #define D_UPLOAD_DONE "已上傳完成"
#define D_UPLOAD_TRANSFER "Upload transfer"
#define D_TRANSFER_STARTED "Transfer started" #define D_TRANSFER_STARTED "Transfer started"
#define D_UPLOAD_ERR_1 "沒選擇任何檔案" #define D_UPLOAD_ERR_1 "沒選擇任何檔案"
#define D_UPLOAD_ERR_2 "可用空間不足" #define D_UPLOAD_ERR_2 "可用空間不足"

View File

@ -637,12 +637,12 @@ const char HTTP_HEAD_STYLE_ZIGBEE_COMPRESSED[] PROGMEM = "\x3A\x0E\xA3\xDA\x3B\x
"\x33\x90\x81\x0F\x5F\x04\x2D\x53\xFA\x3C\x2A\x2B\x8F\x33\xAC\xE6\x10\x22\x70\x54" "\x33\x90\x81\x0F\x5F\x04\x2D\x53\xFA\x3C\x2A\x2B\x8F\x33\xAC\xE6\x10\x22\x70\x54"
"\x08\xFC\x0C\x82\x0F\x0A\x67\x30\x81\x23\x81\x23\xDA\x08\x34\x4C\xEF\xE7\x74\xEB" "\x08\xFC\x0C\x82\x0F\x0A\x67\x30\x81\x23\x81\x23\xDA\x08\x34\x4C\xEF\xE7\x74\xEB"
"\x3A\xC7\x04\x75\x1C\x98\x43\x0D\x87\x78\xF0\x13\x31\x47\x99\xC8\x43\x0D\x87\xB8"; "\x3A\xC7\x04\x75\x1C\x98\x43\x0D\x87\x78\xF0\x13\x31\x47\x99\xC8\x43\x0D\x87\xB8";
// Raw: .bt{box-sizing:border-box;position:relative;display:inline-block;width:20px;height:12px;border:2px solid;border-radius:3px;margin-left:-3px}.bt::after,.bt::before{content:"";display:block;box-sizing:border-box;position:absolute;height:6px;background:currentColor;top:1px}.bt::before{right:-4px;border-radius:3px;width:4px}.bt::after{width:var(--bl,14px);left:1px} // Raw: .bt{box-sizing:border-box;position:relative;display:inline-block;width:20px;height:12px;border:2px solid;border-radius:3px;margin-left:-3px}.bt::after,.bt::before{content:"";display:block;box-sizing:border-box;position:absolute;height:6px;background:currentColor;top:1px}.bt::before{right:-4px;border-radius:3px;width:4px}.bt::after{width:var(--bl,14px);left:1px}
// Successfully compressed from 363 to 240 bytes (-33.9%) // Successfully compressed from 363 to 240 bytes (-33.9%)
#define HTTP_HEAD_STYLE_ZIGBEE Decompress(HTTP_HEAD_STYLE_ZIGBEE_COMPRESSED,HTTP_HEAD_STYLE_ZIGBEE_SIZE).c_str() #define HTTP_HEAD_STYLE_ZIGBEE Decompress(HTTP_HEAD_STYLE_ZIGBEE_COMPRESSED,HTTP_HEAD_STYLE_ZIGBEE_SIZE).c_str()
#else // USE_UNISHOX_COMPRESSION #else // USE_UNISHOX_COMPRESSION
const char HTTP_HEAD_STYLE_ZIGBEE[] PROGMEM = const char HTTP_HEAD_STYLE_ZIGBEE[] PROGMEM =
".bt{box-sizing:border-box;position:relative;display:inline-block;width:20px;height:12px;border:2px solid;border-radius:3px;margin-left:-3px}" ".bt{box-sizing:border-box;position:relative;display:inline-block;width:20px;height:12px;border:2px solid;border-radius:3px;margin-left:-3px}"
".bt::after,.bt::before{content:\"\";display:block;box-sizing:border-box;position:absolute;height:6px;background:currentColor;top:1px}" ".bt::after,.bt::before{content:\"\";display:block;box-sizing:border-box;position:absolute;height:6px;background:currentColor;top:1px}"
".bt::before{right:-4px;border-radius:3px;width:4px}" ".bt::before{right:-4px;border-radius:3px;width:4px}"
@ -869,6 +869,7 @@ void StartWebserver(int type, IPAddress ipweb)
Webserver->on("/u1", HandleUpgradeFirmwareStart); // OTA Webserver->on("/u1", HandleUpgradeFirmwareStart); // OTA
Webserver->on("/u2", HTTP_POST, HandleUploadDone, HandleUploadLoop); Webserver->on("/u2", HTTP_POST, HandleUploadDone, HandleUploadLoop);
Webserver->on("/u2", HTTP_OPTIONS, HandlePreflightRequest); Webserver->on("/u2", HTTP_OPTIONS, HandlePreflightRequest);
Webserver->on("/u3", HandleUploadDone);
Webserver->on("/cs", HTTP_GET, HandleConsole); Webserver->on("/cs", HTTP_GET, HandleConsole);
Webserver->on("/cs", HTTP_OPTIONS, HandlePreflightRequest); Webserver->on("/cs", HTTP_OPTIONS, HandlePreflightRequest);
Webserver->on("/cm", HandleHttpCommand); Webserver->on("/cm", HandleHttpCommand);
@ -2624,6 +2625,16 @@ void HandleUploadDone(void)
{ {
if (!HttpCheckPriviledgedAccess()) { return; } if (!HttpCheckPriviledgedAccess()) { return; }
#if defined(USE_ZIGBEE) && defined(USE_ZIGBEE_EZSP)
if (!Web.upload_error) {
// GUI xmodem
if (ZigbeeUploadOtaReady()) {
HandleZigbeeXfer();
return;
}
}
#endif
AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP D_UPLOAD_DONE)); AddLog_P(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP D_UPLOAD_DONE));
char error[100]; char error[100];
@ -2639,8 +2650,8 @@ void HandleUploadDone(void)
if (!Web.upload_error) { if (!Web.upload_error) {
uint32_t javascript_settimeout = HTTP_OTA_RESTART_RECONNECT_TIME; uint32_t javascript_settimeout = HTTP_OTA_RESTART_RECONNECT_TIME;
#if defined(USE_ZIGBEE) && defined(USE_ZIGBEE_EZSP) #if defined(USE_ZIGBEE) && defined(USE_ZIGBEE_EZSP)
if (ZigbeeUploadOtaReady()) { if (ZigbeeUploadFinish()) {
javascript_settimeout = 30000; // Refesh main web ui after transfer upgrade javascript_settimeout = 10000; // Refesh main web ui after transfer upgrade
} }
#endif #endif
WSContentSend_P(HTTP_SCRIPT_RELOAD_TIME, javascript_settimeout); // Refesh main web ui after OTA upgrade WSContentSend_P(HTTP_SCRIPT_RELOAD_TIME, javascript_settimeout); // Refesh main web ui after OTA upgrade
@ -2665,15 +2676,9 @@ void HandleUploadDone(void)
} else { } else {
WSContentSend_P(PSTR("%06x'>" D_SUCCESSFUL "</font></b><br>"), WebColor(COL_TEXT_SUCCESS)); WSContentSend_P(PSTR("%06x'>" D_SUCCESSFUL "</font></b><br>"), WebColor(COL_TEXT_SUCCESS));
restart_flag = 2; // Always restart to re-enable disabled features during update restart_flag = 2; // Always restart to re-enable disabled features during update
#if defined(USE_ZIGBEE) && defined(USE_ZIGBEE_EZSP)
if (ZigbeeUploadOtaReady()) {
WSContentSend_P(PSTR("<br><div style='text-align:center;'>" D_TRANSFER_STARTED " ...</div><br>"));
restart_flag = 0; // Hold restart as firmware still needs to be written to MCU EFR32
}
#endif // USE_ZIGBEE and USE_ZIGBEE_EZSP
#ifdef USE_TASMOTA_CLIENT #ifdef USE_TASMOTA_CLIENT
if (TasmotaClient_GetFlagFlashing()) { if (TasmotaClient_GetFlagFlashing()) {
WSContentSend_P(PSTR("<br><div style='text-align:center;'>" D_TRANSFER_STARTED " ...</div><br>")); WSContentSend_P(PSTR("<br><div style='text-align:center;'><b>" D_TRANSFER_STARTED " ...</b></div>"));
restart_flag = 0; // Hold restart as code still needs to be transferred to Atmega restart_flag = 0; // Hold restart as code still needs to be transferred to Atmega
} }
#endif // USE_TASMOTA_CLIENT #endif // USE_TASMOTA_CLIENT

View File

@ -40,7 +40,7 @@
enum ZbUploadSteps { ZBU_IDLE, ZBU_INIT, enum ZbUploadSteps { ZBU_IDLE, ZBU_INIT,
ZBU_SOFTWARE_RESET, ZBU_SOFTWARE_SEND, ZBU_HARDWARE_RESET, ZBU_PROMPT, ZBU_SOFTWARE_RESET, ZBU_SOFTWARE_SEND, ZBU_HARDWARE_RESET, ZBU_PROMPT,
ZBU_SYNC, ZBU_UPLOAD, ZBU_EOT, ZBU_COMPLETE, ZBU_DONE, ZBU_FINISH }; ZBU_SYNC, ZBU_UPLOAD, ZBU_EOT, ZBU_COMPLETE, ZBU_DONE, ZBU_ERROR, ZBU_FINISH };
const uint8_t PIN_ZIGBEE_BOOTLOADER = 5; const uint8_t PIN_ZIGBEE_BOOTLOADER = 5;
@ -52,6 +52,7 @@ struct ZBUPLOAD {
char *buffer; char *buffer;
uint8_t ota_step = ZBU_IDLE; uint8_t ota_step = ZBU_IDLE;
uint8_t bootloader = 0; uint8_t bootloader = 0;
uint8_t state = ZBU_IDLE;
} ZbUpload; } ZbUpload;
/*********************************************************************************************\ /*********************************************************************************************\
@ -282,7 +283,7 @@ bool ZigbeeUploadXmodem(void) {
ZbUpload.ota_step = ZBU_HARDWARE_RESET; ZbUpload.ota_step = ZBU_HARDWARE_RESET;
} else { } else {
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("XMD: Bootloader hardware reset timeout")); AddLog_P2(LOG_LEVEL_DEBUG, PSTR("XMD: Bootloader hardware reset timeout"));
ZbUpload.ota_step = ZBU_DONE; ZbUpload.ota_step = ZBU_ERROR;
} }
return true; return true;
} }
@ -299,7 +300,7 @@ bool ZigbeeUploadXmodem(void) {
case ZBU_PROMPT: { // *** Wait for prompt and select option upload ebl case ZBU_PROMPT: { // *** Wait for prompt and select option upload ebl
if (millis() > XModem.timeout) { if (millis() > XModem.timeout) {
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("XMD: Bootloader timeout")); AddLog_P2(LOG_LEVEL_DEBUG, PSTR("XMD: Bootloader timeout"));
ZbUpload.ota_step = ZBU_DONE; ZbUpload.ota_step = ZBU_ERROR;
return true; return true;
} }
#endif // ZIGBEE_BOOTLOADER_SOFTWARE_RESET_FIRST #endif // ZIGBEE_BOOTLOADER_SOFTWARE_RESET_FIRST
@ -333,7 +334,7 @@ bool ZigbeeUploadXmodem(void) {
case ZBU_SYNC: { // *** Handle file upload using XModem - sync case ZBU_SYNC: { // *** Handle file upload using XModem - sync
if (millis() > XModem.timeout) { if (millis() > XModem.timeout) {
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("XMD: SYNC timeout")); AddLog_P2(LOG_LEVEL_DEBUG, PSTR("XMD: SYNC timeout"));
ZbUpload.ota_step = ZBU_DONE; ZbUpload.ota_step = ZBU_ERROR;
return true; return true;
} }
// Wait for either C or NACK as a sync packet. Determines protocol details, checksum algorithm. // Wait for either C or NACK as a sync packet. Determines protocol details, checksum algorithm.
@ -354,7 +355,7 @@ bool ZigbeeUploadXmodem(void) {
if (ZigbeeUploadAvailable()) { if (ZigbeeUploadAvailable()) {
if (!XModemSendPacket(XModem.packetNo)) { if (!XModemSendPacket(XModem.packetNo)) {
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("XMD: Packet send failed")); AddLog_P2(LOG_LEVEL_DEBUG, PSTR("XMD: Packet send failed"));
ZbUpload.ota_step = ZBU_DONE; ZbUpload.ota_step = ZBU_ERROR;
return true; return true;
} }
XModem.packetNo++; XModem.packetNo++;
@ -376,7 +377,7 @@ bool ZigbeeUploadXmodem(void) {
// to occur without timing out on the response just before the EOT is sent. // to occur without timing out on the response just before the EOT is sent.
if (millis() > XModem.timeout) { if (millis() > XModem.timeout) {
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("XMD: EOT ACK timeout")); AddLog_P2(LOG_LEVEL_DEBUG, PSTR("XMD: EOT ACK timeout"));
ZbUpload.ota_step = ZBU_DONE; ZbUpload.ota_step = ZBU_ERROR;
return true; return true;
} }
if (ZigbeeSerial->available()) { if (ZigbeeSerial->available()) {
@ -386,7 +387,6 @@ bool ZigbeeUploadXmodem(void) {
XModem.timeout = millis() + (30 * 1000); // Allow 30 seconds to receive EBL prompt XModem.timeout = millis() + (30 * 1000); // Allow 30 seconds to receive EBL prompt
ZbUpload.byte_counter = 0; ZbUpload.byte_counter = 0;
ZbUpload.ota_step = ZBU_COMPLETE; ZbUpload.ota_step = ZBU_COMPLETE;
// ZbUpload.ota_step = ZBU_DONE; // Skip prompt for now
} }
} }
break; break;
@ -394,7 +394,7 @@ bool ZigbeeUploadXmodem(void) {
case ZBU_COMPLETE: { // *** Wait for Serial upload complete EBL prompt case ZBU_COMPLETE: { // *** Wait for Serial upload complete EBL prompt
if (millis() > XModem.timeout) { if (millis() > XModem.timeout) {
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("XMD: Bootloader timeout")); AddLog_P2(LOG_LEVEL_DEBUG, PSTR("XMD: Bootloader timeout"));
ZbUpload.ota_step = ZBU_DONE; ZbUpload.ota_step = ZBU_ERROR;
return true; return true;
} else { } else {
// After an image successfully uploads, the XModem transaction completes and the bootloader displays // After an image successfully uploads, the XModem transaction completes and the bootloader displays
@ -406,18 +406,21 @@ bool ZigbeeUploadXmodem(void) {
// 3. ebl info // 3. ebl info
// BL > // BL >
if (ZigbeeUploadBootloaderPrompt()) { if (ZigbeeUploadBootloaderPrompt()) {
ZbUpload.state = ZBU_COMPLETE;
ZbUpload.ota_step = ZBU_DONE; ZbUpload.ota_step = ZBU_DONE;
} }
} }
break; break;
} }
case ZBU_ERROR:
ZbUpload.state = ZBU_ERROR;
case ZBU_DONE: { // *** Clean up and restart to disable bootloader and use new firmware case ZBU_DONE: { // *** Clean up and restart to disable bootloader and use new firmware
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("XMD: " D_RESTARTING)); AddLog_P2(LOG_LEVEL_DEBUG, PSTR("XMD: " D_RESTARTING));
ZigbeeUploadSetBootloader(1); // Disable bootloader and reset MCU - should happen at restart ZigbeeUploadSetBootloader(1); // Disable bootloader and reset MCU - should happen at restart
if (1 == ssleep) { if (1 == ssleep) {
ssleep = Settings.sleep; // Restore loop sleep ssleep = Settings.sleep; // Restore loop sleep
} }
restart_flag = 2; // Restart to disable bootloader and use new firmware // restart_flag = 2; // Restart to disable bootloader and use new firmware
ZbUpload.ota_step = ZBU_FINISH; // Never return to zero without a restart to get a sane Zigbee environment ZbUpload.ota_step = ZBU_FINISH; // Never return to zero without a restart to get a sane Zigbee environment
break; break;
} }
@ -437,6 +440,10 @@ bool ZigbeeUploadOtaReady(void) {
return (ZBU_INIT == ZbUpload.ota_step); return (ZBU_INIT == ZbUpload.ota_step);
} }
bool ZigbeeUploadFinish(void) {
return (ZBU_FINISH == ZbUpload.ota_step);
}
uint8_t ZigbeeUploadInit(void) { uint8_t ZigbeeUploadInit(void) {
if (!PinUsed(GPIO_ZIGBEE_RST) && (ZigbeeSerial == nullptr)) { return 1; } // Wrong pin configuration - No file selected if (!PinUsed(GPIO_ZIGBEE_RST) && (ZigbeeSerial == nullptr)) { return 1; } // Wrong pin configuration - No file selected
@ -444,6 +451,7 @@ uint8_t ZigbeeUploadInit(void) {
ZbUpload.sector_cursor = 0; ZbUpload.sector_cursor = 0;
ZbUpload.ota_size = 0; ZbUpload.ota_size = 0;
ZbUpload.ota_step = ZBU_IDLE; ZbUpload.ota_step = ZBU_IDLE;
ZbUpload.state = ZBU_IDLE;
return 0; return 0;
} }
@ -468,8 +476,59 @@ bool ZigbeeUploadWriteBuffer(uint8_t *buf, size_t size) {
void ZigbeeUploadDone(void) { void ZigbeeUploadDone(void) {
ZbUpload.ota_step = ZBU_INIT; ZbUpload.ota_step = ZBU_INIT;
ZbUpload.state = ZBU_UPLOAD;
} }
#endif // USE_ZIGBEE_EZSP #ifdef USE_WEBSERVER
#endif // USE_ZIGBEE #define WEB_HANDLE_ZIGBEE_XFER "zx"
const char HTTP_SCRIPT_XFER_STATE[] PROGMEM =
"function z9(){"
"if(x!=null){x.abort();}" // Abort if no response within 2 seconds (happens on restart 1)
"x=new XMLHttpRequest();"
"x.onreadystatechange=function(){"
"if(x.readyState==4&&x.status==200){"
"var s=x.responseText;"
"if(s!=7){" // ZBU_UPLOAD
"location.href='/u3';"
"}"
"}"
"};"
"x.open('GET','" WEB_HANDLE_ZIGBEE_XFER "?m=1',true);" // ?m related to Webserver->hasArg("m")
"x.send();"
"if(pc==1){"
"lt=setTimeout(z9,950);" // Poll every 0.95 second
"}"
"}"
"pc=1;"
"wl(z9);";
void HandleZigbeeXfer(void) {
if (!HttpCheckPriviledgedAccess()) { return; }
if (Webserver->hasArg("m")) { // Status refresh requested
WSContentBegin(200, CT_PLAIN);
WSContentSend_P(PSTR("%d"), ZbUpload.state);
WSContentEnd();
if (ZBU_ERROR == ZbUpload.state) {
Web.upload_error = 7; // Upload aborted (failed)
}
return;
}
AddLog_P(LOG_LEVEL_DEBUG, S_LOG_HTTP, PSTR(D_UPLOAD_TRANSFER));
WSContentStart_P(S_INFORMATION);
WSContentSend_P(HTTP_SCRIPT_XFER_STATE);
WSContentSendStyle();
WSContentSend_P(PSTR("<div style='text-align:center;'><b>" D_UPLOAD_TRANSFER "...</b></div>"));
WSContentSpaceButton(BUTTON_MAIN);
WSContentStop();
}
#endif // USE_WEBSERVER
#endif // USE_ZIGBEE_EZSP
#endif // USE_ZIGBEE

View File

@ -284,7 +284,7 @@ void ZbSendReportWrite(const JsonObject &val_pubwrite, uint16_t device, uint16_t
ResponseCmndChar_P(PSTR("No more than one cluster id per command")); ResponseCmndChar_P(PSTR("No more than one cluster id per command"));
return; return;
} }
// //////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////
// Split encoding depending on message // Split encoding depending on message
if (operation != ZCL_CONFIGURE_REPORTING) { if (operation != ZCL_CONFIGURE_REPORTING) {
@ -1482,6 +1482,12 @@ bool Xdrv23(uint8_t function)
case FUNC_WEB_SENSOR: case FUNC_WEB_SENSOR:
ZigbeeShow(false); ZigbeeShow(false);
break; break;
#ifdef USE_ZIGBEE_EZSP
// GUI xmodem
case FUNC_WEB_ADD_HANDLER:
Webserver->on("/" WEB_HANDLE_ZIGBEE_XFER, HandleZigbeeXfer);
break;
#endif // USE_ZIGBEE_EZSP
#endif // USE_WEBSERVER #endif // USE_WEBSERVER
case FUNC_PRE_INIT: case FUNC_PRE_INIT:
ZigbeeInit(); ZigbeeInit();