Index: firmware/App/Controllers/DGInterface.c =================================================================== diff -u -rf748628de6396c5059b0d85b4c96f6c3d81bd91a -rb204cbc3247e8e84ed68e355654c326df4d56714 --- firmware/App/Controllers/DGInterface.c (.../DGInterface.c) (revision f748628de6396c5059b0d85b4c96f6c3d81bd91a) +++ firmware/App/Controllers/DGInterface.c (.../DGInterface.c) (revision b204cbc3247e8e84ed68e355654c326df4d56714) @@ -1183,41 +1183,67 @@ BOOL isTDiTempAboveDialysateTarget = ( dgDialysateTemp >= TDiHigh ? TRUE : FALSE ); F32 TDiLow = dgTrimmerTempSet - DIALYSATE_TEMP_OUT_OF_TARGET_TOL_C; BOOL isTDiTempBelowDialysateTarget = ( dgDialysateTemp <= TDiLow ? TRUE : FALSE ); + BOOL isTempBelowTrigger = TRUE; + BOOL isTempAboveTrigger = TRUE; #ifndef _RELEASE_ if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_DIALYSATE_TEMP_CHECK ) != SW_CONFIG_ENABLE_VALUE ) #endif { + if ( TRUE == isAlarmActive( ALARM_ID_HD_DIALYSATE_TEMP_ABOVE_SAFETY_TEMP ) ) { isTDiTempAboveHighSafety = ( dgDialysateTemp <= ( dgTrimmerTempSet + DIALYSATE_TEMP_OUT_OF_TARGET_CLEAR_TOL_C ) ? FALSE : TRUE ); } checkPersistentAlarm(ALARM_ID_HD_DIALYSATE_TEMP_ABOVE_SAFETY_TEMP, isTDiTempAboveHighSafety, dgDialysateTemp, dgTrimmerTempSet ); + // check clear condition first if ( TRUE == isAlarmActive( ALARM_ID_HD_DIALYSATE_TEMP_ABOVE_TARGET_TEMP ) ) { - isTDiTempAboveLowSafety = ( dgDialysateTemp <= ( dgTrimmerTempSet + DIALYSATE_TEMP_OUT_OF_TARGET_CLEAR_TOL_C ) ? FALSE : TRUE ); + isTempBelowTrigger = ( dgDialysateTemp <= ( dgTrimmerTempSet + DIALYSATE_TEMP_OUT_OF_TARGET_CLEAR_TOL_C ) ? FALSE : TRUE ); + checkPersistentAlarm(ALARM_ID_HD_DIALYSATE_TEMP_ABOVE_TARGET_TEMP, isTempBelowTrigger, dgDialysateTemp, dgTrimmerTempSet ); } - checkPersistentAlarm(ALARM_ID_HD_DIALYSATE_TEMP_ABOVE_TARGET_TEMP, isTDiTempAboveLowSafety, dgDialysateTemp, dgTrimmerTempSet ); - if ( TRUE == isAlarmActive( ALARM_ID_HD_DIALYSATE_TEMP_ABOVE_TARGET_TEMP ) ) + // We have to check the condition before calling the persistence check for + // both triggers so they don't to cancel each other out. + // Low safety does not to check false conditions since + // max target temp will not be higher than low safety + if ( TRUE == isTDiTempAboveLowSafety ) { - isTDiTempAboveDialysateTarget = ( dgDialysateTemp <= ( dgTrimmerTempSet + DIALYSATE_TEMP_OUT_OF_TARGET_CLEAR_TOL_C ) ? FALSE : TRUE ); + checkPersistentAlarm(ALARM_ID_HD_DIALYSATE_TEMP_ABOVE_TARGET_TEMP, isTDiTempAboveLowSafety, dgDialysateTemp, dgTrimmerTempSet ); } - checkPersistentAlarm(ALARM_ID_HD_DIALYSATE_TEMP_ABOVE_TARGET_TEMP, isTDiTempAboveDialysateTarget, dgDialysateTemp, TDiHigh ); - if ( TRUE == isAlarmActive( ALARM_ID_HD_DIALYSATE_TEMP_BELOW_TARGET_TEMP ) ) + if ( TRUE == isTDiTempAboveDialysateTarget ) { - isTDITempBelowLowSafety = ( dgDialysateTemp <= ( dgTrimmerTempSet - DIALYSATE_TEMP_OUT_OF_TARGET_CLEAR_TOL_C ) ? FALSE : TRUE ); + checkPersistentAlarm(ALARM_ID_HD_DIALYSATE_TEMP_ABOVE_TARGET_TEMP, isTDiTempAboveDialysateTarget, dgDialysateTemp, TDiHigh ); } - checkPersistentAlarm(ALARM_ID_HD_DIALYSATE_TEMP_BELOW_TARGET_TEMP, isTDITempBelowLowSafety, dgDialysateTemp, dgTrimmerTempSet ); + else + { + checkPersistentAlarm(ALARM_ID_HD_DIALYSATE_TEMP_ABOVE_TARGET_TEMP, isTDiTempAboveDialysateTarget, dgDialysateTemp, TDiHigh ); + } + // check clear condition first if ( TRUE == isAlarmActive( ALARM_ID_HD_DIALYSATE_TEMP_BELOW_TARGET_TEMP ) ) { - isTDiTempBelowDialysateTarget = ( dgDialysateTemp >= ( dgTrimmerTempSet - DIALYSATE_TEMP_OUT_OF_TARGET_CLEAR_TOL_C ) ? FALSE : TRUE ); + isTempAboveTrigger = ( dgDialysateTemp <= ( dgTrimmerTempSet - DIALYSATE_TEMP_OUT_OF_TARGET_CLEAR_TOL_C ) ? FALSE : TRUE ); + checkPersistentAlarm(ALARM_ID_HD_DIALYSATE_TEMP_ABOVE_TARGET_TEMP, isTempAboveTrigger, dgDialysateTemp, dgTrimmerTempSet ); } - checkPersistentAlarm(ALARM_ID_HD_DIALYSATE_TEMP_BELOW_TARGET_TEMP, isTDiTempBelowDialysateTarget, dgDialysateTemp, TDiLow ); + + // Below temp checks are reverse since min target temp can be lower than safety + if ( TRUE = isTDiTempBelowDialysateTarget ) + { + checkPersistentAlarm(ALARM_ID_HD_DIALYSATE_TEMP_BELOW_TARGET_TEMP, isTDiTempBelowDialysateTarget, dgDialysateTemp, TDiLow ); + } + + if ( TRUE = isTDITempBelowLowSafety ) + { + checkPersistentAlarm(ALARM_ID_HD_DIALYSATE_TEMP_BELOW_TARGET_TEMP, isTDITempBelowLowSafety, dgDialysateTemp, dgTrimmerTempSet ); + } + else + { + checkPersistentAlarm(ALARM_ID_HD_DIALYSATE_TEMP_BELOW_TARGET_TEMP, isTDITempBelowLowSafety, dgDialysateTemp, dgTrimmerTempSet ); + } } } Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -r6f0304ba16597df68b05fb2af2d1a45b6c43b0ca -rb204cbc3247e8e84ed68e355654c326df4d56714 --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 6f0304ba16597df68b05fb2af2d1a45b6c43b0ca) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision b204cbc3247e8e84ed68e355654c326df4d56714) @@ -1220,6 +1220,7 @@ if ( TRUE == doesAlarmStatusIndicateStop() ) { + setAirPumpState( AIR_PUMP_STATE_OFF ); state = DRY_SELF_TESTS_STOPPED_STATE; setupForSelfTestsStop(); }