diff --git a/CommandDistributor.cpp b/CommandDistributor.cpp index 6770e7a..e8404de 100644 --- a/CommandDistributor.cpp +++ b/CommandDistributor.cpp @@ -283,7 +283,7 @@ void CommandDistributor::broadcastPower() { //DIAG(F("m=%d p=%d j=%d"), main, prog, join); const FSH * reason=F(""); if (join) { - reason = F("JOIN"); + reason = F(" JOIN"); // with space at start so we can append without space broadcastReply(COMMAND_TYPE, F("\n"),reason); } else { if (main) { @@ -303,7 +303,7 @@ void CommandDistributor::broadcastPower() { broadcastReply(WITHROTTLE_TYPE, F("PPA%c\n"), main?'1': state); #endif - LCD(2,F("Power %S %S"),state=='1'?F("On"): ( state=='0'? F("Off") : F("SC") ),reason); + LCD(2,F("Power %S%S"),state=='1'?F("On"): ( state=='0'? F("Off") : F("SC") ),reason); } void CommandDistributor::broadcastRaw(clientType type, char * msg) { diff --git a/DCCEXParser.cpp b/DCCEXParser.cpp index f3cdfb2..aefed4c 100644 --- a/DCCEXParser.cpp +++ b/DCCEXParser.cpp @@ -587,7 +587,6 @@ void DCCEXParser::parseOne(Print *stream, byte *com, RingStream * ringStream) } else break; // will reply } - CommandDistributor::broadcastPower(); //TrackManager::streamTrackState(NULL,t); return; @@ -619,7 +618,6 @@ void DCCEXParser::parseOne(Print *stream, byte *com, RingStream * ringStream) } else break; // will reply } - CommandDistributor::broadcastPower(); return; } diff --git a/EXRAIL2.cpp b/EXRAIL2.cpp index 3e55620..cc3269b 100644 --- a/EXRAIL2.cpp +++ b/EXRAIL2.cpp @@ -414,7 +414,6 @@ void RMFT2::driveLoco(byte speed) { power on appropriate track if DC or main if dcc if (TrackManager::getMainPowerMode()==POWERMODE::OFF) { TrackManager::setMainPower(POWERMODE::ON); - CommandDistributor::broadcastPower(); } **********/ @@ -642,7 +641,6 @@ void RMFT2::loop2() { case OPCODE_POWEROFF: TrackManager::setPower(POWERMODE::OFF); TrackManager::setJoin(false); - CommandDistributor::broadcastPower(); break; case OPCODE_SET_POWER: @@ -837,12 +835,10 @@ void RMFT2::loop2() { case OPCODE_JOIN: TrackManager::setPower(POWERMODE::ON); TrackManager::setJoin(true); - CommandDistributor::broadcastPower(); break; case OPCODE_UNJOIN: TrackManager::setJoin(false); - CommandDistributor::broadcastPower(); break; case OPCODE_READ_LOCO1: // READ_LOCO is implemented as 2 separate opcodes @@ -870,7 +866,6 @@ void RMFT2::loop2() { case OPCODE_POWERON: TrackManager::setMainPower(POWERMODE::ON); TrackManager::setJoin(false); - CommandDistributor::broadcastPower(); break; case OPCODE_START: diff --git a/TrackManager.cpp b/TrackManager.cpp index 7d2b36b..4a501a1 100644 --- a/TrackManager.cpp +++ b/TrackManager.cpp @@ -489,10 +489,13 @@ std::vectorTrackManager::getMainDrivers() { // Set track power for all tracks with this mode void TrackManager::setTrackPower(TRACK_MODE trackmodeToMatch, POWERMODE powermode) { + bool didChange=false; FOR_EACH_TRACK(t) { MotorDriver *driver=track[t]; TRACK_MODE trackmodeOfTrack = driver->getMode(); if (trackmodeToMatch & trackmodeOfTrack) { + if (powermode != driver->getPower()) + didChange=true; if (powermode == POWERMODE::ON) { if (trackmodeOfTrack & TRACK_MODE_DC) { driver->setBrake(true); // DC starts with brake on @@ -507,12 +510,15 @@ void TrackManager::setTrackPower(TRACK_MODE trackmodeToMatch, POWERMODE powermod driver->setPower(powermode); } } + if (didChange) + CommandDistributor::broadcastPower(); } // Set track power for this track, inependent of mode void TrackManager::setTrackPower(POWERMODE powermode, byte t) { MotorDriver *driver=track[t]; TRACK_MODE trackmode = driver->getMode(); + POWERMODE oldpower = driver->getPower(); if (trackmode & TRACK_MODE_NONE) { driver->setBrake(true); // Track is unused. Brake is good to have. powermode = POWERMODE::OFF; // Track is unused. Force it to OFF @@ -530,6 +536,8 @@ void TrackManager::setTrackPower(POWERMODE powermode, byte t) { } } driver->setPower(powermode); + if (oldpower != driver->getPower()) + CommandDistributor::broadcastPower(); } // returns state of the one and only prog track diff --git a/WiThrottle.cpp b/WiThrottle.cpp index 4eb0a25..244dfd8 100644 --- a/WiThrottle.cpp +++ b/WiThrottle.cpp @@ -150,7 +150,6 @@ void WiThrottle::parse(RingStream * stream, byte * cmdx) { DCCWaveform::progTrack.setPowerMode(cmd[3]=='1'?POWERMODE::ON:POWERMODE::OFF); */ - CommandDistributor::broadcastPower(); } #if defined(EXRAIL_ACTIVE) else if (cmd[1]=='R' && cmd[2]=='A' && cmd[3]=='2' ) { // Route activate @@ -496,7 +495,6 @@ void WiThrottle::getLocoCallback(int16_t locoid) { TrackManager::setJoin(true); // <1 JOIN> so we can drive loco away DIAG(F("LocoCallback commit success")); stashStream->commit(); - CommandDistributor::broadcastPower(); } void WiThrottle::sendIntro(Print* stream) {