import {Controller} from "./main"; import {VersionInfo} from "./api"; function fmtBytes(n: number): string { return `${n} B (${(n / 1024).toFixed(1)} KiB)`; } export class OTAView { readonly file1Upload: HTMLInputElement; readonly firmware_buildtime: HTMLDivElement; readonly firmware_githash: HTMLDivElement; readonly firmware_partition: HTMLDivElement; readonly firmware_state0: HTMLDivElement; readonly firmware_state1: HTMLDivElement; readonly heap_free: HTMLDivElement; readonly heap_used: HTMLDivElement; readonly heap_total: HTMLDivElement; readonly heap_max_used: HTMLDivElement; constructor(controller: Controller) { (document.getElementById("firmwareview") as HTMLElement).innerHTML = require("./ota.html") let test = document.getElementById("test") as HTMLButtonElement; let refresh = document.getElementById("refresh_firmware_info") as HTMLButtonElement; this.firmware_buildtime = document.getElementById("firmware_buildtime") as HTMLDivElement; this.firmware_githash = document.getElementById("firmware_githash") as HTMLDivElement; this.firmware_partition = document.getElementById("firmware_partition") as HTMLDivElement; this.firmware_state0 = document.getElementById("firmware_state0") as HTMLDivElement; this.firmware_state1 = document.getElementById("firmware_state1") as HTMLDivElement; this.heap_free = document.getElementById("heap_free") as HTMLDivElement; this.heap_used = document.getElementById("heap_used") as HTMLDivElement; this.heap_total = document.getElementById("heap_total") as HTMLDivElement; this.heap_max_used = document.getElementById("heap_max_used") as HTMLDivElement; const file = document.getElementById("firmware_file") as HTMLInputElement; this.file1Upload = file this.file1Upload.onchange = () => { const selectedFile = file.files?.[0]; if (selectedFile == null) { //TODO error dialog here return } controller.uploadNewFirmware(selectedFile); }; test.onclick = () => { controller.selfTest(); } refresh.onclick = () => { controller.version(); } } setVersion(versionInfo: VersionInfo) { this.firmware_buildtime.innerText = versionInfo.build_time; this.firmware_githash.innerText = versionInfo.git_hash; this.firmware_partition.innerText = versionInfo.current; this.firmware_state0.innerText = versionInfo.slot0_state; this.firmware_state1.innerText = versionInfo.slot1_state; this.heap_free.innerText = fmtBytes(versionInfo.heap_free); this.heap_used.innerText = fmtBytes(versionInfo.heap_used); this.heap_total.innerText = fmtBytes(versionInfo.heap_total); this.heap_max_used.innerText = fmtBytes(versionInfo.heap_max_used); } }