Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -r1e8f1e33b885d6b5d64efa37525fa4ea6720b4d5 -rad1296a077cec6ed95674cc1267a750aaf8213c4 --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 1e8f1e33b885d6b5d64efa37525fa4ea6720b4d5) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision ad1296a077cec6ed95674cc1267a750aaf8213c4) @@ -7,8 +7,8 @@ * * @file ModeTreatment.c * -* @author (last) Raghu Kallala -* @date (last) 17-Apr-2026 +* @author (last) Arpita Srivastava +* @date (last) 12-May-2026 * * @author (original) Sean Nash * @date (original) 21-Apr-2025 @@ -72,8 +72,8 @@ static BOOL treatmentCompleted; ///< Flag indicates whether the treatment has completed. static U32 presTreatmentTimeSecs; ///< Prescribed treatment time (in seconds). -static F32 presUFVolumeL; ///< Prescribed ultrafiltration volume (in L). -static F32 presUFRateLHr; ///< Prescribed ultrafiltration rate (in L/hr). +static F32 presUFVolumeMl; ///< Prescribed ultrafiltration volume (in L). +static F32 presUFRateMlMin; ///< Prescribed ultrafiltration rate (in mL/Min). static U32 treatmentTimeMS; ///< Elapsed treatment time (in ms). static U32 lastTreatmentTimeStamp; ///< Last time elapsed treatment time was recorded (a timestamp in ms). @@ -158,8 +158,8 @@ salineBolusBroadcastTimerCtr = SALINE_BOLUS_DATA_PUB_INTERVAL; // So we send saline bolus data immediately when we begin treatment mode presTreatmentTimeSecs = 0; - presUFVolumeL = 0.0F; - presUFRateLHr = 0.0F; + presUFVolumeMl = 0.0F; + presUFRateMlMin = 0.0F; resetSignalFlags(); resetAlarmSignalFlags(); @@ -207,13 +207,13 @@ // Set treatment parameters presTreatmentTimeSecs = getTreatmentParameterU32( TREATMENT_PARAM_TREATMENT_DURATION ) * SEC_PER_MIN; - presUFVolumeL = getTreatmentParameterF32( TREATMENT_PARAM_UF_VOLUME ); - presUFRateLHr = presUFVolumeL / ( (F32)getTreatmentParameterU32( TREATMENT_PARAM_TREATMENT_DURATION ) / (F32)MIN_PER_HOUR ); - setDialysisDDParams( getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ), presUFVolumeL, presUFRateLHr ); + presUFVolumeMl = getTreatmentParameterF32( TREATMENT_PARAM_UF_VOLUME ) * (F32)ML_PER_LITER; + presUFRateMlMin = presUFVolumeMl / (F32)getTreatmentParameterU32( TREATMENT_PARAM_TREATMENT_DURATION ); + setDialysisDDParams( getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ), presUFVolumeMl, presUFRateMlMin ); bicarbConvFactor = BICARBONATE_CONVERSION_FACTOR; // Direct DD to generate dialysate and bypass while priming blood - cmdStartGenerateDialysate( (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ), presUFRateLHr, + cmdStartGenerateDialysate( (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ), presUFRateMlMin, getTreatmentParameterF32( TREATMENT_PARAM_DIALYSATE_TEMPERATURE ), TRUE, getTreatmentParameterF32( TREATMENT_PARAM_ACID_CONCENTRATE_CONV_FACTOR ), bicarbConvFactor, @@ -965,8 +965,8 @@ // Compute minimum UF volume F32 minUFVol = 0.0F; // TODO getUltrafiltrationReferenceVolume() + presUFRate; // current UF volume + 1 min at current rate // Compute maximum UF volume (considering from adjustment of UF rate and time perspectives) - F32 maxUFVol1 = minUFVol + ( (F32)( presTime - elapseTime ) * MAX_UF_RATE_ML_MIN ); - F32 maxUFVol2 = ( presUFRateLHr > 0.0F ? minUFVol + ( (F32)( MAX_TREATMENT_TIME_MINUTES - elapseTime - 1 ) * presUFRateLHr ) : minUFVol ); + F32 maxUFVol1 = minUFVol + ( (F32)( presTime - elapseTime ) * MAX_UF_RATE_ML_MIN ); + F32 maxUFVol2 = ( presUFRateMlMin > 0.0F ? minUFVol + ( (F32)( MAX_TREATMENT_TIME_MINUTES - elapseTime - 1 ) * presUFRateMlMin ) : minUFVol ); F32 maxUFVol = MAX( maxUFVol1, maxUFVol2 ); // Set minimum dialysate flow rate U32 minDialRate = MIN_DIALYSATE_FLOW_RATE; @@ -1008,7 +1008,7 @@ // F32 const arterialPres = getFilteredArterialPressure(); // F32 const venousPres = getFilteredVenousPressure(); // -// if ( ( TREATMENT_DIALYSIS_STATE == getTreatmentState() ) && ( getDialysisState() != DIALYSIS_SALINE_BOLUS_STATE ) ) +// if ( ( TREATMENT_DIALYSIS_STATE == getTreatmentState() ) && ( getTreatmentState() != TREATMENT_SALINE_BOLUS_STATE ) ) // { // treatmentBloodFlowRateTotal_mL_min += getMeasuredBloodFlowRate(); // treatmentDialysateFlowRateTotal_mL_min += getMeasuredDialInFlowRate(); @@ -1145,7 +1145,7 @@ * @brief * The publishUltrafiltrationData function publishes the ultrafiltration data * at the set time interval. - * @details \b Inputs: presUFVolumeL, presUFRate + * @details \b Inputs: none * @details \b Outputs: none * @return none *************************************************************************/ @@ -1154,7 +1154,10 @@ if ( ++ultrafiltrationBroadcastTimerCtr >= ULTRAFILTRATION_DATA_PUB_INTERVAL ) { UF_DATA_PAYLOAD_T data; + F32 presUFRateLHr = 0.0F; + F32 presUFVolumeL = getTreatmentParameterF32( TREATMENT_PARAM_UF_VOLUME ); + presUFRateLHr = presUFVolumeL / ( (F32)getTreatmentParameterU32( TREATMENT_PARAM_TREATMENT_DURATION ) / (F32)MIN_PER_HOUR ); data.setUFVolumeL = presUFVolumeL; data.tgtUFRateLHr = presUFRateLHr; data.ufVolumeDeliveredL = getUltrafiltrationVolumeDrawn();