Index: firmware/App/Services/Reservoirs.c =================================================================== diff -u -r0cf731b5127eef04d9a0a2f32d5041171fe8b66e -rbd824a6c2a77c90809f8e09b1f7a1745778a6010 --- firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision 0cf731b5127eef04d9a0a2f32d5041171fe8b66e) +++ firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision bd824a6c2a77c90809f8e09b1f7a1745778a6010) @@ -7,8 +7,8 @@ * * @file Reservoirs.c * -* @author (last) Dara Navaei -* @date (last) 07-Mar-2023 +* @author (last) Sean Nash +* @date (last) 28-Mar-2023 * * @author (original) Dara Navaei * @date (original) 21-Nov-2021 @@ -86,7 +86,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. @@ -141,6 +143,8 @@ dgOpMode = DG_MODE_INIT; dgSubMode = 0; timeReservoirInUse = 0; + timeReservoirInUF = 0; + lastTimeReservoirInUF = 0; volSpentUFML = 0.0F; activeReservoir = DG_RESERVOIR_1; recirculationLevelPct = 0.0F; @@ -193,15 +197,17 @@ // 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 ); - - // Check the recirculation level - recirculationLevelPct = volSpentML / (F32)FILL_RESERVOIR_TO_VOLUME_ML; - - if ( TREATMENT_DIALYSIS_STATE == getTreatmentState()) +#ifdef DIALYZER_REPRIME_ENABLED + if ( getDialysisState() != DIALYSIS_DIALYZER_REPRIME_STATE ) { - ++timeReservoirInUse; +#endif + volSpentML += ( flowRateMLPerMS * msSinceLastVolumeCalc ); + timeReservoirInUse++; + // Check the recirculation level + recirculationLevelPct = volSpentML / (F32)FILL_RESERVOIR_TO_VOLUME_ML; +#ifdef DIALYZER_REPRIME_ENABLED } +#endif } // Update the reservoir start time @@ -256,6 +262,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 ********** /*********************************************************************//** @@ -698,6 +730,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.