Index: firmware/App/Services/TxParams.c =================================================================== diff -u -rd495985858b3ef51b695a44ceedf6c13a8edb821 -r69c276212d96dbf22e4684e8d95b087ae7a9d11b --- firmware/App/Services/TxParams.c (.../TxParams.c) (revision d495985858b3ef51b695a44ceedf6c13a8edb821) +++ firmware/App/Services/TxParams.c (.../TxParams.c) (revision 69c276212d96dbf22e4684e8d95b087ae7a9d11b) @@ -128,8 +128,8 @@ { CRITICAL_DATA_TYPE_F32, {.sFlt=0.0}, {.sFlt=3.0}, {.sFlt=0.0} }, // TREATMENT_PARAM_HEPARIN_DELIVERY_RATE { CRITICAL_DATA_TYPE_F32, {.sFlt=35.0}, {.sFlt=38.0}, {.sFlt=37.0} }, // TREATMENT_PARAM_DIALYSATE_TEMPERATURE { CRITICAL_DATA_TYPE_F32, {.sFlt=0.10}, {.sFlt=0.20}, {.sFlt=0.20} }, // TREATMENT_PARAM_ACID_CONCENTRATE_CONV_FACTOR // TODO - { CRITICAL_DATA_TYPE_F32, {.sFlt=50.0}, {.sFlt=900.0},{.sFlt=50.0} }, // TREATMENT_PARAM_PRE_WEIGHT - { CRITICAL_DATA_TYPE_F32, {.sFlt=50.0}, {.sFlt=900.0},{.sFlt=50.0} }, // TREATMENT_PARAM_EST_TARGET_WEIGHT + { CRITICAL_DATA_TYPE_F32, {.sFlt=2.0}, {.sFlt=500.0},{.sFlt=50.0} }, // TREATMENT_PARAM_PRE_WEIGHT + { CRITICAL_DATA_TYPE_F32, {.sFlt=2.0}, {.sFlt=500.0},{.sFlt=50.0} }, // TREATMENT_PARAM_EST_TARGET_WEIGHT { CRITICAL_DATA_TYPE_F32, {.sFlt=0.0}, {.sFlt=8.0}, {.sFlt=0.0} }, // TREATMENT_PARAM_UF_VOLUME }; @@ -733,32 +733,36 @@ targetWeight = stagedParams[ TREATMENT_PARAM_EST_TARGET_WEIGHT ].sFlt; uFVolumeL = stagedParams[ TREATMENT_PARAM_UF_VOLUME ].sFlt; - // TODO add check to calculate UF volume from weights. near zero check for weight is done in range check. - if ( preWeight > NEARLY_ZERO && targetWeight > NEARLY_ZERO && preWeight >= targetWeight) + if ( ( preWeight > NEARLY_ZERO ) && ( targetWeight > NEARLY_ZERO ) && ( preWeight >= targetWeight ) ) { // Weights are valid - Calculate UF volume derivedUFVolumeL = preWeight - targetWeight; - if ( uFVolumeL <= NEARLY_ZERO && derivedUFVolumeL > NEARLY_ZERO ) + if ( uFVolumeL < NEARLY_ZERO && derivedUFVolumeL > NEARLY_ZERO ) { // Update UF volume with calculated UF volume stagedParams[ TREATMENT_PARAM_UF_VOLUME ].sFlt = derivedUFVolumeL; uFVolumeL = derivedUFVolumeL; + result = TRUE; } // case where UF volume is non-zero and provided weights else { reasons[ TREATMENT_PARAM_PRE_WEIGHT ] = REQUEST_REJECT_REASON_INVALID_PATIENT_WEIGHTS; reasons[ TREATMENT_PARAM_EST_TARGET_WEIGHT ] = REQUEST_REJECT_REASON_INVALID_PATIENT_WEIGHTS; - result = FALSE; + reasons[ TREATMENT_PARAM_UF_VOLUME ] = REQUEST_REJECT_REASON_UF_VOL_AND_WEIGHTS_INCONSISTENT; validWeights = FALSE; } } - // if weights are invalid + // provided a non-zero UF volume instead of weights + else if ( ( uFVolumeL > NEARLY_ZERO ) && ( preWeight < NEARLY_ZERO ) && ( targetWeight < NEARLY_ZERO ) ) + { + result = TRUE; + } + // weights are invalid else { reasons[ TREATMENT_PARAM_PRE_WEIGHT ] = REQUEST_REJECT_REASON_INVALID_PATIENT_WEIGHTS; reasons[ TREATMENT_PARAM_EST_TARGET_WEIGHT ] = REQUEST_REJECT_REASON_INVALID_PATIENT_WEIGHTS; - result = FALSE; validWeights = FALSE; } @@ -791,6 +795,7 @@ } else { + result = FALSE; reasons[ TREATMENT_PARAM_UF_VOLUME ] = REQUEST_REJECT_REASON_UF_VOLUME_OUT_OF_RANGE; }