Index: firmware/App/Services/Reservoirs.c =================================================================== diff -u -r0035cfb9a3fa89a8f9c3e0b589a327ed9c1d9470 -r0ef0dc2039726fd956ea74102ec7ff0e42bd2aab --- firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision 0035cfb9a3fa89a8f9c3e0b589a327ed9c1d9470) +++ firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision 0ef0dc2039726fd956ea74102ec7ff0e42bd2aab) @@ -75,7 +75,9 @@ static F32 dilutionLevelPct; ///< Reservoir dilution level. static DG_OP_MODE_T dgOpMode; ///< DG operation mode. static U32 dgSubMode; ///< DG operation submode. -static U32 timeReservoirInUse; ///< Reservoir time in use in milliseconds. +static U32 timeReservoirInUse; ///< Reservoir time in use in general task intervals. +static U32 timeReservoirInUF; ///< Reservoir time in ultrafiltration (in ms). +static U32 lastTimeReservoirInUF; ///< Reservoir time in ultrafiltration from prior reservoir (in ms). static F32 volSpentUFML; ///< Ultrafiltration volume in milliliters. static DG_RESERVOIR_ID_T activeReservoir; ///< Active reservoir. static F32 recirculationLevelPct; ///< Recirculation level in percent. @@ -129,6 +131,8 @@ dgOpMode = DG_MODE_INIT; dgSubMode = 0; timeReservoirInUse = 0; + timeReservoirInUF = 0; + lastTimeReservoirInUF = 0; volSpentUFML = 0.0F; activeReservoir = DG_RESERVOIR_1; recirculationLevelPct = 0.0F; @@ -160,7 +164,7 @@ * The execReservoirs function executes the state machine for the treatment * reservoir management during treatment mode. * @details Inputs: reservoirsState - * @details Outputs: reservoirsState, timeReservoirInUse, volSpentML + * @details Outputs: reservoirsState, timeReservoirInUse, timeReservoirInUF, volSpentML * @return none *************************************************************************/ void execReservoirs( void ) @@ -182,11 +186,7 @@ if ( ( TREATMENT_DIALYSIS_STATE == getTreatmentState() ) && ( getDialysisState() != DIALYSIS_SALINE_BOLUS_STATE ) ) { volSpentML += ( flowRateMLPerMS * msSinceLastVolumeCalc ); - - if ( TREATMENT_DIALYSIS_STATE == getTreatmentState()) - { - ++timeReservoirInUse; - } + timeReservoirInUse++; } // Update the reservoir start time @@ -241,6 +241,32 @@ calculateActiveReservoirCycleTime(); } +/*********************************************************************//** + * @brief + * The getLastReservoirUFTimeInMs function returns the reservoir ultrafiltration + * time (in ms) for the last reservoir used in treatment. + * @details Inputs: none + * @details Outputs: none + * @return lastTimeReservoirInUF + *************************************************************************/ +U32 getLastReservoirUFTimeInMs( void ) +{ + return lastTimeReservoirInUF; +} + +/*********************************************************************//** + * @brief + * The updateReservoirUFTime function updates the reservoir ultrafiltration + * time (in ms) for currently active reservoir used in treatment. + * @details Inputs: timeReservoirInUF + * @details Outputs: timeReservoirInUF + * @return lastTimeReservoirInUF + *************************************************************************/ +void updateReservoirUFTime( void ) +{ + timeReservoirInUF += TASK_GENERAL_INTERVAL; +} + // ********** private functions ********** /*********************************************************************//** @@ -658,6 +684,8 @@ setFinalReservoirVolume(); // Switched the active reservoir so reset the reservoir in use timer + lastTimeReservoirInUF = timeReservoirInUF; + timeReservoirInUF = 0; timeReservoirInUse = 0; // Reset to start state to restart drain, fill, switch process.