Index: firmware/App/Modes/StateTxDialysis.c =================================================================== diff -u -r6c933adfd50a0bc041dc29f4bfa15de5e9f4843a -r75f1ba7637288d1c437cad90cb59c961b4e62151 --- firmware/App/Modes/StateTxDialysis.c (.../StateTxDialysis.c) (revision 6c933adfd50a0bc041dc29f4bfa15de5e9f4843a) +++ firmware/App/Modes/StateTxDialysis.c (.../StateTxDialysis.c) (revision 75f1ba7637288d1c437cad90cb59c961b4e62151) @@ -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, 0, //dialTemp, //TODO: Update temperature with dialTemp when we are ready 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 ); + } } /*********************************************************************//**