Index: firmware/App/Controllers/Ejector.c =================================================================== diff -u -r395522dffef1348e176564925656012f529c1910 -rf054fdd3579dacb03b5b41a363e259949ff63965 --- firmware/App/Controllers/Ejector.c (.../Ejector.c) (revision 395522dffef1348e176564925656012f529c1910) +++ firmware/App/Controllers/Ejector.c (.../Ejector.c) (revision f054fdd3579dacb03b5b41a363e259949ff63965) @@ -36,6 +36,9 @@ #define EJECTOR_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Ejector data publish interval. #define DATA_PUBLISH_COUNTER_START_COUNT 13 ///< Ejector data publish start counter. +/// Ejector homing post test time interval (ms/task time) +#define EJECTOR_HOME_POST_TIMEOUT ( 10 * MS_PER_SECOND / TASK_GENERAL_INTERVAL ) + #define EJECTOR_RETRACT_MOTOR_SPEED_RPM -350.0F ///< Ejector motor retract speed (in RPM). #define EJECTOR_EXTEND_MOTOR_SPEED_RPM 162.5F ///< Ejector motor extend speed (in RPM). #define EJECTOR_OFF_MOTOR_SPEED_RPM 0.0F ///< Ejector motor extend speed (in RPM). @@ -62,6 +65,8 @@ static BOOL ejectorExtendRequested; ///< Flag indicating that ejector extend operation is requested. static BOOL ejectorAbortRequested; ///< Flag indicating that ejector abort operation in requested. +static U32 ejectorHomePostTimerCounter; ///< TImer counter for ejector homing POST test. + // ********** private function prototypes ********** static EJECTOR_STATE_T handleEjectorStartState( void ); @@ -99,6 +104,7 @@ ejectorDataPublishInterval.ovData = EJECTOR_DATA_PUB_INTERVAL; ejectorDataPublishInterval.ovInitData = EJECTOR_DATA_PUB_INTERVAL; ejectorDataPublishInterval.override = OVERRIDE_RESET; + ejectorHomePostTimerCounter = 0; } /*********************************************************************//** @@ -536,7 +542,38 @@ } } +/*********************************************************************//** + * @brief + * The execEjectorHomingTest function executes the ejector homing POST test. + * Commands the ejector to home on first call. + * @details \b Inputs: ejectorHomePostTimerCounter + * @details \b Outputs: ejectorHomePostTimerCounter + * @return in progress, passed, or failed + *************************************************************************/ +SELF_TEST_STATUS_T execEjectorHomingTest( void ) +{ + SELF_TEST_STATUS_T result = SELF_TEST_STATUS_IN_PROGRESS; + if ( 0U == ejectorHomePostTimerCounter ) + { + homeEjector(); + } + + if ( ++ejectorHomePostTimerCounter >= EJECTOR_HOME_POST_TIMEOUT ) + { + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_TD_EJECTOR_POST_TEST_FAILED, (U32)getEjectorState() ); + result = SELF_TEST_STATUS_FAILED; + } + else if ( EJECTOR_STATE_RETRACTED == getEjectorState() ) + { + ejectorHomePostTimerCounter = 0; + result = SELF_TEST_STATUS_PASSED; + } + + return result; +} + + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/