Index: sources/drydemo/StateController.cpp =================================================================== diff -u -r0deaf8f3e192a0ecde953ab65efc1ded1c06269b -r521f29cb7dcd0de352dd744292488380e07cb9e3 --- sources/drydemo/StateController.cpp (.../StateController.cpp) (revision 0deaf8f3e192a0ecde953ab65efc1ded1c06269b) +++ sources/drydemo/StateController.cpp (.../StateController.cpp) (revision 521f29cb7dcd0de352dd744292488380e07cb9e3) @@ -49,9 +49,9 @@ _alarmTriggerSpecs[ALARM_ID_DD_REPLACE_ACID_CONCENTRATE ] = {ALARM_PRIORITY_MEDIUM , ALARM_REPLACE_ACID_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE }; _alarmTriggerSpecs[ALARM_ID_DD_REPLACE_BICARB_CARTRIDGE ] = {ALARM_PRIORITY_MEDIUM , ALARM_REPLACE_BICARB_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE }; _alarmTriggerSpecs[ALARM_ID_TD_DIALYSATE_PROPORTIONING_IN_PROGRESS ] = {ALARM_PRIORITY_MEDIUM , ALARM_DIAL_PROPOR_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE }; - _alarmTriggerSpecs[ALARM_ID_TD_END_OF_TREATMENT ] = {ALARM_PRIORITY_MEDIUM , ALARM_TD_END_OF_TX_PROPERTIES , ALARM_NOT_TRANS_TO_TX_PAUSE }; - _alarmTriggerSpecs[ALARM_ID_TD_END_OF_TREATMENT_TIMEOUT ] = {ALARM_PRIORITY_MEDIUM , ALARM_TD_END_OF_TX_TIMEOUT_PROPERTIES , ALARM_NOT_TRANS_TO_TX_PAUSE }; - + _alarmTriggerSpecs[ALARM_ID_TD_END_OF_TREATMENT ] = {ALARM_PRIORITY_LOW , ALARM_TD_END_OF_TX_PROPERTIES , ALARM_NOT_TRANS_TO_TX_PAUSE }; + _alarmTriggerSpecs[ALARM_ID_TD_END_OF_TREATMENT_TIMEOUT ] = {ALARM_PRIORITY_HIGH , ALARM_TD_END_OF_TX_TIMEOUT_PROPERTIES , ALARM_NOT_TRANS_TO_TX_PAUSE }; + _alarmTriggerSpecs[ALARM_ID_TD_HDF_SUBMODE_CHANGE ] = {ALARM_PRIORITY_MEDIUM , ALARM_ID_TD_HDF_SUBMODE_CHGE_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE }; } void StateController::quit() @@ -111,6 +111,8 @@ case ID_UI_BLOOD_PRESSURE_RQST: case ID_UI_SETUP_TUBING_SET_CONNECTIONS_CONFIRM_RQST: case ID_TD_END_TREATMENT_RQST: + case ID_UI_PATIENT_DISCONNECT_CONFIRM_RQST: + case ID_UI_ADJUST_DISPOSABLES_REMOVAL_CONFIRM_RQST: _treatmentRcvdMessages[receivedMsgID] = 0; break; @@ -163,6 +165,9 @@ case ID_TD_WATER_SAMPLE_RESULT_RESP: case ID_TD_PAUSE_SUB_FLOW_RESP: case ID_TD_END_TREATMENT_RESP: + case ID_TD_PATIENT_DISCONNECT_CONFIRM_RESP: + case ID_TD_ADJUST_DISPOSABLES_REMOVAL_CONFIRM_RESP: + case ID_TD_TREATMENT_PAUSED_TIMER_DATA: // Do nothing break; } @@ -209,6 +214,10 @@ initializeTreatmentParametersToDefault(); initializeDryDemoVariables(); initializeTreatmentHDFVariables(); + // Set the treatment state to start and broadcast it once to clear the traetment complete, if any from a + // previous run + _treatmentSubStates.txState = TREAT_START_STATE; + handleTreatmentStatesBroadcastData(BC_IMMEDIATELY); // Clear all the alarms triggerAnAlarm(ALARM_ID_NO_ALARM); status = STATE_ON_ACTION; @@ -491,15 +500,18 @@ auto onEntry = [=](){ // Start with UF state in dialysis - _treatmentSubStates.dialysisSubState = DIALYSIS_UF_PAUSED_STATE; - _treatmentSubStates.txState = TREAT_PAUSED_STATE; + hasFlowChngeRequested = false; + _treatmentStatus.txPauseBloodSittingCounter = 0; + _treatmentSubStates.dialysisSubState = DIALYSIS_UF_PAUSED_STATE; + _treatmentSubStates.txState = TREAT_PAUSED_STATE; handleTDOpModeTransitionBroadcastData(MODE_TREA, 0, BC_IMMEDIATELY); handleTreatmentStatesBroadcastData(BC_IMMEDIATELY); status = STATE_ON_ACTION; qDebug() << "Tx pause on entry"; }; auto onAction = [=](){ + _treatmentStatus.txPauseBloodSittingCounter++; status = STATE_ON_ACTION; handleBackToStandbyEvent(status); handleAlarmUserAction(status, true); @@ -508,7 +520,9 @@ // clearing any alarm handleChemsReplacementAlarmsSequence(status); handleTDOpModeTransitionBroadcastData(MODE_TREA, 0, BC_DELAYED); - // Pressure functions + // Broadcast methods + handleTreatmentPauseBroadcastData(BC_DELAYED); + // Pressure methods handlePressureLimitState(); handleTDPressureBroadcastData(BC_DELAYED); handleDeterminePressureLimits(); @@ -528,6 +542,7 @@ handleSetPointDialysateTemperatureChange(); // UI confirm message methods handleUIConfirmMessage(GENERIC_CONFIRM_ID_RINSEBACK, status); + handleUIConfirmMessage(GENERIC_CONFIRM_ID_TEMPORARY_BREAK, status); handleUIConfirmMessage(GENERIC_CONFIRM_ID_TREATMENT_END, status); }; @@ -580,6 +595,8 @@ handleVitalsDataRquest(); // Water sample methods handleTDWaterSampleResultRequest(); + // Alarm action + handleAlarmUserAction(status); handleUIConfirmMessage(GENERIC_CONFIRM_ID_TREATMENT_END, status); if (_treatmentStatus.hasRecircBeenRequested) { _treatmentStatus.stateTransitionEvent = "T_RB_2_RC"; @@ -695,11 +712,11 @@ // Treatment end request method handleTreatmentEndRequestMessage(status); handleTreatmentEndTimeout(); - handleUIConfirmMessage(GENERIC_CONFIRM_ID_TREATMENT_END, status); + handleUIConfirmMessage(GENERIC_CONFIRM_ID_RINSEBACK, status); }; auto onExit = [=](){ - qDebug() << "Tx in exit"; + qDebug() << "Tx in exit"; _dryDemo.submitEvent(_treatmentStatus.stateTransitionEvent); status = STATE_ON_ENTRY; }; @@ -716,18 +733,29 @@ static State_Status status = STATE_ON_ENTRY; auto onEntry = [=](){ - status = STATE_ON_ACTION; + // The default is drain + _treatmentStatus.bicartProgress = 0.0; + _treatmentStatus.bicartDrainInProgress = DRY_BICART_DRIN_IN_PROGRESS; + _treatmentSubStates.postTxState = TD_POST_TREATMENT_PATIENT_DISCONNECTION_STATE; handleBackToStandbyEvent(status); handleTDOpModeTransitionBroadcastData(MODE_POST, 0, BC_DELAYED); handleTreatmentStatesBroadcastData(BC_IMMEDIATELY); + status = STATE_ON_ACTION; qDebug() << "Post Tx on entry"; }; auto onAction = [=](){ status = STATE_ON_ACTION; handleBackToStandbyEvent(status); handleTDOpModeTransitionBroadcastData(MODE_POST, 0, BC_DELAYED); - // Vitals + // Post treatment methods + handlePatientDisconnectRequestMessage(); + handleRemoveDisposablesRequestMessage(); + if (_treatmentSubStates.postTxState == TD_POST_TREATMENT_PATIENT_DISCONNECTION_STATE) { + handleDryBicartActionRequest(); + } + handleDryBicartBroadcastData(BC_DELAYED); + // Vitals methods handleVitalsDataRquest(); // Water sample methods handleTDWaterSampleResultRequest(); @@ -897,6 +925,15 @@ return f32Var.value; } +QString StateController::getActiveStateName() +{ + QStringList activeStates = _dryDemo.activeStateNames(true); + // Check if there is at least one value in the string list to prevent segmentatoin fault + QString activeState = (activeStates.length() >= 1 ? activeStates[0] : ""); + return activeState; +} + +