summaryrefslogtreecommitdiffhomepage
path: root/static/js/ws.js
diff options
context:
space:
mode:
authorPrivate Island Networks Inc <opensource@privateisland.tech>2026-03-03 15:56:53 -0500
committerPrivate Island Networks Inc <opensource@privateisland.tech>2026-03-03 15:56:53 -0500
commitab6ca080771b706a310ebfd8a4192841cdfef05c (patch)
treef9da21650402f17330d68bb7d6f86b031191ddb9 /static/js/ws.js
initial commit of experimental code base for PI Explorer (PI-EXP)HEADmain
Diffstat (limited to 'static/js/ws.js')
-rw-r--r--static/js/ws.js147
1 files changed, 147 insertions, 0 deletions
diff --git a/static/js/ws.js b/static/js/ws.js
new file mode 100644
index 0000000..bc814ff
--- /dev/null
+++ b/static/js/ws.js
@@ -0,0 +1,147 @@
+/*
+ * Copyright (C) 2026 Private Island Networks Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * file: ws.js
+ *
+ */
+
+"use strict";
+
+let socket = new WebSocket("ws://localhost:8010/logger");
+console.log("here we go");
+let state = "Wait";
+let log = document.getElementById('mc-log');
+
+function log_msg(msg) {
+ let msg_str = '';
+
+ if (msg.num_cmds > 1) {
+ console.log('multi commands');
+ }
+
+ for (let i = 0; i < msg.num_cmds; i++) {
+ if (msg.cmds[i][0].includes('RDREG') || msg.cmds[i][0].includes('GETTEMP')) {
+ msg_str += msg.cmds[i][0] + ' ' + msg.cmds[i][1] + '<br>';
+ }
+ else if (msg.cmds[i][0] == "" && (msg.cmds[i][1] == "PHY1_STATUS" || msg.cmds[i][1] == "PHY2_STATUS")) {
+ let val = parseInt(msg.cmds[i][2], 16) & 0x8;
+ if (val) {
+ msg_str += msg.cmds[i][1] + ': LOS = 1' + '<br>';
+ }
+ else {
+ msg_str += msg.cmds[i][1] + ': LOS = 0' + '<br>';
+ }
+ }
+ else {
+ msg_str += msg.cmds[i][0] + ' ' + msg.cmds[i][1] + ' ' + msg.cmds[i][2] + '<br>';
+ }
+ }
+
+ return msg_str;
+}
+
+// setInterval(function(){console.log(state)},1000);
+
+socket.onopen = function(e) {
+ console.log("[open] Connection established");
+ console.log("Sending to server");
+ socket.send("open"); // can send data as a string, Blob, or ArrayBuffer.
+};
+
+function update_mode(mode) {
+ if (mode == MODE_IDLE)
+ $('#mc-mode').innerText = "Idle";
+ else if (mode == MODE_LIVE || mode == MODE_FILE)
+ $('#mc-mode').innerText = "Running";
+ else
+ console.log("unsupported mode")
+}
+
+socket.onmessage = function(event) {
+ let num_msgs = 0;
+
+ let msg = JSON.parse(event.data);
+ if (msg.format == MSG_FORMAT_BASIC) {
+ if (typeof msg['mode'] !== "undefined") {
+ console.log("mode: ", msg['mode']);
+ update_mode(msg['mode']);
+ }
+ else if (typeof msg['fw_version'] !== "undefined") {
+ console.log("fw_version: ", msg['fw_version']);
+ update_fw_version(msg['fw_version']);
+ }
+ else if (typeof msg['fw_increment'] !== "undefined") {
+ console.log("fw_increment: ", msg['fw_increment']);
+ update_fw_increment(msg['fw_increment']);
+ }
+ else if (typeof msg['temperature'] !== "undefined") {
+ console.log("temperature: ", msg['temperature']);
+ update_temperature(msg['temperature']);
+ }
+ else
+ console.log("unsupported control");
+
+ return;
+ }
+
+ let height = 2 * msg.num_cmds;
+ if (height == 0) {
+ height = 2;
+ }
+
+ num_msgs += 1;
+ console.log("From server:", num_msgs, ': ', msg);
+
+ if (msg.port == PORT_PC) {
+ log.innerHTML += '<div class="mc-log-row style=height:' + height.toString() + 'rem"><div class="mc-log-col-time">' + msg.time + '</div>' +
+ '<div class="mc-log-col-pc">' + log_msg(msg) + '</div>' +
+ '<div class="mc-log-col-phy0"></div>' +
+ '<div class="mc-log-col-phy1"></div></div>';
+ }
+ else if (msg.port == PORT_PHY0) {
+ log.innerHTML += '<div class="mc-log-row"><div class="mc-log-col-time">' + msg.time + '</div>' +
+ '<div class="mc-log-col-pc"></div>' +
+ '<div class="mc-log-col-phy0">' + log_msg(msg) +
+ '</div><div class="mc-log-col-phy1"></div></div>';
+ }
+ else if (msg.port == PORT_PHY1) {
+ log.innerHTML += '<div class="mc-log-row"><div class="mc-log-col-time">' + msg.time + '</div>' +
+ '<div class="mc-log-col-pc"></div>' +
+ '<div class="mc-log-col-phy0"></div>' +
+ '<div class="mc-log-col-phy1">' + log_msg(msg) + '</div></div>';
+ }
+
+ // socket.send("request");
+ state = "Request"
+};
+
+socket.onclose = function(event) {
+ state = "Closed"
+ if (event.wasClean) {
+ console.log(`[close] Connection closed cleanly, code=${event.code} reason=${event.reason}`);
+ } else {
+ // e.g. server process killed or network down
+ // event.code is usually 1006 in this case
+ console.log('[close] Connection died');
+ }
+};
+
+socket.onerror = function(error) {
+ state = "Error"
+ console.log(`[error]`);
+};
+
+// When you've finished using the WebSocket connection,
+// call the WebSocket method close():

Highly Recommended Verilog Books