diff --git a/GITHUB_SHA.h b/GITHUB_SHA.h index fc9fb44..8f67bc8 100644 --- a/GITHUB_SHA.h +++ b/GITHUB_SHA.h @@ -1 +1 @@ -#define GITHUB_SHA "TM-PORTX-20220607" +#define GITHUB_SHA "TM-PORTX-20220607-1" diff --git a/MotorDriver.h b/MotorDriver.h index 7f0b169..dd5d307 100644 --- a/MotorDriver.h +++ b/MotorDriver.h @@ -121,7 +121,8 @@ class MotorDriver { } bool isPWMCapable(); bool canMeasureCurrent(); - static bool usePWM; + bool trackPWM; + static bool usePWM; // TODO: Remove static bool commonFaultPin; // This is a stupid motor shield which has only a common fault pin for both outputs inline byte getFaultPin() { return faultPin; diff --git a/TrackManager.cpp b/TrackManager.cpp index d73c365..6fae972 100644 --- a/TrackManager.cpp +++ b/TrackManager.cpp @@ -192,13 +192,23 @@ bool TrackManager::setTrackMode(byte trackToSet, TRACK_MODE mode, int16_t dcAddr if (track[t]->isPWMCapable()) { canDo=false; break; + } else { + track[t]->trackPWM=false; + DIAG(F("Track %c trackPWM 0 (not capable)"), t+'A'); } - } else if (trackMode[t]==TRACK_MODE_MAIN || trackMode[t]==TRACK_MODE_PROG) - canDo &= track[t]->isPWMCapable(); + } else if (trackMode[t]==TRACK_MODE_MAIN || trackMode[t]==TRACK_MODE_PROG) { + track[t]->trackPWM = track[t]->isPWMCapable(); + DIAG(F("Track %c trackPWM %d"), t+'A', track[t]->trackPWM); + canDo &= track[t]->trackPWM; + } } - //DIAG(F("HAMode=%d"),canDo); + if (!canDo) { DCCTimer::clearPWM(); + FOR_EACH_TRACK(t) { + track[t]->trackPWM=false; + DIAG(F("Track %c trackPWM 0 (global override)"), t+'A'); + } } if (MotorDriver::usePWM != canDo) DIAG(F("HA mode changed from %d to %d"), MotorDriver::usePWM, canDo);