Index: App/Contollers/AlarmLamp.c =================================================================== diff -u -r1748019d93f9e95a125b0c6181c695b17fb63241 -r614cd0625ac1f98edea2fe3ab2c3d0005f6fc8e0 --- App/Contollers/AlarmLamp.c (.../AlarmLamp.c) (revision 1748019d93f9e95a125b0c6181c695b17fb63241) +++ App/Contollers/AlarmLamp.c (.../AlarmLamp.c) (revision 614cd0625ac1f98edea2fe3ab2c3d0005f6fc8e0) @@ -17,6 +17,7 @@ #include "Common.h" #include "CPLD.h" #include "TaskGeneral.h" +#include "Timers.h" #include "AlarmLamp.h" // ********** private definitions ********** @@ -37,6 +38,18 @@ LAMP_STATE_T red[NUM_OF_LAMP_STATES]; // red lamp state 1 and 2 }; +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_T; + +#define POST_LAMP_STEP_TIME_MS 1000 // ms for each lamp color + // ********** private data ********** static LAMP_PATTERN_T currentLampPattern = LAMP_PATTERN_OFF; @@ -54,6 +67,9 @@ { { 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; + // ********** private function prototypes ********** static void setAlarmLampToPatternStep( void ); @@ -73,6 +89,9 @@ pendingLampPattern = LAMP_PATTERN_OFF; currentLampPatternStep = 0; lampPatternStepTimer = 0; + + alarmLampSelfTestState = ALARM_LAMP_SELF_TEST_STATE_START; + alarmLampSelfTestStepTimerCount = 0; } /************************************************************************* @@ -157,6 +176,72 @@ } /************************************************************************* + * @brief execAlarmLampTest + * The execAlarmLampTest function executes the alarm lamp test. \n + * This function should be called periodically until a pass or fail \n + * result is returned. + * @details + * Inputs : + * Outputs : + * @param none + * @return in progress, passed, or failed + *************************************************************************/ +SELF_TEST_STATUS_T execAlarmLampTest( void ) +{ + SELF_TEST_STATUS_T result = SELF_TEST_STATUS_IN_PROGRESS; + + switch ( alarmLampSelfTestState ) + { + case ALARM_LAMP_SELF_TEST_STATE_START: + alarmLampSelfTestState = ALARM_LAMP_SELF_TEST_STATE_RED; + alarmLampSelfTestStepTimerCount = getMSTimerCount(); + setCPLDLampRed( PIN_SIGNAL_HIGH ); + break; + + case ALARM_LAMP_SELF_TEST_STATE_RED: + if ( TRUE == didTimeout( alarmLampSelfTestStepTimerCount, POST_LAMP_STEP_TIME_MS ) ) + { + alarmLampSelfTestState = ALARM_LAMP_SELF_TEST_STATE_YELLOW; + alarmLampSelfTestStepTimerCount = getMSTimerCount(); + setCPLDLampRed( PIN_SIGNAL_LOW ); + setCPLDLampYellow( PIN_SIGNAL_HIGH ); + } + break; + + case ALARM_LAMP_SELF_TEST_STATE_YELLOW: + if ( TRUE == didTimeout( alarmLampSelfTestStepTimerCount, POST_LAMP_STEP_TIME_MS ) ) + { + alarmLampSelfTestState = ALARM_LAMP_SELF_TEST_STATE_GREEN; + alarmLampSelfTestStepTimerCount = getMSTimerCount(); + setCPLDLampYellow( PIN_SIGNAL_LOW ); + setCPLDLampGreen( PIN_SIGNAL_HIGH ); + } + break; + + case ALARM_LAMP_SELF_TEST_STATE_GREEN: + if ( TRUE == didTimeout( alarmLampSelfTestStepTimerCount, POST_LAMP_STEP_TIME_MS ) ) + { + alarmLampSelfTestState = ALARM_LAMP_SELF_TEST_STATE_COMPLETE; + setCPLDLampGreen( PIN_SIGNAL_LOW ); + result = SELF_TEST_STATUS_PASSED; + } + break; + + case ALARM_LAMP_SELF_TEST_STATE_COMPLETE: + // if we get called in this state, assume we're doing self test again + alarmLampSelfTestState = ALARM_LAMP_SELF_TEST_STATE_START; + break; + + default: + result = SELF_TEST_STATUS_FAILED; + // TODO - s/w fault + break; + } + + return result; +} + +/************************************************************************* * @brief setAlarmLampToPatternStep * The setAlarmLampToPatternStep function sets the lamps according to the \n * current lamp pattern and lamp pattern step.