Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -r96604b790636c66ef21980a4f13ee9f987f12fee -r222b05e39082f727dcfa2d144fa6e040501882f0 --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 96604b790636c66ef21980a4f13ee9f987f12fee) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 222b05e39082f727dcfa2d144fa6e040501882f0) @@ -253,7 +253,7 @@ // Direct DD to generate dialysate and bypass while priming blood. cmdStartGenerateDialysate( (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ), presUFRateMlMin, - getTreatmentParameterF32( TREATMENT_PARAM_DIALYSATE_TEMPERATURE ), TRUE, + getTreatmentParameterF32( TREATMENT_PARAM_DIALYSATE_TEMPERATURE ), DD_GEND_DIALYSATE_BYPASS_STATE, getTreatmentParameterF32( TREATMENT_PARAM_ACID_CONCENTRATE_CONV_FACTOR ), bicarbConvFactor, getTreatmentParameterU32( TREATMENT_PARAM_SODIUM ), @@ -384,6 +384,8 @@ if ( TREATMENT_ISO_UF_STATE == currentTreatmentState ) { + cmdSetGenDialysateState( DD_GEND_ISOLATED_UF_STATE ); + if ( ISOLATED_UF_PAUSED_STATE == getCurrentIsolatedUFState() ) { cmdChangeQuf( 0.0F ); @@ -874,61 +876,43 @@ /*********************************************************************//** * @brief * The handleTreatmentIsoUFState function handles isolated ultrafiltration. - * @details \b Inputs: treatmentTimeMS, lastTreatmentTimeStamp - * @details \b Outputs: treatmentTimeMS, isolated UF sub-mode executed + * @details \b Inputs: lastTreatmentTimeStamp + * @details \b Outputs: isolated UF sub-mode executed * @return next treatment mode state *************************************************************************/ static TREATMENT_STATE_T handleTreatmentIsoUFState( void ) { TREATMENT_STATE_T result = TREATMENT_ISO_UF_STATE; U32 newTime = getMSTimerCount(); - U32 msSinceLast = calcTimeBetween( lastTreatmentTimeStamp, newTime ); - // Update treatment time - treatmentTimeMS += msSinceLast; + // Keep the main HD/HDF treatment timer paused while isolated UF tracks its own session time. lastTreatmentTimeStamp = newTime; - // Prescribed HD/HDF time elapsed during mid-treatment iso UF: end iso UF and wait in END for post-treatment iso UF or POST. - if ( ( TRUE == isIsolatedUFMidTreatment() ) && - ( CALC_ELAPSED_TREAT_TIME_IN_SECS() >= presTreatmentTimeSecs ) ) + execIsolatedUF(); + + if ( TRUE == isIsolatedUFCompleted() ) { - treatmentCompleted = TRUE; recordCompletedIsolatedUFSession(); - endIsolatedUFOnUserStop(); - isolatedUFMidTreatment = FALSE; - cmdBypassDialyzer( TRUE ); - cmdChangeQuf( 0.0F ); - cmdChangeQd( 0.0F ); - result = TREATMENT_END_STATE; - } - else - { - execIsolatedUF(); - if ( TRUE == isIsolatedUFCompleted() ) + if ( TRUE == isIsolatedUFMidTreatment() ) { - recordCompletedIsolatedUFSession(); - - if ( TRUE == isIsolatedUFMidTreatment() ) - { - resumeDialysisAfterIsolatedUF(); - result = TREATMENT_DIALYSIS_STATE; - } - else - { - treatmentCompleted = TRUE; - cmdBypassDialyzer( TRUE ); - cmdChangeQuf( 0.0F ); - requestNewOperationMode( MODE_POST ); - result = TREATMENT_END_STATE; - } + resumeDialysisAfterIsolatedUF(); + result = TREATMENT_DIALYSIS_STATE; } - // Handle alarm page - else if ( TRUE == doesAlarmStatusIndicateStop() ) + else { - result = enterTreatmentPausedState(); + treatmentCompleted = TRUE; + cmdBypassDialyzer( TRUE ); + cmdChangeQuf( 0.0F ); + requestNewOperationMode( MODE_POST ); + result = TREATMENT_END_STATE; } } + // Handle alarm page + else if ( TRUE == doesAlarmStatusIndicateStop() ) + { + result = enterTreatmentPausedState(); + } return result; }