Index: denali.pro =================================================================== diff -u -raa8f2c87c14c68d1fda6da2540d47144990a596c -r338575f7f1856c99fbc3c0cb59391fc23601c89b --- denali.pro (.../denali.pro) (revision aa8f2c87c14c68d1fda6da2540d47144990a596c) +++ denali.pro (.../denali.pro) (revision 338575f7f1856c99fbc3c0cb59391fc23601c89b) @@ -122,6 +122,7 @@ \ # ---------- Models ---------- sources/model/MModel.h \ sources/model/MAbstract.h \ + sources/model/MAbstractDynamic.h \ sources/device/DeviceModels.h \ \ # ---------- Models - POST sources/model/dg/data/post/MDGPostFinalResultData.h \ @@ -369,6 +370,7 @@ sources/bluetooth/BluetoothInterface.cpp \ \ # ---------- Models ---------- sources/model/MAbstract.cpp \ + sources/model/MAbstractDynamic.cpp \ sources/device/DeviceModels.cpp \ \ # ---------- Models - POST sources/model/dg/data/post/MDGPostFinalResultData.cpp \ Index: denali.pro.user =================================================================== diff -u -r67d05211b87d310ce213695c52b110fb28cfbd4b -r338575f7f1856c99fbc3c0cb59391fc23601c89b --- denali.pro.user (.../denali.pro.user) (revision 67d05211b87d310ce213695c52b110fb28cfbd4b) +++ denali.pro.user (.../denali.pro.user) (revision 338575f7f1856c99fbc3c0cb59391fc23601c89b) @@ -1,6 +1,6 @@ - + EnvironmentId Index: en_US.udic =================================================================== diff -u -raeb915075b9e13e5c1aaf2800ba6db03b6c24a0b -r338575f7f1856c99fbc3c0cb59391fc23601c89b --- en_US.udic (.../en_US.udic) (revision aeb915075b9e13e5c1aaf2800ba6db03b6c24a0b) +++ en_US.udic (.../en_US.udic) (revision 338575f7f1856c99fbc3c0cb59391fc23601c89b) @@ -177,3 +177,5 @@ Mesur ApplicationPOST MBluetooth +MAbstract +mID Index: sources/ApplicationController.cpp =================================================================== diff -u -rcbb246d6efa242f927f88ac5da518dedb2d63320 -r338575f7f1856c99fbc3c0cb59391fc23601c89b --- sources/ApplicationController.cpp (.../ApplicationController.cpp) (revision cbb246d6efa242f927f88ac5da518dedb2d63320) +++ sources/ApplicationController.cpp (.../ApplicationController.cpp) (revision 338575f7f1856c99fbc3c0cb59391fc23601c89b) @@ -535,7 +535,7 @@ * \param vAlarmID */ void ApplicationController::onPOSTFail(GuiAlarmID vAlarmID) { - emit didActionTransmit(GuiActionType::ID_AlarmTriggered, { vAlarmID ,0,0,0,0}); + emit didActionTransmit(GuiActionType::ID_AlarmTriggered, {vAlarmID ,0,0,0,0}); } /*! Index: sources/model/MAbstractDynamic.cpp =================================================================== diff -u --- sources/model/MAbstractDynamic.cpp (revision 0) +++ sources/model/MAbstractDynamic.cpp (revision 338575f7f1856c99fbc3c0cb59391fc23601c89b) @@ -0,0 +1,177 @@ +/*! + * + * 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 MAbstractDynamic.h + * \author (last) Behrouz NematiPour + * \author (original) Behrouz NematiPour + * \date (last) 07-Oct-2021 + * \date (original) 02-Jul-2020 + * + */ +#include "MAbstractDynamic.h" +// Qt + +// Project +#include "GuiGlobals.h" + +using namespace Model; + +QVariantList MAbstractDynamic::parameters() const { + Gui::GuiAlarmDataTypes fieldType; + fieldType = static_cast(_data.mFieldDescriptor1.value); + quint32 zero = 0; + QVariantList params = { _data.mID.value }; + switch (fieldType) { + case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_NONE : + params += {zero, zero, zero, zero}; + goto lOut; + case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_U32 : + params += {_data.mFieldDescriptor1.value, _data.mDataFieldU1.value}; + break; + case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_S32 : + params += {_data.mFieldDescriptor1.value, _data.mDataFieldS1.value}; + break; + case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_F32 : + params += {_data.mFieldDescriptor1.value, _data.mDataFieldF1.value}; + break; + case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_BOOL : + params += {_data.mFieldDescriptor1.value, _data.mDataFieldB1.value}; + break; + default: + params += {zero, zero, zero, zero}; + goto lOut; + } + + fieldType = static_cast(_data.mFieldDescriptor2.value); + switch (fieldType) { + case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_NONE : + params += {zero, zero}; + break; + case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_U32 : + params += {_data.mFieldDescriptor2.value, _data.mDataFieldU2.value}; + break; + case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_S32 : + params += {_data.mFieldDescriptor2.value, _data.mDataFieldS2.value}; + break; + case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_F32 : + params += {_data.mFieldDescriptor2.value, _data.mDataFieldF2.value}; + break; + case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_BOOL : + params += {_data.mFieldDescriptor2.value, _data.mDataFieldB2.value}; + break; + default: + params += {zero, zero}; + break; + } + +lOut: + return params; +} + +bool MAbstractDynamic::fromByteArray(const QByteArray &vByteArray, int *vIndex) { + int index = 0; // message data start position + _data.mFieldDescriptor1 .value = 0; + _data.mDataFieldU1 .value = 0; + _data.mDataFieldS1 .value = 0; + _data.mDataFieldF1 .value = 0; + _data.mDataFieldB1 .value = 0; + _data.mFieldDescriptor2 .value = 0; + _data.mDataFieldU2 .value = 0; + _data.mDataFieldS2 .value = 0; + _data.mDataFieldF2 .value = 0; + _data.mDataFieldB2 .value = 0; + + if (GetValue(vByteArray, index, _data.mID )) + if (GetValue(vByteArray, index, _data.mFieldDescriptor1 )) + { + Gui::GuiAlarmDataTypes field1Type = static_cast(_data.mFieldDescriptor1.value); + switch (field1Type) { + case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_NONE : + return true; + + case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_U32 : + if (GetValue(vByteArray, index, _data.mDataFieldU1)) + break; + else { if(vIndex) *vIndex = index; return false; } + + case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_S32 : + if (GetValue(vByteArray, index, _data.mDataFieldS1)) + break; + else { if(vIndex) *vIndex = index; return false; } + + case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_F32 : + if (GetValue(vByteArray, index, _data.mDataFieldF1)) + break; + else { if(vIndex) *vIndex = index; return false; } + + case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_BOOL : + if (GetValue(vByteArray, index, _data.mDataFieldB1)) + break; + else { if(vIndex) *vIndex = index; return false; } + + default: + return true; + } + + if (GetValue(vByteArray, index, _data.mFieldDescriptor2 )) + { + Gui::GuiAlarmDataTypes field2Type = static_cast(_data.mFieldDescriptor2.value); + switch (field2Type) { + case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_NONE : + return true; + + case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_U32 : + if (GetValue(vByteArray, index, _data.mDataFieldU2)) + break; + else { if(vIndex) *vIndex = index; return false; } + + case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_S32 : + if (GetValue(vByteArray, index, _data.mDataFieldS2)) + break; + else { if(vIndex) *vIndex = index; return false; } + + case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_F32 : + if (GetValue(vByteArray, index, _data.mDataFieldF2)) + break; + else { if(vIndex) *vIndex = index; return false; } + + case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_BOOL : + if (GetValue(vByteArray, index, _data.mDataFieldB2)) + break; + else { if(vIndex) *vIndex = index; return false; } + + default: + return true; + } + return true; + } + else { if(vIndex) *vIndex = index; return false; } + } + else { if(vIndex) *vIndex = index; return false; } + else { if(vIndex) *vIndex = index; return false; } +} + +/*! + * \brief MAbstractDynamic::data + * \details Provides model's Data from the received messages data values + * \return Data + */ +MAbstractDynamic::Data MAbstractDynamic::data() const { + Data data; + data.mID = _data.mID .value; + data.mFieldDescriptor1 = _data.mFieldDescriptor1 .value; + data.mDataFieldU1 = _data.mDataFieldU1 .value; + data.mDataFieldS1 = _data.mDataFieldS1 .value; + data.mDataFieldF1 = _data.mDataFieldF1 .value; + data.mDataFieldB1 = _data.mDataFieldB1 .value ? true : false; + data.mFieldDescriptor2 = _data.mFieldDescriptor2 .value; + data.mDataFieldU2 = _data.mDataFieldU2 .value; + data.mDataFieldS2 = _data.mDataFieldS2 .value; + data.mDataFieldF2 = _data.mDataFieldF2 .value; + data.mDataFieldB2 = _data.mDataFieldB2 .value ? true : false; + return data; +} Index: sources/model/MAbstractDynamic.h =================================================================== diff -u --- sources/model/MAbstractDynamic.h (revision 0) +++ sources/model/MAbstractDynamic.h (revision 338575f7f1856c99fbc3c0cb59391fc23601c89b) @@ -0,0 +1,102 @@ +/*! + * + * 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 MAbstractDynamic.h + * \author (last) Behrouz NematiPour + * \author (original) Behrouz NematiPour + * \date (last) 07-Oct-2021 + * \date (original) 02-Jul-2020 + * + */ +#pragma once + +// Qt +#include + +// Project +#include "MAbstract.h" +#include "types.h" + +// forward declarations +class tst_models; + +namespace Model { + +/*! + * \brief The MAbstractDynamic class + * \details The Abstract Dynamic model base class + * + * | MSG | CAN ID | Type | Ack | Src | Dst | Description | + * |:----:|:------:|:------:|:---:|:---:|:---:|:-----------:| + * | | | | | | | | + * + * | Payload || + * | || + * | #1:(U32) | \ref Data::mAlarmID | + * | #2:(U32) | \ref Data::mFieldDescriptor1 | + * | #3:(Any) | \ref Data::mDataField1 | + * | #4:(U32) | \ref Data::mFieldDescriptor2 | + * | #5:(Any) | \ref Data::mDataField2 | + * + * + * \sa Data + * + *

Logging info

+ * | || + * | || + * | typeText || + * | unitText || + * | infoText || + * + */ +class MAbstractDynamic : public MAbstract { + + // friends + friend class ::tst_models; + +protected: + QVariantList parameters() const override; + + struct { + Types::U32 mID ; + Types::U32 mFieldDescriptor1 ; + Types::U32 mDataFieldU1 ; + Types::S32 mDataFieldS1 ; + Types::F32 mDataFieldF1 ; + Types::U32 mDataFieldB1 ; + Types::U32 mFieldDescriptor2 ; + Types::U32 mDataFieldU2 ; + Types::S32 mDataFieldS2 ; + Types::F32 mDataFieldF2 ; + Types::U32 mDataFieldB2 ; + } _data; + + +public: + + struct Data { + quint32 mID = 0; + quint32 mFieldDescriptor1 ; + quint32 mDataFieldU1 ; + qint32 mDataFieldS1 ; + float mDataFieldF1 ; + bool mDataFieldB1 ; + quint32 mFieldDescriptor2 ; + quint32 mDataFieldU2 ; + qint32 mDataFieldS2 ; + float mDataFieldF2 ; + bool mDataFieldB2 ; + }; + +public: + MAbstractDynamic () { } + + bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr) override; + Data data ( ) const ; +}; + +} Index: sources/model/hd/alarm/MAlarmTriggered.cpp =================================================================== diff -u -r2dd767833cf0cf706c457951c2d78e7e20aff768 -r338575f7f1856c99fbc3c0cb59391fc23601c89b --- sources/model/hd/alarm/MAlarmTriggered.cpp (.../MAlarmTriggered.cpp) (revision 2dd767833cf0cf706c457951c2d78e7e20aff768) +++ sources/model/hd/alarm/MAlarmTriggered.cpp (.../MAlarmTriggered.cpp) (revision 338575f7f1856c99fbc3c0cb59391fc23601c89b) @@ -21,162 +21,8 @@ using namespace Model; -QVariantList MAlarmTriggered::parameters() const { - Gui::GuiAlarmDataTypes fieldType; - fieldType = static_cast(_data.mFieldDescriptor1.value); - quint32 zero = 0; - QVariantList params = { _data.mAlarmID.value }; - switch (fieldType) { - case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_NONE : - params += {zero, zero, zero, zero}; - goto lOut; - case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_U32 : - params += {_data.mFieldDescriptor1.value, _data.mDataFieldU1.value}; - break; - case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_S32 : - params += {_data.mFieldDescriptor1.value, _data.mDataFieldS1.value}; - break; - case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_F32 : - params += {_data.mFieldDescriptor1.value, _data.mDataFieldF1.value}; - break; - case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_BOOL : - params += {_data.mFieldDescriptor1.value, _data.mDataFieldB1.value}; - break; - default: - params += {zero, zero, zero, zero}; - goto lOut; - } +/// The Alarm Trigger Request - fieldType = static_cast(_data.mFieldDescriptor2.value); - switch (fieldType) { - case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_NONE : - params += {zero, zero}; - break; - case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_U32 : - params += {_data.mFieldDescriptor2.value, _data.mDataFieldU2.value}; - break; - case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_S32 : - params += {_data.mFieldDescriptor2.value, _data.mDataFieldS2.value}; - break; - case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_F32 : - params += {_data.mFieldDescriptor2.value, _data.mDataFieldF2.value}; - break; - case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_BOOL : - params += {_data.mFieldDescriptor2.value, _data.mDataFieldB2.value}; - break; - default: - params += {zero, zero}; - break; - } - -lOut: - return params; -} - -bool MAlarmTriggered::fromByteArray(const QByteArray &vByteArray, int *vIndex) { - int index = 0; // message data start position - _data.mFieldDescriptor1 .value = 0; - _data.mDataFieldU1 .value = 0; - _data.mDataFieldS1 .value = 0; - _data.mDataFieldF1 .value = 0; - _data.mDataFieldB1 .value = 0; - _data.mFieldDescriptor2 .value = 0; - _data.mDataFieldU2 .value = 0; - _data.mDataFieldS2 .value = 0; - _data.mDataFieldF2 .value = 0; - _data.mDataFieldB2 .value = 0; - - if (GetValue(vByteArray, index, _data.mAlarmID )) - if (GetValue(vByteArray, index, _data.mFieldDescriptor1 )) - { - Gui::GuiAlarmDataTypes field1Type = static_cast(_data.mFieldDescriptor1.value); - switch (field1Type) { - case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_NONE : - return true; - - case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_U32 : - if (GetValue(vByteArray, index, _data.mDataFieldU1)) - break; - else { if(vIndex) *vIndex = index; return false; } - - case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_S32 : - if (GetValue(vByteArray, index, _data.mDataFieldS1)) - break; - else { if(vIndex) *vIndex = index; return false; } - - case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_F32 : - if (GetValue(vByteArray, index, _data.mDataFieldF1)) - break; - else { if(vIndex) *vIndex = index; return false; } - - case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_BOOL : - if (GetValue(vByteArray, index, _data.mDataFieldB1)) - break; - else { if(vIndex) *vIndex = index; return false; } - - default: - return true; - } - - if (GetValue(vByteArray, index, _data.mFieldDescriptor2 )) - { - Gui::GuiAlarmDataTypes field2Type = static_cast(_data.mFieldDescriptor2.value); - switch (field2Type) { - case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_NONE : - return true; - - case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_U32 : - if (GetValue(vByteArray, index, _data.mDataFieldU2)) - break; - else { if(vIndex) *vIndex = index; return false; } - - case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_S32 : - if (GetValue(vByteArray, index, _data.mDataFieldS2)) - break; - else { if(vIndex) *vIndex = index; return false; } - - case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_F32 : - if (GetValue(vByteArray, index, _data.mDataFieldF2)) - break; - else { if(vIndex) *vIndex = index; return false; } - - case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_BOOL : - if (GetValue(vByteArray, index, _data.mDataFieldB2)) - break; - else { if(vIndex) *vIndex = index; return false; } - - default: - return true; - } - return true; - } - else { if(vIndex) *vIndex = index; return false; } - } - else { if(vIndex) *vIndex = index; return false; } - else { if(vIndex) *vIndex = index; return false; } -} - -/*! - * \brief MAlarmTriggered::data - * \details Provides model's Data from the received messages data values - * \return Data - */ -MAlarmTriggered::Data MAlarmTriggered::data() const { - Data data; - data.mAlarmID = _data.mAlarmID .value; - data.mFieldDescriptor1 = _data.mFieldDescriptor1 .value; - data.mDataFieldU1 = _data.mDataFieldU1 .value; - data.mDataFieldS1 = _data.mDataFieldS1 .value; - data.mDataFieldF1 = _data.mDataFieldF1 .value; - data.mDataFieldB1 = _data.mDataFieldB1 .value ? true : false; - data.mFieldDescriptor2 = _data.mFieldDescriptor2 .value; - data.mDataFieldU2 = _data.mDataFieldU2 .value; - data.mDataFieldS2 = _data.mDataFieldS2 .value; - data.mDataFieldF2 = _data.mDataFieldF2 .value; - data.mDataFieldB2 = _data.mDataFieldB2 .value ? true : false; - return data; -} - QString MAlarmTriggeredReq::toString() { return toString({}); } Index: sources/model/hd/alarm/MAlarmTriggered.h =================================================================== diff -u -r29424716b9b1aafc77443cc2607572ddbd9da372 -r338575f7f1856c99fbc3c0cb59391fc23601c89b --- sources/model/hd/alarm/MAlarmTriggered.h (.../MAlarmTriggered.h) (revision 29424716b9b1aafc77443cc2607572ddbd9da372) +++ sources/model/hd/alarm/MAlarmTriggered.h (.../MAlarmTriggered.h) (revision 338575f7f1856c99fbc3c0cb59391fc23601c89b) @@ -18,7 +18,7 @@ #include // Project -#include "MAbstract.h" +#include "MAbstractDynamic.h" #include "MAdjustRequestsBase.h" #include "types.h" @@ -37,7 +37,7 @@ * * | Payload || * | || - * | #1:(U32) | \ref Data::mAlarmID | + * | #1:(U32) | \ref Data::mAlarmID(mID) | * | #2:(U32) | \ref Data::mFieldDescriptor1 | * | #3:(Any) | \ref Data::mDataField1 | * | #4:(U32) | \ref Data::mFieldDescriptor2 | @@ -54,53 +54,18 @@ * | infoText | AlarmTriggered | * */ -class MAlarmTriggered : public MAbstract { +class MAlarmTriggered : public MAbstractDynamic { // friends friend class ::tst_models; - QVariantList parameters() const override; - - struct { - Types::U32 mAlarmID ; - Types::U32 mFieldDescriptor1 ; - Types::U32 mDataFieldU1 ; - Types::S32 mDataFieldS1 ; - Types::F32 mDataFieldF1 ; - Types::U32 mDataFieldB1 ; - Types::U32 mFieldDescriptor2 ; - Types::U32 mDataFieldU2 ; - Types::S32 mDataFieldS2 ; - Types::F32 mDataFieldF2 ; - Types::U32 mDataFieldB2 ; - } _data; - - public: - 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") ; } - struct Data { - quint32 mAlarmID = 0; ///< Alarm ID - quint32 mFieldDescriptor1 ; - quint32 mDataFieldU1 ; - qint32 mDataFieldS1 ; - float mDataFieldF1 ; - bool mDataFieldB1 ; - quint32 mFieldDescriptor2 ; - quint32 mDataFieldU2 ; - qint32 mDataFieldS2 ; - float mDataFieldF2 ; - bool mDataFieldB2 ; - }; - public: MAlarmTriggered () { } - - bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr) override; - Data data ( ) const ; };