split block are working. fixed way finding issues.

master
Steffen Pohle 2 years ago
parent 4990065ada
commit b24a76aa72

@ -1,3 +1,7 @@
2023-12-27:
- split blocks do work.
- fixed issues with the way finding routine
2023-05-01: 2023-05-01:
- another work on the split blocks. long trains wont go into split blocks. Some final - another work on the split blocks. long trains wont go into split blocks. Some final
checks are still needed to implement. checks are still needed to implement.

@ -401,7 +401,7 @@ int Locomotives::Reset(string name) {
for (i = 0; i < max; i++) if (locomotives[i].name[0] != 0) for (i = 0; i < max; i++) if (locomotives[i].name[0] != 0)
if (name.compare(locomotives[i].name) == 0) { if (name.compare(locomotives[i].name) == 0) {
debug (0, "Locomotives::Reset (Name:%s)", name.c_str()); debug (0, "Locomotives::Reset (Name:%s)", name.c_str());
locomotives[i].flags &= ~(LOCO_F_AUTO | LOCO_F_AUTOSTOP | LOCO_F_RANDOM); locomotives[i].flags &= ~(LOCO_F_AUTO | LOCO_F_AUTOSTOP | LOCO_F_AUTORANDOM | LOCO_F_AUTOSHED);
locomotives[i].blockassign[0] = 0; locomotives[i].blockassign[0] = 0;
locomotives[i].blockdest[0] = 0; locomotives[i].blockdest[0] = 0;
locomotives[i].blockprev[0] = 0; locomotives[i].blockprev[0] = 0;
@ -435,7 +435,7 @@ int Locomotives::SetModeMan(string name) {
for (i = 0; i < max; i++) if (locomotives[i].name[0] != 0) for (i = 0; i < max; i++) if (locomotives[i].name[0] != 0)
if (name.compare(locomotives[i].name) == 0) { if (name.compare(locomotives[i].name) == 0) {
debug (0, "Locomotives::SetMan (Name:%s)\n", name.c_str()); debug (0, "Locomotives::SetMan (Name:%s)\n", name.c_str());
locomotives[i].flags &= ~(LOCO_F_AUTO | LOCO_F_AUTOSTOP | LOCO_F_RANDOM); locomotives[i].flags &= ~(LOCO_F_AUTO | LOCO_F_AUTOSTOP | LOCO_F_AUTORANDOM | LOCO_F_AUTOSHED);
locomotives[i].auto_onroute = 0; locomotives[i].auto_onroute = 0;
locomotives[i].auto_way[0] = 0; locomotives[i].auto_way[0] = 0;
locomotives[i].auto_wayold[0] = 0; locomotives[i].auto_wayold[0] = 0;
@ -462,7 +462,8 @@ int Locomotives::SetModeAutoMan(string name) {
if (name.compare(locomotives[i].name) == 0 && (locomotives[i].flags & LOCO_F_AUTO)) { if (name.compare(locomotives[i].name) == 0 && (locomotives[i].flags & LOCO_F_AUTO)) {
debug (0, "Locomotives::SetAutoMan (Name:%s)\n", name.c_str()); debug (0, "Locomotives::SetAutoMan (Name:%s)\n", name.c_str());
locomotives[i].flags |= LOCO_F_AUTOSTOP; locomotives[i].flags |= LOCO_F_AUTOSTOP;
locomotives[i].flags &= ~LOCO_F_RANDOM; locomotives[i].flags &= ~LOCO_F_AUTORANDOM;
locomotives[i].flags &= ~LOCO_F_AUTOSHED;
jp.Clear(); jp.Clear();
jp.AddObject("locomotive",_GetJSON(i)); jp.AddObject("locomotive",_GetJSON(i));
@ -484,7 +485,8 @@ int Locomotives::SetModeAuto(string name) {
if (name.compare(locomotives[i].name) == 0) { if (name.compare(locomotives[i].name) == 0) {
debug (0, "Locomotives::SetAuto (Name:%s)\n", name.c_str()); debug (0, "Locomotives::SetAuto (Name:%s)\n", name.c_str());
locomotives[i].flags |= LOCO_F_AUTO; locomotives[i].flags |= LOCO_F_AUTO;
locomotives[i].flags &= ~LOCO_F_RANDOM; locomotives[i].flags &= ~LOCO_F_AUTORANDOM;
locomotives[i].flags &= ~LOCO_F_AUTOSHED;
jp.Clear(); jp.Clear();
jp.AddObject("locomotive",_GetJSON(i)); jp.AddObject("locomotive",_GetJSON(i));
@ -504,8 +506,33 @@ int Locomotives::SetModeAutoRand(string name) {
Lock(); Lock();
for (i = 0; i < max; i++) if (locomotives[i].name[0] != 0) for (i = 0; i < max; i++) if (locomotives[i].name[0] != 0)
if (name.compare(locomotives[i].name) == 0 && (locomotives[i].flags & LOCO_F_AUTO)) { if (name.compare(locomotives[i].name) == 0 && (locomotives[i].flags & LOCO_F_AUTO)) {
debug (0, "Locomotives::SetRandom (Name:%s)\n", name.c_str()); debug (0, "Locomotives::SetAutoRandom (Name:%s)\n", name.c_str());
locomotives[i].flags |= LOCO_F_RANDOM; locomotives[i].flags |= LOCO_F_AUTORANDOM;
locomotives[i].flags &= ~LOCO_F_AUTOSHED;
locomotives[i].flags &= ~LOCO_F_AUTOSTOP;
jp.Clear();
jp.AddObject("locomotive",_GetJSON(i));
if(network) network->ChangeListPushToAll(jp.ToString());
break;
}
UnLock();
return 1;
};
int Locomotives::SetModeAutoShed(string name) {
int i;
JSONParse jp;
Lock();
for (i = 0; i < max; i++) if (locomotives[i].name[0] != 0)
if (name.compare(locomotives[i].name) == 0 && (locomotives[i].flags & LOCO_F_AUTO)) {
debug (0, "Locomotives::SetAutoShed (Name:%s)\n", name.c_str());
locomotives[i].flags |= LOCO_F_AUTOSHED;
locomotives[i].flags &= ~LOCO_F_AUTORANDOM;
locomotives[i].flags &= ~LOCO_F_AUTOSTOP; locomotives[i].flags &= ~LOCO_F_AUTOSTOP;
jp.Clear(); jp.Clear();
@ -758,14 +785,12 @@ int Locomotives::Loco_SearchAndLock(Locomotive *loco) {
// //
// destination empty? true -> random // destination empty? true -> random
// false -> find way to destination // false -> find way to destination
if (loco->auto_timenext.tv_sec == 0 || timer_get(&loco->auto_timenext) > LOCO_TO_TRYAGAIN) { debug (0, "Locomotives::Loop Search '%s' Reverse:%d", loco->name, (loco->flags & LOCO_F_REVERSE) ? 1 : 0);
debug (0, "Locomotives::Loop Search '%s' Reverse:%d", loco->name, loco->flags && LOCO_F_REVERSE ? 1 : 0);
timer_start(&loco->auto_timenext);
// //
// destination set? - need to find a random block? // destination set? - need to find a random block?
if (loco->blockdest[0] == 0) { if (loco->blockdest[0] == 0) {
if (loco->flags & LOCO_F_RANDOM) { if (loco->flags & LOCO_F_AUTORANDOM) {
if (server->railways.FindRandomWay(loco->blockassign, loco->name, &way)) { if (server->railways.FindRandomWay(loco->blockassign, loco->name, &way)) {
size_t pos, pos1; size_t pos, pos1;
if ((pos = way.find(",b:", 1)) != string::npos) { if ((pos = way.find(",b:", 1)) != string::npos) {
@ -781,19 +806,8 @@ int Locomotives::Loco_SearchAndLock(Locomotive *loco) {
server->railways.UnLockWay(way, loco->name); server->railways.UnLockWay(way, loco->name);
} }
} }
else {
// nothing found -> try reverse
if (loco->blockassign[0] != 0 && (loco->flags & LOCO_F_CANREVERSE)) {
debug (0, "* Loco_SearchAndLock Reverse Loco %s", loco->name);
if (loco->blockassign[0] == '-') loco->blockassign[0] = '+';
else if (loco->blockassign[0] == '+') loco->blockassign[0] = '-';
if (loco->flags & LOCO_F_REVERSE) loco->flags &= ~LOCO_F_REVERSE;
else loco->flags |= LOCO_F_REVERSE;
} }
} else if (loco->flags & LOCO_F_AUTOSHED) {
}
else {
SchedulerNextStep(loco); SchedulerNextStep(loco);
} }
} }
@ -815,8 +829,6 @@ int Locomotives::Loco_SearchAndLock(Locomotive *loco) {
return 1; return 1;
} }
server->railways.UnLockWay(way, loco->name); server->railways.UnLockWay(way, loco->name);
timer_start(&loco->auto_timenext);
}
} }
} }
@ -954,9 +966,12 @@ int Locomotives::Loco_BlockEnterStop(Locomotive *loco) {
s_stop = server->blocks.GetSensorStop(dir_reverse, block, loco->flags); s_stop = server->blocks.GetSensorStop(dir_reverse, block, loco->flags);
s_slow = server->blocks.GetSensorSlow(dir_reverse, block, loco->flags); s_slow = server->blocks.GetSensorSlow(dir_reverse, block, loco->flags);
s_enter = server->blocks.GetSensorEnter(dir_reverse, block, loco->flags); s_enter = server->blocks.GetSensorEnter(dir_reverse, block, loco->flags);
if (server->sensors.GetActive(s_stop) == 1) { if (server->sensors.GetActive(s_stop) == 1) {
debug (0, "Locomotives::Loop EnterBlockStop '%s' UnLockWay\n", loco->name); debug (0, "Locomotives::Loop BlockEnterStop '%s' UnLockWay\n", loco->name);
debug (0, "* %s,%d Sensor Enter '%s' = %d", __FILE__, __LINE__, s_enter.c_str(), server->sensors.GetActive(s_enter));
debug (0, "* %s,%d Sensor Slow '%s' = %d", __FILE__, __LINE__, s_slow.c_str(), server->sensors.GetActive(s_slow));
debug (0, "* %s,%d Sensor Stop '%s' = %d", __FILE__, __LINE__, s_stop.c_str(), server->sensors.GetActive(s_stop));
SetSpeed(loco->name, 0); SetSpeed(loco->name, 0);
loco->auto_onroute = LOCO_OR_STOPWAIT; loco->auto_onroute = LOCO_OR_STOPWAIT;
server->railways.UnLockWay(loco->auto_wayold, loco->name); server->railways.UnLockWay(loco->auto_wayold, loco->name);
@ -1089,6 +1104,10 @@ int Locomotives::Loop() {
SetModeMan(loco->name); SetModeMan(loco->name);
continue; continue;
} }
if (loco->auto_timenext.tv_sec == 0 || timer_get(&loco->auto_timenext) > LOCO_TO_TRYAGAIN) {
timer_start(&loco->auto_timenext);
if (strcmp(loco->blockassign, loco->blockdest) == 0) { if (strcmp(loco->blockassign, loco->blockdest) == 0) {
loco->blockdest[0] = 0; loco->blockdest[0] = 0;
debug (0, "* Locomotive '%s' DEST == ASSING", loco->name); debug (0, "* Locomotive '%s' DEST == ASSING", loco->name);
@ -1101,6 +1120,22 @@ int Locomotives::Loop() {
if (Loco_SearchAndLock(loco)) { if (Loco_SearchAndLock(loco)) {
loco->auto_onroute = LOCO_OR_PREPARE; loco->auto_onroute = LOCO_OR_PREPARE;
} }
else {
// nothing found -> try reverse
if (loco->blockassign[0] != 0 && (loco->flags & LOCO_F_CANREVERSE)) {
debug (0, "* Loco_SearchAndLock Reverse Loco %s", loco->name);
if (loco->blockassign[0] == '-') loco->blockassign[0] = '+';
else if (loco->blockassign[0] == '+') loco->blockassign[0] = '-';
if (loco->flags & LOCO_F_REVERSE) loco->flags &= ~LOCO_F_REVERSE;
else loco->flags |= LOCO_F_REVERSE;
jp.Clear();
jp.AddObject("locomotive",_GetJSON(lnum));
if(network) network->ChangeListPushToAll(jp.ToString());
}
}
}
} }
// //

@ -10,8 +10,9 @@
#define LOCO_F_CANREVERSE 0x0020 #define LOCO_F_CANREVERSE 0x0020
#define LOCO_F_SHORTTRAIN 0x0040 #define LOCO_F_SHORTTRAIN 0x0040
#define LOCO_F_AUTO 0x0100 #define LOCO_F_AUTO 0x0100
#define LOCO_F_RANDOM 0x0200 #define LOCO_F_AUTOSHED 0x0200
#define LOCO_F_AUTOSTOP 0x0400 #define LOCO_F_AUTORANDOM 0x0400
#define LOCO_F_AUTOSTOP 0x0800
#define LOCO_TO_TURNOUT (50+TURNOUT_DEFAULT_ACTIVETIMEOUT) #define LOCO_TO_TURNOUT (50+TURNOUT_DEFAULT_ACTIVETIMEOUT)
#define LOCO_TO_TRYAGAIN (1000) #define LOCO_TO_TRYAGAIN (1000)
@ -106,6 +107,7 @@ class Locomotives {
int SetModeAutoMan(string name); int SetModeAutoMan(string name);
int SetModeAuto(string name); int SetModeAuto(string name);
int SetModeAutoRand(string name); int SetModeAutoRand(string name);
int SetModeAutoShed(string name);
int SetSpeedFromBus (string ifname, int addr, int speed); int SetSpeedFromBus (string ifname, int addr, int speed);
int SetFunctionFromBus (string ifname, int addr, int func); int SetFunctionFromBus (string ifname, int addr, int func);
int SetDestination (string name, string block, int direction); int SetDestination (string name, string block, int direction);

@ -71,6 +71,7 @@ private:
void SetJSONLocoAutoMan(JSONParse *jp); void SetJSONLocoAutoMan(JSONParse *jp);
void SetJSONLocoAuto(JSONParse *jp); void SetJSONLocoAuto(JSONParse *jp);
void SetJSONLocoAutoRand(JSONParse *jp); void SetJSONLocoAutoRand(JSONParse *jp);
void SetJSONLocoAutoShed(JSONParse *jp);
void BlockJSONOff(JSONParse *jp); void BlockJSONOff(JSONParse *jp);
void BlockJSONClear(JSONParse *jp); void BlockJSONClear(JSONParse *jp);

@ -711,7 +711,7 @@ int Railways::FindWay(string org_blockstart, string org_blockend, string lockedf
} }
} }
if (found == 0 || !_NextPosIsValid(lockedfor, locoflags, &fd_pos)) { if (conector_found == 0 || !_NextPosIsValid(lockedfor, locoflags, &fd_pos)) {
fd_pos.enterfrom = -1; fd_pos.enterfrom = -1;
fd_pos.x = -1; fd_pos.x = -1;
fd_pos.y = -1; fd_pos.y = -1;

@ -168,6 +168,7 @@ public:
int LocomotiveSetAuto(string name) { return locomotives.SetModeAuto(name); }; int LocomotiveSetAuto(string name) { return locomotives.SetModeAuto(name); };
int LocomotiveSetAutoMan(string name) { return locomotives.SetModeAutoMan(name); }; int LocomotiveSetAutoMan(string name) { return locomotives.SetModeAutoMan(name); };
int LocomotiveSetAutoRand(string name) { return locomotives.SetModeAutoRand(name); }; int LocomotiveSetAutoRand(string name) { return locomotives.SetModeAutoRand(name); };
int LocomotiveSetAutoShed(string name) { return locomotives.SetModeAutoShed(name); };
int LocomotiveTest(string name) { return locomotives.Test(name); }; int LocomotiveTest(string name) { return locomotives.Test(name); };
///////////////////////////////////////// /////////////////////////////////////////

@ -148,6 +148,9 @@ int Session::ProcessData(JSONParse *jin, JSONParse *jout) {
else if (command.compare("locomotivesetautorand") == 0) { else if (command.compare("locomotivesetautorand") == 0) {
SetJSONLocoAutoRand(jin); SetJSONLocoAutoRand(jin);
} }
else if (command.compare("locomotivesetautoshed") == 0) {
SetJSONLocoAutoShed(jin);
}
else if (command.compare("locomotivereset") == 0) { else if (command.compare("locomotivereset") == 0) {
SetJSONLocoReset(jin); SetJSONLocoReset(jin);
} }
@ -616,6 +619,21 @@ void Session::SetJSONLocoAutoRand(JSONParse *jp) {
}; };
void Session::SetJSONLocoAutoShed(JSONParse *jp) {
string loco;
JSONParse jout;
jp->GetValue("locomotive", &loco);
server->LockThread();
server->LocomotiveSetAutoShed(loco);
jout.Clear();
jout.AddObject("locomotive", server->LocomotiveGetJSON(loco));
if (network) network->ChangeListPushToAll(jout.ToString());
server->UnLockThread();
};
// //
// add new Turnout // add new Turnout

@ -7,8 +7,9 @@ const LOCO_F_CARGO = 0x0010;
const LOCO_F_CANREVERSE = 0x0020; const LOCO_F_CANREVERSE = 0x0020;
const LOCO_F_SHORTTRAIN = 0x0040; const LOCO_F_SHORTTRAIN = 0x0040;
const LOCO_F_AUTO = 0x0100; const LOCO_F_AUTO = 0x0100;
const LOCO_F_RANDOM = 0x0200; const LOCO_F_AUTOSHED = 0x0200;
const LOCO_F_AUTOSTOP = 0x0400; const LOCO_F_AUTORANDOM = 0x0400;
const LOCO_F_AUTOSTOP = 0x0800;
var locomotives = []; var locomotives = [];
@ -150,7 +151,7 @@ function locodetail_show(loconame) {
if (!win) { if (!win) {
console.log ("loco_showdetail create window"); console.log ("loco_showdetail create window");
win = gWindowCreate("locodetail", "Locomotive", 450, 500, win = gWindowCreate("locodetail", "Locomotive", 450, 550,
"<div style=\"float: left\"> \ "<div style=\"float: left\"> \
Name: <input id=\"locodet_name\" style=\"width: 100\"> \ Name: <input id=\"locodet_name\" style=\"width: 100\"> \
</div> <div style=\"float: right\"> \ </div> <div style=\"float: right\"> \
@ -164,7 +165,8 @@ function locodetail_show(loconame) {
</div> <hr>\ </div> <hr>\
<div><table><tr><td> \ <div><table><tr><td> \
<label><input id=\"locodet_auto\" type=\"checkbox\" value=\"\" disabled>Auto</label><br> \ <label><input id=\"locodet_auto\" type=\"checkbox\" value=\"\" disabled>Auto</label><br> \
<label><input id=\"locodet_random\" type=\"checkbox\" value=\"\" disabled>Random</label><br> \ <label><input id=\"locodet_autoshed\" type=\"checkbox\" value=\"\" disabled>Sheduler</label><br> \
<label><input id=\"locodet_autorandom\" type=\"checkbox\" value=\"\" disabled>Random</label><br> \
</td><td> \ </td><td> \
<label><input id=\"locodet_short\" type=\"checkbox\" value=\"\">Short Train</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> \ <label><input id=\"locodet_canreverse\" type=\"checkbox\" value=\"\">Can Reverse</label><br> \
@ -461,7 +463,8 @@ function locodetail_setData(elm) {
var loco_short = document.getElementById("locodet_short"); var loco_short = document.getElementById("locodet_short");
var loco_cargo = document.getElementById("locodet_cargo"); var loco_cargo = document.getElementById("locodet_cargo");
var loco_auto = document.getElementById("locodet_auto"); var loco_auto = document.getElementById("locodet_auto");
var loco_random = document.getElementById("locodet_random"); var loco_autorandom = document.getElementById("locodet_autorandom");
var loco_autoshed = document.getElementById("locodet_autoshed");
var loco_blockassign = document.getElementById("locodet_blockassign"); var loco_blockassign = document.getElementById("locodet_blockassign");
var loco_blockdest = document.getElementById("locodet_blockdest"); var loco_blockdest = document.getElementById("locodet_blockdest");
var loco_blocknext = document.getElementById("locodet_blocknext"); var loco_blocknext = document.getElementById("locodet_blocknext");
@ -500,16 +503,20 @@ function locodetail_setData(elm) {
if (Number(elm.flags) & LOCO_F_AUTO) loco_auto.checked = true; if (Number(elm.flags) & LOCO_F_AUTO) loco_auto.checked = true;
else loco_auto.checked = false; else loco_auto.checked = false;
} }
if (loco_random) { if (loco_autorandom) {
if (Number(elm.flags) & LOCO_F_RANDOM) loco_random.checked = true; if (Number(elm.flags) & LOCO_F_AUTORANDOM) loco_autorandom.checked = true;
else loco_random.checked = false; else loco_autorandom.checked = false;
}
if (loco_autoshed) {
if (Number(elm.flags) & LOCO_F_AUTOSHED) loco_autoshed.checked = true;
else loco_autoshed.checked = false;
} }
if (loco_blockassign) loco_blockassign.value = elm.blockassign; if (loco_blockassign) loco_blockassign.value = elm.blockassign;
if (loco_blockdest) loco_blockdest.value = elm.blockdest; if (loco_blockdest) loco_blockdest.value = elm.blockdest;
if (loco_blocknext) loco_blocknext.value = elm.blocknext; if (loco_blocknext) loco_blocknext.value = elm.blocknext;
if (loco_blockprev) loco_blockprev.value = elm.blockprev; if (loco_blockprev) loco_blockprev.value = elm.blockprev;
if (loco_schedway && elm.schedway) loco_schedway.value = elm.schedway; if (loco_schedway && elm.schedway) loco_schedway.value = elm.schedway;
else loco_schedway.value = ""; else if (loco_shedway) loco_schedway.value = "";
if (loco_auto_way) loco_auto_way.value = elm.auto_way; if (loco_auto_way) loco_auto_way.value = elm.auto_way;
} }
@ -675,8 +682,11 @@ function lococtrl_show(name) {
<td align=center><input id=\"lococtrl_"+name+"_cbauto\" type=\"checkbox\" value=\"\" disabled></td>\ <td align=center><input id=\"lococtrl_"+name+"_cbauto\" type=\"checkbox\" value=\"\" disabled></td>\
<td><button id=\"lococtrl_"+name+"_btnauto\" type=\"button\" value=\"vstop\">AUTO</button></td> \ <td><button id=\"lococtrl_"+name+"_btnauto\" type=\"button\" value=\"vstop\">AUTO</button></td> \
</tr><tr> \ </tr><tr> \
<td align=center><input id=\"lococtrl_"+name+"_cbrand\" type=\"checkbox\" value=\"\" disabled></td>\ <td align=center><input id=\"lococtrl_"+name+"_cbautoshed\" type=\"checkbox\" value=\"\" disabled></td>\
<td><button id=\"lococtrl_"+name+"_btnrand\" type=\"button\" value=\"vstop\">RAND</button></td> \ <td><button id=\"lococtrl_"+name+"_btnautoshed\" type=\"button\" value=\"vstop\">SHED</button></td> \
</tr><tr> \
<td align=center><input id=\"lococtrl_"+name+"_cbautorand\" type=\"checkbox\" value=\"\" disabled></td>\
<td><button id=\"lococtrl_"+name+"_btnautorand\" type=\"button\" value=\"vstop\">RAND</button></td> \
</tr> \ </tr> \
</table></fieldset> \ </table></fieldset> \
</td><tr></table>\ </td><tr></table>\
@ -697,7 +707,8 @@ function lococtrl_show(name) {
gAddEventListener("lococtrl_"+name+"_btnman", 'click', lococtrl_cb_btnman); gAddEventListener("lococtrl_"+name+"_btnman", 'click', lococtrl_cb_btnman);
gAddEventListener("lococtrl_"+name+"_btnstopman", 'click', lococtrl_cb_btnstopman); gAddEventListener("lococtrl_"+name+"_btnstopman", 'click', lococtrl_cb_btnstopman);
gAddEventListener("lococtrl_"+name+"_btnauto", 'click', lococtrl_cb_btnauto); gAddEventListener("lococtrl_"+name+"_btnauto", 'click', lococtrl_cb_btnauto);
gAddEventListener("lococtrl_"+name+"_btnrand", 'click', lococtrl_cb_btnrand); gAddEventListener("lococtrl_"+name+"_btnautorand", 'click', lococtrl_cb_btnautorand);
gAddEventListener("lococtrl_"+name+"_btnautoshed", 'click', lococtrl_cb_btnautoshed);
gAddEventListener("lococtrl_"+name+"_RANGE", 'click', lococtrl_speed); gAddEventListener("lococtrl_"+name+"_RANGE", 'click', lococtrl_speed);
gAddEventListener("lococtrl_"+name+"_REVBTN", 'click', lococtrl_reverse); gAddEventListener("lococtrl_"+name+"_REVBTN", 'click', lococtrl_reverse);
@ -710,7 +721,6 @@ function lococtrl_show(name) {
}; };
function lococtrl_cb_btnreset() { function lococtrl_cb_btnreset() {
var name = getTextBetween(this.id, "lococtrl_", "_btnreset"); var name = getTextBetween(this.id, "lococtrl_", "_btnreset");
var request = { command: "locomotivereset", locomotive: name }; var request = { command: "locomotivereset", locomotive: name };
@ -742,13 +752,20 @@ function lococtrl_cb_btnauto() {
}; };
function lococtrl_cb_btnrand() { function lococtrl_cb_btnautorand() {
var name = getTextBetween(this.id, "lococtrl_", "_btnauto"); var name = getTextBetween(this.id, "lococtrl_", "_btnautorand");
var request = { command: "locomotivesetautorand", locomotive: name }; var request = { command: "locomotivesetautorand", locomotive: name };
serverinout (request, serverinout_defaultCallback); serverinout (request, serverinout_defaultCallback);
}; };
function lococtrl_cb_btnautoshed() {
var name = getTextBetween(this.id, "lococtrl_", "_btnautoshed");
var request = { command: "locomotivesetautoshed", locomotive: name };
serverinout (request, serverinout_defaultCallback);
};
function lococtrl_reverse() { function lococtrl_reverse() {
var name = getTextBetween(this.id, "lococtrl_", "_REVBTN"); var name = getTextBetween(this.id, "lococtrl_", "_REVBTN");
var reverse; var reverse;
@ -813,12 +830,14 @@ function lococtrl_setData(data) {
var range = document.getElementById("lococtrl_"+data.name+"_RANGE"); var range = document.getElementById("lococtrl_"+data.name+"_RANGE");
var reverse = document.getElementById("lococtrl_"+data.name+"_REVBTN"); var reverse = document.getElementById("lococtrl_"+data.name+"_REVBTN");
var cbauto = document.getElementById("lococtrl_"+data.name+"_cbauto"); var cbauto = document.getElementById("lococtrl_"+data.name+"_cbauto");
var cbrand = document.getElementById("lococtrl_"+data.name+"_cbrand"); var cbautorand = document.getElementById("lococtrl_"+data.name+"_cbautorand");
var cbautoshed = document.getElementById("lococtrl_"+data.name+"_cbautoshed");
var cbmanstop = document.getElementById("lococtrl_"+data.name+"_cbstopman"); var cbmanstop = document.getElementById("lococtrl_"+data.name+"_cbstopman");
var btnman = document.getElementById("lococtrl_"+data.name+"_btnman"); var btnman = document.getElementById("lococtrl_"+data.name+"_btnman");
var btnautostop = document.getElementById("lococtrl_"+data.name+"_btnstopman"); var btnautostop = document.getElementById("lococtrl_"+data.name+"_btnstopman");
var btnauto = document.getElementById("lococtrl_"+data.name+"_btnauto"); var btnauto = document.getElementById("lococtrl_"+data.name+"_btnauto");
var btnautorand = document.getElementById("lococtrl_"+data.name+"_btnrand"); var btnautorand = document.getElementById("lococtrl_"+data.name+"_btnautorand");
var btnautoshed = document.getElementById("lococtrl_"+data.name+"_btnautoshed");
if (range && reverse) { if (range && reverse) {
console.log ("lococtrl: " + data.name + " speed:" + data.speed + " vmax:" + console.log ("lococtrl: " + data.name + " speed:" + data.speed + " vmax:" +
@ -827,24 +846,28 @@ function lococtrl_setData(data) {
else reverse.innerHTML = "FWD"; else reverse.innerHTML = "FWD";
cbauto.checked = (data.flags & LOCO_F_AUTO); cbauto.checked = (data.flags & LOCO_F_AUTO);
cbrand.checked = (data.flags & LOCO_F_RANDOM); cbautorand.checked = (data.flags & LOCO_F_AUTORANDOM);
cbautoshed.checked = (data.flags & LOCO_F_AUTOSHED);
cbmanstop.checked = (data.flags & LOCO_F_AUTOSTOP); cbmanstop.checked = (data.flags & LOCO_F_AUTOSTOP);
if (data.flags & LOCO_F_AUTOSTOP) { if (data.flags & LOCO_F_AUTOSTOP) {
btnman.disabled = false; btnman.disabled = false;
btnauto.disabled = true; btnauto.disabled = true;
btnautorand.disabled = true; btnautorand.disabled = true;
btnautoshed.disabled = true;
btnautostop.disabled = true; btnautostop.disabled = true;
} }
else if (data.flags & LOCO_F_AUTO) { else if (data.flags & LOCO_F_AUTO) {
btnman.disabled = true; btnman.disabled = true;
btnautorand.disabled = false; btnautorand.disabled = false;
btnautoshed.disabled = false;
btnautostop.disabled = false; btnautostop.disabled = false;
} }
else { else {
btnman.disabled = true; btnman.disabled = true;
btnautorand.disabled = true; btnautorand.disabled = true;
btnautostop.disabled = true; btnautostop.disabled = true;
btnautoshed.disabled = true;
btnauto.disabled = false; btnauto.disabled = false;
} }

Loading…
Cancel
Save