Index: firmware/App/Controllers/Fans.c =================================================================== diff -u -ra3960210792d0811093a6913e505d43eda1918ea -r33d5acc68ffe045546a4fa9a7d381950619ea45d --- firmware/App/Controllers/Fans.c (.../Fans.c) (revision a3960210792d0811093a6913e505d43eda1918ea) +++ firmware/App/Controllers/Fans.c (.../Fans.c) (revision 33d5acc68ffe045546a4fa9a7d381950619ea45d) @@ -80,7 +80,8 @@ 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 the RPM out of range alarm been raise. -static U32 rpmAlarmStartTimer = 0; ///< RPM out of range alarm start timer when the alarm is raised. +static OVERRIDE_U32_T rpmAlarmStartTimeOffset = { 0, 0, 0, 0}; ///< RPM out of range alarm start time offset. +static U32 rpmAlarmStartTime = 0; ///< RPM alarm start time. /// 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 ); @@ -98,29 +99,34 @@ static F32 getMaximumTemperature( void ); static void convertTogglePeriod2RPM( void ); static void monitorFans( void ); +static U32 getRPMAlarmStartTimeOffset( void ); static void publishFansData( void ); /*********************************************************************//** * @brief * The initFans function initializes the fans module. * @details Inputs: none * @details Outputs: fansExecState, fansControlCounter, fansPublishCounter, - * fansMonitorCounter, isPOSTComplete, hasAlarmBeenRaised, rpmAlarmStartTimer, - * fansStatus + * fansMonitorCounter, isPOSTComplete, hasAlarmBeenRaised, rpmAlarmStartTime, + * fansStatus, rpmAlarmStartTimeOffset * @return none *************************************************************************/ void initFans( void ) { FAN_NAMES_T fan; // Initialize the variables - fansExecState = FANS_EXEC_STATE_WAIT_FOR_POST_STATE; - fansControlCounter = 0; - fansPublishCounter = 0; - fansMonitorCounter = 0; - isPOSTComplete = FALSE; - hasAlarmBeenRaised = FALSE; - rpmAlarmStartTimer = 0; + fansExecState = FANS_EXEC_STATE_WAIT_FOR_POST_STATE; + fansControlCounter = 0; + fansPublishCounter = 0; + fansMonitorCounter = 0; + isPOSTComplete = FALSE; + hasAlarmBeenRaised = FALSE; + rpmAlarmStartTime = 0; + rpmAlarmStartTimeOffset.data = 0; + rpmAlarmStartTimeOffset.ovData = 0; + rpmAlarmStartTimeOffset.ovInitData = 0; + rpmAlarmStartTimeOffset.override = 0; // Initialize the fans for ( fan = FAN_INLET_1; fan < NUM_OF_FANS_NAMES; fan++ ) @@ -463,18 +469,18 @@ hasAlarmBeenRaised = ( TRUE == isAlarmActive( ALARM_ID_DG_FAN_RPM_OUT_OF_RANGE ) ? TRUE : FALSE ); // If the alarm has been raised and the alarm start timer is 0, start the timer - if ( ( TRUE == hasAlarmBeenRaised ) && ( 0 == rpmAlarmStartTimer ) ) + if ( ( TRUE == hasAlarmBeenRaised ) && ( 0 == rpmAlarmStartTime ) ) { - rpmAlarmStartTimer = getMSTimerCount(); + rpmAlarmStartTime = getMSTimerCount(); } } } // If the alarm has been raised the silence the alarm time has elapsed, get ready to raise the alarm in case the RPM was out of range // Once the alarm is raised, it is not raised again for 24 hours - else if ( ( TRUE == hasAlarmBeenRaised ) && ( TRUE == didTimeout( rpmAlarmStartTimer, SECONDS_IN_A_DAY ) ) ) + else if ( ( TRUE == hasAlarmBeenRaised ) && ( ( calcTimeSince( rpmAlarmStartTime ) + getRPMAlarmStartTimeOffset() ) >= SECONDS_IN_A_DAY * MS_PER_SECOND ) ) { hasAlarmBeenRaised = FALSE; - rpmAlarmStartTimer = 0; + rpmAlarmStartTime = 0; } fansMonitorCounter = 0; @@ -483,6 +489,25 @@ /*********************************************************************//** * @brief + * The getRPMAlarmStartTimeOffset function gets the RPM alarm start time offset in MS. + * @details Inputs: rpmAlarmStartTimeOffset + * @details Outputs: none + * @return the RPM alarm start time offset + *************************************************************************/ +static U32 getRPMAlarmStartTimeOffset( void ) +{ + U32 startTime = rpmAlarmStartTimeOffset.data; + + if ( OVERRIDE_KEY == rpmAlarmStartTimeOffset.override ) + { + startTime = rpmAlarmStartTimeOffset.ovData; + } + + return startTime; +} + +/*********************************************************************//** + * @brief * The publishFansData function publishes the fans data at the specified * time interval. * @details Inputs: fansPublishCounter, fansPublishInterval @@ -614,4 +639,54 @@ return result; } +/*********************************************************************//** + * @brief + * The testSetFanRPMAlarmStartTimeOffsetOverride function overrides the RPM alarm + * start time offset. + * @details Inputs: none + * @details Outputs: rpmAlarmStartTimeOffset + * @param hours hours to override + * @param minutes minutes to override + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetFanRPMAlarmStartTimeOffsetOverride( U32 hours, U32 minutes ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + rpmAlarmStartTimeOffset.ovData = ( ( hours * MIN_PER_HOUR * SEC_PER_MIN ) + ( minutes * SEC_PER_MIN ) ) * MS_PER_SECOND; + rpmAlarmStartTimeOffset.override = OVERRIDE_KEY; + + result = TRUE; + + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetFanRPMAlarmStartTimeOffsetOverride function resets the RPM alarm + * start time offset override. + * @details Inputs: none + * @details Outputs: rpmAlarmStartTimeOffset + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testResetFanRPMAlarmStartTimeOffsetOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + rpmAlarmStartTimeOffset.override = OVERRIDE_RESET; + rpmAlarmStartTimeOffset.ovData = 0; + rpmAlarmStartTimeOffset.data = 0; + + result = TRUE; + } + + return result; +} + /**@}*/