Index: sources/drydemo/DryDemoDefines.h =================================================================== diff -u -r3a1edf1c2dc6f68d32af3adeeee4a59bbac739c5 -r7094c1e2387d63fc7fb9d6d9a09ea0aee3c71420 --- sources/drydemo/DryDemoDefines.h (.../DryDemoDefines.h) (revision 3a1edf1c2dc6f68d32af3adeeee4a59bbac739c5) +++ sources/drydemo/DryDemoDefines.h (.../DryDemoDefines.h) (revision 7094c1e2387d63fc7fb9d6d9a09ea0aee3c71420) @@ -26,7 +26,6 @@ #define NUM_OF_COUNTS_TIMER_BC_EMIT (PROGRESS_TIME_BC_INTERVAL_MS / QOBJECT_TIMER_TIMEOUT_MS) #define NUN_OF_COUNTS_QART_BC_EMIT (PRORGESS_TIME_BC_QART_INT_MS / QOBJECT_TIMER_TIMEOUT_MS) #define NUM_OF_COUNTS_TIMER_2_CONTROL (PROGRESS_TIME_BC_INTERVAL_MS / QOBJECT_TIMER_TIMEOUT_MS) -#define NUM_OF_COUNTS_TO_BC_MSG 3 // TODO remove // Treatment params #define MIN_DIAL_RATE_MLPM 50 @@ -120,18 +119,22 @@ #define RECIRC_WARN_BEFORE_TIMEOUT_MIN 10 // Alarms -#define ALARM_TABLE_PRIORITY_INDEX 0 -#define ALARM_TABLE_PROPERTIES_INDEX 1 -#define ALARM_TABLE_TX_PAUSE_INDEX 2 -#define ALARM_TRANS_TO_TX_PAUSE 1 -#define ALARM_NOT_TRANS_TO_TX_PAUSE 0 -#define TRIG_LOW_VEN_ALARM_TIMEOUT_MS (5 * SECONDS_PER_MINUTE * MILLISECONDS_PER_SECOND) -#define ALARM_NO_ALARM_PROPERTIES 0 -#define ALARM_STOP_TX_PROPERTIES 6 -#define ALARM_REPLACE_ACID_PROPERTIES 112 -#define ALARM_RECIRC_WARN_PROPERTIES 112 -#define ALARM_RECIR_TIMEOUT_RPOPERTIES 26 -#define ALARM_LOW_VENOUS_PROPERTIES 2 +#define ALARM_TABLE_PRIORITY_INDEX 0 +#define ALARM_TABLE_PROPERTIES_INDEX 1 +#define ALARM_TABLE_TX_PAUSE_INDEX 2 +#define ALARM_TRANS_TO_TX_PAUSE 1 +#define ALARM_NOT_TRANS_TO_TX_PAUSE 0 +#define TRIG_LOW_VEN_ALARM_TIMEOUT_MS (3 * SECONDS_PER_MINUTE * MILLISECONDS_PER_SECOND) +#define CLEAR_DIAL_PROPOR_TIMEOUT_MS (10 * MILLISECONDS_PER_SECOND) +#define ALARM_NO_ALARM_PROPERTIES 0 +#define ALARM_STOP_TX_PROPERTIES 6 +#define ALARM_REPLACE_ACID_PROPERTIES 112 +#define ALARM_RECIRC_WARN_PROPERTIES 112 +#define ALARM_RECIR_TIMEOUT_RPOPERTIES 26 +#define ALARM_LOW_VENOUS_PROPERTIES 2 +#define ALARM_RECIRC_WARN_PROPERTIES 112 +#define ALARM_REPLACE_BICARB_PROPERTIES 112 +#define ALARM_DIAL_PROPOR_PROPERTIES 10 enum User_Command_ID { CMD_NONE = -1, @@ -223,6 +226,16 @@ TREATMENT_END_FLUID_BOLUS_STATE = 2, }; +enum Treatment_Pause_Sequential_Alarms { + SEQ_ALARM_NO_ALARM = 0, + SEQ_ALARM_TRIGGER_RPLC_ACID = 1, + SEQ_ALARM_TRIGGER_RPLC_BICARB = 2, + SEQ_ALARM_PROCESS_DRAIN_SCREEN = 3, + SEQ_ALARM_DRY_BICARB_CARTRIDGE = 4, + SEQ_ALARM_PROPORTIONING_IN_PROG = 5, + SEQ_ALARM_LOW_VENOUS = 6, +}; + // Pressure limits enum Pressure_Limits_States { PRESSURE_LIMITS_STATE_OFF = 0, @@ -266,12 +279,15 @@ }; enum Alarm_List { - ALARM_ID_NO_ALARM = 0, - ALARM_ID_TD_VENOUS_PRESSURE_LOW = 47, - ALARM_ID_TD_REPLACE_ACID_JUG = 88, - ALARM_ID_TD_TREATMENT_STOPPED_BY_USER = 96, - ALARM_ID_TD_RECIRC_TIMEOUT_WARNING = 199, - ALARM_ID_TD_RECIRC_TIMEOUT = 200, + ALARM_ID_NO_ALARM = 0, + ALARM_ID_TD_VENOUS_PRESSURE_LOW = 47, + ALARM_ID_TD_TREATMENT_STOPPED_BY_USER = 96, + ALARM_ID_TD_RECIRC_TIMEOUT_WARNING = 199, + ALARM_ID_TD_RECIRC_TIMEOUT = 200, + ALARM_ID_DD_BICARBONATE_CARTRIDGE_LOW_LEVEL = 244, + ALARM_ID_DD_REPLACE_BICARB_CARTRIDGE = 248, + ALARM_ID_DD_REPLACE_ACID_CONCENTRATE = 249, + ALARM_ID_TD_DIALYSATE_PROPORTIONING_IN_PROGRESS = 250, }; enum Generic_Confirm_Id { Index: sources/drydemo/StateController.cpp =================================================================== diff -u -r3a1edf1c2dc6f68d32af3adeeee4a59bbac739c5 -r7094c1e2387d63fc7fb9d6d9a09ea0aee3c71420 --- sources/drydemo/StateController.cpp (.../StateController.cpp) (revision 3a1edf1c2dc6f68d32af3adeeee4a59bbac739c5) +++ sources/drydemo/StateController.cpp (.../StateController.cpp) (revision 7094c1e2387d63fc7fb9d6d9a09ea0aee3c71420) @@ -39,12 +39,14 @@ _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 , 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_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}; + _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_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 }; } void StateController::quit() @@ -92,8 +94,9 @@ //// and processed case ID_UI_ADJUST_DISPOSABLES_CONFIRM_RQST: case ID_UI_ADJUST_START_TREATMENT_RQST: + case ID_UI_PRESSURE_LIMIT_WIDEN_RQST: _treatmentRcvdMessages[receivedMsgID] = 0; - break; + break; case ID_NONE: case ID_TD_OP_MODE_DATA: @@ -110,7 +113,6 @@ case ID_TD_FLUID_BOLUS_RESP: case ID_TD_FLUID_BOLUS_DATA: case ID_TD_PRESSURE_DATA: - case ID_UI_PRESSURE_LIMIT_WIDEN_RQST: case ID_TD_PRESSURE_LIMIT_WIDEN_RESP: case ID_TD_TREATMENT_SET_POINTS_CHANGE_RESP: case ID_DD_GEN_DIALYSATE_MODE_DATA: @@ -295,9 +297,12 @@ handleBackToStandbyEvent(status); handleBloodPrimePauseResume(resume); handleSetPointBloodFlowChange(currBloodFlowMLPM, hasFlowChngeRequested); + // Pressure methods handlePressureLimitState(); handleTDPressureBroadcastData(BC_DELAYED); handleDeterminePressureLimits(); + handleWidenPressureLimitsMessage(); + // Pressure methods handleFluidBolusRequestMessage(); if (_treatmentSubStates.fluidBolusState == FLUID_BOLUS_SALINE_IN_PROGRESS_STATE){ handleFluidBolusFluidDelivery(currBloodFlowMLPM); @@ -380,10 +385,12 @@ handleDDConductivityBroadcastData(BC_DELAYED); handleSetPointDialysateFlowChange(); handleSetPointDialysateTemperatureChange(); + // Pressure functions handlePressureLimitState(); handleTDPressureBroadcastData(BC_DELAYED); handleDeterminePressureLimits(); - // UF functions funcntios + handleWidenPressureLimitsMessage(); + // UF functions functions handleUltrafiltrationPauseResume(); handleUltrafiltrationVolumeChangeValidation(); handleUltrafiltrationVolumeChangeConfirm(); @@ -393,8 +400,8 @@ handleTreatmentTimeChangeValidation(); handleTreatmentTimeChangeConfirm(); // Alarm methods + handleChemsReplacementAlarmsSequence(status); handleTriggeredAlarmsToTxPause(status); - handleTriggerLowVenousAlarmInTx(); // Treatment complete condition if ((_treatmentStatus.treatmentElapsedTimeMS / MILLISECONDS_PER_SECOND) > (_treatmentParams.treatmentDurationMin * SECONDS_PER_MINUTE)) { @@ -442,10 +449,16 @@ status = STATE_ON_ACTION; handleBackToStandbyEvent(status); handleAlarmUserAction(status, true); + // NOTE: This handleAlarmSequenceInTxPause method must be after handleAlarmUserAction to make sure + // the sequential alarms are handled properly and they are not transitioning back to treatment after + // clearing any alarm + handleChemsReplacementAlarmsSequence(status); handleTDOpModeTransitionBroadcastData(MODE_TREA, 0, BC_DELAYED); + // Pressure functions handlePressureLimitState(); handleTDPressureBroadcastData(BC_DELAYED); handleDeterminePressureLimits(); + handleWidenPressureLimitsMessage(); }; auto onExit = [=](){ @@ -492,6 +505,7 @@ handlePressureLimitState(); handleTDPressureBroadcastData(BC_DELAYED); handleDeterminePressureLimits(); + handleWidenPressureLimitsMessage(); handleUIConfirmMessage(GENERIC_CONFIRM_ID_TREATMENT_END, status); if (_treatmentStatus.hasRecircBeenRequested) { _treatmentStatus.stateTransitionEvent = "T_RB_2_RC"; Index: sources/drydemo/StateController.h =================================================================== diff -u -r3a1edf1c2dc6f68d32af3adeeee4a59bbac739c5 -r7094c1e2387d63fc7fb9d6d9a09ea0aee3c71420 --- sources/drydemo/StateController.h (.../StateController.h) (revision 3a1edf1c2dc6f68d32af3adeeee4a59bbac739c5) +++ sources/drydemo/StateController.h (.../StateController.h) (revision 7094c1e2387d63fc7fb9d6d9a09ea0aee3c71420) @@ -55,7 +55,8 @@ quint32 validateHepDurMin; // Alarm variables Alarm_List activeTopAlarm; - quint32 lowVenousAlarmTimeoutCtr; + quint32 triggerAlarmTimeoutCtr; + Treatment_Pause_Sequential_Alarms txPauseSeqAlarmState; // Rinseback variables quint32 rinsebackFlowMLPM; float rinsebackAccumVolML; @@ -184,7 +185,7 @@ void triggerAnAlarm(Alarm_List alarmID); void handleAlarmUserAction(State_Status &status, bool isFromTxPause = false); void handleTriggeredAlarmsToTxPause(State_Status &status); - void handleTriggerLowVenousAlarmInTx(); + void handleChemsReplacementAlarmsSequence(State_Status &status); // Standby methods void handleInitiateTreatmentRequestMessage(State_Status &status); Index: sources/drydemo/StateControllerStandby.cpp =================================================================== diff -u -r3a1edf1c2dc6f68d32af3adeeee4a59bbac739c5 -r7094c1e2387d63fc7fb9d6d9a09ea0aee3c71420 --- sources/drydemo/StateControllerStandby.cpp (.../StateControllerStandby.cpp) (revision 3a1edf1c2dc6f68d32af3adeeee4a59bbac739c5) +++ sources/drydemo/StateControllerStandby.cpp (.../StateControllerStandby.cpp) (revision 7094c1e2387d63fc7fb9d6d9a09ea0aee3c71420) @@ -97,8 +97,9 @@ _treatmentSubStates.rinsebackState = RINSEBACK_STOP_INIT_STATE; _treatmentStatus.ufVolDeliveredL = 0.0; _treatmentStatus.hasRecircBeenRequested = false; - _treatmentStatus.lowVenousAlarmTimeoutCtr = 0; + _treatmentStatus.triggerAlarmTimeoutCtr = 0; _treatmentStatus.isBloodPumpRunning = false; + _treatmentStatus.txPauseSeqAlarmState = SEQ_ALARM_NO_ALARM; // Initialize pressure vars _pressureVars.presLimitState = PRESSURE_LIMITS_STATE_OFF; _pressureVars.presStabilizeTimePeriod = USE_NORMAL_STABILIZATION_PERIOD; @@ -204,13 +205,73 @@ } } -void StateController::handleTriggerLowVenousAlarmInTx() +void StateController::handleChemsReplacementAlarmsSequence(State_Status &status) { - _treatmentStatus.lowVenousAlarmTimeoutCtr++; + quint32 elapsedTimeMS; - if ((_treatmentStatus.lowVenousAlarmTimeoutCtr * QOBJECT_TIMER_TIMEOUT_MS) == TRIG_LOW_VEN_ALARM_TIMEOUT_MS) - { - triggerAnAlarm(ALARM_ID_TD_VENOUS_PRESSURE_LOW); + switch (_treatmentStatus.txPauseSeqAlarmState) { + case SEQ_ALARM_TRIGGER_RPLC_ACID: + if (_treatmentStatus.activeTopAlarm != ALARM_ID_NO_ALARM) { return; } + triggerAnAlarm(ALARM_ID_DD_REPLACE_ACID_CONCENTRATE); + _treatmentStatus.txPauseSeqAlarmState = SEQ_ALARM_TRIGGER_RPLC_BICARB; + break; + + case SEQ_ALARM_TRIGGER_RPLC_BICARB: + if (_treatmentStatus.activeTopAlarm == ALARM_ID_DD_REPLACE_ACID_CONCENTRATE) { return; } + triggerAnAlarm(ALARM_ID_DD_BICARBONATE_CARTRIDGE_LOW_LEVEL); + _treatmentStatus.txPauseSeqAlarmState = SEQ_ALARM_PROCESS_DRAIN_SCREEN; + // Stay in treatment pause since there is a sequence of alarms to trigger next + status = STATE_ON_ACTION; + break; + + case SEQ_ALARM_PROCESS_DRAIN_SCREEN: + // TODO wait for the drain screen message. IMPLEMENT + triggerAnAlarm(ALARM_ID_DD_REPLACE_BICARB_CARTRIDGE); + _treatmentStatus.txPauseSeqAlarmState = SEQ_ALARM_DRY_BICARB_CARTRIDGE; + // Stay in treatment pause since there is a sequence of alarms to trigger next + status = STATE_ON_ACTION; + break; + + case SEQ_ALARM_DRY_BICARB_CARTRIDGE: + if (_treatmentStatus.activeTopAlarm == ALARM_ID_DD_REPLACE_BICARB_CARTRIDGE) { return; } + triggerAnAlarm(ALARM_ID_TD_DIALYSATE_PROPORTIONING_IN_PROGRESS); + _treatmentStatus.triggerAlarmTimeoutCtr = _elapsedTimeCtr; + _treatmentStatus.txPauseSeqAlarmState = SEQ_ALARM_PROPORTIONING_IN_PROG; + // Stay in treatment pause since there is a sequence of alarms to trigger next + status = STATE_ON_ACTION; + break; + + case SEQ_ALARM_PROPORTIONING_IN_PROG: + // Wait for a couple of seconds to simulate like the conductivity is getting in range + elapsedTimeMS = (_elapsedTimeCtr - _treatmentStatus.triggerAlarmTimeoutCtr) * QOBJECT_TIMER_TIMEOUT_MS; + if (elapsedTimeMS == CLEAR_DIAL_PROPOR_TIMEOUT_MS) { + // This alarm is cleared automatically + triggerAnAlarm(ALARM_ID_NO_ALARM); + _treatmentStatus.triggerAlarmTimeoutCtr = _elapsedTimeCtr; + _treatmentStatus.txPauseSeqAlarmState = SEQ_ALARM_LOW_VENOUS; + _treatmentSubStates.dialysisSubState = DIALYSIS_UF_STATE; + _treatmentSubStates.txState = TREAT_DIALYSIS_STATE; + _treatmentStatus.stateTransitionEvent = "T_TP_2_Tx"; + // Done with the acid/bicarb replacement alarms exit treatment pause + status = STATE_ON_EXIT; + } + break; + + case SEQ_ALARM_LOW_VENOUS: + elapsedTimeMS = (_elapsedTimeCtr - _treatmentStatus.triggerAlarmTimeoutCtr) * QOBJECT_TIMER_TIMEOUT_MS; + if (elapsedTimeMS == TRIG_LOW_VEN_ALARM_TIMEOUT_MS) { + triggerAnAlarm(ALARM_ID_TD_VENOUS_PRESSURE_LOW); + _treatmentStatus.triggerAlarmTimeoutCtr = _elapsedTimeCtr; + _treatmentStatus.txPauseSeqAlarmState = SEQ_ALARM_NO_ALARM; + // Done with the sequence of acid/bicarb alarms. Trigger low venous and do not change the state because + // another method in treatment will transition to treatment pause. This alarm triggeres in treament, not treatment pause + } + break; + + case SEQ_ALARM_NO_ALARM: + default: + // Do nothing + break; } } @@ -227,7 +288,7 @@ QString activeState = activeStates[0]; _treatmentStatus.stateTransitionEvent = (activeState == "Treatment_Recirculate" ? "T_RC_2_TE" : "T_RB_2_TE"); status = STATE_ON_EXIT; - qDebug() << "Event" << _treatmentStatus.stateTransitionEvent << _dryDemo.activeStateNames(true); + qDebug() << "Event" << _treatmentStatus.stateTransitionEvent << _dryDemo.activeStateNames(true); // TODO remove } handleSendUIConfirmationMessage(confirmID, cmd); _uiConfirmMessages.remove(confirmID); @@ -264,10 +325,7 @@ resp.append(confirmID); resp.append(confirmCmd); resp.append(rejectReason); - resp.append(0.0); - resp.append(0.0); - resp.append(0.0); - resp.append(0.0); + resp.append(0.0); resp.append(0.0); resp.append(0.0); resp.append(0.0); _isSendListReady = false; _sendMessages.append(resp); _isSendListReady = true; Index: sources/drydemo/StateControllerTreatment.cpp =================================================================== diff -u -r6fa9c0ad6983354e16a32086f4cda496bf426219 -r7094c1e2387d63fc7fb9d6d9a09ea0aee3c71420 --- sources/drydemo/StateControllerTreatment.cpp (.../StateControllerTreatment.cpp) (revision 6fa9c0ad6983354e16a32086f4cda496bf426219) +++ sources/drydemo/StateControllerTreatment.cpp (.../StateControllerTreatment.cpp) (revision 7094c1e2387d63fc7fb9d6d9a09ea0aee3c71420) @@ -185,8 +185,8 @@ _treatmentParams.dialysateTemperatureC = f32Var.value; resp.append(0); - GetValue(payload.toByteArray(), index, u32Var); - if (_treatmentParams.acidConcentrate != u32Var.value) { triggerAnAlarm(ALARM_ID_TD_REPLACE_ACID_JUG); } + GetValue(payload.toByteArray(), index, u32Var); // If the acid is different, set the sequence to trigger the acid + if (_treatmentParams.acidConcentrate != u32Var.value) { _treatmentStatus.txPauseSeqAlarmState = SEQ_ALARM_TRIGGER_RPLC_ACID; } _treatmentParams.acidConcentrate = u32Var.value; resp.append(0); @@ -511,8 +511,8 @@ break; } - qDebug() << "Pres Steat" << _pressureVars.presLimitState << _treatmentStatus.isBloodPumpRunning << _pressureVars.presStabilizeTimeoutMS - << _pressureVars.presStabilizationTimerCtr * QOBJECT_TIMER_TIMEOUT_MS << _treatmentSubStates.txState ; + //qDebug() << "Pres Steat" << _pressureVars.presLimitState << _treatmentStatus.isBloodPumpRunning << _pressureVars.presStabilizeTimeoutMS + // << _pressureVars.presStabilizationTimerCtr * QOBJECT_TIMER_TIMEOUT_MS << _treatmentSubStates.txState ; } void StateController::handleUpdatePressureLimitWindows() @@ -552,27 +552,27 @@ _pressureVars.arterialMaxLimitMMHG = _pressureVars.arterialStableMMHG + artOffsetMMHG; _pressureVars.arterialMaxLimitMMHG = qMin(_pressureVars.arterialMaxLimitMMHG, static_cast(MAX_ART_PRES_LIMIT_MMHG)); - _pressureVars.venousMinLimitMMHG = _pressureVars.venousStableMMHG - venMinOffsetMMHG; - _pressureVars.venousMinLimitMMHG = qMax(_pressureVars.venousMinLimitMMHG, static_cast(MIN_VEN_PRES_LIMIT_MMHG)); + _pressureVars.venousMinLimitMMHG = _pressureVars.venousStableMMHG - venMinOffsetMMHG; + _pressureVars.venousMinLimitMMHG = qMax(_pressureVars.venousMinLimitMMHG, static_cast(MIN_VEN_PRES_LIMIT_MMHG)); - _pressureVars.venousMaxLimitMMHG = _pressureVars.venousStableMMHG + venMaxOffsetMMHG; - _pressureVars.venousMaxLimitMMHG = qMin(_pressureVars.venousMaxLimitMMHG, static_cast(MAX_VEN_PRES_LIMIT_MMHG)); + _pressureVars.venousMaxLimitMMHG = _pressureVars.venousStableMMHG + venMaxOffsetMMHG; + _pressureVars.venousMaxLimitMMHG = qMin(_pressureVars.venousMaxLimitMMHG, static_cast(MAX_VEN_PRES_LIMIT_MMHG)); - _pressureVars.tmpMinLimitMMHG = _pressureVars.tmpStableMMHG - tmpOffsetMMHG; - _pressureVars.tmpMinLimitMMHG = qMax(_pressureVars.tmpMinLimitMMHG, static_cast(MIN_TMP_PRES_LIMIT_MMHG)); + _pressureVars.tmpMinLimitMMHG = _pressureVars.tmpStableMMHG - tmpOffsetMMHG; + _pressureVars.tmpMinLimitMMHG = qMax(_pressureVars.tmpMinLimitMMHG, static_cast(MIN_TMP_PRES_LIMIT_MMHG)); - _pressureVars.tmpMaxLimitMMHG = _pressureVars.tmpStableMMHG + tmpOffsetMMHG; - _pressureVars.tmpMaxLimitMMHG = qMin(_pressureVars.tmpMaxLimitMMHG, static_cast(MAX_TMP_PRES_LIMIT_MMHG)); + _pressureVars.tmpMaxLimitMMHG = _pressureVars.tmpStableMMHG + tmpOffsetMMHG; + _pressureVars.tmpMaxLimitMMHG = qMin(_pressureVars.tmpMaxLimitMMHG, static_cast(MAX_TMP_PRES_LIMIT_MMHG)); } else { - _pressureVars.arterialMinLimitMMHG = MIN_ART_PRES_LIMIT_MMHG; - _pressureVars.arterialMaxLimitMMHG = MAX_ART_PRES_LIMIT_MMHG; + _pressureVars.arterialMinLimitMMHG = MIN_ART_PRES_LIMIT_MMHG; + _pressureVars.arterialMaxLimitMMHG = MAX_ART_PRES_LIMIT_MMHG; - _pressureVars.venousMinLimitMMHG = MIN_VEN_PRES_LIMIT_MMHG; - _pressureVars.venousMaxLimitMMHG = MAX_VEN_PRES_LIMIT_MMHG; + _pressureVars.venousMinLimitMMHG = MIN_VEN_PRES_LIMIT_MMHG; + _pressureVars.venousMaxLimitMMHG = MAX_VEN_PRES_LIMIT_MMHG; - _pressureVars.tmpMinLimitMMHG = MIN_TMP_PRES_LIMIT_MMHG; - _pressureVars.tmpMaxLimitMMHG = MAX_TMP_PRES_LIMIT_MMHG; + _pressureVars.tmpMinLimitMMHG = MIN_TMP_PRES_LIMIT_MMHG; + _pressureVars.tmpMaxLimitMMHG = MAX_TMP_PRES_LIMIT_MMHG; } } @@ -589,19 +589,18 @@ } } else if (_pressureVars.presLimitState == PRESSURE_LIMITS_STATE_STABLE) { - _pressureVars.presStabilizeTimePeriod = period; + _pressureVars.presStabilizeTimePeriod = period; _pressureVars.presLimitState = PRESSURE_LIMITS_STATE_STABILIZATION; _pressureVars.presStabilizationTimerCtr = 0; } } void StateController::handleWidenPressureLimitsMessage() { - if (! _treatmentRcvdMessages[ID_UI_PRESSURE_LIMIT_WIDEN_RQST].isNull()) { - _treatmentRcvdMessages[ID_UI_PRESSURE_LIMIT_WIDEN_RQST].clear(); - // TODo address the increase per request - handleUIResponseMessage(ID_TD_PRESSURE_LIMIT_WIDEN_RESP, ACCEPT_VALUE); - } + if (_treatmentRcvdMessages[ID_UI_PRESSURE_LIMIT_WIDEN_RQST].isNull()) { return; } + handleSignalInitiatePressureStabilization(USE_NORMAL_STABILIZATION_PERIOD); + _treatmentRcvdMessages[ID_UI_PRESSURE_LIMIT_WIDEN_RQST].clear(); + handleUIResponseMessage(ID_TD_PRESSURE_LIMIT_WIDEN_RESP, ACCEPT_VALUE); }