From 3d272a8b1eeecd91cfc735599f48521c4758f5bd Mon Sep 17 00:00:00 2001 From: Asbelos Date: Wed, 23 Apr 2025 08:49:58 +0100 Subject: [PATCH] Join/power order change from master --- CommandDistributor.cpp | 8 ++++---- EXRAIL2.cpp | 3 ++- TrackManager.cpp | 5 ++--- WiThrottle.cpp | 2 +- version.h | 3 ++- 5 files changed, 11 insertions(+), 10 deletions(-) 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"),reason); + broadcastReply(COMMAND_TYPE, F("\n"),reason); } else { if (main) { //reason = F("MAIN"); @@ -331,9 +334,6 @@ void CommandDistributor::broadcastPower() { broadcastReply(COMMAND_TYPE, F("\n")); } } - - if (state != '2') - 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 with bad consist addresses. // 5.5.21 - Backed out the broken merge with frequency change and // 5.5.20 - EXRAIL SET/RESET assert fix // 5.5.19 - Railcom change to use RailcomCollector device