Index: sources/StateController.cpp =================================================================== diff -u -r2a3dd98b9aeffdcac34d74e9eba9f0b4089ce339 -r5fe7e8bab66c3bed059ba84dd5092ea94ed736bc --- sources/StateController.cpp (.../StateController.cpp) (revision 2a3dd98b9aeffdcac34d74e9eba9f0b4089ce339) +++ sources/StateController.cpp (.../StateController.cpp) (revision 5fe7e8bab66c3bed059ba84dd5092ea94ed736bc) @@ -55,6 +55,7 @@ case ID_UI_SALINE_BOLUS_RQST: case ID_UI_PRESSURE_LIMITS_CHANGE_RQST: case ID_UI_ALARM_USER_ACTION_RQST: + case ID_USER_BLOOD_DIAL_RATE_CHANGE_RQST: _treatmentRcvdMessages[receivedMsgID] = msg[1]; break; @@ -93,6 +94,7 @@ case ID_HD_RINSEBACK_DATA_BC: case ID_HD_SALINE_BOLUS_BC: case ID_HD_PRESSURE_LIMITS_CHANGE_RESP: + case ID_USER_BLOOD_DIAL_RATE_CHANGE_RESP: // Do nothing break; } @@ -884,6 +886,43 @@ _isSendListReady = true; } +void StateController::handleBloodDialRateChangeRequest(const QVariant &payload) +{ + quint32 accept = REJECT_VALUE; + qint32 presIndex = 0; + Types::U32 bloodFlowMLPM; + Types::U32 dialFlowMLPM; + GetValue(payload.toByteArray(), presIndex, bloodFlowMLPM); + GetValue(payload.toByteArray(), presIndex, dialFlowMLPM); + + float diaVolSoFarML = _treatmentParams.dialysateFlowRateMLPM * ((_treatmentVars.treatmentElapsedTimeS / QOBJECT_TIMER_TIMEOUT_MS ) / SECONDS_PER_MINUTE); + float dialVolNowToEndML = dialFlowMLPM.value* (_treatmentVars.remainingTreatmentTimeS / SECONDS_PER_MINUTE); + float dialVolML = diaVolSoFarML + dialVolNowToEndML; + + if ((bloodFlowMLPM.value >= MIN_BLOOD_RATE_MLPM) && (bloodFlowMLPM.value <= MAX_BLOOD_RATE_MLPM) && + (dialFlowMLPM.value >= MIN_DIAL_RATE_MLPM) && (dialFlowMLPM.value <= MAX_DIAL_RATE_MLPM) && + (dialVolML <= MAX_DIALYSATE_VOLUME_ML )) { + + _treatmentParams.bloodFlowRateMLPM = bloodFlowMLPM.value; + _treatmentParams.dialysateFlowRateMLPM = dialFlowMLPM.value; + accept = ACCEPT_VALUE; + } + + qDebug() << "Blood Dial values" << diaVolSoFarML << dialVolNowToEndML << dialVolML << accept; + + QVariantList msg; + msg.append(static_cast(ID_USER_BLOOD_DIAL_RATE_CHANGE_RESP)); + msg.append(Can_Id::eChlid_HD_UI); + msg.append(accept); + msg.append(0); + msg.append(_treatmentParams.bloodFlowRateMLPM); + msg.append(_treatmentParams.dialysateFlowRateMLPM); + + _isSendListReady = false; + _sendMessages.append(msg); + _isSendListReady = true; +} + // ----------- State transition methods ---------------- // void StateController::onIdleStateChange(bool active) { @@ -1714,6 +1753,11 @@ _treatmentRcvdMessages[ID_UI_PRESSURE_LIMITS_CHANGE_RQST].clear(); } + if (!_treatmentRcvdMessages[ID_USER_BLOOD_DIAL_RATE_CHANGE_RQST].isNull()) { + handleBloodDialRateChangeRequest(_treatmentRcvdMessages[ID_USER_BLOOD_DIAL_RATE_CHANGE_RQST]); + _treatmentRcvdMessages[ID_USER_BLOOD_DIAL_RATE_CHANGE_RQST].clear(); + } + generateOcclusionPresureValues(false, _treatmentVars.broadcastIntervalCount); if (_treatmentVars.broadcastIntervalCount % NUM_OF_COUNTS_TIMER_BC_EMIT == 0) { @@ -1828,7 +1872,6 @@ } if (rbAcuumVolML >= rbTargetVolML) { - qDebug() << "RB Vols" << rbAcuumVolML << rbTargetVolML; rbSubState = RINSEBACK_STOP_STATE; txStates[0] = txSubState; txStates[4] = rbSubState;