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 = 'Release | Date | Name | Update | Version | Remark | ';
- table1.appendChild(tableHeader1);
+ tableHeader1.innerHTML = 'Release | Date | Name | Update | Version | Remark | ';
+ 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;