Index: AlarmMapping.csv =================================================================== diff -u -r200398eaf784dd2965023151086ba1939d2eb746 -rfe7605e216422cd8a9e39eca7cc609730a56fa32 --- AlarmMapping.csv (.../AlarmMapping.csv) (revision 200398eaf784dd2965023151086ba1939d2eb746) +++ AlarmMapping.csv (.../AlarmMapping.csv) (revision fe7605e216422cd8a9e39eca7cc609730a56fa32) @@ -83,7 +83,7 @@ 82,"HD syringe pump DAC write failure." 83,"HD syringe pump is running while the BP is off." 84,"HD venous pressure sensor not being read." - 85,"HD venous pressure sensor temperature out of range error." + 85,"HD pump track latch opened alarm." 86,"HD BP occlusion sensor not being read." 87,"DG heating invalid calibration record." 88,"DG concentrate pumps hall sensor out of range." @@ -115,10 +115,10 @@ 114,"HD venous air bubble detector self-test failure." 115,"DG temperature sensor out of range." 116,"DG temperature sensor ADC out of range." - 117,"DG primary heater internal temperature out of range." - 118,"DG primary heater cold junction temperature out of range." - 119,"DG trimmer heater internal temperature out of range." - 120,"DG trimmer heater cold junction temperature out of range." + 117,"This alarm ID is available for use." + 118,"This alarm ID is available for use." + 119,"This alarm ID is available for use." + 120,"This alarm ID is available for use." 121,"DG main primary heater voltage out of range." 122,"DG small primary heater voltage out of range." 123,"DG trimmer heater voltage out of range." @@ -159,8 +159,8 @@ 158,"This alarm ID is available for use." 159,"Dialysate inlet pump failed flow vs motor speed check." 160,"Blood pump rotor speed too high." - 161,"Blood flow sensor signal strength too low." - 162,"Dialysate flow sensor signal strength too low." + 161,"This alarm ID is available for use." + 162,"This alarm ID is available for use." 163,"HD sees primary load cell for reservoir 1 change too much too fast." 164,"HD sees primary load cell for reservoir 2 change too much too fast." 165,"HD in treatment rinseback operation timeout." Index: denali.pro =================================================================== diff -u -r2d37cfe6593a90633a9db1fa5136f8fc43b56188 -rfe7605e216422cd8a9e39eca7cc609730a56fa32 --- denali.pro (.../denali.pro) (revision 2d37cfe6593a90633a9db1fa5136f8fc43b56188) +++ denali.pro (.../denali.pro) (revision fe7605e216422cd8a9e39eca7cc609730a56fa32) @@ -263,6 +263,7 @@ sources/view/VEventSpy.h \ sources/view/VView.h \ sources/view/VPowerOff.h \ + sources/view/VGeneralEvent.h \ sources/device/DeviceView.h \ \ # ---------- Views - POST sources/view/dg/data/post/VDGPOSTData.h \ @@ -516,6 +517,7 @@ sources/view/VTreatmentCreate.cpp \ sources/view/VEventSpy.cpp \ sources/view/VPowerOff.cpp \ + sources/view/VGeneralEvent.cpp \ sources/device/DeviceView.cpp \ \ # ---------- Views - POST sources/view/dg/data/post/VDGPOSTData.cpp \ Index: denali.pro.user =================================================================== diff -u -r968c7861b6caf1906c6b3ac34ae13018c6f1bf2b -rfe7605e216422cd8a9e39eca7cc609730a56fa32 --- denali.pro.user (.../denali.pro.user) (revision 968c7861b6caf1906c6b3ac34ae13018c6f1bf2b) +++ denali.pro.user (.../denali.pro.user) (revision fe7605e216422cd8a9e39eca7cc609730a56fa32) @@ -1,6 +1,6 @@ - + EnvironmentId Index: sources/AlarmGenerator.cpp =================================================================== diff -u -r27cc308ff5113a9386899d3c8f8b29962a8498e1 -rfe7605e216422cd8a9e39eca7cc609730a56fa32 --- sources/AlarmGenerator.cpp (.../AlarmGenerator.cpp) (revision 27cc308ff5113a9386899d3c8f8b29962a8498e1) +++ sources/AlarmGenerator.cpp (.../AlarmGenerator.cpp) (revision fe7605e216422cd8a9e39eca7cc609730a56fa32) @@ -23,8 +23,8 @@ GuiAlarmFlags::ALARM_STATE_FLAG_BIT_POS_NO_RESUME , \ GuiAlarmFlags::ALARM_STATE_FLAG_BIT_POS_NO_RINSEBACK , \ GuiAlarmFlags::ALARM_STATE_FLAG_BIT_POS_NO_END_TREATMENT, \ - GuiAlarmFlags::ALARM_STATE_FLAG_BIT_POS_NO_NEW_TREATMENT, \ } + // GuiAlarmFlags::ALARM_STATE_FLAG_BIT_POS_NO_NEW_TREATMENT, \ // TODO : recently removed. 3/7/22 // namespace using namespace Gui; Index: sources/gui/GuiGlobals.cpp =================================================================== diff -u -r30a3a58cde0e82d66c8c5f242ec550007e20b694 -rfe7605e216422cd8a9e39eca7cc609730a56fa32 --- sources/gui/GuiGlobals.cpp (.../GuiGlobals.cpp) (revision 30a3a58cde0e82d66c8c5f242ec550007e20b694) +++ sources/gui/GuiGlobals.cpp (.../GuiGlobals.cpp) (revision fe7605e216422cd8a9e39eca7cc609730a56fa32) @@ -21,6 +21,7 @@ #include "Logger.h" #include "GuiView.h" #include "VEventSpy.h" +#include "VGeneralEvent.h" // POST #include "VHDPOSTData.h" Index: sources/gui/qml/components/DebugDataColumn.qml =================================================================== diff -u -r27cc308ff5113a9386899d3c8f8b29962a8498e1 -rfe7605e216422cd8a9e39eca7cc609730a56fa32 --- sources/gui/qml/components/DebugDataColumn.qml (.../DebugDataColumn.qml) (revision 27cc308ff5113a9386899d3c8f8b29962a8498e1) +++ sources/gui/qml/components/DebugDataColumn.qml (.../DebugDataColumn.qml) (revision fe7605e216422cd8a9e39eca7cc609730a56fa32) @@ -32,7 +32,7 @@ property string textObjectName: "_DebugDataColumn" width : 150 - spacing : -14 + spacing : -15 Text { id: _title text : _root.title @@ -41,6 +41,7 @@ color: Colors.textMain font.pixelSize: fontPixelSizeTitle font.underline: true + bottomPadding: 5 } Repeater { id: _repeater model: _root.model Index: sources/gui/qml/dialogs/DiagnosticsDialog.qml =================================================================== diff -u -r26a05ea7e6dd3078331b2175927b00327c7419b4 -rfe7605e216422cd8a9e39eca7cc609730a56fa32 --- sources/gui/qml/dialogs/DiagnosticsDialog.qml (.../DiagnosticsDialog.qml) (revision 26a05ea7e6dd3078331b2175927b00327c7419b4) +++ sources/gui/qml/dialogs/DiagnosticsDialog.qml (.../DiagnosticsDialog.qml) (revision fe7605e216422cd8a9e39eca7cc609730a56fa32) @@ -59,9 +59,10 @@ } DebugDataColumn { id: _DGROPumpColumn + textObjectName :"_DGROPumpData" + title : qsTr(" ROP ") x: col(0) y: row(0) - title: qsTr(" ROP ") model: [ vDGROPump.pressure .toFixed(2) , vDGROPump.flowRate .toFixed(2) , @@ -73,13 +74,13 @@ "Flow", "PWM", "stt"] - textObjectName: "_DGROPumpData" } DebugDataColumn { id: _DGDrainPumpColumn + textObjectName :"_DGDrainPumpData" + title : qsTr(" DRP ") x: col(1) y: row(0) - title: qsTr(" DRP ") model: [ vDGDrainPump.rpmi , vDGDrainPump.dac , @@ -92,13 +93,13 @@ "stt", "Spd", ] - textObjectName: "_DGDrainPumpData" } DebugDataColumn { id: _DGPressuresColumn + textObjectName :"_DGPressuresData" + title : qsTr(" Prssr ") x: col(2) y: row(0) - title: qsTr(" Prssr ") model: [ vDGPressures.roInletPSI .toFixed(2) , vDGPressures.roOutletPSI .toFixed(2) , @@ -111,13 +112,13 @@ "PRd", "PDr", ] - textObjectName: "_DGPressuresData" } DebugDataColumn { id: _DGReservoirColumn + textObjectName :"_DGReservoirData" + title : qsTr(" Rsrvr ") x: col(3) y: row(0) - title: qsTr(" Rsrvr ") model: [ vDGReservoir.activeReservoir , vDGReservoir.fillToVol , @@ -128,13 +129,13 @@ "Fil", "Drn", ] - textObjectName: "_DGReservoirData" } DebugDataColumn { id: _DGHeatersColumn + textObjectName :"_DGHeatersData" + title : qsTr(" Heatrs ") x: col(4) y: row(0) - title: qsTr(" Heatrs ") model: [ vDGHeaters.mainPrimaryDC .toFixed(2), vDGHeaters.smallPrimaryDC .toFixed(2), @@ -145,13 +146,13 @@ "HP2", "HR", ] - textObjectName: "_DGHeatersData" } DebugDataColumn { id: _LoadCellReadingsColumn + textObjectName :"_DGLoadCellReadingsData" + title : qsTr(" LoadCl ") x: col(5) y: row(0) - title: qsTr(" LoadCl ") model: [ vDGLoadCellReadings.reservoir1Prim .toFixed(2) , vDGLoadCellReadings.reservoir1Bkup .toFixed(2) , @@ -164,13 +165,13 @@ "B1", "B2", ] - textObjectName: "_DGLoadCellReadingsData" } DebugDataColumn { id: _DGTemperaturesColumn + textObjectName :"_DGTemperaturesData" + title : qsTr(" Tmprtr ") x: col(6) y: row(0) - title: qsTr(" Tmprtr ") model: [ vDGTemperatures.inletPrimaryHeater .toFixed(2) , vDGTemperatures.outletPrimaryHeater .toFixed(2) , @@ -199,13 +200,13 @@ "HP.Int", "HR.Int", ] - textObjectName: "_DGTemperaturesData" } DebugDataColumn { id: _DGConductivityColumn - x: col(3.8) - y: row(3.5) - title: qsTr(" Conduct ") + textObjectName :"_DGConductivityData" + title : qsTr(" Conduct ") + x: col(3.7) + y: row(3.0) model: [ vDGConductivity.RORejectionRatio .toFixed(3), vDGConductivity.CPi .toFixed(1), @@ -220,14 +221,13 @@ "CD1" , "CD2" , ] - - textObjectName: "_DGConductivityData" } DebugDataColumn { id: _HDAirColumn + textObjectName :"_HDAirData" + title : qsTr(" Air Status ") x: col(6) y: row(4.1) - title: qsTr(" Air Status ") model: [ vHDAirBubble .venousAirBubbleStatus , vHDAirTrap .airTrapLowerLevel , @@ -238,22 +238,23 @@ "ATll", "ATul", ] - textObjectName: "_HDAirData" } DebugDataColumn { id: _DGOperationModeColumn + textObjectName :"_DGOperationModeData" + title : qsTr(" DG Mode ") x: col(2.5) - y: row(2) - title: qsTr(" DG Mode ") + y: row(1.7) model: [ vDGOperationMode.text ] - textObjectName: "_DGOperationModeData" + fontPixelSizeText: 30 } // --- HD --- DebugDataColumn { id: _HDBloodFlowColumn + textObjectName :"_HDBloodFlowData" + title : qsTr(" BP ") x: col(0) - y: row(2.8) - title: qsTr(" BP ") + y: row(2.4) model: [ vTreatmentBloodFlow.bloodFlow_FlowSetPoint , vTreatmentBloodFlow.bloodFlow_MeasuredFlow .toFixed(2) , @@ -274,13 +275,13 @@ "PWM", "Rtr.Cnt", ] - textObjectName: "_HDBloodFlowData" } DebugDataColumn { id: _HDDialysateInletFlowColumn + textObjectName :"_HDInletFlowData" + title : qsTr(" DPi ") x: col(1.2) - y: row(2.8) - title: qsTr(" DPi ") + y: row(2.4) model: [ vTreatmentDialysateFlow.dialysateFlow_FlowSetPoint .toFixed(2) , vTreatmentDialysateFlow.dialysateFlow_MeasuredFlow .toFixed(2) , @@ -299,13 +300,13 @@ "MC.Cur", "PWM", ] - textObjectName: "_HDInletFlowData" } DebugDataColumn { id: _HDDialysateOutletFlowColumn + textObjectName :"_HDOutletFlowData" + title : qsTr(" UF/DPo ") x: col(2.4) - y: row(2.8) - title: qsTr(" UF/DPo ") + y: row(2.4) model: [ vTreatmentUltrafiltration.ultrafiltration_RefUFVol .toFixed(3) , vTreatmentUltrafiltration.ultrafiltration_MeasUFVol .toFixed(3) , @@ -324,13 +325,13 @@ "MC.Cur", "PWM", ] - textObjectName: "_HDOutletFlowData" } DebugDataColumn { id: _HDPressureOcclusionColumn + textObjectName :"_PressureOcclusionData" + title : qsTr(" Prsr Oc ") x: col(3.7) - y: row(2) - title: qsTr(" Prsr Oc ") + y: row(1.7) model: [ vTreatmentPressureOcclusion.arterialPressure .toFixed(2) , vTreatmentPressureOcclusion.venousPressure .toFixed(2) , @@ -341,14 +342,13 @@ "PBo" , "OB" , ] - - textObjectName: "_PressureOcclusionData" } DebugDataColumn { id: _HDSyringePumpColumn + textObjectName :"_HDSyringePumpData" + title : qsTr(" Syringe ") x: col(4.6) - y: row(2) - title: qsTr(" Syringe ") + y: row(1.7) model: [ vHDSyringePump.syringePumpState , vHDSyringePump.heparinState , @@ -376,32 +376,22 @@ "status", ] - textObjectName: "_HDSyringePumpColumn" } DebugDataColumn { id: _HDOperationModeColumn + textObjectName :"_HDOperationModeData" x: col(0.5) - y: row(2) - title: qsTr(" HD Mode ") + y: row(1.7) + title : qsTr(" HD Mode ") model: [ vHDOperationMode.text ] - textObjectName: "_HDOperationModeData" + fontPixelSizeText: 30 } - Text { id : _canbusFaultCountText - x: col(0) - y: row(6.8) - property int count: 0 - visible: true - text: qsTr("CAN Faults: %1").arg(count) - horizontalAlignment: Text.AlignLeft - color: Colors.textMain - font.pixelSize: 38 - } - DebugDataColumn { id: _DGValvesStatesColumn + textObjectName :"_DGValvesStatesData" + title : qsTr(" DG Valves ") x: col(7) y: row(0) - title: qsTr(" DG Valves ") model: [ vDGValvesStates.valveStates_01, vDGValvesStates.valveStates_02, @@ -432,14 +422,13 @@ "VR2", "VRD", ] - - textObjectName: "_DGValveData" } DebugDataColumn { id: _HDBloodLeakColumn + textObjectName :"_HDBloodLeakData" + title : qsTr(" BLD ") x: col(7) - y: row(4.4) - title: qsTr(" BLD ") + y: row(4.5) model: [ vHDBloodLeak.bloodLeakDetectSetPoint , vHDBloodLeak.bloodLeakZeroedStatus , @@ -453,102 +442,127 @@ "DtLvl" , ] - - textObjectName: "_DGConductivityData" } - TouchRect { - x : col(6.6) - y : row(5.8) - width : 150 - height : 35 - text.text : "Get Version" - onClicked : vAdjustmentVersions.doAdjustment() + // TODO: Should be unnecessary since the first communication message with UI/HD is the version. + // TouchRect { + // x : col(6.6) + // y : row(5.8) + // width : 150 + // height : 35 + // text.text : "Get Version" + // onClicked : vAdjustmentVersions.doAdjustment() + // } + + DebugDataColumn { id: _HDAlarmTopColumn + textObjectName :"_HDAlarmTopData" + title : qsTr(" Alarms ") + x: col(6) + y: row(5.5) + model: [ _alarmItem.alarm_AlarmID ] + label: [ "Top" ] } DebugDataColumn { id: _HDVersionsColumn + textObjectName :"_HDVersionsData" + title : "" x: col(6.8) y: row(6) fontPixelSizeText: 30 - title: "" - model: [ "HD: v%1.%2.%3-%4 %5 v%6.%7 %8 CRev: %9" + model: [ "DG: v%1.%2.%3-%4 v%5.%6.%7-%8 c%9" .arg(vAdjustmentVersions.hdVerMajor) .arg(vAdjustmentVersions.hdVerMinor) .arg(vAdjustmentVersions.hdVerMicro) .arg(vAdjustmentVersions.hdVerBuild) - .arg(vAdjustmentVersions.hdVerFPGAId) .arg(vAdjustmentVersions.hdVerFPGAMajor) .arg(vAdjustmentVersions.hdVerFPGAMinor) .arg(vAdjustmentVersions.hdVerFPGALab) + .arg(vAdjustmentVersions.hdVerFPGAId) .arg(vAdjustmentVersions.hdVerCompatibilityRev) ] - textObjectName: "_HDVersions" } + DebugDataColumn { id: _DGVersionsColumn + textObjectName :"_DGVersionsData" + title : "" x: col(6.8) y: row(6.5) fontPixelSizeText: 30 - title: "" - model: [ "DG: v%1.%2.%3-%4 %5 v%6.%7 %8 CRev: %9" + model: [ "DG: v%1.%2.%3-%4 v%5.%6.%7-%8 c%9" .arg(vAdjustmentVersions.dgVerMajor) .arg(vAdjustmentVersions.dgVerMinor) .arg(vAdjustmentVersions.dgVerMicro) .arg(vAdjustmentVersions.dgVerBuild) - .arg(vAdjustmentVersions.dgVerFPGAId) .arg(vAdjustmentVersions.dgVerFPGAMajor) .arg(vAdjustmentVersions.dgVerFPGAMinor) .arg(vAdjustmentVersions.dgVerFPGALab) + .arg(vAdjustmentVersions.dgVerFPGAId) .arg(vAdjustmentVersions.dgVerCompatibilityRev) ] - textObjectName: "_DGVersions" } + DebugDataColumn { id: _PreTreatmentStatesColumn + textObjectName :"_PreTreatmentStatesData" + title : qsTr(" PreTx States ") + x: col(0.7) + y: row(5.5) + model: [ "%1,%2,%3,%4,%5,%6,%7,%8" + .arg(vPreTreatmentStates.subMode ) + .arg(vPreTreatmentStates.waterSampleState ) + .arg(vPreTreatmentStates.selfTestNoCartridgeState) + .arg(vPreTreatmentStates.installationState ) + .arg(vPreTreatmentStates.selfTestDryState ) + .arg(vPreTreatmentStates.primeState ) + .arg(vPreTreatmentStates.recirculateState ) + .arg(vPreTreatmentStates.patientConnectionState ) + ] + } Text { id : _mouseEventCountText - x: col(2) - y: row(6.8) + x: col(0.3) + y: row(6.4) visible: true - text: String("Touch Count: %1,%2") + text: String("Touch: %1,%2") .arg(GuiEventSpy.touchCount /*.toString().padStart(4,'0')*/ ) .arg(GuiEventSpy.touchPoints /*.toString().padStart(4,'0')*/ ) horizontalAlignment: Text.AlignLeft color: Colors.textMain - font.pixelSize: 38 + font.pixelSize: 30 MouseArea { anchors.fill: _mouseEventCountText onClicked: GuiEventSpy.doTouchReset() } } - DebugDataColumn { id: _PreTreatmentStates - x: col(1.5) - y: row(6) - title: qsTr(" PreTx States ") - model: [ "%1, %2, %3, %4, %5, %6, %7, %8" - .arg(vPreTreatmentStates.subMode ) - .arg(vPreTreatmentStates.waterSampleState ) - .arg(vPreTreatmentStates.selfTestNoCartridgeState) - .arg(vPreTreatmentStates.installationState ) - .arg(vPreTreatmentStates.selfTestDryState ) - .arg(vPreTreatmentStates.primeState ) - .arg(vPreTreatmentStates.recirculateState ) - .arg(vPreTreatmentStates.patientConnectionState ) - ] - textObjectName: "_PreTreatmentStates" + Text { id : _canbusFaultCountText + text: qsTr("CANerr: %1").arg(count) + x: col(0.2) + y: row(6.8) + property int count: 0 + visible: true + horizontalAlignment: Text.AlignLeft + color: Colors.textMain + font.pixelSize: 30 } - DebugDataColumn { id: _HDAlarmTop - x: col(3) - y: row(6) - title: qsTr(" Alarms ") - model: [ - _alarmItem.alarm_AlarmID, - ] - label: [ - "Top" , - ] + Text { id : _hdResetInformation + x: col(2.0) + y: row(6.4) + visible: true + text: "HDrst:" + vGeneralEvent.hdReset + horizontalAlignment: Text.AlignLeft + color: Colors.textMain + font.pixelSize: 30 + } - textObjectName: "_HDAlarmTopData" + Text { id : _dgResetInformation + x: col(2.0) + y: row(6.8) + visible: true + text: "DGrst:" + vGeneralEvent.dgReset + horizontalAlignment: Text.AlignLeft + color: Colors.textMain + font.pixelSize: 30 } Connections { target: _GuiView Index: sources/gui/qml/main.qml =================================================================== diff -u -r2124420a19819f672e9180979ff3762dc083eb7f -rfe7605e216422cd8a9e39eca7cc609730a56fa32 --- sources/gui/qml/main.qml (.../main.qml) (revision 2124420a19819f672e9180979ff3762dc083eb7f) +++ sources/gui/qml/main.qml (.../main.qml) (revision fe7605e216422cd8a9e39eca7cc609730a56fa32) @@ -22,6 +22,7 @@ import Gui.Actions 0.1 // View classes +import VGeneralEvent 0.1 import VHDAccelerometer 0.1 import VHDSyringePump 0.1 import VHDBloodLeak 0.1 @@ -151,6 +152,13 @@ } + VGeneralEvent { id: vGeneralEvent } + VHDAccelerometer { id: vHDAccelerometer } + VHDSyringePump { id: vHDSyringePump } + VHDAirBubble { id: vHDAirBubble } + VHDBloodLeak { id: vHDBloodLeak } + VHDAirTrap { id: vHDAirTrap } + VTreatmentDialysateFlow { id: vTreatmentDialysateFlow } VTreatmentPressureOcclusion { id: vTreatmentPressureOcclusion } VTreatmentUltrafiltration { id: vTreatmentUltrafiltration } @@ -159,11 +167,6 @@ VTreatmentRinseback { id: vTreatmentRinseback } VTreatmentRecirculate { id: vTreatmentRecirculate } VTreatmentStop { id: vTreatmentStop } - VHDAccelerometer { id: vHDAccelerometer } - VHDSyringePump { id: vHDSyringePump } - VHDAirBubble { id: vHDAirBubble } - VHDBloodLeak { id: vHDBloodLeak } - VHDAirTrap { id: vHDAirTrap } // ---- DG VDGDrainPump { id: vDGDrainPump } VDGHeaters { id: vDGHeaters } Index: sources/model/hd/alarm/MAlarmMapping.cpp =================================================================== diff -u -r30a3a58cde0e82d66c8c5f242ec550007e20b694 -rfe7605e216422cd8a9e39eca7cc609730a56fa32 --- sources/model/hd/alarm/MAlarmMapping.cpp (.../MAlarmMapping.cpp) (revision 30a3a58cde0e82d66c8c5f242ec550007e20b694) +++ sources/model/hd/alarm/MAlarmMapping.cpp (.../MAlarmMapping.cpp) (revision fe7605e216422cd8a9e39eca7cc609730a56fa32) @@ -7,7 +7,7 @@ * * \file MAlarmMapping.cpp * \author (last) Behrouz NematiPour - * \date (last) 24-Feb-2022 + * \date (last) 07-Mar-2022 * \author (original) Behrouz NematiPour * \date (original) 03-May-2021 * @@ -118,7 +118,7 @@ /*0082*/case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_DAC_WRITE_ERROR : { result = QObject::tr("HD syringe pump DAC write failure." ); break; } /* 82*/ /*0083*/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; } /* 83*/ /*0084*/case GuiAlarmID::ALARM_ID_HD_VENOUS_PRESSURE_READ_TIMEOUT_ERROR : { result = QObject::tr("HD venous pressure sensor not being read." ); break; } /* 84*/ -/*0085*/case GuiAlarmID::ALARM_ID_____AVAILABLE_25 : { result = QObject::tr("This alarm ID is available for use." ); break; } /* 85*/ +/*0085*/case GuiAlarmID::ALARM_ID_PUMP_TRACK_LATCH_OPENED : { result = QObject::tr("HD pump track latch opened alarm." ); break; } /* 85*/ /*0086*/case GuiAlarmID::ALARM_ID_HD_BP_OCCLUSION_READ_TIMEOUT_ERROR : { result = QObject::tr("HD BP occlusion sensor not being read." ); break; } /* 86*/ /*0087*/case GuiAlarmID::ALARM_ID_DG_HEATING_INVALID_CAL_RECORD : { result = QObject::tr("DG heating invalid calibration record." ); break; } /* 87*/ /*0088*/case GuiAlarmID::ALARM_ID_DG_CONC_PUMP_HALL_SENSOR_OUT_OF_RANGE : { result = QObject::tr("DG concentrate pumps hall sensor out of range." ); break; } /* 88*/ @@ -150,10 +150,10 @@ /*0114*/case GuiAlarmID::ALARM_ID_HD_VENOUS_BUBBLE_SELF_TEST_FAILURE : { result = QObject::tr("HD venous air bubble detector self-test failure." ); break; } /* 114*/ /*0115*/case GuiAlarmID::ALARM_ID_DG_TEMPERATURE_SENSOR_OUT_OF_RANGE : { result = QObject::tr("DG temperature sensor out of range." ); break; } /* 115*/ /*0116*/case GuiAlarmID::ALARM_ID_DG_TEMPERATURE_SENSOR_ADC_OUT_OF_RANGE : { result = QObject::tr("DG temperature sensor ADC out of range." ); break; } /* 116*/ -/*0117*/case GuiAlarmID::ALARM_ID_DG_PRIMARY_HEATER_INTERNAL_TEMP_OUT_OF_RANGE : { result = QObject::tr("DG primary heater internal temperature out of range." ); break; } /* 117*/ -/*0118*/case GuiAlarmID::ALARM_ID_DG_PRIMARY_HEATER_CJ_TEMP_OUT_OF_RANGE : { result = QObject::tr("DG primary heater cold junction temperature out of range." ); break; } /* 118*/ -/*0119*/case GuiAlarmID::ALARM_ID_DG_TRIMMER_HEATER_INTERNAL_TEMP_OUT_OF_RANGE : { result = QObject::tr("DG trimmer heater internal temperature out of range." ); break; } /* 119*/ -/*0120*/case GuiAlarmID::ALARM_ID_DG_TRIMMER_HEATER_CJ_TEMP_OUT_OF_RANGE : { result = QObject::tr("DG trimmer heater cold junction temperature out of range." ); break; } /* 120*/ +/*0117*/case GuiAlarmID::ALARM_ID____AVAILABLE_28 : { result = QObject::tr("This alarm ID is available for use." ); break; } /* 117*/ +/*0118*/case GuiAlarmID::ALARM_ID____AVAILABLE_29 : { result = QObject::tr("This alarm ID is available for use." ); break; } /* 118*/ +/*0119*/case GuiAlarmID::ALARM_ID____AVAILABLE_30 : { result = QObject::tr("This alarm ID is available for use." ); break; } /* 119*/ +/*0120*/case GuiAlarmID::ALARM_ID____AVAILABLE_31 : { result = QObject::tr("This alarm ID is available for use." ); break; } /* 120*/ /*0121*/case GuiAlarmID::ALARM_ID_DG_MAIN_PRIMARY_HEATER_VOLTAGE_OUT_OF_RANGE : { result = QObject::tr("DG main primary heater voltage out of range." ); break; } /* 121*/ /*0122*/case GuiAlarmID::ALARM_ID_DG_SMALL_PRIMARY_HEATER_VOLTAGE_OUT_OF_RANGE : { result = QObject::tr("DG small primary heater voltage out of range." ); break; } /* 122*/ /*0123*/case GuiAlarmID::ALARM_ID_DG_TRIMMER_HEATER_VOLTAGE_OUT_OF_RANGE : { result = QObject::tr("DG trimmer heater voltage out of range." ); break; } /* 123*/ @@ -176,26 +176,26 @@ /*0140*/case GuiAlarmID::ALARM_ID_DG_COMM_TIMEOUT : { result = QObject::tr("Dialysate generator communication timeout." ); break; } /* 140*/ /*0141*/case GuiAlarmID::ALARM_ID_AIR_TRAP_FILL_DURING_TREATMENT : { result = QObject::tr("Air trap fill timeout during treatment." ); break; } /* 141*/ /*0142*/case GuiAlarmID::ALARM_ID_OCCLUSION_BLOOD_PUMP : { result = QObject::tr("Blood pump occlusion detected." ); break; } /* 142*/ -/*0143*/case GuiAlarmID::ALARM_ID_DG_DIALYSATE_TEMPERATURE_SENSORS_DRFIT_TIMEOUT : { result = QObject::tr("DG dialysate temperature sensors drift timeout." ); break; } /* 143*/ +/*0143*/case GuiAlarmID::ALARM_ID_DG_DIALYSATE_TEMPERATURE_SENSORS_DRIFT_TIMEOUT : { result = QObject::tr("DG dialysate temperature sensors drift timeout." ); break; } /* 143*/ /*0144*/case GuiAlarmID::ALARM_ID_DG_SW_CONFIG_RECORD_INVALID_CRC : { result = QObject::tr("DG software configuration record invalid CRC." ); break; } /* 144*/ /*0145*/case GuiAlarmID::ALARM_ID_ACID_CONDUCTIVITY_OUT_OF_RANGE : { result = QObject::tr("Concentrate conductivity after adding acid out of range alarm." ); break; } /* 145*/ /*0146*/case GuiAlarmID::ALARM_ID_DIALYSATE_CONDUCTIVITY_OUT_OF_RANGE : { result = QObject::tr("Dialysate conductivity out of range." ); break; } /* 146*/ /*0147*/case GuiAlarmID::ALARM_ID_DIALYSATE_CONDUCTIVITY_FAULT : { result = QObject::tr("DG dialysate generation conductivity fault alarm." ); break; } /* 147*/ /*0148*/case GuiAlarmID::ALARM_ID_INLET_WATER_HIGH_TEMPERATURE : { result = QObject::tr("Inlet water temperature too high." ); break; } /* 148*/ /*0149*/case GuiAlarmID::ALARM_ID_INLET_WATER_LOW_TEMPERATURE : { result = QObject::tr("Inlet water temperature too low." ); break; } /* 149*/ -/*0150*/case GuiAlarmID::ALARM_ID_INLET_WATER_CONDUCTIVITY_IN_WARNING_RANGE : { result = QObject::tr("Inlet water conductivity is in warning range." ); break; } /* 150*/ +/*0150*/case GuiAlarmID::ALARM_ID_INLET_WATER_HIGH_CONDUCTIVITY : { result = QObject::tr("Inlet water conductivity too high." ); break; } /* 150*/ /*0151*/case GuiAlarmID::ALARM_ID_INLET_WATER_LOW_CONDUCTIVITY : { result = QObject::tr("Inlet water conductivity too low." ); break; } /* 151*/ /*0152*/case GuiAlarmID::ALARM_ID_INLET_WATER_LOW_PRESSURE : { result = QObject::tr("Inlet water pressure too low." ); break; } /* 152*/ /*0153*/case GuiAlarmID::ALARM_ID_PRIME_COMPLETED_HIGH : { result = QObject::tr("HD prime completed high priority alarm." ); break; } /* 153*/ /*0154*/case GuiAlarmID::ALARM_ID_NVDATA_EEPROM_OPS_FAILURE : { result = QObject::tr("EEPROM operations (read, write, erase) failure." ); break; } /* 154*/ /*0155*/case GuiAlarmID::ALARM_ID_HD_SW_CONFIG_RECORD_INVALID_CRC : { result = QObject::tr("DG software configuration record invalid CRC." ); break; } /* 155*/ /*0156*/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; } /* 156*/ -/*0157*/case GuiAlarmID::ALARM_ID_INLET_WATER_TEMPERATURE_OUT_OF_RANGE : { result = QObject::tr("Inlet water temperature is not within specified range." ); break; } /* 157*/ +/*0157*/case GuiAlarmID::ALARM_ID____AVAILABLE_23 : { result = QObject::tr("This alarm ID is available for use." ); break; } /* 157*/ /*0158*/case GuiAlarmID::ALARM_ID____AVAILABLE_24 : { result = QObject::tr("This alarm ID is available for use." ); break; } /* 158*/ /*0159*/case GuiAlarmID::ALARM_ID_DIAL_IN_PUMP_FLOW_VS_MOTOR_SPEED_CHECK : { result = QObject::tr("Dialysate inlet pump failed flow vs motor speed check." ); break; } /* 159*/ /*0160*/case GuiAlarmID::ALARM_ID_BLOOD_PUMP_ROTOR_SPEED_TOO_HIGH : { result = QObject::tr("Blood pump rotor speed too high." ); break; } /* 160*/ -/*0161*/case GuiAlarmID::ALARM_ID_BLOOD_FLOW_SIGNAL_STRENGTH_TOO_LOW : { result = QObject::tr("Blood flow sensor signal strength too low." ); break; } /* 161*/ -/*0162*/case GuiAlarmID::ALARM_ID_DIALYSATE_FLOW_SIGNAL_STRENGTH_TOO_LOW : { result = QObject::tr("Dialysate flow sensor signal strength too low." ); break; } /* 162*/ +/*0161*/case GuiAlarmID::ALARM_ID____AVAILABLE_26 : { result = QObject::tr("This alarm ID is available for use." ); break; } /* 161*/ +/*0162*/case GuiAlarmID::ALARM_ID____AVAILABLE_27 : { result = QObject::tr("This alarm ID is available for use." ); break; } /* 162*/ /*0163*/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; } /* 163*/ /*0164*/case GuiAlarmID::ALARM_ID_HD_LOAD_CELL_ACCELERATION_RES_2_ALARM : { result = QObject::tr("HD sees primary load cell for reservoir 2 change too much too fast." ); break; } /* 164*/ /*0165*/case GuiAlarmID::ALARM_ID_TREATMENT_RINSEBACK_TIMEOUT_ALARM : { result = QObject::tr("HD in treatment rinseback operation timeout." ); break; } /* 165*/ Index: sources/view/VGeneralEvent.cpp =================================================================== diff -u --- sources/view/VGeneralEvent.cpp (revision 0) +++ sources/view/VGeneralEvent.cpp (revision fe7605e216422cd8a9e39eca7cc609730a56fa32) @@ -0,0 +1,101 @@ +/*! + * + * Copyright (c) 2020-2022 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 VGeneralEvent.cpp + * \author (last) Behrouz NematiPour + * \date (last) 07-Mar-2022 + * \author (original) Behrouz NematiPour + * \date (original) 07-Mar-2022 + * + */ +#include "VGeneralEvent.h" + +// Qt +#include + +// Project +#include "GuiController.h" + +#define GET_VALUE(vVALUE) \ + Gui::GuiAlarmDataTypes fieldType; \ + fieldType = static_cast(vData.mFieldDescriptor1); \ + switch(fieldType) { \ + case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_NONE : vVALUE( 0 ); break; \ + case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_U32 : vVALUE( vData.mDataFieldU1 ); break; \ + case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_S32 : vVALUE( vData.mDataFieldS1 ); break; \ + case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_F32 : vVALUE( vData.mDataFieldF1 ); break; \ + case Gui::GuiAlarmDataTypes::ALARM_DATA_TYPE_BOOL : vVALUE( vData.mDataFieldB1 ); break; \ + default : vVALUE( 0 ); break; \ + } + + +VIEW_DEF_CLASS(VGeneralEvent) + +void View::VGeneralEvent::initConnections() { + ACTION_VIEW_CONNECTION( HDGeneralEventData ); + ACTION_VIEW_CONNECTION( DGGeneralEventData ); +} + +/*! + * \brief View::VGeneralEvent::onActionReceive + * \details received response model data handler + * \param vData - model data + */ +void View::VGeneralEvent::onActionReceive(const HDGeneralEventData &vData) +{ + QDateTime dateTime = QDateTime::currentDateTime(); + + hdEventID ( vData.mEventID ); + hdFieldDescriptor1 ( vData.mFieldDescriptor1 ); + hdDataFieldU1 ( vData.mDataFieldU1 ); + hdDataFieldS1 ( vData.mDataFieldS1 ); + hdDataFieldF1 ( vData.mDataFieldF1 ); + hdDataFieldB1 ( vData.mDataFieldB1 ); + hdFieldDescriptor2 ( vData.mFieldDescriptor2 ); + hdDataFieldU2 ( vData.mDataFieldU2 ); + hdDataFieldS2 ( vData.mDataFieldS2 ); + hdDataFieldF2 ( vData.mDataFieldF2 ); + hdDataFieldB2 ( vData.mDataFieldB2 ); + + GET_VALUE(hdValue) + + if( vData.mEventID == eReset ) + hdReset(QString("%1,%2") + .arg(dateTime.toString(_resetFormat)) + .arg(_hdValue.toString()) + ); +} + +/*! + * \brief View::VGeneralEvent::onActionReceive + * \details received response model data handler + * \param vData - model data + */ +void View::VGeneralEvent::onActionReceive(const DGGeneralEventData &vData) +{ + QDateTime dateTime = QDateTime::currentDateTime(); + + dgEventID ( vData.mEventID ); + dgFieldDescriptor1 ( vData.mFieldDescriptor1 ); + dgDataFieldU1 ( vData.mDataFieldU1 ); + dgDataFieldS1 ( vData.mDataFieldS1 ); + dgDataFieldF1 ( vData.mDataFieldF1 ); + dgDataFieldB1 ( vData.mDataFieldB1 ); + dgFieldDescriptor2 ( vData.mFieldDescriptor2 ); + dgDataFieldU2 ( vData.mDataFieldU2 ); + dgDataFieldS2 ( vData.mDataFieldS2 ); + dgDataFieldF2 ( vData.mDataFieldF2 ); + dgDataFieldB2 ( vData.mDataFieldB2 ); + + GET_VALUE(dgValue) + + if( vData.mEventID == eReset ) + dgReset(QString("%1,%2") + .arg(dateTime.toString(_resetFormat)) + .arg(_dgValue.toString()) + ); +} Index: sources/view/VGeneralEvent.h =================================================================== diff -u --- sources/view/VGeneralEvent.h (revision 0) +++ sources/view/VGeneralEvent.h (revision fe7605e216422cd8a9e39eca7cc609730a56fa32) @@ -0,0 +1,84 @@ +/*! + * + * Copyright (c) 2020-2022 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 VGeneralEvent.h + * \author (last) Behrouz NematiPour + * \date (last) 07-Mar-2022 + * \author (original) Behrouz NematiPour + * \date (original) 07-Mar-2022 + * + */ +#pragma once + +// Qt +#include + +// Project +#include "main.h" // Doxygen : do not remove +#include "VView.h" +#include "MHDGeneralEvent.h" +#include "MDGGeneralEvent.h" + +// namespace +namespace View { + +/*! + * \brief The VTreatmentRanges class + * \details View for Model's data representation. + * + * \sa Model::MTreatmentRanges + * + */ +class VGeneralEvent : public QObject +{ + Q_OBJECT + + const char *_resetFormat = "MMddyy,HHmmss"; + enum { zero = 0 }; + + enum Even_ID_Enum { + eReset = 0, + }; + + // void hdValue(const HDGeneralEventData &vHDGeneralEventData); + // void hdValue(const DGGeneralEventData &vDGGeneralEventData); + + PROPERTY( quint32 , hdEventID , 0) + PROPERTY( quint32 , hdFieldDescriptor1 , 0) + PROPERTY( quint32 , hdDataFieldU1 , 0) + PROPERTY( qint32 , hdDataFieldS1 , 0) + PROPERTY( float , hdDataFieldF1 , 0) + PROPERTY( bool , hdDataFieldB1 , 0) + PROPERTY( quint32 , hdFieldDescriptor2 , 0) + PROPERTY( quint32 , hdDataFieldU2 , 0) + PROPERTY( qint32 , hdDataFieldS2 , 0) + PROPERTY( float , hdDataFieldF2 , 0) + PROPERTY( bool , hdDataFieldB2 , 0) + PROPERTY( QVariant , hdValue , 0) + + PROPERTY( quint32 , dgEventID , 0) + PROPERTY( quint32 , dgFieldDescriptor1 , 0) + PROPERTY( quint32 , dgDataFieldU1 , 0) + PROPERTY( qint32 , dgDataFieldS1 , 0) + PROPERTY( float , dgDataFieldF1 , 0) + PROPERTY( bool , dgDataFieldB1 , 0) + PROPERTY( quint32 , dgFieldDescriptor2 , 0) + PROPERTY( quint32 , dgDataFieldU2 , 0) + PROPERTY( qint32 , dgDataFieldS2 , 0) + PROPERTY( float , dgDataFieldF2 , 0) + PROPERTY( bool , dgDataFieldB2 , 0) + PROPERTY( QVariant , dgValue , 0) + + + PROPERTY( QString , hdReset ,"") + PROPERTY( QString , dgReset ,"") + + VIEW_DEC_CLASS(VGeneralEvent ) + VIEW_DEC_SLOT (HDGeneralEventData ) + VIEW_DEC_SLOT (DGGeneralEventData ) +}; +} Index: sources/view/VView.h =================================================================== diff -u -r30a3a58cde0e82d66c8c5f242ec550007e20b694 -rfe7605e216422cd8a9e39eca7cc609730a56fa32 --- sources/view/VView.h (.../VView.h) (revision 30a3a58cde0e82d66c8c5f242ec550007e20b694) +++ sources/view/VView.h (.../VView.h) (revision fe7605e216422cd8a9e39eca7cc609730a56fa32) @@ -101,6 +101,7 @@ //--------------------------------------------------------------------------------// #define REGISTER_VIEW_TYPES \ using namespace View; \ + REGISTER_TYPE( VGeneralEvent ) \ /* POST */ \ REGISTER_TYPE( VHDPOSTData ) \ REGISTER_TYPE( VDGPOSTData ) \ Index: sources/view/hd/alarm/VAlarmStatus.cpp =================================================================== diff -u -r27cc308ff5113a9386899d3c8f8b29962a8498e1 -rfe7605e216422cd8a9e39eca7cc609730a56fa32 --- sources/view/hd/alarm/VAlarmStatus.cpp (.../VAlarmStatus.cpp) (revision 27cc308ff5113a9386899d3c8f8b29962a8498e1) +++ sources/view/hd/alarm/VAlarmStatus.cpp (.../VAlarmStatus.cpp) (revision fe7605e216422cd8a9e39eca7cc609730a56fa32) @@ -133,7 +133,7 @@ alarm_Flag_noResume (vData.mFlags.at(GuiAlarmFlags::ALARM_STATE_FLAG_BIT_POS_NO_RESUME )); alarm_Flag_noRinseback (vData.mFlags.at(GuiAlarmFlags::ALARM_STATE_FLAG_BIT_POS_NO_RINSEBACK )); alarm_Flag_noEndTreatment (vData.mFlags.at(GuiAlarmFlags::ALARM_STATE_FLAG_BIT_POS_NO_END_TREATMENT )); - alarm_Flag_noNewTreatment (vData.mFlags.at(GuiAlarmFlags::ALARM_STATE_FLAG_BIT_POS_NO_NEW_TREATMENT )); + // alarm_Flag_noNewTreatment (vData.mFlags.at(GuiAlarmFlags::ALARM_STATE_FLAG_BIT_POS_NO_NEW_TREATMENT )); // TODO : recently removed. 3/7/22 alarm_Flag_UserMustAck (vData.mFlags.at(GuiAlarmFlags::ALARM_STATE_FLAG_BIT_POS_USER_MUST_ACK )); alarm_Flag_alarmsToEscalate (vData.mFlags.at(GuiAlarmFlags::ALARM_STATE_FLAG_BIT_POS_ALARMS_TO_ESCALATE )); alarm_Flag_alarmsLampOn (vData.mFlags.at(GuiAlarmFlags::ALARM_STATE_FLAG_BIT_POS_LAMP_ON ));