Index: denali.pro =================================================================== diff -u -reece7acacf84e8cc34b830f6b5ab3f112823a905 -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- denali.pro (.../denali.pro) (revision eece7acacf84e8cc34b830f6b5ab3f112823a905) +++ denali.pro (.../denali.pro) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -43,6 +43,8 @@ common/MsgDefs.h \ sources/main.h \ sources/maintimer.h \ + sources/model/malarmcleared.h \ + sources/model/malarmtriggered.h \ sources/model/mloadcellreadings.h \ sources/model/mtemperaturesensors.h \ sources/model/mtreatmentadjustblooddialysateresponse.h \ @@ -53,6 +55,7 @@ sources/model/mtreatmentadjustultrafiltrationeditresponse.h \ sources/model/mtreatmentpressureocclusion.h \ sources/model/mtreatmentranges.h \ + sources/model/mtreatmentstate.h \ sources/threads.h \ sources/applicationcontroller.h \ sources/applicationpost.h \ @@ -103,6 +106,8 @@ SOURCES += \ main.cpp \ sources/maintimer.cpp \ + sources/model/malarmcleared.cpp \ + sources/model/malarmtriggered.cpp \ sources/model/mloadcellreadings.cpp \ sources/model/mtemperaturesensors.cpp \ sources/model/mtreatmentadjustblooddialysateresponse.cpp \ @@ -112,6 +117,7 @@ sources/model/mtreatmentadjustultrafiltrationeditresponse.cpp \ sources/model/mtreatmentpressureocclusion.cpp \ sources/model/mtreatmentranges.cpp \ + sources/model/mtreatmentstate.cpp \ sources/threads.cpp \ sources/applicationcontroller.cpp \ sources/applicationpost.cpp \ Index: denali.pro.user =================================================================== diff -u -r4578edcba291c0ffe718f31fb3077a1c931aaa46 -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- denali.pro.user (.../denali.pro.user) (revision 4578edcba291c0ffe718f31fb3077a1c931aaa46) +++ denali.pro.user (.../denali.pro.user) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -1,6 +1,6 @@ - + EnvironmentId @@ -144,7 +144,7 @@ true QtProjectManager.QMakeBuildStep - true + false true @@ -1031,7 +1031,7 @@ Qt4ProjectManager.Qt4RunConfiguration:/home/denali/Project/application/denali.pro /home/denali/Project/application/denali.pro - + -u false false @@ -1052,7 +1052,7 @@ Qt 5.12.5 (iMX8) Qt 5.12.5 (iMX8) {5d6458ef-f917-4aef-a092-c77bbe106149} - 1 + 0 0 0 Index: main.cpp =================================================================== diff -u -r8f71000a841da5e8f18efccbb30a7655d3a211cd -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- main.cpp (.../main.cpp) (revision 8f71000a841da5e8f18efccbb30a7655d3a211cd) +++ main.cpp (.../main.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -249,12 +249,13 @@ //! - Initializing Logger _Logger.init(Threads::_Logger_Thread); - LOG_EVENT(QObject::tr("Application Started")); + LOG_EVENT("UI," + QObject::tr("Application Started")); if (gFakeInterval) { - qDebug() << " ~~ !!!!! APPLICATION RUNNING IN THE TEST MODE !!!!! ~~ " ; + QString msg = " ~~ !!!!! APPLICATION RUNNING IN THE TEST MODE !!!!! ~~ "; + qDebug() << msg; LOG_EVENT(" \n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " - " \n ~~ !!!!! APPLICATION RUNNING IN THE TEST MODE !!!!! ~~ " + " \n " + msg + " \n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "); } Index: sources/applicationcontroller.cpp =================================================================== diff -u -reece7acacf84e8cc34b830f6b5ab3f112823a905 -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/applicationcontroller.cpp (.../applicationcontroller.cpp) (revision eece7acacf84e8cc34b830f6b5ab3f112823a905) +++ sources/applicationcontroller.cpp (.../applicationcontroller.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -47,7 +47,7 @@ // coco begin validated: The class ApplicationPost has not been implemented Yet. if (!_applicationPost->init()) return false; // coco end - LOG_EVENT(QObject::tr("%1 Initialized").arg(metaObject()->className())); + LOG_EVENT("UI," + tr("%1 Initialized").arg(metaObject()->className())); return true; } Index: sources/canbus/caninterface.cpp =================================================================== diff -u -rb798668f16ad0967ab97e96f5f9a2cdd821e899f -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/canbus/caninterface.cpp (.../caninterface.cpp) (revision b798668f16ad0967ab97e96f5f9a2cdd821e899f) +++ sources/canbus/caninterface.cpp (.../caninterface.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -54,8 +54,10 @@ initConnections(); status(tr("Connected")); - LOG_EVENT(status()); - LOG_EVENT(QObject::tr("%1 Initialized").arg(metaObject()->className())); + QString logMessage = QString("UI,%1,%2") + .arg(tr("%1 Initialized").arg(metaObject()->className())) + .arg(status()); + LOG_EVENT(logMessage); return true; } @@ -101,6 +103,20 @@ } /*! + * \brief CanInterface::enableConsoleOut + * \details Enable or Disables the console output and logs the status + * \param vEnabled - Enalbe console output if true + */ +void CanInterface::enableConsoleOut(bool vEnabled) { + _enableConsoleOut = vEnabled; + if (_enableConsoleOut) { + LOG_EVENT_ONCE("UI," + tr("Console out CanInterface enabled")); + } else { + LOG_EVENT_ONCE("UI," + tr("Console out CanInterface disabled")); + } +} + +/*! * \brief CanInterface connections definition * \details Initializes the required signal/slot connection between this class and other objects * to be able to communicate. @@ -257,8 +273,6 @@ // coco begin validated: This code is only for debugging purposes and had been tested manually. if ( ! _enableConsoleOut ) return; - LOG_EVENT_ONCE(QObject::tr("console out CanInterface Enabled")); - const QString time = QString::fromLatin1("%1.%2 ") .arg(vFrame.timeStamp().seconds(), 10, 10, QLatin1Char(' ')) .arg(vFrame.timeStamp().microSeconds() / 100, 4, 10, QLatin1Char('0')); Index: sources/canbus/caninterface.h =================================================================== diff -u -rbb8f39a014644c70b832dd2a784f62fa9f6b6106 -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/canbus/caninterface.h (.../caninterface.h) (revision bb8f39a014644c70b832dd2a784f62fa9f6b6106) +++ sources/canbus/caninterface.h (.../caninterface.h) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -78,7 +78,7 @@ public: QString status() const; - void enableConsoleOut(bool vEnabled) { _enableConsoleOut = vEnabled; } + void enableConsoleOut(bool vEnabled); void quitDevice(); private: Index: sources/canbus/frameinterface.cpp =================================================================== diff -u -r7d3062c841b788ced31d939dec990afe0de1442d -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/canbus/frameinterface.cpp (.../frameinterface.cpp) (revision 7d3062c841b788ced31d939dec990afe0de1442d) +++ sources/canbus/frameinterface.cpp (.../frameinterface.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -47,7 +47,7 @@ startTimer(1, Qt::PreciseTimer); - LOG_EVENT(QObject::tr("%1 Initialized").arg(metaObject()->className())); + LOG_EVENT("UI," + tr("%1 Initialized").arg(metaObject()->className())); return true; } Index: sources/canbus/messagebuilder.cpp =================================================================== diff -u -rb798668f16ad0967ab97e96f5f9a2cdd821e899f -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/canbus/messagebuilder.cpp (.../messagebuilder.cpp) (revision b798668f16ad0967ab97e96f5f9a2cdd821e899f) +++ sources/canbus/messagebuilder.cpp (.../messagebuilder.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -137,9 +137,12 @@ } } if (vData.length() < len) { - QString mHexString = Format::toHexString(vAction, false, eLenMessageIDDigits); - LOG_ERROR(tr("Not enough data has been provided for the Message ID '%1'").arg(mHexString)); - LOG_ERROR(vData.toHex('.')); + QString mHexMIdString = Format::toHexString(vAction, false, eLenMessageIDDigits); + QString mHexDatString = vData.toHex('.').toUpper(); + LOG_ERROR(tr("Not enough data has been provided for the Message ID '%1'\r\n%2") + .arg(mHexMIdString) + .arg(mHexDatString) + ); return false; } vPayload += len; @@ -282,6 +285,20 @@ } /*! + * \brief MessageBuilder::enableConsoleOut + * \details + * \param vEnabled + */ +void MessageBuilder::enableConsoleOut(bool vEnabled) { + _enableConsoleOut = vEnabled; + if (_enableConsoleOut) { + LOG_EVENT_ONCE("UI," + tr("Console out MessageBuilder enabled")); + } else { + LOG_EVENT_ONCE("UI," + tr("Console out MessageBuilder disabled")); + } +} + +/*! * \brief MessageBuilder::hasSyncByte * \details Checks for Sync byte and take it out of vPayload * \param vPayload - The payload of type QByteArray @@ -463,8 +480,5 @@ void MessageBuilder::consoleOut(const QByteArray &vPayload, bool vIsHeader, Can_Id vCan_Id, bool vUseColor) { if ( ! _enableConsoleOut) return; - - LOG_EVENT_ONCE(QObject::tr("console out MessageDispatcher Enabled")); - printPayload(vPayload, vIsHeader, vCan_Id, vUseColor); } Index: sources/canbus/messagebuilder.h =================================================================== diff -u -rb798668f16ad0967ab97e96f5f9a2cdd821e899f -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/canbus/messagebuilder.h (.../messagebuilder.h) (revision b798668f16ad0967ab97e96f5f9a2cdd821e899f) +++ sources/canbus/messagebuilder.h (.../messagebuilder.h) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -85,7 +85,7 @@ // build message from received frames bool buildMessage(const QByteArray &vPayload, Message &vMessage, Can_Id vCan_Id) __attribute_warn_unused_result__; - void enableConsoleOut(bool vEnabled) { _enableConsoleOut = vEnabled; } + void enableConsoleOut(bool vEnabled); Index: sources/canbus/messagedispatcher.cpp =================================================================== diff -u -reece7acacf84e8cc34b830f6b5ab3f112823a905 -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/canbus/messagedispatcher.cpp (.../messagedispatcher.cpp) (revision eece7acacf84e8cc34b830f6b5ab3f112823a905) +++ sources/canbus/messagedispatcher.cpp (.../messagedispatcher.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -47,7 +47,7 @@ // runs in USBWatcher thread initConnections(); - LOG_EVENT(QObject::tr("%1 Initialized").arg(metaObject()->className())); + LOG_EVENT("UI," + tr("%1 Initialized").arg(metaObject()->className())); return true; } @@ -303,7 +303,7 @@ QByteArray mData; if (! _interpreter.interpretMessage(vActionId, vData, mData)) { - LOG_ERROR(tr("Incorrect Message, can't be interpreted")); + LOG_ERROR(tr("Incorrect Message, can't be interpreted")); // TODO : LOGGINF IMPROVEMENT return; } @@ -313,14 +313,14 @@ bool mNeedsAcknow = needsAcknow(vActionId); if (mNeedsAcknow) { mSequence = -mSequence; - LOG_EVENT(tr("UI Ack Req %1").arg(mSequence)); + LOG_EVENT(tr("UI,Ack Req, Sq:%1, ID:%2").arg(mSequence).arg(Format::toHexString(vActionId))); #ifdef DEBUG_ACKBACK_HD_TO_UI qDebug() << tr(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ UI AckReq : %1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ").arg(mSequence); #endif } if ( ! _builder.buildFrames(vActionId, mData, frameList, mSequence) ) { - LOG_ERROR(tr("Incorrect Message can't be built")); + LOG_ERROR(tr("Incorrect Message can't be built")); // TODO : LOGGINF IMPROVEMENT return; } if (mNeedsAcknow) { @@ -357,6 +357,7 @@ bool MessageDispatcher::buildMessage(Can_Id vCan_Id, const QByteArray &vPayload) { if (vPayload.length() < eLenCanFrame) { + // Each frame has to have exactly 8 (eLenCanFrame) bytes of data and not used bytes should be passed as 00. LOG_ERROR(tr("Incorrect frame length. Exp:%1,got:%2").arg(eLenCanFrame).arg(vPayload.length())); return false; } @@ -385,7 +386,7 @@ GuiActionType mActionId = vMessage.actionId; switch (mActionId) { case GuiActionType::Acknow: - LOG_EVENT(tr("HD Ack Bak %1").arg(mSequence)); + LOG_EVENT(tr("HD,Ack Bak, Sq:%1").arg(mSequence)); #ifdef DEBUG_ACKBACK_HD_TO_UI qDebug() << tr(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ HD AckBak : %1 %2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ").arg(mSequence).arg(vMessage.actionId); #endif @@ -394,12 +395,13 @@ default: if (mSequence < 0) { - LOG_EVENT(tr("HD Ack Req %1").arg(mSequence)); + LOG_EVENT(tr("HD,Ack Req, Sq:%1, ID:%2").arg(mSequence).arg(Format::toHexString(mActionId))); #ifdef DEBUG_ACKBACK_HD_TO_UI qDebug() << tr(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ HD AckReq : %1 %2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ").arg(mSequence).arg(vMessage.actionId); #endif // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ UI AckBak is immediately handled at the same place. actionTransmit(GuiActionType::Acknow, {}, -mSequence); + LOG_EVENT(tr("UI,Ack Bak, Sq:%1").arg(-mSequence)); #ifdef DEBUG_ACKBACK_HD_TO_UI qDebug() << tr(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ UI AckBak : %1 %2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ").arg(-mSequence).arg(vMessage.actionId); #endif Index: sources/canbus/messageglobals.h =================================================================== diff -u -r8f71000a841da5e8f18efccbb30a7655d3a211cd -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/canbus/messageglobals.h (.../messageglobals.h) (revision 8f71000a841da5e8f18efccbb30a7655d3a211cd) +++ sources/canbus/messageglobals.h (.../messageglobals.h) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -56,9 +56,12 @@ // ---- {Gui::GuiActionType::AlarmStatus , 4 * 4 + 2 }, // 4 parameters each 4bytes + 1 parameter 2bytes + {Gui::GuiActionType::AlarmTriggered , 1 * 4 }, // 1 parameters each 4bytes + {Gui::GuiActionType::AlarmCleared , 1 * 4 }, // 1 parameters each 4bytes // ---- {Gui::GuiActionType::TreatmentRanges , 6 * 4 }, // 6 parameters each 4bytes + {Gui::GuiActionType::TreatmentState , 3 * 4 }, // 3 parameters each 4bytes // ---- {Gui::GuiActionType::AdjustBloodDialysateReq , 2 * 4 }, // 2 parameters each 4bytes Index: sources/canbus/messageinterpreter.cpp =================================================================== diff -u -r7d3062c841b788ced31d939dec990afe0de1442d -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/canbus/messageinterpreter.cpp (.../messageinterpreter.cpp) (revision 7d3062c841b788ced31d939dec990afe0de1442d) +++ sources/canbus/messageinterpreter.cpp (.../messageinterpreter.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -30,6 +30,13 @@ */ MessageInterpreter::MessageInterpreter(QObject *parent) : QObject(parent) { } +/*! + * \brief MessageInterpreter::isType + * \details Checks if this is the message intended to be + * \param vMessage - The message + * \param vType - The type of the message to be checked against + * \return true on correct type + */ bool MessageInterpreter::isType(const Message &vMessage, Gui::GuiActionType vType) const { if ( vMessage.actionId != vType ) { @@ -38,21 +45,65 @@ return true; } +/*! + * \brief MessageInterpreter::isPayloadLenValid + * \details Checks if the Data length has been defined for this type od messsage + * if not logs Undefind Data Length error + * if defined checks if the correct length of data is provided for this type of message. + * if not logs Incorrect Data Length error + * otherwise returns true + * \param vMessage - The message + * \param vType - The type of the message to be checked against + * \return true on correct data length for the type vType + */ bool MessageInterpreter::isPayloadLenValid(const Message &vMessage, Gui::GuiActionType vType) const { QString mActionIdHexString = Format::toHexString(vMessage.actionId); if ( ! payloadLen.contains(vType) ) { - LOG_ERROR(tr("Undefined data length for Message ID (HD) '%1'").arg(mActionIdHexString)); + LOG_ERROR(tr("Undefined data length for received Message with ID '%1'").arg(mActionIdHexString)); return false; } if ( vMessage.data.length() < payloadLen[vType] ) { - LOG_ERROR(tr("Incorrect data length for Message ID (HD) '%1'").arg(mActionIdHexString)); + LOG_ERROR(tr("Incorrect data length for received Message with ID '%1'").arg(mActionIdHexString)); return false; } return true; } /*! + * \brief MessageInterpreter::validateMessage + * \details Validate the messgae by checking its type and data + * \param vMessage - The message + * \param vType - The type of the message to be checked against + * \return true on valid massage + */ +bool MessageInterpreter::isValidMessage(const Message &vMessage, Gui::GuiActionType vType) const +{ + if ( ! isType (vMessage, vType) ) return false; + if ( ! isPayloadLenValid(vMessage, vType) ) return false; + return true; +} + +/*! + * \brief MessageInterpreter::printUnhandled + * \details Prints out the formatted string of the vMessage of type Message + * In case the Message ID of received CANBUS message + * is known to the interpreter but has not been handled/implemented. + * \param vMessage - The message contains Unhandled Message ID + */ +void MessageInterpreter::printUnhandled(const Message &vMessage) const +{ + if ( gDisableHunhandledReport ) return; + QString mActionIdHexString = Format::toHexString(vMessage.actionId, false, eLenMessageIDDigits); + QString logMessage = tr("Unhandled Message ID (HD)") + '\n' + + QString("%1 # %2 %3") + .arg(int(vMessage.can_id), 3, 16, QChar('0')) + .arg(mActionIdHexString) + .arg(QString(vMessage.data.toHex('.'))); + LOG_ERROR(logMessage); +} + +/*! * \brief MessageInterpreter::interpretMessage * \details This method will be called * to interpret messages from UI regarding vActionId. @@ -67,6 +118,8 @@ bool MessageInterpreter::interpretMessage(const Gui::GuiActionType &vActionId, const QVariantList &vData, QByteArray &vPayload) { bool ok = true; + QString mSenderID = "UI,"; + vPayload.clear(); int count = vData.count(); switch (vActionId) { // notice we are in transmit mode @@ -75,9 +128,10 @@ vPayload += vData[0].toUInt(); } else { QString mActionIdHexString = Format::toHexString(vActionId); - LOG_ERROR(tr("Incorrect data for Message ID (UI) '%1'").arg(mActionIdHexString)); + LOG_ERROR(tr("Incorrect data for transmit Message with ID '%1'").arg(mActionIdHexString)); ok = false; } + LOG_EVENT(mSenderID + QString("PowerOff," + QVariant(vData).toStringList().join(','))); break; case Gui::GuiActionType::KeepAlive: @@ -89,6 +143,7 @@ if (count) { vPayload = Format::fromVariant(vData[0]); } + LOG_EVENT(mSenderID + QString("CheckIn")); break; case Gui::GuiActionType::Acknow: @@ -107,35 +162,40 @@ if (count) { vPayload = Format::fromVariant(vData); } + LOG_EVENT(mSenderID + AdjustBloodDialysateRequestData::toString(vData)); break; case Gui::GuiActionType::AdjustDurationReq: if (count) { vPayload = Format::fromVariant(vData); } + LOG_EVENT(mSenderID + AdjustDurationRequestData::toString(vData)); break; case Gui::GuiActionType::AdjustUltrafiltrationStateReq: if (count) { vPayload = Format::fromVariant(vData); } + LOG_EVENT(mSenderID + AdjustUltrafiltrationStateRequestData::toString(vData)); break; case Gui::GuiActionType::AdjustUltrafiltrationEditReq: if (count) { vPayload = Format::fromVariant(vData); } + LOG_EVENT(mSenderID + AdjustUltrafiltrationEditRequestData::toString(vData)); break; case Gui::GuiActionType::AdjustUltrafiltrationConfirmReq: if (count) { vPayload = Format::fromVariant(vData); } + LOG_EVENT(mSenderID + AdjustUltrafiltrationConfirmRequestData::toString(vData)); break; default: QString mActionIdHexString = Format::toHexString(vActionId); - LOG_ERROR(tr("Unknown Message ID (UI) '%1'").arg(mActionIdHexString)); + LOG_ERROR(mSenderID + tr("Unknown transmit Message with ID '%1'").arg(mActionIdHexString)); ok = false; break; @@ -160,45 +220,23 @@ { bool ok = false; switch (vMessage.can_id) { - case eChlid_HD_UI: + case eChlid_HD_UI : case eChlid_HD_Alarm: - case eChlid_HD_Sync: - ok = interpretMessage_HD(vMessage, vData); - break; - // coco begin validated: Is a placeholder and There is no definition/implementation of DG communication with UI. - case eChlid_DG_UI: + case eChlid_HD_Sync : ok = interpretMessage_HD(vMessage, vData); break; + + // coco-begin-validated: Is a placeholder and There is no definition/implementation of DG communication with UI. + case eChlid_DG_UI : //case eChlid_DG_Alarm: - case eChlid_DG_Sync: - ok = interpretMessage_DG(vMessage, vData); - break; + case eChlid_DG_Sync : ok = interpretMessage_DG(vMessage, vData); break; default: break; - // coco end + // coco-end } return ok; } /*! - * \brief MessageInterpreter::printUnhandled - * \details Prints out the formatted string of the vMessage of type Message - * In case the Message ID of received CANBUS message - * is known to the interpreter but has not been handled/implemented. - * \param vMessage - The message contains Unhandled Message ID - */ -void MessageInterpreter::printUnhandled(const Message &vMessage) -{ - if ( gDisableHunhandledReport ) return; - QString mActionIdHexString = Format::toHexString(vMessage.actionId, false, eLenMessageIDDigits); - QString logMessage = tr("Unhandled Message ID (HD)") + '\n' + - QString("%1 # %2 %3") - .arg(int(vMessage.can_id), 3, 16, QChar('0')) - .arg(mActionIdHexString) - .arg(QString(vMessage.data.toHex('.'))); - LOG_ERROR(logMessage); -} - -/*! * \brief MessageInterpreter::interpretMessage_HD * \details This method will be called * for received messages from HD to interpret the vMessage of type Message @@ -217,91 +255,38 @@ vData.clear(); //qDebug() << vMessage.actionId; switch (vMessage.actionId) { // notice we are in receive mode - case Gui::GuiActionType::CanBUSFaultCount: - ok = canbusFaultCountData (vMessage, vData); - break; + // ----- Debug + case Gui::GuiActionType::CanBUSFaultCount : ok = canbusFaultCountData (vMessage, vData); break; - case Gui::GuiActionType::PowerOff: { - ok = powerOffData (vMessage, vData); - break; - } - case Gui::GuiActionType::Acknow: - ok = true; - break; + // ----- Datum + case Gui::GuiActionType::TreatmentTime : ok = treatmentTimeData (vMessage, vData); break; + case Gui::GuiActionType::BloodFlow : ok = bloodFlowData (vMessage, vData); break; + case Gui::GuiActionType::DialysateInletFlow : ok = dialysateInletFlowData (vMessage, vData); break; + case Gui::GuiActionType::DialysateOutletFlow : ok = dialysateOutletFlowData (vMessage, vData); break; + case Gui::GuiActionType::TreatmentRanges : ok = treatmentRangesData (vMessage, vData); break; + case Gui::GuiActionType::PressureOcclusion : ok = pressureOcclusionData (vMessage, vData); break; + case Gui::GuiActionType::TreatmentState : ok = treatmentStateData (vMessage, vData); break; - case Gui::GuiActionType::PowerOffBroadcast: - ok = true; - break; + // ----- Events + case Gui::GuiActionType::Acknow : ok = true; break; + case Gui::GuiActionType::PowerOff : ok = powerOff (vMessage, vData); break; + case Gui::GuiActionType::PowerOffBroadcast : ok = true; LOG_EVENT("HD,PowerOff Warning"); break; + case Gui::GuiActionType::AlarmStatus : ok = alarmStatus (vMessage, vData); break; + case Gui::GuiActionType::AlarmTriggered : ok = alarmTriggered (vMessage, vData); break; + case Gui::GuiActionType::AlarmCleared : ok = alarmCleared (vMessage, vData); break; - case Gui::GuiActionType::BloodFlow: - ok = bloodFlowData (vMessage, vData); - break; + // Adjustment Response Messages + case Gui::GuiActionType::AdjustDurationRsp : ok = adjustDuration (vMessage, vData); break; + case Gui::GuiActionType::AdjustBloodDialysateRsp : ok = adjustBloodDialysate (vMessage, vData); break; + case Gui::GuiActionType::AdjustUltrafiltrationStateReq : ok = adjustUltrafiltrationState (vMessage, vData); break; + case Gui::GuiActionType::AdjustUltrafiltrationEditRsp : ok = adjustUltrafiltrationEdit (vMessage, vData); break; + case Gui::GuiActionType::AdjustUltrafiltrationConfirmRsp: ok = adjustUltrafiltrationConfirm (vMessage, vData); break; - case Gui::GuiActionType::DialysateInletFlow: - ok = dialysateInletFlowData (vMessage, vData); - break; - - case Gui::GuiActionType::DialysateOutletFlow: - ok = dialysateOutletFlowData (vMessage, vData); - break; - - case Gui::GuiActionType::TreatmentTime: - ok = treatmentTime (vMessage, vData); - break; - - case Gui::GuiActionType::AlarmStatus: - ok = alarmStatus (vMessage, vData); - break; - - case Gui::GuiActionType::PressureOcclusion: - ok = pressureOcclusionData (vMessage, vData); - break; - - case Gui::GuiActionType::TreatmentRanges: - ok = treatmentRangesData (vMessage, vData); - break; - - case Gui::GuiActionType::AdjustBloodDialysateRsp: - ok = adjustBloodDialysateData (vMessage, vData); - break; - - case Gui::GuiActionType::AdjustDurationRsp: - ok = adjustDurationData (vMessage, vData); - break; - - case Gui::GuiActionType::AdjustUltrafiltrationStateReq: // AcknowGeneric : Generic Acknow respose - ok = adjustUltrafiltrationStateData (vMessage, vData); - break; - - case Gui::GuiActionType::AdjustUltrafiltrationEditRsp: - ok = adjustUltrafiltrationEditData (vMessage, vData); - break; - - case Gui::GuiActionType::AdjustUltrafiltrationConfirmRsp: - ok = adjustUltrafiltrationConfirmData (vMessage, vData); - break; - // unhandles messages: these will only be logged as received message // there has nothing been defined for these messages. - case Gui::GuiActionType::AlarmTriggered: - printUnhandled (vMessage); - ok = true; - break; - - case Gui::GuiActionType::AlarmCleared: - printUnhandled (vMessage); - ok = true; - break; - - case Gui::GuiActionType::TreatmentState: - printUnhandled (vMessage); - ok = true; - break; - - default: - printUnhandled (vMessage); - break; + default : printUnhandled (vMessage ); break; } + return ok; } @@ -321,413 +306,307 @@ bool MessageInterpreter::interpretMessage_DG(const Message &vMessage, QVariantList &vData) { bool ok = false; + QString mSenderID = "DG,"; vData.clear(); switch (vMessage.actionId) { // notice we are in receive mode - case Gui::GuiActionType::LoadCellReadings: - ok = loadCellReadingsData (vMessage, vData); + case Gui::GuiActionType::DGCheckIn: + ok = true; + LOG_EVENT(mSenderID + QString("DG,CheckIn," + QVariant(vData).toStringList().join(','))); break; - case Gui::GuiActionType::TemperatureSensors: - ok = temperatureSensorsData (vMessage, vData); - break; + case Gui::GuiActionType::LoadCellReadings : ok = loadCellReadingsData (vMessage, vData); break; + case Gui::GuiActionType::TemperatureSensors : ok = temperatureSensorsData (vMessage, vData); break; - default: - printUnhandled (vMessage); - break; + // unhandles messages: these will only be logged as received message + // there has nothing been defined for these messages. + default : printUnhandled (vMessage ); break; } + return ok; } -/*! - * \brief MessageInterpreter::getPowerOffData - * \details This is the method which interprets the PowerOff message data - * in vMessage of type Message. - * to its elements of data. - * \param vMessage - The vMessage of type Message which contains all the data, require to be interpreted. - * \param vData - The BloodFlow data - * \return true if the data can be extracted as defined for PowerOff Message ID - */ -bool MessageInterpreter::getPowerOffData(const Message &vMessage, Model::MPowerOff &vData) -{ - if ( vMessage.actionId != Gui::GuiActionType::PowerOff) { - return false; - } +// ---------- ---------- Message handlers ---------- ---------- // - if ( vMessage.data.length() < payloadLen[Gui::GuiActionType::PowerOff] ) { - QString mActionIdHexString = Format::toHexString(vMessage.actionId); - LOG_ERROR(tr("Incorrect data for Message ID (HD) '%1'").arg(mActionIdHexString)); - return false; - } - - vData.fromByteArray(vMessage.data); - - return true; -} - +// ---------- ---------- ---------- ---------- ---------- Debug ---------- ---------- ---------- ---------- ---------- // /*! - * \brief MessageInterpreter::bloodFlowData - * \details Used the getBloodFlowData method and converts each parameter - * in vData of type QVaranitList, to be used in the GUI - * Also logs the data - * \param vMessage - The message - * \param vData - the output data - * \return return value of the method getBloodFlowData + * \brief MessageInterpreter::canbusFaultCountData + * \details This method interprets Fault Count message data + * in vMessage of type Message. This message is only used for debugging purposes. + * \param vMessage - The vMessage of type Message which contains all the data, + * require to be interpreted. + * \param vData - Fault Count data + * \return true if the data can be extracted as defined for Fault Count Message ID */ -bool MessageInterpreter::powerOffData(const Message &vMessage, QVariantList &vData) +bool MessageInterpreter::canbusFaultCountData(const Message &vMessage, QVariantList &vData) { - bool ok; - Model::MPowerOff mData; - ok = getPowerOffData(vMessage, mData); - LOG_DATUM(mData.toString()); + // TODO : review other methods + bool ok = false; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::CanBUSFaultCount) ) return ok; + QVariantList mData; + int index = 0; + Types::U32 mCanBUSFaultCount; + ok = GetValue(vMessage.data, index, mCanBUSFaultCount); + // coco begin validated : developer safety if for any reason length of CanBUSFaultCount set to 0 if (ok) { - mData.toVariantList(vData); - emit didActionReceive(mData.data()); + // coco end + vData += mCanBUSFaultCount.value; } return ok; } +// ---------- ---------- ---------- ---------- ---------- Data ---------- ---------- ---------- ---------- ---------- // +// ---------- ---------- ---------- ---------- ---------- - HD ---------- ---------- ---------- ---------- ---------- // + /*! - * \brief MessageInterpreter::getBloodFlowData - * \details This is the method which interprets the Blood Flow message data in vMessage of type Message - * to its elements of data. - * \param vMessage - The vMessage of type Message which contains all the data, require to be interpreted. - * \param vData - The BloodFlow data - * \return true if the message can be successfully converted to the Blood Flow data elements. + * \brief MessageInterpreter::treatmentTimeData + * \details This method interprets Treatment Time message data + * in vMessage of type Message. + * \param vMessage - The vMessage of type Message which contains all the data, + * require to be interpreted. + * \param vData - Treatment Time data + * \return true if the data can be extracted as defined for Treatment Time Message ID */ -bool MessageInterpreter::getBloodFlowData(const Message &vMessage, Model::MBloodFlow &vData) +bool MessageInterpreter::treatmentTimeData(const Message &vMessage, QVariantList &vData) { - if ( vMessage.actionId != Gui::GuiActionType::BloodFlow ) { - return false; - } + // TODO : review other methods + bool ok = false; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::TreatmentTime) ) return ok; - if ( vMessage.data.length() < payloadLen[Gui::GuiActionType::BloodFlow] ) { - QString mActionIdHexString = Format::toHexString(vMessage.actionId); - LOG_ERROR(tr("Incorrect data for Message ID (HD) '%1'").arg(mActionIdHexString)); - return false; - } + Model::MTreatmentTime mData; + ok = mData.fromByteArray(vMessage.data); + LOG_DATUM("HD," + mData.toString()); - vData.fromByteArray(vMessage.data); + mData.toVariantList(vData); + emit didActionReceive(mData.data()); - return true; + return ok; } /*! * \brief MessageInterpreter::bloodFlowData - * \details Used the getBloodFlowData method and converts each parameter - * in vData of type QVaranitList, to be used in the GUI - * Also logs the data - * \param vMessage - The message - * \param vData - the output data - * \return return value of the method getBloodFlowData + * \details This method interprets Blood Flow message data + * in vMessage of type Message. + * \param vMessage - The vMessage of type Message which contains all the data, + * require to be interpreted. + * \param vData - Blood Flow data + * \return true if the data can be extracted as defined for Blood Flow Message ID */ bool MessageInterpreter::bloodFlowData(const Message &vMessage, QVariantList &vData) { - bool ok; + // TODO : review other methods + bool ok = false; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::BloodFlow)) return ok; + Model::MBloodFlow mData; - ok = getBloodFlowData(vMessage, mData); - LOG_DATUM(mData.toString()); + ok = mData.fromByteArray(vMessage.data); + LOG_DATUM("HD," + mData.toString()); - if (ok) { - mData.toVariantList(vData); - emit didActionReceive(mData.data()); - } + mData.toVariantList(vData); + emit didActionReceive(mData.data()); + return ok; } /*! - * \brief MessageInterpreter::getDialysateInletFlowData - * \details This is the method which interprets the Dialysate Inlet Flow message data in vMessage of type Message - * to its elements of data. - * \param vMessage - The vMessage of type Message which contains all the data, require to be interpreted. - * \param vData - The dialydate inlet flow data - * \return true if the message can be successfully converted to the Blood Flow data elements. - */ -bool MessageInterpreter::getDialysateInletFlowData(const Message &vMessage, Model::MDialysateFlow &vData) -{ - if ( vMessage.actionId != Gui::GuiActionType::DialysateInletFlow ) { - return false; - } - - if ( vMessage.data.length() < payloadLen[Gui::GuiActionType::DialysateInletFlow] ) { - QString mActionIdHexString = Format::toHexString(vMessage.actionId); - LOG_ERROR(tr("Incorrect data for Message ID (HD) '%1'").arg(mActionIdHexString)); - return false; - } - - vData.fromByteArray(vMessage.data); - - return true; -} - -/*! * \brief MessageInterpreter::dialysateInletFlowData - * \details Used the getDialysateInletFlowData method and converts each parameter - * in vData of type QVaranitList, to be used in the GUI - * Also logs the data - * \param vMessage - The message - * \param vData - the output data - * \return return value of the method getDialysateInletFlowData + * \details This method interprets Dialysate Inlet Flow message data + * in vMessage of type Message. + * \param vMessage - The vMessage of type Message which contains all the data, + * require to be interpreted. + * \param vData - Dialysate Inlet Flow data + * \return true if the data can be extracted as defined for Dialysate Inlet Flow Message ID */ bool MessageInterpreter::dialysateInletFlowData(const Message &vMessage, QVariantList &vData) { - bool ok; + // TODO : review other methods + bool ok = false; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::DialysateInletFlow) ) return ok; + Model::MDialysateFlow mData; - ok = getDialysateInletFlowData(vMessage, mData); - LOG_DATUM(mData.toString()); + ok = mData.fromByteArray(vMessage.data); + LOG_DATUM("HD," + mData.toString()); - if (ok) { - mData.toVariantList(vData); - emit didActionReceive(mData.data()); - } + mData.toVariantList(vData); + emit didActionReceive(mData.data()); + return ok; } - /*! - * \brief MessageInterpreter::getDialysateOutletFlowData - * \details This is the method which interprets the Dialysate Outlet Flow message data in vMessage of type Message - * to its elements of data. - * \param vMessage - The vMessage of type Message which contains all the data, require to be interpreted. - * \param vData - The dialydate outlet flow data (ultrafiltration) - * \return true if the message can be successfully converted to the Blood Flow data elements. - */ -bool MessageInterpreter::getDialysateOutletFlowData(const Message &vMessage, Model::MOutletFlow &vData) -{ - if ( vMessage.actionId != Gui::GuiActionType::DialysateOutletFlow ) { - return false; - } - - if ( vMessage.data.length() < payloadLen[Gui::GuiActionType::DialysateOutletFlow] ) { - QString mActionIdHexString = Format::toHexString(vMessage.actionId); - LOG_ERROR(tr("Incorrect data for Message ID (HD) '%1'").arg(mActionIdHexString)); - return false; - } - - vData.fromByteArray(vMessage.data); - - return true; -} - -/*! * \brief MessageInterpreter::dialysateOutletFlowData - * \details Used the getDialysateOutletFlowData method and converts each parameter - * in vData of type QVaranitList, to be used in the GUI - * Also logs the data - * \param vMessage - The message - * \param vData - the output data - * \return return value of the method getDialysateOutletFlowData + * \details This method interprets Dialysate Outlet Flow message data + * in vMessage of type Message. + * \param vMessage - The vMessage of type Message which contains all the data, + * require to be interpreted. + * \param vData - Dialysate Outlet Flow data + * \return true if the data can be extracted as defined for Dialysate Outlet Flow Message ID */ bool MessageInterpreter::dialysateOutletFlowData(const Message &vMessage, QVariantList &vData) { - bool ok; + // TODO : review other methods + bool ok = false; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::DialysateOutletFlow) ) return ok; + Model::MOutletFlow mData; - ok = getDialysateOutletFlowData(vMessage, mData); - LOG_DATUM(mData.toString()); + ok = mData.fromByteArray(vMessage.data); + LOG_DATUM("HD," + mData.toString()); - if (ok) { - mData.toVariantList(vData); - emit didActionReceive(mData.data()); - } + mData.toVariantList(vData); + emit didActionReceive(mData.data()); + return ok; } /*! - * \brief MessageInterpreter::getDialysateOutletFlowData - * \param vMessage - The vMessage of type Message which contains all the data, require to be interpreted. - * \param vData - Treatment Time data - * \return true if the message can be successfully converted to the Blood Flow data elements. + * \brief MessageInterpreter::treatmentRangesData + * \details This method interprets Treatment Ranges message data + * in vMessage of type Message. + * \param vMessage - The vMessage of type Message which contains all the data, + * require to be interpreted. + * \param vData - Treatment Ranges data + * \return true if the data can be extracted as defined for Treatment Ranges Message ID */ -bool MessageInterpreter::getTreatmentTime( const Message &vMessage , Model::MTreatmentTime &vData) +bool MessageInterpreter::treatmentRangesData(const Message &vMessage, QVariantList &vData) { - if ( vMessage.actionId != Gui::GuiActionType::TreatmentTime ) { - return false; - } + // TODO : review other methods + bool ok = false; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::TreatmentRanges) ) return ok; - if ( vMessage.data.length() < payloadLen[Gui::GuiActionType::TreatmentTime] ) { - QString mActionIdHexString = Format::toHexString(vMessage.actionId); - LOG_ERROR(tr("Incorrect data for Message ID (HD) '%1'").arg(mActionIdHexString)); - return false; - } + Model::MTreatmentRanges mData; + ok = mData.fromByteArray(vMessage.data); + LOG_DATUM("HD," + mData.toString()); - vData.fromByteArray(vMessage.data); - return true; -} + mData.toVariantList(vData); + emit didActionReceive(mData.data()); -/*! - * \brief MessageInterpreter::treatmentTime - * \details Used the getTreatmentTime method and converts each parameter - * in vData of type QVaranitList, to be used in the GUI - * Also logs the data - * \param vMessage - The message - * \param vData - the output data - * \return return value of the method getDialysateOutletFlowData - */ -bool MessageInterpreter::treatmentTime(const Message &vMessage, QVariantList &vData) -{ - bool ok; - Model::MTreatmentTime mData; - ok = getTreatmentTime(vMessage, mData); - LOG_DATUM(mData.toString()); - - if (ok) { - mData.toVariantList(vData); - emit didActionReceive(mData.data()); - } return ok; } /*! - * \brief MessageInterpreter::getAlarmStatus - * \details This method interprets AlarmStatus message data + * \brief MessageInterpreter::pressureOcclusionData + * \details This method interprets Pressure/Occlusion message data * in vMessage of type Message. * \param vMessage - The vMessage of type Message which contains all the data, * require to be interpreted. - * \param vData - Alarm Status dta - * \return true if the data can be extracted as defined for AlarmStatus Message ID + * \param vData - Pressure/Occlusion data + * \return true if the data can be extracted as defined for Pressure/Occlusion Message ID */ -bool MessageInterpreter::getAlarmStatus(const Message &vMessage, Model::MAlarmStatus &vData) +bool MessageInterpreter::pressureOcclusionData(const Message &vMessage, QVariantList &vData) { - if ( vMessage.actionId != Gui::GuiActionType::AlarmStatus ) { - return false; - } + // TODO : review other methods + bool ok = false; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::PressureOcclusion) ) return ok; - if ( vMessage.data.length() < payloadLen[Gui::GuiActionType::AlarmStatus] ) { - QString mActionIdHexString = Format::toHexString(vMessage.actionId); - LOG_ERROR(tr("Incorrect data for Message ID (HD) '%1'").arg(mActionIdHexString)); - return false; - } + Model::MPressureOcclusion mData; + ok = mData.fromByteArray(vMessage.data); + LOG_DATUM("HD," + mData.toString()); - vData.fromByteArray(vMessage.data); + mData.toVariantList(vData); + emit didActionReceive(mData.data()); - return true; -} - -/*! - * \brief MessageInterpreter::alarmStatus - * \details Used the getAlarmStatus method and converts each parameter - * in vData of type QVaranitList, to be used in the GUI - * Also logs the data - * \param vMessage - The message - * \param vData - the output data - * \return return value of the method getAlarmStatus - */ -bool MessageInterpreter::alarmStatus(const Message &vMessage, QVariantList &vData) { - bool ok; - Model::MAlarmStatus mData; - ok = getAlarmStatus(vMessage, mData); - LOG_DATUM(mData.toString()); - - if (ok) { - mData.toVariantList(vData); - emit didActionReceive(mData.data()); - } return ok; - - // --- an example of unit test --- // - // Types::Flags flag; - // int i = 0; - // QByteArray ba; - // ba += 0x83; ba += 0xf8; ba += 0x28; ba += 0xa1; - // Types::getBits(ba, i, flag, 32); - // qDebug() << '@' << flag << flag.toString() << ba; } /*! - * \brief MessageInterpreter::getPressureOcclusionData - * \details This method interprets Pressure Occlusion message data + * \brief MessageInterpreter::treatmentStateData + * \details This method interprets Treatment State message data * in vMessage of type Message. * \param vMessage - The vMessage of type Message which contains all the data, * require to be interpreted. - * \param vData - Pressure Occlusion data - * \return true if the data can be extracted as defined for PressureOcclusion Message ID + * \param vData - Treatment State data + * \return true if the data can be extracted as defined for Treatment State Message ID */ -bool MessageInterpreter::getPressureOcclusionData(const Message &vMessage, Model::MPressureOcclusion &vData) +bool MessageInterpreter::treatmentStateData(const Message &vMessage, QVariantList &vData) { - if ( vMessage.actionId != Gui::GuiActionType::PressureOcclusion ) { - return false; - } + // TODO : review other methods + bool ok = false; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::TreatmentState) ) return ok; - if ( vMessage.data.length() < payloadLen[Gui::GuiActionType::PressureOcclusion] ) { - QString mActionIdHexString = Format::toHexString(vMessage.actionId); - LOG_ERROR(tr("Incorrect data for Message ID (HD) '%1'").arg(mActionIdHexString)); - return false; - } + Model::MTreatmentState mData; + ok = mData.fromByteArray(vMessage.data); + LOG_DATUM("HD," + mData.toString()); - vData.fromByteArray(vMessage.data); + mData.toVariantList(vData); + emit didActionReceive(mData.data()); - return true; + return ok; } +// ---------- ---------- ---------- ---------- ---------- - DG ---------- ---------- ---------- ---------- ---------- // + /*! - * \brief MessageInterpreter::pressureOcclusionData - * \details Used the getPressureOcclusionData method and converts each parameter - * in vData of type QVaranitList, to be used in the GUI - * Also logs the data - * \param vMessage - The message - * \param vData - the output data - * \return return value of the method getPressureOcclusionData + * \brief MessageInterpreter::loadCellReadingsData + * \details This method interprets Load Cell Readings message data + * in vMessage of type Message. + * \param vMessage - The vMessage of type Message which contains all the data, + * require to be interpreted. + * \param vData - Load Cell Readings data + * \return true if the data can be extracted as defined for Load Cell Readings Message ID */ -bool MessageInterpreter::pressureOcclusionData(const Message &vMessage, QVariantList &vData) +bool MessageInterpreter::loadCellReadingsData(const Message &vMessage, QVariantList &vData) { - bool ok; - Model::MPressureOcclusion mData; - ok = getPressureOcclusionData(vMessage, mData); - LOG_DATUM(mData.toString()); + // TODO : review other methods + bool ok = false; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::LoadCellReadings) ) return ok; - if (ok) { - mData.toVariantList(vData); - emit didActionReceive(mData.data()); - } + Model::MLoadCellReadings mData; + ok = mData.fromByteArray(vMessage.data); + LOG_DATUM("DG," + mData.toString()); + + mData.toVariantList(vData); + emit didActionReceive(mData.data()); + return ok; } /*! - * \brief MessageInterpreter::treatmentRangesData - * \details This method interprets Treatment Ranges message data + * \brief MessageInterpreter::temperatureSensorsData + * \details This method interprets Temperature Sensors message data * in vMessage of type Message. * \param vMessage - The vMessage of type Message which contains all the data, * require to be interpreted. - * \param vData - Treatment Ranges data - * \return true if the data can be extracted as defined for Treatment Ranges Message ID + * \param vData - Temperature Sensors data + * \return true if the data can be extracted as defined for Temperature Sensors Message ID */ -bool MessageInterpreter::treatmentRangesData(const Message &vMessage, QVariantList &vData) +bool MessageInterpreter::temperatureSensorsData(const Message &vMessage, QVariantList &vData) { // TODO : review other methods bool ok = false; - if ( ! isType (vMessage, Gui::GuiActionType::TreatmentRanges) ) return ok; - if ( ! isPayloadLenValid(vMessage, Gui::GuiActionType::TreatmentRanges) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::TemperatureSensors) ) return ok; - Model::MTreatmentRanges mData; + Model::MTemperatureSensors mData; ok = mData.fromByteArray(vMessage.data); - LOG_DATUM(mData.toString()); + LOG_DATUM("DG," + mData.toString()); mData.toVariantList(vData); emit didActionReceive(mData.data()); return ok; } +// ---------- ---------- ---------- ---------- ---------- Events ---------- ---------- ---------- ---------- ---------- // +// ---------- ---------- ---------- ---------- ---------- - HD ---------- ---------- ---------- ---------- ---------- // + /*! - * \brief MessageInterpreter::loadCellReadingsData - * \details This method interprets LoadCellReadings message data + * \brief MessageInterpreter::powerOff + * \details This method interprets Power Off message data * in vMessage of type Message. * \param vMessage - The vMessage of type Message which contains all the data, * require to be interpreted. - * \param vData - Load Cell Readings data - * \return true if the data can be extracted as defined for LoadCellReadings Message ID + * \param vData - Power Off data + * \return true if the data can be extracted as defined for Power Off Message ID */ -bool MessageInterpreter::loadCellReadingsData(const Message &vMessage, QVariantList &vData) +bool MessageInterpreter::powerOff(const Message &vMessage, QVariantList &vData) { // TODO : review other methods bool ok = false; - if ( ! isType (vMessage, Gui::GuiActionType::LoadCellReadings) ) return ok; - if ( ! isPayloadLenValid(vMessage, Gui::GuiActionType::LoadCellReadings) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::PowerOff) ) return ok; - Model::MLoadCellReadings mData; + Model::MPowerOff mData; ok = mData.fromByteArray(vMessage.data); - LOG_DATUM(mData.toString()); + LOG_EVENT("HD," + mData.toString()); mData.toVariantList(vData); emit didActionReceive(mData.data()); @@ -736,86 +615,89 @@ } /*! - * \brief MessageInterpreter::TemperatureSensorsData - * \details This method interprets TemperatureSensors message data + * \brief MessageInterpreter::alarmStatus + * \details This method interprets Alarm Status message data * in vMessage of type Message. * \param vMessage - The vMessage of type Message which contains all the data, * require to be interpreted. - * \param vData - Load Cell Readings data - * \return true if the data can be extracted as defined for TemperatureSensors Message ID + * \param vData - Alarm Status data + * \return true if the data can be extracted as defined for Alarm Status Message ID */ -bool MessageInterpreter::temperatureSensorsData(const Message &vMessage, QVariantList &vData) -{ +bool MessageInterpreter::alarmStatus(const Message &vMessage, QVariantList &vData) { // TODO : review other methods bool ok = false; - if ( ! isType (vMessage, Gui::GuiActionType::TemperatureSensors) ) return ok; - if ( ! isPayloadLenValid(vMessage, Gui::GuiActionType::TemperatureSensors) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::AlarmStatus) ) return ok; - Model::MTemperatureSensors mData; + Model::MAlarmStatus mData; ok = mData.fromByteArray(vMessage.data); - LOG_DATUM(mData.toString()); + LOG_EVENT("HD," + mData.toString()); mData.toVariantList(vData); emit didActionReceive(mData.data()); return ok; + + // --- an example of unit test --- // + // Types::Flags flag; + // int i = 0; + // QByteArray ba; + // ba += 0x83; ba += 0xf8; ba += 0x28; ba += 0xa1; + // Types::getBits(ba, i, flag, 32); + // qDebug() << '@' << flag << flag.toString() << ba; } - /*! - * \brief MessageInterpreter::loadCellReadingsData - * \details This method interprets LoadCellReadings message data + * \brief MessageInterpreter::alarmTriggered + * \details This method interprets Alarm Triggered message data * in vMessage of type Message. * \param vMessage - The vMessage of type Message which contains all the data, * require to be interpreted. - * \param vData - Load Cell Readings data - * \return true if the data can be extracted as defined for LoadCellReadings Message ID + * \param vData - Alarm Triggered data + * \return true if the data can be extracted as defined for Alarm Triggered Message ID */ -bool MessageInterpreter::canbusFaultCountData(const Message &vMessage, QVariantList &vData) +bool MessageInterpreter::alarmTriggered(const Message &vMessage, QVariantList &vData) { // TODO : review other methods bool ok = false; - if ( ! isType (vMessage, Gui::GuiActionType::CanBUSFaultCount) ) return ok; - if ( ! isPayloadLenValid(vMessage, Gui::GuiActionType::CanBUSFaultCount) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::AlarmTriggered) ) return ok; - QVariantList mData; - int index = 0; - Types::U32 mCanBUSFaultCount; - ok = GetValue(vMessage.data, index, mCanBUSFaultCount); - // coco begin validated : developer safety if for any reason length of CanBUSFaultCount set to 0 - if (ok) { - // coco end - vData += mCanBUSFaultCount.value; - } + Model::MAlarmTriggered mData; + ok = mData.fromByteArray(vMessage.data); + LOG_EVENT("HD," + mData.toString()); + + mData.toVariantList(vData); + emit didActionReceive(mData.data()); + return ok; } /*! - * \brief MessageInterpreter::adjustBloodDialysateData - * \details This method interprets AdjustBlood Dialysate Response message data + * \brief MessageInterpreter::alarmCleared + * \details This method interprets Alarm Cleared message data * in vMessage of type Message. * \param vMessage - The vMessage of type Message which contains all the data, * require to be interpreted. - * \param vData - AdjustBlood Dialysate Response data - * \return true if the data can be extracted as defined for AdjustBlood Dialysate Response Message ID + * \param vData - Alarm Cleared data + * \return true if the data can be extracted as defined for Alarm Cleared Message ID */ -bool MessageInterpreter::adjustBloodDialysateData(const Message &vMessage, QVariantList &vData) +bool MessageInterpreter::alarmCleared(const Message &vMessage, QVariantList &vData) { // TODO : review other methods bool ok = false; - if ( ! isType (vMessage, Gui::GuiActionType::AdjustBloodDialysateRsp) ) return ok; - if ( ! isPayloadLenValid(vMessage, Gui::GuiActionType::AdjustBloodDialysateRsp) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::AlarmCleared) ) return ok; - Model::MAdjustBloodDialysateResponse mData; + Model::MAlarmCleared mData; ok = mData.fromByteArray(vMessage.data); - LOG_DATUM(mData.toString()); + LOG_EVENT("HD," + mData.toString()); mData.toVariantList(vData); emit didActionReceive(mData.data()); return ok; } +// ---------- ---------- ---------- ---------- ---------- Adjustments ---------- ---------- ---------- ---------- ---------- // + /*! * \brief MessageInterpreter::adjustDurationData * \details This method interprets Treatment Duration Adjustment Response message data @@ -825,15 +707,14 @@ * \param vData - Treatment Duration Adjustment Response data * \return true if the data can be extracted as defined for Treatment Duration Adjustment Response Message ID */ -bool MessageInterpreter::adjustDurationData(const Message &vMessage, QVariantList &vData) +bool MessageInterpreter::adjustDuration(const Message &vMessage, QVariantList &vData) { bool ok = false; - if ( ! isType (vMessage, Gui::GuiActionType::AdjustDurationRsp) ) return ok; - if ( ! isPayloadLenValid(vMessage, Gui::GuiActionType::AdjustDurationRsp) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::AdjustDurationRsp) ) return ok; Model::MAdjustDurationResponse mData; ok = mData.fromByteArray(vMessage.data); - LOG_DATUM(mData.toString()); + LOG_EVENT("HD," + mData.toString()); mData.toVariantList(vData); emit didActionReceive(mData.data()); @@ -842,24 +723,48 @@ } /*! + * \brief MessageInterpreter::adjustBloodDialysateData + * \details This method interprets AdjustBlood Dialysate Response message data + * in vMessage of type Message. + * \param vMessage - The vMessage of type Message which contains all the data, + * require to be interpreted. + * \param vData - AdjustBlood Dialysate Response data + * \return true if the data can be extracted as defined for AdjustBlood Dialysate Response Message ID + */ +bool MessageInterpreter::adjustBloodDialysate(const Message &vMessage, QVariantList &vData) +{ + // TODO : review other methods + bool ok = false; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::AdjustBloodDialysateRsp) ) return ok; + + Model::MAdjustBloodDialysateResponse mData; + ok = mData.fromByteArray(vMessage.data); + LOG_EVENT("HD," + mData.toString()); + + mData.toVariantList(vData); + emit didActionReceive(mData.data()); + + return ok; +} + +/*! * \brief MessageInterpreter::ultrafiltrationState - * \details This method interprets Treatment Ultrafiltration state change Response message data + * \details This method interprets Treatment Ultrafiltration State Adjustment Response message data * in vMessage of type Message. * \param vMessage - The vMessage of type Message which contains all the data, * require to be interpreted. - * \param vData - Treatment Ultrafiltration state change Response data - * \return true if the data can be extracted as defined for Treatment Duration Adjustment Response Message ID + * \param vData - Treatment Ultrafiltration State Adjustment Response data + * \return true if the data can be extracted as defined for Treatment Ultrafiltration State Adjustment Response Message ID */ -bool MessageInterpreter::adjustUltrafiltrationStateData(const Message &vMessage, QVariantList &vData) +bool MessageInterpreter::adjustUltrafiltrationState(const Message &vMessage, QVariantList &vData) { bool ok = false; - // TODO : The Ultrafiltration State change shall have the rejection reason like other responses. - if ( ! isType (vMessage, Gui::GuiActionType::AdjustUltrafiltrationStateReq) ) return ok; - if ( ! isPayloadLenValid(vMessage, Gui::GuiActionType::AcknowGeneric ) ) return ok; + // TODO : In HD the Ultrafiltration State change shall have the rejection reason like other responses. + if ( ! isValidMessage(vMessage, Gui::GuiActionType::AdjustUltrafiltrationStateReq) ) return ok; Model::MAdjustUltrafiltrationStateResponse mData; ok = mData.fromByteArray(vMessage.data); - LOG_DATUM(mData.toString()); + LOG_EVENT("HD," + mData.toString()); mData.toVariantList(vData); emit didActionReceive(mData.data()); @@ -869,22 +774,21 @@ /*! * \brief MessageInterpreter::adjustUltrafiltrationEditData - * \details This method interprets Treatment Ultrafiltration Adjustment Response message data + * \details This method interprets Treatment Ultrafiltration Volume Adjustment Response message data * in vMessage of type Message. * \param vMessage - The vMessage of type Message which contains all the data, * require to be interpreted. - * \param vData - Treatment Duration Adjustment Response data - * \return true if the data can be extracted as defined for Treatment Ultrafiltration Adjustment Response Message ID + * \param vData - Treatment Ultrafiltration Volume Adjustment Response data + * \return true if the data can be extracted as defined for Treatment Ultrafiltration Volume Adjustment Response Message ID */ -bool MessageInterpreter::adjustUltrafiltrationEditData(const Message &vMessage, QVariantList &vData) +bool MessageInterpreter::adjustUltrafiltrationEdit(const Message &vMessage, QVariantList &vData) { bool ok = false; - if ( ! isType (vMessage, Gui::GuiActionType::AdjustUltrafiltrationEditRsp) ) return ok; - if ( ! isPayloadLenValid(vMessage, Gui::GuiActionType::AdjustUltrafiltrationEditRsp) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::AdjustUltrafiltrationEditRsp) ) return ok; Model::MAdjustUltrafiltrationEditResponse mData; ok = mData.fromByteArray(vMessage.data); - LOG_DATUM(mData.toString()); + LOG_EVENT("HD," + mData.toString()); mData.toVariantList(vData); emit didActionReceive(mData.data()); @@ -894,22 +798,21 @@ /*! * \brief MessageInterpreter::adjustUltrafiltrationConfirmData - * \details This method interprets Treatment Ultrafiltration Adjustment Response message data + * \details This method interprets Treatment Ultrafiltration Volume Adjustment Confirm Response message data * in vMessage of type Message. * \param vMessage - The vMessage of type Message which contains all the data, * require to be interpreted. - * \param vData - Treatment Duration Adjustment Response data - * \return true if the data can be extracted as defined for Treatment Ultrafiltration Adjustment Response Message ID + * \param vData - Treatment Ultrafiltration Volume Adjustment Confirm Response data + * \return true if the data can be extracted as defined for Treatment Ultrafiltration Volume Adjustment Confirm Response Message ID */ -bool MessageInterpreter::adjustUltrafiltrationConfirmData(const Message &vMessage, QVariantList &vData) +bool MessageInterpreter::adjustUltrafiltrationConfirm(const Message &vMessage, QVariantList &vData) { bool ok = false; - if ( ! isType (vMessage, Gui::GuiActionType::AdjustUltrafiltrationConfirmRsp) ) return ok; - if ( ! isPayloadLenValid(vMessage, Gui::GuiActionType::AdjustUltrafiltrationConfirmRsp) ) return ok; + if ( ! isValidMessage(vMessage, Gui::GuiActionType::AdjustUltrafiltrationConfirmRsp) ) return ok; Model::MAdjustUltrafiltrationConfirmResponse mData; ok = mData.fromByteArray(vMessage.data); - LOG_DATUM(mData.toString()); + LOG_EVENT("HD," + mData.toString()); mData.toVariantList(vData); emit didActionReceive(mData.data()); Index: sources/canbus/messageinterpreter.h =================================================================== diff -u -rec77306c5375f80f46e76940361c5e96064a0690 -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/canbus/messageinterpreter.h (.../messageinterpreter.h) (revision ec77306c5375f80f46e76940361c5e96064a0690) +++ sources/canbus/messageinterpreter.h (.../messageinterpreter.h) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -41,70 +41,45 @@ friend class ::tst_messaging; friend class ::tst_logging; - bool isType(const Message &vMessage, Gui::GuiActionType vType) const; - bool isPayloadLenValid(const Message &vMessage, Gui::GuiActionType vType) const; + bool isType(const Message &vMessage, Gui::GuiActionType vType) const; + bool isPayloadLenValid(const Message &vMessage, Gui::GuiActionType vType) const; + bool isValidMessage(const Message &vMessage, Gui::GuiActionType vType) const; + void printUnhandled(const Message &vMessage ) const; - void printUnhandled(const Message &vMessage); + bool interpretMessage_HD(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; + bool interpretMessage_DG(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; - bool interpretMessage_HD(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; - bool interpretMessage_DG(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; + // ----- Debug + bool canbusFaultCountData(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; - // ---- PowerOff - bool getPowerOffData(const Message &vMessage, Model::MPowerOff &vData) __attribute_warn_unused_result__; - bool powerOffData(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; + // ----- Data + // ----- - HD + bool treatmentTimeData(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; + bool bloodFlowData(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; + bool dialysateInletFlowData(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; + bool dialysateOutletFlowData(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; + bool treatmentRangesData(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; + bool pressureOcclusionData(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; + bool treatmentStateData(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; - // ---- BloodFlowData - bool getBloodFlowData(const Message &vMessage, Model::MBloodFlow &vData) __attribute_warn_unused_result__; - bool bloodFlowData(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; + // ----- - DG + bool loadCellReadingsData(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; + bool temperatureSensorsData(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; - // ---- Dialysate Inlet FlowData - bool getDialysateInletFlowData(const Message &vMessage, Model::MDialysateFlow &vData) __attribute_warn_unused_result__; - bool dialysateInletFlowData(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; + // ----- Events + // ----- - HD + bool powerOff(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; + bool alarmStatus(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; + bool alarmTriggered(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; + bool alarmCleared(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; - // ---- Dialysate Outlet FlowData - bool getDialysateOutletFlowData(const Message &vMessage, Model::MOutletFlow &vData) __attribute_warn_unused_result__; - bool dialysateOutletFlowData(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; + // ----- Adjustments + bool adjustDuration (const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; + bool adjustBloodDialysate (const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; + bool adjustUltrafiltrationState (const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; + bool adjustUltrafiltrationEdit (const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; + bool adjustUltrafiltrationConfirm (const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; - // ---- AlarmStatus - bool getAlarmStatus(const Message &vMessage, Model::MAlarmStatus &vData) __attribute_warn_unused_result__; - bool alarmStatus(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; - - // ---- Treatment Time - bool getTreatmentTime(const Message &vMessage, Model::MTreatmentTime &vData) __attribute_warn_unused_result__; - bool treatmentTime(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; - - // ---- Treatment Pressure/Occlusion - bool getPressureOcclusionData(const Message &vMessage, Model::MPressureOcclusion &vData) __attribute_warn_unused_result__; - bool pressureOcclusionData(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; - - // ---- Treatment Ranges - bool treatmentRangesData(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; - - // ---- Load Cell Readings - bool loadCellReadingsData(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; - - // ---- canbus Fault Count - bool canbusFaultCountData(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; - - // ---- Temperature Sensors - bool temperatureSensorsData(const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; - - // ~~~~ Adjustments ~~~~ - // ---- Treatment Adjust response for Blood/Dialysate Flow Rate - bool adjustBloodDialysateData (const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; - - // ---- Treatment Adjust response for Treatment Duration - bool adjustDurationData (const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; - - // ---- Treatment Adjust response for Treatment Ultrafiltration - bool adjustUltrafiltrationEditData (const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; - - // ---- Treatment Adjust response for Treatment Ultrafiltration - bool adjustUltrafiltrationConfirmData (const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; - - // ---- Treatment Adjust response for Treatment Ultrafiltration state (Pause / Resume) change - bool adjustUltrafiltrationStateData (const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; - public: explicit MessageInterpreter(QObject *parent = nullptr); Index: sources/gui/guicontroller.cpp =================================================================== diff -u -reece7acacf84e8cc34b830f6b5ab3f112823a905 -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/gui/guicontroller.cpp (.../guicontroller.cpp) (revision eece7acacf84e8cc34b830f6b5ab3f112823a905) +++ sources/gui/guicontroller.cpp (.../guicontroller.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -132,7 +132,7 @@ initConnections(); - LOG_EVENT(QObject::tr("%1 Initialized").arg(metaObject()->className())); + LOG_EVENT("UI," + tr("%1 Initialized").arg(metaObject()->className())); return true; } Index: sources/gui/guiglobals.h =================================================================== diff -u -r41eec18961c2861652405a80c9cad523c0475172 -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/gui/guiglobals.h (.../guiglobals.h) (revision 41eec18961c2861652405a80c9cad523c0475172) +++ sources/gui/guiglobals.h (.../guiglobals.h) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -42,7 +42,10 @@ Unknown = 0x0000, PowerOff = 0x0100, + + DGCheckIn = 0x0600, KeepAlive = 0x0700, + BloodFlow = 0x0500, DialysateInletFlow = 0x0800, DialysateOutletFlow = 0x0B00, Index: sources/gui/qml/globals/Variables.qml =================================================================== diff -u -ra159e12630645a9a35fb0a5585cc7b639cfe6aa6 -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/gui/qml/globals/Variables.qml (.../Variables.qml) (revision a159e12630645a9a35fb0a5585cc7b639cfe6aa6) +++ sources/gui/qml/globals/Variables.qml (.../Variables.qml) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -72,15 +72,26 @@ readonly property int pauseIconDiameter : 60 - // --- PRS --- + readonly property int ultrafiltrationProgressbarWidth : 880 + readonly property int ultrafiltrationAdjustmtenOptionWidth : 520 + readonly property int ultrafiltrationAdjustmtenOptionHeight : 275 + + // --- PRS Related Section --- + // Min/Max readonly property int bloodFlowMin : 100 readonly property int bloodFlowMax : 500 + // Resolutions readonly property int bloodFlowResolution : 25 readonly property int dialysateFlowResolution : 50 - readonly property int durationResolution : 15 // PRS346 - - readonly property int ultrafiltrationProgressbarWidth : 880 - readonly property int ultrafiltrationAdjustmtenOptionWidth : 520 - readonly property int ultrafiltrationAdjustmtenOptionHeight: 275 + // Units + // - Ultrafiltration + readonly property string unitTextUltrafiltrationVolume : qsTr("(L)") + readonly property string unitTextUltrafiltrationRate : qsTr("mL/min") + readonly property string unitTextTreatmentDuration : qsTr("min") + // - Flows + readonly property string unitTextFlowRate : qsTr("mL/min") + // - Vitals + readonly property string unitTextBloodPressure : qsTr("mmHg") + readonly property string unitTextHeartBeat : qsTr("BPM" ) } Index: sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentFlow.qml =================================================================== diff -u -r8f71000a841da5e8f18efccbb30a7655d3a211cd -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentFlow.qml (.../TreatmentAdjustmentFlow.qml) (revision 8f71000a841da5e8f18efccbb30a7655d3a211cd) +++ sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentFlow.qml (.../TreatmentAdjustmentFlow.qml) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -38,7 +38,6 @@ property alias dialysateFlowRateMaximum : _dialysateFlowSlider.maximum property alias dialysateFlowRateStep : _dialysateFlowSlider.step - property string unit : qsTr("mL/min") property int textWidth : 200 titleText: qsTr("FLOWS") @@ -89,7 +88,7 @@ width: textWidth title: qsTr("Blood Flow Rate") label: _bloodFlowSlider.value - extra: _root.unit + extra: Variables.unitTextFlowRate labelFont.weight: Font.ExtraLight } Slider { id : _bloodFlowSlider @@ -98,7 +97,7 @@ height : 5 minimum : Variables.bloodFlowMin maximum : Variables.bloodFlowMax - unit : _root.unit + unit : Variables.unitTextFlowRate step : Variables.bloodFlowResolution ticks : true } @@ -117,7 +116,7 @@ width: textWidth title: qsTr("Dialysate Flow Rate") label: _dialysateFlowSlider.value - extra: _root.unit + extra: Variables.unitTextFlowRate labelFont.weight: Font.ExtraLight } Slider { id : _dialysateFlowSlider @@ -126,7 +125,7 @@ height : 5 minimum : vTreatmentRanges.treatmentRanges_Dialysate_Flow_Min maximum : vTreatmentRanges.treatmentRanges_Dialysate_Flow_Max - unit : _root.unit + unit : Variables.unitTextFlowRate step : Variables.dialysateFlowResolution ticks : true } Index: sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentUltrafiltrationConfirm.qml =================================================================== diff -u -r8f71000a841da5e8f18efccbb30a7655d3a211cd -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentUltrafiltrationConfirm.qml (.../TreatmentAdjustmentUltrafiltrationConfirm.qml) (revision 8f71000a841da5e8f18efccbb30a7655d3a211cd) +++ sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentUltrafiltrationConfirm.qml (.../TreatmentAdjustmentUltrafiltrationConfirm.qml) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -40,19 +40,15 @@ property real ultrafiltrationRateDiff : 0.000 property real ultrafiltrationRateOld : 0.000 - property string ultrafiltrationVolumeUnit : qsTr("(L)") - property string ultrafiltrationRateUnit : qsTr("mL/min") - property string treatmentDurationUnit : qsTr("min") + signal confirmRateClicked (real vVolume) + signal confirmDurationClicked(real vVolume) - signal confirmRateClicked (int vVolume) - signal confirmDurationClicked(int vVolume) - closeVisible : false confirmVisible : false backVisible : true pausedVisible : true - titleText : qsTr("ULTRAFILTRATION VOLUME") + " " + ultrafiltrationVolumeUnit + titleText : qsTr("ULTRAFILTRATION VOLUME") + " " + Variables.unitTextUltrafiltrationVolume function reset() { _rateAdjustmentButton.selected = false @@ -112,12 +108,12 @@ titleString : qsTr("%1 UF Rate") descriptionString : qsTr("The rate %3 by %1 %2,\nthe treatment duration remains the same.") .arg(Math.abs(ultrafiltrationRateDiff .toFixed(_private.decimalRate))) - .arg(ultrafiltrationRateUnit) + .arg(Variables.unitTextUltrafiltrationRate) buttonType : UltrafiltrationButton.ButtonType.UltrafiltrationRate isIncrease : ultrafiltrationRateDiff > 0 valueText : qsTr( "UF Rate : %1 %2") .arg(ultrafiltrationRate .toFixed(_private.decimalRate)) - .arg(ultrafiltrationRateUnit) + .arg(Variables.unitTextUltrafiltrationRate) onClicked : { _durationAdjustmentButton.selected = false selected = true @@ -133,7 +129,7 @@ isIncrease: treatmentDurationDiff > 0 valueText : qsTr( "UF Rate : %1 %2") .arg(ultrafiltrationRateOld .toFixed(_private.decimalRate)) - .arg(ultrafiltrationRateUnit) + .arg(Variables.unitTextUltrafiltrationRate) onClicked : { _rateAdjustmentButton.selected = false selected = true Index: sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentUltrafiltrationEdit.qml =================================================================== diff -u -r8f71000a841da5e8f18efccbb30a7655d3a211cd -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentUltrafiltrationEdit.qml (.../TreatmentAdjustmentUltrafiltrationEdit.qml) (revision 8f71000a841da5e8f18efccbb30a7655d3a211cd) +++ sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentUltrafiltrationEdit.qml (.../TreatmentAdjustmentUltrafiltrationEdit.qml) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -31,24 +31,24 @@ property int decimal : vTreatmentUltrafiltration.precision property real minimum : vTreatmentRanges.treatmentRanges_Ultrafiltration_Volume_Min property real maximum : vTreatmentRanges.treatmentRanges_Ultrafiltration_Volume_Max - property real value : vTreatmentUltrafiltration.ultrafiltration_MeasUFVol + property real value : vTreatmentUltrafiltration.ultrafiltration_RefUFVol + + property real current : vTreatmentUltrafiltration.maximum property real adjusted : _volumeSlider.value } - property string ultrafiltrationVolumeUnit : qsTr("(L)") - signal nextClicked(real vVolume) function reset() { - _volumeSlider.value = _private.minimum + _volumeSlider.value = _private.current // Per Ultrafiltration Adjustment Demo request By Blaine. } closeVisible : false confirmVisible : false backVisible : true pausedVisible : true - titleText : qsTr("ULTRAFILTRATION VOLUME") + " " + ultrafiltrationVolumeUnit + titleText : qsTr("ULTRAFILTRATION VOLUME") + " " + Variables.unitTextUltrafiltrationVolume ProgressBarEx { id: _rangeProgressBar width : Variables.ultrafiltrationProgressbarWidth Index: sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentUltrafiltrationPaused.qml =================================================================== diff -u -r26b6c684ac4baae160e844494bffa855a1a82b51 -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentUltrafiltrationPaused.qml (.../TreatmentAdjustmentUltrafiltrationPaused.qml) (revision 26b6c684ac4baae160e844494bffa855a1a82b51) +++ sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentUltrafiltrationPaused.qml (.../TreatmentAdjustmentUltrafiltrationPaused.qml) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -31,18 +31,16 @@ property int decimal: vTreatmentUltrafiltration.precision property real minimum: vTreatmentUltrafiltration.minimum property real maximum: vTreatmentUltrafiltration.maximum - property real value : vTreatmentUltrafiltration.ultrafiltration_MeasUFVol + property real value : vTreatmentUltrafiltration.ultrafiltration_RefUFVol } - property string ultrafiltrationVolumeUnit : qsTr("(L)") - signal editClicked() signal resumeClicked() confirmVisible : false pausedVisible : true - titleText : qsTr("ULTRAFILTRATION VOLUME") + " " + ultrafiltrationVolumeUnit + titleText : qsTr("ULTRAFILTRATION VOLUME") + " " + Variables.unitTextUltrafiltrationVolume ProgressBarEx { id: _progressbarex width : Variables.ultrafiltrationProgressbarWidth Index: sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentUltrafiltrationStart.qml =================================================================== diff -u -r8f71000a841da5e8f18efccbb30a7655d3a211cd -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentUltrafiltrationStart.qml (.../TreatmentAdjustmentUltrafiltrationStart.qml) (revision 8f71000a841da5e8f18efccbb30a7655d3a211cd) +++ sources/gui/qml/pages/treatment/adjustments/TreatmentAdjustmentUltrafiltrationStart.qml (.../TreatmentAdjustmentUltrafiltrationStart.qml) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -32,16 +32,14 @@ property int decimal: vTreatmentUltrafiltration.precision property real minimum: vTreatmentUltrafiltration.minimum property real maximum: vTreatmentUltrafiltration.maximum - property real value : vTreatmentUltrafiltration.ultrafiltration_MeasUFVol + property real value : vTreatmentUltrafiltration.ultrafiltration_RefUFVol } - property string ultrafiltrationVolumeUnit : qsTr("(L)") - signal pauseClicked() confirmVisible: false - titleText : qsTr("ULTRAFILTRATION VOLUME") + " " + ultrafiltrationVolumeUnit + titleText : qsTr("ULTRAFILTRATION VOLUME") + " " + Variables.unitTextUltrafiltrationVolume ProgressBarEx { id: _progressbarex width : Variables.ultrafiltrationProgressbarWidth Index: sources/gui/qml/pages/treatment/sections/TreatmentFlows.qml =================================================================== diff -u -ra159e12630645a9a35fb0a5585cc7b639cfe6aa6 -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/gui/qml/pages/treatment/sections/TreatmentFlows.qml (.../TreatmentFlows.qml) (revision a159e12630645a9a35fb0a5585cc7b639cfe6aa6) +++ sources/gui/qml/pages/treatment/sections/TreatmentFlows.qml (.../TreatmentFlows.qml) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -25,7 +25,6 @@ * \brief Treatment Screen Flows section */ TouchArea { id: _root - property string unit : qsTr("mL/min") property alias bloodFlowSetPoint : _bloodFlow.label property alias dialysateFlowSetPoint : _dialysateInletFlow.label @@ -41,15 +40,15 @@ TextRect { id: _bloodFlow title : qsTr("Blood") label : vTreatmentBloodFlow.bloodFlow_FlowSetPoint - extra : unit + extra : Variables.unitTextFlowRate labelFont.weight: Font.ExtraLight width : 180 height: 200 } TextRect { id: _dialysateInletFlow title: qsTr("Dialysate") label: vTreatmentDialysateFlow.dialysateFlow_FlowSetPoint - extra: unit + extra: Variables.unitTextFlowRate labelFont.weight: Font.ExtraLight width: 180 height: 200 Index: sources/gui/qml/pages/treatment/sections/TreatmentUltrafiltration.qml =================================================================== diff -u -r6866ee04934367893f32ed6ded45499d6fbfb248 -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/gui/qml/pages/treatment/sections/TreatmentUltrafiltration.qml (.../TreatmentUltrafiltration.qml) (revision 6866ee04934367893f32ed6ded45499d6fbfb248) +++ sources/gui/qml/pages/treatment/sections/TreatmentUltrafiltration.qml (.../TreatmentUltrafiltration.qml) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -28,10 +28,8 @@ readonly property int decimal: vTreatmentUltrafiltration.precision readonly property real minimum: vTreatmentUltrafiltration.minimum readonly property real maximum: vTreatmentUltrafiltration.maximum - readonly property real value : vTreatmentUltrafiltration.ultrafiltration_MeasUFVol + readonly property real value : vTreatmentUltrafiltration.ultrafiltration_RefUFVol - property string ultrafiltrationVolumeUnit : qsTr("(L)") - clip : false x : 0 @@ -40,7 +38,7 @@ height : 200 isTouchable : true - title : qsTr("ULTRAFILTRATION VOLUME") + " " + ultrafiltrationVolumeUnit + title : qsTr("ULTRAFILTRATION VOLUME") + " " + Variables.unitTextUltrafiltrationVolume notification { imageSource: "qrc:/images/iPauseGray" text : vTreatmentAdjustmentUltrafiltrationState.isPaused ? qsTr("Ultrafiltration Paused") : "" Index: sources/gui/qml/pages/treatment/sections/TreatmentVitals.qml =================================================================== diff -u -ra159e12630645a9a35fb0a5585cc7b639cfe6aa6 -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/gui/qml/pages/treatment/sections/TreatmentVitals.qml (.../TreatmentVitals.qml) (revision a159e12630645a9a35fb0a5585cc7b639cfe6aa6) +++ sources/gui/qml/pages/treatment/sections/TreatmentVitals.qml (.../TreatmentVitals.qml) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -42,15 +42,15 @@ labelFont.weight: Font.ExtraLight labelAutoSize: true label: "120/80" // value - extra: qsTr("mmHg") // unit + extra: Variables.unitTextBloodPressure } TextRect { id: _heartBeat labelHeight: 40 labelFont.pixelSize: Fonts.fontPixelVitals labelFont.weight: Font.ExtraLight labelAutoSize: true label: "130" // value - extra: qsTr("BPM") // unit + extra: Variables.unitTextHeartBeat } } } Index: sources/maintimer.cpp =================================================================== diff -u -reea63d68fc0fb269f8dec64d99f488bcad117220 -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/maintimer.cpp (.../maintimer.cpp) (revision eea63d68fc0fb269f8dec64d99f488bcad117220) +++ sources/maintimer.cpp (.../maintimer.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -44,7 +44,7 @@ else { startTimer(_interval); } - LOG_EVENT(QObject::tr("Main Timer Initialized")); + LOG_EVENT("UI," + tr("Main Timer Initialized")); return true; } Index: sources/model/malarmcleared.cpp =================================================================== diff -u --- sources/model/malarmcleared.cpp (revision 0) +++ sources/model/malarmcleared.cpp (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -0,0 +1,38 @@ +/*! + * + * 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 malarmcleared.cpp + * \date 6/28/2020 + * \author Behrouz NematiPour + * + */ +#include "malarmcleared.h" + +using namespace Model; + +QString MAlarmCleared::toString() const { + return QString(stringPrefix + ",%1") + .arg(_data.mAlarmID.value); +} + +void MAlarmCleared::toVariantList(QVariantList &vData) const { + vData += _data.mAlarmID.value; +} + +bool MAlarmCleared::fromByteArray(const QByteArray &vByteArray, int *vIndex) { + int index = 0; // message data start position + if (GetValue(vByteArray, index, _data.mAlarmID)) + return true ; + else { if(vIndex) *vIndex = index; return false; } +} + +MAlarmCleared::Data MAlarmCleared::data() const { + Data data; + data.mAlarmID = _data.mAlarmID.value; + return data; +} Index: sources/model/malarmcleared.h =================================================================== diff -u --- sources/model/malarmcleared.h (revision 0) +++ sources/model/malarmcleared.h (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -0,0 +1,55 @@ +/*! + * + * 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 malarmcleared.h + * \date 6/28/2020 + * \author Behrouz NematiPour + * + */ +#pragma once + +// Qt +#include + +// Project +#include "types.h" + +// forward declarations +class tst_models; + +namespace Model { + +class MAlarmCleared { + + // friends + friend class ::tst_models; + +public: + QString stringPrefix = "Alarm Cleared"; + struct Data { + quint32 mAlarmID = 0; /*!< Alarm ID value of type quint32 extracted out */ + }; + +private: + struct { + Types::U32 mAlarmID ; + } _data; + +public: + MAlarmCleared () { } + + QString toString ( ) const ; + void toVariantList ( QVariantList &vData ) const ; + bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr); + + Data data() const; +}; + +} + +typedef Model::MAlarmCleared::Data AlarmClearedData; Index: sources/model/malarmstatus.cpp =================================================================== diff -u -rb798668f16ad0967ab97e96f5f9a2cdd821e899f -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/model/malarmstatus.cpp (.../malarmstatus.cpp) (revision b798668f16ad0967ab97e96f5f9a2cdd821e899f) +++ sources/model/malarmstatus.cpp (.../malarmstatus.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -19,12 +19,12 @@ MAlarmStatus::MAlarmStatus() { } QString MAlarmStatus::toString() const { - return QString("Alarm Status(%1, %2, %3, %4, %5)") + return QString(stringPrefix + ",%1,%2,%3,%4,%5") .arg(_data.mState .value ) .arg(_data.mTop .value ) .arg(_data.mMuteTimeout .value ) .arg(_data.mEscalatesIn .value ) - .arg(_data.mFlags .toString()); + .arg(_data.mFlags .toString("")); } void MAlarmStatus::toVariantList(QVariantList &vData) const { @@ -37,13 +37,19 @@ } } -void MAlarmStatus::fromByteArray(const QByteArray &vByteArray) { +bool MAlarmStatus::fromByteArray(const QByteArray &vByteArray, int *vIndex) { int index = 0; // message data start position - Types::getValue<>(vByteArray, index, _data.mState ); - Types::getValue<>(vByteArray, index, _data.mTop ); - Types::getValue<>(vByteArray, index, _data.mMuteTimeout ); - Types::getValue<>(vByteArray, index, _data.mEscalatesIn ); - Types::getBits (vByteArray, index, _data.mFlags , eFlag_Bits_Length); + if (GetValue(vByteArray, index, _data.mState )) + if (GetValue(vByteArray, index, _data.mTop )) + if (GetValue(vByteArray, index, _data.mMuteTimeout )) + if (GetValue(vByteArray, index, _data.mEscalatesIn )) + if (GetBits (vByteArray, index, _data.mFlags , eFlag_Bits_Length)) + 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; } } MAlarmStatus::Data MAlarmStatus::data() const { Index: sources/model/malarmstatus.h =================================================================== diff -u -rb798668f16ad0967ab97e96f5f9a2cdd821e899f -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/model/malarmstatus.h (.../malarmstatus.h) (revision b798668f16ad0967ab97e96f5f9a2cdd821e899f) +++ sources/model/malarmstatus.h (.../malarmstatus.h) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -59,7 +59,7 @@ QString toString ( ) const ; void toVariantList ( QVariantList &vData ) const ; - void fromByteArray (const QByteArray &vByteArray ); + bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr); Data data() const ; }; Index: sources/model/malarmtriggered.cpp =================================================================== diff -u --- sources/model/malarmtriggered.cpp (revision 0) +++ sources/model/malarmtriggered.cpp (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -0,0 +1,38 @@ +/*! + * + * 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 malarmtriggered.cpp + * \date 6/28/2020 + * \author Behrouz NematiPour + * + */ +#include "malarmtriggered.h" + +using namespace Model; + +QString MAlarmTriggered::toString() const { + return QString(stringPrefix + ",%1") + .arg(_data.mAlarmID.value); +} + +void MAlarmTriggered::toVariantList(QVariantList &vData) const { + vData += _data.mAlarmID.value; +} + +bool MAlarmTriggered::fromByteArray(const QByteArray &vByteArray, int *vIndex) { + int index = 0; // message data start position + if (GetValue(vByteArray, index, _data.mAlarmID)) + return true ; + else { if(vIndex) *vIndex = index; return false; } +} + +MAlarmTriggered::Data MAlarmTriggered::data() const { + Data data; + data.mAlarmID = _data.mAlarmID.value; + return data; +} Index: sources/model/malarmtriggered.h =================================================================== diff -u --- sources/model/malarmtriggered.h (revision 0) +++ sources/model/malarmtriggered.h (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -0,0 +1,55 @@ +/*! + * + * 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 malarmtriggered.h + * \date 6/28/2020 + * \author Behrouz NematiPour + * + */ +#pragma once + +// Qt +#include + +// Project +#include "types.h" + +// forward declarations +class tst_models; + +namespace Model { + +class MAlarmTriggered { + + // friends + friend class ::tst_models; + +public: + QString stringPrefix = "Alarm Triggered"; + struct Data { + quint32 mAlarmID = 0; /*!< Alarm ID value of type quint32 extracted out */ + }; + +private: + struct { + Types::U32 mAlarmID ; + } _data; + +public: + MAlarmTriggered () { } + + QString toString ( ) const ; + void toVariantList ( QVariantList &vData ) const ; + bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr); + + Data data() const; +}; + +} + +typedef Model::MAlarmTriggered::Data AlarmTriggeredData; Index: sources/model/mloadcellreadings.cpp =================================================================== diff -u -re591b135f821c1b1e13c2db8429dc63648c2452c -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/model/mloadcellreadings.cpp (.../mloadcellreadings.cpp) (revision e591b135f821c1b1e13c2db8429dc63648c2452c) +++ sources/model/mloadcellreadings.cpp (.../mloadcellreadings.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -16,7 +16,7 @@ using namespace Model; QString MLoadCellReadings::toString() const { - return QString(stringPrefix + "(%1, %2, %3, %4)") + return QString(stringPrefix + ",%1,%2,%3,%4") .arg(_data.mReservoir1Prim .value) .arg(_data.mReservoir1Bkup .value) .arg(_data.mReservoir2Prim .value) Index: sources/model/mmodel.h =================================================================== diff -u -reece7acacf84e8cc34b830f6b5ab3f112823a905 -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/model/mmodel.h (.../mmodel.h) (revision eece7acacf84e8cc34b830f6b5ab3f112823a905) +++ sources/model/mmodel.h (.../mmodel.h) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -24,6 +24,9 @@ #include "mtreatmentoutletflow.h" #include "mtreatmentpressureocclusion.h" #include "mtreatmentranges.h" +#include "malarmtriggered.h" +#include "malarmcleared.h" +#include "mtreatmentstate.h" #include "mloadcellreadings.h" #include "mtemperaturesensors.h" @@ -65,41 +68,26 @@ * example : be careful about the type. * in the header should be like: * \code{.cpp} - * bool getPressureOcclusionData (const Message &vMessage, Model::MPressureOcclusion &vData) __attribute_warn_unused_result__; * bool pressureOcclusionData (const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; * \endcode * in the implementation should be like: * \code{.cpp} - * bool MessageInterpreter::getPressureOcclusionData(const Message &vMessage, Model::MPressureOcclusion &vData) + * bool MessageInterpreter::pressureOcclusionData(const Message &vMessage, QVariantList &vData) * { - * if ( vMessage.actionId != Gui::GuiActionType::PressureOcclusion ) { - * return false; - * } + * // TODO : review other methods + * bool ok = false; + * if ( ! isType (vMessage, Gui::GuiActionType::PressureOcclusion) ) return ok; + * if ( ! isPayloadLenValid(vMessage, Gui::GuiActionType::PressureOcclusion) ) return ok; * - * if ( vMessage.data.length() < payloadLen[Gui::GuiActionType::PressureOcclusion] ) { - * QString mActionIdHexString = Format::toHexString(vMessage.actionId); - * LOG_ERROR(tr("Incorrect data for Message ID (HD) '%1'").arg(mActionIdHexString)); - * return false; - * } + * Model::MPressureOcclusion mData; + * ok = mData.fromByteArray(vMessage.data); + * LOG_DATUM("HD," + mData.toString()); * - * vData.fromByteArray(vMessage.data); + * mData.toVariantList(vData); + * emit didActionReceive(mData.data()); * - * return true; + * return ok; * } - * - * bool MessageInterpreter::pressureOcclusionData(const Message &vMessage, QVariantList &vData) - * { - * bool ok; - * Model::MPressureOcclusion mData; - * ok = getPressureOcclusionData(vMessage, mData); - * LOG_DATUM(mData.toString()); - * - * if (ok) { - * mData.toVariantList(vData); - * emit didActionReceive(mData.data()); - * } - * return ok; - * } * \endcode * * Add a case in MessageInterpreter::interpretMessage_HD for that message id Enum @@ -112,13 +100,6 @@ * */ -/*! - * Simple request models - * These are models to send the request for the doAdjustmet - * The the only reason thy have been defined to help overloadding the adjusmtent methods - * Otherwise the parameters are so tiny models. - */ - //--------------------------------------------------------------------------------// //-------- Please add the model type to the lists below to register them ---------// //--------------------------------------------------------------------------------// @@ -132,6 +113,9 @@ REGISTER_METATYPE( AlarmStatusFlag ) \ REGISTER_METATYPE( PowerOffData ) \ REGISTER_METATYPE( TreatmentRangesData ) \ + REGISTER_METATYPE( AlarmTriggeredData ) \ + REGISTER_METATYPE( AlarmClearedData ) \ + REGISTER_METATYPE( TreatmentStateData ) \ \ REGISTER_METATYPE( LoadCellReadingsData ) \ REGISTER_METATYPE( TemperatureSensorsData ) \ @@ -158,6 +142,9 @@ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, AlarmStatusData ) \ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, PowerOffData ) \ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, TreatmentRangesData ) \ + ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, AlarmTriggeredData ) \ + ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, AlarmClearedData ) \ + ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, TreatmentStateData ) \ \ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, LoadCellReadingsData ) \ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, TemperatureSensorsData ) \ @@ -184,6 +171,9 @@ ACTION_RECEIVE_BRIDGE_DEFINITION( AlarmStatusData ) \ ACTION_RECEIVE_BRIDGE_DEFINITION( PowerOffData ) \ ACTION_RECEIVE_BRIDGE_DEFINITION( TreatmentRangesData ) \ + ACTION_RECEIVE_BRIDGE_DEFINITION( AlarmTriggeredData ) \ + ACTION_RECEIVE_BRIDGE_DEFINITION( AlarmClearedData ) \ + ACTION_RECEIVE_BRIDGE_DEFINITION( TreatmentStateData ) \ \ ACTION_RECEIVE_BRIDGE_DEFINITION( LoadCellReadingsData ) \ ACTION_RECEIVE_BRIDGE_DEFINITION( TemperatureSensorsData ) \ @@ -224,6 +214,9 @@ ACTION_RECEIVE_SIGNAL( AlarmStatusData ) \ ACTION_RECEIVE_SIGNAL( PowerOffData ) \ ACTION_RECEIVE_SIGNAL( TreatmentRangesData ) \ + ACTION_RECEIVE_SIGNAL( AlarmTriggeredData ) \ + ACTION_RECEIVE_SIGNAL( AlarmClearedData ) \ + ACTION_RECEIVE_SIGNAL( TreatmentStateData ) \ \ ACTION_RECEIVE_SIGNAL( LoadCellReadingsData ) \ ACTION_RECEIVE_SIGNAL( TemperatureSensorsData ) \ Index: sources/model/mpoweroff.cpp =================================================================== diff -u -r17f0906011de9c97c0950c1ba0ea627a1411bc2e -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/model/mpoweroff.cpp (.../mpoweroff.cpp) (revision 17f0906011de9c97c0950c1ba0ea627a1411bc2e) +++ sources/model/mpoweroff.cpp (.../mpoweroff.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -19,21 +19,19 @@ // ----- TreatmentTime ----- QString MPowerOff::toString() const { - return QString(stringPrefix + "(%1)") + return QString(stringPrefix + ",%1") .arg(_data.mStatus .value); } void MPowerOff::toVariantList(QVariantList &vData) const { vData += _data.mStatus .value; } -/*! - * \brief MPowerOff::fromByteArray - * \param vByteArray - */ -void MPowerOff::fromByteArray(const QByteArray &vByteArray) { +bool MPowerOff::fromByteArray(const QByteArray &vByteArray, int *vIndex) { int index = 0; // message data start position - Types::getValue<>(vByteArray, index, _data.mStatus ); + if (GetValue(vByteArray, index, _data.mStatus )) + return true ; + else { if(vIndex) *vIndex = index; return false; } } MPowerOff::Data MPowerOff::data() const { Index: sources/model/mpoweroff.h =================================================================== diff -u -rb798668f16ad0967ab97e96f5f9a2cdd821e899f -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/model/mpoweroff.h (.../mpoweroff.h) (revision b798668f16ad0967ab97e96f5f9a2cdd821e899f) +++ sources/model/mpoweroff.h (.../mpoweroff.h) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -39,7 +39,7 @@ QString toString ( ) const ; void toVariantList ( QVariantList &vData ) const ; - void fromByteArray (const QByteArray &vByteArray ); + bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr); Data data() const; }; Index: sources/model/mtemperaturesensors.cpp =================================================================== diff -u -reece7acacf84e8cc34b830f6b5ab3f112823a905 -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/model/mtemperaturesensors.cpp (.../mtemperaturesensors.cpp) (revision eece7acacf84e8cc34b830f6b5ab3f112823a905) +++ sources/model/mtemperaturesensors.cpp (.../mtemperaturesensors.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -16,7 +16,7 @@ using namespace Model; QString MTemperatureSensors::toString() const { - return QString(stringPrefix + "(%1, %2, %3, %4)") + return QString(stringPrefix + ",%1,%2,%3,%4,%5,%6,%7,%8,%9,%10,%11,%12") .arg(_data.mInletPrimaryHeater .value) .arg(_data.mOutletPrimaryHeater .value) .arg(_data.mConductivitySensor1 .value) Index: sources/model/mtreatmentadjustblooddialysateresponse.cpp =================================================================== diff -u -rb798668f16ad0967ab97e96f5f9a2cdd821e899f -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/model/mtreatmentadjustblooddialysateresponse.cpp (.../mtreatmentadjustblooddialysateresponse.cpp) (revision b798668f16ad0967ab97e96f5f9a2cdd821e899f) +++ sources/model/mtreatmentadjustblooddialysateresponse.cpp (.../mtreatmentadjustblooddialysateresponse.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -16,7 +16,7 @@ using namespace Model; QString MAdjustBloodDialysateResponse::toString() const { - return QString(stringPrefix + "(%1, %2, %3, %4)") + return QString(stringPrefix + ",%1,%2,%3,%4") .arg(_data.mAccepted .value) .arg(_data.mReason .value) .arg(_data.mBloodRate .value) Index: sources/model/mtreatmentadjustdurationresponse.cpp =================================================================== diff -u -ra159e12630645a9a35fb0a5585cc7b639cfe6aa6 -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/model/mtreatmentadjustdurationresponse.cpp (.../mtreatmentadjustdurationresponse.cpp) (revision a159e12630645a9a35fb0a5585cc7b639cfe6aa6) +++ sources/model/mtreatmentadjustdurationresponse.cpp (.../mtreatmentadjustdurationresponse.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -16,7 +16,7 @@ using namespace Model; QString MAdjustDurationResponse::toString() const { - return QString(stringPrefix + "(%1, %2, %3, %4)") + return QString(stringPrefix + ",%1,%2,%3,%4") .arg(_data.mAccepted .value) .arg(_data.mReason .value) .arg(_data.mDuration .value) Index: sources/model/mtreatmentadjustrequests.h =================================================================== diff -u -r0b1e55604d139154b791e1615792921df211ba4d -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/model/mtreatmentadjustrequests.h (.../mtreatmentadjustrequests.h) (revision 0b1e55604d139154b791e1615792921df211ba4d) +++ sources/model/mtreatmentadjustrequests.h (.../mtreatmentadjustrequests.h) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -21,45 +21,96 @@ #include "HDDefs.h" -class MAdjustBloodDialysateReq { +/*! + * Simple request models + * These are models to send the request for the doAdjustmet + * The the only reason thy have been defined to help overloadding the adjusmtent methods + * Otherwise the parameters are so tiny models. + */ + +#include + +class MModel { +protected: + static QString toString (const QString &vStringPrefix, const QVariant &vParameters) { + return QString(vStringPrefix + "," + vParameters.toStringList().join(',')); + }; +}; + +class MAdjustBloodDialysateReq : public MModel { public: quint32 bloodFlow = 0; quint32 dialysateFlow = 0; + + QString toString() { + return toString({bloodFlow , dialysateFlow}); + } + + static QString toString(const QVariantList &vParameters) { + return MModel::toString("Adjust Blood/Dialysate", vParameters); + } }; -class MAdjustDurationReq { +class MAdjustDurationReq : public MModel { public: quint32 duration = 0; + + QString toString() { + return toString({duration}); + } + static QString toString(const QVariantList &vParameters) { + return MModel::toString("Adjust Duration", vParameters); + } }; -class MAdjustUltrafiltrationStateReq { +class MAdjustUltrafiltrationStateReq : public MModel { public: enum State{ ePaused = 0, eRunning = 1, }; State requestedState = ePaused; // the requested state. Initially it's running => paused. + + QString toString() { + return toString({requestedState}); + } + static QString toString(const QVariantList &vParameters) { + return MModel::toString("Adjust Ultrafiltration State", vParameters); + } }; -class MAdjustUltrafiltrationReq { +class MAdjustUltrafiltrationEditReq : public MModel { public: float volume = 0; + + QString toString() { + return toString({volume}); + } + static QString toString(const QVariantList &vParameters) { + return MModel::toString("Adjust Ultrafiltration Edit", vParameters); + } }; - class MAdjustUltrafiltrationConfirmReq { +class MAdjustUltrafiltrationConfirmReq : public MModel { public: enum Options : quint32 { eDuration = UF_Adjustments::UF_ADJ_TREATMENT_TIME, eRate = UF_Adjustments::UF_ADJ_UF_RATE, }; float volume = 0; Options option = eDuration; + QString toString() { + return toString({volume , option}); + } + static QString toString(const QVariantList &vParameters) { + return MModel::toString("Adjust Ultrafiltration Confirm", vParameters); + } }; } typedef Model:: MAdjustBloodDialysateReq AdjustBloodDialysateRequestData; typedef Model:: MAdjustDurationReq AdjustDurationRequestData; typedef Model:: MAdjustUltrafiltrationStateReq AdjustUltrafiltrationStateRequestData; -typedef Model:: MAdjustUltrafiltrationReq AdjustUltrafiltrationEditRequestData; +typedef Model:: MAdjustUltrafiltrationEditReq AdjustUltrafiltrationEditRequestData; typedef Model::MAdjustUltrafiltrationConfirmReq AdjustUltrafiltrationConfirmRequestData; Index: sources/model/mtreatmentadjustultrafiltrationconfirmresponse.cpp =================================================================== diff -u -r6616f7b9b88efffa42ab605833d296afb76d3cb1 -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/model/mtreatmentadjustultrafiltrationconfirmresponse.cpp (.../mtreatmentadjustultrafiltrationconfirmresponse.cpp) (revision 6616f7b9b88efffa42ab605833d296afb76d3cb1) +++ sources/model/mtreatmentadjustultrafiltrationconfirmresponse.cpp (.../mtreatmentadjustultrafiltrationconfirmresponse.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -16,7 +16,7 @@ using namespace Model; QString MAdjustUltrafiltrationConfirmResponse::toString() const { - return QString(stringPrefix + "(%1, %2, %3, %4, %5)") + return QString(stringPrefix + ",%1,%2,%3,%4,%5") .arg(_data.mAccepted .value) .arg(_data.mReason .value) .arg(_data.mVolume .value) Index: sources/model/mtreatmentadjustultrafiltrationconfirmresponse.h =================================================================== diff -u -r5734e6289c18ec3cfe4749de8e3a6043f98dbcff -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/model/mtreatmentadjustultrafiltrationconfirmresponse.h (.../mtreatmentadjustultrafiltrationconfirmresponse.h) (revision 5734e6289c18ec3cfe4749de8e3a6043f98dbcff) +++ sources/model/mtreatmentadjustultrafiltrationconfirmresponse.h (.../mtreatmentadjustultrafiltrationconfirmresponse.h) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -56,7 +56,6 @@ QString toString ( ) const ; void toVariantList ( QVariantList &vData ) const ; bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr); - bool fromByteArrayState(const QByteArray &vByteArray , int *vIndex = nullptr); Data data() const; }; Index: sources/model/mtreatmentadjustultrafiltrationeditresponse.cpp =================================================================== diff -u -r6616f7b9b88efffa42ab605833d296afb76d3cb1 -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/model/mtreatmentadjustultrafiltrationeditresponse.cpp (.../mtreatmentadjustultrafiltrationeditresponse.cpp) (revision 6616f7b9b88efffa42ab605833d296afb76d3cb1) +++ sources/model/mtreatmentadjustultrafiltrationeditresponse.cpp (.../mtreatmentadjustultrafiltrationeditresponse.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -16,7 +16,7 @@ using namespace Model; QString MAdjustUltrafiltrationEditResponse::toString() const { - return QString(stringPrefix + "(%1, %2, %3, %4, %5, %6, %7, %8)") + return QString(stringPrefix + ",%1,%2,%3,%4,%5,%6,%7,%8") .arg(_data.mAccepted .value) .arg(_data.mReason .value) .arg(_data.mVolume .value) Index: sources/model/mtreatmentadjustultrafiltrationeditresponse.h =================================================================== diff -u -r5734e6289c18ec3cfe4749de8e3a6043f98dbcff -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/model/mtreatmentadjustultrafiltrationeditresponse.h (.../mtreatmentadjustultrafiltrationeditresponse.h) (revision 5734e6289c18ec3cfe4749de8e3a6043f98dbcff) +++ sources/model/mtreatmentadjustultrafiltrationeditresponse.h (.../mtreatmentadjustultrafiltrationeditresponse.h) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -52,7 +52,6 @@ QString toString ( ) const ; void toVariantList ( QVariantList &vData ) const ; bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr); - bool fromByteArrayState(const QByteArray &vByteArray , int *vIndex = nullptr); Data data() const; }; Index: sources/model/mtreatmentadjustultrafiltrationstateresponse.cpp =================================================================== diff -u -r5734e6289c18ec3cfe4749de8e3a6043f98dbcff -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/model/mtreatmentadjustultrafiltrationstateresponse.cpp (.../mtreatmentadjustultrafiltrationstateresponse.cpp) (revision 5734e6289c18ec3cfe4749de8e3a6043f98dbcff) +++ sources/model/mtreatmentadjustultrafiltrationstateresponse.cpp (.../mtreatmentadjustultrafiltrationstateresponse.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -16,7 +16,7 @@ using namespace Model; QString MAdjustUltrafiltrationStateResponse::toString() const { - return QString(stringPrefix + "(%1)") + return QString(stringPrefix + ",%1") .arg(_data.mAccepted.value); } Index: sources/model/mtreatmentflows.cpp =================================================================== diff -u -rb798668f16ad0967ab97e96f5f9a2cdd821e899f -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/model/mtreatmentflows.cpp (.../mtreatmentflows.cpp) (revision b798668f16ad0967ab97e96f5f9a2cdd821e899f) +++ sources/model/mtreatmentflows.cpp (.../mtreatmentflows.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -17,7 +17,7 @@ // ----- BloodFlow ----- QString MFlow::toString() const { - return QString(stringPrefix + "(%1, %2, %3, %4, %5, %6, %7)") + return QString(stringPrefix + ",%1,%2,%3,%4,%5,%6,%7") .arg(_data.mFlowSetPoint .value) .arg(_data.mMeasuredFlow .value) .arg(_data.mRotorSpeed .value) @@ -37,15 +37,23 @@ vData += _data.mPWMDutyCycle .value; } -void MFlow::fromByteArray(const QByteArray &vByteArray) { +bool MFlow::fromByteArray(const QByteArray &vByteArray, int *vIndex) { int index = 0; // message data start position - Types::getValue<>(vByteArray, index, _data.mFlowSetPoint ); - Types::getValue<>(vByteArray, index, _data.mMeasuredFlow ); - Types::getValue<>(vByteArray, index, _data.mRotorSpeed ); - Types::getValue<>(vByteArray, index, _data.mMotorSpeed ); - Types::getValue<>(vByteArray, index, _data.mMotorCtlSpeed ); - Types::getValue<>(vByteArray, index, _data.mMotorCtlCurrent ); - Types::getValue<>(vByteArray, index, _data.mPWMDutyCycle ); + if (GetValue(vByteArray, index, _data.mFlowSetPoint )) + if (GetValue(vByteArray, index, _data.mMeasuredFlow )) + if (GetValue(vByteArray, index, _data.mRotorSpeed )) + if (GetValue(vByteArray, index, _data.mMotorSpeed )) + if (GetValue(vByteArray, index, _data.mMotorCtlSpeed )) + if (GetValue(vByteArray, index, _data.mMotorCtlCurrent )) + if (GetValue(vByteArray, index, _data.mPWMDutyCycle )) + 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; } } const MFlow::Data &MFlow::data() const { Index: sources/model/mtreatmentflows.h =================================================================== diff -u -rb798668f16ad0967ab97e96f5f9a2cdd821e899f -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/model/mtreatmentflows.h (.../mtreatmentflows.h) (revision b798668f16ad0967ab97e96f5f9a2cdd821e899f) +++ sources/model/mtreatmentflows.h (.../mtreatmentflows.h) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -46,7 +46,7 @@ QString toString ( ) const ; void toVariantList ( QVariantList &vData ) const ; - void fromByteArray (const QByteArray &vByteArray ); + bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr); const Data &data() const ; }; Index: sources/model/mtreatmentoutletflow.cpp =================================================================== diff -u -rb798668f16ad0967ab97e96f5f9a2cdd821e899f -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/model/mtreatmentoutletflow.cpp (.../mtreatmentoutletflow.cpp) (revision b798668f16ad0967ab97e96f5f9a2cdd821e899f) +++ sources/model/mtreatmentoutletflow.cpp (.../mtreatmentoutletflow.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -17,7 +17,7 @@ // ----- OutletFlow ----- QString MOutletFlow::toString() const { - return QString(stringPrefix + "(%1, %2, %3, %4, %5, %6, %7)") + return QString(stringPrefix + ",%1,%2,%3,%4,%5,%6,%7") .arg(_data.mRefUFVol .value) .arg(_data.mMeasUFVol .value) .arg(_data.mRotorSpeed .value) @@ -37,15 +37,23 @@ vData += _data.mPWMDtCycle .value; } -void MOutletFlow::fromByteArray(const QByteArray &vByteArray) { +bool MOutletFlow::fromByteArray(const QByteArray &vByteArray, int *vIndex) { int index = 0; // message data start position - Types::getValue<>(vByteArray, index, _data.mRefUFVol ); - Types::getValue<>(vByteArray, index, _data.mMeasUFVol ); - Types::getValue<>(vByteArray, index, _data.mRotorSpeed ); - Types::getValue<>(vByteArray, index, _data.mMotorSpeed ); - Types::getValue<>(vByteArray, index, _data.mMotorCtlSpeed ); - Types::getValue<>(vByteArray, index, _data.mMotorCtlCurrent); - Types::getValue<>(vByteArray, index, _data.mPWMDtCycle ); + if (GetValue(vByteArray, index, _data.mRefUFVol )) + if (GetValue(vByteArray, index, _data.mMeasUFVol )) + if (GetValue(vByteArray, index, _data.mRotorSpeed )) + if (GetValue(vByteArray, index, _data.mMotorSpeed )) + if (GetValue(vByteArray, index, _data.mMotorCtlSpeed )) + if (GetValue(vByteArray, index, _data.mMotorCtlCurrent )) + if (GetValue(vByteArray, index, _data.mPWMDtCycle )) + 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; } } MOutletFlow::Data MOutletFlow::data() const { Index: sources/model/mtreatmentoutletflow.h =================================================================== diff -u -rb798668f16ad0967ab97e96f5f9a2cdd821e899f -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/model/mtreatmentoutletflow.h (.../mtreatmentoutletflow.h) (revision b798668f16ad0967ab97e96f5f9a2cdd821e899f) +++ sources/model/mtreatmentoutletflow.h (.../mtreatmentoutletflow.h) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -50,7 +50,7 @@ QString toString ( ) const ; void toVariantList ( QVariantList &vData ) const ; - void fromByteArray (const QByteArray &vByteArray ); + bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr); Data data() const; }; Index: sources/model/mtreatmentpressureocclusion.cpp =================================================================== diff -u -rb798668f16ad0967ab97e96f5f9a2cdd821e899f -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/model/mtreatmentpressureocclusion.cpp (.../mtreatmentpressureocclusion.cpp) (revision b798668f16ad0967ab97e96f5f9a2cdd821e899f) +++ sources/model/mtreatmentpressureocclusion.cpp (.../mtreatmentpressureocclusion.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -16,7 +16,7 @@ using namespace Model; QString MPressureOcclusion::toString() const { - return QString(stringPrefix + "(%1, %2, %3, %4, %5)") + return QString(stringPrefix + ",%1,%2,%3,%4,%5") .arg(_data.mArterialPressure .value) .arg(_data.mVenousPressure .value) .arg(_data.mBloodPumpOcclusion .value) @@ -32,13 +32,19 @@ vData += _data.mDialysateOutletPumpOcclusion .value; } -void MPressureOcclusion::fromByteArray(const QByteArray &vByteArray) { +bool MPressureOcclusion::fromByteArray(const QByteArray &vByteArray, int *vIndex) { int index = 0; // message data start position - Types::getValue<>(vByteArray, index, _data.mArterialPressure ); - Types::getValue<>(vByteArray, index, _data.mVenousPressure ); - Types::getValue<>(vByteArray, index, _data.mBloodPumpOcclusion ); - Types::getValue<>(vByteArray, index, _data.mDialysateInletPumpOcclusion ); - Types::getValue<>(vByteArray, index, _data.mDialysateOutletPumpOcclusion ); + if (GetValue(vByteArray, index, _data.mArterialPressure )) + if (GetValue(vByteArray, index, _data.mVenousPressure )) + if (GetValue(vByteArray, index, _data.mBloodPumpOcclusion )) + if (GetValue(vByteArray, index, _data.mDialysateInletPumpOcclusion )) + if (GetValue(vByteArray, index, _data.mDialysateOutletPumpOcclusion )) + 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; } } MPressureOcclusion::Data MPressureOcclusion::data() const { Index: sources/model/mtreatmentpressureocclusion.h =================================================================== diff -u -rb798668f16ad0967ab97e96f5f9a2cdd821e899f -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/model/mtreatmentpressureocclusion.h (.../mtreatmentpressureocclusion.h) (revision b798668f16ad0967ab97e96f5f9a2cdd821e899f) +++ sources/model/mtreatmentpressureocclusion.h (.../mtreatmentpressureocclusion.h) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -46,7 +46,7 @@ QString toString ( ) const ; void toVariantList ( QVariantList &vData ) const ; - void fromByteArray (const QByteArray &vByteArray ); + bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr); Data data() const; }; Index: sources/model/mtreatmentranges.cpp =================================================================== diff -u -rb798668f16ad0967ab97e96f5f9a2cdd821e899f -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/model/mtreatmentranges.cpp (.../mtreatmentranges.cpp) (revision b798668f16ad0967ab97e96f5f9a2cdd821e899f) +++ sources/model/mtreatmentranges.cpp (.../mtreatmentranges.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -16,7 +16,7 @@ using namespace Model; QString MTreatmentRanges::toString() const { - return QString(stringPrefix + "(%1, %2, %3, %4, %5, %6)") + return QString(stringPrefix + ",%1,%2,%3,%4,%5,%6") .arg(_data.mDuration_Min .value) .arg(_data.mDuration_Max .value) .arg(_data.mUltrafiltration_Volume_Min .value) Index: sources/model/mtreatmentstate.cpp =================================================================== diff -u --- sources/model/mtreatmentstate.cpp (revision 0) +++ sources/model/mtreatmentstate.cpp (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -0,0 +1,48 @@ +/*! + * + * 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 treatmentstate.cpp + * \date 6/28/2020 + * \author Behrouz NematiPour + * + */ +#include "mtreatmentstate.h" + +using namespace Model; + +QString MTreatmentState::toString() const { + return QString(stringPrefix + ",%1,%2,%3") + .arg(_data.mSubMode .value) + .arg(_data.mUFState .value) + .arg(_data.mSalineState.value); +} + +void MTreatmentState::toVariantList(QVariantList &vData) const { + vData += _data.mSubMode .value; + vData += _data.mUFState .value; + vData += _data.mSalineState.value; +} + +bool MTreatmentState::fromByteArray(const QByteArray &vByteArray, int *vIndex) { + int index = 0; // message data start position + if (GetValue(vByteArray, index, _data.mSubMode )) + if (GetValue(vByteArray, index, _data.mUFState )) + if (GetValue(vByteArray, index, _data.mSalineState)) + return true ; + else { if(vIndex) *vIndex = index; return false; } + else { if(vIndex) *vIndex = index; return false; } + else { if(vIndex) *vIndex = index; return false; } +} + +MTreatmentState::Data MTreatmentState::data() const { + Data data; + data.mSubMode = _data.mSubMode .value; + data.mUFState = _data.mUFState .value; + data.mSalineState = _data.mSalineState.value; + return data; +} Index: sources/model/mtreatmentstate.h =================================================================== diff -u --- sources/model/mtreatmentstate.h (revision 0) +++ sources/model/mtreatmentstate.h (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -0,0 +1,59 @@ +/*! + * + * 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 treatmentstate.h + * \date 6/28/2020 + * \author Behrouz NematiPour + * + */ +#pragma once + +// Qt +#include + +// Project +#include "types.h" + +// forward declarations +class tst_models; + +namespace Model { + +class MTreatmentState { + + // friends + friend class ::tst_models; + +public: + QString stringPrefix = "Treatment State"; + struct Data { + quint32 mSubMode = 0; /*!< Sub-Mode value of type quint32 extracted out */ + quint32 mUFState = 0; /*!< UF State value of type quint32 extracted out */ + quint32 mSalineState = 0; /*!< Saline State value of type quint32 extracted out */ + }; + +private: + struct { + Types::U32 mSubMode ; + Types::U32 mUFState ; + Types::U32 mSalineState ; + } _data; + +public: + MTreatmentState() { } + + QString toString ( ) const ; + void toVariantList ( QVariantList &vData ) const ; + bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr); + + Data data() const; +}; + +} + +typedef Model::MTreatmentState::Data TreatmentStateData; Index: sources/model/mtreatmenttime.cpp =================================================================== diff -u -rb798668f16ad0967ab97e96f5f9a2cdd821e899f -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/model/mtreatmenttime.cpp (.../mtreatmenttime.cpp) (revision b798668f16ad0967ab97e96f5f9a2cdd821e899f) +++ sources/model/mtreatmenttime.cpp (.../mtreatmenttime.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -19,7 +19,7 @@ // ----- TreatmentTime ----- QString MTreatmentTime::toString() const { - return QString(stringPrefix + "(%1, %2, %3)") + return QString(stringPrefix + ",%1,%2,%3") .arg(_data.mTotal .value) .arg(_data.mElapsed .value) .arg(_data.mRemaining .value); @@ -31,12 +31,15 @@ vData += _data.mRemaining .value; } -void MTreatmentTime::fromByteArray(const QByteArray &vByteArray) { +bool MTreatmentTime::fromByteArray(const QByteArray &vByteArray, int *vIndex) { int index = 0; // message data start position - Types::getValue<>(vByteArray, index, _data.mTotal ); - Types::getValue<>(vByteArray, index, _data.mElapsed ); - Types::getValue<>(vByteArray, index, _data.mRemaining ); - + if (GetValue(vByteArray, index, _data.mTotal )) + if (GetValue(vByteArray, index, _data.mElapsed )) + if (GetValue(vByteArray, index, _data.mRemaining )) + return true ; + else { if(vIndex) *vIndex = index; return false; } + else { if(vIndex) *vIndex = index; return false; } + else { if(vIndex) *vIndex = index; return false; } } MTreatmentTime::Data MTreatmentTime::data() const { Index: sources/model/mtreatmenttime.h =================================================================== diff -u -rb798668f16ad0967ab97e96f5f9a2cdd821e899f -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/model/mtreatmenttime.h (.../mtreatmenttime.h) (revision b798668f16ad0967ab97e96f5f9a2cdd821e899f) +++ sources/model/mtreatmenttime.h (.../mtreatmenttime.h) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -43,7 +43,7 @@ QString toString ( ) const ; void toVariantList ( QVariantList &vData ) const ; - void fromByteArray (const QByteArray &vByteArray ); + bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr); Data data() const; }; Index: sources/storage/logger.cpp =================================================================== diff -u -r93d7ff58cd6fd2fea5d00587ee712a637fc941bf -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/storage/logger.cpp (.../logger.cpp) (revision 93d7ff58cd6fd2fea5d00587ee712a637fc941bf) +++ sources/storage/logger.cpp (.../logger.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -50,7 +50,7 @@ checkLogPath(); initConnections(); - LOG_EVENT(QObject::tr("%1 Initialized").arg(metaObject()->className())); + LOG_EVENT("UI," + tr("%1 Initialized").arg(metaObject()->className())); return true; } @@ -169,7 +169,7 @@ { if (vUseApplicationDirPath) { _dir.setPath(qApp->applicationDirPath()); - LOG_EVENT(tr("Application Dir Path used for events logging (%1)").arg(_dir.path())); + LOG_EVENT(tr("Application path used for events logging (%1)").arg(_dir.path())); } else { _dir.setPath(Log_Base_Path_Name); } @@ -202,8 +202,8 @@ if ( ! _dir.exists(_logBasePathNames[vLogType]) ) { if ( ! _dir.mkpath(_logBasePathNames[vLogType]) ) { LOG_ERROR(tr("Can't create %1 log path (%2)") - .arg(_logPrefix[vLogType]) - .arg(_logPathNames[vLogType]) + .arg(_logPrefix[vLogType]) + .arg(_logPathNames[vLogType]) ); return false; } @@ -222,25 +222,33 @@ void Logger::log(const QString &vContent, Logger::LogType vLogType) { QString date = QDate::currentDate().toString(_dateFormat); + QString fileName = date + _dateSeparator; QString mContent; - switch (vLogType) { case eLogEvent: - case eLogError: + fileName += Log_File_Name_Event; + break; + case eLogDatum: + fileName += Log_File_Name_Datum; break; + case eLogError: + fileName += Log_File_Name_Error; + break; + default: - LOG_ERROR(tr("Incorrect type of logging").arg(vLogType)); + fileName += Log_File_Name_Error; + LOG_ERROR(tr("Incorrect type of logging %1").arg(vLogType)); } QString logPrefix = _logPrefix[vLogType]; - if (logPrefix.isEmpty()) logPrefix = _logPrefix[LogType::eLogError]; - mContent += logPrefix; - mContent += _prefixSeparator; + if ( ! logPrefix.isEmpty()) { + mContent += logPrefix; + mContent += _prefixSeparator; + } mContent += QTime::currentTime().toString(_timeFormat); mContent += _timeSeparator + vContent; - QString fileName = date + _dateSeparator + Log_File_Name; QString logPathName = _logPathNames[vLogType]; if (logPathName.isEmpty()) logPathName = _logPathNames[LogType::eLogError]; Index: sources/storage/logger.h =================================================================== diff -u -r94f7349bd073a732dba5295250fc0e26f740743c -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/storage/logger.h (.../logger.h) (revision 94f7349bd073a732dba5295250fc0e26f740743c) +++ sources/storage/logger.h (.../logger.h) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -58,7 +58,6 @@ LOG_DATUM(vCONTENT); \ } - // forward declarations class tst_logging; @@ -97,22 +96,22 @@ QDir _dir; QHash _logPathNames; QHash _logBasePathNames { - { eLogEvent, "log/event/" }, - { eLogError, "log/error/" }, - { eLogDatum, "log/event/" }, // "log/datum/" + { eLogEvent, "log/" }, + { eLogDatum, "log/" }, + { eLogError, "log/" }, }; QHash _logPrefix { - { eLogEvent, "Event" }, - { eLogError, "Error" }, - { eLogDatum, "Datum" }, + { eLogEvent, "E" }, + { eLogDatum, "D" }, + { eLogError, "" }, // it has its own file and all the content are Errors }; const char *_dateFormat = "yyyy_MM_dd"; const char *_timeFormat = "HH:mm:ss"; - const char *_prefixSeparator = ": " ; - const char *_dateSeparator = "_" ; - const char *_timeSeparator = " , "; + const char *_dateSeparator = "_"; // used in filename + const char *_prefixSeparator = ","; + const char *_timeSeparator = ","; QString _logFileName = ""; Index: sources/storage/storageglobals.cpp =================================================================== diff -u -rb798668f16ad0967ab97e96f5f9a2cdd821e899f -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/storage/storageglobals.cpp (.../storageglobals.cpp) (revision b798668f16ad0967ab97e96f5f9a2cdd821e899f) +++ sources/storage/storageglobals.cpp (.../storageglobals.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -23,5 +23,7 @@ // Log const char *Log_Base_Path_Name = "/media/sd-card/"; const char *Log_Base_Path_Name_Location = "/media/sd-card/log/"; - const char *Log_File_Name = "denali.log"; + const char *Log_File_Name_Event = "denali.log"; + const char *Log_File_Name_Datum = "denali.log"; + const char *Log_File_Name_Error = "denali.err"; } Index: sources/storage/storageglobals.h =================================================================== diff -u -rb798668f16ad0967ab97e96f5f9a2cdd821e899f -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/storage/storageglobals.h (.../storageglobals.h) (revision b798668f16ad0967ab97e96f5f9a2cdd821e899f) +++ sources/storage/storageglobals.h (.../storageglobals.h) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -25,5 +25,7 @@ // Log extern const char *Log_Base_Path_Name ; extern const char *Log_Base_Path_Name_Location; - extern const char *Log_File_Name ; + extern const char *Log_File_Name_Event ; + extern const char *Log_File_Name_Datum ; + extern const char *Log_File_Name_Error ; } Index: sources/storage/usbwatcher.cpp =================================================================== diff -u -rb798668f16ad0967ab97e96f5f9a2cdd821e899f -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/storage/usbwatcher.cpp (.../usbwatcher.cpp) (revision b798668f16ad0967ab97e96f5f9a2cdd821e899f) +++ sources/storage/usbwatcher.cpp (.../usbwatcher.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -273,7 +273,7 @@ ok = ::umount(vDevice.toLatin1().constData()) == 0; if (ok) { _mounted = false; - LOG_EVENT(tr("USB drive unmounted")); + LOG_EVENT(tr("USB drive %2 unmounted").arg(vDevice)); emit didUSBDriveUmount(); } else { // the error is irrelevant, commented out for now Index: sources/utility/types.h =================================================================== diff -u -rb798668f16ad0967ab97e96f5f9a2cdd821e899f -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/utility/types.h (.../types.h) (revision b798668f16ad0967ab97e96f5f9a2cdd821e899f) +++ sources/utility/types.h (.../types.h) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -26,19 +26,20 @@ #include "logger.h" // defines -#define GetValue(vData, vIndex, vValue) Types::getValue<>(vData, vIndex, vValue, QT_STRINGIFY(vValue)) +#define GetValue(vData, vIndex, vValue ) Types::getValue<>(vData, vIndex, vValue, QT_STRINGIFY(vValue)) +#define GetBits( vData, vIndex, vFlags, vLen) Types::getBits( vData, vIndex, vFlags, vLen ) class Types { public: class Flags : public QBitArray { public: Flags() : QBitArray() { } - QString toString() const { + QString toString(QString vByteSeparator = " ") const { QString tmp; for (int i = 0; i < count(); i++) { if (i % 4 == 0 && i != 0) - tmp += ' '; + tmp += vByteSeparator; tmp += at(i) ? '1' : '0'; } return tmp; Index: sources/view/vtreatmentadjustmentultrafiltrationconfirm.cpp =================================================================== diff -u -r5734e6289c18ec3cfe4749de8e3a6043f98dbcff -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/view/vtreatmentadjustmentultrafiltrationconfirm.cpp (.../vtreatmentadjustmentultrafiltrationconfirm.cpp) (revision 5734e6289c18ec3cfe4749de8e3a6043f98dbcff) +++ sources/view/vtreatmentadjustmentultrafiltrationconfirm.cpp (.../vtreatmentadjustmentultrafiltrationconfirm.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -39,14 +39,14 @@ void View::VTreatmentAdjustmentUltrafiltrationConfirm::doOptionRate(float vVolume) { - _data.volume = vVolume; + _data.volume = int(vVolume * 1000); // cast to int to truncate the float after convert to mL _data.option = AdjustUltrafiltrationConfirmRequestData::eRate; emit didAdjustment(_data); } void View::VTreatmentAdjustmentUltrafiltrationConfirm::doOptionDuration(float vVolume) { - _data.volume = vVolume; + _data.volume = int(vVolume * 1000); // cast to int to truncate the float after convert to mL _data.option = AdjustUltrafiltrationConfirmRequestData::eDuration; emit didAdjustment(_data); } Index: sources/view/vtreatmentultrafiltration.cpp =================================================================== diff -u -re3bc1f477a12964a70cc0f4aca234fc4fa847d9c -r2437559b2d4cd4c2ac6a926b4f55652e55e1f616 --- sources/view/vtreatmentultrafiltration.cpp (.../vtreatmentultrafiltration.cpp) (revision e3bc1f477a12964a70cc0f4aca234fc4fa847d9c) +++ sources/view/vtreatmentultrafiltration.cpp (.../vtreatmentultrafiltration.cpp) (revision 2437559b2d4cd4c2ac6a926b4f55652e55e1f616) @@ -20,15 +20,8 @@ void VTreatmentUltrafiltration::onActionReceive(const OutletFlowData &vData) { - // TEST : it has to be bound to MeasUFVol to get the actual values from pumps - // but since we have none in testing code bound to the refUFVal which - // is the calculated/expected volume. ultrafiltration_RefUFVol ( vData.mRefUFVol / 1000 ); // mL => L -#ifdef QT_DEBUG - ultrafiltration_MeasUFVol ( vData.mRefUFVol / 1000 ); // mL => L -#else ultrafiltration_MeasUFVol ( vData.mMeasUFVol / 1000 ); // mL => L -#endif ultrafiltration_RotorSpeed ( vData.mRotorSpeed ); ultrafiltration_MotorSpeed ( vData.mMotorSpeed ); ultrafiltration_MotorCtlSpeed ( vData.mMotorCtlSpeed );