1
0
mirror of https://github.com/DCC-EX/CommandStation-EX.git synced 2024-12-25 05:31:24 +01:00

set initial direction forward, forget locos on 2nd missed heartbeat

This commit is contained in:
SteveT 2020-08-12 15:10:51 -04:00
parent ecbedd26bc
commit 52b0502776

View File

@ -149,7 +149,7 @@ void WiThrottle::parse(Print & stream, byte * cmdx) {
} }
break; break;
case 'N': // Heartbeat (2) case 'N': // Heartbeat (2)
StringFormatter::send(stream, F("*%d\n"),HEARTBEAT_TIMEOUT); // 10 second timeout StringFormatter::send(stream, F("*%d\n"),HEARTBEAT_TIMEOUT); // return timeout value
break; break;
case 'M': // multithrottle case 'M': // multithrottle
multithrottle(stream, cmd); multithrottle(stream, cmd);
@ -217,7 +217,7 @@ void WiThrottle::multithrottle(Print & stream, byte * cmd){
if (myLocos[loco].throttle=='\0') { if (myLocos[loco].throttle=='\0') {
myLocos[loco].throttle=throttleChar; myLocos[loco].throttle=throttleChar;
myLocos[loco].cab=locoid; myLocos[loco].cab=locoid;
DCC::setThrottle(locoid,0,0); //register this loco address DCC::setThrottle(locoid,0,1); //register this loco address, speed zero, direction forward
StringFormatter::send(stream, F("M%c+%c%d<;>\n"), throttleChar, cmd[3] ,locoid); StringFormatter::send(stream, F("M%c+%c%d<;>\n"), throttleChar, cmd[3] ,locoid);
// TODO... get known Fn states from DCC (need memoryStream improvements to handle data length) // TODO... get known Fn states from DCC (need memoryStream improvements to handle data length)
// for(fKey=0; fKey<29; fKey++)StringFormatter::send(stream,F("M%cA%c<;>F0&s\n"),throttleChar,cmd[3],fkey); // for(fKey=0; fKey<29; fKey++)StringFormatter::send(stream,F("M%cA%c<;>F0&s\n"),throttleChar,cmd[3],fkey);
@ -231,7 +231,7 @@ void WiThrottle::multithrottle(Print & stream, byte * cmd){
case '-': // remove loco case '-': // remove loco
LOOPLOCOS(throttleChar, locoid) { LOOPLOCOS(throttleChar, locoid) {
myLocos[loco].throttle='\0'; myLocos[loco].throttle='\0';
DCC::setThrottle(myLocos[loco].cab,0,0); DCC::setThrottle(myLocos[loco].cab,0,1);
DCC::forgetLoco(myLocos[loco].cab); //unregister this loco address DCC::forgetLoco(myLocos[loco].cab); //unregister this loco address
StringFormatter::send(stream, F("M%c-%c%d<;>\n"), throttleChar, LorS(myLocos[loco].cab), myLocos[loco].cab); StringFormatter::send(stream, F("M%c-%c%d<;>\n"), throttleChar, LorS(myLocos[loco].cab), myLocos[loco].cab);
} }
@ -309,17 +309,17 @@ void WiThrottle::loop() {
} }
void WiThrottle::checkHeartbeat() { void WiThrottle::checkHeartbeat() {
if(heartBeatEnable && (millis()-heartBeat > HEARTBEAT_TIMEOUT*1000)) { // if 2 heartbeats missed... STOP and forget all locos for this client
if(heartBeatEnable && (millis()-heartBeat > HEARTBEAT_TIMEOUT*2000)) {
DIAG(F("WiThrottle hearbeat missed client=%d"),clientid); DIAG(F("WiThrottle hearbeat missed client=%d"),clientid);
// Haertbeat missed... STOP all locos for this client
for (int loco=0;loco<MAX_MY_LOCO;loco++) { for (int loco=0;loco<MAX_MY_LOCO;loco++) {
if (myLocos[loco].throttle!='\0') { if (myLocos[loco].throttle!='\0') {
DCC::setThrottle(myLocos[loco].cab, 1, DCC::getThrottleDirection(myLocos[loco].cab)); DCC::setThrottle(myLocos[loco].cab, 1, DCC::getThrottleDirection(myLocos[loco].cab)); //eStop
DCC::forgetLoco(myLocos[loco].cab); //unregister this loco address
} }
} }
delete this; delete this;
} } else {
else {
// TODO Check if anything has changed on my locos since last notified! // TODO Check if anything has changed on my locos since last notified!
} }
} }