diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f11fbb0..1ed5a3f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,8 @@ will consitute of a breaking change warranting a new major release: - IMTQ assembly - Syrlinks assembly - Dual Lane Assembly +- RWs are no longer commanded by the ACS Controller during safe mode. Instead the RW speed command + is set to 0 as part or the `doShutDown` of the RW handler. ## Fixed diff --git a/mission/acs/RwHandler.cpp b/mission/acs/RwHandler.cpp index 5ba5d7a3..87979ae8 100644 --- a/mission/acs/RwHandler.cpp +++ b/mission/acs/RwHandler.cpp @@ -55,6 +55,10 @@ void RwHandler::doShutDown() { PoolReadGuard pg(&tmDataset); tmDataset.setValidity(false, true); } + { + PoolReadGuard pg(&rwSpeedActuationSet); + rwSpeedActuationSet.setRwSpeed(0, 10); + } // The power switch is handled by the assembly, so we can go off here directly. setMode(MODE_OFF); } diff --git a/mission/controller/AcsController.cpp b/mission/controller/AcsController.cpp index 39eca18e..ff00d093 100644 --- a/mission/controller/AcsController.cpp +++ b/mission/controller/AcsController.cpp @@ -221,9 +221,8 @@ void AcsController::performSafe() { updateCtrlValData(errAng); updateActuatorCmdData(cmdDipolMtqs); - // commandActuators(cmdDipolMtqs[0], cmdDipolMtqs[1], cmdDipolMtqs[2], - // acsParameters.magnetorquesParameter.torqueDuration, 0, 0, 0, 0, - // acsParameters.rwHandlingParameters.rampTime); + // commandActuators(cmdDipolMtqs[0], cmdDipolMtqs[1], cmdDipolMtqs[2], + // acsParameters.magnetorquerParameter.torqueDuration); } void AcsController::performDetumble() { @@ -472,6 +471,18 @@ void AcsController::performPointingCtrl() { // acsParameters.rwHandlingParameters.rampTime); } +ReturnValue_t AcsController::commandActuators(int16_t xDipole, int16_t yDipole, int16_t zDipole, + uint16_t dipoleTorqueDuration) { + { + PoolReadGuard pg(&dipoleSet); + MutexGuard mg(torquer::lazyLock(), torquer::LOCK_TYPE, torquer::LOCK_TIMEOUT, + torquer::LOCK_CTX); + torquer::NEW_ACTUATION_FLAG = true; + dipoleSet.setDipoles(xDipole, yDipole, zDipole, dipoleTorqueDuration); + } + return returnvalue::OK; +} + ReturnValue_t AcsController::commandActuators(int16_t xDipole, int16_t yDipole, int16_t zDipole, uint16_t dipoleTorqueDuration, int32_t rw1Speed, int32_t rw2Speed, int32_t rw3Speed, int32_t rw4Speed, diff --git a/mission/controller/AcsController.h b/mission/controller/AcsController.h index 76cfe7b5..44e87e7e 100644 --- a/mission/controller/AcsController.h +++ b/mission/controller/AcsController.h @@ -105,6 +105,8 @@ class AcsController : public ExtendedControllerBase, public ReceivesParameterMes void modeChanged(Mode_t mode, Submode_t submode); void announceMode(bool recursive); + ReturnValue_t commandActuators(int16_t xDipole, int16_t yDipole, int16_t zDipole, + uint16_t dipoleTorqueDuration); ReturnValue_t commandActuators(int16_t xDipole, int16_t yDipole, int16_t zDipole, uint16_t dipoleTorqueDuration, int32_t rw1Speed, int32_t rw2Speed, int32_t rw3Speed, int32_t rw4Speed, uint16_t rampTime);