diff --git a/CommandDistributor.cpp b/CommandDistributor.cpp index 32121e1..43ccd7f 100644 --- a/CommandDistributor.cpp +++ b/CommandDistributor.cpp @@ -312,6 +312,9 @@ void CommandDistributor::broadcastPower() { state = '1'; } + if (state != '2') + broadcastReply(COMMAND_TYPE, F("
\n"),state);
+
// additional info about MAIN, PROG and JOIN
bool main=TrackManager::getMainPower()==POWERMODE::ON;
bool prog=TrackManager::getProgPower()==POWERMODE::ON;
@@ -320,7 +323,7 @@ void CommandDistributor::broadcastPower() {
const FSH * reason=F("");
if (join) {
reason = F(" JOIN"); // with space at start so we can append without space
- broadcastReply(COMMAND_TYPE, F(" \n"),state);
#ifdef CD_HANDLE_RING
// send '1' if all main are on, otherwise global state (which in that case is '0' or '2')
broadcastReply(WITHROTTLE_TYPE, F("PPA%c\n"), main?'1': state);
diff --git a/EXRAIL2.cpp b/EXRAIL2.cpp
index 31f8739..a3c965c 100644
--- a/EXRAIL2.cpp
+++ b/EXRAIL2.cpp
@@ -934,8 +934,9 @@ void RMFT2::loop2() {
#ifndef DISABLE_PROG
case OPCODE_JOIN:
- TrackManager::setPower(POWERMODE::ON);
TrackManager::setJoin(true);
+ TrackManager::setMainPower(POWERMODE::ON);
+ TrackManager::setProgPower(POWERMODE::ON);
break;
case OPCODE_UNJOIN:
diff --git a/TrackManager.cpp b/TrackManager.cpp
index b793de1..d675e0a 100644
--- a/TrackManager.cpp
+++ b/TrackManager.cpp
@@ -670,7 +670,8 @@ void TrackManager::setJoin(bool joined) {
if (track[t]->getMode() & TRACK_MODE_PROG) { // find PROG track
tempProgTrack = t; // remember PROG track
setTrackMode(t, TRACK_MODE_MAIN);
- track[t]->setPower(POWERMODE::ON); // if joined, always on
+ // setPower() of the track called after
+ // seperately after setJoin() instead
break; // there is only one prog track, done
}
}
@@ -682,8 +683,6 @@ void TrackManager::setJoin(bool joined) {
setTrackMode(tempProgTrack, TRACK_MODE_PROG); // set track mode back to prog
track[tempProgTrack]->setPower(tPTmode); // set power status as it was before
tempProgTrack = MAX_TRACKS+1;
- } else {
- DIAG(F("Unjoin but no remembered prog track"));
}
}
#endif
diff --git a/WiThrottle.cpp b/WiThrottle.cpp
index 11050b9..aaa60de 100644
--- a/WiThrottle.cpp
+++ b/WiThrottle.cpp
@@ -500,9 +500,9 @@ void WiThrottle::getLocoCallback(int16_t locoid) {
char addcmd[20]={'M',stashThrottleChar,'+', addrchar};
itoa(locoid,addcmd+4,10);
stashInstance->multithrottle(stashStream, (byte *)addcmd);
+ TrackManager::setJoin(true); // <1 JOIN> so we can drive loco away
TrackManager::setMainPower(POWERMODE::ON);
TrackManager::setProgPower(POWERMODE::ON);
- TrackManager::setJoin(true); // <1 JOIN> so we can drive loco away
DIAG(F("LocoCallback commit success"));
stashStream->commit();
}
diff --git a/version.h b/version.h
index 2854062..134b26f 100644
--- a/version.h
+++ b/version.h
@@ -3,7 +3,8 @@
#include "StringFormatter.h"
-#define VERSION "5.5.21"
+#define VERSION "5.5.22"
+// 5.5.22 - (5.4.9) Handle non-compliant decoders returning 255 for cv 20 and confusing