Index: firmware/App/Controllers/AlarmLamp.c =================================================================== diff -u -r31c4bf94671f58375d2e1dbbbb37b37c6949e0c4 -r8e7158d8231435496fcf1d5649e51babf859ccc7 --- firmware/App/Controllers/AlarmLamp.c (.../AlarmLamp.c) (revision 31c4bf94671f58375d2e1dbbbb37b37c6949e0c4) +++ firmware/App/Controllers/AlarmLamp.c (.../AlarmLamp.c) (revision 8e7158d8231435496fcf1d5649e51babf859ccc7) @@ -1,14 +1,14 @@ /************************************************************************** * -* Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. +* Copyright (c) 2019-2021 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file AlarmLamp.c * -* @author (last) Sean -* @date (last) 27-Feb-2020 +* @author (last) Sean Nash +* @date (last) 24-Sep-2020 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -21,43 +21,55 @@ #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. +static BOOL alarmLampOn = FALSE; ///< Flag indicates whether an any lamp is currently on. + +/// 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,41 +80,38 @@ { { 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 + * @details Inputs: none + * @details Outputs: AlarmLamp module initialized. * @return none *************************************************************************/ void initAlarmLamp( void ) { pendingLampPattern = LAMP_PATTERN_MANUAL; currentLampPatternStep = 0; - lampPatternStepTimer = 0; + lampPatternStepTimer = 0; + alarmLampOn = FALSE; alarmLampSelfTestState = ALARM_LAMP_SELF_TEST_STATE_START; 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 + * @details Inputs: pendingLampPattern, currentLampPattern, lampPatternStepTimer, * lampPatterns. - * Outputs : - * @param none + * @details Outputs: currentLampPattern * @return none *************************************************************************/ void execAlarmLamp( void ) @@ -139,13 +148,12 @@ } } -/************************************************************************* - * @brief requestAlarmLampPattern +/*********************************************************************//** + * @brief * The requestAlarmLampPattern function sets a request for a new lamp pattern. - * @details - * Inputs : none - * Outputs : pendingLampPattern - * @param lampPattern : new lamp pattern + * @details Inputs: none + * @details Outputs: pendingLampPattern + * @param lampPattern new lamp pattern * @return none *************************************************************************/ void requestAlarmLampPattern( LAMP_PATTERN_T lampPattern ) @@ -156,31 +164,49 @@ } 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 + * @details Inputs: currentLampPattern + * @details Outputs: 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 + * The getAlarmLampOn function gets the current alarm lamp on flag. + * @details Inputs: alarmLampOn + * @details Outputs: none + * @return alarmLampOn + *************************************************************************/ +BOOL getAlarmLampOn( void ) +{ + return alarmLampOn; +} -/************************************************************************* - * @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 + * @details Inputs: alarmLampSelfTestState, alarmLampSelfTestStepTimerCount + * @details Outputs: alarmLampSelfTestState, alarmLampSelfTestStepTimerCount * @return in progress, passed, or failed *************************************************************************/ SELF_TEST_STATUS_T execAlarmLampTest( void ) @@ -224,47 +250,49 @@ 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 - * Outputs : lampPatternStepTimer reset. Lamps set per current pattern. - * @param lampPattern : new lamp pattern + * @details Inputs: lampPatterns[], currentLampPatternStep + * @details Outputs: lampPatternStepTimer reset. Lamps set per current pattern. * @return none *************************************************************************/ static void setAlarmLampToPatternStep( void ) { PIN_SIGNAL_STATE_T green = PIN_SIGNAL_LOW; PIN_SIGNAL_STATE_T blue = PIN_SIGNAL_LOW; PIN_SIGNAL_STATE_T red = PIN_SIGNAL_LOW; - + + alarmLampOn = FALSE; lampPatternStepTimer = 0; if ( lampPatterns[ getCurrentAlarmLampPattern() ].green[ currentLampPatternStep ] == LAMP_STATE_ON ) { green = PIN_SIGNAL_HIGH; + alarmLampOn = TRUE; } if ( lampPatterns[ getCurrentAlarmLampPattern() ].blue[ currentLampPatternStep ] == LAMP_STATE_ON ) { blue = PIN_SIGNAL_HIGH; + alarmLampOn = TRUE; } if ( lampPatterns[ getCurrentAlarmLampPattern() ].red[ currentLampPatternStep ] == LAMP_STATE_ON ) { red = PIN_SIGNAL_HIGH; + alarmLampOn = TRUE; } #ifndef TASK_TIMING_OUTPUT_ENABLED @@ -280,17 +308,49 @@ *************************************************************************/ -/************************************************************************* - * @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. - * @details - * Inputs : none - * Outputs : currentLampPattern - * @param value : override state for the alarm lamp pattern +/*********************************************************************//** + * @brief + * The testSetCurrentLampPatternOverride function overrides the state of the + * current alarm lamp pattern with a given pattern. + * @details Inputs: none + * @details Outputs: currentLampPattern + * @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 + * @details 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; +} + +/**@}*/