Files
2024-07-17 00:07:45 +02:00

164 lines
4.4 KiB
JavaScript

const $ = document.querySelector.bind(document);
let running = false;
let buttonState = false;
const WEBFLASH_ENABLE_AUTOFLASH = 1
const WEBFLASH_ENABLE_USBFLASHER = 2
const WEBFLASH_FOCUS = 3
export const WEBFLASH_BLUR = 4
const WEBFLASH_POWER_ON = 5
const WEBFLASH_POWER_OFF = 6
export async function init() {
wsCmd(WEBFLASH_FOCUS);
checkTagFW();
}
export function wsCmd(command) {
const dataToSend = {
flashcmd: command,
};
const jsonData = JSON.stringify(dataToSend);
socket.send(jsonData);
}
$('#doAutoflash').onclick = function () {
if (running) return;
disableButtons(true);
running = true;
wsCmd(WEBFLASH_ENABLE_AUTOFLASH);
running = false;
disableButtons(false);
}
$('#doUSBflash').onclick = function () {
if (running) return;
disableButtons(true);
running = true;
wsCmd(WEBFLASH_ENABLE_USBFLASHER);
running = false;
disableButtons(false);
}
$('#doPowerOn').onclick = function () {
if (running) return;
disableButtons(true);
running = true;
wsCmd(WEBFLASH_POWER_ON);
running = false;
disableButtons(false);
}
$('#doPowerOff').onclick = function () {
if (running) return;
disableButtons(true);
running = true;
wsCmd(WEBFLASH_POWER_OFF);
running = false;
disableButtons(false);
}
export function print(line, color = "white") {
const consoleDiv = document.getElementById('flashconsole');
if (consoleDiv) {
if (color == "clear") {
consoleDiv.innerHTML = "";
return;
}
const isScrolledToBottom = consoleDiv.scrollHeight - consoleDiv.clientHeight <= consoleDiv.scrollTop;
const newLine = document.createElement('div');
newLine.style.color = color;
if (line.startsWith("<")) {
const existingLines = consoleDiv.getElementsByTagName('div');
let lastLine;
for (let i = existingLines.length - 1; i >= 0; i--) {
const lineText = existingLines[i].textContent;
if (lineText.startsWith(" ")) {
lastLine = existingLines[i];
break;
}
}
if (lastLine) {
lastLine.innerHTML = line.substring(1) + lastLine.innerHTML.substring(line.length - 1);
lastLine.style.color = color;
}
} else if (line.startsWith("\r")) {
const existingLines = consoleDiv.getElementsByTagName('div');
if (existingLines.length > 0) {
const lastLine = existingLines[existingLines.length - 1];
lastLine.innerHTML = line.substring(1);
}
} else {
newLine.textContent = line;
consoleDiv.appendChild(newLine);
}
if (isScrolledToBottom) {
consoleDiv.scrollTop = consoleDiv.scrollHeight;
}
}
}
function disableButtons(active) {
$("#flashtab").querySelectorAll('button').forEach(button => {
button.disabled = active;
});
buttonState = active;
}
const fetchAndPost = async (url, name, path) => {
try {
print("updating " + path);
const response = await fetch(url);
const fileContent = await response.blob();
const formData = new FormData();
formData.append('path', path);
formData.append('file', fileContent, name);
const uploadResponse = await fetch('littlefs_put', {
method: 'POST',
body: formData
});
if (!uploadResponse.ok) {
print(`${response.status} ${response.body}`, "red");
errors++;
} else {
print(`Firmware file downloaded`, "green");
}
} catch (error) {
print('error: ' + error, "red");
errors++;
}
};
async function checkTagFW() {
const fwfile = "/Tag_FW_Pack.bin";
const url = "check_file?path=" + encodeURIComponent(fwfile);
const response = await fetch(url);
if (response.ok) {
const data = await response.json();
if (data.filesize > 0) {
print(`File ${fwfile} found`, "green");
} else {
print(`File ${fwfile} not found. Downloading...`, "red");
await fetchAndPost("https://raw.githubusercontent.com/OpenEPaperLink/OpenEPaperLink/master/binaries/Tag/Tag_FW_Pack.bin", "Tag_FW_Pack.bin", fwfile);
}
} else {
print(`error checking file ${file.path}: ${response.status}`, "red");
errors++;
}
}