Index: denali.pro =================================================================== diff -u -r5babb1ac6c9edda7f89bae8bb92d56fe733e8206 -r968c7861b6caf1906c6b3ac34ae13018c6f1bf2b --- denali.pro (.../denali.pro) (revision 5babb1ac6c9edda7f89bae8bb92d56fe733e8206) +++ denali.pro (.../denali.pro) (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -114,7 +114,6 @@ \ # Controllers sources/ApplicationController.h \ sources/device/DeviceController.h \ - sources/model/hd/data/MHDBloodLeakData.h \ sources/model/ui/data/MUIBloodPressureData.h \ sources/storage/Settings.h \ sources/storage/TreatmentLog.h \ @@ -202,6 +201,9 @@ sources/model/hd/data/MHDGeneralEvent.h \ sources/model/hd/data/MHDAccelerometerData.h \ sources/model/hd/data/MHDSyringePumpData.h \ + sources/model/hd/data/MHDAirBubbleData.h \ + sources/model/hd/data/MHDAirTrapData.h \ + sources/model/hd/data/MHDBloodLeakData.h \ sources/model/hd/data/MTreatmentRangesData.h \ sources/model/hd/data/treatment/MTreatmentTimeData.h \ sources/model/hd/data/treatment/MTreatmentFlowsData.h \ @@ -241,6 +243,7 @@ sources/model/dg/data/MDGTemperaturesData.h \ sources/model/dg/data/MDGValvesStatesData.h \ sources/model/dg/data/MDGAccelerometerData.h \ + sources/model/dg/data/MDGConductivityData.h \ \ # CANBus sources/canbus/CanInterface.h \ sources/canbus/FrameInterface.h \ @@ -319,6 +322,9 @@ \ # ---------- Views - HD - Data sources/view/hd/data/VHDAccelerometerData.h \ sources/view/hd/data/VHDSyringePumpData.h \ + sources/view/hd/data/VHDAirBubbleData.h \ + sources/view/hd/data/VHDAirTrapData.h \ + sources/view/hd/data/VHDBloodLeakData.h \ sources/view/hd/data/VTreatmentRanges.h \ sources/view/hd/data/treatment/VTreatmentTime.h \ sources/view/hd/data/treatment/VTreatmentBloodFlow.h \ @@ -348,6 +354,7 @@ sources/view/dg/data/VDGTemperaturesData.h \ sources/view/dg/data/VDGValvesStatesData.h \ sources/view/dg/data/VDGAccelerometerData.h \ + sources/view/dg/data/VDGConductivityData.h \ \ # Storage sources/storage/StorageGlobals.h \ sources/storage/Logger.h \ @@ -445,6 +452,9 @@ sources/model/hd/data/MHDGeneralEvent.cpp \ sources/model/hd/data/MHDAccelerometerData.cpp \ sources/model/hd/data/MHDSyringePumpData.cpp \ + sources/model/hd/data/MHDAirBubbleData.cpp \ + sources/model/hd/data/MHDAirTrapData.cpp \ + sources/model/hd/data/MHDBloodLeakData.cpp \ sources/model/hd/data/MTreatmentRangesData.cpp \ sources/model/hd/data/treatment/MTreatmentTimeData.cpp \ sources/model/hd/data/treatment/MTreatmentFlowsData.cpp \ @@ -487,6 +497,7 @@ sources/model/dg/data/MDGTemperaturesData.cpp \ sources/model/dg/data/MDGValvesStatesData.cpp \ sources/model/dg/data/MDGAccelerometerData.cpp \ + sources/model/dg/data/MDGConductivityData.cpp \ \ # CANBus sources/canbus/CanInterface.cpp \ sources/canbus/FrameInterface.cpp \ @@ -559,6 +570,9 @@ \ # ---------- Views - HD - Data sources/view/hd/data/VHDAccelerometerData.cpp \ sources/view/hd/data/VHDSyringePumpData.cpp \ + sources/view/hd/data/VHDAirBubbleData.cpp \ + sources/view/hd/data/VHDAirTrapData.cpp \ + sources/view/hd/data/VHDBloodLeakData.cpp \ \ # ---------- Views - HD - Data - Pre-Treatment sources/view/hd/data/pretreatment/VPreTreatmentSelfTestNoCartridgeData.cpp \ sources/view/hd/data/pretreatment/VPreTreatmentSelfTestDryData.cpp \ @@ -594,6 +608,7 @@ sources/view/dg/data/VDGTemperaturesData.cpp \ sources/view/dg/data/VDGValvesStatesData.cpp \ sources/view/dg/data/VDGAccelerometerData.cpp \ + sources/view/dg/data/VDGConductivityData.cpp \ \ # Storage sources/storage/StorageGlobals.cpp \ sources/storage/FileHandler.cpp \ Index: denali.pro.user =================================================================== diff -u -r200398eaf784dd2965023151086ba1939d2eb746 -r968c7861b6caf1906c6b3ac34ae13018c6f1bf2b --- denali.pro.user (.../denali.pro.user) (revision 200398eaf784dd2965023151086ba1939d2eb746) +++ denali.pro.user (.../denali.pro.user) (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -1,6 +1,6 @@ - + EnvironmentId Index: sources/canbus/MessageInterpreter.cpp =================================================================== diff -u -r30577e4e9fd58a2e0e3115d0239a30e20cc04f80 -r968c7861b6caf1906c6b3ac34ae13018c6f1bf2b --- sources/canbus/MessageInterpreter.cpp (.../MessageInterpreter.cpp) (revision 30577e4e9fd58a2e0e3115d0239a30e20cc04f80) +++ sources/canbus/MessageInterpreter.cpp (.../MessageInterpreter.cpp) (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -429,6 +429,9 @@ // ----- Datum case Gui::GuiActionType::ID_HDAccelerometerData : ok = notify(vMessage, vData, Gui::GuiActionType::ID_HDAccelerometerData ); break; case Gui::GuiActionType::ID_HDSyringePumpData : ok = notify(vMessage, vData, Gui::GuiActionType::ID_HDSyringePumpData ); break; + case Gui::GuiActionType::ID_HDAirBubbleData : ok = notify(vMessage, vData, Gui::GuiActionType::ID_HDAirBubbleData ); break; + case Gui::GuiActionType::ID_HDAirTrapData : ok = notify(vMessage, vData, Gui::GuiActionType::ID_HDAirTrapData ); break; + case Gui::GuiActionType::ID_HDBloodLeakData : ok = notify(vMessage, vData, Gui::GuiActionType::ID_HDBloodLeakData ); break; // ----- Datum - Treatment case Gui::GuiActionType::ID_TreatmentRanges : ok = notify(vMessage, vData, Gui::GuiActionType::ID_TreatmentRanges ); break; @@ -546,6 +549,7 @@ case Gui::GuiActionType::ID_DGDebugText : ok = notify(vMessage, vData, Gui::GuiActionType::ID_DGDebugText ); break; case Gui::GuiActionType::ID_DGGeneralEvent : ok = notify(vMessage, vData, Gui::GuiActionType::ID_DGGeneralEvent ); break; case Gui::GuiActionType::ID_DGAccelerometerData : ok = notify(vMessage, vData, Gui::GuiActionType::ID_DGAccelerometerData ); break; + case Gui::GuiActionType::ID_DGConductivityData : ok = notify(vMessage, vData, Gui::GuiActionType::ID_DGConductivityData ); break; // ----- Datum - Pre-Treatment progress case Gui::GuiActionType::ID_DGFilterFlushData : ok = notify(vMessage, vData, Gui::GuiActionType::ID_DGFilterFlushData ); break; // ----- Datum - Disinfection Index: sources/gui/GuiGlobals.h =================================================================== diff -u -r161d1431cc3507cd430f54af6aa47dab5145d472 -r968c7861b6caf1906c6b3ac34ae13018c6f1bf2b --- sources/gui/GuiGlobals.h (.../GuiGlobals.h) (revision 161d1431cc3507cd430f54af6aa47dab5145d472) +++ sources/gui/GuiGlobals.h (.../GuiGlobals.h) (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -192,12 +192,14 @@ ID_DGLoadCellReadingsData = 0x0C00, // 12 ID_DGTemperaturesData = 0x2D00, // 45 ID_DGAccelerometerData = 0x3400, // 52 - + ID_DGConductivityData = 0x3100, // 49 // HD Data Messages ID_HDAccelerometerData = 0x3300, // 51 ID_HDSyringePumpData = 0x6900, // 105 + ID_HDBloodLeakData = 0x6C00, // 108 + ID_HDAirBubbleData = 0x9300, // 147 + ID_HDAirTrapData = 0x3E00, // 62 - // In-Treatment Adjustables ID_AdjustDurationReq = 0x1600, // 22 ID_AdjustDurationRsp = 0x1B00, // 27 Index: sources/gui/qml/dialogs/DiagnosticsDialog.qml =================================================================== diff -u -rebc82b5efe26c1081606fab06a1c99bb4f9c0098 -r968c7861b6caf1906c6b3ac34ae13018c6f1bf2b --- sources/gui/qml/dialogs/DiagnosticsDialog.qml (.../DiagnosticsDialog.qml) (revision ebc82b5efe26c1081606fab06a1c99bb4f9c0098) +++ sources/gui/qml/dialogs/DiagnosticsDialog.qml (.../DiagnosticsDialog.qml) (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -306,16 +306,12 @@ model: [ vTreatmentPressureOcclusion.arterialPressure .toFixed(2) , vTreatmentPressureOcclusion.venousPressure .toFixed(2) , - vTreatmentPressureOcclusion.bloodPumpOcclusion , - vTreatmentPressureOcclusion.dialysateInletPumpOcclusion , - vTreatmentPressureOcclusion.dialysateOutletPumpOcclusion + vTreatmentPressureOcclusion.bloodPumpOcclusion ] label: [ "PBA" , "PBo" , - "OB" , - "ODi" , - "ODo" , + "OB" , ] textObjectName: "_PressureOcclusionData" Index: sources/gui/qml/pages/endtreatment/rinseback/EndTreatmentRinsebackComplete.qml =================================================================== diff -u -r8a5dbf556a66524fbe4b60ac1573182a0bd27617 -r968c7861b6caf1906c6b3ac34ae13018c6f1bf2b --- sources/gui/qml/pages/endtreatment/rinseback/EndTreatmentRinsebackComplete.qml (.../EndTreatmentRinsebackComplete.qml) (revision 8a5dbf556a66524fbe4b60ac1573182a0bd27617) +++ sources/gui/qml/pages/endtreatment/rinseback/EndTreatmentRinsebackComplete.qml (.../EndTreatmentRinsebackComplete.qml) (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -35,6 +35,7 @@ title.text : qsTr("Rinseback Complete") instructionBased : true header.confirmVisible : vTreatmentTime .time_IsLeft + header.confirmEnabled : vTreatmentRinseback .isCompleted hasTimeout : vTreatmentRinseback .timeoutTotal timeoutValue : vTreatmentRinseback .timeoutCountDown * 60 Index: sources/model/MModel.h =================================================================== diff -u -r47c8f13876317ba36500400f894d96c9bce9eb17 -r968c7861b6caf1906c6b3ac34ae13018c6f1bf2b --- sources/model/MModel.h (.../MModel.h) (revision 47c8f13876317ba36500400f894d96c9bce9eb17) +++ sources/model/MModel.h (.../MModel.h) (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -57,6 +57,9 @@ #include "MTreatmentStopData.h" #include "MHDAccelerometerData.h" #include "MHDSyringePumpData.h" +#include "MHDAirTrapData.h" +#include "MHDBloodLeakData.h" +#include "MHDAirBubbleData.h" // Debugging Messages #include "MHDDebugText.h" @@ -88,6 +91,7 @@ #include "MDGTemperaturesData.h" #include "MDGValvesStatesData.h" #include "MDGAccelerometerData.h" +#include "MDGConductivityData.h" // Pre-Treatment #include "MPreTreatmentAdjustRequests.h" @@ -892,6 +896,9 @@ ACTION_RECEIVE_SIGNAL( TreatmentStopData ) \ ACTION_RECEIVE_SIGNAL( HDSyringePumpData ) \ ACTION_RECEIVE_SIGNAL( HDAccelerometerData ) \ + ACTION_RECEIVE_SIGNAL( HDBloodLeakData ) \ + ACTION_RECEIVE_SIGNAL( HDAirTrapData ) \ + ACTION_RECEIVE_SIGNAL( HDAirBubbleData ) \ /* Alarms */ \ ACTION_RECEIVE_SIGNAL( AlarmStatusData ) \ ACTION_RECEIVE_SIGNAL( AlarmTriggeredData ) \ @@ -912,6 +919,7 @@ ACTION_RECEIVE_SIGNAL( DGLoadCellReadingsData ) \ ACTION_RECEIVE_SIGNAL( DGTemperaturesData ) \ ACTION_RECEIVE_SIGNAL( DGAccelerometerData ) \ + ACTION_RECEIVE_SIGNAL( DGConductivityData ) \ \ ACTION_RECEIVE_SIGNAL( HDDebugTextData ) \ ACTION_RECEIVE_SIGNAL( DGDebugTextData ) \ Index: sources/model/dg/data/MDGConductivityData.cpp =================================================================== diff -u --- sources/model/dg/data/MDGConductivityData.cpp (revision 0) +++ sources/model/dg/data/MDGConductivityData.cpp (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -0,0 +1,57 @@ +/*! + * + * Copyright (c) 2019-2022 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 MDGConductivityData.cpp + * \author (last) Michael Garthwaite + * \date (last) 23-Feb-2022 + * \author (original) Michael Garthwaite + * \date (original) 23-Feb-2022 + * + */ +#include "MDGConductivityData.h" + +using namespace Model; + +QVariantList MDGConductivityData::parameters() const { + return { + _data.mRORejectionRatio .value, + _data.mCPi .value, + _data.mCPo .value, + _data.mCD1 .value, + _data.mCD2 .value, + }; +} + +bool MDGConductivityData::fromByteArray(const QByteArray &vByteArray, int *vIndex) { + int index = 0; // message data start position + if (GetValue(vByteArray, index, _data.mRORejectionRatio )) + if (GetValue(vByteArray, index, _data.mCPi )) + if (GetValue(vByteArray, index, _data.mCPo )) + if (GetValue(vByteArray, index, _data.mCD1 )) + if (GetValue(vByteArray, index, _data.mCD2 )) + return true ; + else { if(vIndex) *vIndex = index; return false; } + else { if(vIndex) *vIndex = index; return false; } + else { if(vIndex) *vIndex = index; return false; } + else { if(vIndex) *vIndex = index; return false; } + else { if(vIndex) *vIndex = index; return false; } +} + +/*! + * \brief MDGConductivity::data + * \details Provides model's Data from the received messages data values + * \return Data + */ +MDGConductivityData::Data MDGConductivityData::data() const { + Data data; + data.mRORejectionRatio = _data.mRORejectionRatio .value; + data.mCPi = _data.mCPi .value; + data.mCPo = _data.mCPo .value; + data.mCD1 = _data.mCD1 .value; + data.mCD2 = _data.mCD2 .value; + return data; +} Index: sources/model/dg/data/MDGConductivityData.h =================================================================== diff -u --- sources/model/dg/data/MDGConductivityData.h (revision 0) +++ sources/model/dg/data/MDGConductivityData.h (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -0,0 +1,90 @@ +/*! + * + * Copyright (c) 2019-2020 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 MDGConductivityData.h + * \author (last) Michael Garthwaite + * \date (last) 23-Feb-2022 + * \author (original) Michael Garthwaite + * \date (original) 23-Feb-2022 + * + */ +#pragma once + +// Qt +#include + +// Project +#include "MAbstract.h" +#include "types.h" + +// forward declarations +class tst_models; + +namespace Model { +/*! + * \brief The MDGConductivityData class + * \details The DG conductivity sensors data model + * + * | MSG | CAN ID | Box | Type | Ack | Src | Dst | Description | + * |:----:|:------:|:---:|:------:|:---:|:---:|:---:|:-----------: | + * |0x3100| 0x080 | 8 | 1 Hz | N | DG | All | DG Conductivity Data | + * + * | Payload || + * | || + * | #1:(F32) | \ref Data::mRORejectioRatio | + * | #2:(F32) | \ref Data::mCPi | + * | #3:(F32) | \ref Data::mCPo | + * | #4:(F32) | \ref Data::mCD1 | + * | #5:(F32) | \ref Data::mCD2 | + * + * + * \sa Data + * + *

Logging info

+ * | || + * | || + * | typeText | Datum | + * | unitText | DG | + * | infoText | ConductivityData | + * + */ +class MDGConductivityData : public MAbstract { + + // friends + friend class ::tst_models; + + QVariantList parameters() const override; + + struct { + Types::F32 mRORejectionRatio; + Types::F32 mCPi ; + Types::F32 mCPo ; + Types::F32 mCD1 ; + Types::F32 mCD2 ; + } _data; + +public: + Type_Enum typeText () const override { return Type_Enum::eDatum ; } + Unit_Enum unitText () const override { return Unit_Enum::eDG ; } + QString infoText () const override { return QString("ConductivityData") ; } + + struct Data{ + float mRORejectionRatio = 0; ///< RO Rejection Ratio + float mCPi = 0; ///< CPi conductivity + float mCPo = 0; ///< CPo conductivity + float mCD1 = 0; ///< CP1 conductivity + float mCD2 = 0; ///< CP2 conductivity + }; + + MDGConductivityData () { } + bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr) override; + Data data ( ) const ; + +}; +} + +typedef Model::MDGConductivityData::Data DGConductivityData; Index: sources/model/hd/data/MHDAirBubbleData.cpp =================================================================== diff -u --- sources/model/hd/data/MHDAirBubbleData.cpp (revision 0) +++ sources/model/hd/data/MHDAirBubbleData.cpp (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -0,0 +1,45 @@ +/*! + * + * Copyright (c) 2020-2020 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 MHDAirTrapData.cpp + * \author (last) Michael Gathwaite + * \date (last) 23-Feb-2022 + * \author (original) Michael Garthwaite + * \date (original) 23-Feb-2022 + * + */ +#include "MHDAirBubbleData.h" + +using namespace Model; + +QVariantList MHDAirBubbleData::parameters() const { + return { + _data.mVenousAirBubbleStatus .value, + _data.mVenousAirBubbleState .value, + }; +} + +bool MHDAirBubbleData::fromByteArray(const QByteArray &vByteArray, int *vIndex) { + int index = 0; + if (GetValue(vByteArray, index, _data.mVenousAirBubbleStatus )) + if (GetValue(vByteArray, index, _data.mVenousAirBubbleState )) + return true ; + else { if(vIndex) *vIndex = index; return false; } + else { if(vIndex) *vIndex = index; return false; } +} + +/*! + * \brief MHDAirTrapData::data + * \details Provides model's Data from the received messages data values + * \return Data + */ +MHDAirBubbleData::Data MHDAirBubbleData::data() const{ + Data data; + data.mVenousAirBubbleStatus = _data.mVenousAirBubbleStatus.value; + data.mVenousAirBubbleState = _data.mVenousAirBubbleState.value; + return data; +} Index: sources/model/hd/data/MHDAirBubbleData.h =================================================================== diff -u --- sources/model/hd/data/MHDAirBubbleData.h (revision 0) +++ sources/model/hd/data/MHDAirBubbleData.h (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -0,0 +1,84 @@ +/*! + * + * Copyright (c) 2020-2022 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 MHDAirBubbleData.h + * \author (last) Michael Garthwaite + * \author (original) Michael Garthwaite + * \date (last) 23-Feb-2022 + * \date (original) 23-Feb-2022 + * + */ +#pragma once + + +// Qt +#include + +// Project +#include "MAbstract.h" +#include "types.h" + +// forward declarations +class tst_models; + +namespace Model { + +/*! + * \brief The MHDAirBubbleData class + * \details The HD Air Bubble data model + * + * | MSG | CAN ID | Box | Type | Ack | Src | Dst | Description | + * |:----:|:------:|:---:|:------:|:---:|:---:|:---:|:-----------: | + * |0x9300| 0x080 | 8 | 1 Hz | N | DG | All | HD Air Bubble Data | + * + * | Payload || + * | || + * | #1:(U32) | \ref Data::mVenousAirBubbleStatus | + * | #2:(U32) | \ref Data::mVenousAirBubbleState | + * + * \sa Data + * + *

Logging info

+ * | || + * | || + * | typeText | Datum | + * | unitText | HD | + * | infoText | AirBubbleData | + * + */ +class MHDAirBubbleData : public MAbstract { + + // friends + friend class ::tst_models; + + QVariantList parameters() const override; + + struct { + Types::U32 mVenousAirBubbleStatus ; + Types::U32 mVenousAirBubbleState ; + } _data; + +public: + + Type_Enum typeText() const override { return Type_Enum::eDatum ; } + Unit_Enum unitText() const override { return Unit_Enum::eHD ; } + QString infoText() const override { return QString("AirBubbleData") ; } + + + struct Data { + quint32 mVenousAirBubbleStatus = 0; ///< Air Bubble Status + quint32 mVenousAirBubbleState = 0; ///< Air Bubble State + }; + + MHDAirBubbleData () { } + bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr) override; + Data data ( ) const ; + +}; +} + +typedef Model::MHDAirBubbleData::Data HDAirBubbleData; Index: sources/model/hd/data/MHDAirTrapData.cpp =================================================================== diff -u --- sources/model/hd/data/MHDAirTrapData.cpp (revision 0) +++ sources/model/hd/data/MHDAirTrapData.cpp (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -0,0 +1,45 @@ +/*! + * + * Copyright (c) 2020-2020 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 MHDAirTrapData.cpp + * \author (last) Michael Gathwaite + * \date (last) 23-Feb-2022 + * \author (original) Michael Garthwaite + * \date (original) 23-Feb-2022 + * + */ +#include "MHDAirTrapData.h" + +using namespace Model; + +QVariantList MHDAirTrapData::parameters() const { + return { + _data.mAirTrapLowerLevel.value, + _data.mAirTrapUpperLevel.value, + }; +} + +bool MHDAirTrapData::fromByteArray(const QByteArray &vByteArray, int *vIndex) { + int index = 0; + if (GetValue(vByteArray, index, _data.mAirTrapLowerLevel )) + if (GetValue(vByteArray, index, _data.mAirTrapUpperLevel )) + return true ; + else { if(vIndex) *vIndex = index; return false; } + else { if(vIndex) *vIndex = index; return false; } +} + +/*! + * \brief MHDAirTrapData::data + * \details Provides model's Data from the received messages data values + * \return Data + */ +MHDAirTrapData::Data MHDAirTrapData::data() const{ + Data data; + data.mAirTrapLowerLevel = _data.mAirTrapLowerLevel.value; + data.mAirTrapUpperLevel = _data.mAirTrapUpperLevel.value; + return data; +} Index: sources/model/hd/data/MHDAirTrapData.h =================================================================== diff -u --- sources/model/hd/data/MHDAirTrapData.h (revision 0) +++ sources/model/hd/data/MHDAirTrapData.h (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -0,0 +1,84 @@ +/*! + * + * Copyright (c) 2020-2022 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 MHDAirTrapData.h + * \author (last) Michael Garthwaite + * \author (original) Michael Garthwaite + * \date (last) 23-Feb-2022 + * \date (original) 23-Feb-2022 + * + */ +#pragma once + + +// Qt +#include + +// Project +#include "MAbstract.h" +#include "types.h" + +// forward declarations +class tst_models; + +namespace Model { + +/*! + * \brief The MHDAirTrapData class + * \details The HD Air Trap data model + * + * | MSG | CAN ID | Box | Type | Ack | Src | Dst | Description | + * |:----:|:------:|:---:|:------:|:---:|:---:|:---:|:-----------: | + * |0x3E00| 0x080 | 8 | 1 Hz | N | DG | All | HD Air Trap Data | + * + * | Payload || + * | || + * | #1:(U32) | \ref Data::mAirTrapLowerLevel | + * | #2:(U32) | \ref Data::mAirTrapUpperLevel | + * + * \sa Data + * + *

Logging info

+ * | || + * | || + * | typeText | Datum | + * | unitText | HD | + * | infoText | AirTrapData | + * + */ +class MHDAirTrapData : public MAbstract { + + // friends + friend class ::tst_models; + + QVariantList parameters() const override; + + struct { + Types::U32 mAirTrapLowerLevel; + Types::U32 mAirTrapUpperLevel; + } _data; + +public: + + Type_Enum typeText() const override { return Type_Enum::eDatum ; } + Unit_Enum unitText() const override { return Unit_Enum::eHD ; } + QString infoText() const override { return QString("AirTrapData") ; } + + + struct Data { + quint32 mAirTrapLowerLevel = 0; ///< Lower Level + quint32 mAirTrapUpperLevel = 0; ///< Upper Level + }; + + MHDAirTrapData () { } + bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr) override; + Data data ( ) const ; + +}; +} + +typedef Model::MHDAirTrapData::Data HDAirTrapData; Index: sources/model/hd/data/MHDBloodLeakData.cpp =================================================================== diff -u --- sources/model/hd/data/MHDBloodLeakData.cpp (revision 0) +++ sources/model/hd/data/MHDBloodLeakData.cpp (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -0,0 +1,78 @@ +/*! + * + * Copyright (c) 2020-2020 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 MHDBloodLeakData.cpp + * \author (last) Michael Gathwaite + * \date (last) 23-Feb-2022 + * \author (original) Michael Garthwaite + * \date (original) 23-Feb-2022 + * + */ +#include "MHDBloodLeakData.h" + +using namespace Model; + +QVariantList MHDBloodLeakData::parameters() const { + return { + _data.mBloodLeakStatus .value, + _data.mBloodLeakState .value, + _data.mBloodLeakZeroStatusCounter.value, + _data.mBloodLeakCounter .value, + _data.mBloodLeakZeroedStatus .value, + _data.mBloodLeakDetectSetPoint .value, + _data.mBloodLeakDetectLevel .value, + _data.mBloodLeakStatusCount .value, + _data.mBloodLeakLEDIntensity .value, + _data.mBloodLeakRegisterCounter .value, + }; +} + +bool MHDBloodLeakData::fromByteArray(const QByteArray &vByteArray, int *vIndex) { + int index = 0; // message data start position + if (GetValue(vByteArray, index, _data.mBloodLeakStatus )) + if (GetValue(vByteArray, index, _data.mBloodLeakState )) + if (GetValue(vByteArray, index, _data.mBloodLeakZeroStatusCounter )) + if (GetValue(vByteArray, index, _data.mBloodLeakCounter )) + if (GetValue(vByteArray, index, _data.mBloodLeakZeroedStatus )) + if (GetValue(vByteArray, index, _data.mBloodLeakDetectSetPoint )) + if (GetValue(vByteArray, index, _data.mBloodLeakDetectLevel )) + if (GetValue(vByteArray, index, _data.mBloodLeakStatusCount )) + if (GetValue(vByteArray, index, _data.mBloodLeakLEDIntensity )) + if (GetValue(vByteArray, index, _data.mBloodLeakRegisterCounter )) + return true ; + else { if(vIndex) *vIndex = index; return false; } + else { if(vIndex) *vIndex = index; return false; } + else { if(vIndex) *vIndex = index; return false; } + else { if(vIndex) *vIndex = index; return false; } + else { if(vIndex) *vIndex = index; return false; } + else { if(vIndex) *vIndex = index; return false; } + else { if(vIndex) *vIndex = index; return false; } + else { if(vIndex) *vIndex = index; return false; } + else { if(vIndex) *vIndex = index; return false; } + else { if(vIndex) *vIndex = index; return false; } +} + +/*! + * \brief MHDBloodLeakData::Data + * \details Provides model's Data from the received messages data values + * \return Data + */ +MHDBloodLeakData::Data MHDBloodLeakData::data() const{ + Data data; + data.mBloodLeakStatus = _data.mBloodLeakStatus .value; + data.mBloodLeakState = _data.mBloodLeakState .value; + data.mBloodLeakZeroStatusCounter= _data.mBloodLeakZeroStatusCounter.value; + data.mBloodLeakCounter = _data.mBloodLeakCounter .value; + data.mBloodLeakZeroedStatus = _data.mBloodLeakZeroedStatus .value; + data.mBloodLeakDetectSetPoint = _data.mBloodLeakDetectSetPoint .value; + data.mBloodLeakDetectLevel = _data.mBloodLeakDetectLevel .value; + data.mBloodLeakStatusCount = _data.mBloodLeakStatusCount .value; + data.mBloodLeakLEDIntensity = _data.mBloodLeakLEDIntensity .value; + data.mBloodLeakRegisterCounter = _data.mBloodLeakRegisterCounter .value; + return data; +} + Index: sources/model/hd/data/MHDBloodLeakData.h =================================================================== diff -u -r5babb1ac6c9edda7f89bae8bb92d56fe733e8206 -r968c7861b6caf1906c6b3ac34ae13018c6f1bf2b --- sources/model/hd/data/MHDBloodLeakData.h (.../MHDBloodLeakData.h) (revision 5babb1ac6c9edda7f89bae8bb92d56fe733e8206) +++ sources/model/hd/data/MHDBloodLeakData.h (.../MHDBloodLeakData.h) (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -1,6 +1,6 @@ /*! * - * Copyright (c) 2020-2020 Diality Inc. - All Rights Reserved. + * Copyright (c) 2020-2022 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. @@ -27,11 +27,83 @@ namespace Model { +/*! + * \brief The MHDBloodLeakData class + * \details The HD blood leak data model + * + * + * | MSG | CAN ID | M.Box | Type | Ack | Src | Dest | Description | + * |:------:|:------:|:-----:|:----:|:---:|:---:|:----:|:---------------------: | + * | 0x6C00 | 0x040 | 7 | 1 Hz | N | HD | UI | HD Blood Leak Data | + * + * | Payload || + * | || + * | #1:(U32) | \ref Data::mBloodLeakStatus | + * | #2:(U32) | \ref Data::mBloodLeakState | + * | #3:(U32) | \ref Data::mBloodLeakZeroStatusCounter | + * | #4:(U32) | \ref Data::mBloodLeakCounter | + * | #5:(u32) | \ref Data::mBloodLeakZeroedStatus | + * | #6:(U32) | \ref Data::mBloodLeakDetectSetPoint | + * | #7:(U32) | \ref Data::mBloodLeakDetectLevel | + * | #8:(U32) | \ref Data::mBloodLeakStatusCount | + * | #9:(U32) | \ref Data::mBloodLeakLEDIntensity | + * | #9:(U32) | \ref Data::mBloodLeakRegisterCounter | + * + * \sa Data + * + *

Logging info

+ * | || + * | || + * | typeText | Datum | + * | unitText | HD | + * | infoText | BloodLeakData | + * + */ class MHDBloodLeakData : public MAbstract { + + // friends friend class ::tst_models; - QVariantList + QVariantList parameters() const override; -}; + struct { + Types::U32 mBloodLeakStatus ; + Types::U32 mBloodLeakState ; + Types::U32 mBloodLeakZeroStatusCounter ; + Types::U32 mBloodLeakCounter ; + Types::U32 mBloodLeakZeroedStatus ; + Types::U32 mBloodLeakDetectSetPoint ; + Types::U32 mBloodLeakDetectLevel ; + Types::U32 mBloodLeakStatusCount ; + Types::U32 mBloodLeakLEDIntensity ; + Types::U32 mBloodLeakRegisterCounter ; + } _data; +public: + + Type_Enum typeText() const override { return Type_Enum::eDatum ; } + Unit_Enum unitText() const override { return Unit_Enum::eHD ; } + QString infoText() const override { return QString("BloodLeakData") ; } + + struct Data { + quint32 mBloodLeakStatus = 0; + quint32 mBloodLeakState = 0; + quint32 mBloodLeakZeroStatusCounter = 0; + quint32 mBloodLeakCounter = 0; + quint32 mBloodLeakZeroedStatus = 0; + quint32 mBloodLeakDetectSetPoint = 0; + quint32 mBloodLeakDetectLevel = 0; + quint32 mBloodLeakStatusCount = 0; + quint32 mBloodLeakLEDIntensity = 0; + quint32 mBloodLeakRegisterCounter = 0; + + }; + + MHDBloodLeakData () { } + bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr) override; + Data data ( ) const ; + +}; } + +typedef Model::MHDBloodLeakData::Data HDBloodLeakData; Index: sources/model/hd/data/treatment/MTreatmentRinsebackData.cpp =================================================================== diff -u -r668190d460e7919f0eb4aa449ade53122bcd68d1 -r968c7861b6caf1906c6b3ac34ae13018c6f1bf2b --- sources/model/hd/data/treatment/MTreatmentRinsebackData.cpp (.../MTreatmentRinsebackData.cpp) (revision 668190d460e7919f0eb4aa449ade53122bcd68d1) +++ sources/model/hd/data/treatment/MTreatmentRinsebackData.cpp (.../MTreatmentRinsebackData.cpp) (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -23,7 +23,7 @@ _data.mRate .value, _data.mTimeoutTotal .value, _data.mTimeoutCountDown.value, - _data.mSafetyVolume .value, + _data.mIsCompleted .value, }; } @@ -34,7 +34,7 @@ if (GetValue(vByteArray, index, _data.mRate )) if (GetValue(vByteArray, index, _data.mTimeoutTotal )) if (GetValue(vByteArray, index, _data.mTimeoutCountDown)) - if (GetValue(vByteArray, index, _data.mSafetyVolume )) + if (GetValue(vByteArray, index, _data.mIsCompleted )) return true ; else { if(vIndex) *vIndex = index; return false; } else { if(vIndex) *vIndex = index; return false; } @@ -56,6 +56,6 @@ data.mRate = _data.mRate .value; data.mTimeoutTotal = _data.mTimeoutTotal .value; data.mTimeoutCountDown = _data.mTimeoutCountDown.value; - data.mSafetyVolume = _data.mSafetyVolume .value; + data.mIsCompleted = _data.mIsCompleted .value; return data; } Index: sources/model/hd/data/treatment/MTreatmentRinsebackData.h =================================================================== diff -u -re4a0e2fc4c7ae0cbce0d670772276bf7f5ff3845 -r968c7861b6caf1906c6b3ac34ae13018c6f1bf2b --- sources/model/hd/data/treatment/MTreatmentRinsebackData.h (.../MTreatmentRinsebackData.h) (revision e4a0e2fc4c7ae0cbce0d670772276bf7f5ff3845) +++ sources/model/hd/data/treatment/MTreatmentRinsebackData.h (.../MTreatmentRinsebackData.h) (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -41,7 +41,7 @@ * | #3:(U32) | \ref Data::mRate | * | #4:(U32) | \ref Data::mTimeoutTotal | * | #5:(U32) | \ref Data::mTimeoutCountDown| - * | #6:(F32) | \ref Data::mSafetyVolume | + * | #6:(F32) | \ref Data::mIsCompleted | * * \sa Data * \sa MAdjustRinsebackReq : Rinseback Request @@ -68,7 +68,7 @@ Types::U32 mRate ; Types::U32 mTimeoutTotal ; Types::U32 mTimeoutCountDown; - Types::F32 mSafetyVolume ; + Types::U32 mIsCompleted ; } _data; public: @@ -83,7 +83,7 @@ quint32 mRate = 0; ///< Current flow rate of rinseback delivery quint32 mTimeoutTotal = 0; ///< Total Timeout of rinseback delivery quint32 mTimeoutCountDown = 0; ///< Current Timeout count down of rinseback delivery - float mSafetyVolume = 0; ///< Safety Volume of rinseback delivery + quint32 mIsCompleted = 0; ///< Safety Volume of rinseback delivery }; public: Index: sources/view/dg/data/VDGConductivityData.cpp =================================================================== diff -u --- sources/view/dg/data/VDGConductivityData.cpp (revision 0) +++ sources/view/dg/data/VDGConductivityData.cpp (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -0,0 +1,29 @@ +/*! + * + * Copyright (c) 2020-2020 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 VDGAccelerometerData.cpp + * \author (last) Michael Garthwaite + * \date (last) 23-Feb-2022 + * \author (original) Michael Garthwaite + * \date (original) 23-Feb-2022 + * + */ +#include "VDGConductivityData.h" + +// Project +#include "GuiController.h" + +VIEW_DEF(VDGConductivity, DGConductivityData) + +void VDGConductivity::onActionReceive(const DGConductivityData &vData) { + RORejectionRatio (vData.mRORejectionRatio ); + CPi (vData.mCPi ); + CPo (vData.mCPo ); + CD1 (vData.mCD1 ); + CD2 (vData.mCD2 ); + +} Index: sources/view/dg/data/VDGConductivityData.h =================================================================== diff -u --- sources/view/dg/data/VDGConductivityData.h (revision 0) +++ sources/view/dg/data/VDGConductivityData.h (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -0,0 +1,47 @@ +/*! + * + * Copyright (c) 2020-2022 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 VDGConductivityData.h + * \author (last) Michael Garthwaite + * \date (last) 23-Feb-2022 + * \author (original) Michael Garthwaite + * \date (original) 23-Feb-2022 + * + */ +#pragma once + +// Qt +#include + +// Project +#include "main.h" // Doxygen : do not remove +#include "VView.h" +#include "MDGConductivityData.h" + +// namespace +namespace View { + +/*! + * \brief The VDGConductivity class + * \details View for Model's Data representation. + * + * \sa Model::MDGConductivity + * + */ +class VDGConductivity : public QObject { + Q_OBJECT + + PROPERTY( float , RORejectionRatio , 0) + PROPERTY( float , CPi , 0) + PROPERTY( float , CPo , 0) + PROPERTY( float , CD1 , 0) + PROPERTY( float , CD2 , 0) + + + VIEW_DEC(VDGConductivity, DGConductivityData) +}; +} Index: sources/view/hd/data/VHDAirBubbleData.cpp =================================================================== diff -u --- sources/view/hd/data/VHDAirBubbleData.cpp (revision 0) +++ sources/view/hd/data/VHDAirBubbleData.cpp (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -0,0 +1 @@ \ No newline at end of file Index: sources/view/hd/data/VHDAirBubbleData.h =================================================================== diff -u --- sources/view/hd/data/VHDAirBubbleData.h (revision 0) +++ sources/view/hd/data/VHDAirBubbleData.h (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -0,0 +1,4 @@ +#ifndef VHDAIRBUBBLEDATA_H +#define VHDAIRBUBBLEDATA_H + +#endif // VHDAIRBUBBLEDATA_H Index: sources/view/hd/data/VHDAirTrapData.cpp =================================================================== diff -u --- sources/view/hd/data/VHDAirTrapData.cpp (revision 0) +++ sources/view/hd/data/VHDAirTrapData.cpp (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -0,0 +1 @@ \ No newline at end of file Index: sources/view/hd/data/VHDAirTrapData.h =================================================================== diff -u --- sources/view/hd/data/VHDAirTrapData.h (revision 0) +++ sources/view/hd/data/VHDAirTrapData.h (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -0,0 +1,4 @@ +#ifndef VHDAIRTRAPDATA_H +#define VHDAIRTRAPDATA_H + +#endif // VHDAIRTRAPDATA_H Index: sources/view/hd/data/VHDBloodLeakData.cpp =================================================================== diff -u --- sources/view/hd/data/VHDBloodLeakData.cpp (revision 0) +++ sources/view/hd/data/VHDBloodLeakData.cpp (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -0,0 +1,33 @@ +/*! + * + * Copyright (c) 2020-2022 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 VHDBloodLeakData.cpp + * \author (last) Behrouz NematiPour + * \author (original) Behrouz NematiPour + * \date (last) 29-Jul-2022 + * \date (original) 29-Jul-2022 + * + */ +#include "VHDBloodLeakData.h" + +// Project +#include "GuiController.h" + +VIEW_DEF(VHDBloodLeakData, HDBloodLeakData) + +void VHDBloodLeakData::onActionReceive(const HDBloodLeakData &vData) { + bloodLeakStatus (vData.mBloodLeakStatus ); + bloodLeakState (vData.mBloodLeakState ); + bloodLeakZeroStatusCounter (vData.mBloodLeakZeroStatusCounter ); + bloodLeakCounter (vData.mBloodLeakCounter ); + bloodLeakZeroedStatus (vData.mBloodLeakZeroedStatus ); + bloodLeakDetectSetPoint (vData.mBloodLeakDetectSetPoint ); + bloodLeakDetectLevel (vData.mBloodLeakDetectLevel ); + bloodLeakStatusCount (vData.mBloodLeakStatusCount ); + bloodLeakLEDIntensity (vData.mBloodLeakLEDIntensity ); + bloodLeakLEDIntensity (vData.mBloodLeakLEDIntensity ); +} Index: sources/view/hd/data/VHDBloodLeakData.h =================================================================== diff -u --- sources/view/hd/data/VHDBloodLeakData.h (revision 0) +++ sources/view/hd/data/VHDBloodLeakData.h (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -0,0 +1,52 @@ +/*! + * + * Copyright (c) 2020-2022 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 VHDBloodLeakData.h + * \author (last) Michael Garthwaite + * \date (last) 23-Feb-2022 + * \author (original) Peman Montazemi + * \date (original) 23-Feb-2022 + * + */ +#pragma once + +// Qt +#include + +// Project +#include "main.h" // Doxygen : do not remove +#include "VView.h" +#include "MHDBloodLeakData.h" + +// namespace +namespace View { + +/*! + * \brief The VHDBloodLeakData class + * \details View for Model's Data representation. + * + * \sa Model::MHDBloodLeakData + * + */ +class VHDBloodLeakData : public QObject { + Q_OBJECT + + PROPERTY( quint32 , bloodLeakStatus , 0) + PROPERTY( quint32 , bloodLeakState , 0) + PROPERTY( quint32 , bloodLeakZeroStatusCounter , 0) + PROPERTY( quint32 , bloodLeakCounter , 0) + PROPERTY( quint32 , bloodLeakZeroedStatus , 0) + PROPERTY( quint32 , bloodLeakDetectSetPoint , 0) + PROPERTY( quint32 , bloodLeakDetectLevel , 0) + PROPERTY( quint32 , bloodLeakStatusCount , 0) + PROPERTY( quint32 , bloodLeakLEDIntensity , 0) + PROPERTY( quint32 , bloodLeakRegisterCounter , 0) + + + VIEW_DEC(VHDBloodLeakData, HDBloodLeakData) +}; +} Index: sources/view/hd/data/treatment/VTreatmentRinsebackData.cpp =================================================================== diff -u -r88563177f10f20ced98750b2e40036201728131d -r968c7861b6caf1906c6b3ac34ae13018c6f1bf2b --- sources/view/hd/data/treatment/VTreatmentRinsebackData.cpp (.../VTreatmentRinsebackData.cpp) (revision 88563177f10f20ced98750b2e40036201728131d) +++ sources/view/hd/data/treatment/VTreatmentRinsebackData.cpp (.../VTreatmentRinsebackData.cpp) (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -26,4 +26,5 @@ rate ( vData.mRate ); timeoutTotal ( vData.mTimeoutTotal ); timeoutCountDown( vData.mTimeoutCountDown ); + isCompleted ( vData.mIsCompleted ); } Index: sources/view/hd/data/treatment/VTreatmentRinsebackData.h =================================================================== diff -u -rfc329c788fe9453983072bee937ccbc95b4ed6e4 -r968c7861b6caf1906c6b3ac34ae13018c6f1bf2b --- sources/view/hd/data/treatment/VTreatmentRinsebackData.h (.../VTreatmentRinsebackData.h) (revision fc329c788fe9453983072bee937ccbc95b4ed6e4) +++ sources/view/hd/data/treatment/VTreatmentRinsebackData.h (.../VTreatmentRinsebackData.h) (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) @@ -41,6 +41,7 @@ PROPERTY( quint32 , rate , 0) PROPERTY( quint32 , timeoutTotal , 0) PROPERTY( quint32 , timeoutCountDown, 0) + PROPERTY( quint32 , isCompleted , 0) VIEW_DEC(VTreatmentRinseback, TreatmentRinsebackData) };