Index: sources/drydemo/StateControllerTreatment.cpp =================================================================== diff -u -rb9f4ddeb2dec3019b87c712bfe64b8df1d4b328c -rc52253ab5fc73e9b59d9cd99eada3d526d799987 --- sources/drydemo/StateControllerTreatment.cpp (.../StateControllerTreatment.cpp) (revision b9f4ddeb2dec3019b87c712bfe64b8df1d4b328c) +++ sources/drydemo/StateControllerTreatment.cpp (.../StateControllerTreatment.cpp) (revision c52253ab5fc73e9b59d9cd99eada3d526d799987) @@ -95,9 +95,9 @@ if (_treatmentStatus.hasTxParamsBeenInitialized) { _treatmentStatus.treatmentElapsedTimeMS = 0; } _treatmentStatus.presUFRateMLPM = (_treatmentParams.ufVolumeL * MILLILITERS_PER_LITER) / (static_cast(_treatmentParams.treatmentDurationMin)); - float presUFVolL = _treatmentParams.ufVolumeL; - float presUFRateLHR = presUFVolL / (static_cast(_treatmentParams.treatmentDurationMin) / static_cast(MINUTES_PER_HOUR)); - float UFVolLMS = presUFRateLHR / (static_cast(MINUTES_PER_HOUR * SECONDS_PER_MINUTE * MILLISECONDS_PER_SECOND)); + float presUFVolL = _treatmentParams.ufVolumeL; + float presUFRateLHR = presUFVolL / (static_cast(_treatmentParams.treatmentDurationMin) / static_cast(MINUTES_PER_HOUR)); + float UFVolLMS = presUFRateLHR / (static_cast(MINUTES_PER_HOUR * SECONDS_PER_MINUTE * MILLISECONDS_PER_SECOND)); _treatmentStatus.ufVolDeliveredL = UFVolLMS * _treatmentStatus.treatmentElapsedTimeMS; @@ -107,7 +107,6 @@ void StateController::handleFluidBolusRequestMessage() { if (! _treatmentRcvdMessages[ID_UI_FLUID_BOLUS_RQST].isNull()){ - quint32 fluidBolusCmd = extractU32DataFromReceivedMessage(ID_UI_FLUID_BOLUS_RQST, 0); // Assume the fluid bolus is not in progress @@ -125,7 +124,6 @@ } if (! _treatmentRcvdMessages[ID_UI_BOLUS_VOLUME_CHANGE_RQST].isNull()){ - quint32 fluidBolusVolML = extractU32DataFromReceivedMessage(ID_UI_BOLUS_VOLUME_CHANGE_RQST, 0); // TODO Check the range of the requested bolus volume @@ -137,20 +135,21 @@ void StateController::handleFluidBolusFluidDelivery(const quint32 bloodFlowMLPM) { + if (_treatmentSubStates.fluidBolusState != FLUID_BOLUS_SALINE_IN_PROGRESS_STATE) { return; } + float timeSinceLastTimeMin = static_cast(QOBJECT_TIMER_TIMEOUT_MS) / static_cast(MILLISECONDS_PER_SECOND * SECONDS_PER_MINUTE); _treatmentStatus.accumFluidBolusDeliveredML += static_cast(bloodFlowMLPM) * timeSinceLastTimeMin; - float deliveredFluidML = qAbs(_treatmentStatus.totalFluidBolusDeliveredML - _treatmentStatus.accumFluidBolusDeliveredML); - - if (deliveredFluidML >= _treatmentParams.fluidBlousVolumeML) { + if (_treatmentStatus.accumFluidBolusDeliveredML >= _treatmentParams.fluidBlousVolumeML) { _treatmentSubStates.fluidBolusState = FLUID_BOLUS_IDLE_STATE; _treatmentSubStates.dialysisSubState = DIALYSIS_UF_STATE; - _treatmentStatus.accumFluidBolusDeliveredML = 0.0; _treatmentStatus.totalFluidBolusDeliveredML += _treatmentStatus.accumFluidBolusDeliveredML; + _treatmentStatus.accumFluidBolusDeliveredML = 0.0; + // Immediately broadcast the results to be updated + handleFluidBolusBroadcastData(BC_IMMEDIATELY); } - - qDebug() << "Bolus" << deliveredFluidML << _treatmentStatus.accumFluidBolusDeliveredML << _treatmentStatus.totalFluidBolusDeliveredML; + qDebug() << "Bolus" << _treatmentStatus.accumFluidBolusDeliveredML << _treatmentStatus.totalFluidBolusDeliveredML; } void StateController::handleTreatmentPrescriptionEditRequestMessage() @@ -308,8 +307,8 @@ float newUFRatMLPM = remainingUFVolML / remainingTreatmentTimeMin; reason[ufRateIndex] = (newUFRatMLPM * static_cast(MINUTES_PER_HOUR)) / (static_cast(MILLILITERS_PER_LITER)); - qDebug() << "UF" << remainingUFVolML << remainingTreatmentTimeMin << newUFRatMLPM; - if (newUFRatMLPM <+ MAX_UF_RATE_MLPM) { + qDebug() << "UF" << remainingUFVolML << remainingTreatmentTimeMin << newUFRatMLPM << reason[ufRateIndex]; + if (newUFRatMLPM <= MAX_UF_RATE_MLPM) { acceptReject = ACCEPT_VALUE; _treatmentStatus.validateUFVolReceived = true; _treatmentStatus.validateUFVolGoalL = requestedUFVolL; @@ -344,7 +343,7 @@ if (_treatmentStatus.validateUFVolReceived && isUFVolInRange && isUFRateInRange) { _treatmentParams.ufVolumeL = _treatmentStatus.validateUFVolGoalL; // Calcuate the new UF rate after the volume change - _treatmentStatus.presUFRateMLPM = (_treatmentStatus.validateUFRateLHR * MILLILITERS_PER_LITER) / (static_cast(MINUTES_PER_HOUR)); + _treatmentStatus.presUFRateMLPM = (_treatmentStatus.validateUFRateLHR * static_cast(MILLILITERS_PER_LITER)) / (static_cast(MINUTES_PER_HOUR)); _treatmentStatus.validateUFRateLHR = 0.0; _treatmentStatus.validateUFVolGoalL = 0.0; _treatmentStatus.validateUFVolReceived = false;