Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -r52761961d73cdc8f5f9c0c83ef420bcd43a27551 -ra6b123cfdbca851389cfd5cc1b753386e156e960 --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 52761961d73cdc8f5f9c0c83ef420bcd43a27551) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision a6b123cfdbca851389cfd5cc1b753386e156e960) @@ -8,7 +8,7 @@ * @file ModeTreatment.c * * @author (last) Raghu Kallala -* @date (last) 17-Apr-2026 +* @date (last) 04-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, @@ -949,7 +949,7 @@ 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 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; @@ -1128,7 +1128,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 *************************************************************************/ @@ -1137,7 +1137,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();