Index: sources/drydemo/StateController.cpp =================================================================== diff -u -rfb3e70cb47f3d22f31f68358c1bda69cce9cd248 -rb9f4ddeb2dec3019b87c712bfe64b8df1d4b328c --- sources/drydemo/StateController.cpp (.../StateController.cpp) (revision fb3e70cb47f3d22f31f68358c1bda69cce9cd248) +++ sources/drydemo/StateController.cpp (.../StateController.cpp) (revision b9f4ddeb2dec3019b87c712bfe64b8df1d4b328c) @@ -39,11 +39,11 @@ _transitionEventsFromStandby[CMD_END_TX ] = {"T_SB_2_TE" , static_cast(MODE_TREA)}; // Alarms specs and properties - _alarmTriggerSpecs[ALARM_ID_NO_ALARM ] = {ALARM_PRIORITY_NONE, ALARM_NO_ALARM_PROPERTIES }; - _alarmTriggerSpecs[ALARM_ID_TD_REPLACE_ACID_JUG ] = {ALARM_PRIORITY_HIGH, ALARM_REPLACE_ACID_PROPERTIES }; - _alarmTriggerSpecs[ALARM_ID_TD_TREATMENT_STOPPED_BY_USER ] = {ALARM_PRIORITY_HIGH, ALARM_STOP_TX_PROPERTIES }; - _alarmTriggerSpecs[ALARM_ID_TD_RECIRC_TIMEOUT_WARNING ] = {ALARM_PRIORITY_LOW, ALARM_RECIRC_WARN_PROPERTIES }; - _alarmTriggerSpecs[ALARM_ID_TD_RECIRC_TIMEOUT ] = {ALARM_PRIORITY_HIGH, ALARM_RECIR_TIMEOUT_RPOPERTIES }; + _alarmTriggerSpecs[ALARM_ID_NO_ALARM ] = {ALARM_PRIORITY_NONE, ALARM_NO_ALARM_PROPERTIES , ALARM_NOT_TRANS_TO_TX_PAUSE}; + _alarmTriggerSpecs[ALARM_ID_TD_REPLACE_ACID_JUG ] = {ALARM_PRIORITY_HIGH, ALARM_REPLACE_ACID_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE }; + _alarmTriggerSpecs[ALARM_ID_TD_TREATMENT_STOPPED_BY_USER ] = {ALARM_PRIORITY_HIGH, ALARM_STOP_TX_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE }; + _alarmTriggerSpecs[ALARM_ID_TD_RECIRC_TIMEOUT_WARNING ] = {ALARM_PRIORITY_LOW , ALARM_RECIRC_WARN_PROPERTIES , ALARM_NOT_TRANS_TO_TX_PAUSE}; + _alarmTriggerSpecs[ALARM_ID_TD_RECIRC_TIMEOUT ] = {ALARM_PRIORITY_HIGH, ALARM_RECIR_TIMEOUT_RPOPERTIES, ALARM_NOT_TRANS_TO_TX_PAUSE}; } void StateController::quit() @@ -261,10 +261,10 @@ handleTDOpModeTransitionBroadcastData(MODE_TREA, 0, BC_IMMEDIATELY); // Clear the blood prime data immediately to prevent residual accumulated volume from a previous run handleBloodPrimeBroadcastData(0.0, 0, 0, BC_IMMEDIATELY); - accumBloodVolML = 0.0; - currBloodFlowMLPM = BLOOD_PRIME_START_FLOW_MLPM; - resume = true; - hasFlowChngeRequested = false; + accumBloodVolML = 0.0; + currBloodFlowMLPM = BLOOD_PRIME_START_FLOW_MLPM; + resume = true; + hasFlowChngeRequested = false; _treatmentSubStates.bloodPrimeState = BLOOD_PRIME_RAMP_STATE; _treatmentSubStates.txState = TREAT_BLOOD_PRIME_STATE; handleTreatmentStatesBroadcastData(BC_IMMEDIATELY); @@ -277,19 +277,7 @@ status = STATE_ON_ACTION; handleTreatmentStatesBroadcastData(BC_DELAYED); handleBackToStandbyEvent(status); - - if (! _treatmentRcvdMessages[ID_UI_BLOOD_PRIME_CMD_RQST].isNull()){ - handleUIResponseMessage(ID_TD_BLOOD_PRIME_CMD_RESP, ACCEPT_VALUE); - - quint32 resumeStatus = extractU32DataFromReceivedMessage(ID_UI_BLOOD_PRIME_CMD_RQST, 0); - - resume = (resumeStatus == BLOOD_PRIME_RESUME ? true : false); - _treatmentSubStates.bloodPrimeState = (resumeStatus == BLOOD_PRIME_RESUME ? BLOOD_PRIME_RUN_STATE : BLOOD_PRIME_PAUSED_STATE); - // Send the results immediately - handleTreatmentStatesBroadcastData(BC_IMMEDIATELY); - _treatmentRcvdMessages[ID_UI_BLOOD_PRIME_CMD_RQST].clear(); - } - + handleBloodPrimePauseResume(resume); handleSetPointBloodFlowChange(currBloodFlowMLPM, hasFlowChngeRequested); handleTDPressureProcessAndBroadcastData(BC_DELAYED); handleFluidBolusRequestMessage(); @@ -332,10 +320,10 @@ static State_Status status = STATE_ON_ENTRY; static bool hasFlowChngeRequested = false; - //if (_treatmentStatus.requestTreatmentReset) { status = STATE_ON_ENTRY; _treatmentStatus.requestTreatmentReset = false; } - auto onEntry = [=](){ hasFlowChngeRequested = false; + _treatmentSubStates.txState = TREAT_START_STATE; + handleTreatmentStatesBroadcastData(BC_IMMEDIATELY); // Start with UF state in dialysis _treatmentSubStates.dialysisSubState = DIALYSIS_UF_STATE; _treatmentSubStates.txState = TREAT_DIALYSIS_STATE; @@ -346,6 +334,8 @@ handleDDConductivityBroadcastData(BC_IMMEDIATELY); handleTreatmentTimeProcessAndBroadcastData(BC_IMMEDIATELY); handleDDGenDialysateModeBroadcastData(BC_IMMEDIATELY); + // If we are returning to treatment from recirculation or rinseback do not initialize the treatment time and UF + // This is to make sure the return to treatment is like the actual Leahi and the treatment is resumed. if (_treatmentStatus.requestTreatmentReset) { initializeTreatmentTimeAndUltrafiltration(); } handleTreatmentSettingBroadcastData(BC_IMMEDIATELY); status = STATE_ON_ACTION; @@ -359,7 +349,7 @@ handleTreatmentStatesBroadcastData(BC_DELAYED); // Fluid bolus functions handleFluidBolusRequestMessage(); - if (_treatmentSubStates.fluidBolusState == FLUID_BOLUS_SALINE_IN_PROGRESS_STATE){ handleFluidBolusFluidDelivery(_treatmentParams.bloodFlowRateMLPM); } + if (_treatmentSubStates.fluidBolusState == FLUID_BOLUS_SALINE_IN_PROGRESS_STATE) { handleFluidBolusFluidDelivery(_treatmentParams.bloodFlowRateMLPM); } handleFluidBolusBroadcastData(BC_DELAYED); // Broadcast functions handleTreatmentTimeProcessAndBroadcastData(BC_DELAYED); @@ -381,6 +371,8 @@ handleTreatmentSettingBroadcastData(BC_DELAYED); handleTreatmentTimeChangeValidation(); handleTreatmentTimeChangeConfirm(); + handleTriggeredAlarmsToTxPause(status); + if ((_treatmentStatus.treatmentElapsedTimeMS / MILLISECONDS_PER_SECOND) > (_treatmentParams.treatmentDurationMin * SECONDS_PER_MINUTE)) { // Treatment is complete @@ -394,6 +386,7 @@ qDebug() << "Tx in exit"; status = STATE_ON_ENTRY; if (_treatmentStatus.userCmd == CMD_END_TX) { + triggerAnAlarm(ALARM_ID_TD_TREATMENT_STOPPED_BY_USER); _treatmentStatus.stateTransitionEvent = "T_Tx_2_TP"; _treatmentStatus.requestTreatmentReset = false; _treatmentStatus.userCmd = CMD_NONE; @@ -413,7 +406,6 @@ static State_Status status = STATE_ON_ENTRY; auto onEntry = [=](){ - triggerAnAlarm(ALARM_ID_TD_TREATMENT_STOPPED_BY_USER); // Start with UF state in dialysis _treatmentSubStates.dialysisSubState = DIALYSIS_UF_PAUSED_STATE; _treatmentSubStates.txState = TREAT_PAUSED_STATE;