Index: firmware/App/Controllers/Fans.c =================================================================== diff -u -rfe4bcb2c7b5a0ef8d30fd84750ec2c4256db03e2 -r4a9872d81bae53492c124d0378028ece422f1b4d --- firmware/App/Controllers/Fans.c (.../Fans.c) (revision fe4bcb2c7b5a0ef8d30fd84750ec2c4256db03e2) +++ firmware/App/Controllers/Fans.c (.../Fans.c) (revision 4a9872d81bae53492c124d0378028ece422f1b4d) @@ -394,8 +394,10 @@ { if ( FALSE == hasAlarmBeenRaised ) { - BOOL isFanRPMOutOfRange; FAN_NAMES_T fan; + BOOL isFanRPMOutOfRange = FALSE; + BOOL isAlarmTriggered = FALSE; + F32 rpm = 0.0; // The RPM is expected to be 5500 @ 100% duty cycle // The nominal RPM = duty cycle * 5500 / 1.0 @@ -406,17 +408,24 @@ for ( fan = FAN_INLET_1; fan < NUM_OF_FANS_NAMES; fan++ ) { - isFanRPMOutOfRange = ( getMeasuredFanRPM( fan ) < fansMinAllowedRPM ) || ( getMeasuredFanRPM( fan ) > fansMaxAllowedRPM ); - isPersistentAlarmTriggered( ALARM_ID_HD_FAN_RPM_OUT_OF_RANGE, isFanRPMOutOfRange ); + rpm = getMeasuredFanRPM( fan ); + isFanRPMOutOfRange |= ( rpm < fansMinAllowedRPM ) || ( rpm > fansMaxAllowedRPM ); + } - // 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 ); + isAlarmTriggered = isPersistentAlarmTriggered( ALARM_ID_HD_FAN_RPM_OUT_OF_RANGE, isFanRPMOutOfRange ); - if ( ( TRUE == hasAlarmBeenRaised ) && ( 0 == rpmAlarmStartTimer ) ) - { - rpmAlarmStartTimer = getMSTimerCount(); - } + if ( TRUE == isAlarmTriggered ) + { + ALARM_DATA_T alarmData; + alarmData.data.flt.data = rpm; + activateAlarm1Data( ALARM_ID_HD_FAN_RPM_OUT_OF_RANGE, alarmData ); + hasAlarmBeenRaised = TRUE; } + + if ( ( TRUE == hasAlarmBeenRaised ) && ( 0 == rpmAlarmStartTimer ) ) + { + rpmAlarmStartTimer = getMSTimerCount(); + } } else if ( ( TRUE == hasAlarmBeenRaised ) && ( TRUE == didTimeout( rpmAlarmStartTimer, SECONDS_IN_A_DAY ) ) ) { Index: firmware/App/Controllers/Switches.c =================================================================== diff -u -rfe4bcb2c7b5a0ef8d30fd84750ec2c4256db03e2 -r4a9872d81bae53492c124d0378028ece422f1b4d --- firmware/App/Controllers/Switches.c (.../Switches.c) (revision fe4bcb2c7b5a0ef8d30fd84750ec2c4256db03e2) +++ firmware/App/Controllers/Switches.c (.../Switches.c) (revision 4a9872d81bae53492c124d0378028ece422f1b4d) @@ -84,7 +84,7 @@ break; default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_HD_INVALID_SWITCH_ID, i ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_HD_INVALID_SWITCH_ID, i ) break; } @@ -137,7 +137,7 @@ } else { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_HD_INVALID_SWITCH_ID, (U32)switchId ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_HD_INVALID_SWITCH_ID, (U32)switchId ) } return (OPN_CLS_STATE_T)status; Index: firmware/App/Controllers/Temperatures.c =================================================================== diff -u -rb66dabe73c8418e0e4ee358ce787b6d9bd9e128e -r4a9872d81bae53492c124d0378028ece422f1b4d --- firmware/App/Controllers/Temperatures.c (.../Temperatures.c) (revision b66dabe73c8418e0e4ee358ce787b6d9bd9e128e) +++ firmware/App/Controllers/Temperatures.c (.../Temperatures.c) (revision 4a9872d81bae53492c124d0378028ece422f1b4d) @@ -182,7 +182,7 @@ } else { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_HD_INVALID_TEMPERATURE_SENSOR_SELECTED, sensorID ); + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_HD_INVALID_TEMPERATURE_SENSOR_SELECTED, sensorID ); } return temperature; @@ -250,13 +250,23 @@ static void monitorTemperatures( void ) { TEMPERATURES_T sensor; + BOOL isAlarmTriggered; + F32 temperature = 0.0; + BOOL isTempOutOfRange = FALSE; for ( sensor = THERMISTOR_ONBOARD_NTC; sensor < NUM_OF_TEMPERATURES; sensor++ ) { - F32 temperature = getTemperatureValue( sensor ); - BOOL isTempOutOfRange = ( temperature > MAX_ALLOWED_TEMPERATURE ) || ( temperature < MIN_ALLOWED_TEMPERATURE ); + temperature = getTemperatureValue( sensor ); + isTempOutOfRange |= ( temperature > MAX_ALLOWED_TEMPERATURE ) || ( temperature < MIN_ALLOWED_TEMPERATURE ); + } - isPersistentAlarmTriggered( ALARM_ID_HD_TEMPERATURES_OUT_OF_RANGE, isTempOutOfRange ); + isAlarmTriggered = isPersistentAlarmTriggered( ALARM_ID_HD_TEMPERATURES_OUT_OF_RANGE, isTempOutOfRange ); + + if ( TRUE == isAlarmTriggered ) + { + ALARM_DATA_T alarmData; + alarmData.data.flt.data = temperature; + activateAlarm1Data( ALARM_ID_HD_TEMPERATURES_OUT_OF_RANGE, alarmData ); } } @@ -419,14 +429,9 @@ if ( ( sensorID < NUM_OF_TEMPERATURES ) && ( TRUE == isTestingActivated() ) ) { - // There is a temperature range that the thermistors can be set to, otherwise, the driver - // will throw an alarm. Also, the fans driver depends on these values to continuously control the fans - if ( ( temperature >= MIN_ALLOWED_TEMPERATURE ) && ( temperature < MAX_ALLOWED_TEMPERATURE ) ) - { - result = TRUE; - temperaturesStatus[ sensorID ].temperatureValue.ovData = temperature; - temperaturesStatus[ sensorID ].temperatureValue.override = OVERRIDE_KEY; - } + result = TRUE; + temperaturesStatus[ sensorID ].temperatureValue.ovData = temperature; + temperaturesStatus[ sensorID ].temperatureValue.override = OVERRIDE_KEY; } return result; Index: firmware/App/Modes/ModeInitPOST.c =================================================================== diff -u -ra69fcb7945b0300b47ce3287f8cb22c7c26171dc -r4a9872d81bae53492c124d0378028ece422f1b4d --- firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision a69fcb7945b0300b47ce3287f8cb22c7c26171dc) +++ firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision 4a9872d81bae53492c124d0378028ece422f1b4d) @@ -134,6 +134,11 @@ postState = handlePOSTStatus( testStatus ); break; + case POST_STATE_SAFETY_SHUTDOWN: + testStatus = SELF_TEST_STATUS_PASSED; + postState = handlePOSTStatus( testStatus ); + break; + // NOTE: RTC's POST must go before NVDataMgmt case POST_STATE_RTC: testStatus = execRTCSelfTest();