/*! * * 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 models.h * date 3/4/2020 * author Behrouz NematiPour * */ #pragma once // Qt #include // Project #include "types.h" namespace Model { /*! * \brief The Flow Data class */ class Flow { public: QString stringPrefix = ""; private: struct Data { Types::S32 mFlowSetPoint ; /*!< vFlowSetPoint - Flow Set Point value of type signed int extracted out */ Types::F32 mMeasuredFlow ; /*!< vMeasuredFlow - Measured Flow value of type float extracted out */ Types::F32 mRotorSpeed ; /*!< vRotorSpeed - Rotor Speed value of type float extracted out */ Types::F32 mMotorSpeed ; /*!< vMotorSpeed - Motor Speed value of type float extracted out */ Types::F32 mMotorCtlSpeed ; /*!< vMotorCtlSpeed - Motor Controller Speed value of type float extracted out */ Types::F32 mMotorCtlCurrent ; /*!< vMotorCtlCurrent - Motor Controller Current value of type float extracted out */ Types::F32 mPWMDutyCycle ; /*!< vPWMDtCycle - PWM Duty Cycle in % value of type float extracted out */ }; Data _data; public: Flow () : _data {0, 0, 0, 0, 0, 0, 0} { } QString toString ( ) const ; void toVariantList ( QVariantList &vData ) const ; void fromByteArray (const QByteArray &vByteArray ); const Data &data() const ; }; class BloodFlow : public Flow { public: struct Data { qint32 mFlowSetPoint = 0; /*!< vFlowSetPoint - Flow Set Point value of type signed int extracted out */ float mMeasuredFlow = 0; /*!< vMeasuredFlow - Measured Flow value of type float extracted out */ float mRotorSpeed = 0; /*!< vRotorSpeed - Rotor Speed value of type float extracted out */ float mMotorSpeed = 0; /*!< vMotorSpeed - Motor Speed value of type float extracted out */ float mMotorCtlSpeed = 0; /*!< vMotorCtlSpeed - Motor Controller Speed value of type float extracted out */ float mMotorCtlCurrent = 0; /*!< vMotorCtlCurrent - Motor Controller Current value of type float extracted out */ float mPWMDutyCycle = 0; /*!< vPWMDtCycle - PWM Duty Cycle in % value of type float extracted out */ }; BloodFlow() { stringPrefix = "Blood Flow"; } Data data() const; }; class DialysateFlow : public Flow { public: struct Data { qint32 mFlowSetPoint = 0; /*!< vFlowSetPoint - Flow Set Point value of type signed int extracted out */ float mMeasuredFlow = 0; /*!< vMeasuredFlow - Measured Flow value of type float extracted out */ float mRotorSpeed = 0; /*!< vRotorSpeed - Rotor Speed value of type float extracted out */ float mMotorSpeed = 0; /*!< vMotorSpeed - Motor Speed value of type float extracted out */ float mMotorCtlSpeed = 0; /*!< vMotorCtlSpeed - Motor Controller Speed value of type float extracted out */ float mMotorCtlCurrent = 0; /*!< vMotorCtlCurrent - Motor Controller Current value of type float extracted out */ float mPWMDutyCycle = 0; /*!< vPWMDtCycle - PWM Duty Cycle in % value of type float extracted out */ }; DialysateFlow() { stringPrefix = "Dialysate Flow"; } Data data() const; }; class OutletFlow { public: QString stringPrefix = "Dialysate Outlet Flow"; struct Data { float mRefUFVol = 0; /*!< Reference UF Volume value of type float extracted out */ float mMeasUFVol = 0; /*!< Measured UF Volume value of type float extracted out */ float mRotorSpeed = 0; /*!< Rotor Speed value of type float extracted out */ float mMotorSpeed = 0; /*!< Motor Speed value of type float extracted out */ float mMotorCtlSpeed = 0; /*!< Motor Controller Speed value of type float extracted out */ float mMotorCtlCurrent = 0; /*!< Motor Controller Current value of type float extracted out */ float mPWMDtCycle = 0; /*!< PWM Duty Cycle in % value of type float extracted out */ }; private: struct { Types::F32 mRefUFVol ; Types::F32 mMeasUFVol ; Types::F32 mRotorSpeed ; Types::F32 mMotorSpeed ; Types::F32 mMotorCtlSpeed ; Types::F32 mMotorCtlCurrent ; Types::F32 mPWMDtCycle ; } _data; public: OutletFlow () : _data {0, 0, 0, 0, 0, 0} { } QString toString ( ) const ; void toVariantList ( QVariantList &vData ) const ; void fromByteArray (const QByteArray &vByteArray ); Data data() const; }; class TreatmentTime { public: QString stringPrefix = "Treatment Time"; struct Data { quint32 mTotal = 0; /*!< Total treatment time in sec */ quint32 mElapsed = 0; /*!< Elapsed treatment time in sec */ quint32 mRemaining = 0; /*!< Remaining treatment time in sec */ }; private: struct { Types::U32 mTotal ; Types::U32 mElapsed ; Types::U32 mRemaining ; } _data; public: TreatmentTime() : _data {0, 0, 0} { } QString toString ( ) const ; void toVariantList ( QVariantList &vData ) const ; void fromByteArray (const QByteArray &vByteArray ); Data data() const; }; class AlarmStatus { public: enum Flag { eFlag_systemFault = 0 , eFlag_stop , eFlag_noClear , eFlag_noResume , eFlag_noRinseback , eFlag_noEndTreatment , eFlag_noNewTreatment , eFlag_bypassDialyzer , eFlag_alarmsToEscalate , eFlag_alarmsSilenced , eFlag_Bits_Length = 16, }; QString stringPrefix = "Alarm Status"; struct Data { quint32 mState = 0; /*!< State - Alarm Priority value of type unsigned int as 4 bytes extracted out */ quint32 mTop = 0; /*!< Top - Top value of type unsigned int as 4 bytes extracted out */ quint32 mMuteTimeout = 0; /*!< MuteTimeout - MuteTimeout value of type unsigned int as 4 bytes extracted out */ quint32 mEscalatesIn = 0; /*!< EscalatesIn - EscalatesIn value of type unsigned int as 4 bytes extracted out */ QBitArray mFlags ; /*!< Flags - Flags value of type unsigned int as 1 byte extracted out */ }; private: struct { Types::U32 mState ; Types::U32 mTop ; Types::U32 mMuteTimeout ; Types::U32 mEscalatesIn ; Types::Flags mFlags ; } _data; public: AlarmStatus() : _data {0, 0, 0, 0} { } QString toString ( ) const ; void toVariantList ( QVariantList &vData ) const ; void fromByteArray (const QByteArray &vByteArray ); Data data() const; }; } typedef Model:: BloodFlow::Data BloodFlowData; typedef Model::DialysateFlow::Data DialysateFlowData; typedef Model:: OutletFlow::Data OutletFlowData; typedef Model::TreatmentTime::Data TreatmentTimeData; typedef Model:: AlarmStatus::Data AlarmStatusData; typedef Model:: AlarmStatus::Flag AlarmStatusFlag; //--------------------------------------------------------------------------------// //--------------------------------------------------------------------------------// #define ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, vTYPE) \ connect(&vSOURCE, SIGNAL(didActionReceive(const vTYPE &)), \ this , SLOT( onActionReceive(const vTYPE &))); //--------------------------------------------------------------------------------// #define ACTION_RECEIVE_PRIVATE_SLOT(vTYPE) \ private Q_SLOTS: \ void onActionReceive (const vTYPE &vData) { \ emit didActionReceive(vData); \ } //--------------------------------------------------------------------------------// #define ACTION_RECEIVE_SIGNAL(vTYPE) \ Q_SIGNALS: \ void didActionReceive (const vTYPE &vData); //--------------------------------------------------------------------------------// #define ACTION_RECEIVE_BRIDGE_DEFINITION(vTYPE) \ ACTION_RECEIVE_PRIVATE_SLOT (vTYPE) \ ACTION_RECEIVE_SIGNAL (vTYPE) //--------------------------------------------------------------------------------// #define REGISTER_METATYPE(vTYPE) \ qRegisterMetaType < vTYPE > (#vTYPE); //--------------------------------------------------------------------------------// //-------- Please add the model type to the lists below to register them ---------// //--------------------------------------------------------------------------------// #define ACTION_RECEIVE_MODEL_BRIDGE_CONNECTIONS(vSOURCE) \ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, BloodFlowData ) \ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, DialysateFlowData ) \ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, OutletFlowData ) \ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, TreatmentTimeData ) \ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, AlarmStatusData ) //--------------------------------------------------------------------------------// #define ACTION_RECEIVE_MODEL_BRIDGE_DEFINITIONS \ ACTION_RECEIVE_BRIDGE_DEFINITION( BloodFlowData ) \ ACTION_RECEIVE_BRIDGE_DEFINITION( DialysateFlowData ) \ ACTION_RECEIVE_BRIDGE_DEFINITION( OutletFlowData ) \ ACTION_RECEIVE_BRIDGE_DEFINITION( TreatmentTimeData ) \ ACTION_RECEIVE_BRIDGE_DEFINITION( AlarmStatusData ) //--------------------------------------------------------------------------------// #define REGISTER_MODEL_METATYPES \ REGISTER_METATYPE( BloodFlowData ) \ REGISTER_METATYPE( DialysateFlowData ) \ REGISTER_METATYPE( OutletFlowData ) \ REGISTER_METATYPE( TreatmentTimeData ) \ REGISTER_METATYPE( AlarmStatusData ) \ REGISTER_METATYPE( AlarmStatusFlag ) //--------------------------------------------------------------------------------// #define ACTION_RECEIVE_INTERPRETER_CONNECTIONS \ ACTION_RECEIVE_BRIDGE_CONNECTION(_interpreter, BloodFlowData ) \ ACTION_RECEIVE_BRIDGE_CONNECTION(_interpreter, DialysateFlowData ) \ ACTION_RECEIVE_BRIDGE_CONNECTION(_interpreter, OutletFlowData ) \ ACTION_RECEIVE_BRIDGE_CONNECTION(_interpreter, TreatmentTimeData ) \ ACTION_RECEIVE_BRIDGE_CONNECTION(_interpreter, AlarmStatusData ) //--------------------------------------------------------------------------------// #define ACTION_RECEIVE_SIGNALS \ ACTION_RECEIVE_SIGNAL( BloodFlowData ) \ ACTION_RECEIVE_SIGNAL( DialysateFlowData ) \ ACTION_RECEIVE_SIGNAL( OutletFlowData ) \ ACTION_RECEIVE_SIGNAL( TreatmentTimeData ) \ ACTION_RECEIVE_SIGNAL( AlarmStatusData ) //--------------------------------------------------------------------------------// //--------------------------------------------------------------------------------//