Index: denali.pro =================================================================== diff -u -r61f16c988a159401c92730b4cbfca5085c77222f -r97d593e2e7adb36f2f9f97f9bb9958dcef740bc1 --- denali.pro (.../denali.pro) (revision 61f16c988a159401c92730b4cbfca5085c77222f) +++ denali.pro (.../denali.pro) (revision 97d593e2e7adb36f2f9f97f9bb9958dcef740bc1) @@ -98,8 +98,9 @@ sources/Threads.h \ sources/MainTimer.h \ sources/AlarmGenerator.h \ - sources/device/DeviceGlobals.h \ sources/ApplicationPost.h \ + sources/device/DeviceGlobals.h \ + sources/device/DeviceError.h \ \ # Controllers sources/ApplicationController.h \ sources/device/DeviceController.h \ @@ -324,6 +325,7 @@ sources/MainTimer.cpp \ sources/AlarmGenerator.cpp \ sources/ApplicationPost.cpp \ + sources/device/DeviceError.cpp \ \ # Controllers sources/ApplicationController.cpp \ sources/device/DeviceController.cpp \ Index: denali.pro.user =================================================================== diff -u -r61f16c988a159401c92730b4cbfca5085c77222f -r97d593e2e7adb36f2f9f97f9bb9958dcef740bc1 --- denali.pro.user (.../denali.pro.user) (revision 61f16c988a159401c92730b4cbfca5085c77222f) +++ denali.pro.user (.../denali.pro.user) (revision 97d593e2e7adb36f2f9f97f9bb9958dcef740bc1) @@ -1,6 +1,6 @@ - + EnvironmentId Index: denali.qrc =================================================================== diff -u -r6c5b5292ae3b3ebf979175dcb1256c88b1baf90c -r97d593e2e7adb36f2f9f97f9bb9958dcef740bc1 --- denali.qrc (.../denali.qrc) (revision 6c5b5292ae3b3ebf979175dcb1256c88b1baf90c) +++ denali.qrc (.../denali.qrc) (revision 97d593e2e7adb36f2f9f97f9bb9958dcef740bc1) @@ -13,6 +13,7 @@ sources/gui/qml/pages/settings/SettingsDateTime.qml sources/gui/qml/pages/settings/SettingsWiFi.qml sources/gui/qml/pages/settings/SettingsDG.qml + sources/gui/qml/pages/settings/SettingsVolumeBrightness.qml sources/gui/qml/dialogs/PowerOff.qml Index: sources/ApplicationController.cpp =================================================================== diff -u -r61f16c988a159401c92730b4cbfca5085c77222f -r97d593e2e7adb36f2f9f97f9bb9958dcef740bc1 --- sources/ApplicationController.cpp (.../ApplicationController.cpp) (revision 61f16c988a159401c92730b4cbfca5085c77222f) +++ sources/ApplicationController.cpp (.../ApplicationController.cpp) (revision 97d593e2e7adb36f2f9f97f9bb9958dcef740bc1) @@ -133,12 +133,8 @@ this , SLOT(onSettingsUpdate())); - // Gui -> App - connect(&_GuiController , SIGNAL(didAttributeRequest(const DeviceBrightnessRequestData &)), - this , SLOT( onAttributeRequest(const DeviceBrightnessRequestData &))); - // App <- Dev - connect(&_DeviceController , SIGNAL(didAttributeResponse(const DeviceBrightnessResponseData &)), - this , SLOT( onAttributeResponse(const DeviceBrightnessResponseData &))); + // Device Signal/Slots + DEVICE_APP_INIT_CONNECTIONS_LIST // ---- Signal/Slots ADJUST_TRANSMT_MODEL_BRIDGE_CONNECTIONS(_GuiController ) Index: sources/ApplicationController.h =================================================================== diff -u -r61f16c988a159401c92730b4cbfca5085c77222f -r97d593e2e7adb36f2f9f97f9bb9958dcef740bc1 --- sources/ApplicationController.h (.../ApplicationController.h) (revision 61f16c988a159401c92730b4cbfca5085c77222f) +++ sources/ApplicationController.h (.../ApplicationController.h) (revision 97d593e2e7adb36f2f9f97f9bb9958dcef740bc1) @@ -21,8 +21,9 @@ #include "main.h" // Doxygen : don't remove #include "MModel.h" #include "GuiGlobals.h" -#include "ApplicationPost.h" #include "MessageGlobals.h" +#include "DeviceGlobals.h" +#include "ApplicationPost.h" // define #define _ApplicationController ApplicationController::I() @@ -124,17 +125,9 @@ */ void didSettingsInit (QPrivateSignal); -signals : void didAttributeRequest (const DeviceBrightnessRequestData &); -private slots : void onAttributeRequest (const DeviceBrightnessRequestData &vData) { - qDebug() << "_ApplicationController" << __FUNCTION__; - emit didAttributeRequest(vData); // Gui -> App - } -signals : void didAttributeResponse(const DeviceBrightnessResponseData &); -private slots : void onAttributeResponse(const DeviceBrightnessResponseData &vData) { - qDebug() << "_ApplicationController" << __FUNCTION__; - emit didAttributeResponse(vData); // Gui <- App - } + // Device Signal/Slots + DEVICE_APP_BRIDGE_DEFINITION_LIST // ---- Signal/Slots ADJUST_TRANSMT_MODEL_BRIDGE_DEFINITIONS Index: sources/canbus/FrameInterface.cpp =================================================================== diff -u -r6816b783f50e08267aa016d64350bc020080d901 -r97d593e2e7adb36f2f9f97f9bb9958dcef740bc1 --- sources/canbus/FrameInterface.cpp (.../FrameInterface.cpp) (revision 6816b783f50e08267aa016d64350bc020080d901) +++ sources/canbus/FrameInterface.cpp (.../FrameInterface.cpp) (revision 97d593e2e7adb36f2f9f97f9bb9958dcef740bc1) @@ -329,7 +329,12 @@ { // coco begin validated: has been manually tested by sending over 4000 frames and not received by any other node. if (_txFrameList.count() >= _txFrameList_Max) { - LOG_DEBUG(QString("Transmit buffer overflow of %1").arg(_txFrameList_Max)); + static quint32 i = 0; + if ( i % 60 == 0 ) { // log only for the first time and each minute. + LOG_DEBUG(QString("Transmit buffer overflow of %1").arg(_txFrameList_Max)); + } + if ( i < UINT32_MAX - 1 ) i++ ; + else i = 0; return; // coco end } Index: sources/canbus/MessageBuilder.h =================================================================== diff -u -r64d87d540594252e8039ab2595016d98f1e3cc28 -r97d593e2e7adb36f2f9f97f9bb9958dcef740bc1 --- sources/canbus/MessageBuilder.h (.../MessageBuilder.h) (revision 64d87d540594252e8039ab2595016d98f1e3cc28) +++ sources/canbus/MessageBuilder.h (.../MessageBuilder.h) (revision 97d593e2e7adb36f2f9f97f9bb9958dcef740bc1) @@ -16,7 +16,6 @@ // Qt #include -//#include // Project #include "GuiGlobals.h" Index: sources/device/DeviceController.cpp =================================================================== diff -u -r61f16c988a159401c92730b4cbfca5085c77222f -r97d593e2e7adb36f2f9f97f9bb9958dcef740bc1 --- sources/device/DeviceController.cpp (.../DeviceController.cpp) (revision 61f16c988a159401c92730b4cbfca5085c77222f) +++ sources/device/DeviceController.cpp (.../DeviceController.cpp) (revision 97d593e2e7adb36f2f9f97f9bb9958dcef740bc1) @@ -28,8 +28,12 @@ #include "Logger.h" #include "ApplicationController.h" #include "FileHandler.h" +#include "DeviceModels.h" +#include "DeviceError.h" // namespace +using namespace Model; +using namespace Device; using namespace Storage; /*! @@ -39,7 +43,7 @@ * Qt handles the children destruction by their parent objects life-cycle. */ DeviceController::DeviceController(QObject *parent) : QObject(parent) { - _processBrightness .setParent(this); + DEVICE_DEV_PARENT_LIST } /*! @@ -107,13 +111,8 @@ connect(&_Logger , SIGNAL(didRemoveLogs(bool)), this , SLOT( onRemoveLogs(bool))); + DEVICE_DEV_INIT_CONNECTIONS_LIST - - // App -> Dev - connect(&_ApplicationController , SIGNAL(didAttributeRequest(const DeviceBrightnessRequestData &)), - this , SLOT( onAttributeRequest(const DeviceBrightnessRequestData &))); - connect(&_processBrightness , SIGNAL( finished(int)), - this, SLOT(onProcessBrightnessFinished(int))); } /*! @@ -282,7 +281,7 @@ /// DEBUG: qDebug() << Storage::SDCard_Base_Path_Name << mCIsReady << mOTotal << mCTotal << (mOTotal == mCTotal) << mOAvailable << mCAvailable << (mOAvailable == mCAvailable) << mPercent << mCIsReadOnly; if (mOTotal == mCTotal && - mOAvailable == mCAvailable) { + mOAvailable == mCAvailable) { return; } @@ -410,18 +409,27 @@ // coco end /*! - * \brief DeviceController::checkScript - * \details Prepends the script folder path to the script name and checks if the script exists and is executable. - * \param vScript : The script name with full path which will be set in this parameter passed argument. - * \param vShellScript : The shell script name - * \return true if succeeds and false otherwise */ -bool DeviceController::checkScript(QString &vScript, const QString &vShellScript) + * \brief DeviceController::checkError + * \details check if has error, then sets the base model accept to false and the reason to the error. + * in that case logs the error message and emit the didAttributeResponse to notify the GUI. + * \param vError - the error code, this can be the Gui enum or system number + * \param vExtraLogInfo - any extra information to be logged. Not display to user. + * \return + */ +template +bool DeviceController::checkError(DeviceError::Scripts_Error_Enum vError, TModel &vModel, QString vExtraLogInfo) { - vScript = _scriptsFolder + vShellScript; - QFileInfo info(vScript); - if ( ! info.exists () ) { LOG_DEBUG(QString("script %1 does not exist." ).arg(vScript)); return false; } - if ( ! info.isExecutable() ) { LOG_DEBUG(QString("script %1 is not executable." ).arg(vScript)); return false; } - return true; + if ( vError ) { + QString src = vError > DeviceError::eScripts_Error_Start ? MAbstract::unitText(MAbstract::Unit_Enum::eUI) : MAbstract::unitText(MAbstract::Unit_Enum::eDV) + ","; + + vModel._data.mAccepted = false ; + vModel._data.mReason = vError ; + vModel._data.mMessage = DeviceError::scriptErrorText(vError) + QString(" [%1]").arg(vError); + LOG_EVENT(src + vModel._data.mMessage + " " + vExtraLogInfo); + emit didAttributeResponse(vModel._data); + return true; + } + return false; } /*! @@ -431,45 +439,64 @@ */ void DeviceController::onAttributeRequest(const DeviceBrightnessRequestData &vData) { - qDebug() << "_DeviceController" << __FUNCTION__; - // check that script exists. - QString script; if ( ! checkScript(script, Brightness_Set ) ) return; - // extract the required data - quint8 mBrightnessPercent = vData.mBrightnessPercent; - // check if the process is not running - if ( _processBrightness.state() != QProcess::NotRunning ) return; - // check the data is valid - if ( _brightness_min > mBrightnessPercent || mBrightnessPercent > _brightness_max ) { - LOG_DEBUG(QString("Out of range brightness [%1]").arg(mBrightnessPercent)); + + Model::MDeviceBrightnessRequest mRequest (vData); + Model::MDeviceBrightnessResponse mResponse ; + mResponse._data.mBrightnessPercent = _brightness_old * 10; // set to old value in case of error + + // ----- extract the required data + _brightness_val = vData.mBrightnessPercent / 10; // convert the GUI value(percent) to device value + LOG_EVENT(mRequest.toString()); + + // ----- check that script exists. + QString script; + if ( checkError( DeviceError::checkScript(script, Brightness_Set ), mResponse, script) ) return; + + // ----- check if the process is not running + if ( _processBrightness.state() != QProcess::NotRunning ) { + checkError(DeviceError::eScripts_Error_IsRunning, mResponse); + return; } + + // ----- check the data is valid + if ( _brightness_min > _brightness_val || _brightness_val > _brightness_max ) { + checkError(DeviceError::eScripts_Error_OutOfRange, mResponse); + return; + } + // ----- check the value is in the list of correct resolution + // create the list of correct values QList _allowableValues; - for ( quint8 i = _brightness_min; i <= _brightness_max; i += _brightness_res ) - _allowableValues += i; - if ( ! _allowableValues.contains(mBrightnessPercent) ) { - LOG_DEBUG(QString("Incorrect brightness value [%1]").arg(mBrightnessPercent)); + for ( quint8 i = _brightness_min; i <= _brightness_max; i += _brightness_res ) _allowableValues += i; + // check the value is in the list + if ( ! _allowableValues.contains(_brightness_val) ) { + checkError(DeviceError::eScripts_Error_Incorrect, mResponse); return; } - // keep the requested data - _brightness_val = mBrightnessPercent / 10; // convert the percent to device value - // run the process + + // ----- run the process _processBrightness.start(script, QStringList() << QString::number(_brightness_val)); } /*! * \brief DeviceController::onProcessBrightnessFinished * \details Called when the process to set the brightness has finished * \param vExitCode (int) the exit code + * \note exit code -> 0 : set Accept [MBase] -> Log -> emit + * !0 : set Attrib [MBrgh] -> Log -> emit + * 1 - get an error when in onAttributeRequest : scriptErrorText([Gui Enum ]) + * 2 - get an error when in onProcessBrightnessExitCode : scriptErrorText([vExitCode]) + * 3 - get no error when in onProcessBrightnessExitCode : MDeviceResponse.toString() + * - in case 3 the specific model _data has to be filled prior to the toString to have it in the log. */ -void DeviceController::onProcessBrightnessFinished(int vExitCode) +void DeviceController::onProcessBrightnessExitCode(int vExitCode) { - DeviceBrightnessResponseData data; - if ( vExitCode != 0 ) { - LOG_DEBUG(QString("Failed Brightness [%1]").arg(vExitCode)); - data.mAccepted = false ; - data.mReason = vExitCode ; - return; + Model::MDeviceBrightnessResponse mResponse; + mResponse._data.mBrightnessPercent = _brightness_old * 10; // set to old value in case of error + if ( ! checkError(static_cast(vExitCode), mResponse, Brightness_Set) ) { // has no error + mResponse._data.mBrightnessPercent = _brightness_val * 10; + mResponse._data.mMessage = mResponse.toString(); + LOG_EVENT(mResponse._data.mMessage); + emit didAttributeResponse(mResponse._data); } - data.mBrightnessPercent = _brightness_val * 10; // convert the device value to percent - emit didAttributeResponse(data); } Index: sources/device/DeviceController.h =================================================================== diff -u -r61f16c988a159401c92730b4cbfca5085c77222f -r97d593e2e7adb36f2f9f97f9bb9958dcef740bc1 --- sources/device/DeviceController.h (.../DeviceController.h) (revision 61f16c988a159401c92730b4cbfca5085c77222f) +++ sources/device/DeviceController.h (.../DeviceController.h) (revision 97d593e2e7adb36f2f9f97f9bb9958dcef740bc1) @@ -21,15 +21,17 @@ // Project #include "main.h" // Doxygen : don't remove #include "Threads.h" +#include "DeviceGlobals.h" #include "DeviceModels.h" +#include "DeviceError.h" // Define -#define _DeviceController Storage::DeviceController::I() +#define _DeviceController Device::DeviceController::I() // forward declarations class tst_initializations; -namespace Storage { +namespace Device { /*! * \brief The DeviceController class @@ -69,18 +71,14 @@ bool _pauseSpaceCheck = false; - const QString _scriptsFolder = Storage::Scripts_Path_Name; + DEVICE_DEV_DEFINITION_LIST - const quint8 _brightness_min = 20 ; - const quint8 _brightness_max = 100 ; - const quint8 _brightness_res = 20 ; - quint8 _brightness_val = 100 ; - QProcess _processBrightness ; + const quint8 _brightness_min = 2; + const quint8 _brightness_max = 10; + const quint8 _brightness_res = 2; + quint8 _brightness_old = _brightness_min; + quint8 _brightness_val = 10; -public slots : void onAttributeRequest (const DeviceBrightnessRequestData &vData); -signals : void didAttributeResponse (const DeviceBrightnessResponseData &); -private slots : void onProcessBrightnessFinished(int vExitCode); - public slots: bool init(); bool init(QThread &vThread); @@ -103,7 +101,10 @@ bool driveSpaceCheck(const QString &vPath, qint64 &vTotalBytes, qint64 &vAvailableBytes, bool *vIsReadOnly = nullptr); - bool checkScript(QString &vScript, const QString &vShellScript); + template + bool checkError(DeviceError::Scripts_Error_Enum vError, TModel &vModel,QString vExtraLogInfo = ""); + DeviceError::Scripts_Error_Enum checkScript(QString &vScript, const QString &vShellScript); + signals: /*! * \brief didUSBDriveMount Index: sources/device/DeviceError.cpp =================================================================== diff -u --- sources/device/DeviceError.cpp (revision 0) +++ sources/device/DeviceError.cpp (revision 97d593e2e7adb36f2f9f97f9bb9958dcef740bc1) @@ -0,0 +1,52 @@ +/*! + * + * 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 DeviceController.cpp + * \author (last) Behrouz NematiPour + * \date (last) 29-May-2021 + * \author (original) Behrouz NematiPour + * \date (original) 17-Jul-2020 + * + */ +#include "DeviceError.h" + +// Linux + +// Qt +#include + +// Project +#include "DeviceGlobals.h" + +// namespace +using namespace Device; + +const char *DeviceError::Scripts_Error_Text[] = { + QT_TR_NOOP("The device script file is not found."), + QT_TR_NOOP("The device script file is not executable."), + QT_TR_NOOP("The request is already in progress."), + QT_TR_NOOP("The requested value is out of range."), + QT_TR_NOOP("The requested value is incorrect."), +}; + +/*! + * \brief DeviceController::checkScript + * \details Prepends the script folder path to the script name and checks if the script exists and is executable. + * \param vScript : The script name with full path which will be set in this parameter passed argument. + * \param vShellScript : The shell script name + * \return true if succeeds and false otherwise +*/ +DeviceError::Scripts_Error_Enum DeviceError::checkScript(QString &vScript, const QString &vShellScript) +{ + DeviceError::Scripts_Error_Enum err = DeviceError::eScripts_OK; + vScript = _scriptsFolder + vShellScript; + QFileInfo info(vScript); + if ( ! info.exists () ) { err = DeviceError::eScripts_Error_NotFound ; goto lOut; } + if ( ! info.isExecutable() ) { err = DeviceError::eScripts_Error_NotExecutable ; goto lOut; } +lOut: + return err; +} Index: sources/device/DeviceError.h =================================================================== diff -u --- sources/device/DeviceError.h (revision 0) +++ sources/device/DeviceError.h (revision 97d593e2e7adb36f2f9f97f9bb9958dcef740bc1) @@ -0,0 +1,70 @@ +/*! + * + * 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 DeviceError.h + * \author (last) Behrouz NematiPour + * \date (last) 03-Jun-2021 + * \author (original) Behrouz NematiPour + * \date (original) 03-Jun-2020 + * + */ +#pragma once + +// Qt +#include + +// Project + +// Define + +// forward declarations + +namespace Device { + +/*! + * \brief The DeviceError class + * \details This class contains the device script errors and its message mapping + * + */ +class DeviceError +{ + Q_GADGET + + static const char *Scripts_Error_Text[]; + +public: + enum Scripts_Error_Enum { + eScripts_OK = 0 , + + eScripts_Error_Start = 1000 , // the script itself in system starts from 0 so give it enough gap + + eScripts_Error_NotFound , + eScripts_Error_NotExecutable, + eScripts_Error_IsRunning , + eScripts_Error_OutOfRange , + eScripts_Error_Incorrect , + + eScripts_Error_End + + }; + Q_ENUM(Scripts_Error_Enum) + + static QString scriptErrorText( DeviceError::Scripts_Error_Enum vError ) { + QString message; + if (eScripts_Error_Start < vError && vError < eScripts_Error_End) { + message += QObject::tr(Scripts_Error_Text[vError - eScripts_Error_Start - 1]); + } + else { + message += QObject::tr("Device error"); + } + return message; + } + + static Scripts_Error_Enum checkScript(QString &vScript, const QString &vShellScript); + +}; +} Index: sources/device/DeviceGlobals.h =================================================================== diff -u -r61f16c988a159401c92730b4cbfca5085c77222f -r97d593e2e7adb36f2f9f97f9bb9958dcef740bc1 --- sources/device/DeviceGlobals.h (.../DeviceGlobals.h) (revision 61f16c988a159401c92730b4cbfca5085c77222f) +++ sources/device/DeviceGlobals.h (.../DeviceGlobals.h) (revision 97d593e2e7adb36f2f9f97f9bb9958dcef740bc1) @@ -15,44 +15,152 @@ #pragma once // Qt -#include -#define ATTRIBUTE( vTYPE, vATTRIBUTE, vDEFAULT ) \ +// Project +#include "StorageGlobals.h" + +namespace Device { + +const QString _scriptsFolder = Storage::Scripts_Path_Name; + +} + +/* DEVICE ATTRIBUTE PROPERTY DEFINITION */ +// The FLC in vATTRIBUTEFLC means First Letter Capital +#define ATTRIBUTE( vTYPE, vATTRIBUTE, vDEFAULT, vATTRIBUTEFLC) \ private: \ /*! the private property member variable */ \ vTYPE _##vATTRIBUTE = vDEFAULT; \ /*! the property definition */ \ Q_PROPERTY( vTYPE vATTRIBUTE \ - READ vATTRIBUTE \ - WRITE vATTRIBUTE \ + READ vATTRIBUTE /*! it shall only be called in bg by qml */ \ + WRITE qml##vATTRIBUTE \ NOTIFY vATTRIBUTE##Changed) \ - /*! the READ/getter method */ \ + /*! the READ/getter method */ \ vTYPE vATTRIBUTE ( ) { \ return _##vATTRIBUTE; \ } \ - /*! the WRITE method */ \ - void vATTRIBUTE (const vTYPE & v##vATTRIBUTE ) { \ - vATTRIBUTE ( v##vATTRIBUTE, true ); \ + /*! the WRITE method and it shall only be called in bg by qml */ \ + void qml##vATTRIBUTE (const vTYPE & v##vATTRIBUTE ) { \ + /*! This write method is not changing the actual property, + And instead will send only a request to change to device, + and if only device successfully changes, it will notify the view */ \ + vATTRIBUTE##Request ( v##vATTRIBUTE ); \ } \ - /*! the UPDATE method */ \ - void _##vATTRIBUTE##_ (const vTYPE & v##vATTRIBUTE ) { \ - vATTRIBUTE ( v##vATTRIBUTE,false ); \ - } \ - /*! the setter method */ \ - void vATTRIBUTE (const vTYPE & v##vATTRIBUTE, \ - bool vIsRequest ) { \ + /*! the response write method and can be used in c++ response update */ \ + void vATTRIBUTE (const vTYPE & v##vATTRIBUTE ) { \ if ( _##vATTRIBUTE != v##vATTRIBUTE ) { \ _##vATTRIBUTE = v##vATTRIBUTE ; \ - emit vATTRIBUTE##Changed ( _##vATTRIBUTE ); \ + emit vATTRIBUTE##Changed ( v##vATTRIBUTE ); \ } \ - if ( vIsRequest ) \ - vATTRIBUTE##Request ( v##vATTRIBUTE ); \ } \ Q_SIGNALS: /*! the signals for property bindings(Changed) and communications */ \ void vATTRIBUTE##Changed (const vTYPE & v##vATTRIBUTE ); \ private : /*! the function is called once the property is set in qml as request */ \ void vATTRIBUTE##Request (const vTYPE & v##vATTRIBUTE ); \ + Q_SIGNALS : \ + void didAttributeRequest (const Device##vATTRIBUTEFLC##RequestData &vData ); \ + private Q_SLOTS : \ + void onAttributeResponse(const Device##vATTRIBUTEFLC##ResponseData &vData ); \ + private : - //private slots: - // void on##vATTRIBUTE##Response(const vTYPE & v##vATTRIBUTE ); +/* ---------------------------- DEVICE DEFINITIONS */ +/* ---------------------------- DEV */ +#define DEVICE_DEV_PARENT( vATTRIBUTEFLC ) \ + _process##vATTRIBUTEFLC .setParent(this); +#define DEVICE_DEV_DEFINITION( vATTRIBUTEFLC ) \ + QProcess _process##vATTRIBUTEFLC; \ + Q_SIGNALS : void didAttributeResponse (const Device##vATTRIBUTEFLC##ResponseData &); \ + private Q_SLOTS : void onAttributeRequest (const Device##vATTRIBUTEFLC##RequestData &vData); \ + private Q_SLOTS : void onProcess##vATTRIBUTEFLC##ExitCode(int vExitCode); \ + private : + +#define DEVICE_DEV_INIT_CONNECTIONS( vATTRIBUTEFLC ) \ + /* App -> Dev */ \ + connect(&_ApplicationController , SIGNAL(didAttributeRequest(const Device##vATTRIBUTEFLC##RequestData &)), \ + this , SLOT( onAttributeRequest(const Device##vATTRIBUTEFLC##RequestData &))); \ + connect(&_process##vATTRIBUTEFLC, SIGNAL( finished(int)), \ + this, SLOT(onProcess##vATTRIBUTEFLC##ExitCode(int))); + +/* ---------------------------- APP */ +#define DEVICE_APP_BRIDGE_DEFINITION( vATTRIBUTEFLC ) \ + Q_SIGNALS : void didAttributeRequest (const Device##vATTRIBUTEFLC##RequestData &); \ + private Q_SLOTS : void onAttributeRequest (const Device##vATTRIBUTEFLC##RequestData &vData) { \ + /* this is a bridge only if it is required later can be removed and implemented */ \ + emit didAttributeRequest(vData); /* Gui -> App */ \ + } \ + Q_SIGNALS : void didAttributeResponse(const Device##vATTRIBUTEFLC##ResponseData &); \ + private Q_SLOTS : void onAttributeResponse(const Device##vATTRIBUTEFLC##ResponseData &vData) { \ + /* this is a bridge only if it is required later can be removed and implemented */ \ + emit didAttributeResponse(vData); /* Gui <- App */ \ + } \ + private : + +#define DEVICE_APP_INIT_CONNECTIONS( vATTRIBUTEFLC ) \ + /* Gui -> App */ \ + connect(&_GuiController , SIGNAL(didAttributeRequest (const Device##vATTRIBUTEFLC##RequestData &)), \ + this , SLOT( onAttributeRequest (const Device##vATTRIBUTEFLC##RequestData &))); \ + /* App <- Dev */ \ + connect(&_DeviceController , SIGNAL(didAttributeResponse(const Device##vATTRIBUTEFLC##ResponseData &)), \ + this , SLOT( onAttributeResponse(const Device##vATTRIBUTEFLC##ResponseData &))); + +/* ---------------------------- GUI */ +#define DEVICE_GUI_BRIDGE_DEFINITION( vATTRIBUTEFLC ) \ + Q_SIGNALS : void didAttributeRequest (const Device##vATTRIBUTEFLC##RequestData &); \ + public Q_SLOTS : void doAttributeRequest (const Device##vATTRIBUTEFLC##RequestData &vData) { \ + /* this is a bridge only if it is required later can be removed and implemented */ \ + emit didAttributeRequest(vData); /* Gui -> App */ \ + } \ + Q_SIGNALS : void didAttributeResponse(const Device##vATTRIBUTEFLC##ResponseData &); \ + public Q_SLOTS : void onAttributeResponse(const Device##vATTRIBUTEFLC##ResponseData &vData) { \ + /* this is a bridge only if it is required later can be removed and implemented */ \ + emit didAttributeResponse(vData); /* Gui <- App */ \ + } \ + private : + +#define DEVICE_GUI_INIT_CONNECTIONS( vATTRIBUTEFLC ) \ + /* Gui <- App */ \ + connect(&_ApplicationController, SIGNAL(didAttributeResponse(const Device##vATTRIBUTEFLC##ResponseData &)), \ + this , SLOT( onAttributeResponse(const Device##vATTRIBUTEFLC##ResponseData &))); + +/* ---------------------------- VIEW */ +#define DEVICE_VIEW_INIT_CONNECTIONS( vATTRIBUTEFLC ) \ + /* to convert the value to the model and emit the signal to go to the controller (Qml -> View) */ \ + connect(this , SIGNAL(didAttributeRequest (const Device##vATTRIBUTEFLC##RequestData &)), \ + &_GuiController , SLOT( doAttributeRequest (const Device##vATTRIBUTEFLC##RequestData &))); \ + /* View <- Gui */ \ + connect(&_GuiController , SIGNAL(didAttributeResponse(const Device##vATTRIBUTEFLC##ResponseData &)), \ + this , SLOT( onAttributeResponse(const Device##vATTRIBUTEFLC##ResponseData &))); + +/* ---------------------------- DEVICE DEFINITIONS LISTS */ +/* Please list all the device attributes here for each list */ +/* ---------------------------- DEV */ +#define DEVICE_DEV_PARENT_LIST \ + DEVICE_DEV_PARENT ( Brightness ) \ + +#define DEVICE_DEV_INIT_CONNECTIONS_LIST \ + DEVICE_DEV_INIT_CONNECTIONS ( Brightness ) \ + +#define DEVICE_DEV_DEFINITION_LIST \ + DEVICE_DEV_DEFINITION ( Brightness ) \ + +/* ---------------------------- APP */ +#define DEVICE_APP_INIT_CONNECTIONS_LIST \ + DEVICE_APP_INIT_CONNECTIONS ( Brightness ) \ + +#define DEVICE_APP_BRIDGE_DEFINITION_LIST \ + DEVICE_APP_BRIDGE_DEFINITION( Brightness ) \ + +/* ---------------------------- GUI */ +#define DEVICE_GUI_BRIDGE_DEFINITION_LIST \ + DEVICE_GUI_BRIDGE_DEFINITION( Brightness ) \ + +#define DEVICE_GUI_INIT_CONNECTIONS_LIST \ + DEVICE_GUI_INIT_CONNECTIONS ( Brightness ) \ + +/* ---------------------------- VIEW */ +#define DEVICE_VIEW_INIT_CONNECTIONS_LIST \ + DEVICE_VIEW_INIT_CONNECTIONS( Brightness ) \ + + Index: sources/device/DeviceModels.h =================================================================== diff -u -r61f16c988a159401c92730b4cbfca5085c77222f -r97d593e2e7adb36f2f9f97f9bb9958dcef740bc1 --- sources/device/DeviceModels.h (.../DeviceModels.h) (revision 61f16c988a159401c92730b4cbfca5085c77222f) +++ sources/device/DeviceModels.h (.../DeviceModels.h) (revision 97d593e2e7adb36f2f9f97f9bb9958dcef740bc1) @@ -42,9 +42,12 @@ * \param vParameters - list of parameter values of the model as a comma separated string. * \return QString */ - static QString toString (const QString &vStringPrefix, const QVariant &vParameters) { - QString senderID = "UI,"; - return QString(senderID + vStringPrefix + "," + vParameters.toStringList().join(',')); + static QString toString (const QString &vStringPrefix, const QVariantList &vParameters) { + QString senderID = MAbstract::unitText(MAbstract::Unit_Enum::eUI) + ","; + QString mString = QString(senderID + vStringPrefix); + for (const auto ¶m : vParameters) + mString += QString(",%1").arg(param.toString()); + return mString; } }; @@ -57,17 +60,16 @@ // friends friend class ::tst_models; - QVariantList parameters() const override; - public: - Type_Enum typeText () const override { return Type_Enum::eEvent ; } Unit_Enum unitText () const override { return Unit_Enum::eDV ; } QString infoText () const override { return QString("DeviceBase") ; } struct Data { + // by default it has to be accepted with no rejection reason bool mAccepted = true; /*!< Accepted value of type quint32 extracted out */ quint32 mReason = 0 ; /*!< Reason value of type quint32 extracted out */ + QString mMessage = "" ; /*!< Message value of type QString of the reason */ }; MDeviceResponseBase () { } @@ -78,28 +80,33 @@ // ------------------------------------------------------------------ -class MDeviceBrightnessResponse : MDeviceResponseBase { -public: - struct Data : MDeviceResponseBase::Data { - quint8 mBrightnessPercent = 0; - } _data; - - QString infoText () const override { return QString("DeviceBrightness") ; } - Data data () const ; -}; - class MDeviceBrightnessRequest : public MDeviceRequestBase { public: + struct Data { quint8 mBrightnessPercent = 100; } _data; + explicit MDeviceBrightnessRequest(const Data &vData) : _data(vData) { } + QString toString() { return MDeviceRequestBase::toString("DeviceBrightness", { _data.mBrightnessPercent }); } }; +class MDeviceBrightnessResponse : public MDeviceResponseBase { +public: + struct Data : MDeviceResponseBase::Data { + quint8 mBrightnessPercent = 0; + } _data; + + QVariantList parameters () const override { return { _data.mBrightnessPercent }; } + QString infoText () const override { return QString("DeviceBrightness") ; } + Data data () const; +}; + } -typedef Model::MDeviceBrightnessRequest ::Data DeviceBrightnessRequestData; -typedef Model::MDeviceBrightnessResponse::Data DeviceBrightnessResponseData; +typedef Model::MDeviceResponseBase ::Data DeviceResponseBaseData ; +typedef Model::MDeviceBrightnessRequest ::Data DeviceBrightnessRequestData ; +typedef Model::MDeviceBrightnessResponse::Data DeviceBrightnessResponseData ; Index: sources/device/DeviceView.cpp =================================================================== diff -u -r61f16c988a159401c92730b4cbfca5085c77222f -r97d593e2e7adb36f2f9f97f9bb9958dcef740bc1 --- sources/device/DeviceView.cpp (.../DeviceView.cpp) (revision 61f16c988a159401c92730b4cbfca5085c77222f) +++ sources/device/DeviceView.cpp (.../DeviceView.cpp) (revision 97d593e2e7adb36f2f9f97f9bb9958dcef740bc1) @@ -21,31 +21,16 @@ #include "GuiController.h" #include "GuiGlobals.h" - -// // defines -// #define CONNECT_GUI( vATTRIBUTE ) -// connect(_GuiController , SIGNAL( didAttributeRespond(Device##vATTRIBUTE##RespondData)), -// this , SLOT( onAttributeRespond(Device##vATTRIBUTE##RespondData))); -// connect(this , SIGNAL( didAttributeRequest(Device##vATTRIBUTE##RequestData)), -// _GuiController , SLOT( doAttributeRespond(Device##vATTRIBUTE##RequestData))); -// - VIEW_DEF_CLASS(VDevice) void VDevice::initConnections() { - // to convert the value to the model and emit the signal to go to the controller (Qml -> View) - connect(this , SIGNAL(didAttributeRequest(const DeviceBrightnessRequestData &)), - &_GuiController , SLOT( doAttributeRequest(const DeviceBrightnessRequestData &))); - - // View <- Gui - connect(&_GuiController , SIGNAL(didAttributeResponse(const DeviceBrightnessResponseData &)), - this , SLOT( onAttributeResponse(const DeviceBrightnessResponseData &))); + DEVICE_VIEW_INIT_CONNECTIONS_LIST } // developer implementation section void VDevice::brightnessRequest(const quint8 &vValue) { - qDebug() << "HERE Request" << vValue; + // DEBUG : qDebug() << "HERE Request" << vValue; DeviceBrightnessRequestData data; data.mBrightnessPercent = vValue; emit didAttributeRequest(data); @@ -65,10 +50,16 @@ * */ void VDevice::onAttributeResponse(const DeviceBrightnessResponseData &vData) { - qDebug() << "HERE Response" << vData.mBrightnessPercent; + // DEBUG : qDebug() << "HERE Response" << vData.mBrightnessPercent; if ( vData.mAccepted ) { - _brightness_(vData.mBrightnessPercent); + brightness(vData.mBrightnessPercent); + status(""); } + else { + // this has to be called to let Gui to set to old value that device controller provided. + emit brightnessChanged(vData.mBrightnessPercent); + status(vData.mMessage); + } accepted(vData.mAccepted); reason (vData.mReason ); Index: sources/device/DeviceView.h =================================================================== diff -u -r61f16c988a159401c92730b4cbfca5085c77222f -r97d593e2e7adb36f2f9f97f9bb9958dcef740bc1 --- sources/device/DeviceView.h (.../DeviceView.h) (revision 61f16c988a159401c92730b4cbfca5085c77222f) +++ sources/device/DeviceView.h (.../DeviceView.h) (revision 97d593e2e7adb36f2f9f97f9bb9958dcef740bc1) @@ -24,9 +24,7 @@ #include "DeviceModels.h" // define -#define _VDevice View::VDevice::I() - // namespace namespace View { @@ -38,16 +36,14 @@ class VDevice : public QObject { Q_OBJECT - PROPERTY( bool , accepted , 0) - TRIGGER ( quint32 , reason , 0) - TRIGGER ( bool , response , true) + TRIGGER ( bool , response , true) - ATTRIBUTE ( quint8 , brightness , 0 ) + PROPERTY ( bool , accepted , 0) + TRIGGER ( quint32 , reason , 0) + PROPERTY ( QString , status , "") - VIEW_DEC_CLASS(VDevice) + ATTRIBUTE ( quint8 , brightness , 0, Brightness ) -signals: void didAttributeRequest (const DeviceBrightnessRequestData &vData); -private slots: void onAttributeResponse(const DeviceBrightnessResponseData &vData); - + VIEW_DEC_CLASS(VDevice) }; } Index: sources/gui/GuiController.cpp =================================================================== diff -u -r61f16c988a159401c92730b4cbfca5085c77222f -r97d593e2e7adb36f2f9f97f9bb9958dcef740bc1 --- sources/gui/GuiController.cpp (.../GuiController.cpp) (revision 61f16c988a159401c92730b4cbfca5085c77222f) +++ sources/gui/GuiController.cpp (.../GuiController.cpp) (revision 97d593e2e7adb36f2f9f97f9bb9958dcef740bc1) @@ -95,9 +95,8 @@ connect(&_ApplicationController, SIGNAL(didFailedTransmit(Sequence)), this , SLOT( onFailedTransmit(Sequence))); - // Gui <- App - connect(&_ApplicationController, SIGNAL(didAttributeResponse(const DeviceBrightnessResponseData &)), - this , SLOT( onAttributeResponse(const DeviceBrightnessResponseData &))); + // Device Signal/Slots + DEVICE_GUI_INIT_CONNECTIONS_LIST // ---- Signal/Slots ACTION_RECEIVE_MODEL_BRIDGE_CONNECTIONS(_ApplicationController) Index: sources/gui/GuiController.h =================================================================== diff -u -r61f16c988a159401c92730b4cbfca5085c77222f -r97d593e2e7adb36f2f9f97f9bb9958dcef740bc1 --- sources/gui/GuiController.h (.../GuiController.h) (revision 61f16c988a159401c92730b4cbfca5085c77222f) +++ sources/gui/GuiController.h (.../GuiController.h) (revision 97d593e2e7adb36f2f9f97f9bb9958dcef740bc1) @@ -19,9 +19,10 @@ // Project #include "main.h" // Doxygen : don't remove -#include "GuiGlobals.h" #include "MModel.h" +#include "GuiGlobals.h" #include "MessageGlobals.h" +#include "DeviceGlobals.h" // define #define _GuiController GuiController::I() @@ -100,17 +101,9 @@ void didExportLog(); void didExport (); -signals : void didAttributeRequest (const DeviceBrightnessRequestData &); -public slots : void doAttributeRequest (const DeviceBrightnessRequestData &vData) { - qDebug() << "_GuiController" << __FUNCTION__; - emit didAttributeRequest(vData); // Gui -> App - } -signals : void didAttributeResponse(const DeviceBrightnessResponseData &); -private slots : void onAttributeResponse(const DeviceBrightnessResponseData &vData) { - qDebug() << "_GuiController" << __FUNCTION__; - emit didAttributeResponse(vData); // Gui <- App - } + // Device controller signal slots connection + DEVICE_GUI_BRIDGE_DEFINITION_LIST // ---- Signal/Slots ADJUST_TRANSMT_MODEL_BRIDGE_DEFINITIONS_PUBLIC Index: sources/gui/qml/pages/settings/SettingsStack.qml =================================================================== diff -u -r61f16c988a159401c92730b4cbfca5085c77222f -r97d593e2e7adb36f2f9f97f9bb9958dcef740bc1 --- sources/gui/qml/pages/settings/SettingsStack.qml (.../SettingsStack.qml) (revision 61f16c988a159401c92730b4cbfca5085c77222f) +++ sources/gui/qml/pages/settings/SettingsStack.qml (.../SettingsStack.qml) (revision 97d593e2e7adb36f2f9f97f9bb9958dcef740bc1) @@ -90,89 +90,31 @@ serviceMode , // FactoryReset ] - SettingsBase { id: _settingsInformation + SettingsBase { id: _settingsInformation itemIndex : SettingsStack.Information } - SettingsBase { id: _settingsVolumeBrightness + SettingsVolumeBrightness { id: _settingsVolumeBrightness itemIndex : SettingsStack.VolumeBrightness - Column { - spacing: 50 - anchors.centerIn: parent - Row { - anchors.horizontalCenter: parent.horizontalCenter - Label { - anchors.verticalCenter: parent.verticalCenter - text: qsTr("Brightness") - } - Slider { id : _brightness - anchors.verticalCenter: parent.verticalCenter - width : 500 - step : 20 // no zero - minimum : 20 // 1 - maximum : 100 // 5 - height : 5 - ticks : true - onReleased : vDevice.brightness = _brightness.value - Connections { target: vDevice - // in case the value is rejecte it will be set to the previous value - // also the init value shall be set when navigate to the screen - onBrightnessChanged: _brightness.value = vDevice.brightness - } - } - } - Row { - anchors.horizontalCenter: parent.horizontalCenter - Label { - anchors.verticalCenter: parent.verticalCenter - text: qsTr("Alarm Volume") - } - Slider { id : _alarmVolume - anchors.verticalCenter: parent.verticalCenter - width : 500 - step : 20 // no zero - minimum : 20 // 1 - maximum : 100 // 5 - height : 5 - ticks : true - } - } - Row { - anchors.horizontalCenter: parent.horizontalCenter - Label { - anchors.verticalCenter: parent.verticalCenter - text: qsTr("System Volume") - } - Slider { id : _systemVolume - anchors.verticalCenter: parent.verticalCenter - width : 500 - step : 20 // no zero - minimum : 20 // 1 - maximum : 100 // 5 - height : 5 - ticks : true - } - } - } } - SettingsDateTime { id: _settingsDateTime + SettingsDateTime { id: _settingsDateTime itemIndex : SettingsStack.SetDateTime } - SettingsWiFi { id: _settingsWiFi + SettingsWiFi { id: _settingsWiFi itemIndex : SettingsStack.WiFi } - SettingsBase { id: _settingsBluetooth + SettingsBase { id: _settingsBluetooth itemIndex : SettingsStack.Bluetooth } - SettingsDG { id: _settingsDGSettings + SettingsDG { id: _settingsDGSettings itemIndex : SettingsStack.DGSettings } - UserConfirmation { id: _servicePassword + UserConfirmation { id: _servicePassword itemIndex : SettingsStack.Services title : qsTr("Please Enter The Service Password") isPassword: true Index: sources/gui/qml/pages/settings/SettingsVolumeBrightness.qml =================================================================== diff -u --- sources/gui/qml/pages/settings/SettingsVolumeBrightness.qml (revision 0) +++ sources/gui/qml/pages/settings/SettingsVolumeBrightness.qml (revision 97d593e2e7adb36f2f9f97f9bb9958dcef740bc1) @@ -0,0 +1,120 @@ +/*! + * + * 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 SettingsDateTimeSet.qml + * \author (last) Behrouz NematiPour + * \date (last) 03-Jun-2021 + * \author (original) Behrouz NematiPour + * \date (original) 03-Jun-2021 + * + */ + +// Qt +import QtQuick 2.12 + +// Project +import Gui.Actions 0.1 + +// Qml imports +import "qrc:/globals" +import "qrc:/components" + +/*! + * \brief SettingsVolumeBrightness is used to adjust the + * volume (alarm/system), brightness on the device + */ +SettingsBase { id: _root + readonly property int spacing: 50 + + notificationText: vDevice.status + + Column { + spacing : _root.spacing + anchors.centerIn: parent + Row { + spacing : _root.spacing + anchors.horizontalCenter: parent.horizontalCenter + Label { + anchors.verticalCenter: parent.verticalCenter + width : labelWidth + text : qsTr("Brightness") + } + Slider { id : _brightness + anchors.verticalCenter: parent.verticalCenter + width : 500 + step : 20 // no zero + minimum : 20 // 1 + maximum : 100 // 5 + height : 5 + ticks : true + unit : qsTr("%") + onReleased : vDevice.brightness = _brightness.value + Connections { target: vDevice + // in case the value is rejecte it will be set to the previous value + // also the init value shall be set when navigate to the screen + onBrightnessChanged: { + console.log(_brightness.value, vDevice.brightness) + _brightness.value = vDevice.brightness + } + } + } + Label { + anchors.verticalCenter: parent.verticalCenter + width : 100 + text : vDevice.brightness + _brightness.unit + } + } + Row { + spacing : _root.spacing + anchors.horizontalCenter: parent.horizontalCenter + Label { + anchors.verticalCenter: parent.verticalCenter + width : labelWidth + text: qsTr("Alarm Volume") + } + Slider { id : _alarmVolume + anchors.verticalCenter: parent.verticalCenter + width : 500 + step : 20 // no zero + minimum : 20 // 1 + maximum : 100 // 5 + height : 5 + ticks : true + unit : qsTr("%") + } + Label { + anchors.verticalCenter: parent.verticalCenter + width : 100 + text : "0" + _alarmVolume.unit + } + } + Row { + spacing : _root.spacing + anchors.horizontalCenter: parent.horizontalCenter + Label { + anchors.verticalCenter: parent.verticalCenter + width : labelWidth + text : qsTr("System Volume") + } + Slider { id : _systemVolume + anchors.verticalCenter: parent.verticalCenter + width : 500 + step : 20 // no zero + minimum : 20 // 1 + maximum : 100 // 5 + height : 5 + ticks : true + unit : qsTr("%") + } + Label { + anchors.verticalCenter: parent.verticalCenter + width : 100 + text : "0" + _systemVolume.unit + } + } + } +} Index: sources/model/MAbstract.cpp =================================================================== diff -u -r7077e38c74db9cccb5496ffefcf8936c0916de76 -r97d593e2e7adb36f2f9f97f9bb9958dcef740bc1 --- sources/model/MAbstract.cpp (.../MAbstract.cpp) (revision 7077e38c74db9cccb5496ffefcf8936c0916de76) +++ sources/model/MAbstract.cpp (.../MAbstract.cpp) (revision 97d593e2e7adb36f2f9f97f9bb9958dcef740bc1) @@ -5,11 +5,11 @@ * 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 MAbstract.cpp - * \author (last) Behrouz NematiPour - * \date (last) 16-Oct-2020 - * \author (original) Behrouz NemaiPour - * \date (original) 04-Jul-2020 + * \file MAbstract.cpp + * \author (last) Behrouz NematiPour + * \date (last) 16-Oct-2020 + * \author (original) Behrouz NematiPour + * \date (original) 04-Jul-2020 * */ @@ -21,6 +21,9 @@ // #define ROUND_FLOATS +const QMap MAbstract::_typeText = MAbstract::_typeText_make(); +const QMap MAbstract::_unitText = MAbstract::_unitText_make(); + /*! * \brief MAbstract::toVariantList * \details Current values of the model data will be listed in a QVariantList vData. Index: sources/model/MAbstract.h =================================================================== diff -u -r61f16c988a159401c92730b4cbfca5085c77222f -r97d593e2e7adb36f2f9f97f9bb9958dcef740bc1 --- sources/model/MAbstract.h (.../MAbstract.h) (revision 61f16c988a159401c92730b4cbfca5085c77222f) +++ sources/model/MAbstract.h (.../MAbstract.h) (revision 97d593e2e7adb36f2f9f97f9bb9958dcef740bc1) @@ -73,19 +73,37 @@ }; private: - const QMap _typeText { - {Type_Enum::eDatum, "D"}, - {Type_Enum::eEvent, "E"} - }; + typedef QMap TypeMap; + static const TypeMap _typeText; + static const TypeMap _typeText_make() { + static const TypeMap map { + {MAbstract::Type_Enum::eDatum, "D"}, + {MAbstract::Type_Enum::eEvent, "E"} + }; + return map; + } - const QMap _unitText { - {Unit_Enum::eUI, "UI"}, - {Unit_Enum::eHD, "HD"}, - {Unit_Enum::eDG, "DG"}, - {Unit_Enum::eDV, "DV"} - }; + typedef QMap UnitMap; + static const UnitMap _unitText; + static const UnitMap _unitText_make() { + static const UnitMap map { + {MAbstract::Unit_Enum::eUI, "UI"}, + {MAbstract::Unit_Enum::eHD, "HD"}, + {MAbstract::Unit_Enum::eDG, "DG"}, + {MAbstract::Unit_Enum::eDV, "DV"} + }; + return map; + } public: + static const QString unitText(const Unit_Enum &vEnum) { + return _unitText[vEnum]; + } + static const QString typeText(const Type_Enum &vEnum) { + return _typeText[vEnum]; + } + + // the model needs to implement these since each model have different meaning of the bytes from different source(unit). /*! Index: sources/model/hd/alarm/MAlarmMapping.cpp =================================================================== diff -u -r4de0319b91678211dd1a78f4e95ac43fcdfb4b75 -r97d593e2e7adb36f2f9f97f9bb9958dcef740bc1 --- sources/model/hd/alarm/MAlarmMapping.cpp (.../MAlarmMapping.cpp) (revision 4de0319b91678211dd1a78f4e95ac43fcdfb4b75) +++ sources/model/hd/alarm/MAlarmMapping.cpp (.../MAlarmMapping.cpp) (revision 97d593e2e7adb36f2f9f97f9bb9958dcef740bc1) @@ -7,7 +7,7 @@ * * \file MAlarmMapping.cpp * \author (last) Behrouz NematiPour - * \date (last) 27-May-2021 + * \date (last) 06-Jun-2021 * \author (original) Behrouz NematiPour * \date (original) 03-May-2021 * @@ -27,233 +27,234 @@ QString result; if ( vAlarmID == 0 ) return result; switch (vAlarmID) { - case GuiAlarmID::ALARM_ID_NO_ALARM : { result = QObject::tr("Indication for when no alarms is a possible situation." ); break; } - case GuiAlarmID::ALARM_ID_STUCK_BUTTON_TEST_FAILED : { result = QObject::tr("Stuck button POST failure.\nStop or Off button detected to be pressed for at least 1 second during test shortly after power up." ); break; } - case GuiAlarmID::ALARM_ID_HD_FPGA_POST_TEST_FAILED : { result = QObject::tr("HD FPGA POST failure." ); break; } - case GuiAlarmID::ALARM_ID_DG_FPGA_POST_TEST_FAILED : { result = QObject::tr("DG 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.\nUI failed to communicate within a reasonable time after power up." ); break; } - case GuiAlarmID::ALARM_ID_RTC_CONFIG_ERROR : { result = QObject::tr("Real-time clock configuration error." ); break; } - case GuiAlarmID::ALARM_ID_HD_ACCELEROMETER_SELF_TEST_FAILURE : { result = QObject::tr("HD accelerometer failed POST." ); break; } - case GuiAlarmID::ALARM_ID_DG_ACCELEROMETER_SELF_TEST_FAILURE : { result = QObject::tr("DG accelerometer failed POST." ); break; } - case GuiAlarmID::ALARM_ID_RTC_OR_TIMER_ACCURACY_FAILURE : { result = QObject::tr("RTC or MCU timer inaccurate." ); break; } - case GuiAlarmID::ALARM_ID_DG_HEATERS_SELF_TEST_FAILURE : { result = QObject::tr("DG heaters failed POST." ); break; } - case GuiAlarmID::ALARM_ID_HD_INTEGRITY_POST_TEST_FAILED : { result = QObject::tr("HD firmware image integrity POST test failed." ); break; } - case GuiAlarmID::ALARM_ID_DG_INTEGRITY_POST_TEST_FAILED : { result = QObject::tr("DG firmware image integrity POST test failed." ); break; } - case GuiAlarmID::ALARM_ID_HD_BLOOD_FLOW_INVALID_CALIBRATION : { result = QObject::tr("HD blood flow invalid calibration." ); break; } - case GuiAlarmID::ALARM_ID_HD_DIALYSATE_FLOW_INVALID_CALIBRATION : { result = QObject::tr("HD dialysate flow invalid calibration." ); break; } - case GuiAlarmID::ALARM_ID_HD_SOFTWARE_FAULT : { result = QObject::tr("HD Software fault.\nSoftware found itself in an unexpected state." ); break; } - case GuiAlarmID::ALARM_ID_BLOOD_PUMP_MC_CURRENT_CHECK : { result = QObject::tr("Blood pump failed motor controller current check.\nToo high when pump should be off or out of range when pump should be running." ); 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 direction check.\nMeasured vs commanded." ); break; } - case GuiAlarmID::ALARM_ID_BLOOD_PUMP_ROTOR_SPEED_CHECK : { result = QObject::tr("Blood pump failed rotor speed check.\nMismatch with rotor and motor speeds." ); break; } - case GuiAlarmID::ALARM_ID_DIAL_IN_PUMP_MC_CURRENT_CHECK : { result = QObject::tr("Dialysis inlet pump failed motor controller current check.\nToo high when pump should be off or out of range when pump should be running." ); 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 direction check.\nMeasured vs commanded." ); break; } - case GuiAlarmID::ALARM_ID_DIAL_IN_PUMP_ROTOR_SPEED_CHECK : { result = QObject::tr("Dialysis inlet pump failed rotor speed check.\nMismatch with rotor and motor speeds." ); break; } - case GuiAlarmID::ALARM_ID_DIAL_OUT_PUMP_MC_CURRENT_CHECK : { result = QObject::tr("Dialysis outlet pump failed motor controller current check.\nToo high when pump should be off or out of range when pump should be running." ); 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 direction check.\nMeasured vs commanded." ); break; } - case GuiAlarmID::ALARM_ID_DIAL_OUT_PUMP_ROTOR_SPEED_CHECK : { result = QObject::tr("Dialysis outlet pump failed rotor speed check.\nMismatch with rotor and motor speeds." ); break; } - case GuiAlarmID::ALARM_ID_WATCHDOG_EXPIRED : { result = QObject::tr("Watchdog expired error.\nWatchdog was not \"pet\" within the appropriate time." ); 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_CAN_MESSAGE_NOT_ACKED : { result = QObject::tr("System message that required acknowledgment was not acknowledged." ); 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_HD_FPGA_COMM_TIMEOUT : { result = QObject::tr("HD FPGA communication down for too long." ); break; } - case GuiAlarmID::ALARM_ID_VALVE_CONTROL_FAILURE : { result = QObject::tr("FPGA not accepting commanded valve states." ); break; } - case GuiAlarmID::ALARM_ID_BLOOD_PUMP_MOTOR_SPEED_CHECK : { result = QObject::tr("Blood pump failed motor speed check.\nMeasured vs commanded." ); break; } - case GuiAlarmID::ALARM_ID_DIAL_IN_PUMP_MOTOR_SPEED_CHECK : { result = QObject::tr("Dialysate inlet pump failed motor speed check.\nMeasured vs commanded." ); break; } - case GuiAlarmID::ALARM_ID_DIAL_OUT_PUMP_MOTOR_SPEED_CHECK : { result = QObject::tr("Dialysate outlet pump failed motor speed check.\nMeasured vs commanded." ); break; } - case GuiAlarmID::ALARM_ID_HD_CRITICAL_DATA_ERROR : { result = QObject::tr("HD critical data integrity check failed." ); break; } - case GuiAlarmID::ALARM_ID_DG_CRITICAL_DATA_ERROR : { result = QObject::tr("DG critical data integrity check failed." ); break; } - case GuiAlarmID::ALARM_ID_HD_ACCELEROMETER_FAILURE : { result = QObject::tr("HD accelerometer error (no readings or FPGA reports error)." ); break; } - case GuiAlarmID::ALARM_ID_DG_ACCELEROMETER_FAILURE : { result = QObject::tr("DG accelerometer error (no readings or FPGA reports error)." ); break; } - case GuiAlarmID::ALARM_ID_HD_VALVE_HOMING_FAILED : { result = QObject::tr("HD valve homing failed." ); break; } - case GuiAlarmID::ALARM_ID_HD_VALVE_TRANSITION_TIMEOUT : { result = QObject::tr("HD valve transition time out." ); break; } - case GuiAlarmID::ALARM_ID_HD_VALVE_NOT_FUNCTIONAL : { result = QObject::tr("HD valve not functional." ); break; } - case GuiAlarmID::ALARM_ID_HD_VALVE_CURRENT_OUT_OF_RANGE : { result = QObject::tr("HD valve current out of range." ); break; } - case GuiAlarmID::ALARM_ID_HD_VALVE_POSITION_OUT_OF_RANGE : { result = QObject::tr("HD valve position out of target." ); break; } - case GuiAlarmID::ALARM_ID_ARTERIAL_PRESSURE_SENSOR_FAULT : { result = QObject::tr("FPGA reports failure reading arterial pressure sensor." ); break; } - case GuiAlarmID::ALARM_ID_VENOUS_PRESSURE_SENSOR_FAULT : { result = QObject::tr("FPGA reports failure reading venous pressure sensor." ); break; } - case GuiAlarmID::ALARM_ID_DG_COMMAND_INVALID_PARAMETER_FAULT : { result = QObject::tr("HD requests DG command with invalid parameter fault." ); break; } - case GuiAlarmID::ALARM_ID_NVDATAMGMT_GROUP_RECORD_CRC_INVALID : { result = QObject::tr("DG/HD NV data management overall group record CRC invalid." ); break; } - case GuiAlarmID::ALARM_ID_HD_BP_OCCLUSION_SELF_TEST_FAILURE : { result = QObject::tr("HD blood pump occlusion self-test failure alarm." ); break; } - case GuiAlarmID::ALARM_ID_HD_DIP_OCCLUSION_SELF_TEST_FAILURE : { result = QObject::tr("HD dialysate inlet pump occlusion self-test failure alarm." ); break; } - case GuiAlarmID::ALARM_ID_HD_DOP_OCCLUSION_SELF_TEST_FAILURE : { result = QObject::tr("HD dialysate outlet pump occlusion self-test failure alarm." ); break; } - case GuiAlarmID::ALARM_ID_HD_ARTERIAL_PRESSURE_SELF_TEST_FAILURE : { result = QObject::tr("HD arterial pressure self-test failure alarm." ); break; } - case GuiAlarmID::ALARM_ID_HD_VENOUS_PRESSURE_SELF_TEST_FAILURE : { result = QObject::tr("HD venous pressure self-test failure alarm." ); break; } - case GuiAlarmID::ALARM_ID_HD_BLOOD_FLOW_STATUS_SELF_TEST_FAILURE : { result = QObject::tr("HD blood flow meter status check self-test failure alarm." ); break; } - case GuiAlarmID::ALARM_ID_HD_DIALYSATE_FLOW_STATUS_SELF_TEST_FAILURE : { result = QObject::tr("HD dialysate flow meter status check self-test failure alarm." ); break; } - case GuiAlarmID::ALARM_ID_HD_BLOOD_LEAK_SELF_TEST_FAILURE : { result = QObject::tr("HD blood leak detector self-test failure alarm." ); break; } - case GuiAlarmID::ALARM_ID_HD_VOLTAGE_OUT_OF_RANGE : { result = QObject::tr("HD monitored voltage is out of range." ); break; } - case GuiAlarmID::ALARM_ID_DG_VOLTAGE_OUT_OF_RANGE : { result = QObject::tr("DG monitored voltage is out of range." ); break; } - case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_ENCODER_DIRECTION_ERROR : { result = QObject::tr("HD syringe pump direction (from encoder) error." ); break; } - case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_CONTROLLER_DIRECTION_ERROR : { result = QObject::tr("HD syringe pump direction (from controller) error." ); break; } - case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_FAULT : { result = QObject::tr("HD syringe pump fault reported by FPGA." ); break; } - case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_OVER_TRAVEL_ERROR : { result = QObject::tr("HD syringe pump over travel error." ); break; } - case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_DAC_WRITE_ERROR : { result = QObject::tr("HD syringe pump DAC write failure." ); break; } - case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_RUNNING_WHILE_BP_OFF_ERROR : { result = QObject::tr("HD syringe pump is running while the BP is off." ); break; } - case GuiAlarmID::ALARM_ID_DG_FPGA_COMM_TIMEOUT : { result = QObject::tr("DG FPGA communication down for too long." ); break; } - case GuiAlarmID::ALARM_ID_DG_LOAD_CELL_ADC_ERROR : { result = QObject::tr("DG load cell ADC error." ); break; } - case GuiAlarmID::ALARM_ID_HD_VENOUS_PRESSURE_READ_TIMEOUT_ERROR : { result = QObject::tr("HD venous pressure sensor not being read." ); break; } - case GuiAlarmID::ALARM_ID_HD_VENOUS_PRESSURE_SENSOR_TEMP_OUT_OF_RANGE : { result = QObject::tr("HD venous pressure sensor temperature out of range error." ); break; } - case GuiAlarmID::ALARM_ID_HD_BP_OCCLUSION_READ_TIMEOUT_ERROR : { result = QObject::tr("HD BP occlusion sensor not being read." ); break; } - case GuiAlarmID::ALARM_ID_HD_DPI_OCCLUSON_READ_TIMEOUT_ERROR : { result = QObject::tr("HD DPi occlusion sensor not being read." ); break; } - case GuiAlarmID::ALARM_ID_HD_DPO_OCCLUSION_READ_TIMEOUT_ERROR : { result = QObject::tr("HD DPo occlusion sensor not being read." ); break; } - case GuiAlarmID::ALARM_ID_HD_BP_OCCLUSION_SENSOR_ERROR : { result = QObject::tr("HD BP occlusion sensor error." ); break; } - case GuiAlarmID::ALARM_ID_HD_DPI_OCCLUSION_SENSOR_ERROR : { result = QObject::tr("HD DPi occlusion sensor error." ); break; } - case GuiAlarmID::ALARM_ID_HD_DPO_OCCLUSION_SENSOR_ERROR : { result = QObject::tr("HD DPo occlusion sensor error." ); break; } - case GuiAlarmID::ALARM_ID_DG_CONCENTRATE_PUMP_FAULT : { result = QObject::tr("DG concentrate pump fault." ); break; } - case GuiAlarmID::ALARM_ID_HD_BP_FLOW_READ_TIMEOUT_ERROR : { result = QObject::tr("HD blood flow sensor not being read." ); break; } - case GuiAlarmID::ALARM_ID_HD_BP_FLOW_SENSOR_ERROR : { result = QObject::tr("HD blood flow sensor error." ); break; } - case GuiAlarmID::ALARM_ID_HD_DP_FLOW_READ_TIMEOUT_ERROR : { result = QObject::tr("HD dialysate flow sensor not being read." ); break; } - case GuiAlarmID::ALARM_ID_HD_DP_FLOW_SENSOR_ERROR : { result = QObject::tr("HD dialysate flow sensor error." ); break; } - case GuiAlarmID::ALARM_ID_HD_BP_FLOW_SLOW_READ_TIMEOUT_ERROR : { result = QObject::tr("HD blood flow sensor not being read - slow packet." ); break; } - case GuiAlarmID::ALARM_ID_HD_DP_FLOW_SLOW_READ_TIMEOUT_ERROR : { result = QObject::tr("HD dialysate flow sensor not being read - slow packet." ); break; } - case GuiAlarmID::ALARM_ID_DG_LOAD_CELLS_TARE_WEIGHT_OUT_OF_RANGE : { result = QObject::tr("DG load cells weight out of range before tare." ); break; } - case GuiAlarmID::ALARM_ID_HD_BATTERY_COMM_FAULT : { result = QObject::tr("HD battery communication fault." ); break; } - case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_STALL : { result = QObject::tr("HD syringe pump stall alarm." ); break; } - case GuiAlarmID::ALARM_ID_HD_NO_CART_SELF_TEST_TIMEOUT : { result = QObject::tr("HD no cartridge self-test timeout." ); break; } - case GuiAlarmID::ALARM_ID_HD_DRY_SELF_TEST_TIMEOUT : { result = QObject::tr("HD dry self-test timeout." ); break; } - case GuiAlarmID::ALARM_ID_DG_TEMPERATURE_SENSOR_FAULT : { result = QObject::tr("DG temperature sensor error flag fault." ); break; } - case GuiAlarmID::ALARM_ID_DG_SOFTWARE_FAULT : { result = QObject::tr("DG software fault.\nSoftware found itself in an unexpected state." ); break; } - case GuiAlarmID::ALARM_ID_RTC_COMM_ERROR : { result = QObject::tr("Real-time clock communication error." ); break; } - case GuiAlarmID::ALARM_ID_DG_INVALID_LOAD_CELL_VALUE : { result = QObject::tr("DG invalid load cell value." ); break; } - case GuiAlarmID::ALARM_ID_DG_DRAIN_CIRCULATION_LINE_TIMEOUT : { result = QObject::tr("DG drain circulation line timeout." ); break; } - case GuiAlarmID::ALARM_ID_DG_TEMPERATURE_SENSORS_ADC_FAULT : { result = QObject::tr("DG temperature sensors ADC fault." ); break; } - case GuiAlarmID::ALARM_ID_DG_FLOW_METER_CHECK_FAILURE : { result = QObject::tr("DG flow meter check failure alarm." ); break; } - case GuiAlarmID::ALARM_ID_RO_PUMP_FLOW_RATE_OUT_OF_RANGE : { result = QObject::tr("RO pump flow rate out of range." ); break; } - case GuiAlarmID::ALARM_ID_FLOW_RATE_OUT_OF_UPPER_RANGE : { result = QObject::tr("DG flow rate out of upper range." ); break; } - case GuiAlarmID::ALARM_ID_FLOW_RATE_OUT_OF_LOWER_RANGE : { result = QObject::tr("DG flow rate out of lower range." ); break; } - case GuiAlarmID::ALARM_ID_RO_PUMP_OFF_FAULT : { result = QObject::tr("DG RO pump off fault." ); break; } - case GuiAlarmID::ALARM_ID_RO_PUMP_PRESSURE_OUT_OF_RANGE : { result = QObject::tr("DG RO pump pressure out of range." ); break; } - case GuiAlarmID::ALARM_ID_DRAIN_PUMP_RPM_OUT_OF_RANGE : { result = QObject::tr("DG drain pump RPM out of range." ); break; } - case GuiAlarmID::ALARM_ID_DRAIN_PUMP_OFF_FAULT : { result = QObject::tr("DG drain pump off fault." ); break; } - case GuiAlarmID::ALARM_ID_DG_HEATERS_NEGATIVE_COLD_JUNCTION_TEMPERATURE : { result = QObject::tr("DG heaters cold junction temperature out of range." ); break; } - case GuiAlarmID::ALARM_ID_DG_HEATERS_FAULT : { result = QObject::tr("DG heaters fault." ); break; } - case GuiAlarmID::ALARM_ID_DG_THERMISTORS_TEMPERATURE_OUT_OF_RANGE : { result = QObject::tr("DG thermistors/sensors temperature out of range." ); break; } - case GuiAlarmID::ALARM_ID_CP1_SPEED_CONTROL_ERROR : { result = QObject::tr("DG concentrate pump CP1 speed control error." ); break; } - case GuiAlarmID::ALARM_ID_CP2_SPEED_CONTROL_ERROR : { result = QObject::tr("DG concentrate pump CP2 speed control error." ); break; } - case GuiAlarmID::ALARM_ID_RO_REJECTION_RATIO_OUT_OF_RANGE : { result = QObject::tr("RO rejection ratio out of range." ); break; } - case GuiAlarmID::ALARM_ID_INLET_WATER_PRESSURE_FAULT : { result = QObject::tr("Inlet water pressure fault." ); break; } - case GuiAlarmID::ALARM_ID_PRESSURE_SENSOR_FAULT : { result = QObject::tr("Pressure sensor fault." ); break; } - case GuiAlarmID::ALARM_ID_CONDUCTIVITY_SENSOR_FAULT : { result = QObject::tr("Conductivity sensor fault." ); break; } - case GuiAlarmID::ALARM_ID_NVDATA_MFG_RECORD_CRC_ERROR : { result = QObject::tr("Manufacturing record CRC failure." ); break; } - case GuiAlarmID::ALARM_ID_AIR_TRAP_ILLEGAL_LEVELS : { result = QObject::tr("Air trap level sensors reporting illegal combination of air/fluid." ); break; } - case GuiAlarmID::ALARM_ID_NVDATAMGMT_INDIVIDUAL_RECORD_CRC_INVALID : { result = QObject::tr("DG/HD NV data management individual record CRC invalid." ); break; } - case GuiAlarmID::ALARM_ID_NVDATAMGMT_INDIVIDUAL_RECORD_TIME_INVALID : { result = QObject::tr("DG/HD NV data management individual record time invalid." ); break; } - case GuiAlarmID::ALARM_ID_DG_RESTARTED_FAULT : { result = QObject::tr("HD reports DG restarted fault." ); break; } - case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_ADC_ERROR : { result = QObject::tr("HD syringe pump ADC error." ); break; } - case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_VOLUME_ERROR : { result = QObject::tr("HD syringe pump volume check error." ); break; } - case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_SPEED_ERROR : { result = QObject::tr("HD syringe pump speed check error." ); break; } - case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_NOT_STOPPED_ERROR : { result = QObject::tr("HD syringe pump not stopped in off state error." ); break; } - case GuiAlarmID::ALARM_ID_HD_BLOOD_LEAK_FAULT : { result = QObject::tr("HD blood leak detector fault." ); break; } - case GuiAlarmID::ALARM_ID_DG_LOAD_CELLS_INVALID_CALIBRATION : { result = QObject::tr("DG load cells invalid calibration." ); break; } - case GuiAlarmID::ALARM_ID_DG_PRIMARY_HEATERS_INTERNAL_TEMP_OUT_OF_RANGE : { result = QObject::tr("DG primary heaters internal temperature out of range." ); break; } - case GuiAlarmID::ALARM_ID_DG_TRIMMER_HEATER_INTERNAL_TEMP_OUT_OF_RANGE : { result = QObject::tr("DG trimmer heater internal temperature out of range." ); break; } - case GuiAlarmID::ALARM_ID_DG_HEATERS_ON_WITH_NO_FLOW_TIMEOUT : { result = QObject::tr("DG heaters on with no flow time out." ); break; } - case GuiAlarmID::ALARM_ID_HD_ARTERIAL_BUBBLE_SELF_TEST_FAILURE : { result = QObject::tr("HD arterial air bubble detector self-test failure." ); break; } - case GuiAlarmID::ALARM_ID_HD_VENOUS_BUBBLE_SELF_TEST_FAILURE : { result = QObject::tr("HD venous air bubble detector self-test failure." ); break; } - case GuiAlarmID::ALARM_ID_END_OF_TREATMENT_HIGH : { result = QObject::tr("HD end of treatment alarm (high priority - user still not acting to end treatment)." ); break; } - case GuiAlarmID::ALARM_ID_TREATMENT_STOPPED_NO_RINSEBACK : { result = QObject::tr("Blood sitting too long after treatment stopped by user alarm (>10 min)." ); break; } - case GuiAlarmID::ALARM_ID_HD_BLOOD_LEAK_DETECTED : { result = QObject::tr("HD blood leak detected alarm." ); break; } - case GuiAlarmID::ALARM_ID_VENOUS_PRESSURE_LOW : { result = QObject::tr("Venous pressure too low during treatment." ); break; } - case GuiAlarmID::ALARM_ID_HD_VENOUS_BUBBLE_DETECTED : { result = QObject::tr("HD venous air bubble detected alarm." ); break; } - case GuiAlarmID::ALARM_ID_HD_VENOUS_BUBBLE_DETECTED_RINSEBACK : { result = QObject::tr("HD venous air bubble detected rinseback alarm." ); break; } - case GuiAlarmID::ALARM_ID_VENOUS_PRESSURE_HIGH : { result = QObject::tr("Venous pressure too high during treatment." ); 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_DG_FLUID_LEAK_DETECTED : { result = QObject::tr("DG fluid leak detected alarm." ); break; } - case GuiAlarmID::ALARM_ID_HD_FLUID_LEAK_DETECTED : { result = QObject::tr("HD fluid leak detected alarm." ); break; } - case GuiAlarmID::ALARM_ID_HD_SHOCK : { result = QObject::tr("HD experienced large acceleration." ); break; } - case GuiAlarmID::ALARM_ID_DG_SHOCK : { result = QObject::tr("DG experienced large acceleration." ); break; } - case GuiAlarmID::ALARM_ID_HD_EXCESSIVE_TILT : { result = QObject::tr("HD tilt exceeds maximum." ); break; } - case GuiAlarmID::ALARM_ID_DG_EXCESSIVE_TILT : { result = QObject::tr("DG tilt exceeds maximum." ); break; } - case GuiAlarmID::ALARM_ID_HD_AC_POWER_LOST : { result = QObject::tr("HD AC power lost alarm." ); break; } - case GuiAlarmID::ALARM_ID_DG_COMM_TIMEOUT : { result = QObject::tr("Dialysate generator communication timeout." ); break; } - case GuiAlarmID::ALARM_ID_AIR_TRAP_FILL_DURING_TREATMENT : { result = QObject::tr("Air trap fill timeout during treatment." ); 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_ACID_CONDUCTIVITY_OUT_OF_RANGE : { result = QObject::tr("Concentrate conductivity after adding acid out of range alarm." ); break; } - case GuiAlarmID::ALARM_ID_DIALYSATE_CONDUCTIVITY_OUT_OF_RANGE : { result = QObject::tr("Dialysate conductivity out of range." ); break; } - case GuiAlarmID::ALARM_ID_DIALYSATE_CONDUCTIVITY_FAULT : { result = QObject::tr("DG dialysate generation conductivity fault alarm." ); break; } - case GuiAlarmID::ALARM_ID_INLET_WATER_HIGH_TEMPERATURE : { result = QObject::tr("Inlet water temperature too high." ); break; } - case GuiAlarmID::ALARM_ID_INLET_WATER_LOW_TEMPERATURE : { result = QObject::tr("Inlet water temperature too low." ); break; } - case GuiAlarmID::ALARM_ID_INLET_WATER_HIGH_CONDUCTIVITY : { result = QObject::tr("Inlet water conductivity too high." ); break; } - case GuiAlarmID::ALARM_ID_INLET_WATER_LOW_CONDUCTIVITY : { result = QObject::tr("Inlet water conductivity too low." ); break; } - case GuiAlarmID::ALARM_ID_INLET_WATER_LOW_PRESSURE : { result = QObject::tr("Inlet water pressure too low." ); break; } - case GuiAlarmID::ALARM_ID_PRIME_COMPLETED_HIGH : { result = QObject::tr("HD prime completed high priority alarm." ); break; } - case GuiAlarmID::ALARM_ID_UV_REACTOR_NOT_HEALTHY : { result = QObject::tr("Inlet or Outlet UV reactor not healthy." ); break; } - case GuiAlarmID::ALARM_ID_DG_FAN_RPM_OUT_OF_RANGE : { result = QObject::tr("DG fan RPM out of range." ); break; } - case GuiAlarmID::ALARM_ID_DG_DIALYSATE_FILL_OUT_OF_TIME : { result = QObject::tr("DG dialysate fill runs out of time." ); break; } - case GuiAlarmID::ALARM_ID_NVDATA_EEPROM_OPS_FAILURE : { result = QObject::tr("EEPROM operations (read, write, erase) failure." ); break; } - case GuiAlarmID::ALARM_ID_NVDATA_SRVC_RECORD_CRC_ERROR : { result = QObject::tr("Service record CRC failure." ); break; } - case GuiAlarmID::ALARM_ID_NVDATA_HW_USAGE_DATA_CRC_ERROR : { result = QObject::tr("HW usage data (treatment time in HD and total consumed water in DG) failure." ); break; } - case GuiAlarmID::ALARM_ID_HD_COMM_TIMEOUT : { result = QObject::tr("HD communication timeout." ); 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_BLOOD_PUMP_ROTOR_SPEED_TOO_HIGH : { result = QObject::tr("Blood pump rotor speed too high." ); break; } - case GuiAlarmID::ALARM_ID_BLOOD_FLOW_SIGNAL_STRENGTH_TOO_LOW : { result = QObject::tr("Blood flow sensor signal strength too low." ); break; } - case GuiAlarmID::ALARM_ID_DIALYSATE_FLOW_SIGNAL_STRENGTH_TOO_LOW : { result = QObject::tr("Dialysate flow sensor signal strength too low." ); break; } - case GuiAlarmID::ALARM_ID_HD_LOAD_CELL_ACCELERATION_RES_1_ALARM : { result = QObject::tr("HD sees primary load cell for reservoir 1 change too much too fast." ); break; } - case GuiAlarmID::ALARM_ID_HD_LOAD_CELL_ACCELERATION_RES_2_ALARM : { result = QObject::tr("HD sees primary load cell for reservoir 1 change too much too fast." ); break; } - case GuiAlarmID::ALARM_ID_TREATMENT_RINSEBACK_TIMEOUT_ALARM : { result = QObject::tr("HD in treatment rinseback operation timeout." ); break; } - case GuiAlarmID::ALARM_ID_TREATMENT_RECIRC_TIMEOUT_ALARM : { result = QObject::tr("HD in treatment re-circ sub-mode for too long." ); break; } - case GuiAlarmID::ALARM_ID_CARTRIDGE_DOOR_OPENED : { result = QObject::tr("HD cartridge door opened alarm." ); break; } - case GuiAlarmID::ALARM_ID_DIALYSATE_TEMPERATURE_TOO_HIGH : { result = QObject::tr("HD dialysate temperature too high alarm." ); break; } - case GuiAlarmID::ALARM_ID_DIALYSATE_TEMPERATURE_TOO_LOW : { result = QObject::tr("HD dialysate temperature too low alarm." ); break; } - case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_SYRINGE_EMPTY : { result = QObject::tr("HD syringe empty alarm." ); break; } - case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_OCCLUSION : { result = QObject::tr("HD syringe pump occlusion alarm." ); break; } - case GuiAlarmID::ALARM_ID_DG_BAD_INLET_WATER_QUALITY : { result = QObject::tr("Inlet water quality is bad (temperature, conductivity, pressure)." ); break; } - case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_NOT_ENOUGH_HEPARIN_ALARM : { result = QObject::tr("HD syringe pump not enough Heparin alarm." ); break; } - case GuiAlarmID::ALARM_ID_HD_ARTERIAL_BUBBLE_DETECTED : { result = QObject::tr("HD arterial air bubble detected alarm." ); break; } - case GuiAlarmID::ALARM_ID_HD_ARTERIAL_BUBBLE_DETECTED_RINSEBACK : { result = QObject::tr("HD arterial air bubble detected rinseback alarm." ); break; } - case GuiAlarmID::ALARM_ID_HD_PUMP_DIRECTION_STATUS_ERROR : { result = QObject::tr("HD pump direction status error." ); break; } - case GuiAlarmID::ALARM_ID_NVDATA_CAL_RECORD_CRC_ERROR : { result = QObject::tr("Calibration record CRC failure." ); break; } - case GuiAlarmID::ALARM_ID_HD_RESERVOIR_FULL_AND_DG_NOT_READY_TO_SWITCH : { result = QObject::tr("HD active reservoir is full during treatment and DG not ready to switch reservoirs." ); break; } - case GuiAlarmID::ALARM_ID_BLOOD_SITTING_WARNING : { result = QObject::tr("Blood sitting too long warning (>4 min)." ); break; } - case GuiAlarmID::ALARM_ID_END_OF_TREATMENT_ALARM : { result = QObject::tr("HD end of treatment alarm (user not acting to end treatment)." ); break; } - case GuiAlarmID::ALARM_ID_PRIME_COMPLETED_MEDIUM : { result = QObject::tr("HD prime completed medium priority alarm." ); break; } - case GuiAlarmID::ALARM_ID_SALINE_BOLUS_VOLUME_CHECK_FAILURE : { result = QObject::tr("HD Saline bolus volume check failure." ); break; } - case GuiAlarmID::ALARM_ID_RINSEBACK_VOLUME_CHECK_FAILURE : { result = QObject::tr("HD rinseback volume check failure." ); break; } - case GuiAlarmID::ALARM_ID_END_TREATMENT_TIMEOUT_ALARM : { result = QObject::tr("HD end treatment sub-mode timeout alarm." ); break; } - case GuiAlarmID::ALARM_ID_BLOOD_PRIME_VOLUME_CHECK_FAILURE : { result = QObject::tr("HD blood prime volume check failure." ); break; } - case GuiAlarmID::ALARM_ID_HD_SYRINGE_DETECTED : { result = QObject::tr("HD syringe detected alarm." ); break; } - case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_SYRINGE_REMOVED : { result = QObject::tr("HD syringe pump syringe removed alarm." ); break; } - case GuiAlarmID::ALARM_ID_EMPTY_SALINE_BAG : { result = QObject::tr("HD Saline bag is empty." ); break; } - case GuiAlarmID::ALARM_ID_DIALYSATE_TEMPERATURE_HIGH : { result = QObject::tr("HD dialysate temperature too high alarm." ); break; } - case GuiAlarmID::ALARM_ID_DIALYSATE_TEMPERATURE_LOW : { result = QObject::tr("HD dialysate temperature too low alarm." ); 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_END_OF_TREATMENT_WARNING : { result = QObject::tr("HD end of treatment warning." ); break; } - case GuiAlarmID::ALARM_ID_PRIME_COMPLETED_LOW_PRIORITY : { result = QObject::tr("HD prime completed low priority alarm." ); break; } - case GuiAlarmID::ALARM_ID_PRIME_OUT_OF_TIME : { result = QObject::tr("HD prime out of time alarm." ); break; } - case GuiAlarmID::ALARM_ID_HD_PRIME_PURGE_AIR_TIME_OUT : { result = QObject::tr("HD time out on prime sub-mode purge air state." ); break; } - case GuiAlarmID::ALARM_ID_PRIME_DIALYSATE_DIALYZER_TIME_OUT : { result = QObject::tr("HD prime dialysate dialyzer time out alarm." ); break; } - case GuiAlarmID::ALARM_ID_PRIME_DIALYSATE_BYPASS_TIME_OUT : { result = QObject::tr("HD prime dialysate bypass time out alarm." ); break; } - case GuiAlarmID::ALARM_ID_PRE_TREATMENT_DRY_SELF_TEST_FAILURE : { result = QObject::tr("HD pre-treatment mode dry self-tests failure." ); break; } - case GuiAlarmID::ALARM_ID_PRE_TREATMENT_WET_SELF_TEST_FAILURE : { result = QObject::tr("HD pre-treatment mode wet self-tests failure." ); break; } - case GuiAlarmID::ALARM_ID_RTC_BATTERY_LOW : { result = QObject::tr("RTC battery low." ); break; } - case GuiAlarmID::ALARM_ID_RTC_RAM_OPS_ERROR : { result = QObject::tr("RTC (i.e read time) or RAM operations failure (read or write)." ); break; } - case GuiAlarmID::ALARM_ID_TREATMENT_STOPPED_AFTER_RINSEBACK : { result = QObject::tr("HD in treatment stopped sub-mode after rinseback completed (no escalation)." ); break; } - case GuiAlarmID::ALARM_ID_INSTALL_NEW_CARTRIDGE : { result = QObject::tr("HD needs new cartridge to be installed." ); break; } - case GuiAlarmID::ALARM_ID_CARTRIDGE_INSTALLED_IMPROPERLY : { result = QObject::tr("HD cartridge installed improperly alarm." ); break; } - case GuiAlarmID::ALARM_ID_NO_CARTRIDGE_LOADED : { result = QObject::tr("HD no cartridge loaded alarm." ); break; } - case GuiAlarmID::ALARM_ID_CARTRIDGE_REMOVAL_FAILURE : { result = QObject::tr("HD fail to remove cartridge alarm." ); break; } - case GuiAlarmID::ALARM_ID_BICARB_CONDUCTIVITY_OUT_OF_RANGE : { result = QObject::tr("Bicarb conductivity out of range during bicarb pump check alarm." ); break; } - case GuiAlarmID::ALARM_ID_DG_RESERVOIR_DRAIN_TIMEOUT : { result = QObject::tr("DG reservoir drain time out." ); break; } - case GuiAlarmID::ALARM_ID_DG_RESERVOIR_FILL_TIMEOUT : { result = QObject::tr("DG reservoir fill time out." ); break; } - case GuiAlarmID::ALARM_ID_DG_RESERVOIR_LEAK_TIMEOUT : { result = QObject::tr("DG reservoir leak time out." ); break; } - case GuiAlarmID::ALARM_ID_DG_TEMP_SENSORS_DIFF_OUT_OF_RANGE : { result = QObject::tr("DG temperature sensors difference out of range." ); break; } - case GuiAlarmID::ALARM_ID_DG_HEAT_DISINFECT_TARGET_TEMP_TIMEOUT : { result = QObject::tr("DG heat disinfect target temperature time out (could not reach to temperature)." ); break; } - case GuiAlarmID::ALARM_ID_DG_HEAT_DISINFECT_INLET_PRES_AND_TEMP_SNSRS_OUT: { result = QObject::tr("DG heat disinfect inlet pressure and temperature sensors out of range." ); break; } - case GuiAlarmID::ALARM_ID_DG_HEAT_DISINFECT_INLET_COND_AND_TEMP_OUT : { result = QObject::tr("DG heat disinfect inlet conductivity and temperature out of range." ); break; } - case GuiAlarmID::ALARM_ID_DG_CHEM_DISINFECT_TARGET_TEMP_TIMEOUT : { result = QObject::tr("DG chemical disinfect could not reach to target temperature." ); break; } - case GuiAlarmID::ALARM_ID_DG_CHEM_DISINFECT_INLET_PRES_AND_TEMP_SNSRS_OUT: { result = QObject::tr("DG chemical disinfect inlet pressure and temperature sensors out of range." ); break; } - case GuiAlarmID::ALARM_ID_DG_CHEM_DISINFECT_INLET_COND_AND_TEMP_OUT : { result = QObject::tr("DG chemical disinfect inlet conductivity and temperature out of range." ); break; } - case GuiAlarmID::NUM_OF_ALARM_IDS : { result = QObject::tr("Total number of alarms." ); break; } + case GuiAlarmID::ALARM_ID_NO_ALARM : { result = QObject::tr("Indication for when no alarms is a possible situation." ); break; } + case GuiAlarmID::ALARM_ID_STUCK_BUTTON_TEST_FAILED : { result = QObject::tr("Stuck button POST failure.\nStop or Off button detected to be pressed for at least 1 second during test shortly after power up." ); break; } + case GuiAlarmID::ALARM_ID_HD_FPGA_POST_TEST_FAILED : { result = QObject::tr("HD FPGA POST failure." ); break; } + case GuiAlarmID::ALARM_ID_DG_FPGA_POST_TEST_FAILED : { result = QObject::tr("DG 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.\nUI failed to communicate within a reasonable time after power up." ); break; } + case GuiAlarmID::ALARM_ID_RTC_CONFIG_ERROR : { result = QObject::tr("Real-time clock configuration error." ); break; } + case GuiAlarmID::ALARM_ID_HD_ACCELEROMETER_SELF_TEST_FAILURE : { result = QObject::tr("HD accelerometer failed POST." ); break; } + case GuiAlarmID::ALARM_ID_DG_ACCELEROMETER_SELF_TEST_FAILURE : { result = QObject::tr("DG accelerometer failed POST." ); break; } + case GuiAlarmID::ALARM_ID_RTC_OR_TIMER_ACCURACY_FAILURE : { result = QObject::tr("RTC or MCU timer inaccurate." ); break; } + case GuiAlarmID::ALARM_ID_DG_HEATERS_SELF_TEST_FAILURE : { result = QObject::tr("DG heaters failed POST." ); break; } + case GuiAlarmID::ALARM_ID_HD_INTEGRITY_POST_TEST_FAILED : { result = QObject::tr("HD firmware image integrity POST test failed." ); break; } + case GuiAlarmID::ALARM_ID_DG_INTEGRITY_POST_TEST_FAILED : { result = QObject::tr("DG firmware image integrity POST test failed." ); break; } + case GuiAlarmID::ALARM_ID_HD_BLOOD_FLOW_INVALID_CALIBRATION : { result = QObject::tr("HD blood flow invalid calibration." ); break; } + case GuiAlarmID::ALARM_ID_HD_DIALYSATE_FLOW_INVALID_CALIBRATION : { result = QObject::tr("HD dialysate flow invalid calibration." ); break; } + case GuiAlarmID::ALARM_ID_HD_ALARM_AUDIO_SELF_TEST_FAILURE : { result = QObject::tr("HD alarm audio failed POST." ); break; } + case GuiAlarmID::ALARM_ID_HD_SOFTWARE_FAULT : { result = QObject::tr("HD Software fault.\nSoftware found itself in an unexpected state." ); break; } + case GuiAlarmID::ALARM_ID_BLOOD_PUMP_MC_CURRENT_CHECK : { result = QObject::tr("Blood pump failed motor controller current check.\nToo high when pump should be off or out of range when pump should be running." ); 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 direction check.\nMeasured vs commanded." ); break; } + case GuiAlarmID::ALARM_ID_BLOOD_PUMP_ROTOR_SPEED_CHECK : { result = QObject::tr("Blood pump failed rotor speed check.\nMismatch with rotor and motor speeds." ); break; } + case GuiAlarmID::ALARM_ID_DIAL_IN_PUMP_MC_CURRENT_CHECK : { result = QObject::tr("Dialysis inlet pump failed motor controller current check.\nToo high when pump should be off or out of range when pump should be running." ); 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 direction check.\nMeasured vs commanded." ); break; } + case GuiAlarmID::ALARM_ID_DIAL_IN_PUMP_ROTOR_SPEED_CHECK : { result = QObject::tr("Dialysis inlet pump failed rotor speed check.\nMismatch with rotor and motor speeds." ); break; } + case GuiAlarmID::ALARM_ID_DIAL_OUT_PUMP_MC_CURRENT_CHECK : { result = QObject::tr("Dialysis outlet pump failed motor controller current check.\nToo high when pump should be off or out of range when pump should be running." ); 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 direction check.\nMeasured vs commanded." ); break; } + case GuiAlarmID::ALARM_ID_DIAL_OUT_PUMP_ROTOR_SPEED_CHECK : { result = QObject::tr("Dialysis outlet pump failed rotor speed check.\nMismatch with rotor and motor speeds." ); break; } + case GuiAlarmID::ALARM_ID_WATCHDOG_EXPIRED : { result = QObject::tr("Watchdog expired error.\nWatchdog was not \"pet\" within the appropriate time." ); 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_CAN_MESSAGE_NOT_ACKED : { result = QObject::tr("System message that required acknowledgment was not acknowledged." ); 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_HD_FPGA_COMM_TIMEOUT : { result = QObject::tr("HD FPGA communication down for too long." ); break; } + case GuiAlarmID::ALARM_ID_VALVE_CONTROL_FAILURE : { result = QObject::tr("FPGA not accepting commanded valve states." ); break; } + case GuiAlarmID::ALARM_ID_BLOOD_PUMP_MOTOR_SPEED_CHECK : { result = QObject::tr("Blood pump failed motor speed check.\nMeasured vs commanded." ); break; } + case GuiAlarmID::ALARM_ID_DIAL_IN_PUMP_MOTOR_SPEED_CHECK : { result = QObject::tr("Dialysate inlet pump failed motor speed check.\nMeasured vs commanded." ); break; } + case GuiAlarmID::ALARM_ID_DIAL_OUT_PUMP_MOTOR_SPEED_CHECK : { result = QObject::tr("Dialysate outlet pump failed motor speed check.\nMeasured vs commanded." ); break; } + case GuiAlarmID::ALARM_ID_HD_CRITICAL_DATA_ERROR : { result = QObject::tr("HD critical data integrity check failed." ); break; } + case GuiAlarmID::ALARM_ID_DG_CRITICAL_DATA_ERROR : { result = QObject::tr("DG critical data integrity check failed." ); break; } + case GuiAlarmID::ALARM_ID_HD_ACCELEROMETER_FAILURE : { result = QObject::tr("HD accelerometer error (no readings or FPGA reports error)." ); break; } + case GuiAlarmID::ALARM_ID_DG_ACCELEROMETER_FAILURE : { result = QObject::tr("DG accelerometer error (no readings or FPGA reports error)." ); break; } + case GuiAlarmID::ALARM_ID_HD_VALVE_HOMING_FAILED : { result = QObject::tr("HD valve homing failed." ); break; } + case GuiAlarmID::ALARM_ID_HD_VALVE_TRANSITION_TIMEOUT : { result = QObject::tr("HD valve transition time out." ); break; } + case GuiAlarmID::ALARM_ID_HD_VALVE_NOT_FUNCTIONAL : { result = QObject::tr("HD valve not functional." ); break; } + case GuiAlarmID::ALARM_ID_HD_VALVE_CURRENT_OUT_OF_RANGE : { result = QObject::tr("HD valve current out of range." ); break; } + case GuiAlarmID::ALARM_ID_HD_VALVE_POSITION_OUT_OF_RANGE : { result = QObject::tr("HD valve position out of target." ); break; } + case GuiAlarmID::ALARM_ID_ARTERIAL_PRESSURE_SENSOR_FAULT : { result = QObject::tr("FPGA reports failure reading arterial pressure sensor." ); break; } + case GuiAlarmID::ALARM_ID_VENOUS_PRESSURE_SENSOR_FAULT : { result = QObject::tr("FPGA reports failure reading venous pressure sensor." ); break; } + case GuiAlarmID::ALARM_ID_DG_COMMAND_INVALID_PARAMETER_FAULT : { result = QObject::tr("HD requests DG command with invalid parameter fault." ); break; } + case GuiAlarmID::ALARM_ID_NVDATAMGMT_GROUP_RECORD_CRC_INVALID : { result = QObject::tr("DG/HD NV data management overall group record CRC invalid." ); break; } + case GuiAlarmID::ALARM_ID_HD_BP_OCCLUSION_SELF_TEST_FAILURE : { result = QObject::tr("HD blood pump occlusion self-test failure alarm." ); break; } + case GuiAlarmID::ALARM_ID_HD_DIP_OCCLUSION_SELF_TEST_FAILURE : { result = QObject::tr("HD dialysate inlet pump occlusion self-test failure alarm." ); break; } + case GuiAlarmID::ALARM_ID_HD_DOP_OCCLUSION_SELF_TEST_FAILURE : { result = QObject::tr("HD dialysate outlet pump occlusion self-test failure alarm." ); break; } + case GuiAlarmID::ALARM_ID_HD_ARTERIAL_PRESSURE_SELF_TEST_FAILURE : { result = QObject::tr("HD arterial pressure self-test failure alarm." ); break; } + case GuiAlarmID::ALARM_ID_HD_VENOUS_PRESSURE_SELF_TEST_FAILURE : { result = QObject::tr("HD venous pressure self-test failure alarm." ); break; } + case GuiAlarmID::ALARM_ID_HD_BLOOD_FLOW_STATUS_SELF_TEST_FAILURE : { result = QObject::tr("HD blood flow meter status check self-test failure alarm." ); break; } + case GuiAlarmID::ALARM_ID_HD_DIALYSATE_FLOW_STATUS_SELF_TEST_FAILURE : { result = QObject::tr("HD dialysate flow meter status check self-test failure alarm." ); break; } + case GuiAlarmID::ALARM_ID_HD_BLOOD_LEAK_SELF_TEST_FAILURE : { result = QObject::tr("HD blood leak detector self-test failure alarm." ); break; } + case GuiAlarmID::ALARM_ID_HD_VOLTAGE_OUT_OF_RANGE : { result = QObject::tr("HD monitored voltage is out of range." ); break; } + case GuiAlarmID::ALARM_ID_DG_VOLTAGE_OUT_OF_RANGE : { result = QObject::tr("DG monitored voltage is out of range." ); break; } + case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_ENCODER_DIRECTION_ERROR : { result = QObject::tr("HD syringe pump direction (from encoder) error." ); break; } + case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_CONTROLLER_DIRECTION_ERROR : { result = QObject::tr("HD syringe pump direction (from controller) error." ); break; } + case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_FAULT : { result = QObject::tr("HD syringe pump fault reported by FPGA." ); break; } + case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_OVER_TRAVEL_ERROR : { result = QObject::tr("HD syringe pump over travel error." ); break; } + case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_DAC_WRITE_ERROR : { result = QObject::tr("HD syringe pump DAC write failure." ); break; } + case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_RUNNING_WHILE_BP_OFF_ERROR : { result = QObject::tr("HD syringe pump is running while the BP is off." ); break; } + case GuiAlarmID::ALARM_ID_HD_VENOUS_PRESSURE_READ_TIMEOUT_ERROR : { result = QObject::tr("HD venous pressure sensor not being read." ); break; } + case GuiAlarmID::ALARM_ID_HD_VENOUS_PRESSURE_SENSOR_TEMP_OUT_OF_RANGE : { result = QObject::tr("HD venous pressure sensor temperature out of range error." ); break; } + case GuiAlarmID::ALARM_ID_HD_BP_OCCLUSION_READ_TIMEOUT_ERROR : { result = QObject::tr("HD BP occlusion sensor not being read." ); break; } + case GuiAlarmID::ALARM_ID_HD_DPI_OCCLUSON_READ_TIMEOUT_ERROR : { result = QObject::tr("HD DPi occlusion sensor not being read." ); break; } + case GuiAlarmID::ALARM_ID_HD_DPO_OCCLUSION_READ_TIMEOUT_ERROR : { result = QObject::tr("HD DPo occlusion sensor not being read." ); break; } + case GuiAlarmID::ALARM_ID_HD_BP_OCCLUSION_SENSOR_ERROR : { result = QObject::tr("HD BP occlusion sensor error." ); break; } + case GuiAlarmID::ALARM_ID_HD_DPI_OCCLUSION_SENSOR_ERROR : { result = QObject::tr("HD DPi occlusion sensor error." ); break; } + case GuiAlarmID::ALARM_ID_HD_DPO_OCCLUSION_SENSOR_ERROR : { result = QObject::tr("HD DPo occlusion sensor error." ); break; } + case GuiAlarmID::ALARM_ID_HD_BP_FLOW_READ_TIMEOUT_ERROR : { result = QObject::tr("HD blood flow sensor not being read." ); break; } + case GuiAlarmID::ALARM_ID_HD_BP_FLOW_SENSOR_ERROR : { result = QObject::tr("HD blood flow sensor error." ); break; } + case GuiAlarmID::ALARM_ID_HD_DP_FLOW_READ_TIMEOUT_ERROR : { result = QObject::tr("HD dialysate flow sensor not being read." ); break; } + case GuiAlarmID::ALARM_ID_HD_DP_FLOW_SENSOR_ERROR : { result = QObject::tr("HD dialysate flow sensor error." ); break; } + case GuiAlarmID::ALARM_ID_HD_BP_FLOW_SLOW_READ_TIMEOUT_ERROR : { result = QObject::tr("HD blood flow sensor not being read - slow packet." ); break; } + case GuiAlarmID::ALARM_ID_HD_DP_FLOW_SLOW_READ_TIMEOUT_ERROR : { result = QObject::tr("HD dialysate flow sensor not being read - slow packet." ); break; } + case GuiAlarmID::ALARM_ID_HD_BATTERY_COMM_FAULT : { result = QObject::tr("HD battery communication fault." ); break; } + case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_STALL : { result = QObject::tr("HD syringe pump stall alarm." ); break; } + case GuiAlarmID::ALARM_ID_HD_NO_CART_SELF_TEST_TIMEOUT : { result = QObject::tr("HD no cartridge self-test timeout." ); break; } + case GuiAlarmID::ALARM_ID_HD_DRY_SELF_TEST_TIMEOUT : { result = QObject::tr("HD dry self-test timeout." ); break; } + case GuiAlarmID::ALARM_ID_RTC_COMM_ERROR : { result = QObject::tr("Real-time clock communication error." ); break; } + case GuiAlarmID::ALARM_ID_NVDATA_MFG_RECORD_CRC_ERROR : { result = QObject::tr("Manufacturing record CRC failure." ); break; } + case GuiAlarmID::ALARM_ID_AIR_TRAP_ILLEGAL_LEVELS : { result = QObject::tr("Air trap level sensors reporting illegal combination of air/fluid." ); break; } + case GuiAlarmID::ALARM_ID_NVDATAMGMT_INDIVIDUAL_RECORD_CRC_INVALID : { result = QObject::tr("DG/HD NV data management individual record CRC invalid." ); break; } + case GuiAlarmID::ALARM_ID_NVDATAMGMT_INDIVIDUAL_RECORD_TIME_INVALID : { result = QObject::tr("DG/HD NV data management individual record time invalid." ); break; } + case GuiAlarmID::ALARM_ID_DG_RESTARTED_FAULT : { result = QObject::tr("HD reports DG restarted fault." ); break; } + case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_ADC_ERROR : { result = QObject::tr("HD syringe pump ADC error." ); break; } + case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_VOLUME_ERROR : { result = QObject::tr("HD syringe pump volume check error." ); break; } + case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_SPEED_ERROR : { result = QObject::tr("HD syringe pump speed check error." ); break; } + case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_NOT_STOPPED_ERROR : { result = QObject::tr("HD syringe pump not stopped in off state error." ); break; } + case GuiAlarmID::ALARM_ID_HD_BLOOD_LEAK_FAULT : { result = QObject::tr("HD blood leak detector fault." ); break; } + case GuiAlarmID::ALARM_ID_HD_ARTERIAL_BUBBLE_SELF_TEST_FAILURE : { result = QObject::tr("HD arterial air bubble detector self-test failure." ); break; } + case GuiAlarmID::ALARM_ID_HD_VENOUS_BUBBLE_SELF_TEST_FAILURE : { result = QObject::tr("HD venous air bubble detector self-test failure." ); break; } + case GuiAlarmID::ALARM_ID_END_OF_TREATMENT_HIGH : { result = QObject::tr("HD end of treatment alarm (high priority - user still not acting to end treatment)." ); break; } + case GuiAlarmID::ALARM_ID_TREATMENT_STOPPED_NO_RINSEBACK : { result = QObject::tr("Blood sitting too long after treatment stopped by user alarm (>10 min)." ); break; } + case GuiAlarmID::ALARM_ID_HD_BLOOD_LEAK_DETECTED : { result = QObject::tr("HD blood leak detected alarm." ); break; } + case GuiAlarmID::ALARM_ID_VENOUS_PRESSURE_LOW : { result = QObject::tr("Venous pressure too low during treatment." ); break; } + case GuiAlarmID::ALARM_ID_HD_VENOUS_BUBBLE_DETECTED : { result = QObject::tr("HD venous air bubble detected alarm." ); break; } + case GuiAlarmID::ALARM_ID_HD_VENOUS_BUBBLE_DETECTED_RINSEBACK : { result = QObject::tr("HD venous air bubble detected rinseback alarm." ); break; } + case GuiAlarmID::ALARM_ID_VENOUS_PRESSURE_HIGH : { result = QObject::tr("Venous pressure too high during treatment." ); 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_DG_FLUID_LEAK_DETECTED : { result = QObject::tr("DG fluid leak detected alarm." ); break; } + case GuiAlarmID::ALARM_ID_HD_FLUID_LEAK_DETECTED : { result = QObject::tr("HD fluid leak detected alarm." ); break; } + case GuiAlarmID::ALARM_ID_HD_SHOCK : { result = QObject::tr("HD experienced large acceleration." ); break; } + case GuiAlarmID::ALARM_ID_DG_SHOCK : { result = QObject::tr("DG experienced large acceleration." ); break; } + case GuiAlarmID::ALARM_ID_HD_EXCESSIVE_TILT : { result = QObject::tr("HD tilt exceeds maximum." ); break; } + case GuiAlarmID::ALARM_ID_DG_EXCESSIVE_TILT : { result = QObject::tr("DG tilt exceeds maximum." ); break; } + case GuiAlarmID::ALARM_ID_HD_AC_POWER_LOST : { result = QObject::tr("HD AC power lost alarm." ); break; } + case GuiAlarmID::ALARM_ID_DG_COMM_TIMEOUT : { result = QObject::tr("Dialysate generator communication timeout." ); break; } + case GuiAlarmID::ALARM_ID_AIR_TRAP_FILL_DURING_TREATMENT : { result = QObject::tr("Air trap fill timeout during treatment." ); 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_ACID_CONDUCTIVITY_OUT_OF_RANGE : { result = QObject::tr("Concentrate conductivity after adding acid out of range alarm." ); break; } + case GuiAlarmID::ALARM_ID_DIALYSATE_CONDUCTIVITY_OUT_OF_RANGE : { result = QObject::tr("Dialysate conductivity out of range." ); break; } + case GuiAlarmID::ALARM_ID_DIALYSATE_CONDUCTIVITY_FAULT : { result = QObject::tr("DG dialysate generation conductivity fault alarm." ); break; } + case GuiAlarmID::ALARM_ID_INLET_WATER_HIGH_TEMPERATURE : { result = QObject::tr("Inlet water temperature too high." ); break; } + case GuiAlarmID::ALARM_ID_INLET_WATER_LOW_TEMPERATURE : { result = QObject::tr("Inlet water temperature too low." ); break; } + case GuiAlarmID::ALARM_ID_INLET_WATER_HIGH_CONDUCTIVITY : { result = QObject::tr("Inlet water conductivity too high." ); break; } + case GuiAlarmID::ALARM_ID_INLET_WATER_LOW_CONDUCTIVITY : { result = QObject::tr("Inlet water conductivity too low." ); break; } + case GuiAlarmID::ALARM_ID_INLET_WATER_LOW_PRESSURE : { result = QObject::tr("Inlet water pressure too low." ); break; } + case GuiAlarmID::ALARM_ID_PRIME_COMPLETED_HIGH : { result = QObject::tr("HD prime completed high priority alarm." ); break; } + case GuiAlarmID::ALARM_ID_NVDATA_EEPROM_OPS_FAILURE : { result = QObject::tr("EEPROM operations (read, write, erase) failure." ); break; } + case GuiAlarmID::ALARM_ID_NVDATA_SRVC_RECORD_CRC_ERROR : { result = QObject::tr("Service record CRC failure." ); break; } + case GuiAlarmID::ALARM_ID_NVDATA_HW_USAGE_DATA_CRC_ERROR : { result = QObject::tr("HW usage data (treatment time in HD and total consumed water in DG) failure." ); break; } + case GuiAlarmID::ALARM_ID_NVDATA_CAL_RECORD_CRC_ERROR : { result = QObject::tr("Calibration record CRC failure." ); 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_BLOOD_PUMP_ROTOR_SPEED_TOO_HIGH : { result = QObject::tr("Blood pump rotor speed too high." ); break; } + case GuiAlarmID::ALARM_ID_BLOOD_FLOW_SIGNAL_STRENGTH_TOO_LOW : { result = QObject::tr("Blood flow sensor signal strength too low." ); break; } + case GuiAlarmID::ALARM_ID_DIALYSATE_FLOW_SIGNAL_STRENGTH_TOO_LOW : { result = QObject::tr("Dialysate flow sensor signal strength too low." ); break; } + case GuiAlarmID::ALARM_ID_HD_LOAD_CELL_ACCELERATION_RES_1_ALARM : { result = QObject::tr("HD sees primary load cell for reservoir 1 change too much too fast." ); break; } + case GuiAlarmID::ALARM_ID_HD_LOAD_CELL_ACCELERATION_RES_2_ALARM : { result = QObject::tr("HD sees primary load cell for reservoir 1 change too much too fast." ); break; } + case GuiAlarmID::ALARM_ID_TREATMENT_RINSEBACK_TIMEOUT_ALARM : { result = QObject::tr("HD in treatment rinseback operation timeout." ); break; } + case GuiAlarmID::ALARM_ID_TREATMENT_RECIRC_TIMEOUT_ALARM : { result = QObject::tr("HD in treatment re-circ sub-mode for too long." ); break; } + case GuiAlarmID::ALARM_ID_CARTRIDGE_DOOR_OPENED : { result = QObject::tr("HD cartridge door opened alarm." ); break; } + case GuiAlarmID::ALARM_ID_DIALYSATE_TEMPERATURE_TOO_HIGH : { result = QObject::tr("HD dialysate temperature too high alarm." ); break; } + case GuiAlarmID::ALARM_ID_DIALYSATE_TEMPERATURE_TOO_LOW : { result = QObject::tr("HD dialysate temperature too low alarm." ); break; } + case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_SYRINGE_EMPTY : { result = QObject::tr("HD syringe empty alarm." ); break; } + case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_OCCLUSION : { result = QObject::tr("HD syringe pump occlusion alarm." ); break; } + case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_NOT_ENOUGH_HEPARIN_ALARM : { result = QObject::tr("HD syringe pump not enough Heparin alarm." ); break; } + case GuiAlarmID::ALARM_ID_HD_ARTERIAL_BUBBLE_DETECTED : { result = QObject::tr("HD arterial air bubble detected alarm." ); break; } + case GuiAlarmID::ALARM_ID_HD_ARTERIAL_BUBBLE_DETECTED_RINSEBACK : { result = QObject::tr("HD arterial air bubble detected rinseback alarm." ); break; } + case GuiAlarmID::ALARM_ID_HD_PUMP_DIRECTION_STATUS_ERROR : { result = QObject::tr("HD pump direction status error." ); break; } + case GuiAlarmID::ALARM_ID_HD_RESERVOIR_FULL_AND_DG_NOT_READY_TO_SWITCH : { result = QObject::tr("HD active reservoir is full during treatment and DG not ready to switch reservoirs." ); break; } + case GuiAlarmID::ALARM_ID_DG_SOFTWARE_FAULT : { result = QObject::tr("DG software fault.\nSoftware found itself in an unexpected state." ); break; } + case GuiAlarmID::ALARM_ID_HD_COMM_TIMEOUT : { result = QObject::tr("HD communication timeout." ); break; } + case GuiAlarmID::ALARM_ID_DG_FPGA_COMM_TIMEOUT : { result = QObject::tr("DG FPGA communication down for too long." ); break; } + case GuiAlarmID::ALARM_ID_DG_LOAD_CELL_ADC_ERROR : { result = QObject::tr("DG load cell ADC error." ); break; } + case GuiAlarmID::ALARM_ID_DG_LOAD_CELLS_TARE_WEIGHT_OUT_OF_RANGE : { result = QObject::tr("DG load cells weight out of range before tare." ); break; } + case GuiAlarmID::ALARM_ID_DG_LOAD_CELLS_INVALID_CALIBRATION : { result = QObject::tr("DG load cells invalid calibration." ); break; } + case GuiAlarmID::ALARM_ID_DG_INVALID_LOAD_CELL_VALUE : { result = QObject::tr("DG invalid load cell value." ); break; } + case GuiAlarmID::ALARM_ID_UV_REACTOR_NOT_HEALTHY : { result = QObject::tr("Inlet or Outlet UV reactor not healthy." ); break; } + case GuiAlarmID::ALARM_ID_DG_FAN_RPM_OUT_OF_RANGE : { result = QObject::tr("DG fan RPM out of range." ); break; } + case GuiAlarmID::ALARM_ID_DG_CONCENTRATE_PUMP_FAULT : { result = QObject::tr("DG concentrate pump fault." ); break; } + case GuiAlarmID::ALARM_ID_CP1_SPEED_CONTROL_ERROR : { result = QObject::tr("DG concentrate pump CP1 speed control error." ); break; } + case GuiAlarmID::ALARM_ID_CP2_SPEED_CONTROL_ERROR : { result = QObject::tr("DG concentrate pump CP2 speed control error." ); break; } + case GuiAlarmID::ALARM_ID_DRAIN_PUMP_RPM_OUT_OF_RANGE : { result = QObject::tr("DG drain pump RPM out of range." ); break; } + case GuiAlarmID::ALARM_ID_DRAIN_PUMP_OFF_FAULT : { result = QObject::tr("DG drain pump off fault." ); break; } + case GuiAlarmID::ALARM_ID_FLOW_RATE_OUT_OF_UPPER_RANGE : { result = QObject::tr("DG flow rate out of upper range." ); break; } + case GuiAlarmID::ALARM_ID_FLOW_RATE_OUT_OF_LOWER_RANGE : { result = QObject::tr("DG flow rate out of lower range." ); break; } + case GuiAlarmID::ALARM_ID_RO_PUMP_FLOW_RATE_OUT_OF_RANGE : { result = QObject::tr("RO pump flow rate out of range." ); break; } + case GuiAlarmID::ALARM_ID_RO_PUMP_OFF_FAULT : { result = QObject::tr("DG RO pump off fault." ); break; } + case GuiAlarmID::ALARM_ID_RO_PUMP_PRESSURE_OUT_OF_RANGE : { result = QObject::tr("DG RO pump pressure out of range." ); break; } + case GuiAlarmID::ALARM_ID_DG_TEMPERATURE_SENSOR_FAULT : { result = QObject::tr("DG temperature sensor error flag fault." ); break; } + case GuiAlarmID::ALARM_ID_DG_TEMPERATURE_SENSORS_ADC_FAULT : { result = QObject::tr("DG temperature sensors ADC fault." ); break; } + case GuiAlarmID::ALARM_ID_DG_HEATERS_NEGATIVE_COLD_JUNCTION_TEMPERATURE : { result = QObject::tr("DG heaters cold junction temperature out of range." ); break; } + case GuiAlarmID::ALARM_ID_DG_HEATERS_FAULT : { result = QObject::tr("DG heaters fault." ); break; } + case GuiAlarmID::ALARM_ID_DG_THERMISTORS_TEMPERATURE_OUT_OF_RANGE : { result = QObject::tr("DG thermistors/sensors temperature out of range." ); break; } + case GuiAlarmID::ALARM_ID_DG_BAD_INLET_WATER_QUALITY : { result = QObject::tr("Inlet water quality is bad (temperature, conductivity, pressure)." ); break; } + case GuiAlarmID::ALARM_ID_INLET_WATER_PRESSURE_FAULT : { result = QObject::tr("Inlet water pressure fault." ); break; } + case GuiAlarmID::ALARM_ID_PRESSURE_SENSOR_FAULT : { result = QObject::tr("Pressure sensor fault." ); break; } + case GuiAlarmID::ALARM_ID_RO_REJECTION_RATIO_OUT_OF_RANGE : { result = QObject::tr("RO rejection ratio out of range." ); break; } + case GuiAlarmID::ALARM_ID_CONDUCTIVITY_SENSOR_FAULT : { result = QObject::tr("Conductivity sensor fault." ); break; } + case GuiAlarmID::ALARM_ID_DG_DIALYSATE_FILL_OUT_OF_TIME : { result = QObject::tr("DG dialysate fill runs out of time." ); break; } + case GuiAlarmID::ALARM_ID_DG_FLOW_METER_CHECK_FAILURE : { result = QObject::tr("DG flow meter check failure alarm." ); break; } + case GuiAlarmID::ALARM_ID_DG_PRIMARY_HEATERS_INTERNAL_TEMP_OUT_OF_RANGE : { result = QObject::tr("DG primary heaters internal temperature out of range." ); break; } + case GuiAlarmID::ALARM_ID_DG_TRIMMER_HEATER_INTERNAL_TEMP_OUT_OF_RANGE : { result = QObject::tr("DG trimmer heater internal temperature out of range." ); break; } + case GuiAlarmID::ALARM_ID_DG_HEATERS_ON_WITH_NO_FLOW_TIMEOUT : { result = QObject::tr("DG heaters on with no flow time out." ); break; } + case GuiAlarmID::ALARM_ID_DG_DRAIN_CIRCULATION_LINE_TIMEOUT : { result = QObject::tr("DG drain circulation line timeout." ); break; } + case GuiAlarmID::ALARM_ID_BLOOD_SITTING_WARNING : { result = QObject::tr("Blood sitting too long warning (>4 min)." ); break; } + case GuiAlarmID::ALARM_ID_END_OF_TREATMENT_ALARM : { result = QObject::tr("HD end of treatment alarm (user not acting to end treatment)." ); break; } + case GuiAlarmID::ALARM_ID_PRIME_COMPLETED_MEDIUM : { result = QObject::tr("HD prime completed medium priority alarm." ); break; } + case GuiAlarmID::ALARM_ID_SALINE_BOLUS_VOLUME_CHECK_FAILURE : { result = QObject::tr("HD Saline bolus volume check failure." ); break; } + case GuiAlarmID::ALARM_ID_RINSEBACK_VOLUME_CHECK_FAILURE : { result = QObject::tr("HD rinseback volume check failure." ); break; } + case GuiAlarmID::ALARM_ID_END_TREATMENT_TIMEOUT_ALARM : { result = QObject::tr("HD end treatment sub-mode timeout alarm." ); break; } + case GuiAlarmID::ALARM_ID_BLOOD_PRIME_VOLUME_CHECK_FAILURE : { result = QObject::tr("HD blood prime volume check failure." ); break; } + case GuiAlarmID::ALARM_ID_HD_SYRINGE_DETECTED : { result = QObject::tr("HD syringe detected alarm." ); break; } + case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_SYRINGE_REMOVED : { result = QObject::tr("HD syringe pump syringe removed alarm." ); break; } + case GuiAlarmID::ALARM_ID_EMPTY_SALINE_BAG : { result = QObject::tr("HD Saline bag is empty." ); break; } + case GuiAlarmID::ALARM_ID_DIALYSATE_TEMPERATURE_HIGH : { result = QObject::tr("HD dialysate temperature too high alarm." ); break; } + case GuiAlarmID::ALARM_ID_DIALYSATE_TEMPERATURE_LOW : { result = QObject::tr("HD dialysate temperature too low alarm." ); 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_END_OF_TREATMENT_WARNING : { result = QObject::tr("HD end of treatment warning." ); break; } + case GuiAlarmID::ALARM_ID_PRIME_COMPLETED_LOW_PRIORITY : { result = QObject::tr("HD prime completed low priority alarm." ); break; } + case GuiAlarmID::ALARM_ID_PRIME_OUT_OF_TIME : { result = QObject::tr("HD prime out of time alarm." ); break; } + case GuiAlarmID::ALARM_ID_HD_PRIME_PURGE_AIR_TIME_OUT : { result = QObject::tr("HD time out on prime sub-mode purge air state." ); break; } + case GuiAlarmID::ALARM_ID_PRIME_DIALYSATE_DIALYZER_TIME_OUT : { result = QObject::tr("HD prime dialysate dialyzer time out alarm." ); break; } + case GuiAlarmID::ALARM_ID_PRIME_DIALYSATE_BYPASS_TIME_OUT : { result = QObject::tr("HD prime dialysate bypass time out alarm." ); break; } + case GuiAlarmID::ALARM_ID_PRE_TREATMENT_DRY_SELF_TEST_FAILURE : { result = QObject::tr("HD pre-treatment mode dry self-tests failure." ); break; } + case GuiAlarmID::ALARM_ID_PRE_TREATMENT_WET_SELF_TEST_FAILURE : { result = QObject::tr("HD pre-treatment mode wet self-tests failure." ); break; } + case GuiAlarmID::ALARM_ID_RTC_BATTERY_LOW : { result = QObject::tr("RTC battery low." ); break; } + case GuiAlarmID::ALARM_ID_RTC_RAM_OPS_ERROR : { result = QObject::tr("RTC (i.e read time) or RAM operations failure (read or write)." ); break; } + case GuiAlarmID::ALARM_ID_TREATMENT_STOPPED_AFTER_RINSEBACK : { result = QObject::tr("HD in treatment stopped sub-mode after rinseback completed (no escalation)." ); break; } + case GuiAlarmID::ALARM_ID_INSTALL_NEW_CARTRIDGE : { result = QObject::tr("HD needs new cartridge to be installed." ); break; } + case GuiAlarmID::ALARM_ID_CARTRIDGE_INSTALLED_IMPROPERLY : { result = QObject::tr("HD cartridge installed improperly alarm." ); break; } + case GuiAlarmID::ALARM_ID_NO_CARTRIDGE_LOADED : { result = QObject::tr("HD no cartridge loaded alarm." ); break; } + case GuiAlarmID::ALARM_ID_CARTRIDGE_REMOVAL_FAILURE : { result = QObject::tr("HD fail to remove cartridge alarm." ); break; } + case GuiAlarmID::ALARM_ID_BICARB_CONDUCTIVITY_OUT_OF_RANGE : { result = QObject::tr("Bicarb conductivity out of range during bicarb pump check alarm." ); break; } + case GuiAlarmID::ALARM_ID_DG_RESERVOIR_DRAIN_TIMEOUT : { result = QObject::tr("DG reservoir drain time out." ); break; } + case GuiAlarmID::ALARM_ID_DG_RESERVOIR_FILL_TIMEOUT : { result = QObject::tr("DG reservoir fill time out." ); break; } + case GuiAlarmID::ALARM_ID_DG_RESERVOIR_LEAK_TIMEOUT : { result = QObject::tr("DG reservoir leak time out." ); break; } + case GuiAlarmID::ALARM_ID_DG_TEMP_SENSORS_DIFF_OUT_OF_RANGE : { result = QObject::tr("DG temperature sensors difference out of range." ); break; } + case GuiAlarmID::ALARM_ID_DG_HEAT_DISINFECT_TARGET_TEMP_TIMEOUT : { result = QObject::tr("DG heat disinfect target temperature time out (could not reach to temperature)." ); break; } + case GuiAlarmID::ALARM_ID_DG_HEAT_DISINFECT_INLET_PRES_AND_TEMP_SNSRS_OUT : { result = QObject::tr("DG heat disinfect inlet pressure and temperature sensors out of range." ); break; } + case GuiAlarmID::ALARM_ID_DG_HEAT_DISINFECT_INLET_COND_AND_TEMP_OUT : { result = QObject::tr("DG heat disinfect inlet conductivity and temperature out of range." ); break; } + case GuiAlarmID::ALARM_ID_DG_CHEM_DISINFECT_TARGET_TEMP_TIMEOUT : { result = QObject::tr("DG chemical disinfect could not reach to target temperature." ); break; } + case GuiAlarmID::ALARM_ID_DG_CHEM_DISINFECT_INLET_PRES_AND_TEMP_SNSRS_OUT : { result = QObject::tr("DG chemical disinfect inlet pressure and temperature sensors out of range." ); break; } + case GuiAlarmID::ALARM_ID_DG_CHEM_DISINFECT_INLET_COND_AND_TEMP_OUT : { result = QObject::tr("DG chemical disinfect inlet conductivity and temperature out of range." ); break; } + case GuiAlarmID::NUM_OF_ALARM_IDS : { result = QObject::tr("Total number of alarms." ); break; } default: result = QObject::tr("ALARM_ID_UNDEFINED [%1]").arg(int(vAlarmID));