Index: firmware/App/Modes/TreatmentRecirc.c =================================================================== diff -u -r73b300baeac55bbcf4d231ced4ef6ea4af3c1840 -r2378ad21c7f3eb23e1d0a8c38375454c162ea1dd --- firmware/App/Modes/TreatmentRecirc.c (.../TreatmentRecirc.c) (revision 73b300baeac55bbcf4d231ced4ef6ea4af3c1840) +++ firmware/App/Modes/TreatmentRecirc.c (.../TreatmentRecirc.c) (revision 2378ad21c7f3eb23e1d0a8c38375454c162ea1dd) @@ -51,7 +51,8 @@ static BOOL recircBackToTreatmenRequested; ///< Flag indicates user requesting to go back to treatment (confirming re-connected). static BOOL recircResumeRequested; ///< Flag indicates user requesting resumption of re-circulating. static BOOL recircEndTreatmentRequested; ///< Flag indicates user requesting end of treatment. - +static BOOL dialysateRecircBlocked; ///< Flag indicates previous user stop dialysate recirulation condition +static BOOL bloodRecircBlocked; ///< Flag indicates previous user stop blood recirculation condition // ********** private function prototypes ********** static void resetTreatmentRecircFlags( void ); @@ -87,6 +88,8 @@ recircTimerCtr = 0; recircPublishTimerCtr = 0; resetTreatmentRecircFlags(); + dialysateRecircBlocked = isDialysateRecircBlocked(); + bloodRecircBlocked = isBloodRecircBlocked(); } /*********************************************************************//** @@ -564,24 +567,30 @@ * @brief * The handleTreatmentRecircOnOff function starts/stops recirculation * during rinseback sub-mode based on active alarm properties. + * Simplified case for user stop - all stop/all go states only. * @details Inputs: none * @details Outputs: dialysate recirculation started or stopped as appropriate * @return none *************************************************************************/ static TREATMENT_RECIRC_STATE_T handleTreatmentRecircOnOff( TREATMENT_RECIRC_STATE_T result ) { - - // Stop recirc if blocked by alarm - if ( ( TRUE == isDialysateRecircBlocked() ) && ( TRUE == isDialInPumpRunning() ) ) - { - setFullStop( ); - result = TREATMENT_RECIRC_STOPPED_STATE; + // if there was any change + if ( ( dialysateRecircBlocked != isDialysateRecircBlocked() ) || ( bloodRecircBlocked != isBloodRecircBlocked() ) ) + { // Stop recirc if blocked by alarm + if ( ( TRUE == isDialysateRecircBlocked() ) && ( TRUE == isBloodRecircBlocked() ) ) + { + setFullStop( ); + result = TREATMENT_RECIRC_STOPPED_STATE; + } + else if ( ( isDialysateRecircBlocked() != TRUE ) && ( isBloodRecircBlocked() != TRUE ) ) + { + setDialInPumpTargetFlowRate( DIALYSATE_FLOW_RATE_FOR_RECIRC, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); + cmdStartDGTrimmerHeater(); + } + bloodRecircBlocked = isBloodRecircBlocked(); + dialysateRecircBlocked = isDialysateRecircBlocked(); } - else if ( ( isDialysateRecircBlocked() != TRUE ) && ( isDialInPumpRunning() != TRUE ) ) - { - setDialInPumpTargetFlowRate( DIALYSATE_FLOW_RATE_FOR_RECIRC, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); - cmdStartDGTrimmerHeater(); - } + return result; }