diff --git a/ESP32_AP-Flasher/data/update_actions.json b/ESP32_AP-Flasher/data/update_actions.json index 4714fa81..851d9a19 100644 --- a/ESP32_AP-Flasher/data/update_actions.json +++ b/ESP32_AP-Flasher/data/update_actions.json @@ -10,6 +10,7 @@ "/www/painter.js", "/www/setup.html", "/www/setup.js", + "/www/flash.js", "/www/upload-demo.html" ] } diff --git a/ESP32_AP-Flasher/data/www/index.html.gz b/ESP32_AP-Flasher/data/www/index.html.gz index e90b9180..38d88598 100644 Binary files a/ESP32_AP-Flasher/data/www/index.html.gz and b/ESP32_AP-Flasher/data/www/index.html.gz differ diff --git a/ESP32_AP-Flasher/data/www/main.js.gz b/ESP32_AP-Flasher/data/www/main.js.gz index 8f861700..40a0ce77 100644 Binary files a/ESP32_AP-Flasher/data/www/main.js.gz and b/ESP32_AP-Flasher/data/www/main.js.gz differ diff --git a/ESP32_AP-Flasher/data/www/ota.js.gz b/ESP32_AP-Flasher/data/www/ota.js.gz index c25b6050..ec52d031 100644 Binary files a/ESP32_AP-Flasher/data/www/ota.js.gz and b/ESP32_AP-Flasher/data/www/ota.js.gz differ diff --git a/ESP32_AP-Flasher/wwwroot/index.html b/ESP32_AP-Flasher/wwwroot/index.html index c92e86a6..2a893a23 100644 --- a/ESP32_AP-Flasher/wwwroot/index.html +++ b/ESP32_AP-Flasher/wwwroot/index.html @@ -530,6 +530,9 @@ options:

Releases

+ To update to the latest version, use the big 'update now' button if it is shown on top of this screen.
+ To up/downgrade to other versions: for the smoothest experience, first update the ESP32 part and
+ without rebooting, update the filesystem, then reboot the AP and reload the webpage.

diff --git a/ESP32_AP-Flasher/wwwroot/main.js b/ESP32_AP-Flasher/wwwroot/main.js index 803e9298..dd200f7f 100644 --- a/ESP32_AP-Flasher/wwwroot/main.js +++ b/ESP32_AP-Flasher/wwwroot/main.js @@ -494,6 +494,12 @@ function updatecards() { } else { // $('#tag' + tagmac + ' .nextcheckin').innerHTML = ""; } + + if (item.dataset.nextupdate < (Date.now() / 1000) - servertimediff) { + $('#tag' + tagmac + ' .waitingicon').style.display = 'inline-block'; + } else { + $('#tag' + tagmac + ' .waitingicon').style.display = 'none'; + } }) $('#dashboardTagCount').innerHTML = tagcount; diff --git a/ESP32_AP-Flasher/wwwroot/ota.js b/ESP32_AP-Flasher/wwwroot/ota.js index 4ecfde0c..4fddfde3 100644 --- a/ESP32_AP-Flasher/wwwroot/ota.js +++ b/ESP32_AP-Flasher/wwwroot/ota.js @@ -19,7 +19,7 @@ export async function initUpdate() { gModuleType = "ESP32-C6"; gShortName = "C6"; } - else if(apConfig?.H2 && apConfig.H2 == 1) { + else if (apConfig?.H2 && apConfig.H2 == 1) { gIsH2 = true; gModuleType = "ESP32-H2"; gShortName = "H2"; @@ -71,13 +71,15 @@ export async function initUpdate() { print(`current env: ${sdata.env}`); print(`build date: ${formatEpoch(sdata.buildtime)}`); print(`esp32 version: ${sdata.buildversion}`); - if(gModuleType != '') { - var hex_ver = '0000' + sdata.ap_version.toString(16); - print(`${gModuleType} version: ${hex_ver.slice(-4)}`); - } print(`filesystem version: ${filesystemversion}`); print(`psram size: ${sdata.psramsize}`); print(`flash size: ${sdata.flashsize}`); + if (gModuleType !== '') { + let hex_ver = sdata.ap_version && !isNaN(sdata.ap_version) + ? ('0000' + sdata.ap_version.toString(16)).slice(-4) + : 'unknown'; + print(`${gModuleType} version: ${hex_ver}`); + } print("--------------------------", "gray"); env = apConfig.env || sdata.env; if (sdata.env != env) { @@ -90,7 +92,7 @@ export async function initUpdate() { $('#environment').value = env; } - const rdata = await fetch(repoUrl).then(response => response.json()) + const rdata = await fetch(repoUrl).then(response => response.json()) const JsonName = 'firmware_' + gShortName + '.json'; const releaseDetails = rdata.map(release => { const assets = release.assets; @@ -137,7 +139,7 @@ export async function initUpdate() { releaseDetails.forEach(release => { if (rowCounter < 4 && release?.html_url) { const tableRow = document.createElement('tr'); - let tablerow = `${release.tag_name}${release.date}${release.name}`; + let tablerow = `${release.tag_name}${release.date}${release.name}`; if (release.tag_name == currentVer) { tablerow += "current version"; } else if (release.date < formatEpoch(currentBuildtime)) { @@ -150,85 +152,86 @@ export async function initUpdate() { rowCounter++; } if (release?.firmware_url) { - radioFwCounter++; + radioFwCounter++; } }); $('#releasetable').innerHTML = ""; $('#releasetable').appendChild(table); - if(radioFwCounter > 0) { - const table1 = document.createElement('table'); - const tableHeader1 = document.createElement('tr'); + if (radioFwCounter > 0) { + const table1 = document.createElement('table'); + const tableHeader1 = document.createElement('tr'); - tableHeader1.innerHTML = 'ReleaseDateName
Update
VersionRemark'; - table1.appendChild(tableHeader1); + tableHeader1.innerHTML = 'ReleaseDateName
Update
VersionRemark'; + table1.appendChild(tableHeader1); - rowCounter = 0; - for (const release of releaseDetails) { - if (rowCounter < 4 && release?.firmware_url) { - const tableRow = document.createElement('tr'); - var tablerow; - var firmwareVer = "unknown"; - var release_url = release.firmware_url; + rowCounter = 0; + for (const release of releaseDetails) { + if (rowCounter < 4 && release?.firmware_url) { + const tableRow = document.createElement('tr'); + var tablerow; + var firmwareVer = "unknown"; + var release_url = release.firmware_url; tablerow = `${release.tag_name}${release.date}${release.name}`; tablerow += ``; const firmwareUrl = 'http://proxy.openepaperlink.org/proxy.php?url=' + release.firmware_url; - firmwareVer = await fetch(firmwareUrl, { method: 'GET'}) + firmwareVer = await fetch(firmwareUrl, { method: 'GET' }) .then(function (response) { return response.json(); }) - .then(function (response) { - return response[2]['version']; }) - .catch(error => { - print('Error fetching releases:' + error, "red"); - }); - tablerow += '' + firmwareVer + ''; - if(firmwareVer != 'unknown') { - let Ver = Number('0x' + firmwareVer); - if(Ver > gCurrentRfVer) { - tablerow += 'newer'; - } - else if (Ver < gCurrentRfVer) { - tablerow += 'older'; - } - else if(!Number.isNaN(Ver)){ - tablerow += 'current version'; - } - } - tablerow += ''; - tableRow.innerHTML = tablerow; - table1.appendChild(tableRow); - rowCounter++; - } - }; + .then(function (response) { + return response[2]['version']; + }) + .catch(error => { + print('Error fetching releases:' + error, "red"); + }); + tablerow += '' + firmwareVer + ''; + if (firmwareVer != 'unknown') { + let Ver = Number('0x' + firmwareVer); + if (Ver > gCurrentRfVer) { + tablerow += 'newer'; + } + else if (Ver < gCurrentRfVer) { + tablerow += 'older'; + } + else if (!Number.isNaN(Ver)) { + tablerow += 'current version'; + } + } + tablerow += ''; + tableRow.innerHTML = tablerow; + table1.appendChild(tableRow); + rowCounter++; + } + }; - $('#radio_releasetable').innerHTML = ""; - $('#radio_releasetable').appendChild(table1); + $('#radio_releasetable').innerHTML = ""; + $('#radio_releasetable').appendChild(table1); } - const table2 = document.createElement('table'); - { - const tableHeader2 = document.createElement('tr'); - tableHeader2.innerHTML = 'Firmware
Update
'; - table2.appendChild(tableHeader2); - const tableRow = document.createElement('tr'); + const table2 = document.createElement('table'); + { + const tableHeader2 = document.createElement('tr'); + tableHeader2.innerHTML = 'Firmware
Update
'; + table2.appendChild(tableHeader2); + const tableRow = document.createElement('tr'); tablerow = 'Binaries from file system'; - tablerow += ``; - tableRow.innerHTML = tablerow; - table2.appendChild(tableRow); - } - { - const tableRow = document.createElement('tr'); - const Url = "https://raw.githubusercontent.com/" + repo + - "/master/binaries/ESP32-" + gShortName + - "/firmware_" + gShortName + ".json"; + tablerow += ``; + tableRow.innerHTML = tablerow; + table2.appendChild(tableRow); + } + { + const tableRow = document.createElement('tr'); + const Url = "https://raw.githubusercontent.com/" + repo + + "/master/binaries/ESP32-" + gShortName + + "/firmware_" + gShortName + ".json"; tablerow = `Latest version from repo`; - tablerow += ``; - tableRow.innerHTML = tablerow; - table2.appendChild(tableRow); - } - $('#radio_releasetable1').innerHTML = ""; - $('#radio_releasetable1').appendChild(table2); + tablerow += ``; + tableRow.innerHTML = tablerow; + table2.appendChild(tableRow); + } + $('#radio_releasetable1').innerHTML = ""; + $('#radio_releasetable1').appendChild(table2); disableButtons(buttonState); } @@ -454,7 +457,7 @@ export async function updateC6H2(Url) { disableButtons(true); running = true; errors = 0; - const ReleaseUrl = Url.substring(0,Url.lastIndexOf('/')); + const ReleaseUrl = Url.substring(0, Url.lastIndexOf('/')); const consoleDiv = document.getElementById('updateconsole'); consoleDiv.scrollTop = consoleDiv.scrollHeight; const formData = new FormData(); @@ -495,7 +498,7 @@ $('#selectRepo').onclick = function (event) { return fetch(updateUrl); } else { throw new Error("Json file binaries.json and/or filesystem.json not found in the release assets"); - } + } }; }) .then(updateResponse => { @@ -529,7 +532,7 @@ $('#selectRepo').onclick = function (event) { }) .catch(error => { print('Error fetching releases:' + error, "red"); - }); + }); } $('#cancelSelectRepo').onclick = function (event) { @@ -708,7 +711,7 @@ async function fetchAndCheckTagtypes(cleanup) { check = false; } } - + if (check) { let githubUrl = "https://raw.githubusercontent.com/" + repo + "/master/resources/tagtypes/" + filename;