Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -reb9c877da08d5769b3c4599b2408e4a1dc4c8d93 -r72598f0fb0dc610f0dc8d624f0737f951ce6ac56 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision eb9c877da08d5769b3c4599b2408e4a1dc4c8d93) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 72598f0fb0dc610f0dc8d624f0737f951ce6ac56) @@ -7,8 +7,8 @@ * * @file AlarmMgmt.c * -* @author (last) Sean Nash -* @date (last) 26-Jun-2023 +* @author (last) Vinayakam Mani +* @date (last) 11-Sep-2023 * * @author (original) Sean Nash * @date (original) 07-Nov-2019 @@ -326,7 +326,7 @@ *************************************************************************/ void activateAlarmNoData( ALARM_ID_T alarm ) { - activateAlarm2Data( alarm, BLANK_ALARM_DATA, BLANK_ALARM_DATA ); + activateAlarm2Data( alarm, BLANK_ALARM_DATA, BLANK_ALARM_DATA, FALSE ); } /*********************************************************************//** @@ -342,7 +342,7 @@ *************************************************************************/ void activateAlarm1Data( ALARM_ID_T alarm, ALARM_DATA_T alarmData ) { - activateAlarm2Data( alarm, alarmData, BLANK_ALARM_DATA ); + activateAlarm2Data( alarm, alarmData, BLANK_ALARM_DATA, FALSE ); } /*********************************************************************//** @@ -354,10 +354,11 @@ * @details Outputs: alarm triggered message sent, alarm activated * @param alarm ID of alarm to activate * @param alarmData1 supporting data to include in alarm msg - * @param alarmData2 supporting data to include in alarm msg + * @param alarmData2 supporting data to include in alarm msg + * @param outside flag indicates whether alarm is originating from outside HD f/w * @return none *************************************************************************/ -void activateAlarm2Data( ALARM_ID_T alarm, ALARM_DATA_T alarmData1, ALARM_DATA_T alarmData2 ) +void activateAlarm2Data( ALARM_ID_T alarm, ALARM_DATA_T alarmData1, ALARM_DATA_T alarmData2, BOOL outside ) { // Block if new alarms are occur during loss of AC power if ( ( TRUE == getCPLDACPowerLossDetected() ) ) @@ -375,28 +376,36 @@ if ( ( FALSE == alarmNoRetrigger ) || ( ( ALARM_TABLE[ alarm ].alarmNoRetrigOnRB != TRUE ) && ( ALARM_TABLE[ alarm ].alarmNoRetrigOnEndTx != TRUE ) ) ) { - // Broadcast alarm and data if alarm not already active - if ( FALSE == alarmIsActive[ alarm ] ) + HD_OP_MODE_T opMode = getCurrentOperationMode(); + TREATMENT_STATE_T ts = getTreatmentState(); + + // do not trigger alarm if blocked by current mode/state + if ( ( ( ALARM_TABLE[ alarm ].alarmBlockRinseback != TRUE ) || ( opMode != MODE_TREA ) || ( ts != TREATMENT_RINSEBACK_STATE ) || ( TRUE == outside ) ) && + ( ( ALARM_TABLE[ alarm ].alarmBlockEndTx != TRUE ) || ( opMode != MODE_POST ) || ( TRUE == outside )) ) { - ALARM_TRIGGERED_PAYLOAD_T data; + // Broadcast alarm and data if alarm not already active + if ( FALSE == alarmIsActive[ alarm ] ) + { + ALARM_TRIGGERED_PAYLOAD_T data; - data.alarm = (U32)alarm; - data.almDataType1 = (U32)alarmData1.dataType; - data.almData1 = alarmData1.data.uInt.data; - data.almDataType2 = (U32)alarmData2.dataType; - data.almData2 = alarmData2.data.uInt.data; - data.almPriority = ALARM_TABLE[ alarm ].alarmPriority; - data.almRank = ALARM_TABLE[ alarm ].alarmSubRank; - data.almClrTopOnly = ALARM_TABLE[ alarm ].alarmClearOnly; + data.alarm = (U32)alarm; + data.almDataType1 = (U32)alarmData1.dataType; + data.almData1 = alarmData1.data.uInt.data; + data.almDataType2 = (U32)alarmData2.dataType; + data.almData2 = alarmData2.data.uInt.data; + data.almPriority = ALARM_TABLE[ alarm ].alarmPriority; + data.almRank = ALARM_TABLE[ alarm ].alarmSubRank; + data.almClrTopOnly = ALARM_TABLE[ alarm ].alarmClearOnly; - broadcastData( MSG_ID_ALARM_TRIGGERED, COMM_BUFFER_OUT_CAN_HD_ALARM, (U08*)&data, sizeof( ALARM_TRIGGERED_PAYLOAD_T ) ); - // Send information for UI to log to treatment log - if ( ( TRUE == ALARM_TABLE[ alarm ].alarmTreatmentLog ) && ( MODE_TREA == getCurrentOperationMode() ) ) - { - sendTreatmentLogAlarmEventData( alarm, alarmData1, alarmData2 ); + broadcastData( MSG_ID_ALARM_TRIGGERED, COMM_BUFFER_OUT_CAN_HD_ALARM, (U08*)&data, sizeof( ALARM_TRIGGERED_PAYLOAD_T ) ); + // Send information for UI to log to treatment log + if ( ( TRUE == ALARM_TABLE[ alarm ].alarmTreatmentLog ) && ( MODE_TREA == getCurrentOperationMode() ) ) + { + sendTreatmentLogAlarmEventData( alarm, alarmData1, alarmData2 ); + } } + activateAlarm( alarm ); } - activateAlarm( alarm ); } } } @@ -711,6 +720,26 @@ /*********************************************************************//** * @brief + * The doesAlarmStatusIndicateEndTxOnly function determines whether any currently + * active alarm has ( stop && noRes && /noET ) property, that is end treatment is + * the only choice from full stop. + * @details Inputs: alarmStatus + * @details Outputs: none + * @return TRUE if any active alarm has stop property, FALSE if not + *************************************************************************/ +BOOL doesAlarmStatusIndicateEndTxOnly( void ) +{ + return ( ( ( TRUE == alarmStatus.noResume ) && + ( TRUE == alarmStatus.noRinseback ) && + ( TRUE == alarmStatus.stop ) && + ( TRUE == alarmStatus.noBloodRecirc ) && + ( FALSE == alarmStatus.noEndTreatment ) + ) ? TRUE : FALSE + ); +} + +/*********************************************************************//** + * @brief * The doesAlarmStatusIndicateStop function determines whether any currently * active alarm has stop property. * @details Inputs: alarmStatus @@ -1319,7 +1348,7 @@ // clear this alarm clearAlarm( a ); } - else + else if ( TRUE == alarmIsActive[ a ] ) { result = FALSE; // we didn't clear this alarm because condition still active } @@ -1704,7 +1733,7 @@ * the correct 32-bit key. A Dialin user must also be logged into HD. * @details Inputs: none * @details Outputs: alarmIsActive[], alarmStartedAt[] - * @param key 32-bit supervior alarm key required to perform this function + * @param key 32-bit supervisor alarm key required to perform this function * @return TRUE if override reset successful, FALSE if not *************************************************************************/ BOOL testClearAllAlarms( U32 key ) @@ -1719,6 +1748,10 @@ { ALARM_ID_T a; + // clear the flags when Dialin clears alarms + alarmNoRetrigger = FALSE; + resumeBlockedByAlarmProperty = FALSE; + // Clear all active alarms for ( a = ALARM_ID_NO_ALARM; a < NUM_OF_ALARM_IDS; a++ ) {