Index: denali.pro.user =================================================================== diff -u -r4bbec52d2257cfdef37604e3453846e501a2af91 -rf1e100d1368bfd132d88e09680f833dc53b4d0b0 --- denali.pro.user (.../denali.pro.user) (revision 4bbec52d2257cfdef37604e3453846e501a2af91) +++ denali.pro.user (.../denali.pro.user) (revision f1e100d1368bfd132d88e09680f833dc53b4d0b0) @@ -1,6 +1,6 @@ - + EnvironmentId @@ -100,7 +100,7 @@ qmake QtProjectManager.QMakeBuildStep - true + false false false @@ -1176,7 +1176,7 @@ denali Qt4ProjectManager.Qt4RunConfiguration:/home/denali/Projects/application/denali.pro - -q -u -l + 3768 false true @@ -1196,7 +1196,7 @@ Qt 5.12.5 (iMX8) Qt 5.12.5 (iMX8) {5d6458ef-f917-4aef-a092-c77bbe106149} - 1 + 0 0 0 @@ -1207,7 +1207,7 @@ qmake QtProjectManager.QMakeBuildStep - true + false false false @@ -1475,12 +1475,12 @@ 1 - denali (on UI Test Board) + denali (on Generic Linux Device (iMX8))2 RemoteLinuxRunConfiguration:/home/denali/Projects/application/denali.pro 1 false - + -u 3768 false true Index: en_US.udic =================================================================== diff -u -rc8b2c06141831ba2908323138d94dec0ccc0d402 -rf1e100d1368bfd132d88e09680f833dc53b4d0b0 --- en_US.udic (.../en_US.udic) (revision c8b2c06141831ba2908323138d94dec0ccc0d402) +++ en_US.udic (.../en_US.udic) (revision f1e100d1368bfd132d88e09680f833dc53b4d0b0) @@ -14,3 +14,5 @@ Rsp PRS Dialysate +TODO +FPGA Index: sources/canbus/MessageInterpreter.cpp =================================================================== diff -u -r595ede3b4cf5a1f5c06a04d1db99a0674ae742bd -rf1e100d1368bfd132d88e09680f833dc53b4d0b0 --- sources/canbus/MessageInterpreter.cpp (.../MessageInterpreter.cpp) (revision 595ede3b4cf5a1f5c06a04d1db99a0674ae742bd) +++ sources/canbus/MessageInterpreter.cpp (.../MessageInterpreter.cpp) (revision f1e100d1368bfd132d88e09680f833dc53b4d0b0) @@ -25,8 +25,18 @@ using namespace Can; using namespace Model; -#define DEBUG_RECEIVE_SIGNAL(vID, vMODEL) //qDebug() << vID << vMODEL; +#define DEBUG_RECEIVE_SIGNAL(vID, vMODEL) // qDebug() << vID << vMODEL; + +// a macro to simplify the transmit message +// would be better later to be replaced by a template method +// like the notify method of received messages +#define INTERPRET_RECEIVED_MESSAGE(vMODEL) \ + if ( ! length ) { logInvalidLength(vActionId); return false; } \ + vPayload = Format::fromVariant(vData); \ + LOG_EVENT(vMODEL::toString(vData)); \ + DEBUG_RECEIVE_SIGNAL(0, typeid(vMODEL).name()) + /*! * \brief MessageInterpreter::MessageInterpreter * \details Constructor @@ -57,7 +67,7 @@ // coco begin validated : Tested manually. This code will never go false // because the isValidMessage is catching errors. // only is checking here for developer safety if logic has changed. - if ( ! ok ) return false; + if ( ! ok ) return false; // coco end emit didActionReceive(tModel.data()); logReceivedMessage(tModel); @@ -206,96 +216,21 @@ LOG_EVENT(mSenderID + QString("RawData")); break; - case Gui::GuiActionType::ID_PowerOff: - if ( ! length ) { logInvalidLength(vActionId); return false; } - vPayload += Format::fromVariant(vData); - LOG_EVENT(AdjustPowerOffRequestData::toString(vData)); - break; - - case Gui::GuiActionType::ID_AdjustBloodDialysateReq: - if ( ! length ) { logInvalidLength(vActionId); return false; } - vPayload = Format::fromVariant(vData); - LOG_EVENT(AdjustBloodDialysateRequestData::toString(vData)); - break; - - case Gui::GuiActionType::ID_AdjustDurationReq: - if ( ! length ) { logInvalidLength(vActionId); return false; } - vPayload = Format::fromVariant(vData); - LOG_EVENT(AdjustDurationRequestData::toString(vData)); - break; - - case Gui::GuiActionType::ID_AdjustUltrafiltrationStateReq: - if ( ! length ) { logInvalidLength(vActionId); return false; } - vPayload = Format::fromVariant(vData); - LOG_EVENT(AdjustUltrafiltrationStateRequestData::toString(vData)); - break; - - case Gui::GuiActionType::ID_AdjustUltrafiltrationEditReq: - if ( ! length ) { logInvalidLength(vActionId); return false; } - vPayload = Format::fromVariant(vData); - LOG_EVENT(AdjustUltrafiltrationEditRequestData::toString(vData)); - break; - - case Gui::GuiActionType::ID_AdjustUltrafiltrationConfirmReq: - if ( ! length ) { logInvalidLength(vActionId); return false; } - vPayload = Format::fromVariant(vData); - LOG_EVENT(AdjustUltrafiltrationConfirmRequestData::toString(vData)); - break; - - case Gui::GuiActionType::ID_AdjustSalineReq: - if ( ! length ) { logInvalidLength(vActionId); return false; } - vPayload = Format::fromVariant(vData); - LOG_EVENT(AdjustSalineRequestData::toString(vData)); - break; - - case Gui::GuiActionType::ID_AdjustHeparinReq: - if ( ! length ) { logInvalidLength(vActionId); return false; } - vPayload = Format::fromVariant(vData); - LOG_EVENT(AdjustHeparinRequestData::toString(vData)); - break; - - case Gui::GuiActionType::ID_AdjustPressuresLimitsReq: - if ( ! length ) { logInvalidLength(vActionId); return false; } - vPayload = Format::fromVariant(vData); - LOG_EVENT(AdjustPressuresLimitsRequestData::toString(vData)); - break; - - case Gui::GuiActionType::ID_AlarmSilenceReq: - if ( ! length ) { logInvalidLength(vActionId); return false; } - vPayload = Format::fromVariant(vData); - LOG_EVENT(AlarmSilenceRequestData::toString(vData)); - break; - - case Gui::GuiActionType::ID_AlarmUserAckReq: - if ( ! length ) { logInvalidLength(vActionId); return false; } - vPayload = Format::fromVariant(vData); - LOG_EVENT(AlarmAcknowledgeRequestData::toString(vData)); - break; - - case Gui::GuiActionType::ID_StartTreatmentReq: - if ( ! length ) { logInvalidLength(vActionId); return false; } - vPayload = Format::fromVariant(vData); - LOG_EVENT(StartTreatmentRequestData::toString(vData)); - break; - - case Gui::GuiActionType::ID_ConfirmTreatmentReq: - if ( ! length ) { logInvalidLength(vActionId); return false; } - vPayload = Format::fromVariant(vData); - LOG_EVENT(ConfirmTreatmentRequestData::toString(vData)); - break; - - case Gui::GuiActionType::ID_EndTreatmentReq: - if ( length != 0 ) { logInvalidLength(vActionId); return false; } - vPayload = Format::fromVariant(vData); - LOG_EVENT(EndTreatmentRequestData::toString(vData)); - break; - - case Gui::GuiActionType::ID_CreateTreatmentReq: - if ( ! length ) { logInvalidLength(vActionId); return false; } - vPayload = Format::fromVariant(vData); - LOG_EVENT(AdjustTreatmentParametersRequestData::toString(vData)); - break; - + case Gui::GuiActionType::ID_PowerOff : INTERPRET_RECEIVED_MESSAGE(AdjustPowerOffRequestData ); break; + case Gui::GuiActionType::ID_AdjustBloodDialysateReq : INTERPRET_RECEIVED_MESSAGE(AdjustBloodDialysateRequestData ); break; + case Gui::GuiActionType::ID_AdjustDurationReq : INTERPRET_RECEIVED_MESSAGE(AdjustDurationRequestData ); break; + case Gui::GuiActionType::ID_AdjustUltrafiltrationStateReq : INTERPRET_RECEIVED_MESSAGE(AdjustUltrafiltrationStateRequestData ); break; + case Gui::GuiActionType::ID_AdjustUltrafiltrationEditReq : INTERPRET_RECEIVED_MESSAGE(AdjustUltrafiltrationEditRequestData ); break; + case Gui::GuiActionType::ID_AdjustUltrafiltrationConfirmReq : INTERPRET_RECEIVED_MESSAGE(AdjustUltrafiltrationConfirmRequestData); break; + case Gui::GuiActionType::ID_AdjustSalineReq : INTERPRET_RECEIVED_MESSAGE(AdjustSalineRequestData ); break; + case Gui::GuiActionType::ID_AdjustHeparinReq : INTERPRET_RECEIVED_MESSAGE(AdjustHeparinRequestData ); break; + case Gui::GuiActionType::ID_AdjustPressuresLimitsReq : INTERPRET_RECEIVED_MESSAGE(AdjustPressuresLimitsRequestData ); break; + case Gui::GuiActionType::ID_AlarmSilenceReq : INTERPRET_RECEIVED_MESSAGE(AlarmSilenceRequestData ); break; + case Gui::GuiActionType::ID_AlarmUserAckReq : INTERPRET_RECEIVED_MESSAGE(AlarmAcknowledgeRequestData ); break; + case Gui::GuiActionType::ID_StartTreatmentReq : INTERPRET_RECEIVED_MESSAGE(StartTreatmentRequestData ); break; + case Gui::GuiActionType::ID_ConfirmTreatmentReq : INTERPRET_RECEIVED_MESSAGE(ConfirmTreatmentRequestData ); break; + case Gui::GuiActionType::ID_EndTreatmentReq : INTERPRET_RECEIVED_MESSAGE(EndTreatmentRequestData ); break; + case Gui::GuiActionType::ID_CreateTreatmentReq : INTERPRET_RECEIVED_MESSAGE(AdjustTreatmentParametersRequestData ); break; default: QString mActionIdHexString = Format::toHexString(vActionId); LOG_DEBUG(mSenderID + tr("Unknown transmit Message with ID '%1'").arg(mActionIdHexString)); @@ -378,9 +313,11 @@ case Gui::GuiActionType::ID_Acknow : ok = true; break; // TODO : implement notify<>() case Gui::GuiActionType::ID_PowerOff : ok = notify(vMessage, vData, Gui::GuiActionType::ID_PowerOff ); break; case Gui::GuiActionType::ID_ShuttingDown : ok = true; LOG_EVENT("HD,ShuttingDown"); break; // TODO : implement notify<>() - case Gui::GuiActionType::ID_AlarmStatus : ok = alarmStatus (vMessage, vData); break; // TODO : implement notify<>() - case Gui::GuiActionType::ID_AlarmTriggered : ok = alarmTriggered (vMessage, vData); break; // TODO : implement notify<>() - case Gui::GuiActionType::ID_AlarmCleared : ok = alarmCleared (vMessage, vData); break; // TODO : implement notify<>() + + case Gui::GuiActionType::ID_AlarmTriggered : ok = notify(vMessage, vData, Gui::GuiActionType::ID_AlarmTriggered ); break; + case Gui::GuiActionType::ID_AlarmCleared : ok = notify(vMessage, vData, Gui::GuiActionType::ID_AlarmCleared ); break; + case Gui::GuiActionType::ID_AlarmStatus : ok = notify(vMessage, vData, Gui::GuiActionType::ID_AlarmStatus ); break; + case Gui::GuiActionType::ID_CreateTreatmentRsp : ok = notify(vMessage, vData, Gui::GuiActionType::ID_CreateTreatmentRsp ); break; // Adjustment Response Messages @@ -481,83 +418,6 @@ return ok; } -// ---------- ---------- ---------- ---------- ---------- Events ---------- ---------- ---------- ---------- ---------- // -// ---------- ---------- ---------- ---------- ---------- - HD ---------- ---------- ---------- ---------- ---------- // - -/*! - * \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 - Alarm Status data - * \return true if the data can be extracted as defined for Alarm Status Message ID - */ -bool MessageInterpreter::alarmStatus(const Message &vMessage, QVariantList &vData) { - // TODO : review other methods - bool ok = false; - if ( ! isValidMessage(vMessage, Gui::GuiActionType::ID_AlarmStatus) ) return ok; - - Model::MAlarmStatus mData; - ok = mData.fromByteArray(vMessage.data); - LOG_EVENT("HD," + mData.toString()); // TODO: Not Standard - - mData.toVariantList(vData); - emit didActionReceive(mData.data()); - - return ok; -} - -/*! - * \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 - Alarm Triggered data - * \return true if the data can be extracted as defined for Alarm Triggered Message ID - */ -bool MessageInterpreter::alarmTriggered(const Message &vMessage, QVariantList &vData) -{ - // TODO : review other methods - bool ok = false; - if ( ! isValidMessage(vMessage, Gui::GuiActionType::ID_AlarmTriggered) ) return ok; - - Model::MAlarmTriggered mData; - ok = mData.fromByteArray(vMessage.data); - LOG_EVENT("HD," + mData.toString()); // TODO: Not Standard - - mData.toVariantList(vData); - emit didActionReceive(mData.data()); - - return ok; -} - -/*! - * \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 - Alarm Cleared data - * \return true if the data can be extracted as defined for Alarm Cleared Message ID - */ -bool MessageInterpreter::alarmCleared(const Message &vMessage, QVariantList &vData) -{ - // TODO : review other methods - bool ok = false; - if ( ! isValidMessage(vMessage, Gui::GuiActionType::ID_AlarmCleared) ) return ok; - - Model::MAlarmCleared mData; - ok = mData.fromByteArray(vMessage.data); - LOG_EVENT("HD," + mData.toString()); - - mData.toVariantList(vData); - emit didActionReceive(mData.data()); - - return ok; -} - // ---------- ---------- ---------- ---------- ---------- Adjustments ---------- ---------- ---------- ---------- ---------- // /*! * \brief MessageInterpreter::adjustUltrafiltrationEditData Index: sources/canbus/MessageInterpreter.h =================================================================== diff -u -re58be51c4aa52938af250db3ee579e98de08542c -rf1e100d1368bfd132d88e09680f833dc53b4d0b0 --- sources/canbus/MessageInterpreter.h (.../MessageInterpreter.h) (revision e58be51c4aa52938af250db3ee579e98de08542c) +++ sources/canbus/MessageInterpreter.h (.../MessageInterpreter.h) (revision f1e100d1368bfd132d88e09680f833dc53b4d0b0) @@ -65,14 +65,6 @@ // ----- Debug bool canbusFaultCountData (const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; - // ----- Events - // ----- - HD - 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__; - - // ----- - DG - // ----- Adjustments bool adjustUltrafiltrationEdit (const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; bool adjustUltrafiltrationConfirm (const Message &vMessage, QVariantList &vData) __attribute_warn_unused_result__; Index: sources/model/hd/alarm/MAlarmCleared.cpp =================================================================== diff -u -r6cad9b004e904200b71de7431c745795256080df -rf1e100d1368bfd132d88e09680f833dc53b4d0b0 --- sources/model/hd/alarm/MAlarmCleared.cpp (.../MAlarmCleared.cpp) (revision 6cad9b004e904200b71de7431c745795256080df) +++ sources/model/hd/alarm/MAlarmCleared.cpp (.../MAlarmCleared.cpp) (revision f1e100d1368bfd132d88e09680f833dc53b4d0b0) @@ -16,19 +16,16 @@ using namespace Model; -QString MAlarmCleared::toString() const { - return QString(stringPrefix + ",%1") - .arg(_data.mAlarmID.value); +QVariantList MAlarmCleared::parameters() const { + return { + _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 ; + return true ; else { if(vIndex) *vIndex = index; return false; } } Index: sources/model/hd/alarm/MAlarmCleared.h =================================================================== diff -u -r6cad9b004e904200b71de7431c745795256080df -rf1e100d1368bfd132d88e09680f833dc53b4d0b0 --- sources/model/hd/alarm/MAlarmCleared.h (.../MAlarmCleared.h) (revision 6cad9b004e904200b71de7431c745795256080df) +++ sources/model/hd/alarm/MAlarmCleared.h (.../MAlarmCleared.h) (revision f1e100d1368bfd132d88e09680f833dc53b4d0b0) @@ -18,6 +18,7 @@ #include // Project +#include "MAbstract.h" #include "types.h" // forward declarations @@ -47,30 +48,31 @@ * | infoText | Alarm Cleared | * */ -class MAlarmCleared { +class MAlarmCleared : public MAbstract { // friends friend class ::tst_models; -public: - QString stringPrefix = "Alarm Cleared"; - struct Data { - quint32 mAlarmID = 0; ///< Alarm ID - }; + QVariantList parameters() const override; -private: struct { Types::U32 mAlarmID ; } _data; public: - MAlarmCleared () { } + Type_Enum typeText() const override { return Type_Enum::eEvent ; } + Unit_Enum unitText() const override { return Unit_Enum::eHD ; } + QString infoText() const override { return QString("AlarmCleared") ; } - QString toString ( ) const ; - void toVariantList ( QVariantList &vData ) const ; - bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr); + struct Data { + quint32 mAlarmID = 0; ///< Alarm ID + }; - Data data() const; +public: + MAlarmCleared () { } + + bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr) override; + Data data ( ) const ; }; } Index: sources/model/hd/alarm/MAlarmStatusData.cpp =================================================================== diff -u -rcc1e9d6d55c816f3fcd626dc6948cca24da283b3 -rf1e100d1368bfd132d88e09680f833dc53b4d0b0 --- sources/model/hd/alarm/MAlarmStatusData.cpp (.../MAlarmStatusData.cpp) (revision cc1e9d6d55c816f3fcd626dc6948cca24da283b3) +++ sources/model/hd/alarm/MAlarmStatusData.cpp (.../MAlarmStatusData.cpp) (revision f1e100d1368bfd132d88e09680f833dc53b4d0b0) @@ -2,50 +2,42 @@ * * 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. + * 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 MAlarmStatusData.cpp - * \author (last) Behrouz NematiPour - * \date (last) 16-Oct-2020 - * \author (original) Behrouz NemaiPour - * \date (original) 02-Jul-2020 + * \file MAlarmStatusData.cpp + * \author (last) Behrouz NematiPour + * \date (last) 16-Oct-2020 + * \author (original) Behrouz NematiPour + * \date (original) 02-Dec-2020 * */ #include "MAlarmStatusData.h" +// #include using namespace Model; using namespace Gui; -MAlarmStatus::MAlarmStatus() { } - -QString MAlarmStatus::toString() const { - return QString(stringPrefix + ",%1,%2,%3,%4,%5") - .arg(_data.mState .value ) - .arg(_data.mTop .value ) - .arg(_data.mEscalatesIn .value ) - .arg(_data.mMuteTimeout .value ) - .arg(_data.mFlags .toString("")); +QVariantList MAlarmStatus::parameters() const { + return { + _data.mState .value , + _data.mTop .value , + _data.mEscalatesIn .value , + _data.mMuteTimeout .value , + _data.mFlags .toString("") + }; } -void MAlarmStatus::toVariantList(QVariantList &vData) const { - vData += _data.mState .value ; - vData += _data.mTop .value ; - vData += _data.mEscalatesIn .value ; - vData += _data.mMuteTimeout .value ; - for (int i = 0; i < _data.mFlags.count(); i++) { - vData += _data.mFlags.at(i); - } -} - bool MAlarmStatus::fromByteArray(const QByteArray &vByteArray, int *vIndex) { int index = 0; // message data start position if (GetValue(vByteArray, index, _data.mState )) if (GetValue(vByteArray, index, _data.mTop )) if (GetValue(vByteArray, index, _data.mEscalatesIn )) if (GetValue(vByteArray, index, _data.mMuteTimeout )) - if (GetBits (vByteArray, index, _data.mFlags , eFlag_Bits_Length)) - return true ; + if (GetBits (vByteArray, index, _data.mFlags , eFlag_Bits_Length)) { + qDebug() << _data.mFlags.toString(); + return true ; + } else { if(vIndex) *vIndex = index; return false; } else { if(vIndex) *vIndex = index; return false; } else { if(vIndex) *vIndex = index; return false; } @@ -75,69 +67,68 @@ * \return The alarm description */ QString MAlarmStatus::toText(GuiAlarmID vAlarmID) { - QString result; switch (vAlarmID) { - case GuiAlarmID::ALARM_ID_NO_ALARM: { result = QObject::tr("" ); break; } - case GuiAlarmID::ALARM_ID_HD_SOFTWARE_FAULT: { result = QObject::tr("Software Error." ); break; } - case GuiAlarmID::ALARM_ID_STUCK_BUTTON_TEST_FAILED: { result = QObject::tr("Indication for when no alarms is a possible situation." ); break; } - case GuiAlarmID::ALARM_ID_FPGA_POST_TEST_FAILED: { result = QObject::tr("FPGA POST failure." ); break; } - case GuiAlarmID::ALARM_ID_WATCHDOG_POST_TEST_FAILED: { result = QObject::tr("Watchdog POST failure." ); break; } - case GuiAlarmID::ALARM_ID_UI_COMM_POST_FAILED: { result = QObject::tr("UI communication POST failure." ); break; } - case GuiAlarmID::ALARM_ID_BLOOD_PUMP_MC_CURRENT_CHECK: { result = QObject::tr("Blood pump failed motor controller current check." ); break; } - case GuiAlarmID::ALARM_ID_BLOOD_PUMP_OFF_CHECK: { result = QObject::tr("Blood pump failed motor off check. \nMeasured speed while commanded off." ); break; } - case GuiAlarmID::ALARM_ID_BLOOD_PUMP_MC_DIRECTION_CHECK: { result = QObject::tr("Blood pump failed motor controller direction check." ); break; } - case GuiAlarmID::ALARM_ID_BLOOD_PUMP_ROTOR_SPEED_CHECK: { result = QObject::tr("Blood pump failed rotor speed check." ); break; } - case GuiAlarmID::ALARM_ID_DIAL_IN_PUMP_MC_CURRENT_CHECK: { result = QObject::tr("Dialysis inlet pump failed motor controller current check." ); break; } - case GuiAlarmID::ALARM_ID_DIAL_IN_PUMP_OFF_CHECK: { result = QObject::tr("Dialysis inlet pump failed motor off check. \nMeasured speed while commanded off." ); break; } - case GuiAlarmID::ALARM_ID_DIAL_IN_PUMP_MC_DIRECTION_CHECK: { result = QObject::tr("Dialysis inlet pump failed motor controller direction check." ); break; } - case GuiAlarmID::ALARM_ID_DIAL_IN_PUMP_ROTOR_SPEED_CHECK: { result = QObject::tr("Dialysis inlet pump failed rotor speed check." ); break; } - case GuiAlarmID::ALARM_ID_DIAL_OUT_PUMP_MC_CURRENT_CHECK: { result = QObject::tr("Dialysis outlet pump failed motor controller current check." ); break; } - case GuiAlarmID::ALARM_ID_DIAL_OUT_PUMP_OFF_CHECK: { result = QObject::tr("Dialysis outlet pump failed motor off check. \nMeasured speed while commanded off." ); break; } - case GuiAlarmID::ALARM_ID_DIAL_OUT_PUMP_MC_DIRECTION_CHECK: { result = QObject::tr("Dialysis outlet pump failed motor controller direction check." ); break; } - case GuiAlarmID::ALARM_ID_DIAL_OUT_PUMP_ROTOR_SPEED_CHECK: { result = QObject::tr("Dialysis outlet pump failed rotor speed check." ); break; } - case GuiAlarmID::ALARM_ID_WATCHDOG_EXPIRED: { result = QObject::tr("Watchdog expired error." ); break; } - case GuiAlarmID::ALARM_ID_RTC_COMM_ERROR: { result = QObject::tr("Real-time clock communication error." ); break; } - case GuiAlarmID::ALARM_ID_RTC_CONFIG_ERROR: { result = QObject::tr("Real-time clock configuration error." ); break; } - case GuiAlarmID::ALARM_ID_DG_COMM_TIMEOUT: { result = QObject::tr("Dialysate generator communication timeout." ); break; } - case GuiAlarmID::ALARM_ID_UI_COMM_TIMEOUT: { result = QObject::tr("User interface communication timeout." ); break; } - case GuiAlarmID::ALARM_ID_COMM_TOO_MANY_BAD_CRCS: { result = QObject::tr("Too many bad CRCs detected on received system messages." ); break; } - case GuiAlarmID::ALARM_ID_TREATMENT_STOPPED_BY_USER: { result = QObject::tr("Treatment stopped by user action - pressed stop button." ); break; } - case GuiAlarmID::ALARM_ID_BLOOD_SITTING_WARNING: { result = QObject::tr("Blood sitting too long warning (>4 min)." ); break; } - case GuiAlarmID::ALARM_ID_BLOOD_SITTING_TOO_LONG_NO_RESUME: { result = QObject::tr("Blood sitting too long alarm (>5 min)." ); break; } - case GuiAlarmID::ALARM_ID_BLOOD_SITTING_TOO_LONG_NO_RINSEBACK: { result = QObject::tr("Blood sitting too long alarm (>10 min)." ); break; } - case GuiAlarmID::ALARM_ID_CAN_MESSAGE_NOT_ACKED: { result = QObject::tr("System message needing acknowledgment was not acknowledged." ); break; } - case GuiAlarmID::ALARM_ID_OCCLUSION_BLOOD_PUMP: { result = QObject::tr("Blood pump occlusion detected." ); break; } - case GuiAlarmID::ALARM_ID_OCCLUSION_DIAL_IN_PUMP: { result = QObject::tr("Dialysate inlet pump occlusion detected." ); break; } - case GuiAlarmID::ALARM_ID_OCCLUSION_DIAL_OUT_PUMP: { result = QObject::tr("Dialysate outlet pump occlusion detected." ); break; } - case GuiAlarmID::ALARM_ID_ARTERIAL_PRESSURE_LOW: { result = QObject::tr("Arterial pressure too low during treatment." ); break; } - case GuiAlarmID::ALARM_ID_ARTERIAL_PRESSURE_HIGH: { result = QObject::tr("Arterial pressure too high during treatment." ); break; } - case GuiAlarmID::ALARM_ID_VENOUS_PRESSURE_LOW: { result = QObject::tr("Venous pressure too low during treatment." ); break; } - case GuiAlarmID::ALARM_ID_VENOUS_PRESSURE_HIGH: { result = QObject::tr("Venous pressure too high during treatment." ); break; } - case GuiAlarmID::ALARM_ID_UF_RATE_TOO_HIGH_ERROR: { result = QObject::tr("Ultrafiltration rate is too high error during treatment." ); break; } - case GuiAlarmID::ALARM_ID_UF_VOLUME_ACCURACY_ERROR: { result = QObject::tr("Ultrafiltration volume accuracy error during treatment." ); break; } - case GuiAlarmID::ALARM_ID_RTC_BATTERY_LOW: { result = QObject::tr("RTC battery low." ); break; } - case GuiAlarmID::ALARM_ID_RTC_OR_TIMER_ACCURACY_FAILURE: { result = QObject::tr("RTC or MCU timer inaccurate." ); break; } - case GuiAlarmID::ALARM_ID_RTC_RAM_OPS_ERROR: { result = QObject::tr("RTC or RAM operations failure (read or write)." ); break; } - case GuiAlarmID::ALARM_ID_NVDATA_EEPROM_OPS_FAILURE: { result = QObject::tr("EEPRON operations (read, write, erase) failure." ); break; } - case GuiAlarmID::ALARM_ID_NVDATA_MFG_RECORD_CRC_ERROR: { result = QObject::tr("Manufacturing record CRC failure." ); break; } - case GuiAlarmID::ALARM_ID_NVDATA_SRVC_RECORD_CRC_ERROR: { result = QObject::tr("Service record CRC failure." ); break; } - case GuiAlarmID::ALARM_ID_NVDATA_CAL_RECORD_CRC_ERROR: { result = QObject::tr("Calibration record CRC failure." ); break; } - case GuiAlarmID::ALARM_ID_NVDATA_HW_USAGE_DATA_CRC_ERROR: { result = QObject::tr("HW usage data failure." ); break; } - case GuiAlarmID::AlARM_ID_NVDATA_DISINFECTION_DATE_CRC_ERROR: { result = QObject::tr("Last disinfection date CRC error." ); break; } - case GuiAlarmID::ALARM_ID_RO_PUMP_OUT_PRESSURE_OUT_OF_RANGE: { result = QObject::tr("Pressure at outlet of RO pump is out of range." ); break; } - case GuiAlarmID::ALARM_ID_TEMPERATURE_SENSORS_FAULT: { result = QObject::tr("DG temperature sensors fault." ); break; } - case GuiAlarmID::ALARM_ID_TEMPERATURE_SENSORS_INCONSISTENT: { result = QObject::tr("DG temperature sensors values are inconsistent." ); break; } - case GuiAlarmID::ALARM_ID_HD_COMM_TIMEOUT: { result = QObject::tr("HD communication timeout." ); break; } - case GuiAlarmID::ALARM_ID_VALVE_CONTROL_FAILURE: { result = QObject::tr("FPGA not accepting commanded valve states." ); break; } - case GuiAlarmID::ALARM_ID_BLOOD_PUMP_FLOW_VS_MOTOR_SPEED_CHECK: { result = QObject::tr("Blood pump failed flow vs. motor speed check. \nMismatch with flow rate and rate implied by motor speed." ); break; } - case GuiAlarmID::ALARM_ID_DIAL_IN_PUMP_FLOW_VS_MOTOR_SPEED_CHECK: { result = QObject::tr("Dialysate inlet pump failed flow vs. motor speed check. \nMismatch with flow rate and rate implied by motor speed." ); break; } + case GuiAlarmID::ALARM_ID_NO_ALARM : { result = QObject::tr("" ); break; } + case GuiAlarmID::ALARM_ID_HD_SOFTWARE_FAULT : { result = QObject::tr("Software Error." ); break; } + case GuiAlarmID::ALARM_ID_STUCK_BUTTON_TEST_FAILED : { result = QObject::tr("Indication for when no alarms is a possible situation." ); break; } + case GuiAlarmID::ALARM_ID_FPGA_POST_TEST_FAILED : { result = QObject::tr("FPGA POST failure." ); break; } + case GuiAlarmID::ALARM_ID_WATCHDOG_POST_TEST_FAILED : { result = QObject::tr("Watchdog POST failure." ); break; } + case GuiAlarmID::ALARM_ID_UI_COMM_POST_FAILED : { result = QObject::tr("UI communication POST failure." ); break; } + case GuiAlarmID::ALARM_ID_BLOOD_PUMP_MC_CURRENT_CHECK : { result = QObject::tr("Blood pump failed motor controller current check." ); break; } + case GuiAlarmID::ALARM_ID_BLOOD_PUMP_OFF_CHECK : { result = QObject::tr("Blood pump failed motor off check. \nMeasured speed while commanded off." ); break; } + case GuiAlarmID::ALARM_ID_BLOOD_PUMP_MC_DIRECTION_CHECK : { result = QObject::tr("Blood pump failed motor controller direction check." ); break; } + case GuiAlarmID::ALARM_ID_BLOOD_PUMP_ROTOR_SPEED_CHECK : { result = QObject::tr("Blood pump failed rotor speed check." ); break; } + case GuiAlarmID::ALARM_ID_DIAL_IN_PUMP_MC_CURRENT_CHECK : { result = QObject::tr("Dialysis inlet pump failed motor controller current check." ); break; } + case GuiAlarmID::ALARM_ID_DIAL_IN_PUMP_OFF_CHECK : { result = QObject::tr("Dialysis inlet pump failed motor off check. \nMeasured speed while commanded off." ); break; } + case GuiAlarmID::ALARM_ID_DIAL_IN_PUMP_MC_DIRECTION_CHECK : { result = QObject::tr("Dialysis inlet pump failed motor controller direction check." ); break; } + case GuiAlarmID::ALARM_ID_DIAL_IN_PUMP_ROTOR_SPEED_CHECK : { result = QObject::tr("Dialysis inlet pump failed rotor speed check." ); break; } + case GuiAlarmID::ALARM_ID_DIAL_OUT_PUMP_MC_CURRENT_CHECK : { result = QObject::tr("Dialysis outlet pump failed motor controller current check." ); break; } + case GuiAlarmID::ALARM_ID_DIAL_OUT_PUMP_OFF_CHECK : { result = QObject::tr("Dialysis outlet pump failed motor off check. \nMeasured speed while commanded off." ); break; } + case GuiAlarmID::ALARM_ID_DIAL_OUT_PUMP_MC_DIRECTION_CHECK : { result = QObject::tr("Dialysis outlet pump failed motor controller direction check." ); break; } + case GuiAlarmID::ALARM_ID_DIAL_OUT_PUMP_ROTOR_SPEED_CHECK : { result = QObject::tr("Dialysis outlet pump failed rotor speed check." ); break; } + case GuiAlarmID::ALARM_ID_WATCHDOG_EXPIRED : { result = QObject::tr("Watchdog expired error." ); break; } + case GuiAlarmID::ALARM_ID_RTC_COMM_ERROR : { result = QObject::tr("Real-time clock communication error." ); break; } + case GuiAlarmID::ALARM_ID_RTC_CONFIG_ERROR : { result = QObject::tr("Real-time clock configuration error." ); break; } + case GuiAlarmID::ALARM_ID_DG_COMM_TIMEOUT : { result = QObject::tr("Dialysate generator communication timeout." ); break; } + case GuiAlarmID::ALARM_ID_UI_COMM_TIMEOUT : { result = QObject::tr("User interface communication timeout." ); break; } + case GuiAlarmID::ALARM_ID_COMM_TOO_MANY_BAD_CRCS : { result = QObject::tr("Too many bad CRCs detected on received system messages." ); break; } + case GuiAlarmID::ALARM_ID_TREATMENT_STOPPED_BY_USER : { result = QObject::tr("Treatment stopped by user action - pressed stop button." ); break; } + case GuiAlarmID::ALARM_ID_BLOOD_SITTING_WARNING : { result = QObject::tr("Blood sitting too long warning (>4 min)." ); break; } + case GuiAlarmID::ALARM_ID_BLOOD_SITTING_TOO_LONG_NO_RESUME : { result = QObject::tr("Blood sitting too long alarm (>5 min)." ); break; } + case GuiAlarmID::ALARM_ID_BLOOD_SITTING_TOO_LONG_NO_RINSEBACK : { result = QObject::tr("Blood sitting too long alarm (>10 min)." ); break; } + case GuiAlarmID::ALARM_ID_CAN_MESSAGE_NOT_ACKED : { result = QObject::tr("System message needing acknowledgment was not acknowledged." ); break; } + case GuiAlarmID::ALARM_ID_OCCLUSION_BLOOD_PUMP : { result = QObject::tr("Blood pump occlusion detected." ); break; } + case GuiAlarmID::ALARM_ID_OCCLUSION_DIAL_IN_PUMP : { result = QObject::tr("Dialysate inlet pump occlusion detected." ); break; } + case GuiAlarmID::ALARM_ID_OCCLUSION_DIAL_OUT_PUMP : { result = QObject::tr("Dialysate outlet pump occlusion detected." ); break; } + case GuiAlarmID::ALARM_ID_ARTERIAL_PRESSURE_LOW : { result = QObject::tr("Arterial pressure too low during treatment." ); break; } + case GuiAlarmID::ALARM_ID_ARTERIAL_PRESSURE_HIGH : { result = QObject::tr("Arterial pressure too high during treatment." ); break; } + case GuiAlarmID::ALARM_ID_VENOUS_PRESSURE_LOW : { result = QObject::tr("Venous pressure too low during treatment." ); break; } + case GuiAlarmID::ALARM_ID_VENOUS_PRESSURE_HIGH : { result = QObject::tr("Venous pressure too high during treatment." ); break; } + case GuiAlarmID::ALARM_ID_UF_RATE_TOO_HIGH_ERROR : { result = QObject::tr("Ultrafiltration rate is too high error during treatment." ); break; } + case GuiAlarmID::ALARM_ID_UF_VOLUME_ACCURACY_ERROR : { result = QObject::tr("Ultrafiltration volume accuracy error during treatment." ); break; } + case GuiAlarmID::ALARM_ID_RTC_BATTERY_LOW : { result = QObject::tr("RTC battery low." ); break; } + case GuiAlarmID::ALARM_ID_RTC_OR_TIMER_ACCURACY_FAILURE : { result = QObject::tr("RTC or MCU timer inaccurate." ); break; } + case GuiAlarmID::ALARM_ID_RTC_RAM_OPS_ERROR : { result = QObject::tr("RTC or RAM operations failure (read or write)." ); break; } + case GuiAlarmID::ALARM_ID_NVDATA_EEPROM_OPS_FAILURE : { result = QObject::tr("EEPRON operations (read, write, erase) failure." ); break; } + case GuiAlarmID::ALARM_ID_NVDATA_MFG_RECORD_CRC_ERROR : { result = QObject::tr("Manufacturing record CRC failure." ); break; } + case GuiAlarmID::ALARM_ID_NVDATA_SRVC_RECORD_CRC_ERROR : { result = QObject::tr("Service record CRC failure." ); break; } + case GuiAlarmID::ALARM_ID_NVDATA_CAL_RECORD_CRC_ERROR : { result = QObject::tr("Calibration record CRC failure." ); break; } + case GuiAlarmID::ALARM_ID_NVDATA_HW_USAGE_DATA_CRC_ERROR : { result = QObject::tr("HW usage data failure." ); break; } + case GuiAlarmID::AlARM_ID_NVDATA_DISINFECTION_DATE_CRC_ERROR : { result = QObject::tr("Last disinfection date CRC error." ); break; } + case GuiAlarmID::ALARM_ID_RO_PUMP_OUT_PRESSURE_OUT_OF_RANGE : { result = QObject::tr("Pressure at outlet of RO pump is out of range." ); break; } + case GuiAlarmID::ALARM_ID_TEMPERATURE_SENSORS_FAULT : { result = QObject::tr("DG temperature sensors fault." ); break; } + case GuiAlarmID::ALARM_ID_TEMPERATURE_SENSORS_INCONSISTENT : { result = QObject::tr("DG temperature sensors values are inconsistent." ); break; } + case GuiAlarmID::ALARM_ID_HD_COMM_TIMEOUT : { result = QObject::tr("HD communication timeout." ); break; } + case GuiAlarmID::ALARM_ID_VALVE_CONTROL_FAILURE : { result = QObject::tr("FPGA not accepting commanded valve states." ); break; } + case GuiAlarmID::ALARM_ID_BLOOD_PUMP_FLOW_VS_MOTOR_SPEED_CHECK : { result = QObject::tr("Blood pump failed flow vs. motor speed check. \nMismatch with flow rate and rate implied by motor speed." ); break; } + case GuiAlarmID::ALARM_ID_DIAL_IN_PUMP_FLOW_VS_MOTOR_SPEED_CHECK : { result = QObject::tr("Dialysate inlet pump failed flow vs. motor speed check. \nMismatch with flow rate and rate implied by motor speed." ); break; } case GuiAlarmID::ALARM_ID_DIAL_OUT_PUMP_FLOW_VS_MOTOR_SPEED_CHECK: { result = QObject::tr("Dialysate outlet pump failed flow vs. motor speed check. \nMismatch with flow rate and rate implied by motor speed." ); break; } - case GuiAlarmID::ALARM_ID_BLOOD_PUMP_MOTOR_SPEED_CHECK: { result = QObject::tr("Blood pump failed motor speed check. Measured vs. commanded." ); break; } - case GuiAlarmID::ALARM_ID_DIAL_IN_PUMP_MOTOR_SPEED_CHECK: { result = QObject::tr("Dialysate inlet pump failed motor speed check. Measured vs. commanded." ); break; } - case GuiAlarmID::ALARM_ID_DIAL_OUT_PUMP_MOTOR_SPEED_CHECK: { result = QObject::tr("Dialysate outlet pump failed motor speed check. Measured vs. commanded." ); break; } - case GuiAlarmID::ALARM_ID_BLOOD_PUMP_ROTOR_SPEED_TOO_HIGH: { result = QObject::tr("Blood pump rotor speed too high." ); break; } - case GuiAlarmID::ALARM_ID_INLET_WATER_LOW_CONDUCTIVITY: { result = QObject::tr("Inlet water conductivity too low." ); break; } + case GuiAlarmID::ALARM_ID_BLOOD_PUMP_MOTOR_SPEED_CHECK : { result = QObject::tr("Blood pump failed motor speed check. Measured vs. commanded." ); break; } + case GuiAlarmID::ALARM_ID_DIAL_IN_PUMP_MOTOR_SPEED_CHECK : { result = QObject::tr("Dialysate inlet pump failed motor speed check. Measured vs. commanded." ); break; } + case GuiAlarmID::ALARM_ID_DIAL_OUT_PUMP_MOTOR_SPEED_CHECK : { result = QObject::tr("Dialysate outlet pump failed motor speed check. Measured vs. commanded." ); break; } + case GuiAlarmID::ALARM_ID_BLOOD_PUMP_ROTOR_SPEED_TOO_HIGH : { result = QObject::tr("Blood pump rotor speed too high." ); break; } + case GuiAlarmID::ALARM_ID_INLET_WATER_LOW_CONDUCTIVITY : { result = QObject::tr("Inlet water conductivity too low." ); break; } default: result = QObject::tr("ALARM_ID_UNDEFINED [%1]").arg(int(vAlarmID)); break; Index: sources/model/hd/alarm/MAlarmStatusData.h =================================================================== diff -u -rc241fc1d31be3e4958582dff94de8189f5bbba67 -rf1e100d1368bfd132d88e09680f833dc53b4d0b0 --- sources/model/hd/alarm/MAlarmStatusData.h (.../MAlarmStatusData.h) (revision c241fc1d31be3e4958582dff94de8189f5bbba67) +++ sources/model/hd/alarm/MAlarmStatusData.h (.../MAlarmStatusData.h) (revision f1e100d1368bfd132d88e09680f833dc53b4d0b0) @@ -2,14 +2,14 @@ * * 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. + * 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 MAlarmStatusData.h - * \author (last) Behrouz NematiPour - * \date (last) 16-Oct-2020 - * \author (original) Behrouz NemaiPour - * \date (original) 02-Jul-2020 + * \file MAlarmStatusData.h + * \author (last) Behrouz NematiPour + * \date (last) 16-Oct-2020 + * \author (original) Behrouz NematiPour + * \date (original) 02-Dec-2020 * */ #pragma once @@ -18,6 +18,7 @@ #include // Project +#include "MAbstract.h" #include "types.h" #include "GuiGlobals.h" @@ -52,12 +53,25 @@ * | infoText | Alarm Status | * */ -class MAlarmStatus { +class MAlarmStatus : public MAbstract { // friends friend class ::tst_models; + QVariantList parameters() const override; + + struct { + Types::U32 mState ; + Types::U32 mTop ; + Types::U32 mEscalatesIn ; + Types::U32 mMuteTimeout ; + Types::Flags mFlags ; + } _data; + public: + // TODO : Has been negotiated with HD Software team + // and needs to be replaced by an equivalent enum + // shared in common repo enum Flag { eFlag_systemFault = 0 , eFlag_stop , @@ -73,7 +87,10 @@ eFlag_Bits_Length = 16, }; - QString stringPrefix = "Alarm Status"; + Type_Enum typeText () const override { return Type_Enum::eEvent ; } + Unit_Enum unitText () const override { return Unit_Enum::eHD ; } + QString infoText () const override { return QString("AlarmStatus") ; } + struct Data { quint32 mState = 0; ///< State - Alarm Priority quint32 mTop = 0; ///< Top - Top current alarm ID @@ -82,24 +99,14 @@ QBitArray mFlags ; ///< Flags - Flags }; -private: - struct { - Types::U32 mState ; - Types::U32 mTop ; - Types::U32 mEscalatesIn ; - Types::U32 mMuteTimeout ; - Types::Flags mFlags ; - } _data; - public: - MAlarmStatus(); + MAlarmStatus() { } - QString toString ( ) const ; - void toVariantList ( QVariantList &vData ) const ; - bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr); - static QString toText ( Gui::GuiAlarmID vAlarmID); + bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr) override; + Data data ( ) const ; - Data data() const ; + static QString toText (Gui::GuiAlarmID vAlarmID); + }; } Index: sources/model/hd/alarm/MAlarmTriggered.cpp =================================================================== diff -u -r6cad9b004e904200b71de7431c745795256080df -rf1e100d1368bfd132d88e09680f833dc53b4d0b0 --- sources/model/hd/alarm/MAlarmTriggered.cpp (.../MAlarmTriggered.cpp) (revision 6cad9b004e904200b71de7431c745795256080df) +++ sources/model/hd/alarm/MAlarmTriggered.cpp (.../MAlarmTriggered.cpp) (revision f1e100d1368bfd132d88e09680f833dc53b4d0b0) @@ -16,19 +16,16 @@ using namespace Model; -QString MAlarmTriggered::toString() const { - return QString(stringPrefix + ",%1") - .arg(_data.mAlarmID.value); +QVariantList MAlarmTriggered::parameters() const { + return { + _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 ; + return true ; else { if(vIndex) *vIndex = index; return false; } } Index: sources/model/hd/alarm/MAlarmTriggered.h =================================================================== diff -u -r6cad9b004e904200b71de7431c745795256080df -rf1e100d1368bfd132d88e09680f833dc53b4d0b0 --- sources/model/hd/alarm/MAlarmTriggered.h (.../MAlarmTriggered.h) (revision 6cad9b004e904200b71de7431c745795256080df) +++ sources/model/hd/alarm/MAlarmTriggered.h (.../MAlarmTriggered.h) (revision f1e100d1368bfd132d88e09680f833dc53b4d0b0) @@ -18,6 +18,7 @@ #include // Project +#include "MAbstract.h" #include "types.h" // forward declarations @@ -47,30 +48,32 @@ * | infoText | Alarm Triggered | * */ -class MAlarmTriggered { +class MAlarmTriggered : public MAbstract { // friends friend class ::tst_models; -public: - QString stringPrefix = "Alarm Triggered"; - struct Data { - quint32 mAlarmID = 0; ///< Alarm ID - }; + QVariantList parameters() const override; -private: struct { Types::U32 mAlarmID ; } _data; public: - MAlarmTriggered () { } - QString toString ( ) const ; - void toVariantList ( QVariantList &vData ) const ; - bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr); + Type_Enum typeText() const override { return Type_Enum::eEvent ; } + Unit_Enum unitText() const override { return Unit_Enum::eHD ; } + QString infoText() const override { return QString("AlarmTriggered") ; } - Data data() const; + struct Data { + quint32 mAlarmID = 0; ///< Alarm ID + }; + +public: + MAlarmTriggered () { } + + bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr) override; + Data data ( ) const ; }; }