Index: drydemo.pro.user =================================================================== diff -u -r0deaf8f3e192a0ecde953ab65efc1ded1c06269b -r521f29cb7dcd0de352dd744292488380e07cb9e3 --- drydemo.pro.user (.../drydemo.pro.user) (revision 0deaf8f3e192a0ecde953ab65efc1ded1c06269b) +++ drydemo.pro.user (.../drydemo.pro.user) (revision 521f29cb7dcd0de352dd744292488380e07cb9e3) @@ -1,6 +1,6 @@ - + EnvironmentId @@ -465,47 +465,47 @@ RemoteLinux.DirectUploadStep /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali + /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Release/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali + /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Release/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali - /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Release/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali - /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Release/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali + /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Release/denali + /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Release/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali - /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Release/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Debug/denali - /home/denali/Projects/tmp/build/build-denali-Qt_5_15_10_iMX8-Release/denali - 192.168.137.247 - 192.168.137.202 - 192.168.137.125 - 192.168.137.36 + 192.168.10.138 + 192.168.10.228 + 192.168.10.228 + 192.168.10.159 + 192.168.137.210 192.168.137.170 - 192.168.137.26 - 192.168.137.24 - 192.168.40.23 - 192.168.137.3 192.168.10.186 - 192.168.137.30 + 192.168.10.167 192.168.137.25 - 192.168.137.170 + 192.168.137.30 192.168.10.186 - 192.168.10.167 - 192.168.10.159 - 192.168.137.210 - 192.168.10.138 - 192.168.10.228 - 192.168.10.228 + 192.168.137.24 + 192.168.40.23 + 192.168.137.170 + 192.168.137.26 + 192.168.137.3 + 192.168.137.247 + 192.168.137.125 + 192.168.137.36 + 192.168.137.202 /home/root @@ -531,9 +531,12 @@ /opt/b2qt/3.1.18/sysroots + /opt/b2qt/3.1.18/sysroots/x86_64-pokysdk-linux + /opt/b2qt/3.1.18/sysroots/x86_64-pokysdk-linux /opt/b2qt/3.1.18/sysroots /opt/b2qt/3.1.18/sysroots /opt/b2qt/3.1.18/sysroots + /opt/b2qt/3.1.18/sysroots/x86_64-pokysdk-linux /opt/b2qt/3.1.18/sysroots /opt/b2qt/3.1.18/sysroots /opt/b2qt/3.1.18/sysroots @@ -543,57 +546,54 @@ /opt/b2qt/3.1.18/sysroots /opt/b2qt/3.1.18/sysroots /opt/b2qt/3.1.18/sysroots - /opt/b2qt/3.1.18/sysroots/x86_64-pokysdk-linux /opt/b2qt/3.1.18/sysroots /opt/b2qt/3.1.18/sysroots /opt/b2qt/3.1.18/sysroots /opt/b2qt/3.1.18/sysroots - /opt/b2qt/3.1.18/sysroots/x86_64-pokysdk-linux - /opt/b2qt/3.1.18/sysroots/x86_64-pokysdk-linux - 2023-02-02T02:26:33.738 - 2023-02-02T01:46:50.167 - 2023-02-02T02:07:25.922 - 2023-02-01T03:23:15.710 - 2023-01-27T09:45:11.898 - 2023-02-01T05:00:56.449 - 2023-02-02T02:05:29.947 - 2023-01-24T17:29:54.849 - 2023-02-02T02:40:56.627 - 2023-01-18T20:13:36.296 - 2023-02-02T02:30:48.337 - 2023-02-02T02:13:54.596 + 2023-02-02T09:06:00.862 + 2023-01-17T18:06:25.579 + 2023-01-17T18:18:03.749 + 2023-01-24T18:19:13.179 + 2023-02-02T01:52:20.307 2023-01-27T10:15:15.423 2023-01-18T17:47:08.797 2023-02-02T19:40:15.813 - 2023-01-24T18:19:13.179 - 2023-02-02T01:52:20.307 - 2023-02-02T09:06:00.862 - 2023-01-17T18:18:03.749 - 2023-01-17T18:06:25.579 + 2023-02-02T02:13:54.596 + 2023-02-02T02:30:48.337 + 2023-01-18T20:13:36.296 + 2023-02-02T02:05:29.947 + 2023-01-24T17:29:54.849 + 2023-01-27T09:45:11.898 + 2023-02-01T05:00:56.449 + 2023-02-02T02:40:56.627 + 2023-02-02T02:26:33.738 + 2023-02-02T02:07:25.922 + 2023-02-01T03:23:15.710 + 2023-02-02T01:46:50.167 - 2023-02-02T02:26:46.000 - 2023-02-02T01:47:02.000 - 2023-02-02T02:07:21.000 - 2023-02-01T03:23:28.000 - 2023-01-27T09:44:58.000 - 2023-02-01T05:00:51.000 - 2023-02-02T02:05:42.000 - 2023-01-24T17:30:03.000 - 2023-02-02T02:41:10.000 - 2023-01-18T20:13:33.000 - 2023-02-02T02:31:01.000 - 2023-02-02T02:14:08.000 + 2023-02-02T09:05:22.000 + 2023-01-17T18:05:42.000 + 2023-01-17T18:17:25.000 + 2023-01-24T18:18:58.000 + 2023-02-02T01:52:16.000 2023-01-27T10:15:08.000 2023-01-18T17:47:04.000 2023-02-02T19:39:36.000 - 2023-01-24T18:18:58.000 - 2023-02-02T01:52:16.000 - 2023-02-02T09:05:22.000 - 2023-01-17T18:17:25.000 - 2023-01-17T18:05:42.000 + 2023-02-02T02:14:08.000 + 2023-02-02T02:31:01.000 + 2023-01-18T20:13:33.000 + 2023-02-02T02:05:42.000 + 2023-01-24T17:30:03.000 + 2023-01-27T09:44:58.000 + 2023-02-01T05:00:51.000 + 2023-02-02T02:41:10.000 + 2023-02-02T02:26:46.000 + 2023-02-02T02:07:21.000 + 2023-02-01T03:23:28.000 + 2023-02-02T01:47:02.000 2 Index: sources/MessageGlobals.h =================================================================== diff -u -r0deaf8f3e192a0ecde953ab65efc1ded1c06269b -r521f29cb7dcd0de352dd744292488380e07cb9e3 --- sources/MessageGlobals.h (.../MessageGlobals.h) (revision 0deaf8f3e192a0ecde953ab65efc1ded1c06269b) +++ sources/MessageGlobals.h (.../MessageGlobals.h) (revision 521f29cb7dcd0de352dd744292488380e07cb9e3) @@ -151,6 +151,9 @@ ID_UI_UF_PAUSE_RESUME_RQST = 0x4700, ID_TD_UF_PAUSE_RESUME_RESP = 0x4800, ID_TD_TREATMENT_SET_POINTS = 0x4F00, + ID_UI_PATIENT_DISCONNECT_CONFIRM_RQST = 0x5500, + ID_TD_PATIENT_DISCONNECT_CONFIRM_RESP = 0x5600, + ID_TD_TREATMENT_PAUSED_TIMER_DATA = 0x5B00, ID_UI_FLUID_BOLUS_RQST = 0x5F00, ID_TD_FLUID_BOLUS_RESP = 0x6000, ID_UI_BLOOD_PRESSURE_RQST = 0x6300, @@ -181,6 +184,8 @@ ID_TD_RINSEBACK_CMD_RESP = 0x9100, ID_UI_ADJUST_DISPOSABLES_CONFIRM_RQST = 0x9200, ID_TD_ADJUST_DISPOSSABLES_CONFIRM_RESP = 0x9300, + ID_UI_ADJUST_DISPOSABLES_REMOVAL_CONFIRM_RQST = 0x9400, + ID_TD_ADJUST_DISPOSABLES_REMOVAL_CONFIRM_RESP = 0x9500, ID_TD_BLOOD_PRIME_PROGRESS_DATA = 0x9700, ID_UI_BLOOD_PRIME_CMD_RQST = 0x9800, ID_TD_BLOOD_PRIME_CMD_RESP = 0x9900, Index: sources/drydemo/DryDemoDefines.h =================================================================== diff -u -r0deaf8f3e192a0ecde953ab65efc1ded1c06269b -r521f29cb7dcd0de352dd744292488380e07cb9e3 --- sources/drydemo/DryDemoDefines.h (.../DryDemoDefines.h) (revision 0deaf8f3e192a0ecde953ab65efc1ded1c06269b) +++ sources/drydemo/DryDemoDefines.h (.../DryDemoDefines.h) (revision 521f29cb7dcd0de352dd744292488380e07cb9e3) @@ -143,7 +143,8 @@ #define ALARM_TX_MOD_CHNG_PROPERTIES 2 #define ALARM_LOW_BICARB_PROPERTIES 112 #define ALARM_TD_END_OF_TX_PROPERTIES 248 -#define ALARM_TD_END_OF_TX_TIMEOUT_PROPERTIES 88 +#define ALARM_TD_END_OF_TX_TIMEOUT_PROPERTIES 108 +#define ALARM_ID_TD_HDF_SUBMODE_CHGE_PROPERTIES 116 // Dry bicart defines #define DRY_BICART_DRIN_IN_PROGRESS 1 @@ -160,10 +161,15 @@ #define HDF_MAX_RATE_MLPM 200.0 #define HDF_CONTROL_INT_CTR (4 * MILLISECONDS_PER_SECOND) / QOBJECT_TIMER_TIMEOUT_MS #define HDF_START_RATE_MLPM 50.0 +#define HDF_ADJ_MSG_DILUTION_INDEX 0 +#define HDF_ADJ_MSG_FLUID_VOL_INDEX 4 // Treatment end defines -#define TREATMENT_END_TIMEOUT_ALARM_MS 10000 //(10 * SECONDS_PER_MINUTE * MILLISECONDS_PER_SECOND) +#define TREATMENT_END_TIMEOUT_ALARM_MS (10 * SECONDS_PER_MINUTE * MILLISECONDS_PER_SECOND) +// Treatment pause defines +#define MAX_TIME_BLOOD_SITTING (5 * SECONDS_PER_MINUTE * MILLISECONDS_PER_SECOND) / QOBJECT_TIMER_TIMEOUT_MS + enum User_Command_ID { CMD_NONE = -1, CMD_STAND_BY = 0, @@ -260,6 +266,14 @@ TREATMENT_END_FLUID_BOLUS_STATE = 2, }; +enum Post_Treatment_States { + TD_POST_TREATMENT_PATIENT_DISCONNECTION_STATE = 0, + TD_POST_TREATMENT_AUTO_EJECT_STATE = 1, + TD_POST_TREATMENT_DISPOSABLE_REMOVAL_STATE = 2, + TD_POST_TREATMENT_VERIFY_STATE = 3, + TD_POST_TREATMENT_DISINFECTION_STATE = 4, +}; + enum Treatment_Pause_Sequential_Alarms { SEQ_ALARM_NO_ALARM = 0, SEQ_ALARM_TRIGGER_RPLC_ACID = 1, @@ -348,6 +362,7 @@ ALARM_ID_TD_RECIRC_TIMEOUT_WARNING = 199, ALARM_ID_TD_RECIRC_TIMEOUT = 200, ALARM_ID_DD_BICARBONATE_CARTRIDGE_LOW_LEVEL = 244, + ALARM_ID_TD_HDF_SUBMODE_CHANGE = 246, ALARM_ID_TD_TREATMENT_MODALITY_CHANGE = 247, ALARM_ID_DD_REPLACE_BICARB_CARTRIDGE = 248, ALARM_ID_DD_REPLACE_ACID_CONCENTRATE = 249, 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; +} + + Index: sources/drydemo/StateController.h =================================================================== diff -u -r0deaf8f3e192a0ecde953ab65efc1ded1c06269b -r521f29cb7dcd0de352dd744292488380e07cb9e3 --- sources/drydemo/StateController.h (.../StateController.h) (revision 0deaf8f3e192a0ecde953ab65efc1ded1c06269b) +++ sources/drydemo/StateController.h (.../StateController.h) (revision 521f29cb7dcd0de352dd744292488380e07cb9e3) @@ -58,6 +58,7 @@ quint16 activeAlarmProperty; quint32 triggerAlarmTimeoutCtr; Treatment_Pause_Sequential_Alarms txPauseSeqAlarmState; + quint32 txPauseBloodSittingCounter; // Rinseback variables quint32 rinsebackFlowMLPM; float rinsebackAccumVolML; @@ -140,9 +141,11 @@ Blood_Prime_States bloodPrimeState; Fluid_Bolus_States fluidBolusState; Dialysis_States dialysisSubState; + Dialysis_States prevDialysisSubState; Rinseback_States rinsebackState; Recirculate_States recircState; Treatment_End_States txEndState; + Post_Treatment_States postTxState; }; struct Treatment_Params { @@ -220,6 +223,7 @@ void handleBackToStandbyEvent(State_Status &status); quint32 extractU32DataFromReceivedMessage(const Can::Message_ID_Enum msgID, qint32 index); float extractF32DataFromReceivedMessage(const Can::Message_ID_Enum msgID, qint32 index); + QString getActiveStateName(); // Alarm helper methods in standby.cpp void triggerAnAlarm(const Alarm_List alarmID, const qint16 alarmProperty = ALARM_USE_DEFAULT_PROPERTIES); @@ -267,6 +271,7 @@ void handleUltrafiltrationVolumeChangeConfirm(); void handleTreatmentTimeChangeValidation(); void handleTreatmentTimeChangeConfirm(); + void handleTreatmentPauseBroadcastData(const Broadcast_Type BCType); // Treatment pressure methods void handlePressureLimitState(); void handleUpdatePressureLimitWindows(); @@ -306,4 +311,8 @@ // Treatment end methods void handleTreatmentEndRequestMessage(State_Status &status); void handleTreatmentEndTimeout(); + + // Post treatment methods + void handlePatientDisconnectRequestMessage(); + void handleRemoveDisposablesRequestMessage(); }; Index: sources/drydemo/StateControllerHDFTreatment.cpp =================================================================== diff -u -r6c0428ed8c6430924d54d5a42c45c8ec0c16c7c2 -r521f29cb7dcd0de352dd744292488380e07cb9e3 --- sources/drydemo/StateControllerHDFTreatment.cpp (.../StateControllerHDFTreatment.cpp) (revision 6c0428ed8c6430924d54d5a42c45c8ec0c16c7c2) +++ sources/drydemo/StateControllerHDFTreatment.cpp (.../StateControllerHDFTreatment.cpp) (revision 521f29cb7dcd0de352dd744292488380e07cb9e3) @@ -87,13 +87,11 @@ msg.append(autoSubState); msg.append(_treatmentHDFVars.hdfManualRateMLPM); msg.append(5.2); - msg.append(_treatmentHDFVars.hdfCurrentRateMLPM); msg.append(5.2); msg.append(_treatmentParams.hdfSubstitutionFluidVolumeL); msg.append(_treatmentHDFVars.hdfCurrentVolumeML / MILLILITERS_PER_LITER); msg.append(static_cast(_treatmentHDFVars.hdfIsRequested)); - //qDebug() << "B" << msg; _isBroadcastListReady = false; _broadcastMessages.append(msg); _isBroadcastListReady = true; @@ -103,12 +101,18 @@ { if (_treatmentRcvdMessages[ID_UI_HDF_ADJUSTMENT_RQST].isNull()) { return; } QVariantList reason; - quint32 acceptReject = REJECT_VALUE; + quint32 acceptReject = REJECT_VALUE; + quint32 newHDFDilution = 0; - _treatmentParams.hdfDilution = extractU32DataFromReceivedMessage(ID_UI_HDF_ADJUSTMENT_RQST, 0); - _treatmentParams.hdfSubstitutionFluidVolumeL = extractF32DataFromReceivedMessage(ID_UI_HDF_ADJUSTMENT_RQST, 4); + newHDFDilution = extractU32DataFromReceivedMessage(ID_UI_HDF_ADJUSTMENT_RQST, HDF_ADJ_MSG_DILUTION_INDEX); + _treatmentParams.hdfSubstitutionFluidVolumeL = extractF32DataFromReceivedMessage(ID_UI_HDF_ADJUSTMENT_RQST, HDF_ADJ_MSG_FLUID_VOL_INDEX); - acceptReject = ACCEPT_VALUE; + // Trigger the submode change if the dilution mode has changed + if (_treatmentParams.hdfDilution != newHDFDilution) { triggerAnAlarm(ALARM_ID_TD_HDF_SUBMODE_CHANGE); } + + _treatmentParams.hdfDilution = newHDFDilution; + acceptReject = ACCEPT_VALUE; + reason.append(REQUEST_REJECT_REASON_NONE); reason.append(REQUEST_REJECT_REASON_NONE); Index: sources/drydemo/StateControllerPostTreatment.cpp =================================================================== diff -u -r0deaf8f3e192a0ecde953ab65efc1ded1c06269b -r521f29cb7dcd0de352dd744292488380e07cb9e3 --- sources/drydemo/StateControllerPostTreatment.cpp (.../StateControllerPostTreatment.cpp) (revision 0deaf8f3e192a0ecde953ab65efc1ded1c06269b) +++ sources/drydemo/StateControllerPostTreatment.cpp (.../StateControllerPostTreatment.cpp) (revision 521f29cb7dcd0de352dd744292488380e07cb9e3) @@ -2,3 +2,65 @@ #include "StateController.h" #include "ApplicationController.h" #include "types.h" + +void StateController::handlePatientDisconnectRequestMessage() +{ + if (_treatmentRcvdMessages[ID_UI_PATIENT_DISCONNECT_CONFIRM_RQST].isNull()) { return; } + _treatmentRcvdMessages[ID_UI_PATIENT_DISCONNECT_CONFIRM_RQST].clear(); + + // TODo check the reject reasons + handleUIResponseMessage(ID_TD_PATIENT_DISCONNECT_CONFIRM_RESP, ACCEPT_VALUE); +} + +void StateController::handleRemoveDisposablesRequestMessage() +{ + if (_treatmentRcvdMessages[ID_UI_ADJUST_DISPOSABLES_REMOVAL_CONFIRM_RQST].isNull()) { return; } + _treatmentRcvdMessages[ID_UI_ADJUST_DISPOSABLES_REMOVAL_CONFIRM_RQST].clear(); + + // TODo check the reject reasons + handleUIResponseMessage(ID_TD_ADJUST_DISPOSABLES_REMOVAL_CONFIRM_RESP, ACCEPT_VALUE); +} + +// TREATMENT PAUSE & POST TREATMENT +void StateController::handleDryBicartActionRequest() +{ + if (_treatmentRcvdMessages[ID_UI_DRY_BICART_DISCONNECT_RQST].isNull()) { return; } + + quint32 dryBicartAction = extractU32DataFromReceivedMessage(ID_UI_DRY_BICART_DISCONNECT_RQST, 0); + _treatmentStatus.bicartAction = static_cast(dryBicartAction); + + switch (_treatmentStatus.bicartAction) { + case DRY_BICART_ACTION_DRAIN: + // If either of drain or depressurization commands were selected, set the progress to 0 as it is a new start + _treatmentStatus.bicartDrainInProgress = DRY_BICART_DRIN_IN_PROGRESS; + _treatmentStatus.bicartProgress = 0; + _treatmentStatus.bicartShowDialog = DRY_BICART_OPEN_SCREEN; + break; + + case DRY_BICART_ACTION_DEPRESSURIZE: + _treatmentStatus.bicartDepresInProgress = DRY_BICART_DEPRES_IN_PROGRESS; + _treatmentStatus.bicartProgress = 0; + _treatmentStatus.bicartShowDialog = DRY_BICART_OPEN_SCREEN; + break; + + case DRY_BICART_ACTION_CANCEL: + // If cancel is selected cancel both (in case cancle was selected) + // Set the progress to 0 + _treatmentStatus.bicartDrainInProgress = DRY_BICART_DRIN_NOT_IN_PROGRESS; + _treatmentStatus.bicartDepresInProgress = DRY_BICART_DEPRES_NOT_IN_PROGRESS; + _treatmentStatus.bicartProgress = 0; + _treatmentStatus.bicartShowDialog = DRY_BICART_OPEN_SCREEN; + break; + + case DRY_BICART_ACTION_DONE: + default: + _treatmentStatus.bicartShowDialog = DRY_BICART_CLOSE_SCREEN; + break; + } + + // Broadcast the results of the action immediately + handleDryBicartBroadcastData(BC_IMMEDIATELY); + + _treatmentRcvdMessages[ID_UI_DRY_BICART_DISCONNECT_RQST].clear(); + handleUIResponseMessage(ID_TD_DRY_BICART_DISCONNECT_RESP, ACCEPT_VALUE); +} Index: sources/drydemo/StateControllerStandby.cpp =================================================================== diff -u -r0deaf8f3e192a0ecde953ab65efc1ded1c06269b -r521f29cb7dcd0de352dd744292488380e07cb9e3 --- sources/drydemo/StateControllerStandby.cpp (.../StateControllerStandby.cpp) (revision 0deaf8f3e192a0ecde953ab65efc1ded1c06269b) +++ sources/drydemo/StateControllerStandby.cpp (.../StateControllerStandby.cpp) (revision 521f29cb7dcd0de352dd744292488380e07cb9e3) @@ -105,6 +105,7 @@ _treatmentStatus.triggerAlarmTimeoutCtr = 0; _treatmentStatus.isBloodPumpRunning = false; _treatmentStatus.txPauseSeqAlarmState = SEQ_ALARM_NO_ALARM; + _treatmentStatus.txPauseBloodSittingCounter = 0; // Initialize alarm varibales to be alarm no alarm _treatmentStatus.activeTopAlarm = ALARM_ID_NO_ALARM; _treatmentStatus.activeAlarmProperty = _alarmTriggerSpecs[ALARM_ID_NO_ALARM][ALARM_TABLE_PROPERTIES_INDEX].toInt(); @@ -138,6 +139,7 @@ _treatmentStatus.bicartDepresInProgress = 0; _treatmentStatus.bicartProgress = 0; _treatmentStatus.bicartTotal = 100; + _treatmentStatus.bicartShowDialog = DRY_BICART_OPEN_SCREEN; // UI confirm _uiConfirmMessages.clear(); @@ -199,15 +201,16 @@ break; case ALARM_USER_ACTION_RINSEBACK: - case ALARM_USER_ACTION_TEMPOARY_BREAK: handleSendUIConfirmationMessage(GENERIC_CONFIRM_ID_RINSEBACK, GENERIC_CONFIRM_CMD_REQUEST_OPEN); - // Set the flag to go to recirculate - if (userAction == ALARM_USER_ACTION_TEMPOARY_BREAK) { _treatmentStatus.hasRecircBeenRequested = true; } break; + case ALARM_USER_ACTION_TEMPOARY_BREAK: + handleSendUIConfirmationMessage(GENERIC_CONFIRM_ID_TEMPORARY_BREAK, GENERIC_CONFIRM_CMD_REQUEST_OPEN); + break; + case ALARM_USER_ACTION_END_TREATMENT: handleSendUIConfirmationMessage(GENERIC_CONFIRM_ID_TREATMENT_END, GENERIC_CONFIRM_CMD_REQUEST_OPEN); - _treatmentStatus.stateTransitionEvent = "T_TP_2_TE"; + _treatmentStatus.stateTransitionEvent = "T_TP_2_RB"; break; default: @@ -344,13 +347,11 @@ switch (confirmID) { case GENERIC_CONFIRM_ID_TREATMENT_END: if (_uiConfirmMessages[confirmID].confirmStatus == CONFIRMATION_REQUEST_STATUS_ACCEPTED) { - 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] : ""); + QString activeState = getActiveStateName(); if (activeState == "Treatment_Recirculate") { _treatmentStatus.stateTransitionEvent = "T_RC_2_Posttx"; } else if (activeState == "Treatment_Rinseback") { _treatmentStatus.stateTransitionEvent = "T_RB_2_Posttx"; } - else if (activeState == "Treatment_End") { _treatmentStatus.stateTransitionEvent = "T_TE_2_RB"; } - else if (activeState == "Treatment_Pause") { _treatmentStatus.stateTransitionEvent = "T_TP_2_RB"; } + else if (activeState == "Treatment_End") { _treatmentStatus.stateTransitionEvent = "T_TE_2_RB"; } + else if (activeState == "Treatment_Pause") { _treatmentStatus.stateTransitionEvent = "T_TP_2_RB"; } _uiConfirmMessages[confirmID].confirmStatus = CONFIRMATION_REQUEST_STATUS_UNUSED; status = STATE_ON_EXIT; qDebug() << "Event" << activeState << _treatmentStatus.stateTransitionEvent << _dryDemo.activeStateNames(true); @@ -360,8 +361,8 @@ break; case GENERIC_CONFIRM_ID_RINSEBACK: + case GENERIC_CONFIRM_ID_TEMPORARY_BREAK: if (_uiConfirmMessages[confirmID].confirmStatus == CONFIRMATION_REQUEST_STATUS_ACCEPTED) { - qDebug() << "Rinse back response" << confirmID << _uiConfirmMessages[confirmID].confirmStatus; handleSendUIConfirmationMessage(confirmID, GENERIC_CONFIRM_CMD_ACCEPT_CLOSE); _treatmentStatus.stateTransitionEvent = "T_TP_2_RB"; _uiConfirmMessages[confirmID].confirmStatus = CONFIRMATION_REQUEST_STATUS_UNUSED; @@ -371,9 +372,6 @@ } break; - case GENERIC_CONFIRM_ID_TEMPORARY_BREAK: - break; - default: case GENERIC_CONFIRM_ID_NONE: case GENERIC_CONFIRM_ID_SHUT_DOWN: Index: sources/drydemo/StateControllerTreatment.cpp =================================================================== diff -u -r0deaf8f3e192a0ecde953ab65efc1ded1c06269b -r521f29cb7dcd0de352dd744292488380e07cb9e3 --- sources/drydemo/StateControllerTreatment.cpp (.../StateControllerTreatment.cpp) (revision 0deaf8f3e192a0ecde953ab65efc1ded1c06269b) +++ sources/drydemo/StateControllerTreatment.cpp (.../StateControllerTreatment.cpp) (revision 521f29cb7dcd0de352dd744292488380e07cb9e3) @@ -111,25 +111,29 @@ void StateController::handleFluidBolusRequestMessage() { - if (!_treatmentRcvdMessages[ID_UI_FLUID_BOLUS_RQST].isNull()){ + if (!_treatmentRcvdMessages[ID_UI_FLUID_BOLUS_RQST].isNull()) { quint32 fluidBolusCmd = extractU32DataFromReceivedMessage(ID_UI_FLUID_BOLUS_RQST, 0); // Regardless of starting or stoping the bolus, widen the range handleSignalInitiatePressureStabilization(USE_NORMAL_STABILIZATION_PERIOD); // Assume the fluid bolus is not in progress _treatmentSubStates.fluidBolusState = FLUID_BOLUS_IDLE_STATE; - if (fluidBolusCmd == FLUID_BOLUS_START_CMD){ - _treatmentSubStates.fluidBolusState = FLUID_BOLUS_SALINE_IN_PROGRESS_STATE; - _treatmentSubStates.dialysisSubState = DIALYSIS_UF_PAUSED_STATE; //DIALYSIS_UF_FLUID_BOLUS_STATE; // TODO UI goes to pause + if (fluidBolusCmd == FLUID_BOLUS_START_CMD) { + _treatmentSubStates.prevDialysisSubState = _treatmentSubStates.dialysisSubState; + _treatmentSubStates.fluidBolusState = FLUID_BOLUS_SALINE_IN_PROGRESS_STATE; + _treatmentSubStates.dialysisSubState = DIALYSIS_UF_PAUSED_STATE; //DIALYSIS_UF_FLUID_BOLUS_STATE; // TODO UI goes to pause } - else { _treatmentStatus.totalFluidBolusDeliveredML += _treatmentStatus.accumFluidBolusDeliveredML; } + else { + _treatmentStatus.totalFluidBolusDeliveredML += _treatmentStatus.accumFluidBolusDeliveredML; + _treatmentSubStates.dialysisSubState = _treatmentSubStates.prevDialysisSubState; + } _treatmentRcvdMessages[ID_UI_FLUID_BOLUS_RQST].clear(); handleUIResponseMessage(ID_TD_FLUID_BOLUS_RESP, ACCEPT_VALUE, {static_cast(REQUEST_REJECT_REASON_NONE), _treatmentParams.fluidBlousVolumeML}); } - if (!_treatmentRcvdMessages[ID_UI_BOLUS_VOLUME_CHANGE_RQST].isNull()){ + if (!_treatmentRcvdMessages[ID_UI_BOLUS_VOLUME_CHANGE_RQST].isNull()) { quint32 fluidBolusVolML = extractU32DataFromReceivedMessage(ID_UI_BOLUS_VOLUME_CHANGE_RQST, 0); // TODO Check the range of the requested bolus volume @@ -149,7 +153,7 @@ if (_treatmentStatus.accumFluidBolusDeliveredML >= _treatmentParams.fluidBlousVolumeML) { _treatmentSubStates.fluidBolusState = FLUID_BOLUS_IDLE_STATE; - _treatmentSubStates.dialysisSubState = DIALYSIS_UF_STATE; + _treatmentSubStates.dialysisSubState = _treatmentSubStates.prevDialysisSubState; _treatmentStatus.totalFluidBolusDeliveredML += _treatmentStatus.accumFluidBolusDeliveredML; _treatmentStatus.accumFluidBolusDeliveredML = 0.0; // Immediately broadcast the results to be updated @@ -657,47 +661,6 @@ handleVitalsBroadcastData(); } -// TREATMENT PAUSE -void StateController::handleDryBicartActionRequest() -{ - if (_treatmentRcvdMessages[ID_UI_DRY_BICART_DISCONNECT_RQST].isNull()) { return; } - - quint32 dryBicartAction = extractU32DataFromReceivedMessage(ID_UI_DRY_BICART_DISCONNECT_RQST, 0); - _treatmentStatus.bicartAction = static_cast(dryBicartAction); - - switch (_treatmentStatus.bicartAction) { - case DRY_BICART_ACTION_DRAIN: - // If either of drain or depressurization commands were selected, set the progress to 0 as it is a new start - _treatmentStatus.bicartDrainInProgress = DRY_BICART_DRIN_IN_PROGRESS; - _treatmentStatus.bicartProgress = 0; - break; - - case DRY_BICART_ACTION_DEPRESSURIZE: - _treatmentStatus.bicartDepresInProgress = DRY_BICART_DEPRES_IN_PROGRESS; - _treatmentStatus.bicartProgress = 0; - break; - - case DRY_BICART_ACTION_CANCEL: - // If cancel is selected cancel both (in case cancle was selected) - // Set the progress to 0 - _treatmentStatus.bicartDrainInProgress = DRY_BICART_DRIN_NOT_IN_PROGRESS; - _treatmentStatus.bicartDepresInProgress = DRY_BICART_DEPRES_NOT_IN_PROGRESS; - _treatmentStatus.bicartProgress = 0; - break; - - case DRY_BICART_ACTION_DONE: - default: - // Do nothing - break; - } - - // Broadcast the results of the action immediately - handleDryBicartBroadcastData(BC_IMMEDIATELY); - - _treatmentRcvdMessages[ID_UI_DRY_BICART_DISCONNECT_RQST].clear(); - handleUIResponseMessage(ID_TD_DRY_BICART_DISCONNECT_RESP, ACCEPT_VALUE); -} - // TREATMENT END void StateController::handleTreatmentEndRequestMessage(State_Status &status) { Index: sources/drydemo/StateControllerTreatmentBroadcasts.cpp =================================================================== diff -u -r4624d7657d342248336c1ff16edfae614c335728 -r521f29cb7dcd0de352dd744292488380e07cb9e3 --- sources/drydemo/StateControllerTreatmentBroadcasts.cpp (.../StateControllerTreatmentBroadcasts.cpp) (revision 4624d7657d342248336c1ff16edfae614c335728) +++ sources/drydemo/StateControllerTreatmentBroadcasts.cpp (.../StateControllerTreatmentBroadcasts.cpp) (revision 521f29cb7dcd0de352dd744292488380e07cb9e3) @@ -277,6 +277,25 @@ _isBroadcastListReady = true; } +void StateController::handleTreatmentPauseBroadcastData(const Broadcast_Type BCType) +{ + static quint32 broadcastCounter = 90; + if ((++broadcastCounter % NUM_OF_COUNTS_TIMER_BC_EMIT != 0) && (BCType == BC_DELAYED)) { return; } + + quint32 timeoutMS = MAX_TIME_BLOOD_SITTING / (MILLISECONDS_PER_SECOND / QOBJECT_TIMER_TIMEOUT_MS); + quint32 countdownMS = (_treatmentStatus.txPauseBloodSittingCounter >= MAX_TIME_BLOOD_SITTING ? 0 : + (MAX_TIME_BLOOD_SITTING - _treatmentStatus.txPauseBloodSittingCounter) / (MILLISECONDS_PER_SECOND / QOBJECT_TIMER_TIMEOUT_MS)); + + QVariantList msg; + msg.append(static_cast(ID_TD_TREATMENT_PAUSED_TIMER_DATA)); + msg.append(Can_Id::eChlid_TD_Sync); + msg.append(timeoutMS); + msg.append(countdownMS); + _isBroadcastListReady = false; + _broadcastMessages.append(msg); + _isBroadcastListReady = true; +} + // TREATMENT PAUSE void StateController::handleDryBicartBroadcastData(const Broadcast_Type BCType) { @@ -296,12 +315,13 @@ if ((++broadcastCounter % NUM_OF_COUNTS_TIMER_BC_EMIT != 0) && (BCType == BC_DELAYED)) { return; } - quint32 bicarbShowDialog = (_treatmentStatus.bicartAction == DRY_BICART_ACTION_DONE ? DRY_BICART_CLOSE_SCREEN : DRY_BICART_OPEN_SCREEN); + // Do not pop the dialog in post tx + if (getActiveStateName() == "Post_Tx") { _treatmentStatus.bicartShowDialog = DRY_BICART_CLOSE_SCREEN; } QVariantList msg; msg.append(static_cast(ID_TD_DRY_BICART_DISCONNECT_DATA)); msg.append(Can_Id::eChlid_TD_Sync); - msg.append(bicarbShowDialog); + msg.append(_treatmentStatus.bicartShowDialog); msg.append(_treatmentStatus.bicartTotal); msg.append(static_cast(_treatmentStatus.bicartProgress)); msg.append(_treatmentStatus.bicartDrainInProgress);