Index: firmware/App/Controllers/AlarmLamp.c =================================================================== diff -u -rde5a0d43bdef611d963d11855bc958a8d8899a09 -ra3a01327c8fe80f65f6658ae6cbef4910a4a8033 --- firmware/App/Controllers/AlarmLamp.c (.../AlarmLamp.c) (revision de5a0d43bdef611d963d11855bc958a8d8899a09) +++ firmware/App/Controllers/AlarmLamp.c (.../AlarmLamp.c) (revision a3a01327c8fe80f65f6658ae6cbef4910a4a8033) @@ -21,43 +21,54 @@ #include "Timers.h" #include "AlarmLamp.h" -// ********** private definitions ********** - +/** + * @addtogroup AlarmLamp + * @{ + */ + +// ********** private definitions ********** + +#define NUM_OF_ALARM_LAMP_PATTERN_SEQUENCE_STEPS 2 ///< Number of steps in an alarm lamp pattern sequence. + +/// Enumeration of alarm lamp color states. typedef enum LampStates { - LAMP_STATE_OFF = 0, - LAMP_STATE_ON, - NUM_OF_LAMP_STATES + LAMP_STATE_OFF = 0, ///< Alarm lamp color (R, G, or B) is off. + LAMP_STATE_ON, ///< Alarm lamp color (R, G, or B) is on. + NUM_OF_LAMP_STATES ///< Number of alarm lamp color states. } LAMP_STATE_T; -// Lamp Pattern Record +/// Alarm lamp pattern record struct LampPatterns { - U32 duration[NUM_OF_LAMP_STATES ]; // in ms - LAMP_STATE_T green[ NUM_OF_LAMP_STATES ]; // green lamp state 1 and 2 - LAMP_STATE_T blue[ NUM_OF_LAMP_STATES ]; // blue lamp state 1 and 2 - LAMP_STATE_T red[ NUM_OF_LAMP_STATES ]; // red lamp state 1 and 2 + U32 duration[ NUM_OF_ALARM_LAMP_PATTERN_SEQUENCE_STEPS ]; ///< Duration (in ms) of the 2 step alarm lamp pattern sequence. + LAMP_STATE_T green[ NUM_OF_ALARM_LAMP_PATTERN_SEQUENCE_STEPS ]; ///< Lamp color state of the 2 step alarm lamp pattern sequence for green. + LAMP_STATE_T blue[ NUM_OF_ALARM_LAMP_PATTERN_SEQUENCE_STEPS ]; ///< Lamp color state of the 2 step alarm lamp pattern sequence for blue. + LAMP_STATE_T red[ NUM_OF_ALARM_LAMP_PATTERN_SEQUENCE_STEPS ]; ///< Lamp color state of the 2 step alarm lamp pattern sequence for red. }; - + +/// Enumeration of alarm lamp self-test states. typedef enum Alarm_Lamp_Self_Test_States { - ALARM_LAMP_SELF_TEST_STATE_START = 0, - ALARM_LAMP_SELF_TEST_STATE_RED, - ALARM_LAMP_SELF_TEST_STATE_YELLOW, - ALARM_LAMP_SELF_TEST_STATE_GREEN, - ALARM_LAMP_SELF_TEST_STATE_COMPLETE, - NUM_OF_ALARM_LAMP_SELF_TEST_STATES + ALARM_LAMP_SELF_TEST_STATE_START = 0, ///< Start state of alarm lamp self-test. + ALARM_LAMP_SELF_TEST_STATE_RED, ///< Red state of alarm lamp self-test. + ALARM_LAMP_SELF_TEST_STATE_YELLOW, ///< Yellow state of alarm lamp self-test. + ALARM_LAMP_SELF_TEST_STATE_GREEN, ///< Green state of alarm lamp self-test. + ALARM_LAMP_SELF_TEST_STATE_COMPLETE, ///< Completed state of alarm lamp self-test. + NUM_OF_ALARM_LAMP_SELF_TEST_STATES ///< Number of states in alarm lamp self-test. } ALARM_LAMP_SELF_TEST_STATE_T; -#define POST_LAMP_STEP_TIME_MS 1000 // ms for each lamp color +#define POST_LAMP_STEP_TIME_MS 1000 ///< Duration (in ms) for each alarm lamp self-test step. // ********** private data ********** - -DATA_DECL( LAMP_PATTERN_T, LampPattern, currentLampPattern, LAMP_PATTERN_MANUAL, LAMP_PATTERN_FAULT ); -static LAMP_PATTERN_T pendingLampPattern = LAMP_PATTERN_MANUAL; -static U32 currentLampPatternStep = 0; -static U32 lampPatternStepTimer = 0; - + +/// Current alarm lamp pattern (overrideable). +static OVERRIDE_U32_T currentLampPattern = { LAMP_PATTERN_MANUAL, LAMP_PATTERN_FAULT, LAMP_PATTERN_FAULT, 0 }; +static LAMP_PATTERN_T pendingLampPattern = LAMP_PATTERN_MANUAL; ///< Pending alarm lamp pattern. +static U32 currentLampPatternStep = 0; ///< Current alarm lamp pattern step. +static U32 lampPatternStepTimer = 0; ///< Timer counter for current alarm lamp pattern step. + +/// Two step alarm lamp patterns (repeating). const struct LampPatterns lampPatterns[ NUM_OF_LAMP_PATTERNS ] = { { { 500, 500 }, { LAMP_STATE_OFF, LAMP_STATE_OFF }, { LAMP_STATE_OFF, LAMP_STATE_OFF }, { LAMP_STATE_OFF, LAMP_STATE_OFF } }, // LAMP_PATTERN_OFF { { 500, 500 }, { LAMP_STATE_ON, LAMP_STATE_ON }, { LAMP_STATE_OFF, LAMP_STATE_OFF }, { LAMP_STATE_OFF, LAMP_STATE_OFF } }, // LAMP_PATTERN_OK @@ -68,20 +79,19 @@ { { 0, 0 }, { LAMP_STATE_OFF, LAMP_STATE_OFF }, { LAMP_STATE_OFF, LAMP_STATE_OFF }, { LAMP_STATE_OFF, LAMP_STATE_OFF } } // LAMP_PATTERN_MANUAL }; -static ALARM_LAMP_SELF_TEST_STATE_T alarmLampSelfTestState = ALARM_LAMP_SELF_TEST_STATE_START; -static U32 alarmLampSelfTestStepTimerCount = 0; +static ALARM_LAMP_SELF_TEST_STATE_T alarmLampSelfTestState = ALARM_LAMP_SELF_TEST_STATE_START; ///< Current alarm lamp self-test state. +static U32 alarmLampSelfTestStepTimerCount = 0; ///< timer counter for current alarm lamp self-test state. // ********** private function prototypes ********** static void setAlarmLampToPatternStep( void ); -/************************************************************************* - * @brief initAlarmLamp +/*********************************************************************//** + * @brief * The initAlarmLamp function initializes the AlarmLamp module. * @details * Inputs : none * Outputs : AlarmLamp module initialized. - * @param none * @return none *************************************************************************/ void initAlarmLamp( void ) @@ -94,15 +104,14 @@ alarmLampSelfTestStepTimerCount = 0; } -/************************************************************************* - * @brief execAlarmLamp - * The execAlarmLamp function executes the alarm lamp service for the \n +/*********************************************************************//** + * @brief + * The execAlarmLamp function executes the alarm lamp service for the * current lamp pattern. * @details - * Inputs : pendingLampPattern, currentLampPattern, lampPatternStepTimer, \n + * Inputs : pendingLampPattern, currentLampPattern, lampPatternStepTimer, * lampPatterns. - * Outputs : - * @param none + * Outputs : currentLampPattern * @return none *************************************************************************/ void execAlarmLamp( void ) @@ -139,13 +148,13 @@ } } -/************************************************************************* - * @brief requestAlarmLampPattern +/*********************************************************************//** + * @brief * The requestAlarmLampPattern function sets a request for a new lamp pattern. * @details * Inputs : none * Outputs : pendingLampPattern - * @param lampPattern : new lamp pattern + * @param lampPattern new lamp pattern * @return none *************************************************************************/ void requestAlarmLampPattern( LAMP_PATTERN_T lampPattern ) @@ -156,31 +165,39 @@ } else { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_SOFTWARE_FAULT, SW_FAULT_ID_ALARM_LAMP_INVALID_PATTERN_REQUESTED, lampPattern ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_ALARM_LAMP_INVALID_PATTERN_REQUESTED, lampPattern ) } } -/************************************************************************* - * @brief getCurrentAlarmLampPattern - * The getCurrentAlarmLampPattern function gets the current alarm lamp \n +/*********************************************************************//** + * @brief + * The getCurrentAlarmLampPattern function gets the current alarm lamp * pattern in effect. * @details * Inputs : currentLampPattern * Outputs : none - * @param none * @return currentLampPattern *************************************************************************/ -DATA_GET( LAMP_PATTERN_T, getCurrentAlarmLampPattern, currentLampPattern ) +LAMP_PATTERN_T getCurrentAlarmLampPattern( void ) +{ + LAMP_PATTERN_T result = (LAMP_PATTERN_T)currentLampPattern.data; + + if ( OVERRIDE_KEY == currentLampPattern.override ) + { + result = (LAMP_PATTERN_T)currentLampPattern.ovData; + } + + return result; +} -/************************************************************************* - * @brief execAlarmLampTest - * The execAlarmLampTest function executes the alarm lamp test. \n - * This function should be called periodically until a pass or fail \n +/*********************************************************************//** + * @brief + * The execAlarmLampTest function executes the alarm lamp test. + * This function should be called periodically until a pass or fail * result is returned. * @details - * Inputs : - * Outputs : - * @param none + * Inputs : alarmLampSelfTestState, alarmLampSelfTestStepTimerCount + * Outputs : alarmLampSelfTestState, alarmLampSelfTestStepTimerCount * @return in progress, passed, or failed *************************************************************************/ SELF_TEST_STATUS_T execAlarmLampTest( void ) @@ -224,27 +241,26 @@ break; case ALARM_LAMP_SELF_TEST_STATE_COMPLETE: - // if we get called in this state, assume we're doing self test again + // if we get called in this state, assume we're doing self-test again alarmLampSelfTestState = ALARM_LAMP_SELF_TEST_STATE_START; break; default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_SOFTWARE_FAULT, SW_FAULT_ID_ALARM_LAMP_INVALID_SELF_TEST_STATE, alarmLampSelfTestState ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_ALARM_LAMP_INVALID_SELF_TEST_STATE, alarmLampSelfTestState ) result = SELF_TEST_STATUS_FAILED; break; } return result; } -/************************************************************************* - * @brief setAlarmLampToPatternStep - * The setAlarmLampToPatternStep function sets the lamps according to the \n +/*********************************************************************//** + * @brief + * The setAlarmLampToPatternStep function sets the lamps according to the * current lamp pattern and lamp pattern step. * @details - * Inputs : none + * Inputs : lampPatterns[], currentLampPatternStep * Outputs : lampPatternStepTimer reset. Lamps set per current pattern. - * @param lampPattern : new lamp pattern * @return none *************************************************************************/ static void setAlarmLampToPatternStep( void ) @@ -267,9 +283,11 @@ red = PIN_SIGNAL_HIGH; } +#ifndef TASK_TIMING_OUTPUT_ENABLED setCPLDLampGreen( green ); setCPLDLampBlue( blue ); - setCPLDLampRed( red ); + setCPLDLampRed( red ); +#endif } @@ -278,17 +296,51 @@ *************************************************************************/ -/************************************************************************* - * @brief testSetCurrentLampPatternOverride and testResetCurrentLampPatternOverride - * The testSetCurrentLampPatternOverride function overrides the state of the \n - * current alarm lamp pattern with a given pattern. \n - * The testResetCurrentLampPatternOverride function resets the override of the \n - * state of the alarm lamp pattern. +/*********************************************************************//** + * @brief + * The testSetCurrentLampPatternOverride function overrides the state of the + * current alarm lamp pattern with a given pattern. * @details * Inputs : none * Outputs : currentLampPattern - * @param value : override state for the alarm lamp pattern + * @param value override state for the alarm lamp pattern * @return TRUE if override successful, FALSE if not *************************************************************************/ -DATA_OVERRIDE_FUNC( LAMP_PATTERN_T, testSetCurrentLampPatternOverride, testResetCurrentLampPatternOverride, currentLampPattern ) - +BOOL testSetCurrentLampPatternOverride( U32 value ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + currentLampPattern.ovData = value; + currentLampPattern.override = OVERRIDE_KEY; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetCurrentLampPatternOverride function resets the override of the + * state of the alarm lamp pattern. + * @details + * Inputs : none + * Outputs : currentLampPattern + * @return TRUE if override reset successful, FALSE if not + *************************************************************************/ +BOOL testResetCurrentLampPatternOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + currentLampPattern.override = OVERRIDE_RESET; + currentLampPattern.ovData = currentLampPattern.ovInitData; + } + + return result; +} + +/**@}*/