Index: sources/drydemo/StateController.cpp =================================================================== diff -u -r521f29cb7dcd0de352dd744292488380e07cb9e3 -re8edefcae8e47854198b06c1a65e4e45da5f3afc --- sources/drydemo/StateController.cpp (.../StateController.cpp) (revision 521f29cb7dcd0de352dd744292488380e07cb9e3) +++ sources/drydemo/StateController.cpp (.../StateController.cpp) (revision e8edefcae8e47854198b06c1a65e4e45da5f3afc) @@ -39,19 +39,19 @@ _transitionEventsFromStandby[CMD_POST_TX ] = {"T_SB_2_Posttx" , static_cast(MODE_POST)}; // Alarms specs and properties - _alarmTriggerSpecs[ALARM_ID_NO_ALARM ] = {ALARM_PRIORITY_NONE , ALARM_NO_ALARM_PROPERTIES , ALARM_NOT_TRANS_TO_TX_PAUSE }; - _alarmTriggerSpecs[ALARM_ID_TD_VENOUS_PRESSURE_LOW ] = {ALARM_PRIORITY_HIGH , ALARM_LOW_VENOUS_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 }; - _alarmTriggerSpecs[ALARM_ID_DD_BICARBONATE_CARTRIDGE_LOW_LEVEL ] = {ALARM_PRIORITY_MEDIUM , ALARM_LOW_BICARB_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE }; - _alarmTriggerSpecs[ALARM_ID_TD_TREATMENT_MODALITY_CHANGE ] = {ALARM_PRIORITY_MEDIUM , ALARM_TX_MOD_CHNG_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE }; - _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_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 }; + _alarmTriggerSpecs[ALARM_ID_NO_ALARM ] = {ALARM_PRIORITY_NONE , ALARM_NO_ALARM_PROPERTIES , ALARM_NOT_TRANS_TO_TX_PAUSE , BLOOD_PUMP_NOT_RUNNING}; + _alarmTriggerSpecs[ALARM_ID_TD_VENOUS_PRESSURE_LOW ] = {ALARM_PRIORITY_HIGH , ALARM_LOW_VENOUS_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE , BLOOD_PUMP_NOT_RUNNING}; + _alarmTriggerSpecs[ALARM_ID_TD_TREATMENT_STOPPED_BY_USER ] = {ALARM_PRIORITY_HIGH , ALARM_STOP_TX_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE , BLOOD_PUMP_NOT_RUNNING}; + _alarmTriggerSpecs[ALARM_ID_TD_RECIRC_TIMEOUT_WARNING ] = {ALARM_PRIORITY_LOW , ALARM_RECIRC_WARN_PROPERTIES , ALARM_NOT_TRANS_TO_TX_PAUSE , BLOOD_PUMP_NOT_RUNNING}; + _alarmTriggerSpecs[ALARM_ID_TD_RECIRC_TIMEOUT ] = {ALARM_PRIORITY_HIGH , ALARM_RECIR_TIMEOUT_RPOPERTIES , ALARM_NOT_TRANS_TO_TX_PAUSE , BLOOD_PUMP_NOT_RUNNING}; + _alarmTriggerSpecs[ALARM_ID_DD_BICARBONATE_CARTRIDGE_LOW_LEVEL ] = {ALARM_PRIORITY_MEDIUM , ALARM_LOW_BICARB_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE , BLOOD_PUMP_IS_RUNNING }; + _alarmTriggerSpecs[ALARM_ID_TD_TREATMENT_MODALITY_CHANGE ] = {ALARM_PRIORITY_MEDIUM , ALARM_TX_MOD_CHNG_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE , BLOOD_PUMP_NOT_RUNNING}; + _alarmTriggerSpecs[ALARM_ID_DD_REPLACE_ACID_CONCENTRATE ] = {ALARM_PRIORITY_MEDIUM , ALARM_REPLACE_ACID_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE , BLOOD_PUMP_IS_RUNNING }; + _alarmTriggerSpecs[ALARM_ID_DD_REPLACE_BICARB_CARTRIDGE ] = {ALARM_PRIORITY_MEDIUM , ALARM_REPLACE_BICARB_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE , BLOOD_PUMP_IS_RUNNING }; + _alarmTriggerSpecs[ALARM_ID_TD_DIALYSATE_PROPORTIONING_IN_PROGRESS ] = {ALARM_PRIORITY_MEDIUM , ALARM_DIAL_PROPOR_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE , BLOOD_PUMP_IS_RUNNING }; + _alarmTriggerSpecs[ALARM_ID_TD_END_OF_TREATMENT ] = {ALARM_PRIORITY_LOW , ALARM_TD_END_OF_TX_PROPERTIES , ALARM_NOT_TRANS_TO_TX_PAUSE , BLOOD_PUMP_NOT_RUNNING}; + _alarmTriggerSpecs[ALARM_ID_TD_END_OF_TREATMENT_TIMEOUT ] = {ALARM_PRIORITY_HIGH , ALARM_TD_END_OF_TX_TIMEOUT_PROPERTIES , ALARM_NOT_TRANS_TO_TX_PAUSE , BLOOD_PUMP_NOT_RUNNING}; + _alarmTriggerSpecs[ALARM_ID_TD_HDF_SUBMODE_CHANGE ] = {ALARM_PRIORITY_MEDIUM , ALARM_ID_TD_HDF_SUBMODE_CHGE_PROPERTIES , ALARM_TRANS_TO_TX_PAUSE , BLOOD_PUMP_IS_RUNNING }; } void StateController::quit() @@ -250,7 +250,7 @@ }; auto onExit = [=](){ - qDebug() << "Standby in exit"; + qDebug() << "Standby on exit"; _dryDemo.submitEvent(_treatmentStatus.stateTransitionEvent); status = STATE_ON_ENTRY; }; @@ -300,7 +300,7 @@ }; auto onExit = [=](){ - qDebug() << "PreTx in exit"; + qDebug() << "PreTx on exit"; _dryDemo.submitEvent(_treatmentStatus.stateTransitionEvent); status = STATE_ON_ENTRY; }; @@ -355,7 +355,7 @@ handleVitalsDataRquest(); // Water Sample handleTDWaterSampleResultRequest(); - if (_treatmentSubStates.fluidBolusState == FLUID_BOLUS_SALINE_IN_PROGRESS_STATE){ + if (_treatmentSubStates.fluidBolusState == FLUID_BOLUS_SALINE_IN_PROGRESS_STATE) { handleFluidBolusFluidDelivery(currBloodFlowMLPM); handleFluidBolusBroadcastData(BC_DELAYED); // If fluid bolus is in progress, do not run the blood prime @@ -398,6 +398,8 @@ hasFlowChngeRequested = false; _treatmentSubStates.txState = TREAT_START_STATE; _treatmentStatus.isBloodPumpRunning = true; + _treatmentHDFVars.hdfIsRequested = _treatmentHDFVars.hdfPrevIsRequested; + _treatmentStatus.isDialysateInBypass = false; handleTreatmentStatesBroadcastData(BC_IMMEDIATELY); // Start with UF state in dialysis _treatmentSubStates.dialysisSubState = DIALYSIS_UF_STATE; @@ -475,7 +477,7 @@ }; auto onExit = [=](){ - qDebug() << "Tx in exit"; + qDebug() << "Tx on exit"; status = STATE_ON_ENTRY; if (_treatmentStatus.userCmd == CMD_TX_STOP) { triggerAnAlarm(ALARM_ID_TD_TREATMENT_STOPPED_BY_USER); @@ -504,8 +506,13 @@ _treatmentStatus.txPauseBloodSittingCounter = 0; _treatmentSubStates.dialysisSubState = DIALYSIS_UF_PAUSED_STATE; _treatmentSubStates.txState = TREAT_PAUSED_STATE; + _treatmentStatus.isDialysateInBypass = true; + _treatmentHDFVars.hdfPrevIsRequested = _treatmentHDFVars.hdfIsRequested; + _treatmentHDFVars.hdfIsRequested = false; handleTDOpModeTransitionBroadcastData(MODE_TREA, 0, BC_IMMEDIATELY); handleTreatmentStatesBroadcastData(BC_IMMEDIATELY); + // Send treatment pause values in treatment end to make sure the countdown is not non-zero to be sent to the alarm + handleTreatmentPauseBroadcastData(BC_IMMEDIATELY, true); status = STATE_ON_ACTION; qDebug() << "Tx pause on entry"; }; @@ -521,14 +528,24 @@ handleChemsReplacementAlarmsSequence(status); handleTDOpModeTransitionBroadcastData(MODE_TREA, 0, BC_DELAYED); // Broadcast methods - handleTreatmentPauseBroadcastData(BC_DELAYED); + if ((_treatmentStatus.activeTopAlarm != ALARM_ID_NO_ALARM) && (_alarmTriggerSpecs.contains(_treatmentStatus.activeTopAlarm))) { + if (_alarmTriggerSpecs[_treatmentStatus.activeTopAlarm][ALARM_TABLE_BLOOD_PUMP_RUN_INDEX] == BLOOD_PUMP_NOT_RUNNING) { + handleTreatmentPauseBroadcastData(BC_DELAYED); + } + } + // HDF methods + handleHDFBroadcastData(BC_DELAYED); + handleHDFTreatment(); // Pressure methods handlePressureLimitState(); handleTDPressureBroadcastData(BC_DELAYED); handleDeterminePressureLimits(); handleWidenPressureLimitsMessage(); + handlePressureLimitsChangeRequest(); // Dialysate is in bypass (set the flag to true because we in tx pause and we have to baypas dialysate) - handleDDGenDialysateModeBroadcastData(BC_DELAYED, true); + handleDDGenDialysateModeBroadcastData(BC_DELAYED); + handleTreatmentSetpointsBroadcastData(_treatmentParams.bloodFlowRateMLPM, _treatmentParams.dialysateFlowRateMLPM, + _treatmentParams.dialysateTemperatureC, BC_DELAYED); // UF is in pause handleUltrafiltrationBroadcastData(BC_DELAYED); // Vitals methods @@ -547,7 +564,7 @@ }; auto onExit = [=](){ - qDebug() << "Tx pasue in exit"; + qDebug() << "Tx pasue on exit"; // Set the pressure to close upon exiting the treatment pause handleSignalInitiatePressureStabilization(USE_NORMAL_STABILIZATION_PERIOD); _dryDemo.submitEvent(_treatmentStatus.stateTransitionEvent); @@ -605,7 +622,7 @@ }; auto onExit = [=](){ - qDebug() << "Tx rinseback in exit"; + qDebug() << "Tx rinseback on exit"; _dryDemo.submitEvent(_treatmentStatus.stateTransitionEvent); status = STATE_ON_ENTRY; }; @@ -658,7 +675,7 @@ }; auto onExit = [=](){ - qDebug() << "Tx recirc in exit"; + qDebug() << "Tx recirc on exit"; _dryDemo.submitEvent(_treatmentStatus.stateTransitionEvent); status = STATE_ON_ENTRY; }; @@ -685,8 +702,10 @@ _treatmentStatus.treatmentEndTimeoutAlarmCtr = _elapsedTimeCtr; handleTDOpModeTransitionBroadcastData(MODE_TREA, 0, BC_IMMEDIATELY); handleTreatmentStatesBroadcastData(BC_IMMEDIATELY); + // Send treatment pause values in treatment end to make sure the countdown is not non-zero to be sent to the alarm + handleTreatmentPauseBroadcastData(BC_IMMEDIATELY, true); status = STATE_ON_ACTION; - qDebug() << "Tx End on entry"; + qDebug() << "Tx end on entry"; }; auto onAction = [=](){ @@ -716,7 +735,7 @@ }; auto onExit = [=](){ - qDebug() << "Tx in exit"; + qDebug() << "Tx end on exit"; _dryDemo.submitEvent(_treatmentStatus.stateTransitionEvent); status = STATE_ON_ENTRY; };