Index: firmware/App/Modes/StateTxDialysis.c =================================================================== diff -u -ra1f14a4e422f94b6bc25d1b91839761e7e1196d7 -rfb0ed6fa732380ea016262567f23117d26258f01 --- firmware/App/Modes/StateTxDialysis.c (.../StateTxDialysis.c) (revision a1f14a4e422f94b6bc25d1b91839761e7e1196d7) +++ firmware/App/Modes/StateTxDialysis.c (.../StateTxDialysis.c) (revision fb0ed6fa732380ea016262567f23117d26258f01) @@ -48,6 +48,7 @@ static F32 setUFVolumeL; ///< Currently set total ultrafiltration volume (in L) for treatment (from prescription). static F32 setUFRateMlMin; ///< Currently set ultrafiltration rate (in mL/min from prescription). static OVERRIDE_F32_T measUFVolumeL; ///< Current total measured volume (in L) for ultrafiltration . +static U32 lastUFVolumeUpdateTimestamp; static BOOL ufPauseRequested; ///< Flag indicates UF pause has been requested by user. static BOOL ufResumeRequested; ///< Flag indicates UF resume has been requested by user. @@ -82,6 +83,7 @@ measUFVolumeL.ovData = 0.0F; measUFVolumeL.ovInitData = 0.0F; measUFVolumeL.override = OVERRIDE_RESET; + lastUFVolumeUpdateTimestamp = 0; setBloodFlowRate = 0; setDialysateFlowRate = 0; @@ -121,6 +123,8 @@ setAlarmUserActionEnabled( ALARM_USER_ACTION_RINSEBACK, TRUE ); setAlarmUserActionEnabled( ALARM_USER_ACTION_END_TREATMENT, TRUE ); + lastUFVolumeUpdateTimestamp = getMSTimerCount(); + // Set actuators as appropriate for state cmdStartGenerateDialysate( setDialysateFlowRate, setUFRateMlMin, dialTemp, FALSE, acidConvFactor, bicarbConvFactor, sodium, bicarbonate ); @@ -505,8 +509,19 @@ *************************************************************************/ static void updateUFVolume( void ) { - // Update total UF volume drawn - measUFVolumeL.data = 0.0F; // TODO + U32 currentTime = getMSTimerCount(); + U32 elapsedTimeMs = calcTimeBetween( lastUFVolumeUpdateTimestamp, currentTime ); + + lastUFVolumeUpdateTimestamp = currentTime; + + if ( DIALYSIS_UF_STATE == currentDialysisState ) + { + F32 elapsedTimeMin = (F32)elapsedTimeMs / ( (F32)MS_PER_SECOND * (F32)SEC_PER_MIN ); + + F32 ufVolumeRemovedMl = setUFRateMlMin * elapsedTimeMin; + + measUFVolumeL.data = measUFVolumeL.data + ( ufVolumeRemovedMl / (F32)ML_PER_LITER ); + } } /*********************************************************************//**