Index: firmware/App/Controllers/BloodLeak.c =================================================================== diff -u -r71b08e3335b0c111cc57a562089e8ac0b206d258 -r2a6ac80309cb52922f856b3eb4ff2c876b44c0d6 --- firmware/App/Controllers/BloodLeak.c (.../BloodLeak.c) (revision 71b08e3335b0c111cc57a562089e8ac0b206d258) +++ firmware/App/Controllers/BloodLeak.c (.../BloodLeak.c) (revision 2a6ac80309cb52922f856b3eb4ff2c876b44c0d6) @@ -128,7 +128,7 @@ bloodLeakSetPointSeqLength = 0; // Set the blood leak set pint sequence to 0 to be initialized - memset( bloodLeakSetPointSequence, 0x0, BLOOD_LEAK_SET_POINT_SEQ_MAX_LENGTH); + memset( bloodLeakSetPointSequence, 0x0, BLOOD_LEAK_SET_POINT_SEQ_MAX_LENGTH ); } /*********************************************************************//** @@ -279,7 +279,7 @@ if( bloodLeakUARTCmdIndex < bloodLeakSetPointSeqLength ) { // The active high index is the length - 2 they are the last two elements - 1 since the - // length starts from 0 + // index starts from 0 U32 activeHighIndex = bloodLeakSetPointSeqLength - 2 - 1; // Check if the current index towards the end of the buffer which are 1 and 0 if( activeHighIndex == bloodLeakUARTCmdIndex ) Index: firmware/App/Controllers/Fans.c =================================================================== diff -u -r5addd92e279ebc0871364fee70e3ac74db21001a -r2a6ac80309cb52922f856b3eb4ff2c876b44c0d6 --- firmware/App/Controllers/Fans.c (.../Fans.c) (revision 5addd92e279ebc0871364fee70e3ac74db21001a) +++ firmware/App/Controllers/Fans.c (.../Fans.c) (revision 2a6ac80309cb52922f856b3eb4ff2c876b44c0d6) @@ -73,12 +73,13 @@ static FAN_STATUS_T fansStatus; ///< Fans status. static FANS_EXEC_STATES_T fansExecState = FANS_EXEC_STATE_WAIT_FOR_POST_STATE; ///< Fans exec state. -static U32 fansControlCounter = 0; ///< Fans control interval counter. -static U32 fansPublishCounter = 0; ///< Fans data publish interval counter. -static U32 fansMonitorCounter = 0; ///< Fans monitor interval counter. +static U32 fansControlCounter = 0; ///< Fans control interval counter. +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 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 ); @@ -96,6 +97,7 @@ static void convertTogglePeriod2RPM( void ); static void monitorFans( void ); static U32 getPublishFansDataInterval( void ); +static U32 getRPMAlarmStartTimeOffset( void ); static void publishFansData( void ); /*********************************************************************//** @@ -112,13 +114,17 @@ 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++ ) @@ -437,19 +443,19 @@ // Set the alarm flag to TRUE hasAlarmBeenRaised = TRUE; } - // If the alarm has been raised but the time that the alarm has not been set, set the alarm start timer - if ( ( TRUE == hasAlarmBeenRaised ) && ( 0 == rpmAlarmStartTimer ) ) + // If the alarm has been raised but the start time of the alarm has not been set, set the alarm start timer + if ( ( TRUE == hasAlarmBeenRaised ) && ( 0 == rpmAlarmStartTime ) ) { - rpmAlarmStartTimer = getMSTimerCount(); + rpmAlarmStartTime = getMSTimerCount(); } } // If the alarm has been raised and the alarm has been silent for at least a day, set the flag to FALSE // This way, if the fans RPM are out of range the alarm will be raised again. This alarm is supposed to be raised - // and remain silent for a define period of time. - else if ( ( TRUE == hasAlarmBeenRaised ) && ( TRUE == didTimeout( rpmAlarmStartTimer, SECONDS_IN_A_DAY ) ) ) + // and remain silent for a defined period of time. + else if ( ( TRUE == hasAlarmBeenRaised ) && ( ( calcTimeSince( rpmAlarmStartTime ) + getRPMAlarmStartTimeOffset() ) >= SECONDS_IN_A_DAY * MS_PER_SECOND ) ) { hasAlarmBeenRaised = FALSE; - rpmAlarmStartTimer = 0; + rpmAlarmStartTime = 0; } else { @@ -467,6 +473,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 getPublishFansDataInterval function gets the fans data publish interval. * @details Inputs: fansPublishInterval * @details Outputs: none @@ -612,5 +637,55 @@ 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; +} + /**@}*/ Index: firmware/App/Controllers/Fans.h =================================================================== diff -u -r09e6cf9de34acf18f6e1138bf56ac0edb4821186 -r2a6ac80309cb52922f856b3eb4ff2c876b44c0d6 --- firmware/App/Controllers/Fans.h (.../Fans.h) (revision 09e6cf9de34acf18f6e1138bf56ac0edb4821186) +++ firmware/App/Controllers/Fans.h (.../Fans.h) (revision 2a6ac80309cb52922f856b3eb4ff2c876b44c0d6) @@ -49,14 +49,17 @@ void execFans( void ); -F32 getMeasuredFanRPM( FAN_NAMES_T fan ); +F32 getMeasuredFanRPM( FAN_NAMES_T fan ); BOOL testSetFanPublishIntervalOverride( U32 value ); BOOL testResetFanPublishIntervalOverride( void ); BOOL testSetFanRPMOverride( U32 fanId, F32 rpm ); BOOL testResetFanRPMOverride( U32 fanId ); +BOOL testSetFanRPMAlarmStartTimeOffsetOverride( U32 hours, U32 minutes ); +BOOL testResetFanRPMAlarmStartTimeOffsetOverride( void ); + /**@}*/ Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -ra6e640d40956db614aca0abd2327e9e700dfd6cd -r2a6ac80309cb52922f856b3eb4ff2c876b44c0d6 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision a6e640d40956db614aca0abd2327e9e700dfd6cd) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 2a6ac80309cb52922f856b3eb4ff2c876b44c0d6) @@ -1606,6 +1606,10 @@ handleTestSyringePumpForceSensorCalibrateRequest( message ); break; + case MSG_ID_HD_FAN_RPM_ALARM_START_TIME_OVERRIDE: + handleTestFansRPMAlarmStartTimeOffsetOverrideRequest( message ); + break; + default: // Unrecognized message ID received - ignore break; Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r5addd92e279ebc0871364fee70e3ac74db21001a -r2a6ac80309cb52922f856b3eb4ff2c876b44c0d6 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 5addd92e279ebc0871364fee70e3ac74db21001a) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 2a6ac80309cb52922f856b3eb4ff2c876b44c0d6) @@ -6747,4 +6747,37 @@ sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); } +/*********************************************************************//** + * @brief + * The handleTestFansRPMAlarmStartTimeOverrideRequest function handles a + * request to override the fan RPM alarm start time. + * @details Inputs: none + * @details Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleTestFansRPMAlarmStartTimeOffsetOverrideRequest( MESSAGE_T *message ) +{ + TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; + BOOL result = FALSE; + + // verify payload length + if ( sizeof( TEST_OVERRIDE_ARRAY_PAYLOAD_T ) == message->hdr.payloadLen ) + { + memcpy( &payload, message->payload, sizeof( TEST_OVERRIDE_ARRAY_PAYLOAD_T ) ); + + if ( FALSE == payload.reset ) + { + result = testSetFanRPMAlarmStartTimeOffsetOverride( payload.state.u32, payload.index ); + } + else + { + result = testResetFanRPMAlarmStartTimeOffsetOverride(); + } + } + + // Respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + /**@}*/ Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r5addd92e279ebc0871364fee70e3ac74db21001a -r2a6ac80309cb52922f856b3eb4ff2c876b44c0d6 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 5addd92e279ebc0871364fee70e3ac74db21001a) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 2a6ac80309cb52922f856b3eb4ff2c876b44c0d6) @@ -761,6 +761,9 @@ // MSG_ID_HD_STOP_RTC_CLOCK void handleStopHDRTCClock( MESSAGE_T *message ); +// MSG_ID_HD_FAN_RPM_ALARM_START_TIME_OVERRIDE +void handleTestFansRPMAlarmStartTimeOffsetOverrideRequest( MESSAGE_T *message ); + /**@}*/ #endif