diff options
| author | Private Island Networks Inc <opensource@privateisland.tech> | 2026-03-03 15:56:53 -0500 |
|---|---|---|
| committer | Private Island Networks Inc <opensource@privateisland.tech> | 2026-03-03 15:56:53 -0500 |
| commit | ab6ca080771b706a310ebfd8a4192841cdfef05c (patch) | |
| tree | f9da21650402f17330d68bb7d6f86b031191ddb9 /static/js/ws.js | |
Diffstat (limited to 'static/js/ws.js')
| -rw-r--r-- | static/js/ws.js | 147 |
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(): |



