Index: sources/drydemo/StateControllerHDFTreatment.cpp =================================================================== diff -u -r4d0fc455e6307639e72db490721c7768a487c014 -r6c0428ed8c6430924d54d5a42c45c8ec0c16c7c2 --- sources/drydemo/StateControllerHDFTreatment.cpp (.../StateControllerHDFTreatment.cpp) (revision 4d0fc455e6307639e72db490721c7768a487c014) +++ sources/drydemo/StateControllerHDFTreatment.cpp (.../StateControllerHDFTreatment.cpp) (revision 6c0428ed8c6430924d54d5a42c45c8ec0c16c7c2) @@ -9,45 +9,48 @@ _treatmentHDFVars.hdfManualRateMLPM = 0.0; // TODO assuming manual rate is 0 for now _treatmentHDFVars.hdfControlState = TD_HDF_PAUSED; _treatmentHDFVars.hdfMaxFiltrationFraction = HDF_MAX_FILTRATION_FRACTION; - _treatmentHDFVars.hdfCurrentRateMLPM = 0.5; + _treatmentHDFVars.hdfCurrentRateMLPM = HDF_START_RATE_MLPM; _treatmentHDFVars.hdfControlTimeCtr = 0; _treatmentHDFVars.hdfHasMaxVolumeBeenReached = false; _treatmentHDFVars.hdfIsRequested = true; } -float StateController::handleCheckHDFRate(const float proposedRateMLPM) +float StateController::handleHDFCheckRate(const float proposedRateMLPM, const bool initRate) { + if (initRate) { _treatmentHDFVars.hdfCurrentRateMLPM = HDF_START_RATE_MLPM; } + float hdfMaxRateMLPM = (_treatmentHDFVars.hdfMaxFiltrationFraction * _treatmentParams.bloodFlowRateMLPM) - _treatmentStatus.presUFRateMLPM; - if (hdfMaxRateMLPM > HDF_MAX_RATE) { hdfMaxRateMLPM = HDF_MAX_RATE; } + if (hdfMaxRateMLPM > HDF_MAX_RATE_MLPM) { hdfMaxRateMLPM = HDF_MAX_RATE_MLPM; } float newRateMLPM = (_treatmentHDFVars.hdfCurrentRateMLPM > proposedRateMLPM ? hdfMaxRateMLPM : _treatmentHDFVars.hdfCurrentRateMLPM); qDebug() << "HDF rate" << hdfMaxRateMLPM << newRateMLPM; return newRateMLPM; } -void StateController::handleTreatmentHDF() +void StateController::handleHDFTreatment() { if (_treatmentParams.treatmentModality != TREATMENT_MODALITY_HDF_ONLINE_FLUID) { return; } // _treatmentSubStates.txState = TREATMENT_HDF_STATE; TODo fix when UI fixed it switch (_treatmentHDFVars.hdfControlState) { case TD_HDF_PAUSED: if (!_treatmentHDFVars.hdfHasMaxVolumeBeenReached && _treatmentHDFVars.hdfIsRequested) { _treatmentHDFVars.hdfControlState = TD_HDF_RUNNING; - _treatmentHDFVars.hdfCurrentRateMLPM = handleCheckHDFRate(_treatmentHDFVars.hdfCurrentRateMLPM); + _treatmentHDFVars.hdfCurrentRateMLPM = handleHDFCheckRate(_treatmentHDFVars.hdfCurrentRateMLPM, true); } break; case TD_HDF_RUNNING: if (!_treatmentHDFVars.hdfIsRequested) { _treatmentHDFVars.hdfCurrentRateMLPM = 0.0; _treatmentHDFVars.hdfControlState = TD_HDF_PAUSED; + qDebug() << "Pause" << _treatmentHDFVars.hdfIsRequested; } else { if (++_treatmentHDFVars.hdfControlTimeCtr % static_cast(HDF_CONTROL_INT_CTR) != 0 ) { return; } if (_treatmentHDFVars.hdfManualRateMLPM <= NEARLY_ZERO) { - _treatmentHDFVars.hdfCurrentRateMLPM = handleCheckHDFRate(_treatmentHDFVars.hdfCurrentRateMLPM); + _treatmentHDFVars.hdfCurrentRateMLPM = handleHDFCheckRate(_treatmentHDFVars.hdfCurrentRateMLPM, false); } _treatmentHDFVars.hdfCurrentVolumeML += (static_cast(HDF_CONTROL_INT_CTR) / static_cast(SECONDS_PER_MINUTE)) * _treatmentHDFVars.hdfCurrentRateMLPM; @@ -56,7 +59,7 @@ _treatmentHDFVars.hdfHasMaxVolumeBeenReached << _treatmentHDFVars.hdfIsRequested << HDF_CONTROL_INT_CTR; if (_treatmentHDFVars.hdfCurrentVolumeML > _treatmentParams.hdfSubstitutionFluidVolumeL * MILLILITERS_PER_LITER) { - qDebug() << "volume HDF" << _treatmentHDFVars.hdfCurrentVolumeML; + qDebug() << "volume HDF" << _treatmentHDFVars.hdfCurrentVolumeML << _treatmentParams.hdfSubstitutionFluidVolumeL * MILLILITERS_PER_LITER; _treatmentHDFVars.hdfHasMaxVolumeBeenReached = true; _treatmentHDFVars.hdfCurrentRateMLPM = 0.0; _treatmentHDFVars.hdfControlState = TD_HDF_PAUSED; @@ -70,7 +73,7 @@ } } -void StateController::handleHemodialfiltrationBroadcastData(const Broadcast_Type BCType) +void StateController::handleHDFBroadcastData(const Broadcast_Type BCType) { static quint32 broadcastCounter = 50; if ((++broadcastCounter % NUM_OF_COUNTS_TIMER_BC_EMIT != 0) && (BCType == BC_DELAYED)) { return; } @@ -114,3 +117,17 @@ // TODo check the reject reasons handleUIResponseMessage(ID_TD_HDF_ADJUSTMENT_RESP, acceptReject, reason); } + +void StateController::hadnleHDFPauseResumeRequestMessage() +{ + if (_treatmentRcvdMessages[ID_UI_PAUSE_SUB_FLOW_RQST].isNull()) { return; } + quint32 acceptReject = REJECT_VALUE; + quint32 pauseResume = extractU32DataFromReceivedMessage(ID_UI_PAUSE_SUB_FLOW_RQST, 0); + + _treatmentHDFVars.hdfIsRequested = static_cast(pauseResume); + // TODo check the reject reasons + acceptReject = ACCEPT_VALUE; + _treatmentRcvdMessages[ID_UI_PAUSE_SUB_FLOW_RQST].clear(); + handleUIResponseMessage(ID_TD_PAUSE_SUB_FLOW_RESP, acceptReject); + +}