Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -rd387dc3cd21e6f1fb7e161032f30eb49a9c1b48e -r96604b790636c66ef21980a4f13ee9f987f12fee --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision d387dc3cd21e6f1fb7e161032f30eb49a9c1b48e) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 96604b790636c66ef21980a4f13ee9f987f12fee) @@ -98,12 +98,14 @@ static BOOL endTreatmentRequest; ///< Flag indicates user has requested end of treatment from rinseback workflow. static BOOL bloodPrimeToDialysisRequest; ///< Flag indicates blood prime has completed and time to start dialysis. static BOOL resumeBlockedByAlarm; ///< Flag indicates an alarm has blocked resume of this treatment. -static TREATMENT_STATE_T treatmentStateBeforePause; ///< Treatment state to return to after treatment paused state. -static BOOL isolatedUFStartRequested; ///< Flag indicates isolated UF should start. -static BOOL isolatedUFMidTreatment; ///< Flag indicates isolated UF was started during HD/HDF treatment. -static U32 isolatedUFDurationMin; ///< Isolated UF duration in minutes. -static F32 isolatedUFSetVolumeMl; ///< Isolated UF set volume in mL. -static F32 isolatedUFRateMlMin; ///< Isolated UF rate in mL/min. +static TREATMENT_STATE_T treatmentStateBeforePause; ///< Treatment state to return to after treatment paused state. +static BOOL isolatedUFStartRequested; ///< Flag indicates isolated UF should start. +static BOOL isolatedUFMidTreatment; ///< Flag indicates isolated UF was started during HD/HDF treatment. +static U32 isolatedUFDurationMin; ///< Isolated UF duration in minutes. +static F32 isolatedUFSetVolumeMl; ///< Isolated UF set volume in mL. +static F32 isolatedUFRateMlMin; ///< Isolated UF rate in mL/min. +static U32 cumulativeIsolatedUFTimeMin; ///< Cumulative completed isolated UF time in minutes. +static F32 cumulativeIsolatedUFVolumeMl; ///< Cumulative completed isolated UF volume in mL. static U32 treatmentStartTimeStamp; ///< Treatment start timestamp for logging purpose. static U32 treatmentEndTimeStamp; ///< Treatment end timestamp for logging purpose. @@ -130,6 +132,7 @@ static void resetSignalFlags( void ); static void resetAlarmSignalFlags( void ); static void resumeDialysisAfterIsolatedUF( void ); +static void recordCompletedIsolatedUFSession( void ); /*********************************************************************//** * @brief @@ -177,6 +180,8 @@ isolatedUFDurationMin = 0; isolatedUFSetVolumeMl = 0.0F; isolatedUFRateMlMin = 0.0F; + cumulativeIsolatedUFTimeMin = 0; + cumulativeIsolatedUFVolumeMl = 0.0F; resetSignalFlags(); resetAlarmSignalFlags(); @@ -246,15 +251,8 @@ setDialysisDDParams( getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ), presUFVolumeMl, presUFRateMlMin ); bicarbConvFactor = BICARBONATE_CONVERSION_FACTOR; - if ( TREATMENT_MODALITY_ISOLATED_UF == getTreatmentParameterU32( TREATMENT_PARAM_TREATMENT_MODALITY ) ) - { - setIsolatedUFSettings( getTreatmentParameterU32( TREATMENT_PARAM_TREATMENT_DURATION ), presUFVolumeMl ); - presUFRateMlMin = getIsolatedUFRateMlMin(); - } - // Direct DD to generate dialysate and bypass while priming blood. - cmdStartGenerateDialysate( (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ), - ( TREATMENT_MODALITY_ISOLATED_UF == getTreatmentParameterU32( TREATMENT_PARAM_TREATMENT_MODALITY ) ? 0.0F : presUFRateMlMin ), + cmdStartGenerateDialysate( (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ), presUFRateMlMin, getTreatmentParameterF32( TREATMENT_PARAM_DIALYSATE_TEMPERATURE ), TRUE, getTreatmentParameterF32( TREATMENT_PARAM_ACID_CONCENTRATE_CONV_FACTOR ), bicarbConvFactor, @@ -407,7 +405,7 @@ * The signalStartIsolatedUF function requests transition to isolated UF. * @details \b Inputs: none * @details \b Outputs: isolatedUFStartRequested, isolatedUFMidTreatment - * @param midTreatment TRUE when resuming HD/HDF after iso UF; FALSE for post-treatment or standalone exit to POST. + * @param midTreatment TRUE when resuming HD/HDF after iso UF; FALSE for post-treatment entry (exit to POST). * @return none *************************************************************************/ void signalStartIsolatedUF( BOOL midTreatment ) @@ -467,6 +465,46 @@ /*********************************************************************//** * @brief + * The getCumulativeIsolatedUFTimeMin function gets cumulative completed + * isolated UF time for the current treatment session. + * @details \b Inputs: cumulativeIsolatedUFTimeMin + * @details \b Outputs: none + * @return cumulative completed isolated UF time in minutes. + *************************************************************************/ +U32 getCumulativeIsolatedUFTimeMin( void ) +{ + return cumulativeIsolatedUFTimeMin; +} + +/*********************************************************************//** + * @brief + * The getCumulativeIsolatedUFVolumeMl function gets cumulative completed + * isolated UF volume for the current treatment session. + * @details \b Inputs: cumulativeIsolatedUFVolumeMl + * @details \b Outputs: none + * @return cumulative completed isolated UF volume in mL. + *************************************************************************/ +F32 getCumulativeIsolatedUFVolumeMl( void ) +{ + return cumulativeIsolatedUFVolumeMl; +} + +/*********************************************************************//** + * @brief + * The recordCompletedIsolatedUFSession function accumulates elapsed time and + * delivered volume from a completed isolated UF session. + * @details \b Inputs: getIsolatedUFSessionElapsedTimeMin, getIsolatedUFVolumeDrawn + * @details \b Outputs: cumulativeIsolatedUFTimeMin, cumulativeIsolatedUFVolumeMl + * @return none + *************************************************************************/ +static void recordCompletedIsolatedUFSession( void ) +{ + cumulativeIsolatedUFTimeMin += getIsolatedUFSessionElapsedTimeMin(); + cumulativeIsolatedUFVolumeMl += getIsolatedUFVolumeDrawn() * (F32)ML_PER_LITER; +} + +/*********************************************************************//** + * @brief * The resumeDialysisAfterIsolatedUF function restores normal HD/HDF dialysis * after a mid-treatment isolated UF session. Prescribed UF rate and Qd stored * in the dialysis sub-mode are reapplied to the DD. @@ -742,8 +780,7 @@ // Handle alarm page if ( TRUE == doesAlarmStatusIndicateStop() ) { - transitionToTreatmentPaused(); - result = TREATMENT_PAUSED_STATE; + result = enterTreatmentPausedState(); } else { @@ -754,27 +791,18 @@ { lastTreatmentTimeStamp = getMSTimerCount(); - if ( TREATMENT_MODALITY_ISOLATED_UF == getTreatmentParameterU32( TREATMENT_PARAM_TREATMENT_MODALITY ) ) - { - isolatedUFMidTreatment = FALSE; - transitionToIsolatedUF(); - result = TREATMENT_ISO_UF_STATE; - } - else - { - // Kick dialysis sub-mode off - setDialysisBloodPumpFlowRate( getTreatmentParameterU32( TREATMENT_PARAM_BLOOD_FLOW ) ); + // Kick dialysis sub-mode off + setDialysisBloodPumpFlowRate( getTreatmentParameterU32( TREATMENT_PARAM_BLOOD_FLOW ) ); // setDialysisDialInFlowAndUFRate( getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ), presMaxUFVolumeML, presUFRate ); // // if ( presUFRate > 0.0 ) // { // sendTreatmentLogEventData( UF_START_RESUME_EVENT, 0.0, presUFRate ); // } - transitionToDialysis(); + transitionToDialysis(); // // To update partial blood pump occlusion baseline - start of treatment // signalBloodPumpPressureOcclBaseline(); - result = TREATMENT_DIALYSIS_STATE; - } + result = TREATMENT_DIALYSIS_STATE; } } @@ -865,6 +893,7 @@ ( CALC_ELAPSED_TREAT_TIME_IN_SECS() >= presTreatmentTimeSecs ) ) { treatmentCompleted = TRUE; + recordCompletedIsolatedUFSession(); endIsolatedUFOnUserStop(); isolatedUFMidTreatment = FALSE; cmdBypassDialyzer( TRUE ); @@ -878,6 +907,8 @@ if ( TRUE == isIsolatedUFCompleted() ) { + recordCompletedIsolatedUFSession(); + if ( TRUE == isIsolatedUFMidTreatment() ) { resumeDialysisAfterIsolatedUF(); @@ -895,8 +926,7 @@ // Handle alarm page else if ( TRUE == doesAlarmStatusIndicateStop() ) { - transitionToTreatmentPaused(); - result = TREATMENT_PAUSED_STATE; + result = enterTreatmentPausedState(); } } @@ -938,16 +968,8 @@ break; case TREATMENT_BLOOD_PRIME_STATE: - if ( TREATMENT_MODALITY_ISOLATED_UF == getTreatmentParameterU32( TREATMENT_PARAM_TREATMENT_MODALITY ) ) - { - transitionToIsolatedUF(); - result = TREATMENT_ISO_UF_STATE; - } - else - { - transitionToDialysis(); - result = TREATMENT_DIALYSIS_STATE; - } + transitionToDialysis(); + result = TREATMENT_DIALYSIS_STATE; break; default: