Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r52a40b3e01e67899cdeabdf64f4efddbe4654007 -r23ad90c3d5f08e67a1142a68c73d79fedb752da9 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 52a40b3e01e67899cdeabdf64f4efddbe4654007) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 23ad90c3d5f08e67a1142a68c73d79fedb752da9) @@ -7,8 +7,8 @@ * * @file AlarmMgmt.c * -* @author (last) Dara Navaei -* @date (last) 26-Feb-2022 +* @author (last) Michael Garthwaite +* @date (last) 11-Mar-2022 * * @author (original) Sean Nash * @date (original) 07-Nov-2019 @@ -198,7 +198,8 @@ alarmStatus.noClear = FALSE; alarmStatus.noResume = FALSE; alarmStatus.noRinseback = FALSE; - alarmStatus.noEndTreatment = FALSE; + alarmStatus.noEndTreatment = FALSE; + alarmStatus.noBloodRecirc = FALSE; alarmStatus.noDialRecirc = FALSE; alarmStatus.ok = FALSE; @@ -246,8 +247,10 @@ // Verify given alarm if ( ( alarm > ALARM_ID_NO_ALARM ) && ( alarm < NUM_OF_ALARM_IDS ) ) { - // No need to do anything if alarm is already active - if ( FALSE == alarmIsActive[ alarm ] ) + // No need to do anything if alarm is already active, but if condition was cleared then re-trigger alarm + if ( ( FALSE == alarmIsActive[ alarm ] ) || + ( ( FALSE == alarmIsDetected[ alarm ] ) && + ( FALSE == ALARM_TABLE[ alarm ].alarmConditionClearImmed ) ) ) { // If alarm status was that no alarms currently active, set this alarm as top alarm until status formally updated later if ( ALARM_ID_NO_ALARM == alarmStatus.alarmTop ) @@ -369,12 +372,12 @@ // Clear alarm condition and broadcast alarm condition clear if not already cleared if ( TRUE == alarmIsDetected[ alarm ] ) { - ALARM_NAME_DATA_T data; + ALARM_ID_DATA_PUBLISH_T data; - data.alarmName = (U32)alarm; + data.alarmID = (U32)alarm; alarmIsDetected[ alarm ] = FALSE; - broadcastData( MSG_ID_ALARM_CONDITION_CLEARED, COMM_BUFFER_OUT_CAN_HD_ALARM, (U08*)&data, sizeof( ALARM_NAME_DATA_T ) ); + broadcastData( MSG_ID_ALARM_CONDITION_CLEARED, COMM_BUFFER_OUT_CAN_HD_ALARM, (U08*)&data, sizeof( ALARM_ID_DATA_PUBLISH_T ) ); } } } @@ -400,11 +403,11 @@ // Clear alarm and broadcast alarm clear if not already cleared if ( TRUE == alarmIsActive[ alarm ] ) { - ALARM_NAME_DATA_T data; + ALARM_ID_DATA_PUBLISH_T data; - data.alarmName = (U32) alarm; + data.alarmID = (U32) alarm; - broadcastData( MSG_ID_ALARM_CLEARED, COMM_BUFFER_OUT_CAN_HD_ALARM, (U08*)&data, sizeof( ALARM_NAME_DATA_T ) ); + broadcastData( MSG_ID_ALARM_CLEARED, COMM_BUFFER_OUT_CAN_HD_ALARM, (U08*)&data, sizeof( ALARM_ID_DATA_PUBLISH_T ) ); alarmIsActive[ alarm ] = FALSE; clearAlarmCondition( alarm ); @@ -570,6 +573,19 @@ /*********************************************************************//** * @brief + * The isBloodRecircBlocked function determines whether any currently + * active alarm is blocking blood re-circulation. + * @details Inputs: alarmStatus + * @details Outputs: none + * @return TRUE if any active alarm prevents blood re-circulation, FALSE if not + *************************************************************************/ +BOOL isBloodRecircBlocked( void ) +{ + return alarmStatus.noBloodRecirc; +} + +/*********************************************************************//** + * @brief * The isDialysateRecircBlocked function determines whether any currently * active alarm is blocking dialysate re-circulation. * @details Inputs: alarmStatus @@ -752,6 +768,7 @@ ALARM_ID_T a; BOOL faultsActive = FALSE; BOOL dialysateRecircBlocked = FALSE; + BOOL bloodRecircBlocked = FALSE; // Update FIFOs and sub-ranks per active alarms table - for alarm ranking purposes to determine "top" alarm for ( a = ALARM_ID_NO_ALARM; a < NUM_OF_ALARM_IDS; a++ ) @@ -795,6 +812,11 @@ { dialysateRecircBlocked = TRUE; } + // Track whether any active alarms prevent blood re-circulation so far + if ( TRUE == ALARM_TABLE[ a ].alarmNoBloodRecirc ) + { + bloodRecircBlocked = TRUE; + } } } @@ -803,6 +825,7 @@ alarmStatus.alarmTop = alarmPriorityFIFO[ highestPriority ].alarmID; alarmStatus.topAlarmConditionDetected = alarmIsDetected[ alarmStatus.alarmTop ]; alarmStatus.systemFault = faultsActive; + alarmStatus.noBloodRecirc = bloodRecircBlocked; alarmStatus.noDialRecirc = dialysateRecircBlocked; } @@ -1104,10 +1127,6 @@ alarmStatus.noResume = noResume; alarmStatus.noRinseback = noRinseback; alarmStatus.noEndTreatment = noEndTreatment; -//<<<<<<< HEAD -//======= DEBUG_DENALI - //alarmStatus.noNewTreatment |= noNewTreatment; -//>>>>>>> DEN-11928-dg-conductivity-update alarmStatus.ok = usrAckReq; alarmStatus.noMinimize = noMinimize; } @@ -1483,11 +1502,11 @@ { if ( TRUE == alarmIsActive[ a ] ) { - ALARM_NAME_DATA_T data; + ALARM_ID_DATA_PUBLISH_T data; - data.alarmName = (U32)a; + data.alarmID = (U32)a; - broadcastData( MSG_ID_ALARM_CLEARED, COMM_BUFFER_OUT_CAN_HD_ALARM, (U08*)&data, sizeof( ALARM_NAME_DATA_T ) ); + broadcastData( MSG_ID_ALARM_CLEARED, COMM_BUFFER_OUT_CAN_HD_ALARM, (U08*)&data, sizeof( ALARM_ID_DATA_PUBLISH_T ) ); alarmIsActive[ a ] = FALSE; alarmStartedAt[ a ].data = 0; // Clear FIFO if this alarm was in it