webinterface should be ready.

origin
steffen 5 years ago
parent 36a930c06d
commit 277e8934b2

@ -41,6 +41,9 @@ JSONParse Blocks::_GetJSON(int idx) {
s = blocks[idx].name; json.AddObject("name", s);
json.AddObject("flags", blocks[idx].flags);
json.AddObject("lockedby", blocks[idx].lockedby);
json.AddObject("sensor_pos_1", blocks[idx].s_pos_1);
json.AddObject("sensor_center", blocks[idx].s_center);
json.AddObject("sensor_neg_1", blocks[idx].s_neg_1);
return json;
};
@ -98,6 +101,16 @@ Block Blocks::GetBlockFromJSON(JSONParse *j) {
j->GetValue("name", &s);
strncpy (bl.name, s.c_str(), REFERENCENAME_LEN);
j->GetValueInt("flags", &bl.flags);
// j->GetValue("lockedby", &s);
// strncpy (bl.lockedby, s.c_str(), REFERENCENAME_LEN);
s = ""; j->GetValue("sensor_pos_1", &s);
strncpy (bl.s_pos_1, s.c_str(), REFERENCENAME_LEN);
s = ""; j->GetValue("sensor_center", &s);
strncpy (bl.s_center, s.c_str(), REFERENCENAME_LEN);
s = ""; j->GetValue("sensor_neg_1", &s);
strncpy (bl.s_neg_1, s.c_str(), REFERENCENAME_LEN);
printf ("%s:%d Sensor (%s ---> %s ---> %s\n", __FILE__, __LINE__, bl.s_pos_1, bl.s_center, bl.s_neg_1);
return bl;
};

@ -14,7 +14,8 @@
struct s_Block {
char name[REFERENCENAME_LEN];
char s_pos_1[REFERENCENAME_LEN];
char s_pos_1[REFERENCENAME_LEN]; //
char s_center[REFERENCENAME_LEN];
char s_neg_1[REFERENCENAME_LEN];
int flags;

@ -6,7 +6,9 @@
#include "server.h"
#define LOCO_F_REVERSE 0x0001
#define LOCO_F_CARGO 0x0002
#define LOCO_F_CARGO 0x0010
#define LOCO_F_CANREVERSE 0x0020
#define LOCO_F_SHORTTRAIN 0x0040
#define LOCO_F_AUTO 0x0100
#define LOCO_F_RANDOM 0x0200

@ -19,6 +19,11 @@ function block_Update(blockdata) {
if (blockdata.name == blocks[i].name) {
blocks[i].name = blockdata.name;
blocks[i].flags = blockdata.flags;
blocks[i].lockedby = blockdata.lockedby;
blocks[i].sensor_pos_1 = blockdata.sensor_pos_1,
blocks[i].sensor_center = blockdata.sensor_center,
blocks[i].sensor_neg_1 = blockdata.sensor_neg_1
blockdetail_setData(blocks[i]);
return;
}
}
@ -27,7 +32,10 @@ function block_Update(blockdata) {
//debug ("Add Interface:" + intdata.name + "(" + intdata.host + ")");
blocks.push ({
name: blockdata.name,
flags: blockdata.flags
flags: blockdata.flags,
sensor_pos_1: blockdata.sensor_pos_1,
sensor_center: blockdata.sensor_center,
sensor_neg_1: blockdata.sensor_neg_1
});
};
@ -63,27 +71,27 @@ function block_contextmenu(name) {
innerhtml += "<option value=\""+locomotives[i].name+"\">"+locomotives[i].name+"</option>";
}
innerhtml += "</select></label><br>";
innerhtml += "<button id=\"contextbox_AsgnLD\" type=\"button\">Assign &lArr;&dArr;</button><br>";
innerhtml += "<button id=\"contextbox_AsgnRU\" type=\"button\">Assign &rArr;&uArr;</button><br>";
innerhtml += "<button id=\"contextbox_SetDLD\" type=\"button\">Go &lArr;&dArr;</button><br>";
innerhtml += "<button id=\"contextbox_SetDRU\" type=\"button\">Go &rArr;&uArr;</button><hr>";
innerhtml += "<button id=\"contextbox_AsgnLU\" type=\"button\">Assign &lArr;&uArr;</button><br>";
innerhtml += "<button id=\"contextbox_AsgnRD\" type=\"button\">Assign &rArr;&dArr;</button><br>";
innerhtml += "<button id=\"contextbox_SetDLU\" type=\"button\">Go &lArr;&uArr;</button><br>";
innerhtml += "<button id=\"contextbox_SetDRD\" type=\"button\">Go &rArr;&dArr;</button><hr>";
innerhtml += "<button id=\"contextbox_Clear\" type=\"button\">Clear</button><br>";
innerhtml += "<button id=\"contextbox_Off\" type=\"button\">Off</button><hr>";
innerhtml += "<button id=\"contextbox_Close\" type=\"button\">Close</button></center>";
gContextmenuCreate(name, innerhtml);
gAddEventListener("contextbox_AsgnLD", 'click', block_ctxmenu_AssignLD);
gAddEventListener("contextbox_AsgnRU", 'click', block_ctxmenu_AssignRU);
gAddEventListener("contextbox_SetDLD", 'click', block_ctxmenu_DestinationLD);
gAddEventListener("contextbox_SetDRU", 'click', block_ctxmenu_DestinationRU);
gAddEventListener("contextbox_AsgnLU", 'click', block_ctxmenu_AssignLU);
gAddEventListener("contextbox_AsgnRD", 'click', block_ctxmenu_AssignRD);
gAddEventListener("contextbox_SetDLU", 'click', block_ctxmenu_DestinationLU);
gAddEventListener("contextbox_SetDRD", 'click', block_ctxmenu_DestinationRD);
gAddEventListener("contextbox_Clear", 'click', block_ctxmenu_Clear);
gAddEventListener("contextbox_Off", 'click', block_ctxmenu_Off);
gAddEventListener("contextbox_Close", 'click', gContextmenuClose);
};
function block_ctxmenu_DestinationLD (element, value) {
function block_ctxmenu_DestinationLU (element, value) {
let loc = document.getElementById("contextbox_loc");
if (loc) {
locomotive_server_Dest(loc.value, element.name, 1);
@ -92,7 +100,7 @@ function block_ctxmenu_DestinationLD (element, value) {
};
function block_ctxmenu_DestinationRU (element, value) {
function block_ctxmenu_DestinationRD (element, value) {
let loc = document.getElementById("contextbox_loc");
if (loc) {
locomotive_server_Dest(loc.value, element.name, 0);
@ -101,7 +109,7 @@ function block_ctxmenu_DestinationRU (element, value) {
};
function block_ctxmenu_AssignLD (element, value) {
function block_ctxmenu_AssignLU (element, value) {
let loc = document.getElementById("contextbox_loc");
let name = document.getElementById("ConextMenuHead").innerHTML;
if (loc) {
@ -111,7 +119,7 @@ function block_ctxmenu_AssignLD (element, value) {
};
function block_ctxmenu_AssignRU (element, value) {
function block_ctxmenu_AssignRD (element, value) {
let loc = document.getElementById("contextbox_loc");
let name = document.getElementById("ConextMenuHead").innerHTML;
if (loc) {
@ -175,28 +183,67 @@ function block_server_Off(blockname) {
// if create is set the name should be filled in
function blockdetail_show(name, create) {
var win = document.getElementById("blockdetail");
debug ("blockdetail_show");
if (!win) {
debug ("blockdetail_show create window");
win = gWindowCreate("blockdetail", "Block", 400, 300, " \
let innerHTML = " \
<div style=\"float: left\"> \
Block Name: <input id=\"blockdet_name\" style=\"width: 100\"> \
</div> <div style=\"float: right\"> \
<button id=\"blockdet_PREV\">&lt</button> \
<button id=\"blockdet_NEXT\">&gt</button> \
</div> <br> <hr>\
<div> \
<table><tr><td><table>\
</td></tr></table> </div> <hr>\
</div><br><hr>\
<div>\
\
<table><tr><td>\
\
<table><tr><td> \
<label><input id=\"blockdet_flagoff\" type=\"checkbox\" value=\"\" disabled>Off Service</label><br> \
<label><input id=\"blockdet_flagshort\" type=\"checkbox\" value=\"\">Short</label><br>\
<label><input id=\"blockdet_flaglong\" type=\"checkbox\" value=\"\">Long</label> \
</td><td> \
<label><input id=\"blockdet_flagend\" type=\"checkbox\" value=\"\">End</label><br> \
<label><input id=\"blockdet_flagspeedlimit\" type=\"checkbox\" value=\"\">Speed Limit</label><br> \
</td></tr></table> \
\
</td><td></td></tr></table> \
<fieldset><legend>Automatic Mode</legend><table> \
<tr><td>Lockedby:</td><td><input id=\"blockdet_lockedby\" style=\"width: 100\" disabled></td></tr>\
<tr><td>Sensor &larr;&uarr;:</td><td><label><select id=\"blockdet_sensorLU\">";
innerHTML += "<option value=\"\"></option>";
for (var i = 0; i < sensors.length; i++) {
if (sensors[i].name)
innerHTML += "<option value=\""+sensors[i].name+"\">"+sensors[i].name+"</option>";
}
innerHTML += "</select></label></td></tr>\
<tr><td>Sensor Center:</td><td><label><select id=\"blockdet_sensorC\">";
innerHTML += "<option value=\"\"></option>";
for (var i = 0; i < sensors.length; i++) {
if (sensors[i].name)
innerHTML += "<option value=\""+sensors[i].name+"\">"+sensors[i].name+"</option>";
}
innerHTML += "</select></label></td></tr>\
<tr><td>Sensor &rarr;&darr;:</td><td><label><select id=\"blockdet_sensorRD\">";
innerHTML += "<option value=\"\"></option>";
for (var i = 0; i < sensors.length; i++) {
if (sensors[i].name)
innerHTML += "<option value=\""+sensors[i].name+"\">"+sensors[i].name+"</option>";
}
innerHTML += "</select></label></td></tr>\
</table></fileset>\
</div> <hr>\
<div align=right> \
<button id=\"blockdet_SAVE\" type=\"button\">Save</button> \
<button id=\"blockdet_DELETE\" type=\"button\">Delete</button> \
<button id=\"blockdet_CLOSE\">Close</button> \
</div> \
\
");
";
debug ("blockdetail_show");
if (!win) {
debug ("blockdetail_show create window");
win = gWindowCreate("blockdetail", "Block", 450, 300, innerHTML);
gAddEventListener("blockdet_CLOSE", 'click', blockdetail_cb_close);
gAddEventListener("blockdet_DELETE", 'click', blockdetail_cb_delete);
@ -301,11 +348,25 @@ function blockdetail_cb_prev () {
//
function blockdetail_setData(elm) {
var name = document.getElementById("blockdet_name");
var flags = document.getElementById("blockdet_flags");
var flagoff = document.getElementById("blockdet_flagoff");
var flagshort = document.getElementById("blockdet_flagshort");
var flaglong = document.getElementById("blockdet_flaglong");
var flagend = document.getElementById("blockdet_flagend");
var flagspeedlimit = document.getElementById("blockdet_flagspeedlimit");
var sensorLU = document.getElementById("blockdet_sensorLU");
var sensorC = document.getElementById("blockdet_sensorC");
var sensorRD = document.getElementById("blockdet_sensorRD");
if (elm) {
if (name) name.value = elm.name;
if (flags) flags.value = elm.flags;
if (flagoff) flagoff.checked = Number(elm.flags) & BLOCK_F_OFF;
if (flagshort) flagshort.checked = Number(elm.flags) & BLOCK_F_SHORT;
if (flaglong) flaglong.checked = Number(elm.flags) & BLOCK_F_LONG;
if (flagend) flagend.checked = Number(elm.flags) & BLOCK_F_ENDSTATION;
if (flagspeedlimit) flagspeedlimit.checked = Number(elm.flags) & BLOCK_F_SPEEDLIMIT;
if (sensorLU) sensorLU.value = elm.sensor_pos_1;
if (sensorC) sensorC.value = elm.sensor_center;
if (sensorRD) sensorRD.value = elm.sensor_neg_1;
}
};
@ -317,11 +378,24 @@ function blockdetail_setData(elm) {
function blockdetail_getData() {
var res = { name: "", flags:0 };
var name = document.getElementById("blockdet_name");
var flags = document.getElementById("blockdet_flags");
var flagoff = document.getElementById("blockdet_flagoff");
var flagshort = document.getElementById("blockdet_flagshort");
var flaglong = document.getElementById("blockdet_flaglong");
var flagend = document.getElementById("blockdet_flagend");
var flagspeedlimit = document.getElementById("blockdet_flagspeedlimit");
var sensorLU = document.getElementById("blockdet_sensorLU");
var sensorC = document.getElementById("blockdet_sensorC");
var sensorRD = document.getElementById("blockdet_sensorRD");
if (name) res.name = name.value;
if (flags) res.flags = flags.value;
if (flagoff.checked) res.flags |= BLOCK_F_OFF;
if (flagshort.checked) res.flags |= BLOCK_F_SHORT;
if (flaglong.checked) res.flags |= BLOCK_F_LONG;
if (flagend.checked) res.flags |= BLOCK_F_ENDSTATION;
if (flagspeedlimit.checked) res.flags |= BLOCK_F_SPEEDLIMIT;
if (sensorLU) res.sensor_pos_1 = sensorLU.value;
if (sensorC) res.sensor_center = sensorC.value;
if (sensorRD) res.sensor_neg_1 = sensorRD.value;
return res;
};

@ -3,7 +3,9 @@
//
const LOCO_F_REVERSE = 0x0001;
const LOCO_F_CARGO = 0x0002;
const LOCO_F_CARGO = 0x0010;
const LOCO_F_CANREVERSE = 0x0020;
const LOCO_F_SHORTTRAIN = 0x0040;
const LOCO_F_AUTO = 0x0100;
const LOCO_F_RANDOM = 0x0200;
@ -113,9 +115,6 @@ function locomotive_server_Dest(locname, blockname, reverse) {
//
// send delete element to server
//
@ -133,7 +132,7 @@ function locodetail_show(loconame) {
if (!win) {
debug ("loco_showdetail create window");
win = gWindowCreate("locodetail", "Locomotive", 400, 500, " \
win = gWindowCreate("locodetail", "Locomotive", 450, 500, " \
<div style=\"float: left\"> \
Name: <input id=\"locodet_name\" style=\"width: 100\"> \
</div> <div style=\"float: right\"> \
@ -147,14 +146,16 @@ function locodetail_show(loconame) {
</div> <hr>\
<div> <table><tr><td> \
<table><tr><td> \
<label><input id=\"locodet_reverse\" type=\"checkbox\" value=\"\"> Reverse</label><br> \
<label><input id=\"locodet_cargo\" type=\"checkbox\" value=\"\"> Cargo</label> \
<label><input id=\"locodet_auto\" type=\"checkbox\" value=\"\" disabled>Auto</label><br> \
<label><input id=\"locodet_random\" type=\"checkbox\" value=\"\" disabled>Random</label><br> \
</td><td> \
<label><input id=\"locodet_auto\" type=\"checkbox\" value=\"\" disabled> Auto</label><br> \
<label><input id=\"locodet_random\" type=\"checkbox\" value=\"\" disabled> Random</label> \
<label><input id=\"locodet_cargo\" type=\"checkbox\" value=\"\">Cargo</label><br> \
<label><input id=\"locodet_short\" type=\"checkbox\" value=\"\">Short Train</label><br> \
<label><input id=\"locodet_canreverse\" type=\"checkbox\" value=\"\">Can Reverse</label><br> \
</td></tr></table> \
\
<fieldset><legend>Speed</legend> <table>\
<label><input id=\"locodet_reverse\" type=\"checkbox\" value=\"\">Reverse</label><br> \
<tr><td></td><td>Stop</td><td><button id=\"locodet_btnvstop\" type=\"button\" value=\"vstop\">X</button> </td></tr>\
<tr><td>Vmin:</td><td><input id=\"locodet_vmin\" style=\"width: 50\"></td><td><button id=\"locodet_btnvmin\" type=\"button\" value=\"vmin\">X</button> </td></tr>\
<tr><td>Vslow:</td><td><input id=\"locodet_vslow\" style=\"width: 50\"></td><td><button id=\"locodet_btnvslow\" type=\"button\" value=\"vslow\">X</button> </td></tr> \
@ -176,7 +177,7 @@ function locodetail_show(loconame) {
<tr><td>Assined:</td><td><input id=\"locodet_blockassign\" style=\"width: 50\" disabled></td></tr> \
<tr><td>Next:</td><td><input id=\"locodet_blocknext\" style=\"width: 50\" disabled></td></tr> \
<tr><td>Prev:</td><td><input id=\"locodet_blockprev\" style=\"width: 50\" disabled></td></tr> \
</table></fileset>\
</table><button id=\"locodet_RESET\" type=\"button\">Reset</button></fileset>\
\
</td></tr></table></div> <hr>\
<div align=right> \
@ -194,7 +195,10 @@ function locodetail_show(loconame) {
gAddEventListener("locodet_btnvfast", 'click', locodetail_cb_btnmove);
gAddEventListener("locodet_btnvmax", 'click', locodetail_cb_btnmove);
gAddEventListener("locodet_reverse", 'click', locodetail_cb_reverse);
gAddEventListener("locodet_canreverse", 'click', locodetail_cb_canreverse);
gAddEventListener("locodet_short", 'click', locodetail_cb_short);
gAddEventListener("locodet_cargo", 'click', locodetail_cb_cargo);
gAddEventListener("locodet_RESET", 'click', locodetail_cb_reset);
// gAddEventListener("locodet_DCC14", 'click', locodetail_cb_stepcode);
// gAddEventListener("locodet_DCC28", 'click', locodetail_cb_stepcode);
@ -238,6 +242,49 @@ function locodetail_cb_reverse () {
};
//
// canreverse selected, setup flags
function locodetail_cb_canreverse () {
var cbreverse = document.getElementById("locodet_canreverse");
var flags = document.getElementById("locodet_flags");
if (cbreverse.checked) {
flags.value = Number(flags.value) | LOCO_F_CANREVERSE;
}
else {
flags.value = Number(flags.value) & (0xFFFF-LOCO_F_CANREVERSE);
}
};
function locodetail_cb_reset (element) {
var loco = document.getElementById("locodet_name");
if (loco.value) {
var request = { command: "locomotivereset", locomotive: loco.value };
serverinout (request, serverinout_defaultCallback);
}
};
//
// canreverse selected, setup flags
function locodetail_cb_short () {
var flag = document.getElementById("locodet_short");
var flags = document.getElementById("locodet_flags");
if (flag.checked) {
flags.value = Number(flags.value) | LOCO_F_SHORTTRAIN;
}
else {
flags.value = Number(flags.value) & (0xFFFF-LOCO_F_SHORTTRAIN);
}
};
//
// cargo selected, setup flags
function locodetail_cb_cargo () {
@ -373,6 +420,8 @@ function locodetail_setData(elm) {
var loco_vfast = document.getElementById("locodet_vfast");
var loco_vmax = document.getElementById("locodet_vmax");
var loco_reverse = document.getElementById("locodet_reverse");
var loco_canreverse = document.getElementById("locodet_canreverse");
var loco_short = document.getElementById("locodet_short");
var loco_cargo = document.getElementById("locodet_cargo");
var loco_auto = document.getElementById("locodet_auto");
var loco_random = document.getElementById("locodet_random");
@ -396,6 +445,14 @@ function locodetail_setData(elm) {
if (Number(elm.flags) & LOCO_F_REVERSE) loco_reverse.checked = true;
else loco_reverse.checked = false;
}
if (loco_canreverse) {
if (Number(elm.flags) & LOCO_F_CANREVERSE) loco_canreverse.checked = true;
else loco_canreverse.checked = false;
}
if (loco_short) {
if (Number(elm.flags) & LOCO_F_SHORTTRAIN) loco_short.checked = true;
else loco_short.checked = false;
}
if (loco_cargo) {
if (Number(elm.flags) & LOCO_F_CARGO) loco_cargo.checked = true;
else loco_cargo.checked = false;

Loading…
Cancel
Save