Index: firmware/App/Controllers/Fans.c =================================================================== diff -u -rb66dabe73c8418e0e4ee358ce787b6d9bd9e128e -rfe4bcb2c7b5a0ef8d30fd84750ec2c4256db03e2 --- firmware/App/Controllers/Fans.c (.../Fans.c) (revision b66dabe73c8418e0e4ee358ce787b6d9bd9e128e) +++ firmware/App/Controllers/Fans.c (.../Fans.c) (revision fe4bcb2c7b5a0ef8d30fd84750ec2c4256db03e2) @@ -8,6 +8,7 @@ #include "SystemCommMessages.h" #include "TaskGeneral.h" #include "Temperatures.h" +#include "Timers.h" /** * @addtogroup Fans @@ -61,7 +62,8 @@ static U32 fansPublishCounter = 0; ///< Fans data publish interval counter. static U32 fansMonitorCounter = 0; ///< Fans monitor interval counter. static BOOL isPOSTComplete = FALSE; ///< Flag that indicates whether POST is complete or not. -static BOOL hasAlarmBeenRaised = FALSE; ///< Flag that indicates whether RPM out of range alarm has been raised once. +static BOOL hasAlarmBeenRaised = FALSE; ///< Flag that indicates whether RPM out of range alarm has been raised once. +static U32 rpmAlarmStartTimer = 0; ///< RPM out of range alarm start timer when the alarm is raised. /// Temperature to duty cycle conversion slope (duty cycle not in percent) static const F32 SLOPE = ( FANS_MAX_DUTY_CYCLE - FANS_MIN_DUTY_CYCLE ) / ( MAX_ALLOWED_AMBINET_TEMPERATURE - MIN_ALLOWED_AMBIENT_TEMPERATURE ); @@ -86,7 +88,8 @@ * The initFans function initializes the fans module. * @details Inputs: none * @details Outputs: fansExecState, fansMonitorCounter, fansControlCounter, - * fansPublishCounter, isPOSTComplete, hasAlarmBeenRaised, fansStatus + * fansPublishCounter, isPOSTComplete, hasAlarmBeenRaised, fansStatus, + * rpmAlarmStartTimer * @return none *************************************************************************/ void initFans( void ) @@ -100,6 +103,7 @@ fansMonitorCounter = 0; isPOSTComplete = FALSE; hasAlarmBeenRaised = FALSE; + rpmAlarmStartTimer = 0; // Initialize the fans for ( fan = FAN_INLET_1; fan < NUM_OF_FANS_NAMES; fan++ ) @@ -380,8 +384,8 @@ /*********************************************************************//** * @brief * The monitorFans function monitors the fans for RPM. - * @details Inputs: fansStatus - * @details Outputs: none + * @details Inputs: fansMonitorCounter, rpmAlarmStartTimer, hasAlarmBeenRaised + * @details Outputs: fansMonitorCounter, hasAlarmBeenRaised, rpmAlarmStartTimer * @return none *************************************************************************/ static void monitorFans( void ) @@ -407,8 +411,18 @@ // If the RPM out of range alarm has been raised, do not raise it again, until its alarm silence time has been elapsed hasAlarmBeenRaised = ( TRUE == isAlarmActive( ALARM_ID_HD_FAN_RPM_OUT_OF_RANGE ) ? TRUE : FALSE ); + + if ( ( TRUE == hasAlarmBeenRaised ) && ( 0 == rpmAlarmStartTimer ) ) + { + rpmAlarmStartTimer = getMSTimerCount(); + } } } + else if ( ( TRUE == hasAlarmBeenRaised ) && ( TRUE == didTimeout( rpmAlarmStartTimer, SECONDS_IN_A_DAY ) ) ) + { + hasAlarmBeenRaised = FALSE; + rpmAlarmStartTimer = 0; + } fansMonitorCounter = 0; }