mirror of
https://github.com/DCC-EX/CommandStation-EX.git
synced 2025-07-19 19:38:55 +02:00
Bugfix: Keep power status of track when doing join/unjoin, new keep power option for setTrackMode()
This commit is contained in:
parent
d21bffcaf6
commit
651192788b
@ -197,7 +197,7 @@ void TrackManager::setDCSignal(int16_t cab, byte speedbyte) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TrackManager::setTrackMode(byte trackToSet, TRACK_MODE mode, int16_t dcAddr) {
|
bool TrackManager::setTrackMode(byte trackToSet, TRACK_MODE mode, int16_t dcAddr, bool offAtChange) {
|
||||||
if (trackToSet>lastTrack || track[trackToSet]==NULL) return false;
|
if (trackToSet>lastTrack || track[trackToSet]==NULL) return false;
|
||||||
|
|
||||||
// Remember track mode we came from for later
|
// Remember track mode we came from for later
|
||||||
@ -369,10 +369,9 @@ bool TrackManager::setTrackMode(byte trackToSet, TRACK_MODE mode, int16_t dcAddr
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
// Turn off power if we changed the mode of this track
|
// Turn off power if we changed the mode of this track
|
||||||
if (mode != oldmode) {
|
if (mode != oldmode && offAtChange) {
|
||||||
track[trackToSet]->setPower(POWERMODE::OFF);
|
track[trackToSet]->setPower(POWERMODE::OFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
streamTrackState(NULL,trackToSet);
|
streamTrackState(NULL,trackToSet);
|
||||||
//DIAG(F("TrackMode=%d"),mode);
|
//DIAG(F("TrackMode=%d"),mode);
|
||||||
return true;
|
return true;
|
||||||
@ -667,9 +666,9 @@ void TrackManager::setJoin(bool joined) {
|
|||||||
FOR_EACH_TRACK(t) {
|
FOR_EACH_TRACK(t) {
|
||||||
if (track[t]->getMode() & TRACK_MODE_PROG) { // find PROG track
|
if (track[t]->getMode() & TRACK_MODE_PROG) { // find PROG track
|
||||||
tempProgTrack = t; // remember PROG track
|
tempProgTrack = t; // remember PROG track
|
||||||
setTrackMode(t, TRACK_MODE_MAIN);
|
setTrackMode(t, TRACK_MODE_MAIN, 0, false); // 0 = no DC loco; false = do not turn off pwr
|
||||||
// setPower() of the track called after
|
// then in some cases setPower() is called
|
||||||
// seperately after setJoin() instead
|
// seperately after the setJoin() as well
|
||||||
break; // there is only one prog track, done
|
break; // there is only one prog track, done
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -677,9 +676,7 @@ void TrackManager::setJoin(bool joined) {
|
|||||||
if (tempProgTrack != MAX_TRACKS+1) {
|
if (tempProgTrack != MAX_TRACKS+1) {
|
||||||
// setTrackMode defaults to power off, so we
|
// setTrackMode defaults to power off, so we
|
||||||
// need to preserve that state.
|
// need to preserve that state.
|
||||||
POWERMODE tPTmode = track[tempProgTrack]->getPower(); // get current power status of this track
|
setTrackMode(tempProgTrack, TRACK_MODE_PROG, 0, false); // 0 = no DC loco; false = do not turn off pwr
|
||||||
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;
|
tempProgTrack = MAX_TRACKS+1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -71,7 +71,7 @@ class TrackManager {
|
|||||||
static void setProgPower(POWERMODE mode) {setTrackPower(TRACK_MODE_PROG, mode);}
|
static void setProgPower(POWERMODE mode) {setTrackPower(TRACK_MODE_PROG, mode);}
|
||||||
|
|
||||||
static const int16_t MAX_TRACKS=8;
|
static const int16_t MAX_TRACKS=8;
|
||||||
static bool setTrackMode(byte track, TRACK_MODE mode, int16_t DCaddr=0);
|
static bool setTrackMode(byte track, TRACK_MODE mode, int16_t DCaddr=0, bool offAtChange=true);
|
||||||
static bool parseEqualSign(Print * stream, int16_t params, int16_t p[]);
|
static bool parseEqualSign(Print * stream, int16_t params, int16_t p[]);
|
||||||
static void loop();
|
static void loop();
|
||||||
static POWERMODE getMainPower();
|
static POWERMODE getMainPower();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user