From 277e8934b28b1b95b3e60c8b180c78a65916d7e9 Mon Sep 17 00:00:00 2001 From: steffen Date: Sun, 17 Jan 2021 20:42:02 +0000 Subject: [PATCH] webinterface should be ready. --- server/block.cc | 13 ++++ server/block.h | 3 +- server/locomotive.h | 10 +-- webinterface/block.js | 132 +++++++++++++++++++++++++++++-------- webinterface/locomotive.js | 83 +++++++++++++++++++---- 5 files changed, 194 insertions(+), 47 deletions(-) diff --git a/server/block.cc b/server/block.cc index 88c4e43..88acb8d 100644 --- a/server/block.cc +++ b/server/block.cc @@ -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; }; diff --git a/server/block.h b/server/block.h index 8b4429d..2b40d8a 100644 --- a/server/block.h +++ b/server/block.h @@ -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; diff --git a/server/locomotive.h b/server/locomotive.h index 096f09f..d192674 100644 --- a/server/locomotive.h +++ b/server/locomotive.h @@ -5,10 +5,12 @@ #include "modelbahn.h" #include "server.h" -#define LOCO_F_REVERSE 0x0001 -#define LOCO_F_CARGO 0x0002 -#define LOCO_F_AUTO 0x0100 -#define LOCO_F_RANDOM 0x0200 +#define LOCO_F_REVERSE 0x0001 +#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 enum { LOCO_INT_UNDEF = 0, diff --git a/webinterface/block.js b/webinterface/block.js index a2aa9d4..3169ccc 100644 --- a/webinterface/block.js +++ b/webinterface/block.js @@ -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 += ""; } innerhtml += "
"; - innerhtml += "
"; - innerhtml += "
"; - innerhtml += "
"; - innerhtml += "
"; + innerhtml += "
"; + innerhtml += "
"; + innerhtml += "
"; + innerhtml += "
"; innerhtml += "
"; innerhtml += "
"; innerhtml += ""; 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 = " \
\ Block Name: \
\ \ \ -


\ -
\ -
\ -

\ +

\ +
\ + \ +
\ + \ +
\ +
\ +
\ + \ +
\ +
\ +
\ +
\ + \ +
\ +
Automatic Mode \ + \ + \ + \ + \ +
Lockedby:
Sensor ←↑:
Sensor Center:
Sensor →↓:
\ +

\
\ \ \ \
\ \ - "); + "; + 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; }; diff --git a/webinterface/locomotive.js b/webinterface/locomotive.js index 025605e..76f9cb8 100644 --- a/webinterface/locomotive.js +++ b/webinterface/locomotive.js @@ -2,10 +2,12 @@ // // -const LOCO_F_REVERSE = 0x0001; -const LOCO_F_CARGO = 0x0002; -const LOCO_F_AUTO = 0x0100; -const LOCO_F_RANDOM = 0x0200; +const LOCO_F_REVERSE = 0x0001; +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; var locomotives = []; @@ -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, " \
\ Name: \
\ @@ -147,14 +146,16 @@ function locodetail_show(loconame) {

\
\
\ -
\ - \ +
\ +
\
\ -
\ - \ +
\ +
\ +
\
\ \
Speed \ +
\ \ \ \ @@ -176,7 +177,7 @@ function locodetail_show(loconame) { \ \ \ -
Stop
Vmin:
Vslow:
Assined:
Next:
Prev:
\ +
\ \

\
\ @@ -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;