aboutsummaryrefslogtreecommitdiff
path: root/aepd/share/aepscope.html
diff options
context:
space:
mode:
Diffstat (limited to 'aepd/share/aepscope.html')
-rw-r--r--aepd/share/aepscope.html218
1 files changed, 176 insertions, 42 deletions
diff --git a/aepd/share/aepscope.html b/aepd/share/aepscope.html
index dc68053..634c933 100644
--- a/aepd/share/aepscope.html
+++ b/aepd/share/aepscope.html
@@ -44,21 +44,8 @@
<div id=wsdi_status>Not initialized</div>
</td>
<td>
- Resolution<br>
- <select id=rate onchange="update_options();">
- <option value=1>100us</option>
- <option value=2>200us</option>
- <option value=5>500us</option>
- <option value=10>1ms</option>
- <option value=20>2ms</option>
- <option value=50>5ms</option>
- <option value=100>10ms</option>
- <option value=200>20ms</option>
- <option value=500>50ms</option>
- <option value=1000>100ms</option>
- <option value=5000>500ms</option>
- <option value=10000>1s</option>
- </select>
+ <table><tr><td>Time zoom</td><td><div id=tb></div></td></tr><tr><td colspan="2">
+ <input type="range" id="rate" min="0" max="14" onchange="update_options();"></td></tr></table>
</td>
<td>
<div id=val>-</div>
@@ -67,8 +54,8 @@
</table>
</td>
</tr>
- <tr>
- <td>
+ <tr style="vertical-align:top">
+ <td style="vertical-align:top">
<table style="background-color:#000000">
<tr>
<td id=pane0>
@@ -76,8 +63,8 @@
</tr>
</table>
</td>
- <td>
- <div id="cha"></div>
+ <td style="vertical-align:top">
+ <div style="vertical-align:top" id="cha"></div>
</td>
</tr>
</table>
@@ -110,12 +97,84 @@ var ylen = 400;
var bounce = 0;
var last_head = -1;
+var ch_name_to_index = new Array();
var ch_name = new Array();
var ch_supply = new Array();
var ch_colour = new Array();
var ch_class = new Array();
+var ch_flags = new Array();
+var ch_order = new Array();
var ov;
+var worst_depth;
+var order;
+var do_title = 0;
+
+var rates = [ 10000, 5000, 2000, 1000, 500, 200, 100, 50, 20, 10, 5, 4, 3, 2, 1 ];
+var srates = [ "1s", "500ms", "200ms", "100ms", "50ms", "20ms", "10ms", "5ms", "2ms", "1ms", "500us", "400us", "300us", "200us", "100us" ];
+
+const CHFLAG_TOPLEVEL = 1;
+const CHFLAG_VIRTUAL = 2;
+
+function channel_index_from_name(name)
+{
+ var n;
+
+ for (n = 0; n < ov; n++)
+ if (ch_name[n] == name)
+ return n;
+
+ return undefined;
+}
+
+function get_toplevel_supply(name)
+{
+ var n, m;
+ n = channel_index_from_name(name);
+ if (n == undefined)
+ return undefined;
+
+ if (n >= chans)
+ ch_flags[n] |= CHFLAG_VIRTUAL;
+
+ m = channel_index_from_name(ch_supply[n]);
+ if (m == undefined) {
+ ch_flags[n] |= CHFLAG_TOPLEVEL;
+ return name;
+ }
+
+ return get_toplevel_supply(ch_supply[n]);
+}
+
+function do_all_children(name, depth, total_depth)
+{
+ var n;
+
+ if (depth > worst_depth)
+ worst_depth = depth;
+
+ n = channel_index_from_name(name);
+
+ if (n >= chans)
+ fcol = "#808080";
+ else
+ fcol = "#000000";
+
+ if (total_depth) {
+ tab += '<tr><td style="background-color: '+ch_colour[n]+'">&nbsp;&nbsp;&nbsp;&nbsp;</td>';
+ tab += '<td colspan="'+ depth +'">&nbsp;</td>';
+ tab += '<td colspan="'+(total_depth - depth)+'"><font style="color:' + fcol + '">'+ name;
+ if (ch_flags[n] & CHFLAG_TOPLEVEL)
+ tab += ' top ';
+ tab += ' '+ch_flags[n]+' ';
+ tab += "</font></td><td>-</td><td>-</td><td>-</td></tr>";
+ ch_order[order++] = n;
+ }
+ for (n = 0; n < ov; n++) {
+ if (ch_supply[n] == name)
+ do_all_children(ch_name[n], depth + 1, total_depth);
+ }
+}
function get_appropriate_ws_url()
{
@@ -161,14 +220,15 @@ function conn_retry()
socket.onmessage = function got_packet(msg) {
- if (msg.data[0] == '=')
+ if (msg.data[0] == '=') {
channel_data = 1;
- else
+ do_title = 1;
+ ov = 0;
+ } else
channel_data = 0;
z = msg.data.split(';');
- ov = 0;
block = 0;
while (block < (z.length - 1)) {
@@ -176,19 +236,23 @@ function conn_retry()
if (channel_data) {
if (!block)
- ch_name[ov] = y[0].substr(1);
+ f = y[0].substr(1);
else
- ch_name[ov] = y[0];
+ f = y[0];
+ ch_name[ov] = f;
ch_supply[ov] = y[1];
ch_colour[ov] = y[2];
- ch_class[ov++] = y[3];
+ ch_class[ov] = y[3];
+ ch_order[ov] = -1;
+ ch_flags[ov] = 0;
+ ov++;
block++;
continue;
}
chan = 0;
- while (chan < (y.length - 1)) {
+ while (chan < y.length) {
x = y[chan].split(' ');
if (x.length != 3) {
@@ -229,11 +293,66 @@ function conn_retry()
block++;
}
- if (channel_data) {
- tab = "<table>";
+ if (!channel_data && do_title) {
+ var n, b, found, done_list;
+
+ done_list = new Array;
+ worst_depth = 0;
+ order = 0;
+ b = "?";
+
for (n = 0; n < ov; n++) {
- tab += '<tr><td style="background-color: '+ch_colour[n]+'">&nbsp;&nbsp;</td><td>' + ch_name[n] +"</td></tr>";
+
+ b = get_toplevel_supply(ch_name[n]);
+
+ found = 0;
+ for (y = 0; y < done_list.length; y++)
+ if (done_list[y] == b) {
+ found = 1;
+ y = done_list.length;
+ }
+
+ if (found)
+ continue;
+ done_list.push(b);
+
+ do_all_children(b, 1, 0);
}
+
+ document.getElementById("val").textContent = chans + ' ' + ov;
+
+ do_title = 0;
+
+ tab = '<table><tr style="background-color: #000000"><td></td>';
+
+ for (n = 0; n < worst_depth; n++)
+ tab += "<td>&nbsp;</td>";
+
+ tab+= '<td align=center style="vertical-align:middle"><font style="color: #ffffff">Rail</font></td>';
+ tab+= '<td align=center style="vertical-align:middle"><font style="color: #ffffff">V</font></td>';
+ tab+= '<td align=center style="vertical-align:middle"><font style="color: #ffffff">A</font></td>';
+ tab+= '<td align=center style="vertical-align:middle"><font style="color: #ffffff">W</font></td>';
+ tab += '</tr>';
+
+ done_list = new Array;
+ for (n = 0; n < ov; n++) {
+
+ b = get_toplevel_supply(ch_name[n]);
+
+ found = 0;
+ for (y = 0; y < done_list.length; y++)
+ if (done_list[y] == b) {
+ found = 1;
+ y = done_list.length;
+ }
+
+ if (found)
+ continue;
+ done_list.push(b);
+
+ do_all_children(b, 1, worst_depth + 1);
+ }
+
tab += "</table>";
document.getElementById("cha").innerHTML = tab;
@@ -280,9 +399,9 @@ function units(n) {
function show(cv)
{
- var n, p, y, chan, q;
+ var n, p, y, chan, q, z, peak;
- if (!connection)
+ if (!connection || !ring_size)
return;
if (last_head == ring_head)
@@ -306,27 +425,40 @@ function show(cv)
y = ylen - 2;
chan = 0;
- while (chan < chans) {
+ peak = ylen;
+ while (chan < ch_order.length) {
+
+ z = ch_order[chan];
+ if (z < chans && z != undefined) {
- ctx.lineWidth = 1;
- ctx.strokeStyle = ch_colour[chan];
+ ctx.lineWidth = 1;
+ ctx.strokeStyle = ch_colour[z];
- ctx.beginPath();
+ ctx.beginPath();
- p = (ringW[chan][q] * ylen) / watts_fullscale;
+ p = (ringW[z][q] * (ylen - 4)) / watts_fullscale;
- ctx.moveTo(n + 0.5, y);
- ctx.lineTo(n + 0.5, y - p);
+ if ((ch_flags[z] & (CHFLAG_TOPLEVEL | CHFLAG_VIRTUAL)) == CHFLAG_TOPLEVEL) {
+ ctx.moveTo(n + 0.5, ylen - 2);
+ ctx.lineTo(n + 0.5, ylen - 2 - p);
+ peak = ylen - 2 - p;
+ } else {
- y -= p;
+ ctx.moveTo(n + 0.5, y);
+ ctx.lineTo(n + 0.5, y - p);
- ctx.stroke();
+ y -= p;
+ }
+ ctx.stroke();
+ }
chan++;
}
ctx.lineWidth = 1;
ctx.strokeStyle = '#ffffff';
ctx.beginPath();
+ if (peak < y)
+ y = peak;
ctx.moveTo(n, y);
ctx.lineTo(n, 1);
ctx.stroke();
@@ -339,8 +471,9 @@ function show(cv)
function update_options()
{
rate = document.getElementById("rate").value;
- localStorage["ivmon.rate"] = rate;
- socket.send("r"+(rate)+"\n");
+ localStorage["ivmon.rate"] = document.getElementById("rate").value;
+ document.getElementById("tb").textContent = srates[rate];
+ socket.send("r"+rates[rate]+" "+xlen+"\n");
}
/*
@@ -482,6 +615,7 @@ if (localStorage["ivmon.rate"]) {
rate = document.getElementById("rate").value =
parseInt(localStorage["ivmon.rate"]);
document.getElementById("rate").value = rate;
+ //update_options();
}
grayOut(true,{'zindex':'499'});