Index: leahi.pro =================================================================== diff -u -r3428dfd1fb3372d8de9a7c1afc55e4860b70ec89 -r43ae56f762e6f3e1416d39e3d16f9103fc597e41 --- leahi.pro (.../leahi.pro) (revision 3428dfd1fb3372d8de9a7c1afc55e4860b70ec89) +++ leahi.pro (.../leahi.pro) (revision 43ae56f762e6f3e1416d39e3d16f9103fc597e41) @@ -159,6 +159,7 @@ sources/model/td/data/treatment/MTreatmentPressureOcclusionData.h \ sources/model/td/data/treatment/MTreatmentSalineData.h \ sources/model/td/data/treatment/MTreatmentSetPointData.h \ + sources/model/td/data/treatment/MTreatmentStatesData.h \ sources/model/td/data/treatment/MTreatmentTimeData.h \ sources/model/td/data/treatment/MTreatmentUltrafiltrationData.h \ sources/storage/Settings.h \ @@ -205,7 +206,6 @@ sources/model/hd/alarm/MAlarmActiveList.h \ \ # ---------- Models - States Data sources/model/hd/data/pretreatment/MPreTreatmentStatesData.h \ - sources/model/hd/data/treatment/MTreatmentStatesData.h \ sources/model/hd/data/posttreatment/MPostTreatmentStatesData.h \ \ # ---------- Models - HD - Adjustment sources/model/hd/adjustment/MAdjustRequestsBase.h \ @@ -370,7 +370,6 @@ sources/view/hd/adjustment/disinfect/VDisinfectAdjustDisinfect.h \ \ # ---------- Views - HD - Data - States sources/view/hd/data/pretreatment/VPreTreatmentStatesData.h \ - sources/view/hd/data/treatment/VHDTreatmentStatesData.h \ sources/view/hd/data/posttreatment/VPostTreatmentStatesData.h \ \ # ---------- Views - HD - Data - Pre-Treatment - Progress sources/view/hd/data/pretreatment/VPreTreatmentSelfTestNoCartridgeData.h \ @@ -417,6 +416,7 @@ sources/view/td/data/VTDTemperatureData.h \ sources/view/td/data/VTDValvesData.h \ sources/view/td/data/VTDVoltageData.h \ + sources/view/td/data/treatment/VTDTreatmentStatesData.h \ sources/view/td/data/treatment/VTreatmentBloodFlow.h \ sources/view/td/data/treatment/VTreatmentPressureOcclusion.h \ sources/view/td/data/treatment/VTreatmentSalineData.h \ @@ -454,6 +454,7 @@ sources/model/td/data/treatment/MTreatmentPressureOcclusionData.cpp \ sources/model/td/data/treatment/MTreatmentSalineData.cpp \ sources/model/td/data/treatment/MTreatmentSetPointData.cpp \ + sources/model/td/data/treatment/MTreatmentStatesData.cpp \ sources/model/td/data/treatment/MTreatmentTimeData.cpp \ sources/model/td/data/treatment/MTreatmentUltrafiltrationData.cpp \ sources/model/ui/data/MUIBloodPressureData.cpp \ @@ -494,7 +495,6 @@ sources/model/hd/alarm/MAlarmActiveList.cpp \ \ # ---------- Models - Data - States sources/model/hd/data/pretreatment/MPreTreatmentStatesData.cpp \ - sources/model/hd/data/treatment/MTreatmentStatesData.cpp \ sources/model/hd/data/posttreatment/MPostTreatmentStatesData.cpp \ \ # ---------- Models - HD - Adjustment sources/model/hd/adjustment/MAdjustPowerOff.cpp \ @@ -654,7 +654,6 @@ sources/view/hd/adjustment/disinfect/VDisinfectAdjustDisinfect.cpp \ \ # ---------- Views - HD - States Data sources/view/hd/data/pretreatment/VPreTreatmentStatesData.cpp \ - sources/view/hd/data/treatment/VHDTreatmentStatesData.cpp \ sources/view/hd/data/posttreatment/VPostTreatmentStatesData.cpp \ \ # ---------- Views - HD - Data sources/view/hd/data/VHDAccelerometerData.cpp \ @@ -703,6 +702,7 @@ sources/view/td/data/VTDTemperatureData.cpp \ sources/view/td/data/VTDValvesData.cpp \ sources/view/td/data/VTDVoltageData.cpp \ + sources/view/td/data/treatment/VTDTreatmentStatesData.cpp \ sources/view/td/data/treatment/VTreatmentBloodFlow.cpp \ sources/view/td/data/treatment/VTreatmentPressureOcclusion.cpp \ sources/view/td/data/treatment/VTreatmentSalineData.cpp \ Index: sources/gui/GuiGlobals.cpp =================================================================== diff -u -r94c3fb6bbcf932b1f50a2d616dc600e3c449afe4 -r43ae56f762e6f3e1416d39e3d16f9103fc597e41 --- sources/gui/GuiGlobals.cpp (.../GuiGlobals.cpp) (revision 94c3fb6bbcf932b1f50a2d616dc600e3c449afe4) +++ sources/gui/GuiGlobals.cpp (.../GuiGlobals.cpp) (revision 43ae56f762e6f3e1416d39e3d16f9103fc597e41) @@ -54,7 +54,7 @@ // states data #include "VTDOpModeData.h" #include "VPreTreatmentStatesData.h" -#include "VHDTreatmentStatesData.h" +#include "VTDTreatmentStatesData.h" #include "VPostTreatmentStatesData.h" // Common treatment #include "VCommonAdjustmentVitals.h" Index: sources/gui/GuiGlobals.h =================================================================== diff -u -r94c3fb6bbcf932b1f50a2d616dc600e3c449afe4 -r43ae56f762e6f3e1416d39e3d16f9103fc597e41 --- sources/gui/GuiGlobals.h (.../GuiGlobals.h) (revision 94c3fb6bbcf932b1f50a2d616dc600e3c449afe4) +++ sources/gui/GuiGlobals.h (.../GuiGlobals.h) (revision 43ae56f762e6f3e1416d39e3d16f9103fc597e41) @@ -122,7 +122,7 @@ // State Messages ID_TDOpModeData = 0x1200, // 18 //// ----- @LEAHIZED ID_PreTreatmentStates = 0x5C00, // 92 - ID_TreatmentStates = 0x0F0F, // 15 //// ----- @CRAPIZED: had to change to avoid duplication + ID_TreatmentStates = 0x3C00, // 60 //// ----- @LEAHIZED ID_PostTreatmentStates = 0x7700, // 119 // ----- @@ -175,8 +175,8 @@ // Pre-Treatment SelfTest Dry Progress Data ID_SelfTestDryData = 0x6300, // 99 // Pre-Treatment Disposable Priming - ID_AdjustDisposablesPrimeReq = 0x3C00, // 60 - ID_AdjustDisposablesPrimeRsp = 0x3D0F, // 61 //// ----- @CRAPIZED: had to change to avoid duplication + ID_AdjustDisposablesPrimeReq = 0x3C0F, // 60 //// ----- @CRAPIZED: had to change to avoid duplication + ID_AdjustDisposablesPrimeRsp = 0x3D0F, // 61 //// ----- @CRAPIZED: had to change to avoid duplication ID_DisposablesPrimeData = 0x43FF, // ?? //// ----- @CRAPIZED - FFed // Pre-Treatment Patient Connection Begin ID_AdjustPatientConnectionBeginReq = 0x6400, // 100 Index: sources/gui/qml/AlarmItem.qml =================================================================== diff -u -rf2e4eba6e85c5d36537be782926f23cc9dc01037 -r43ae56f762e6f3e1416d39e3d16f9103fc597e41 --- sources/gui/qml/AlarmItem.qml (.../AlarmItem.qml) (revision f2e4eba6e85c5d36537be782926f23cc9dc01037) +++ sources/gui/qml/AlarmItem.qml (.../AlarmItem.qml) (revision 43ae56f762e6f3e1416d39e3d16f9103fc597e41) @@ -135,9 +135,9 @@ countDown : vTreatmentStop.countDown countDownVisible : vTDOpMode.inTreatment && ( - vHDTreatmentStates.txStop - || vHDTreatmentStates.txRinseback - || vHDTreatmentStates.txEnd + vTDTreatmentStates.txStop + || vTDTreatmentStates.txRinseback + || vTDTreatmentStates.txEnd ) && vTreatmentStop.total Index: sources/gui/qml/dialogs/DiagnosticsDialog.qml =================================================================== diff -u -rf0f5a1a28a8ff55672f10b5c50c6c406f6c72c2d -r43ae56f762e6f3e1416d39e3d16f9103fc597e41 --- sources/gui/qml/dialogs/DiagnosticsDialog.qml (.../DiagnosticsDialog.qml) (revision f0f5a1a28a8ff55672f10b5c50c6c406f6c72c2d) +++ sources/gui/qml/dialogs/DiagnosticsDialog.qml (.../DiagnosticsDialog.qml) (revision 43ae56f762e6f3e1416d39e3d16f9103fc597e41) @@ -230,6 +230,29 @@ ] } + + DebugDataColumn { id: _TDTXStatesColumn + textObjectName :"_TDTxStatesData" + title : "" + horizontalAlignmentText: Text.AlignLeft + fontPixelSizeText: Fonts.fontPixelDebugTitle + x: col(0) + y: row(7) + model: [ "TX States: %1 %2 %3 %4 %5 %6 %7 %8 %9 %10" + .arg(vTDTreatmentStates.subMode ) + .arg(vTDTreatmentStates.txBloodPrime ) + .arg(vTDTreatmentStates.txDialysis ) + .arg(vTDTreatmentStates.ufState ) + .arg(vTDTreatmentStates.txStop ) + .arg(vTDTreatmentStates.txRinseback ) + .arg(vTDTreatmentStates.txRecirculate ) + .arg(vTDTreatmentStates.txEnd ) + .arg(vTDTreatmentStates.salineState ) + .arg(vTDTreatmentStates.heparin ) + ] + } + + // TODO: The TouchRect should be unnecessary since the first communication message with UI/HD is the version. TouchRect { x : col(6.0) Index: sources/gui/qml/main.qml =================================================================== diff -u -r94c3fb6bbcf932b1f50a2d616dc600e3c449afe4 -r43ae56f762e6f3e1416d39e3d16f9103fc597e41 --- sources/gui/qml/main.qml (.../main.qml) (revision 94c3fb6bbcf932b1f50a2d616dc600e3c449afe4) +++ sources/gui/qml/main.qml (.../main.qml) (revision 43ae56f762e6f3e1416d39e3d16f9103fc597e41) @@ -57,7 +57,7 @@ // States views import VTDOpMode 0.1 //// ----- @LEAHIZED import VPreTreatmentStates 0.1 -import VHDTreatmentStates 0.1 +import VTDTreatmentStates 0.1 import VPostTreatmentStates 0.1 // Treatment - Common @@ -167,13 +167,13 @@ } } VPreTreatmentStates { id: vPreTreatmentStates } - VHDTreatmentStates { id: vHDTreatmentStates } + VTDTreatmentStates { id: vTDTreatmentStates } VPostTreatmentStates { id: vPostTreatmentStates } VTreatmentBloodFlow { id: vTreatmentBloodFlow } VTreatmentVitals { id: vTreatmentVitals interval : vTreatmentCreate.bloodPressureMeasureInterval - enableDialog: vTDOpMode.inTreatment && vHDTreatmentStates.txTreatment + enableDialog: vTDOpMode.inTreatment && vTDTreatmentStates.txTreatment // As long as UI is in In-Tx BP/HR is updated and the dialog will pop up on interval. onEnableDialogChanged : { if ( vTreatmentVitals.enableDialog ) { Index: sources/gui/qml/pages/MainStack.qml =================================================================== diff -u -r2ad0fc5c1215088ee0e4ea7f9b2bc367c4ed2fd9 -r43ae56f762e6f3e1416d39e3d16f9103fc597e41 --- sources/gui/qml/pages/MainStack.qml (.../MainStack.qml) (revision 2ad0fc5c1215088ee0e4ea7f9b2bc367c4ed2fd9) +++ sources/gui/qml/pages/MainStack.qml (.../MainStack.qml) (revision 43ae56f762e6f3e1416d39e3d16f9103fc597e41) @@ -149,7 +149,7 @@ // and it's easier(or may not need) to modify later if required. // and is more optimized and will never leave screen empty // also with what ever order they have been push with the reverse/correct animation will be poped or pushed. - Connections { target: vHDTreatmentStates + Connections { target: vTDTreatmentStates // Blood Prime function onBpRampChanged ( vValue ) { page( null , vValue )} Index: sources/gui/qml/pages/endtreatment/EndTreatmentEndStack.qml =================================================================== diff -u -ra5760947d3ed0d2748ba023a1c25e3c6aa0b1de1 -r43ae56f762e6f3e1416d39e3d16f9103fc597e41 --- sources/gui/qml/pages/endtreatment/EndTreatmentEndStack.qml (.../EndTreatmentEndStack.qml) (revision a5760947d3ed0d2748ba023a1c25e3c6aa0b1de1) +++ sources/gui/qml/pages/endtreatment/EndTreatmentEndStack.qml (.../EndTreatmentEndStack.qml) (revision 43ae56f762e6f3e1416d39e3d16f9103fc597e41) @@ -54,7 +54,7 @@ instructionBased : true } - Connections { target : vHDTreatmentStates + Connections { target : vTDTreatmentStates function onTeWaitRinsebackChanged ( vValue ) { page( _endTreatmentEnd , vValue )} function onTePausedChanged ( vValue ) { page( _endTreatmentEndPaused , vValue )} } Index: sources/gui/qml/pages/endtreatment/EndTreatmentRecirculateStack.qml =================================================================== diff -u -ra5760947d3ed0d2748ba023a1c25e3c6aa0b1de1 -r43ae56f762e6f3e1416d39e3d16f9103fc597e41 --- sources/gui/qml/pages/endtreatment/EndTreatmentRecirculateStack.qml (.../EndTreatmentRecirculateStack.qml) (revision a5760947d3ed0d2748ba023a1c25e3c6aa0b1de1) +++ sources/gui/qml/pages/endtreatment/EndTreatmentRecirculateStack.qml (.../EndTreatmentRecirculateStack.qml) (revision 43ae56f762e6f3e1416d39e3d16f9103fc597e41) @@ -129,7 +129,7 @@ ] } - Connections { target: vHDTreatmentStates + Connections { target: vTDTreatmentStates function onRcDisconnectChanged ( vValue ) { page( _recirculateDisconnect , vValue )} function onRcStartedChanged ( vValue ) { page( _recirculateRecirculate , vValue )} function onRcStoppedChanged ( vValue ) { page( _recirculateStopped , vValue )} Index: sources/gui/qml/pages/endtreatment/EndTreatmentRinsebackStack.qml =================================================================== diff -u -ra5760947d3ed0d2748ba023a1c25e3c6aa0b1de1 -r43ae56f762e6f3e1416d39e3d16f9103fc597e41 --- sources/gui/qml/pages/endtreatment/EndTreatmentRinsebackStack.qml (.../EndTreatmentRinsebackStack.qml) (revision a5760947d3ed0d2748ba023a1c25e3c6aa0b1de1) +++ sources/gui/qml/pages/endtreatment/EndTreatmentRinsebackStack.qml (.../EndTreatmentRinsebackStack.qml) (revision 43ae56f762e6f3e1416d39e3d16f9103fc597e41) @@ -63,7 +63,7 @@ function onTreatmentEndClicked ( vValue ) { vTreatmentAdjustmentRinseback.doTreatmentEnd ()} //82.8 } - Connections { target: vHDTreatmentStates + Connections { target: vTDTreatmentStates function onRbInitChanged ( vValue ) { page( _endTreatmentRinsebackInit , vValue )} function onRbRunChanged ( vValue ) { page( _endTreatmentRinseback , vValue )} function onRbPausedChanged ( vValue ) { page( _endTreatmentRinseback , vValue )} @@ -93,20 +93,20 @@ // target: _endTreatmentRinsebackInit // property: "opacity" // duration: 1000 -// to: vHDTreatmentStates.rbInit ? 1 : 0 +// to: vTDTreatmentStates.rbInit ? 1 : 0 // } // PropertyAnimation { id: _rbStopAnimation // target: _endTreatmentRinsebackComplete // property: "opacity" // duration: 1000 -// to: vHDTreatmentStates.rbStop ? 1 : 0 +// to: vTDTreatmentStates.rbStop ? 1 : 0 // } -// Connections { target: vHDTreatmentStates +// Connections { target: vTDTreatmentStates // onStateTriggered : { // this property is a TRIGGER and shall be set at the end of the property setters functions list -// _endTreatmentRinsebackInit .visible = vHDTreatmentStates.rbInit -// _endTreatmentRinseback .visible = vHDTreatmentStates.rbRun || vHDTreatmentStates.rbPaused -// _endTreatmentRinsebackComplete .visible = vHDTreatmentStates.rbStop -// _endTreatmentAdditional .visible = vHDTreatmentStates.rbAdditional +// _endTreatmentRinsebackInit .visible = vTDTreatmentStates.rbInit +// _endTreatmentRinseback .visible = vTDTreatmentStates.rbRun || vTDTreatmentStates.rbPaused +// _endTreatmentRinsebackComplete .visible = vTDTreatmentStates.rbStop +// _endTreatmentAdditional .visible = vTDTreatmentStates.rbAdditional // // } // onRbInitChanged: _rbInitAnimation.running = true Index: sources/gui/qml/pages/endtreatment/rinseback/EndTreatmentRinseback.qml =================================================================== diff -u -ra5760947d3ed0d2748ba023a1c25e3c6aa0b1de1 -r43ae56f762e6f3e1416d39e3d16f9103fc597e41 --- sources/gui/qml/pages/endtreatment/rinseback/EndTreatmentRinseback.qml (.../EndTreatmentRinseback.qml) (revision a5760947d3ed0d2748ba023a1c25e3c6aa0b1de1) +++ sources/gui/qml/pages/endtreatment/rinseback/EndTreatmentRinseback.qml (.../EndTreatmentRinseback.qml) (revision 43ae56f762e6f3e1416d39e3d16f9103fc597e41) @@ -43,7 +43,7 @@ timeoutValue : vTreatmentRinseback .timeoutCountDown * 60 ImageText { id: _imageEnd - visible: ! vHDTreatmentStates.rbAdditional + visible: ! vTDTreatmentStates.rbAdditional anchors { right : _root.right top : _root.top @@ -77,7 +77,7 @@ anchors { horizontalCenter: parent.horizontalCenter top : parent.top - topMargin : vHDTreatmentStates.rbAdditional ? + topMargin : vTDTreatmentStates.rbAdditional ? _root.height/2 - height/2 : // move the progress circle in the center of the screen 170 } @@ -115,8 +115,8 @@ } ImageText { id: _imageDecelerate - visible : vHDTreatmentStates.rbRun || vHDTreatmentStates.rbPaused - enabled : vHDTreatmentStates.rbRun + visible : vTDTreatmentStates.rbRun || vTDTreatmentStates.rbPaused + enabled : vTDTreatmentStates.rbRun anchors.bottom : _buttonRow.bottom diameter : Variables.rinsebackIconDiameterDefault source : "qrc:/images/iDecelerate" @@ -126,7 +126,7 @@ } ImageText { id: _imageResume - visible : vHDTreatmentStates.rbPaused + visible : vTDTreatmentStates.rbPaused anchors.bottom : _buttonRow.bottom diameter : Variables.rinsebackIconDiameterResumePause source : "qrc:/images/iResume" @@ -136,7 +136,7 @@ } ImageText { id: _imagePause - visible : vHDTreatmentStates.rbRun // not sure if it's possible || vHDTreatmentStates.rbAdditional + visible : vTDTreatmentStates.rbRun // not sure if it's possible || vTDTreatmentStates.rbAdditional anchors.bottom : _buttonRow.bottom diameter : Variables.rinsebackIconDiameterResumePause source : "qrc:/images/iPauseLightBlue" @@ -146,8 +146,8 @@ } ImageText { id: _imageAccelerate - visible : vHDTreatmentStates.rbRun || vHDTreatmentStates.rbPaused - enabled : vHDTreatmentStates.rbRun + visible : vTDTreatmentStates.rbRun || vTDTreatmentStates.rbPaused + enabled : vTDTreatmentStates.rbRun anchors.bottom : _buttonRow.bottom diameter : Variables.rinsebackIconDiameterDefault source : "qrc:/images/iAccelerate" Index: sources/gui/qml/pages/treatment/TreatmentStack.qml =================================================================== diff -u -rf2e4eba6e85c5d36537be782926f23cc9dc01037 -r43ae56f762e6f3e1416d39e3d16f9103fc597e41 --- sources/gui/qml/pages/treatment/TreatmentStack.qml (.../TreatmentStack.qml) (revision f2e4eba6e85c5d36537be782926f23cc9dc01037) +++ sources/gui/qml/pages/treatment/TreatmentStack.qml (.../TreatmentStack.qml) (revision 43ae56f762e6f3e1416d39e3d16f9103fc597e41) @@ -43,13 +43,13 @@ stackView.initialItem : null // ultrafiltration state information bar properties - readonly property bool isUFPaused : vHDTreatmentStates.ufPaused - readonly property bool isUFRunning : vHDTreatmentStates.ufRunning + readonly property bool isUFPaused : vTDTreatmentStates.ufPaused + readonly property bool isUFRunning : vTDTreatmentStates.ufRunning readonly property string ufInfoImageSource : isUFPaused ? "qrc:/images/iPauseGray" : "" readonly property string ufInfoText : isUFPaused ? qsTr("Ultrafiltration Paused" ) : "" readonly property string ufInfoTextColor : isUFPaused ? "gray" : "" - readonly property bool isSBInProgress : ( vHDTreatmentStates.sbRunning || vHDTreatmentStates.sbWaitPump ) + readonly property bool isSBInProgress : ( vTDTreatmentStates.sbRunning || vTDTreatmentStates.sbWaitPump ) readonly property bool isDialogOpened : _treatmentAdjustmentFlow .visible || _treatmentAdjustmentPressuresLimits .visible @@ -215,7 +215,7 @@ } } - Connections { target: vHDTreatmentStates + Connections { target: vTDTreatmentStates // in-Treatmet function onTxBloodPrimeChanged ( vValue ) { page( _treatmentBloodPrime , vValue )} function onTxDialysisChanged ( vValue ) { page( _treatmentHome , vValue )} Index: sources/gui/qml/pages/treatment/TreatmentUltrafiltrationItem.qml =================================================================== diff -u -ra5760947d3ed0d2748ba023a1c25e3c6aa0b1de1 -r43ae56f762e6f3e1416d39e3d16f9103fc597e41 --- sources/gui/qml/pages/treatment/TreatmentUltrafiltrationItem.qml (.../TreatmentUltrafiltrationItem.qml) (revision a5760947d3ed0d2748ba023a1c25e3c6aa0b1de1) +++ sources/gui/qml/pages/treatment/TreatmentUltrafiltrationItem.qml (.../TreatmentUltrafiltrationItem.qml) (revision 43ae56f762e6f3e1416d39e3d16f9103fc597e41) @@ -101,15 +101,15 @@ Connections { target: vTreatmentAdjustmentUltrafiltrationState function onAdjustmentTriggered ( vValue ) { if ( vTreatmentAdjustmentUltrafiltrationState.adjustment_Accepted ) { - if (vHDTreatmentStates.ufPaused) { // handle screen regarding current accepted + if (vTDTreatmentStates.ufPaused) { // handle screen regarding current accepted _treatmentAdjustmentUltrafiltrationStart .close() _treatmentAdjustmentUltrafiltrationPaused.open () } else { _treatmentAdjustmentUltrafiltrationPaused.close() } } else { - if (vHDTreatmentStates.ufRunning) { // handle error messages regarding current accepted + if (vTDTreatmentStates.ufRunning) { // handle error messages regarding current accepted _treatmentAdjustmentUltrafiltrationStart.notificationText = vTreatmentAdjustmentUltrafiltrationState.adjustment_ReasonText } else { _treatmentAdjustmentUltrafiltrationPaused.notificationText = vTreatmentAdjustmentUltrafiltrationState.adjustment_ReasonText Index: sources/gui/qml/pages/treatment/sections/TreatmentHeparin.qml =================================================================== diff -u -ra5760947d3ed0d2748ba023a1c25e3c6aa0b1de1 -r43ae56f762e6f3e1416d39e3d16f9103fc597e41 --- sources/gui/qml/pages/treatment/sections/TreatmentHeparin.qml (.../TreatmentHeparin.qml) (revision a5760947d3ed0d2748ba023a1c25e3c6aa0b1de1) +++ sources/gui/qml/pages/treatment/sections/TreatmentHeparin.qml (.../TreatmentHeparin.qml) (revision 43ae56f762e6f3e1416d39e3d16f9103fc597e41) @@ -27,17 +27,17 @@ * \brief Treatment Screen Heparin Management section */ TreatmentFluid { id: _root - readonly property bool isOff : vHDTreatmentStates.hpOff - readonly property bool isStopped : vHDTreatmentStates.hpStopped - readonly property bool isPaused : vHDTreatmentStates.hpPaused - readonly property bool isBolus : vHDTreatmentStates.hpInitial_bolus - readonly property bool isDispensing : vHDTreatmentStates.hpDispensing - readonly property bool isCompleted : vHDTreatmentStates.hpCompleted - readonly property bool isEmpty : vHDTreatmentStates.hpEmpty + readonly property bool isOff : vTDTreatmentStates.hpOff + readonly property bool isStopped : vTDTreatmentStates.hpStopped + readonly property bool isPaused : vTDTreatmentStates.hpPaused + readonly property bool isBolus : vTDTreatmentStates.hpInitial_bolus + readonly property bool isDispensing : vTDTreatmentStates.hpDispensing + readonly property bool isCompleted : vTDTreatmentStates.hpCompleted + readonly property bool isEmpty : vTDTreatmentStates.hpEmpty readonly property bool isRejected : vTreatmentAdjustmentHeparin.adjustment_Accepted readonly property bool displayReason : _private.displayReason - readonly property bool isTxRunning : vHDTreatmentStates.txDialysis + readonly property bool isTxRunning : vTDTreatmentStates.txDialysis QtObject { id: _private readonly property string textHeparin : qsTr("HEPARIN DELIVERY") @@ -92,7 +92,7 @@ _private.displayReason = ! vTreatmentAdjustmentHeparin.adjustment_Accepted } } - Connections { target: vHDTreatmentStates + Connections { target: vTDTreatmentStates function onHeparinChanged ( vValue ) { _private.displayReason = false } Index: sources/gui/qml/pages/treatment/sections/TreatmentSaline.qml =================================================================== diff -u -ra5760947d3ed0d2748ba023a1c25e3c6aa0b1de1 -r43ae56f762e6f3e1416d39e3d16f9103fc597e41 --- sources/gui/qml/pages/treatment/sections/TreatmentSaline.qml (.../TreatmentSaline.qml) (revision a5760947d3ed0d2748ba023a1c25e3c6aa0b1de1) +++ sources/gui/qml/pages/treatment/sections/TreatmentSaline.qml (.../TreatmentSaline.qml) (revision 43ae56f762e6f3e1416d39e3d16f9103fc597e41) @@ -27,12 +27,12 @@ * \brief Treatment Screen Saline Management section */ TreatmentFluid { id: _root - readonly property bool isStarted : vHDTreatmentStates.sbRunning - readonly property bool isIdle : vHDTreatmentStates.sbIdle + readonly property bool isStarted : vTDTreatmentStates.sbRunning + readonly property bool isIdle : vTDTreatmentStates.sbIdle // other that max saline bolus delivered, // if saline started but still is waiting for pump the button is disabled so user won't tap multiple times. - readonly property bool isDisabled : vHDTreatmentStates.sbMaxReached - readonly property bool isWaitPump : vHDTreatmentStates.sbWaitPump + readonly property bool isDisabled : vTDTreatmentStates.sbMaxReached + readonly property bool isWaitPump : vTDTreatmentStates.sbWaitPump QtObject { id: _private readonly property string textStart : qsTr("START BOLUS") Index: sources/gui/qml/pages/treatment/sections/TreatmentTime.qml =================================================================== diff -u -ra5760947d3ed0d2748ba023a1c25e3c6aa0b1de1 -r43ae56f762e6f3e1416d39e3d16f9103fc597e41 --- sources/gui/qml/pages/treatment/sections/TreatmentTime.qml (.../TreatmentTime.qml) (revision a5760947d3ed0d2748ba023a1c25e3c6aa0b1de1) +++ sources/gui/qml/pages/treatment/sections/TreatmentTime.qml (.../TreatmentTime.qml) (revision 43ae56f762e6f3e1416d39e3d16f9103fc597e41) @@ -32,8 +32,8 @@ property int progressValue : vTreatmentTime.time_Elapsed property int timeTextValue : vTreatmentTime.time_Remaining - property bool isRunning : vHDTreatmentStates.txDialysis && - !( vHDTreatmentStates.sbWaitPump || vHDTreatmentStates.sbRunning ) + property bool isRunning : vTDTreatmentStates.txDialysis && + !( vTDTreatmentStates.sbWaitPump || vTDTreatmentStates.sbRunning ) signal clicked() Fisheye: Tag 43ae56f762e6f3e1416d39e3d16f9103fc597e41 refers to a dead (removed) revision in file `sources/model/hd/data/treatment/MTreatmentStatesData.cpp'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 43ae56f762e6f3e1416d39e3d16f9103fc597e41 refers to a dead (removed) revision in file `sources/model/hd/data/treatment/MTreatmentStatesData.h'. Fisheye: No comparison available. Pass `N' to diff? Index: sources/model/td/data/treatment/MTreatmentStatesData.cpp =================================================================== diff -u --- sources/model/td/data/treatment/MTreatmentStatesData.cpp (revision 0) +++ sources/model/td/data/treatment/MTreatmentStatesData.cpp (revision 43ae56f762e6f3e1416d39e3d16f9103fc597e41) @@ -0,0 +1,73 @@ +/*! + * + * Copyright (c) 2021-2024 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file MTreatmentStatesData.cpp + * \author (last) Michael Garthwaite + * \date (last) 28-Feb-2022 + * \author (original) Behrouz NematiPour + * \date (original) 11-Apr-2021 + * + */ +#include "MTreatmentStatesData.h" + +using namespace Model; + +QVariantList MTreatmentStates::parameters() const { + return { + _data.mSubMode .value, + _data.mBloodPrimeState .value, + _data.mDialysisState .value, + _data.mIsolatedUFState .value, + _data.mTreatmentStopState .value, + _data.mRinsebackState .value, + _data.mRecirculateState .value, + _data.mTreatmentEndState .value, + _data.mSalineState .value, + _data.mHeparinState .value, + }; +} + +bool MTreatmentStates::fromByteArray(const QByteArray &vByteArray, int *vIndex) { + int index = 0; // message data start position + if ( ! GetValue(vByteArray, index, _data.mSubMode )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mBloodPrimeState )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDialysisState )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mIsolatedUFState )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mTreatmentStopState )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mRinsebackState )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mRecirculateState )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mTreatmentEndState )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mSalineState )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mHeparinState )) goto lError; + + return true ; + +lError: + if(vIndex) { *vIndex = index; } + + return false ; +} + +/*! + * \brief MTreatmentStates::data + * \details Provides model's Data from the received messages data values + * \return Data + */ +MTreatmentStates::Data MTreatmentStates::data() const { + Data data; + data.mSubMode = _data.mSubMode .value; + data.mBloodPrimeState = _data.mBloodPrimeState .value; + data.mDialysisState = _data.mDialysisState .value; + data.mIsolatedUFState = _data.mIsolatedUFState .value; + data.mTreatmentStopState = _data.mTreatmentStopState .value; + data.mRinsebackState = _data.mRinsebackState .value; + data.mRecirculateState = _data.mRecirculateState .value; + data.mTreatmentEndState = _data.mTreatmentEndState .value; + data.mSalineState = _data.mSalineState .value; + data.mHeparinState = _data.mHeparinState .value; + return data; +} Index: sources/model/td/data/treatment/MTreatmentStatesData.h =================================================================== diff -u --- sources/model/td/data/treatment/MTreatmentStatesData.h (revision 0) +++ sources/model/td/data/treatment/MTreatmentStatesData.h (revision 43ae56f762e6f3e1416d39e3d16f9103fc597e41) @@ -0,0 +1,117 @@ +/*! + * + * Copyright (c) 2021-2024 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file MTreatmentStatesData.h + * \author (last) Behrouz NematiPour + * \date (last) 24-Mar-2023 + * \author (original) Behrouz NematiPour + * \date (original) 11-Apr-2021 + * + */ +#pragma once + +// Qt +#include + +// Project +#include "MAbstract.h" +#include "types.h" + +// forward declarations +class tst_models; + +namespace Model { + +/*! + * \brief The MTreatmentStates class + * \details The treatment states data model + * These are states of the current treatment. + * It also includes the ultrafiltration states, saline bolus states. + * + * | MSG | CAN ID | Box | Type | Ack | Src | Dst | Description | + * |:----:|:------:|:---:|:------:|:---:|:---:|:---:|:-----------: | + * |0x3C00| 0x100 | 7 | 1 Hz | N | TD | All | Treatment States Data | + * + * | Payload || + * | || + * | #01:(U32) | \ref Data::mSubMode | + * | #02:(U32) | \ref Data::mBloodPrimeState | + * | #03:(U32) | \ref Data::mDialysateState | + * | #04:(U32) | \ref Data::mIsolatedUFState | + * | #05:(U32) | \ref Data::mTreatmentStopState | + * | #06:(U32) | \ref Data::mRinsebackState | + * | #07:(U32) | \ref Data::mRecirculateState | + * | #08:(U32) | \ref Data::mTreatmentEndState | + * | #09:(U32) | \ref Data::mSalineState | + * | #10:(U32) | \ref Data::mHeparinState | + * + * \sa Data + * \sa Treatment_States + * \sa UF_States + * \sa Saline_Bolus_States + * \sa Heparin_Bolus_States + * \sa Rinseback_States + * \sa Treatment_Recirc_States + * \sa Blood_Prime_States + * \sa Treatment_Paused_States + * \sa Treatment_End_States + * + *

Logging info

+ * | || + * | || + * | typeText | Datum | + * | unitText | HD | + * | infoText | TreatmentStates | + * + */ +class MTreatmentStates : public MAbstract { + + // friends + friend class ::tst_models; + + QVariantList parameters() const override; + + struct { + Types::U32 mSubMode ; + Types::U32 mBloodPrimeState ; + Types::U32 mDialysisState ; + Types::U32 mIsolatedUFState ; + Types::U32 mTreatmentStopState ; + Types::U32 mRinsebackState ; + Types::U32 mRecirculateState ; + Types::U32 mTreatmentEndState ; + Types::U32 mSalineState ; + Types::U32 mHeparinState ; + } _data; + +public: + + Type_Enum typeText () const override { return Type_Enum::eDatum ; } + Unit_Enum unitText () const override { return Unit_Enum::eTD ; } + QString infoText () const override { return QString("TreatmentStates"); } + + struct Data { + quint32 mSubMode = 0; ///< Sub-Mode State - Treatment_States + quint32 mBloodPrimeState = 0; ///< BloodPrime State - Blood_Prime_States + quint32 mDialysisState = 0; ///< Dialysis State - Dialysis_State + quint32 mIsolatedUFState = 0; ///< UF State - UF_States + quint32 mTreatmentStopState = 0; ///< TreatmentStop State - Treatment_End_States + quint32 mRinsebackState = 0; ///< Rinseback State - Rinseback_States + quint32 mRecirculateState = 0; ///< Recirculate State - Treatment_Recirc_States + quint32 mTreatmentEndState = 0; ///< TreatmentEnd State - Treatment_Paused_States + quint32 mSalineState = 0; ///< Saline State - Saline_Bolus_States + quint32 mHeparinState = 0; ///< Heparin State - Heparin_Bolus_States + }; + + MTreatmentStates() { } + + bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr) override; + Data data ( ) const ; +}; +} + +typedef Model::MTreatmentStates::Data TreatmentStatesData; Index: sources/view/VView.h =================================================================== diff -u -r94c3fb6bbcf932b1f50a2d616dc600e3c449afe4 -r43ae56f762e6f3e1416d39e3d16f9103fc597e41 --- sources/view/VView.h (.../VView.h) (revision 94c3fb6bbcf932b1f50a2d616dc600e3c449afe4) +++ sources/view/VView.h (.../VView.h) (revision 43ae56f762e6f3e1416d39e3d16f9103fc597e41) @@ -149,7 +149,7 @@ /* Data - States */ \ REGISTER_TYPE( VTDOpMode ) \ REGISTER_TYPE( VPreTreatmentStates ) \ - REGISTER_TYPE( VHDTreatmentStates ) \ + REGISTER_TYPE( VTDTreatmentStates ) \ REGISTER_TYPE( VPostTreatmentStates ) \ /* In-Treatment - Data */ \ REGISTER_TYPE( VTreatmentBloodFlow ) \ Index: sources/view/hd/data/pretreatment/VPreTreatmentStatesData.cpp =================================================================== diff -u -ra5760947d3ed0d2748ba023a1c25e3c6aa0b1de1 -r43ae56f762e6f3e1416d39e3d16f9103fc597e41 --- sources/view/hd/data/pretreatment/VPreTreatmentStatesData.cpp (.../VPreTreatmentStatesData.cpp) (revision a5760947d3ed0d2748ba023a1c25e3c6aa0b1de1) +++ sources/view/hd/data/pretreatment/VPreTreatmentStatesData.cpp (.../VPreTreatmentStatesData.cpp) (revision 43ae56f762e6f3e1416d39e3d16f9103fc597e41) @@ -21,7 +21,7 @@ /*! - * \brief VHDTreatmentStates::onActionReceive + * \brief VTDTreatmentStates::onActionReceive * \details sets the properties for the received data of Treatment States * \param vData - Treatment States data */ Fisheye: Tag 43ae56f762e6f3e1416d39e3d16f9103fc597e41 refers to a dead (removed) revision in file `sources/view/hd/data/treatment/VHDTreatmentStatesData.cpp'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 43ae56f762e6f3e1416d39e3d16f9103fc597e41 refers to a dead (removed) revision in file `sources/view/hd/data/treatment/VHDTreatmentStatesData.h'. Fisheye: No comparison available. Pass `N' to diff? Index: sources/view/td/data/treatment/VTDTreatmentStatesData.cpp =================================================================== diff -u --- sources/view/td/data/treatment/VTDTreatmentStatesData.cpp (revision 0) +++ sources/view/td/data/treatment/VTDTreatmentStatesData.cpp (revision 43ae56f762e6f3e1416d39e3d16f9103fc597e41) @@ -0,0 +1,228 @@ +/*! + * + * Copyright (c) 2021-2024 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file VTDTreatmentStatesData.cpp + * \author (last) Behrouz NematiPour + * \date (last) 20-Jul-2023 + * \author (original) Behrouz NematiPour + * \date (original) 11-Apr-2021 + * + */ +#include "VTDTreatmentStatesData.h" +#include + +// Project +#include "GuiController.h" + +//ENUM Checks +//TODO: ---------- Improve me ---------- +// This part of the code is a WIP example to fail the build if the enum is changed but UI doesn't aware. +#define ENUM_PRINT( vTYPE ) {} // qDebug() << v##vTYPE +#define ENUM_CHECK_O( vTYPE, vVALUE ) vTYPE v##vTYPE = static_cast(vVALUE); switch(v##vTYPE) +#define ENUM_CHECK( vTYPE, vENUM ) case vTYPE::vENUM : { if ( vTYPE::vENUM == v##vTYPE) ENUM_PRINT(vTYPE); } break; +#define ENUM_CHECK_C( vTYPE, vENUM ) case vTYPE::vENUM : break; +#define ENUM_READ( vTYPE, vENUM, vSTATE ) vSTATE( vTYPE::vENUM == v##vTYPE); + + +VIEW_DEF_CLASS(VTDTreatmentStates) + +/*! + * \brief VTreatmentAdjustmentSaline::initConnections + * \details Initializes the message(s) connection + * \note This class not only listens to its dedicated message TreatmentStatesData, + * But also listens to other messages which affect ultrafiltration and saline bolus state. + * These extra messages are AdjustSalineResponseData , AdjustUltrafiltrationStateResponseData. + * Which ever comes first will set its related properties. + * Since the properties wont set twice if they have the same value it does not affect performance so much. + * Also FW suppose to send the TreatmentStatesData related message immediately after the two others. + */ +void VTDTreatmentStates::initConnections() { + ACTION_VIEW_CONNECTION(TreatmentStatesData ); + // these messages sending the same states as in message 15 (TreatmentStates above) + // it is redundant and with a better messaging protocol + // the one in the Adjustment messages should be removed since it is not sent on each state change + // and will be sent only once to the request. + ACTION_VIEW_CONNECTION(AdjustUltrafiltrationStateResponseData ); +} + +/*! + * \brief VTDTreatmentStates::onActionReceive + * \details sets the properties for the received data of Treatment States + * \param vData - Treatment States data + */ +void VTDTreatmentStates::onActionReceive(const TreatmentStatesData &vData) +{ + subMode ( vData.mSubMode ); + ufState ( vData.mIsolatedUFState ); + salineState ( vData.mSalineState ); + + salineState ( vData.mSalineState ); + + // Ultrafiltration states + + // Saline Bolus states + ENUM_CHECK_O( GuiSalineStates, vData.mSalineState ) { + ENUM_CHECK ( GuiSalineStates, SALINE_BOLUS_STATE_IDLE ) + ENUM_CHECK ( GuiSalineStates, SALINE_BOLUS_STATE_WAIT_FOR_PUMPS_STOP ) + ENUM_CHECK ( GuiSalineStates, SALINE_BOLUS_STATE_IN_PROGRESS ) + ENUM_CHECK ( GuiSalineStates, SALINE_BOLUS_STATE_MAX_DELIVERED ) + ENUM_CHECK_C( GuiSalineStates, NUM_OF_SALINE_BOLUS_STATES ) } + ENUM_READ ( GuiSalineStates, SALINE_BOLUS_STATE_IDLE , sbIdle ); + ENUM_READ ( GuiSalineStates, SALINE_BOLUS_STATE_WAIT_FOR_PUMPS_STOP , sbWaitPump ); + ENUM_READ ( GuiSalineStates, SALINE_BOLUS_STATE_IN_PROGRESS , sbRunning ); + ENUM_READ ( GuiSalineStates, SALINE_BOLUS_STATE_MAX_DELIVERED , sbMaxReached ); + + // Heparin States + _heparin = false; + ENUM_CHECK_O( GuiHeparinStates, vData.mHeparinState ) { + ENUM_CHECK ( GuiHeparinStates, HEPARIN_STATE_OFF ) + ENUM_CHECK ( GuiHeparinStates, HEPARIN_STATE_STOPPED ) + ENUM_CHECK ( GuiHeparinStates, HEPARIN_STATE_PAUSED ) + ENUM_CHECK ( GuiHeparinStates, HEPARIN_STATE_INITIAL_BOLUS ) + ENUM_CHECK ( GuiHeparinStates, HEPARIN_STATE_DISPENSING ) + ENUM_CHECK ( GuiHeparinStates, HEPARIN_STATE_COMPLETED ) + ENUM_CHECK ( GuiHeparinStates, HEPARIN_STATE_EMPTY ) + ENUM_CHECK_C( GuiHeparinStates, NUM_OF_HEPARIN_STATES ) } + ENUM_READ ( GuiHeparinStates, HEPARIN_STATE_OFF , hpOff ); _heparin = _heparin || _hpOff ; + ENUM_READ ( GuiHeparinStates, HEPARIN_STATE_STOPPED , hpStopped ); _heparin = _heparin || _hpStopped ; + ENUM_READ ( GuiHeparinStates, HEPARIN_STATE_PAUSED , hpPaused ); _heparin = _heparin || _hpPaused ; + ENUM_READ ( GuiHeparinStates, HEPARIN_STATE_INITIAL_BOLUS , hpInitial_bolus ); _heparin = _heparin || _hpInitial_bolus ; + ENUM_READ ( GuiHeparinStates, HEPARIN_STATE_DISPENSING , hpDispensing ); _heparin = _heparin || _hpDispensing ; + ENUM_READ ( GuiHeparinStates, HEPARIN_STATE_COMPLETED , hpCompleted ); _heparin = _heparin || _hpCompleted ; + ENUM_READ ( GuiHeparinStates, HEPARIN_STATE_EMPTY , hpEmpty ); _heparin = _heparin || _hpEmpty ; + emit heparinChanged(_heparin); + + // Treatment states + ENUM_CHECK_O( GuiTreatmentStates, vData.mSubMode ) { + ENUM_CHECK ( GuiTreatmentStates, TREATMENT_START_STATE ) + ENUM_CHECK ( GuiTreatmentStates, TREATMENT_BLOOD_PRIME_STATE ) + ENUM_CHECK ( GuiTreatmentStates, TREATMENT_DIALYSIS_STATE ) + ENUM_CHECK ( GuiTreatmentStates, TREATMENT_PAUSED_STATE ) + ENUM_CHECK ( GuiTreatmentStates, TREATMENT_RINSEBACK_STATE ) + ENUM_CHECK ( GuiTreatmentStates, TREATMENT_RECIRC_STATE ) + ENUM_CHECK ( GuiTreatmentStates, TREATMENT_END_STATE ) + ENUM_CHECK ( GuiTreatmentStates, TREATMENT_ISO_UF_STATE ) + ENUM_CHECK ( GuiTreatmentStates, TREATMENT_SALINE_BOLUS_STATE ) + ENUM_CHECK ( GuiTreatmentStates, TREATMENT_DIALYSATE_PAUSED_STATE ) + ENUM_CHECK_C( GuiTreatmentStates, NUM_OF_TREATMENT_STATES ) } + // Treatment states - Basics + ENUM_READ ( GuiTreatmentStates, TREATMENT_START_STATE , txStart ); + + // Treatment states - Dialysis + bool mDialysis = vData.mSubMode == GuiTreatmentStates ::TREATMENT_DIALYSIS_STATE ; + if ( mDialysis ) { + ENUM_CHECK_O( GuiDialysisState, vData.mDialysisState ) { + ENUM_CHECK ( GuiDialysisState, DIALYSIS_UF_STATE ) + ENUM_CHECK ( GuiDialysisState, DIALYSIS_UF_PAUSED_STATE ) + ENUM_CHECK_C( GuiDialysisState, NUM_OF_DIALYSIS_STATES ) } + ENUM_READ ( GuiDialysisState, DIALYSIS_UF_STATE , dyUltrafiltration ); + ENUM_READ ( GuiDialysisState, DIALYSIS_UF_PAUSED_STATE , dySalineBolus ); + } + txDialysis ( mDialysis ); // it's the main dialysis event so moved last to have all the sub-dialysis-states updated prior to. + + + // TODO : Check with Qt.5.15.10 + // NOTE : For Rinseback and Recirculate + // 1 - it seems we may never need the txRinseback + // since in the Rinseback state parameter of the Treatment State the first state of each has the same meaning + // it may only be used to know when those parameters have valid values to update the properties. + // Kept for now because cannot be sure that it will change later or not. + // 2 - if there could be a way to export enums to qml and qml can raise an error if an incorrect enum used, + // then it would be absolutely preferred to use enum instead of properties + // currently if just one property being defined/used to send the current state to the qml, there is no way to make sure if incorrect/undefined + // enum is used or not. + // in Qt user/developer can literally type GuiActions.abcdefg and qml will never complain and only if compared with the state will return false. + + // Treatment states - Rinse back + // Rinseback states + bool mRinseback = vData.mSubMode == GuiTreatmentStates ::TREATMENT_RINSEBACK_STATE ; + if ( mRinseback ) { + ENUM_CHECK_O( GuiRinsebackStates, vData.mRinsebackState ) { + ENUM_CHECK ( GuiRinsebackStates, RINSEBACK_STOP_INIT_STATE ) + ENUM_CHECK ( GuiRinsebackStates, RINSEBACK_RUN_STATE ) + ENUM_CHECK ( GuiRinsebackStates, RINSEBACK_PAUSED_STATE ) + ENUM_CHECK ( GuiRinsebackStates, RINSEBACK_STOP_STATE ) + ENUM_CHECK ( GuiRinsebackStates, RINSEBACK_RUN_ADDITIONAL_STATE ) + ENUM_CHECK ( GuiRinsebackStates, RINSEBACK_RECONNECT_PATIENT_STATE ) + ENUM_CHECK_C( GuiRinsebackStates, NUM_OF_RINSEBACK_STATES ) } + ENUM_READ ( GuiRinsebackStates, RINSEBACK_STOP_INIT_STATE , rbInit ); + ENUM_READ ( GuiRinsebackStates, RINSEBACK_RUN_STATE , rbRun ); + ENUM_READ ( GuiRinsebackStates, RINSEBACK_PAUSED_STATE , rbPaused ); + ENUM_READ ( GuiRinsebackStates, RINSEBACK_STOP_STATE , rbStop ); + ENUM_READ ( GuiRinsebackStates, RINSEBACK_RUN_ADDITIONAL_STATE , rbAdditional ); + ENUM_READ ( GuiRinsebackStates, RINSEBACK_RECONNECT_PATIENT_STATE , rbReconnect ); + } + txRinseback ( mRinseback ); // it's the main rinseback event so moved last to have all the sub-rinseback-states updated prior to. + + // Recirculate states + bool mRecirculate = vData.mSubMode == GuiTreatmentStates ::TREATMENT_RECIRC_STATE ; + if ( mRecirculate ) { + ENUM_CHECK_O( GuiRecirculateStates, vData.mRecirculateState ) { + ENUM_CHECK ( GuiRecirculateStates, TREATMENT_RECIRC_DISCONNECT_PATIENT_STATE ) + ENUM_CHECK ( GuiRecirculateStates, TREATMENT_RECIRC_RECIRC_STATE ) + ENUM_CHECK ( GuiRecirculateStates, TREATMENT_RECIRC_STOPPED_STATE ) + ENUM_CHECK ( GuiRecirculateStates, TREATMENT_RECIRC_RECONNECT_PATIENT_STATE ) + ENUM_CHECK_C( GuiRecirculateStates, NUM_OF_TREATMENT_RECIRC_STATES ) } + ENUM_READ ( GuiRecirculateStates, TREATMENT_RECIRC_DISCONNECT_PATIENT_STATE , rcDisconnect ); + ENUM_READ ( GuiRecirculateStates, TREATMENT_RECIRC_RECIRC_STATE , rcStarted ); + ENUM_READ ( GuiRecirculateStates, TREATMENT_RECIRC_STOPPED_STATE , rcStopped ); + ENUM_READ ( GuiRecirculateStates, TREATMENT_RECIRC_RECONNECT_PATIENT_STATE , rcReconnect ); + } + txRecirculate ( mRecirculate ); // it's the main recirculate even so moved last to have all the sub-recirculate-states updated prior to. + + // Blood Prime states + bool mBloodPrime = vData.mSubMode == GuiTreatmentStates ::TREATMENT_BLOOD_PRIME_STATE ; + if ( mBloodPrime ) { + ENUM_CHECK_O( GuiBloodPrimeStates, vData.mBloodPrimeState ) { + ENUM_CHECK ( GuiBloodPrimeStates, BLOOD_PRIME_RAMP_STATE ) + ENUM_CHECK_C( GuiBloodPrimeStates, NUM_OF_BLOOD_PRIME_STATES ) } + ENUM_READ ( GuiBloodPrimeStates, BLOOD_PRIME_RAMP_STATE , bpRamp ); + } + txBloodPrime ( mBloodPrime ); + + // Treatment End states + bool mTreatmentEnd = vData.mSubMode == GuiTreatmentStates ::TREATMENT_END_STATE ; + if ( mTreatmentEnd ) { + ENUM_CHECK_O( GuiTreatmentEndStates, vData.mTreatmentEndState ) { + ENUM_CHECK ( GuiTreatmentEndStates, TREATMENT_END_WAIT_FOR_RINSEBACK_STATE ) + ENUM_CHECK ( GuiTreatmentEndStates, TREATMENT_END_PAUSED_STATE ) + ENUM_CHECK_C( GuiTreatmentEndStates, NUM_OF_TREATMENT_END_STATES ) } + ENUM_READ ( GuiTreatmentEndStates, TREATMENT_END_WAIT_FOR_RINSEBACK_STATE , teWaitRinseback ); + ENUM_READ ( GuiTreatmentEndStates, TREATMENT_END_PAUSED_STATE , tePaused ); + } + txEnd ( mTreatmentEnd ); + + // Treatment Stop states + bool mTreatmentStop = vData.mSubMode == GuiTreatmentStates ::TREATMENT_PAUSED_STATE ; + if ( mTreatmentStop ) { + ENUM_CHECK_O( GuiTreatmentPausedStates, vData.mTreatmentStopState ) { + ENUM_CHECK ( GuiTreatmentPausedStates, TREATMENT_PAUSED_RECIRC_STATE ) + ENUM_CHECK ( GuiTreatmentPausedStates, TREATMENT_PAUSED_RECIRC_DIALYSATE_ONLY_STATE ) + ENUM_CHECK ( GuiTreatmentPausedStates, TREATMENT_PAUSED_RECIRC_BLOOD_ONLY_STATE ) + ENUM_CHECK ( GuiTreatmentPausedStates, TREATMENT_PAUSED_NO_RECIRC_STATE ) + ENUM_CHECK ( GuiTreatmentPausedStates, TREATMENT_PAUSED_RECOVER_BLOOD_DETECT_STATE ) + ENUM_CHECK_C( GuiTreatmentPausedStates, NUM_OF_TREATMENT_PAUSED_STATES ) } + ENUM_READ ( GuiTreatmentPausedStates, TREATMENT_PAUSED_RECIRC_STATE , tsRecirculate ) + ENUM_READ ( GuiTreatmentPausedStates, TREATMENT_PAUSED_RECIRC_DIALYSATE_ONLY_STATE, tsRecirculateDialysate ) + ENUM_READ ( GuiTreatmentPausedStates, TREATMENT_PAUSED_RECIRC_BLOOD_ONLY_STATE , tsRecirculateBlood ) + ENUM_READ ( GuiTreatmentPausedStates, TREATMENT_PAUSED_NO_RECIRC_STATE , tsRecirculateNo ) + ENUM_READ ( GuiTreatmentPausedStates, TREATMENT_PAUSED_RECOVER_BLOOD_DETECT_STATE , tsRecoverBloodDetect ) + } + txStop ( mTreatmentStop ); + + txTreatment ( _txDialysis || _txStop ); +} + +/*! + * \brief VTDTreatmentStates::onActionReceive + * \details message handler for the message AdjustUltrafiltrationStateResponse data + * \param vData - AdjustUltrafiltrationStateResponse data + */ +void VTDTreatmentStates::onActionReceive(const AdjustUltrafiltrationStateResponseData &) +{ + // Ultrafiltration states +} Index: sources/view/td/data/treatment/VTDTreatmentStatesData.h =================================================================== diff -u --- sources/view/td/data/treatment/VTDTreatmentStatesData.h (revision 0) +++ sources/view/td/data/treatment/VTDTreatmentStatesData.h (revision 43ae56f762e6f3e1416d39e3d16f9103fc597e41) @@ -0,0 +1,129 @@ +/*! + * + * Copyright (c) 2021-2024 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file VTDTreatmentStatesData.h + * \author (last) Behrouz NematiPour + * \date (last) 20-Jul-2023 + * \author (original) Behrouz NematiPour + * \date (original) 11-Apr-2021 + * + */ +#pragma once + +// Qt +#include + +// Project +#include "main.h" // Doxygen : do not remove +#include "VView.h" +#include "MTreatmentStatesData.h" +#include "MTreatmentAdjustUltrafiltrationStateResponse.h" +#include "MTreatmentAdjustSalineResponse.h" +#include "MTreatmentAdjustHeparinResponse.h" + +// namespace +namespace View { + +/*! + * \brief The VTDTreatmentStates class + * \details View for Model's data representation. + * + * \sa Model::MTreatmentStates + * + */ +class VTDTreatmentStates : public QObject +{ + Q_OBJECT + + // This property should not be used in QML since it need exposed enum + // exposed enum usage in QML is not suggested since QML will not error out on any issue + PROPERTY( quint32, subMode , 0) + PROPERTY( quint32, ufState , 0) + PROPERTY( quint32, salineState , 0) + + // these groups of properties are mutually exclusive + // and if one becomes true the other ones become false at the same time + // so on each change we were going to have multiple signal emits. + // but since it is not happening more often Property is used. + // otherwise it should be implemented as a single signal with these properties as parameters.\n + // also start UF_START_STATE should not be used often + // because it's only useful in FW implementation and it immediately changes to another state. + + + // ---- Treatment states + // ---- Treatment states - Basics + // not used yet since the Treatment Start/stop/end has not been implemented yet. + PROPERTY( bool , txStart , false) ///< TREATMENT_START_STATE = 0 # Start treatment - initialize treatment and go to blood prime state + PROPERTY( bool , txBloodPrime , false) ///< TREATMENT_BLOOD_PRIME_STATE = 1 # Prime blood-side of dialyzer with gradual ramp for 1 min. while dialyzer is bypassed. No dialysis or UF taking place. No treatment time. + PROPERTY( bool , txDialysis , false) ///< TREATMENT_DIALYSIS_STATE = 2 # Perform dialysis. Deliver Heparin as prescribed. Deliver UF as prescribed. Handle saline boluses as requested + PROPERTY( bool , txStop , false) ///< TREATMENT_PAUSED_STATE = 3 # Treatment stopped. All pumps off. Dializer bypassed + PROPERTY( bool , txTreatment , false) ///< TREATMENT_PAUSED_STATE = 3 || TREATMENT_DIALYSIS_STATE = 2 + PROPERTY( bool , txRinseback , false) ///< TREATMENT_RINSEBACK_STATE = 4 # Perform rinseback with saline. Dialyzer bypassed. Dialysate recirculating + PROPERTY( bool , txRecirculate , false) ///< TREATMENT_RECIRC_STATE = 5 # Recirculate saline and dialysate while patient disconnected. Blood lines open and shunted. Dialyzer is bypassed + PROPERTY( bool , txEnd , false) ///< TREATMENT_END_STATE = 6 # Dialysis has ended. Blood pump slowed. Dialyzer is bypassed. Dialysate is recirculated. User can rinseback + + // ---- Ultrafiltration states + PROPERTY( bool , ufPaused , false) ///< UF_PAUSED_STATE = 1 # Paused state of the ultrafiltration state machine + PROPERTY( bool , ufRunning , false) ///< UF_RUNNING_STATE = 2 # Running state of the ultrafiltration state machine + + // ---- Saline Bolus states + PROPERTY( bool , sbIdle , true ) ///< SALINE_BOLUS_STATE_IDLE = 0 # No saline bolus delivery is in progress + PROPERTY( bool , sbWaitPump , false) ///< SALINE_BOLUS_STATE_WAIT_FOR_PUMPS_STOP = 1 # Wait for pumps to stop before starting bolus + PROPERTY( bool , sbRunning , false) ///< SALINE_BOLUS_STATE_IN_PROGRESS = 2 # A saline bolus delivery is in progress + PROPERTY( bool , sbMaxReached , false) ///< SALINE_BOLUS_STATE_MAX_DELIVERED = 3 # Maximum saline bolus volume reached - no more saline bolus deliveries allowed + + // ---- Heparin states + PROPERTY( bool , hpOff , true ) ///< HEPARIN_STATE_OFF = 0 # No heparin delivery is in progress + PROPERTY( bool , hpStopped , false) ///< HEPARIN_STATE_STOPPED = 1 # Heparin delivery stopped by alarm or not yet started + PROPERTY( bool , hpPaused , false) ///< HEPARIN_STATE_PAUSED = 2 # Heparin delivery paused + PROPERTY( bool , hpInitial_bolus , false) ///< HEPARIN_STATE_INITIAL_BOLUS = 3 # Initial heparin bolus delivery in progress + PROPERTY( bool , hpDispensing , false) ///< HEPARIN_STATE_DISPENSING = 4 # Gradual heparin dispensing in progress + PROPERTY( bool , hpCompleted , false) ///< HEPARIN_STATE_COMPLETED = 5 # Heparin delivery stopped due to the set stop time before treatment end + PROPERTY( bool , hpEmpty , false) ///< HEPARIN_STATE_EMPTY = 6 # Heparin Syringe empty + PROPERTY( bool , heparin , false) ///< The heparin state is an asynchronous state + + // Dialysis States + PROPERTY( bool , dyStart , true ) ///< Start state of the dialysis sub-mode state machine + PROPERTY( bool , dyUltrafiltration , false) ///< Ultrafiltration state of the dialysis sub-mode state machine + PROPERTY( bool , dySalineBolus , false) ///< Saline bolus state of the dialysis sub-mode state machine + + // Rinseback States + PROPERTY( bool , rbInit , true ) ///< RINSEBACK_STOP_INIT_STATE = 0 # Start state (stopped) of the rinseback sub-mode state machine + PROPERTY( bool , rbRun , false) ///< RINSEBACK_RUN_STATE = 1 # Rinseback running state of the rinseback sub-mode state machine + PROPERTY( bool , rbPaused , false) ///< RINSEBACK_PAUSED_STATE = 2 # Rinseback paused state of the rinseback sub-mode state machine + PROPERTY( bool , rbStop , false) ///< RINSEBACK_STOP_STATE = 3 # Rinseback stopped (done) state of the rinseback sub-mode state machine + PROPERTY( bool , rbAdditional , false) ///< RINSEBACK_RUN_ADDITIONAL_STATE = 4 # Additional rinseback volume (10 mL) state of the rinseback sub-mode state machine + PROPERTY( bool , rbReconnect , false) ///< RINSEBACK_RECONNECT_PATIENT_STATE = 5 # Rinseback reconnect state of the rinseback sub-mode state machine + + // Recirculate states + PROPERTY( bool , rcDisconnect , true ) ///< TREATMENT_RECIRC_DISCONNECT_PATIENT_STATE = 0 # Disconnect patient state of the treatment re-circulate sub-mode state machine + PROPERTY( bool , rcStarted , false) ///< TREATMENT_RECIRC_RECIRC_STATE = 1 # Re-circulate Dialysate state of the treatment re-circulate sub-mode state machine + PROPERTY( bool , rcStopped , false) ///< TREATMENT_RECIRC_STOPPED_STATE = 2 # Stopped state of the treatment re-circulate sub-mode state machine + PROPERTY( bool , rcReconnect , false) ///< TREATMENT_RECIRC_RECONNECT_PATIENT_STATE = 3 # Reconnect patient state of the treatment re-circulate sub-mode state machine + + // Blood Prime + PROPERTY( bool , bpRamp , true ) ///< BLOOD_PRIME_RAMP_STATE = 0 # Ramp state of the blood prime sub-mode state machine + + // Treatment End + PROPERTY( bool , teWaitRinseback , true ) ///< TREATMENT_END_WAIT_FOR_RINSEBACK_STATE = 0 # Wait for rinseback state of the treatment end sub-mode state machine + PROPERTY( bool , tePaused , false) ///< TREATMENT_END_PAUSED_STATE = 1 # Paused state of the treatment end sub-mode state machine + + // Treatment Stop + PROPERTY( bool , tsRecirculate , true ) ///< TREATMENT_STOP_RECIRC_STATE = 0, Dialysate and Blood re-circulation state of the treatment stop sub-mode state machine + PROPERTY( bool , tsRecirculateDialysate , false) ///< TREATMENT_STOP_RECIRC_DIALYSATE_ONLY_STATE= 1, Re-circulate Dialysate only state of the treatment re-circulate sub-mode state machine + PROPERTY( bool , tsRecirculateBlood , false) ///< TREATMENT_STOP_RECIRC_BLOOD_ONLY_STATE = 2, Re-circulate Blood only state of the treatment re-circulate sub-mode state machine + PROPERTY( bool , tsRecirculateNo , false) ///< TREATMENT_STOP_NO_RECIRC_STATE = 3, No re-circulation state of the treatment stop sub-mode state machine + PROPERTY( bool , tsRecoverBloodDetect , false) ///< TREATMENT_STOP_RECOVER_BLOOD_DETECT_STATE = 4, Treatment stop recover blood detect state + + // class definition + VIEW_DEC_CLASS(VTDTreatmentStates) + + // slots for received data messages (onActionReceive) + VIEW_DEC_SLOT (TreatmentStatesData ) // Treatment States Broadcast messages (This class original receiver) + VIEW_DEC_SLOT (AdjustUltrafiltrationStateResponseData ) // Ultrafiltration state Adjustment response message +}; +}