Index: firmware/App/Modes/PreTreatmentRecirc.c =================================================================== diff -u -r0a4dcd288d4347b85baaa0b07da568b6add5eac7 -r5d9c5362b537331248dc592e05b6b016267eb6d3 --- firmware/App/Modes/PreTreatmentRecirc.c (.../PreTreatmentRecirc.c) (revision 0a4dcd288d4347b85baaa0b07da568b6add5eac7) +++ firmware/App/Modes/PreTreatmentRecirc.c (.../PreTreatmentRecirc.c) (revision 5d9c5362b537331248dc592e05b6b016267eb6d3) @@ -22,6 +22,7 @@ #include "DGInterface.h" #include "PreTreatmentRecirc.h" #include "Switches.h" +#include "Timers.h" #include "Valves.h" /** @@ -32,13 +33,18 @@ // ********** private definitions ********** #define BLOOD_PUMP_RECIRC_FLOW_RATE 100 ///< Blood pump flow rate during recirculation in mL/min. -/// TODO: Restore to 100 when DPi flow control is fixed. +// TODO: Restore to 100 when DPi flow control is fixed. #define DIALYSATE_PUMP_RECIRC_FLOW_RATE 250 ///< Dialysate pump flow rate during recirculation in mL/min. +#define WARNING_MEDIUM_PRIME_COMPLETED_TIME_MS ( 90 * 60 * MS_PER_SECOND ) ///< Pre-Treatment recirc time before medium priority warning in min. +#define WARNING_HIGH_PRIME_COMPLETED_TIME_MS ( 120 * 60 * MS_PER_SECOND ) ///< Pre-Treatment recirc time before high priority alarm in min. // ********** private data ********** static HD_PRE_TREATMENT_RECIRC_STATE_T currentPreTreatmentRecircState; ///< Current state of the pre-treatment recirculate state machine. static BOOL recircResumeRequested; ///< Flag indicates alarm requesting to resume pre-treatment recirculate. +static U32 preTxRecircStartTime; ///< Time pre-treatment re-circulate state started. +static BOOL recircTOWarningGiven; ///< Flag indicates 90 minute warning given. +static BOOL recircTOAlarmGiven; ///< Flag indicates 2 hour alarm triggered. // ********** private function prototypes ********** @@ -58,6 +64,9 @@ void initPreTreatmentRecirc( void ) { currentPreTreatmentRecircState = PRE_TREATMENT_RECIRC_STATE; + preTxRecircStartTime = getMSTimerCount(); + recircTOWarningGiven = FALSE; + recircTOAlarmGiven = FALSE; resetPreTreatmentRecircFlags(); } @@ -85,6 +94,14 @@ *************************************************************************/ void execPreTreatmentRecirc( void ) { + // Alarm if 2 hours recirculating + if ( ( recircTOAlarmGiven != TRUE ) && ( TRUE == didTimeout( preTxRecircStartTime, WARNING_HIGH_PRIME_COMPLETED_TIME_MS ) ) ) + { + recircTOAlarmGiven = TRUE; + clearAlarm( ALARM_ID_PRIME_COMPLETED_MEDIUM ); + activateAlarmNoData( ALARM_ID_PRIME_COMPLETED_HIGH ); + } + // execute pre-treatment recirculate state machine switch ( currentPreTreatmentRecircState ) { @@ -187,6 +204,14 @@ { HD_PRE_TREATMENT_RECIRC_STATE_T state = PRE_TREATMENT_RECIRC_STATE; + // Warn user if 90 minutes recirculating + if ( ( recircTOWarningGiven != TRUE ) && ( TRUE == didTimeout( preTxRecircStartTime, WARNING_MEDIUM_PRIME_COMPLETED_TIME_MS ) ) ) + { + recircTOWarningGiven = TRUE; + clearAlarm( ALARM_ID_PRIME_COMPLETED_LOW_PRIORITY ); + activateAlarmNoData( ALARM_ID_PRIME_COMPLETED_MEDIUM ); + } + if ( TRUE == doesAlarmStatusIndicateStop() ) { signalDialOutPumpHardStop();