Index: firmware/App/Modes/PreTreatmentRecirc.c =================================================================== diff -u -rbea9ae2daffd8f939d22037df07ccaa56653cb19 -re53b6d7004583c5a9ead219cec9d568ed7b8e5a9 --- firmware/App/Modes/PreTreatmentRecirc.c (.../PreTreatmentRecirc.c) (revision bea9ae2daffd8f939d22037df07ccaa56653cb19) +++ firmware/App/Modes/PreTreatmentRecirc.c (.../PreTreatmentRecirc.c) (revision e53b6d7004583c5a9ead219cec9d568ed7b8e5a9) @@ -7,8 +7,8 @@ * * @file PreTreatmentRecirc.c * -* @author (last) Michael Garthwaite -* @date (last) 19-Jan-2023 +* @author (last) Sean Nash +* @date (last) 02-Feb-2023 * * @author (original) Quang Nguyen * @date (original) 08-Feb-2021 @@ -23,6 +23,8 @@ #include "PreTreatmentRecirc.h" #include "SystemCommMessages.h" #include "Switches.h" +#include "SystemCommMessages.h" +#include "Timers.h" #include "Valves.h" /** @@ -32,14 +34,19 @@ // ********** 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. -#define DIALYSATE_PUMP_RECIRC_FLOW_RATE 250 ///< Dialysate pump flow rate during recirculation in mL/min. +#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. +#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 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 ********** @@ -59,6 +66,9 @@ void initPreTreatmentRecirc( void ) { currentPreTreatmentRecircState = PRE_TREATMENT_RECIRC_STATE; + preTxRecircStartTime = getMSTimerCount(); + recircTOWarningGiven = FALSE; + recircTOAlarmGiven = FALSE; resetPreTreatmentRecircFlags(); } @@ -88,6 +98,14 @@ { HD_PRE_TREATMENT_RECIRC_STATE_T priorSubState = currentPreTreatmentRecircState; + // 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 ) { @@ -194,6 +212,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();