#ifndef SAFECTRL_H_ #define SAFECTRL_H_ #include #include #include #include "../AcsParameters.h" #include "../SensorValues.h" #include "eive/resultClassIds.h" class SafeCtrl { public: SafeCtrl(AcsParameters *acsParameters_); virtual ~SafeCtrl(); static const uint8_t INTERFACE_ID = CLASS_ID::ACS_SAFE; static const ReturnValue_t SAFECTRL_MEKF_INPUT_INVALID = MAKE_RETURN_CODE(0x01); void loadAcsParameters(AcsParameters *acsParameters_); ReturnValue_t safeMekf(timeval now, double *quatBJ, bool quatBJValid, double *magFieldModel, bool magFieldModelValid, double *sunDirModel, bool sunDirModelValid, double *satRateMekf, bool rateMekfValid, double *sunDirRef, double *satRatRef, // From Guidance (!) double *outputAngle, double *outputMagMomB, bool *outputValid); void safeNoMekf(timeval now, double *susDirB, bool susDirBValid, double *sunRateB, bool sunRateBValid, double *magFieldB, bool magFieldBValid, double *magRateB, bool magRateBValid, double *sunDirRef, double *satRateRef, double *outputAngle, double *outputMagMomB, bool *outputValid); void idleSunPointing(); // with reaction wheels protected: private: AcsParameters::SafeModeControllerParameters *safeModeControllerParameters; AcsParameters::InertiaEIVE *inertiaEIVE; double gainMatrixInertia[3][3]; double magFieldBState[3]; timeval magFieldBStateTime; }; #endif /* ACS_CONTROL_SAFECTRL_H_ */