Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r1156c9be51ef9f40054860355ebee40b49ef03ca -r6c801cb0b32cba0e754cb6b1b57c1a8bd4e2bcf7 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 1156c9be51ef9f40054860355ebee40b49ef03ca) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 6c801cb0b32cba0e754cb6b1b57c1a8bd4e2bcf7) @@ -18,6 +18,7 @@ #include "Common.h" #include "AlarmLamp.h" +#include "SystemCommMessages.h" #include "Timers.h" #include "AlarmMgmt.h" @@ -56,12 +57,6 @@ BOOL alarmNoNewTreatment; // alarm prevents any new treatments BOOL alarmDialyzerBypass; // alarm activation should cause dialyzer bypass until cleared } ALARM_T; - -typedef struct -{ - BOOL alarmActive; // alarm is currently active? - U32 alarmStart; // time stamp for when alarm was activated -} ALARM_STATUS_T; #pragma pack(pop) const ALARM_T alarmTable[NUM_OF_ALARM_IDS] = @@ -72,11 +67,9 @@ // ********** private data ********** -static ALARM_STATUS_T alarmStatusTable[NUM_OF_ALARM_IDS] = -{ - { FALSE, 0 }, // ALARM_ID_NO_ALARM - { FALSE, 0 } // ALARM_ID_SOFTWARE_FAULT -}; +DATA_ARRAY_DECL( BOOL, AlarmStates, NUM_OF_ALARM_IDS, alarmIsActive ); +DATA_ARRAY_DECL( U32, AlarmStarts, NUM_OF_ALARM_IDS, alarmStartedAt ); + static COMP_ALARM_STATUS_T alarmStatus; static ALARM_ID_T alarmPriorityFIFO[NUM_OF_ALARM_PRIORITIES]; @@ -91,6 +84,9 @@ static void resetAlarmPriorityFIFO( ALARM_PRIORITY_T priority ); +static DATA_ARRAY_GET_PROTOTYPE( BOOL, getAlarmActive, alarmID ); +static DATA_ARRAY_GET_PROTOTYPE( U32, getAlarmStartTime, alarmID ); + /************************************************************************* * @brief initAlarmMgmt * The initAlarmMgmt function initializes the AlarmMgmt module. @@ -103,11 +99,26 @@ void initAlarmMgmt( void ) { ALARM_PRIORITY_T p; + ALARM_ID_T a; + // initialize alarm states and start time stamps + for ( a = ALARM_ID_NO_ALARM; a < NUM_OF_ALARM_IDS; a++ ) + { + alarmIsActive[a].data = FALSE; + alarmIsActive[a].ovData = FALSE; + alarmIsActive[a].ovInitData = TRUE; + alarmIsActive[a].override = OVERRIDE_RESET; + alarmStartedAt[a].data = 0; + alarmStartedAt[a].ovData = 0; + alarmStartedAt[a].ovInitData = 0; + alarmStartedAt[a].override = OVERRIDE_RESET; + } + // initialize alarm FIFOs for ( p = ALARM_PRIORITY_NONE; p < NUM_OF_ALARM_PRIORITIES; p++ ) { alarmPriorityFIFO[p] = ALARM_ID_NO_ALARM; } + // initialize composite alarm state alarmStatus.alarmsState = ALARM_PRIORITY_NONE; alarmStatus.alarmsSilenced = FALSE; alarmStatus.alarmsSilenceStart = 0; @@ -160,8 +171,8 @@ // verify given alarm if ( ( alarm > ALARM_ID_NO_ALARM ) && ( alarm < NUM_OF_ALARM_IDS ) ) { - alarmStatusTable[alarm].alarmActive = TRUE; - alarmStatusTable[alarm].alarmStart = getMSTimerCount(); + alarmIsActive[alarm].data = TRUE; + alarmStartedAt[alarm].data = getMSTimerCount(); // TODO - send alarm broadcast msg } else @@ -187,8 +198,8 @@ // verify given alarm if ( ( alarm > ALARM_ID_NO_ALARM ) && ( alarm < NUM_OF_ALARM_IDS ) ) { - alarmStatusTable[alarm].alarmActive = TRUE; - alarmStatusTable[alarm].alarmStart = getMSTimerCount(); + alarmIsActive[alarm].data = TRUE; + alarmStartedAt[alarm].data = getMSTimerCount(); // TODO - send alarm broadcast msg w/ alarm data } else @@ -215,8 +226,8 @@ // verify given alarm if ( ( alarm > ALARM_ID_NO_ALARM ) && ( alarm < NUM_OF_ALARM_IDS ) ) { - alarmStatusTable[alarm].alarmActive = TRUE; - alarmStatusTable[alarm].alarmStart = getMSTimerCount(); + alarmIsActive[alarm].data = TRUE; + alarmStartedAt[alarm].data = getMSTimerCount(); // TODO - send alarm broadcast msg w/ alarm data } else @@ -243,8 +254,8 @@ // verify alarm can be cleared if ( FALSE == alarmTable[alarm].alarmNoClear ) { - alarmStatusTable[alarm].alarmActive = TRUE; - alarmStatusTable[alarm].alarmStart = getMSTimerCount(); + alarmIsActive[alarm].data = FALSE; + alarmStartedAt[alarm].data = 0; // clear FIFO if this alarm was in it if ( alarmPriorityFIFO[alarmTable[alarm].alarmPriority] == alarm ) { @@ -260,6 +271,28 @@ } /************************************************************************* + * @brief getAlarmActive + * The getAlarmActive function gets the active state of a given alarm. + * @details + * Inputs : alarmIsActive[] + * Outputs : none + * @param alarmID : ID of alarm to check + * @return TRUE if given alarm is active, FALSE if not + *************************************************************************/ +static DATA_ARRAY_GET( BOOL, getAlarmActive, alarmID, NUM_OF_ALARM_IDS-1, alarmIsActive, TRUE ) + +/************************************************************************* + * @brief getAlarmStartTime + * The getAlarmStartTime function gets the active state of a given alarm. + * @details + * Inputs : alarmStartedAt[] + * Outputs : none + * @param alarmID : ID of alarm to check + * @return The start time stamp of given alarm ID + *************************************************************************/ +static DATA_ARRAY_GET( U32, getAlarmStartTime, alarmID, NUM_OF_ALARM_IDS-1, alarmStartedAt, 0 ) + +/************************************************************************* * @brief updateAlarmsState * The updateAlarmsState function updates the alarms state and alarm to \n * display. @@ -279,7 +312,7 @@ // update FIFOs per alarm status table for ( a = ALARM_ID_NO_ALARM; a < NUM_OF_ALARM_IDS; a++ ) { - if ( TRUE == alarmStatusTable[a].alarmActive ) + if ( TRUE == getAlarmActive(a) ) { if ( ALARM_ID_NO_ALARM == alarmPriorityFIFO[alarmTable[a].alarmPriority] ) { @@ -407,3 +440,42 @@ } } + +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + +/************************************************************************* + * @brief testSetAlarmStateOverride and testResetAlarmStateOverride + * The testSetAlarmStateOverride function overrides the state of the \n + * alarm active state for a given alarm with the alarm management with \n + * a given active state. + * The testResetAlarmStateOverride function resets the override of the \n + * state of the active state for a given alarm with the alarm management. + * @details + * Inputs : none + * Outputs : alarmIsActive[] + * @param alarmID : ID of alarm to override active state for + * @param value : override state for the given alarm ID + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +DATA_ARRAY_OVERRIDE_FUNC( BOOL, testSetAlarmStateOverride, testResetAlarmStateOverride, alarmIsActive, alarmID, NUM_OF_ALARM_IDS-1 ) + +/************************************************************************* + * @brief testSetAlarmStartOverride and testResetAlarmStartOverride + * The testSetAlarmStartOverride function overrides the start time \n + * for a given alarm with the alarm management with a given start time. \n + * The testResetAlarmStartOverride function resets the override of the \n + * start time for a given alarm with the alarm management. + * @details + * Inputs : none + * Outputs : alarmStartedAt[] + * @param alarmID : ID of alarm to override start time for + * @param value : override start time for the given alarm ID + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +DATA_ARRAY_OVERRIDE_FUNC( U32, testSetAlarmStartOverride, testResetAlarmStartOverride, alarmStartedAt, alarmID, NUM_OF_ALARM_IDS-1 ) + + +