Index: firmware/App/Services/Reservoirs.c =================================================================== diff -u -r0035cfb9a3fa89a8f9c3e0b589a327ed9c1d9470 -r709def41bcde8e2e59d83c5e9c5a06ab0ee74ec8 --- firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision 0035cfb9a3fa89a8f9c3e0b589a327ed9c1d9470) +++ firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision 709def41bcde8e2e59d83c5e9c5a06ab0ee74ec8) @@ -7,8 +7,8 @@ * * @file Reservoirs.c * -* @author (last) Dara Navaei -* @date (last) 07-Mar-2023 +* @author (last) Sean Nash +* @date (last) 16-Mar-2023 * * @author (original) Dara Navaei * @date (original) 21-Nov-2021 @@ -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; @@ -181,12 +185,15 @@ // Calculate volume used from active reservoir - do not accumulate if not performing dialysis or saline bolus is in progress if ( ( TREATMENT_DIALYSIS_STATE == getTreatmentState() ) && ( getDialysisState() != DIALYSIS_SALINE_BOLUS_STATE ) ) { - volSpentML += ( flowRateMLPerMS * msSinceLastVolumeCalc ); - - if ( TREATMENT_DIALYSIS_STATE == getTreatmentState()) +#ifdef DIALYZER_REPRIME_ENABLED + if ( getDialysisState() != DIALYSIS_DIALYZER_REPRIME_STATE ) { - ++timeReservoirInUse; +#endif + volSpentML += ( flowRateMLPerMS * msSinceLastVolumeCalc ); + timeReservoirInUse++; +#ifdef DIALYZER_REPRIME_ENABLED } +#endif } // Update the reservoir start time @@ -241,6 +248,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 +691,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.