Index: sources/drydemo/StateController.cpp =================================================================== diff -u -rbb80bbccaf1c911be48493868c18c656d84b2ec1 -rfb3e70cb47f3d22f31f68358c1bda69cce9cd248 --- sources/drydemo/StateController.cpp (.../StateController.cpp) (revision bb80bbccaf1c911be48493868c18c656d84b2ec1) +++ sources/drydemo/StateController.cpp (.../StateController.cpp) (revision fb3e70cb47f3d22f31f68358c1bda69cce9cd248) @@ -39,10 +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_TREATMENT_STOPPED_BY_USER ] = {ALARM_PRIORITY_HIGH, ALARM_STOP_TX_PROPERTIES}; - - //connect(&_dryDemo, &QScxmlStateMachine::runningChanged, this, &StateController::onBackToStanbyEvent); // TODO remove + _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 }; } void StateController::quit() @@ -138,13 +139,6 @@ if (_isBroadcastListReady){ sendMessages(true); } if (_isSendListReady){ sendMessages(false); } - - //if (! _treatmentRcvdMessages[ID_UI_CONFIRMATION_RESULT_RESP].isNull()){ - // // Check for the user request message from the dry-deme menu - // handleDryDemoMenuRequestMessage(); - //} - - //qDebug() << "Active State" << _dryDemo.activeStateNames(); } // ---------------------- Private methods ------------------ // @@ -271,8 +265,8 @@ currBloodFlowMLPM = BLOOD_PRIME_START_FLOW_MLPM; resume = true; hasFlowChngeRequested = false; - _treatmentSubStates.bloodPrimeStates = BLOOD_PRIME_RAMP_STATE; - _treatmentSubStates.txStates = TREAT_BLOOD_PRIME_STATE; + _treatmentSubStates.bloodPrimeState = BLOOD_PRIME_RAMP_STATE; + _treatmentSubStates.txState = TREAT_BLOOD_PRIME_STATE; handleTreatmentStatesBroadcastData(BC_IMMEDIATELY); rampStepML = getBloodPrimeRampStepML(); status = STATE_ON_ACTION; @@ -281,7 +275,6 @@ auto onAction = [=](){ status = STATE_ON_ACTION; - //txStates = {TREAT_BLOOD_PRIME_STATE, pauseResumeState, 0, 0, 0, 0, 0, 0, _treatmentSubStates.fluidBolusState, 0}; handleTreatmentStatesBroadcastData(BC_DELAYED); handleBackToStandbyEvent(status); @@ -291,7 +284,7 @@ quint32 resumeStatus = extractU32DataFromReceivedMessage(ID_UI_BLOOD_PRIME_CMD_RQST, 0); resume = (resumeStatus == BLOOD_PRIME_RESUME ? true : false); - _treatmentSubStates.bloodPrimeStates = (resumeStatus == BLOOD_PRIME_RESUME ? BLOOD_PRIME_RUN_STATE : BLOOD_PRIME_PAUSED_STATE); + _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(); @@ -317,6 +310,7 @@ status = STATE_ON_EXIT; // Send the final volume value prior to trnasiotining to treatment handleBloodPrimeBroadcastData(accumBloodVolML, 0, 0, BC_IMMEDIATELY); + qDebug() << "Vol" << accumBloodVolML; } }; @@ -338,21 +332,21 @@ static State_Status status = STATE_ON_ENTRY; static bool hasFlowChngeRequested = false; - if (_treatmentStatus.requestTreatmentReset) { status = STATE_ON_ENTRY; _treatmentStatus.requestTreatmentReset = false; } + //if (_treatmentStatus.requestTreatmentReset) { status = STATE_ON_ENTRY; _treatmentStatus.requestTreatmentReset = false; } auto onEntry = [=](){ hasFlowChngeRequested = false; // Start with UF state in dialysis _treatmentSubStates.dialysisSubState = DIALYSIS_UF_STATE; - _treatmentSubStates.txStates = TREAT_DIALYSIS_STATE; + _treatmentSubStates.txState = TREAT_DIALYSIS_STATE; handleTDOpModeTransitionBroadcastData(MODE_TREA, 0, BC_IMMEDIATELY); handleTreatmentStatesBroadcastData(BC_IMMEDIATELY); handleTreatmentSetpointsBroadcastData(_treatmentParams.bloodFlowRateMLPM, _treatmentParams.dialysateFlowRateMLPM, _treatmentParams.dialysateTemperatureC, BC_IMMEDIATELY); handleDDConductivityBroadcastData(BC_IMMEDIATELY); handleTreatmentTimeProcessAndBroadcastData(BC_IMMEDIATELY); handleDDGenDialysateModeBroadcastData(BC_IMMEDIATELY); - initializeTreatmentTimeAndUltrafiltration(); + if (_treatmentStatus.requestTreatmentReset) { initializeTreatmentTimeAndUltrafiltration(); } handleTreatmentSettingBroadcastData(BC_IMMEDIATELY); status = STATE_ON_ACTION; qDebug() << "Tx on entry"; @@ -400,9 +394,9 @@ qDebug() << "Tx in exit"; status = STATE_ON_ENTRY; if (_treatmentStatus.userCmd == CMD_END_TX) { - _treatmentStatus.stateTransitionEvent = "T_Tx_2_TP"; - status = STATE_ON_ACTION; - _treatmentStatus.userCmd = CMD_NONE; + _treatmentStatus.stateTransitionEvent = "T_Tx_2_TP"; + _treatmentStatus.requestTreatmentReset = false; + _treatmentStatus.userCmd = CMD_NONE; } _dryDemo.submitEvent(_treatmentStatus.stateTransitionEvent); }; @@ -417,13 +411,12 @@ void StateController::onTreatmentPauseStateChange(bool active) { static State_Status status = STATE_ON_ENTRY; - //static QList txStates; auto onEntry = [=](){ triggerAnAlarm(ALARM_ID_TD_TREATMENT_STOPPED_BY_USER); // Start with UF state in dialysis _treatmentSubStates.dialysisSubState = DIALYSIS_UF_PAUSED_STATE; - _treatmentSubStates.txStates = TREAT_PAUSED_STATE; + _treatmentSubStates.txState = TREAT_PAUSED_STATE; handleTDOpModeTransitionBroadcastData(MODE_TREA, 0, BC_IMMEDIATELY); handleTreatmentStatesBroadcastData(BC_IMMEDIATELY); status = STATE_ON_ACTION; @@ -433,7 +426,7 @@ auto onAction = [=](){ status = STATE_ON_ACTION; handleBackToStandbyEvent(status); - handleAlarmUserAction(status); + handleAlarmUserAction(status, true); handleTDOpModeTransitionBroadcastData(MODE_TREA, 0, BC_DELAYED); handleTreatmentStatesBroadcastData(BC_DELAYED); }; @@ -457,8 +450,8 @@ auto onEntry = [=](){ // Start with UF state in dialysis _treatmentSubStates.dialysisSubState = DIALYSIS_UF_PAUSED_STATE; - _treatmentSubStates.txStates = TREAT_RINSEBACK_STATE; - _treatmentSubStates.rinsebackState = RINSEBACK_STOP_INIT_STATE; + _treatmentSubStates.txState = TREAT_RINSEBACK_STATE; + _treatmentSubStates.rinsebackState = RINSEBACK_STOP_INIT_STATE; handleTDOpModeTransitionBroadcastData(MODE_TREA, 0, BC_IMMEDIATELY); initializeRinseback(); handleTreatmentStatesBroadcastData(BC_IMMEDIATELY); @@ -495,26 +488,41 @@ case STATE_ON_EXIT : if (active) onExit (); break; } } + void StateController::onTreatmentRecriculateStateChange(bool active) { static State_Status status = STATE_ON_ENTRY; auto onEntry = [=](){ - // Start with UF state in dialysis - _treatmentSubStates.dialysisSubState = DIALYSIS_UF_STATE; - _treatmentSubStates.txStates = TREAT_RECIRC_STATE; - _treatmentSubStates.recircState = TREATMENT_RECIRC_DISCONNECT_PATIENT_STATE; + _treatmentSubStates.txState = TREAT_START_STATE; + handleTreatmentStatesBroadcastData(BC_IMMEDIATELY); + _treatmentSubStates.txState = TREAT_RECIRC_STATE; + _treatmentSubStates.recircState = TREATMENT_RECIRC_DISCONNECT_PATIENT_STATE; + initializeRecirc(); handleTDOpModeTransitionBroadcastData(MODE_TREA, 0, BC_IMMEDIATELY); handleTreatmentStatesBroadcastData(BC_IMMEDIATELY); + handleRecircBroadcastData(BC_IMMEDIATELY); status = STATE_ON_ACTION; qDebug() << "Tx recirc on entry"; }; auto onAction = [=](){ status = STATE_ON_ACTION; + _treatmentStatus.recircTimerCounter++; handleBackToStandbyEvent(status); handleTDOpModeTransitionBroadcastData(MODE_TREA, 0, BC_DELAYED); + handleRecircRequestMessage(); handleTreatmentStatesBroadcastData(BC_DELAYED); + handleRecircBroadcastData(BC_DELAYED); + handleTreatmentSetpointsBroadcastData(_treatmentParams.bloodFlowRateMLPM, _treatmentParams.dialysateFlowRateMLPM, + _treatmentParams.dialysateTemperatureC, BC_DELAYED); + handleUIConfirmMessage(GENERIC_CONFIRM_ID_TREATMENT_END, status); + handleRecircTimeout(); + handleAlarmUserAction(status); + if (_treatmentStatus.hasResumeTxBeenRequested) { + _treatmentStatus.stateTransitionEvent = "T_RC_2_BP"; + status = STATE_ON_EXIT; + } }; auto onExit = [=](){ @@ -535,6 +543,9 @@ static State_Status status = STATE_ON_ENTRY; auto onEntry = [=](){ + _treatmentSubStates.txState = TREAT_END_STATE; + _treatmentSubStates.txEndState = TREATMENT_END_WAIT_FOR_RINSEBACK_STATE; + _treatmentStatus.isTreatmentComplete = true; handleTDOpModeTransitionBroadcastData(MODE_TREA, 0, BC_IMMEDIATELY); handleTreatmentStatesBroadcastData(BC_IMMEDIATELY); status = STATE_ON_ACTION;