Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -r1a3a2f806bb81b05f67f80efb94f1d82ce174c09 -r8cceda439faa23a1e927721c6a9ef8e4ee30c5be --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 1a3a2f806bb81b05f67f80efb94f1d82ce174c09) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 8cceda439faa23a1e927721c6a9ef8e4ee30c5be) @@ -913,7 +913,7 @@ // 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_L_HR ); + 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 maxUFVol = MAX( maxUFVol1, maxUFVol2 ); // Set minimum dialysate flow rate Index: firmware/App/Services/Messaging.c =================================================================== diff -u -r1a3a2f806bb81b05f67f80efb94f1d82ce174c09 -r8cceda439faa23a1e927721c6a9ef8e4ee30c5be --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision 1a3a2f806bb81b05f67f80efb94f1d82ce174c09) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision 8cceda439faa23a1e927721c6a9ef8e4ee30c5be) @@ -31,7 +31,6 @@ #include "LevelSensors.h" #include "Messaging.h" #include "ModeStandby.h" -#include "ModeTreatment.h" #include "OperationModes.h" #include "PAL.h" #include "Pressures.h" Index: firmware/App/Services/Messaging.h =================================================================== diff -u -r1a3a2f806bb81b05f67f80efb94f1d82ce174c09 -r8cceda439faa23a1e927721c6a9ef8e4ee30c5be --- firmware/App/Services/Messaging.h (.../Messaging.h) (revision 1a3a2f806bb81b05f67f80efb94f1d82ce174c09) +++ firmware/App/Services/Messaging.h (.../Messaging.h) (revision 8cceda439faa23a1e927721c6a9ef8e4ee30c5be) @@ -58,38 +58,6 @@ U32 rejectionReason; ///< Rejection reason if not accepted. } UI_RESPONSE_PAYLOAD_T; -/// Payload record structure for UF change response. -typedef struct -{ - BOOL accepted; ///< Accepted/Rejected - U32 rejectionReason; ///< Rejection reason if not accepted. - F32 ufVolume; ///< UF Volume in mL. - U32 durationInMinutes; ///< new Treatment duration in minutes. - S32 timeDiff; ///< Treatment duration difference. - F32 ufRate; ///< new UF rate in mL/min. - F32 rateDiff; ///< difference between new and old UF rates. - F32 oldUFRate; ///< Previous UF Rate in mL/min. -} UF_SETTINGS_CHANGE_RESPONSE_PAYLOAD_T; - -/// Payload record structure for UF change confirmation response. -typedef struct -{ - BOOL accepted; ///< Accepted/Rejected - U32 rejectionReason; ///< Rejection reason if not accepted. - F32 volume; ///< UF Volume in mL. - U32 duration; ///< Treatment duration in minutes - F32 ufRate; ///< UF rate in mL. -} UF_SETTINGS_CONFIRMATION_RESPONSE_PAYLOAD_T; - -/// Payload record structure for blood / dialysate rate change response. -typedef struct -{ - BOOL accepted; ///< Accepted/Rejected - U32 rejectionReason; ///< Rejection reason if not accepted. - U32 bloodRate; ///< new blood flow rate - U32 dialRate; ///< new dialysate flow rate -} BLOOD_DIAL_RATE_CHANGE_RESPONSE_PAYLOAD_T; - /// Payload record structure for treatment parameter broadcast messages. typedef struct { Index: firmware/App/Services/TxParams.c =================================================================== diff -u -r1a3a2f806bb81b05f67f80efb94f1d82ce174c09 -r8cceda439faa23a1e927721c6a9ef8e4ee30c5be --- firmware/App/Services/TxParams.c (.../TxParams.c) (revision 1a3a2f806bb81b05f67f80efb94f1d82ce174c09) +++ firmware/App/Services/TxParams.c (.../TxParams.c) (revision 8cceda439faa23a1e927721c6a9ef8e4ee30c5be) @@ -477,7 +477,7 @@ payload.minTreatmentTime = treatmentParameters[ TREATMENT_PARAM_TREATMENT_DURATION ].minimum.uInt; payload.maxTreatmentTime = treatmentParameters[ TREATMENT_PARAM_TREATMENT_DURATION ].maximum.uInt; payload.minUFVolume = 0.0F; - payload.maxUFVolume = MIN( (F32)setTxDuration * MAX_UF_RATE_L_HR, (F32)MAX_UF_VOLUME_ML ); + payload.maxUFVolume = MIN( (F32)setTxDuration * MAX_UF_RATE_ML_MIN, (F32)MAX_UF_VOLUME_ML ); payload.minDialRate = treatmentParameters[ TREATMENT_PARAM_DIALYSATE_FLOW ].minimum.uInt; payload.maxDialRate = treatmentParameters[ TREATMENT_PARAM_DIALYSATE_FLOW ].maximum.uInt; sendMessage( MSG_ID_TD_TREATMENT_PARAM_RANGES, COMM_BUFFER_OUT_CAN_TD_2_UI, (U08*)(&payload), sizeof( TREATMENT_PARAM_RANGE_BROADCAST_PAYLOAD_T ) ); @@ -628,7 +628,7 @@ { F32 uFRate = uFVolumeMl / (F32)treatmentDuration; - if ( ( uFRate > MAX_UF_RATE_L_HR ) || ( uFRate < MIN_UF_RATE_L_HR ) ) + if ( ( uFRate > MAX_UF_RATE_ML_MIN ) || ( uFRate < MIN_UF_RATE_ML_MIN ) ) { accepted = FALSE; rejReason = REQUEST_REJECT_REASON_UF_RATE_OUT_OF_RANGE; @@ -1406,7 +1406,7 @@ response.ufVolumeGoal = 0.0F; response.ufRate = 0.0F; - // Clear previously validated values, + // Clear previously validated values. validTreatmentDurationReceived = FALSE; validatedTreatmentDuration_min = 0U; validatedUFRateLHr = 0.0F; @@ -1430,11 +1430,12 @@ // Calculate new UF rate (L/hr) F32 newUfRateLHr = remainingUFVolumeL / remainingTreatmentTimeHr; + F32 newUfRateMlMin = newUfRateLHr * (F32)ML_PER_LITER / (F32)MIN_PER_HOUR; response.ufVolumeGoal = presUFVolumeL; response.ufRate = newUfRateLHr; - if ( newUfRateLHr <= MAX_UF_RATE_L_HR ) + if ( newUfRateMlMin <= MAX_UF_RATE_ML_MIN ) { response.accepted = TRUE; response.rejectionReason = REQUEST_REJECT_REASON_NONE; Index: firmware/App/Services/TxParams.h =================================================================== diff -u -r1a3a2f806bb81b05f67f80efb94f1d82ce174c09 -r8cceda439faa23a1e927721c6a9ef8e4ee30c5be --- firmware/App/Services/TxParams.h (.../TxParams.h) (revision 1a3a2f806bb81b05f67f80efb94f1d82ce174c09) +++ firmware/App/Services/TxParams.h (.../TxParams.h) (revision 8cceda439faa23a1e927721c6a9ef8e4ee30c5be) @@ -34,8 +34,8 @@ // ********** public definitions ********** #define MIN_PRESSURE_ALARM_LIMIT_DELTA_MMHG ( 30 ) ///< Minimum pressure alarm limit delta (in mmHg) -#define MAX_UF_RATE_L_HR ( 2.0F ) ///< Maximum ultrafiltration rate (in L/hr) -#define MIN_UF_RATE_L_HR ( 0.0F ) ///< Minimum ultrafiltration rate (in L/hr) +#define MAX_UF_RATE_ML_MIN ( 2000.01F / (F32)MIN_PER_HOUR ) ///< Maximum ultrafiltration rate (in mL/min). Added small decimal to prevent float round off issues. +#define MIN_UF_RATE_ML_MIN ( 0.0F ) ///< Minimum ultrafiltration rate (in mL/min). #define MAX_UF_VOLUME_ML ( 8 * ML_PER_LITER ) ///< Maximum ultrafiltration volume (in mL). /// Record structure for a treatment parameters payload from UI. @@ -135,6 +135,38 @@ S32 tmpPressureLimitWindowMMHG; ///< TMP pressure limit window in mmHg. } PRESSURE_LIMIT_CHANGE_RESPONSE_T; +/// Payload record structure for UF change response. +typedef struct +{ + BOOL accepted; ///< Accepted/Rejected + U32 rejectionReason; ///< Rejection reason if not accepted. + F32 ufVolume; ///< UF Volume in mL. + U32 durationInMinutes; ///< new Treatment duration in minutes. + S32 timeDiff; ///< Treatment duration difference. + F32 ufRate; ///< new UF rate in mL/min. + F32 rateDiff; ///< difference between new and old UF rates. + F32 oldUFRate; ///< Previous UF Rate in mL/min. +} UF_SETTINGS_CHANGE_RESPONSE_PAYLOAD_T; + +/// Payload record structure for UF change confirmation response. +typedef struct +{ + BOOL accepted; ///< Accepted/Rejected + U32 rejectionReason; ///< Rejection reason if not accepted. + F32 volume; ///< UF Volume in mL. + U32 duration; ///< Treatment duration in minutes + F32 ufRate; ///< UF rate in mL. +} UF_SETTINGS_CONFIRMATION_RESPONSE_PAYLOAD_T; + +/// Payload record structure for blood / dialysate rate change response. +typedef struct +{ + BOOL accepted; ///< Accepted/Rejected + U32 rejectionReason; ///< Rejection reason if not accepted. + U32 bloodRate; ///< new blood flow rate + U32 dialRate; ///< new dialysate flow rate +} BLOOD_DIAL_RATE_CHANGE_RESPONSE_PAYLOAD_T; + // ********** public function prototypes **************** BOOL setTreatmentParameterU32( TREATMENT_PARAM_T param, U32 value ); // Set a specified unsigned integer treatment parameter value