This commit is contained in:
j3d1 2023-01-19 07:07:24 +01:00
parent be01d6b985
commit 9de089083c
8 changed files with 191 additions and 144 deletions

View file

@ -259,17 +259,23 @@
</header>
<footer>
<label>
<input type="checkbox" name="onoffswitch" id="led-switch" onclick="gpio(this.value)">
<input type="checkbox" name="onoffswitch" id="led-switch" onclick="gpio(this.checked)">
<span class="toggle button">toggle signal led</span>
</label>
<label>
<span>toggle signal led</span>
<input type="color" onchange="colorTop(this.value)">
<input type="color" oninput="colorTop(this.value)">
</label>
<label>
<span>toggle signal led</span>
<input type="color" onchange="colorBottom(this.value)">
<input type="color" oninput="colorBottom(this.value)">
</label>
<label>
<span>toggle signal led</span>
<input type="range" min="0" max="4096" value="0" class="slider"
oninput="lightSlider(this.value)">
</label>
</footer>
</article>
</div>
@ -279,12 +285,18 @@
<div id="unused_values" style="display:none;"></div>
<script type="text/javascript" src="js/smoothie_min.js"></script>
<script>
var menu = document.getElementById("bmenub");
var voltage = document.getElementById("out_voltage");
var syslog = document.getElementById("syslog");
var menu = document.getElementById("bmenub");
var onoffswitch = document.getElementById("led-switch");
var sbox = document.getElementById('status_box');
var unused_values = {};
var ws;
var retries;
var series = new TimeSeries();
DataView.prototype.setChar = function (pos, char) {
this.setInt8(pos++, char.charCodeAt(0));
return pos;
@ -309,17 +321,20 @@
return pos;
};
function htons(n) {
return ((n & 0xFF) << 8) | ((n >> 8) & 0xFF);
}
function htonl(n) {
return ((n & 0xFF) << 24) | ((n & 0xFF00) << 8) | ((n >> 8) & 0xFF00) | ((n >> 24) & 0xFF);
}
function colorStringToVec(hex) {
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
return result ? [parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)] : null;
}
var ws;
var retries;
var series = new TimeSeries();
function setMsg(cls, text) {
sbox = document.getElementById('status_box');
sbox.className = "label " + cls;
sbox.innerHTML = text;
console.info(text);
@ -344,30 +359,40 @@
retries = 0;
if (typeof evt.data == 'string') {
var data = JSON.parse(evt.data);
for (const [key, value] of Object.entries(data)) {
const elements = document.querySelectorAll(".postfill_" + key);
if (!elements.length)
unused_values[key] = value;
else
for (i = 0; i < elements.length; ++i) {
elements[i].innerHTML = value;
}
}
document.getElementById("unused_values").innerHTML = JSON.stringify(unused_values);
console.log("deprecated json:", data);
} else {
var data = {};
var dv = new DataView(evt.data);
console.log("[0]", dv.getUint8(0));
var cmd = String.fromCharCode(dv.getUint8(0));
let cmds = ["NONE", "RESTART", "CLEAR_CONFIG", "FIRMWARE_FRAME", "FIRMWARE_CHECK", "VOLTAGE_INFO", "SYSTEM_INFO"];
//console.log("[0]", dv.getUint8(0));
let fst = dv.getUint8(0);
var cmd;
if (fst < cmds.length) {
cmd = cmds[fst];
} else {
cmd = String.fromCharCode(fst);
}
var val = dv.getUint16(1);
if (cmd === 'G')
if (cmd === "SYSTEM_INFO") {
data.walltime = htonl(dv.getUint32(1));
data.uptime = htonl(dv.getUint32(5));
data.heap = htonl(dv.getInt32(9));
data.chipid = Number(htonl(dv.getUint32(13))).toString(16);
data.flashid = Number(htonl(dv.getUint32(17))).toString(16);
data.flashsize = htonl(dv.getUint32(21));
} else if (cmd === "VOLTAGE_INFO") {
console.log(cmd, buf2hex(evt.data));
} else if (cmd === "G") {
console.log("LED switched", val);
else if ((cmd === 'F') || (cmd === "C")) {
onoffswitch.checked = !!val;
console.log("LED ", onoffswitch);
} else if ((cmd === "F") || (cmd === "C")) {
receive_chunk_confirmation(dv);
} else if (cmd === 'V') {
} else if (cmd === "V") {
voltage.innerHTML = (val * 13 / 1024).toFixed(2);
series.append(new Date().getTime(), val);
} else if (cmd === 'L') {
} else if (cmd === "L") {
var len = dv.getUint8(1);
var offset = dv.getUint16(2);
var str = "";
@ -376,9 +401,22 @@
syslog.innerHTML = syslog.innerHTML.slice(0, offset) + str;
const scrollingElement = (document.scrollingElement || document.body);
scrollingElement.scrollTop = scrollingElement.scrollHeight;
} else
} else {
console.log("[0]", dv.getUint8(0));
console.log('unknown command', cmd, val);
console.log(cmd);
}
}
for (const [key, value] of Object.entries(data)) {
const elements = document.querySelectorAll(".postfill_" + key);
if (!elements.length)
unused_values[key] = value;
else
for (i = 0; i < elements.length; ++i) {
elements[i].innerHTML = value;
}
}
document.getElementById("unused_values").innerHTML = JSON.stringify(unused_values);
}
function wsOpen() {
@ -448,11 +486,23 @@
wsWrite(header);
}
function lightSlider(val) {
var header = new ArrayBuffer(8);
var headerview = new DataView(header);
headerview.setChar(0, 'J');
headerview.setInt32(4, val);
console.log(buf2hex(header));
wsWrite(header);
}
window.onload = function () {
wsOpen();
startPolling();
}
var firmware_file;
const chunk_size = 512;
var makeCRCTable = function () {
var c;
var crcTable = [];
@ -478,8 +528,6 @@
return (crc ^ (-1)) >>> 0;
};
var firmware_file;
function load_firmware(evt) {
var file = evt.target.files[0];
if (!file) {
@ -493,8 +541,6 @@
reader.readAsArrayBuffer(file)
}
const chunk_size = 512;
function transmit_firmware_chunk(buf, i) {
return new Promise((resolve, reject) => {
const begin = i * chunk_size;
@ -556,6 +602,13 @@
}
}
function update_progress(progressBar, progress) {
var iP = Math.floor(progress);
var dBar = document.getElementById("progress_bar_" + progressBar);
dBar.innerText = iP + "%";
dBar.style.width = progress + "%";
}
var sta_toggle = document.getElementById("sta_toggle");
var sta_ssid = document.getElementById("sta_ssid");
var sta_pw = document.getElementById("sta_pw");
@ -597,13 +650,6 @@
tx_len = view1.setInt8Vec(tx_len, [255, 255, 255, 0]);
wsWrite(buffer);
}
function update_progress(progressBar, progress) {
var iP = Math.floor(progress);
var dBar = document.getElementById("progress_bar_" + progressBar);
dBar.innerText = iP + "%";
dBar.style.width = progress + "%";
}
</script>
</body>
</html>
</html>