Index: denali.pro.user =================================================================== diff -u -ra73067eedc12bcb4a41afdf4aabb6db9f1994f33 -r87ca1f6fca153e2ac05425d2dc5937d5a46ba206 --- denali.pro.user (.../denali.pro.user) (revision a73067eedc12bcb4a41afdf4aabb6db9f1994f33) +++ denali.pro.user (.../denali.pro.user) (revision 87ca1f6fca153e2ac05425d2dc5937d5a46ba206) @@ -1,14 +1,14 @@ - + EnvironmentId {67370740-e20f-4fc6-be45-6652e866a8bf} ProjectExplorer.Project.ActiveTarget - 0 + 1 ProjectExplorer.Project.EditorSettings @@ -1480,7 +1480,7 @@ 1 false - -u + -platform vnc:size=1280x800 3768 false true Index: scripts/wifi_disconnect_network.sh =================================================================== diff -u -r7077e38c74db9cccb5496ffefcf8936c0916de76 -r87ca1f6fca153e2ac05425d2dc5937d5a46ba206 --- scripts/wifi_disconnect_network.sh (.../wifi_disconnect_network.sh) (revision 7077e38c74db9cccb5496ffefcf8936c0916de76) +++ scripts/wifi_disconnect_network.sh (.../wifi_disconnect_network.sh) (revision 87ca1f6fca153e2ac05425d2dc5937d5a46ba206) @@ -6,7 +6,7 @@ exit 0 fi -iface=$1 killall wpa_supplicant rm -f /etc/wpa_supplicant -./wifi_reset_interface.sh $iface +ip link set $1 down +ip link set $1 up \ No newline at end of file Index: scripts/wifi_set_dns.sh =================================================================== diff -u -r7077e38c74db9cccb5496ffefcf8936c0916de76 -r87ca1f6fca153e2ac05425d2dc5937d5a46ba206 --- scripts/wifi_set_dns.sh (.../wifi_set_dns.sh) (revision 7077e38c74db9cccb5496ffefcf8936c0916de76) +++ scripts/wifi_set_dns.sh (.../wifi_set_dns.sh) (revision 87ca1f6fca153e2ac05425d2dc5937d5a46ba206) @@ -6,4 +6,7 @@ exit 0 fi -echo "nameserver $1" >> /etc/resolv.conf +# add users dns preference to the beginning of /etc/resolv.conf +cp /etc/resolv.conf /tmp/resolv.conf.bak +echo "nameserver $1" > /etc/resolv.conf +cat /tmp/resolv.conf.bak >> /etc/resolv.conf Index: scripts/wifi_test_internet.sh =================================================================== diff -u -r7077e38c74db9cccb5496ffefcf8936c0916de76 -r87ca1f6fca153e2ac05425d2dc5937d5a46ba206 --- scripts/wifi_test_internet.sh (.../wifi_test_internet.sh) (revision 7077e38c74db9cccb5496ffefcf8936c0916de76) +++ scripts/wifi_test_internet.sh (.../wifi_test_internet.sh) (revision 87ca1f6fca153e2ac05425d2dc5937d5a46ba206) @@ -6,5 +6,4 @@ exit 0 fi -iface=$1 -ping -I $iface -c 4 www.linuxfoundation.org +ping -I $1 -c 4 8.8.8.8 Index: sources/gui/qml/components/MainMenu.qml =================================================================== diff -u -re28183bddebf7383c1bd113e7b8ef4ea11f494fb -r87ca1f6fca153e2ac05425d2dc5937d5a46ba206 --- sources/gui/qml/components/MainMenu.qml (.../MainMenu.qml) (revision e28183bddebf7383c1bd113e7b8ef4ea11f494fb) +++ sources/gui/qml/components/MainMenu.qml (.../MainMenu.qml) (revision 87ca1f6fca153e2ac05425d2dc5937d5a46ba206) @@ -148,7 +148,7 @@ } // hidden animation to hide the menu nicely. - Behavior on y { PropertyAnimation { /*duration: 500; easing.type: Easing.OutBounce*/ } } +// Behavior on y { PropertyAnimation { /*duration: 500; easing.type: Easing.OutBounce*/ } } onHiddenChanged: { if ( position === MainMenu.Position.Top ) { y = hidden ? - Variables.mainMenuHeight : 0 Index: sources/gui/qml/pages/settings/SettingsWiFi.qml =================================================================== diff -u -r56ad953ae404fcf6956bd4f76b7a54b12d0285d3 -r87ca1f6fca153e2ac05425d2dc5937d5a46ba206 --- sources/gui/qml/pages/settings/SettingsWiFi.qml (.../SettingsWiFi.qml) (revision 56ad953ae404fcf6956bd4f76b7a54b12d0285d3) +++ sources/gui/qml/pages/settings/SettingsWiFi.qml (.../SettingsWiFi.qml) (revision 87ca1f6fca153e2ac05425d2dc5937d5a46ba206) @@ -120,7 +120,7 @@ Row { id : _ssidRow anchors.top : _ipColumn.bottom - anchors.topMargin : 50 + anchors.topMargin : 25 anchors.left : parent.left anchors.leftMargin : _root.leftMargin Text { id : _ssidLabel @@ -140,6 +140,28 @@ } } + Row { id : _internetConnection + anchors.top : _ssidRow.bottom + anchors.topMargin : 25 + anchors.left : parent.left + anchors.leftMargin : _root.leftMargin + Text { id : _internetConnectionLabel + font.pixelSize : Fonts.fontPixelTextRectExtra + color : Colors.textMain + horizontalAlignment : TextInput.Alignleft + width : labelWidth + text : qsTr("Internet") + } + + Text { id : _internetConnectionStatus + font.pixelSize : Fonts.fontPixelTextRectExtra + color : Colors.textMain + horizontalAlignment : TextInput.Alignleft + text : vNetwork.connectedToInternet ? "Connected" : "Not Connected" + width : entryWidth + } + } + TouchRect { id : _scanButton anchors.bottom : parent.bottom anchors.bottomMargin: Variables.mainMenuHeight * 2 + Variables.minVGap Index: sources/model/hd/alarm/MAlarmMapping.cpp =================================================================== diff -u -r3c30d57c6cba7595b1e1d6b806d90ca151bc8db2 -r87ca1f6fca153e2ac05425d2dc5937d5a46ba206 --- sources/model/hd/alarm/MAlarmMapping.cpp (.../MAlarmMapping.cpp) (revision 3c30d57c6cba7595b1e1d6b806d90ca151bc8db2) +++ sources/model/hd/alarm/MAlarmMapping.cpp (.../MAlarmMapping.cpp) (revision 87ca1f6fca153e2ac05425d2dc5937d5a46ba206) @@ -7,7 +7,7 @@ * * \file MAlarmMapping.cpp * \author (last) Behrouz NematiPour - * \date (last) 02-Jun-2021 + * \date (last) 07-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)); Index: sources/storage/StorageGlobals.cpp =================================================================== diff -u -rd005537390186cc065a824a923f41d615782b552 -r87ca1f6fca153e2ac05425d2dc5937d5a46ba206 --- sources/storage/StorageGlobals.cpp (.../StorageGlobals.cpp) (revision d005537390186cc065a824a923f41d615782b552) +++ sources/storage/StorageGlobals.cpp (.../StorageGlobals.cpp) (revision 87ca1f6fca153e2ac05425d2dc5937d5a46ba206) @@ -96,6 +96,7 @@ const char *Wifi_Set_Gateway = "wifi_set_gateway.sh"; const char *Wifi_Set_SubnetMask = "wifi_set_subnetmask.sh"; const char *Wifi_Start_WPA_Supplicant = "wifi_start_wpa_supplicant.sh"; + const char *Wifi_Test_Internet = "wifi_test_internet.sh"; const char *WifiSettings_SSID = "wifi/ssid"; const char *WifiSettings_MacAddress = "wifi/macAddress"; const char *WifiSettings_ConfPath = "wifi/confPath"; @@ -104,7 +105,10 @@ const char *WifiSettings_Gateway = "wifi/gateway"; const char *WifiSettings_SubnetMask = "wifi/subnetmask"; const char *WifiSettings_DNS = "wifi/dns"; - const char *WifiSettings_UseDHCP = "wifi/useDHCP"; + const char *WifiSettings_UseStaticIP = "wifi/useStaticIP"; + const char *WifiSettings_UseStaticGateway = "wifi/useStaticGateway"; + const char *WifiSettings_UseStaticSubnetMask = "wifi/useStaticSubnetMask"; + const char *WifiSettings_UseStaticDNS = "wifi/useStaticDNS"; #ifdef BUILD_FOR_DESKTOP const char *Path_FileSystem_Checksums = "/home/denali/Projects/application/scripts/checksums_desktop.conf"; Index: sources/storage/StorageGlobals.h =================================================================== diff -u -rd005537390186cc065a824a923f41d615782b552 -r87ca1f6fca153e2ac05425d2dc5937d5a46ba206 --- sources/storage/StorageGlobals.h (.../StorageGlobals.h) (revision d005537390186cc065a824a923f41d615782b552) +++ sources/storage/StorageGlobals.h (.../StorageGlobals.h) (revision 87ca1f6fca153e2ac05425d2dc5937d5a46ba206) @@ -53,6 +53,7 @@ extern const char *Wifi_Reset_Adapter; extern const char *Wifi_Reset_Interface; extern const char *Wifi_Scan_For_Networks; + extern const char *Wifi_Test_Internet; extern const char *Wifi_Set_Auto_Assigned_IP; extern const char *Wifi_Set_DNS; extern const char *Wifi_Set_Static_IP; @@ -70,7 +71,10 @@ extern const char *WifiSettings_Gateway; extern const char *WifiSettings_SubnetMask; extern const char *WifiSettings_DNS; - extern const char *WifiSettings_UseDHCP; + extern const char *WifiSettings_UseStaticIP; + extern const char *WifiSettings_UseStaticGateway; + extern const char *WifiSettings_UseStaticSubnetMask; + extern const char *WifiSettings_UseStaticDNS; // UI POST extern const char *Path_FileSystem_Checksums; Index: sources/view/settings/VNetworkModel.cpp =================================================================== diff -u -r7077e38c74db9cccb5496ffefcf8936c0916de76 -r87ca1f6fca153e2ac05425d2dc5937d5a46ba206 --- sources/view/settings/VNetworkModel.cpp (.../VNetworkModel.cpp) (revision 7077e38c74db9cccb5496ffefcf8936c0916de76) +++ sources/view/settings/VNetworkModel.cpp (.../VNetworkModel.cpp) (revision 87ca1f6fca153e2ac05425d2dc5937d5a46ba206) @@ -38,18 +38,21 @@ connect(&_WifiInterface, SIGNAL(didStatusChanged (const QString &)), this, SLOT( onStatusChanged (const QString &))); + connect(&_WifiInterface, SIGNAL(didInternetConnectionChange (const bool &)), + this, SLOT( onInternetConnectionChanged(const bool &))); + // incoming - static IP address assignment - connect(&_WifiInterface, SIGNAL(didSetStaticIPAddress ()), - this, SLOT( onSetStaticIPAddressSuccess())); + connect(&_WifiInterface, SIGNAL(didSetStaticIPAddress (const QString &)), + this, SLOT( onSetStaticIPAddressSuccess(const QString &))); - connect(&_WifiInterface, SIGNAL(didSetGateway ()), - this, SLOT( onSetGatewaySuccess())); + connect(&_WifiInterface, SIGNAL(didSetGateway (const QString &)), + this, SLOT( onSetGatewaySuccess(const QString &))); - connect(&_WifiInterface, SIGNAL(didSetSubnetMask ()), - this, SLOT( onSetSubnetMaskSuccess())); + connect(&_WifiInterface, SIGNAL(didSetSubnetMask (const QString &)), + this, SLOT( onSetSubnetMaskSuccess(const QString &))); - connect(&_WifiInterface, SIGNAL(didSetDNS ()), - this, SLOT( onSetDNSSuccess())); + connect(&_WifiInterface, SIGNAL(didSetDNS (const QString &)), + this, SLOT( onSetDNSSuccess(const QString &))); // outgoing connect(this, SIGNAL(didScan()), @@ -367,34 +370,48 @@ * \brief VNetworkModel::onSetIPAddressSuccess * Called when the IP address has been set */ -void VNetworkModel::onSetStaticIPAddressSuccess() +void VNetworkModel::onSetStaticIPAddressSuccess(const QString &vStaticIP) { + ipAddress(vStaticIP); status(tr("Successfully set the IP address.")); } /*! * \brief VNetworkModel::onSetGatewaySuccess * Called when the gateway has been set */ -void VNetworkModel::onSetGatewaySuccess() +void VNetworkModel::onSetGatewaySuccess(const QString &vGateway) { + gateway(vGateway); status(tr("Successfully set the gateway.")); } /*! * \brief VNetworkModel::onSetSubnetMaskSuccess * Called when the subnet mask has been set */ -void VNetworkModel::onSetSubnetMaskSuccess() +void VNetworkModel::onSetSubnetMaskSuccess(const QString &vSubnetMask) { + subnetMask(vSubnetMask); status(tr("Successfully set the subnet mask.")); } /*! * \brief VNetworkModel::onSetDNSSuccess * Called when the DNS has been set */ -void VNetworkModel::onSetDNSSuccess() +void VNetworkModel::onSetDNSSuccess(const QString &vDNS) { + dns(vDNS); status(tr("Successfully set the DNS.")); } + +/*! + * \brief VNetworkModel::onInternetConnectionChanged + * Called when the internet connection changes + * \param vConnected - if true, we're connected to the internet, false otherwise + */ +void VNetworkModel::onInternetConnectionChanged(const bool &vConnected) +{ + connectedToInternet(vConnected); +} Index: sources/view/settings/VNetworkModel.h =================================================================== diff -u -r7077e38c74db9cccb5496ffefcf8936c0916de76 -r87ca1f6fca153e2ac05425d2dc5937d5a46ba206 --- sources/view/settings/VNetworkModel.h (.../VNetworkModel.h) (revision 7077e38c74db9cccb5496ffefcf8936c0916de76) +++ sources/view/settings/VNetworkModel.h (.../VNetworkModel.h) (revision 87ca1f6fca153e2ac05425d2dc5937d5a46ba206) @@ -26,15 +26,16 @@ { Q_OBJECT - PROPERTY(bool , isIdle , true ) - PROPERTY(bool , scanInProgress , false) - PROPERTY(QString , status , "") - PROPERTY(QString , ipAddress , "") - PROPERTY(QString , gateway , "") - PROPERTY(QString , subnetMask , "") - PROPERTY(QString , dns , "") - PROPERTY(QString , ssid , "") - PROPERTY(QString , macAddress , "") + PROPERTY(bool , isIdle , true ) + PROPERTY(bool , scanInProgress , false) + PROPERTY(bool , connectedToInternet, false) + PROPERTY(QString , status , "") + PROPERTY(QString , ipAddress , "") + PROPERTY(QString , gateway , "") + PROPERTY(QString , subnetMask , "") + PROPERTY(QString , dns , "") + PROPERTY(QString , ssid , "") + PROPERTY(QString , macAddress , "") public: // Note: VIEW_DEC_CLASS(VNetworkModel) requires QObject as the parent, so it's necessary to define it here @@ -93,11 +94,12 @@ void onStatusChanged(const QString &vNewStatus); void onConnectToNetwork(const WifiNetworkData &vNetwork); void onDisconnectNetwork(const WifiNetworkData &vNetwork); + void onInternetConnectionChanged(const bool &vConnected); // static IP address assignment confirmation - void onSetStaticIPAddressSuccess(); - void onSetGatewaySuccess(); - void onSetSubnetMaskSuccess(); - void onSetDNSSuccess(); + void onSetStaticIPAddressSuccess(const QString &vStaticIP); + void onSetGatewaySuccess(const QString &vGateway); + void onSetSubnetMaskSuccess(const QString &vSubnetMask); + void onSetDNSSuccess(const QString &vDNS); }; } Index: sources/wifi/WifiInterface.cpp =================================================================== diff -u -r66506a15ac0234c0a2fcf78d3262fdb91c51cbca -r87ca1f6fca153e2ac05425d2dc5937d5a46ba206 --- sources/wifi/WifiInterface.cpp (.../WifiInterface.cpp) (revision 66506a15ac0234c0a2fcf78d3262fdb91c51cbca) +++ sources/wifi/WifiInterface.cpp (.../WifiInterface.cpp) (revision 87ca1f6fca153e2ac05425d2dc5937d5a46ba206) @@ -40,6 +40,7 @@ _processSetStaticGateway .setParent(this); _processSetStaticSubnetMask .setParent(this); _processSetDNS .setParent(this); + _processTestInternet .setParent(this); } @@ -71,7 +72,10 @@ QList securityTypesVar = WifiSettings.value(WifiSettings_Security_Types).toList(); MWifiNetwork::STATUS status = MWifiNetwork::STATUS::NOT_CONNECTED; MWifiNetwork::SIGNAL_LEVEL signalLevel = MWifiNetwork::SIGNAL_LEVEL::NO_SIGNAL; - _useDHCP = WifiSettings.value(WifiSettings_UseDHCP).toBool(); + _useStaticIP = WifiSettings.value(WifiSettings_UseStaticIP).toBool(); + _useStaticGateway = WifiSettings.value(WifiSettings_UseStaticGateway).toBool(); + _useStaticSubnetMask = WifiSettings.value(WifiSettings_UseStaticSubnetMask).toBool(); + _useStaticDNS = WifiSettings.value(WifiSettings_UseStaticDNS).toBool(); return WifiNetworkData(macAddress, ssid, variantListToSecurityTypes(securityTypesVar), status, signalLevel); } @@ -142,6 +146,9 @@ connect(&_processSetDNS , SIGNAL( finished(int, QProcess::ExitStatus)), this , SLOT( onProcessFinishedSetDNS(int, QProcess::ExitStatus))); + connect(&_processTestInternet , SIGNAL( finished(int, QProcess::ExitStatus)), + this , SLOT( onProcessFinishedTestInternet(int, QProcess::ExitStatus))); + connect(this, SIGNAL(didRequestAutoAssignedIP()), this, SLOT( onRequestAutoAssignedIP())); @@ -244,9 +251,48 @@ { if (hasConnectedToWifi()) rejoinLastWifiNetwork(); + + startTimer(_internetCheckTimerInterval); } /*! + * \brief MainTimer::timerEvent + * Called on each timer event + * Checks for internet connectivity + */ +void WifiInterface::timerEvent(QTimerEvent *) +{ + if (_processTestInternet.state() != QProcess::NotRunning) { + LOG_DEBUG("The internet test is already running."); + return; + } + + QString script; if ( ! checkScript(script, Wifi_Test_Internet) ) return; + _processTestInternet.start(script, QStringList() << _iface); +} + +/*! + * \brief WifiInterface::onProcessFinishedTestInternet + * Called when the internet connectivity test has finished + * \param vExitCode - (int) the exit code + * \param vExitStatus - (QProcess::ExitStatus) the exit status + */ +void WifiInterface::onProcessFinishedTestInternet(int vExitCode, QProcess::ExitStatus) +{ + QString out = _processTestInternet.readAllStandardOutput(); + QString err = _processTestInternet.readAllStandardError(); + if (vExitCode != 0) + { + didInternetConnectionChange(false); + return; + } + + bool hasInternet = QRegularExpression("4 packets transmitted, 4 packets received, 0% packet loss").match(out).hasMatch(); + LOG_DEBUG(QString("Connected to internet? %1").arg(hasInternet)); + emit didInternetConnectionChange(hasInternet); +} + +/*! * \brief WifiInterface::doScan * Scans for WiFi Access Points */ @@ -273,10 +319,8 @@ * \param vExitCode - (int) the exit code * \param vExitStatus - (QProcess::ExitStatus) the exit status */ -void WifiInterface::onProcessFinishedScan(int vExitCode, QProcess::ExitStatus vExitStatus) +void WifiInterface::onProcessFinishedScan(int, QProcess::ExitStatus) { - Q_UNUSED(vExitCode) - Q_UNUSED(vExitStatus) QString out = _processScan.readAllStandardOutput(); QString err = _processScan.readAllStandardError(); LOG_DEBUG(QString("stdout: %1").arg(out)); @@ -392,8 +436,14 @@ void WifiInterface::doJoinNetwork(const WifiNetworkData &vNetwork, const QString &vPassword) { _network = vNetwork; - _useDHCP = true; - WifiSettings.setValue(WifiSettings_UseDHCP, _useDHCP); + _useStaticIP = false; + WifiSettings.setValue(WifiSettings_UseStaticIP, _useStaticIP); + _useStaticGateway = false; + WifiSettings.setValue(WifiSettings_UseStaticGateway, _useStaticGateway); + _useStaticSubnetMask = false; + WifiSettings.setValue(WifiSettings_UseStaticSubnetMask, _useStaticSubnetMask); + _useStaticDNS = false; + WifiSettings.setValue(WifiSettings_UseStaticDNS, _useStaticDNS); LOG_DEBUG(QString("Joining Network %1").arg(vNetwork.ssid())); if (_processGenerateWPASupplicant.state() != QProcess::NotRunning) { @@ -435,9 +485,8 @@ * \param vExitCode - (int) the exit code * \param vExitStatus - (QProcess::ExitStatus) the exit status */ -void WifiInterface::onProcessFinishedGenerateWPASupplicant(int vExitCode, QProcess::ExitStatus vExitStatus) +void WifiInterface::onProcessFinishedGenerateWPASupplicant(int vExitCode, QProcess::ExitStatus) { - Q_UNUSED(vExitStatus) if (vExitCode != 0) { emit didError("Could not configure network."); @@ -463,9 +512,8 @@ * \param vExitCode - (int) the exit code * \param vExitStatus - (QProcess::ExitStatus) the exit status */ -void WifiInterface::onProcessFinishedStartWPASupplicant(int vExitCode, QProcess::ExitStatus vExitStatus) +void WifiInterface::onProcessFinishedStartWPASupplicant(int vExitCode, QProcess::ExitStatus) { - Q_UNUSED(vExitStatus) if (vExitCode != 0) { emit didError("Could not configure network."); @@ -499,9 +547,8 @@ * \param vExitCode - (int) the exit code * \param vExitStatus - (QProcess::ExitStatus) the exit status */ -void WifiInterface::onProcessFinishedRequestAutoAssignedIP(int vExitCode, QProcess::ExitStatus vExitStatus) +void WifiInterface::onProcessFinishedRequestAutoAssignedIP(int vExitCode, QProcess::ExitStatus) { - Q_UNUSED(vExitStatus) if (vExitCode != 0) { if (_dhcpAttemptsLeft > 0) @@ -543,10 +590,8 @@ * \param vExitCode - (int) the exit code * \param vExitStatus - (QProcess::ExitStatus) the exit status */ -void WifiInterface::onProcessFinishedReadIP(int vExitCode, QProcess::ExitStatus vExitStatus) +void WifiInterface::onProcessFinishedReadIP(int, QProcess::ExitStatus) { - Q_UNUSED(vExitCode); - Q_UNUSED(vExitStatus); QString output = _processReadIPSettings.readAllStandardOutput(); _network.mIPSettings.mIPAddress = parseIP(output); _network.mIPSettings.mBroadcast = parseBroadcast(output); @@ -569,10 +614,8 @@ * \param vExitCode - (int) the exit code * \param vExitStatus - (QProcess::ExitStatus) the exit status */ -void WifiInterface::onProcessFinishedReadGateway(int vExitCode, QProcess::ExitStatus vExitStatus) +void WifiInterface::onProcessFinishedReadGateway(int, QProcess::ExitStatus) { - Q_UNUSED(vExitCode); - Q_UNUSED(vExitStatus); _network.mIPSettings.mGateway = parseGateway(_processReadGateway.readAllStandardOutput()); if (_processReadDNS.state() != QProcess::NotRunning) { @@ -588,31 +631,27 @@ /*! * \brief WifiInterface::onProcessFinishedReadDNS * Parses the DNS of the device when the process has finished then - * emits the newtwork with all the ip address information filled + * emits the network with all the ip address information filled * \param vExitCode - (int) the exit code * \param vExitStatus - (QProcess::ExitStatus) the exit status */ -void WifiInterface::onProcessFinishedReadDNS(int vExitCode, QProcess::ExitStatus vExitStatus) +void WifiInterface::onProcessFinishedReadDNS(int, QProcess::ExitStatus) { - Q_UNUSED(vExitCode); - Q_UNUSED(vExitStatus); _network.mIPSettings.mDNS = parseDNS(_processReadDNS.readAllStandardOutput()); - if (!_useDHCP) - { - // Use current static IP settings - QString ipAddress = WifiSettings.value(WifiSettings_IPAddress).toString().trimmed(); - QString gateway = WifiSettings.value(WifiSettings_Gateway).toString().trimmed(); - QString subnetMask = WifiSettings.value(WifiSettings_SubnetMask).toString().trimmed(); - QString dns = WifiSettings.value(WifiSettings_DNS).toString().trimmed(); - if (!ipAddress.isEmpty()) - doRequestSetIPAddress(_network.mIPSettings.mIPAddress); - if (!gateway.isEmpty()) - doRequestSetGateway(_network.mIPSettings.mGateway); - if (!subnetMask.isEmpty()) - doRequestSetSubnetMask(_network.mIPSettings.mSubnetMask); - if (!dns.isEmpty()) - doRequestSetDNS(_network.mIPSettings.mDNS); - } + + QString ipAddress = WifiSettings.value(WifiSettings_IPAddress).toString().trimmed(); + QString gateway = WifiSettings.value(WifiSettings_Gateway).toString().trimmed(); + QString subnetMask = WifiSettings.value(WifiSettings_SubnetMask).toString().trimmed(); + QString dns = WifiSettings.value(WifiSettings_DNS).toString().trimmed(); + if (_useStaticIP && !ipAddress.isEmpty()) + doRequestSetIPAddress(ipAddress); + if (_useStaticGateway && !gateway.isEmpty()) + doRequestSetGateway(gateway); + if (_useStaticSubnetMask && !subnetMask.isEmpty()) + doRequestSetSubnetMask(subnetMask); + if (_useStaticDNS && !dns.isEmpty()) + doRequestSetDNS(dns); + emit didConnectToNetwork(_network); } @@ -642,9 +681,8 @@ * \param vExitCode - (int) the exit code * \param vExitStatus - (QProcess::ExitStatus) the exit status */ -void WifiInterface::onProcessFinishedDisconnectNetwork(int vExitCode, QProcess::ExitStatus vExitStatus) +void WifiInterface::onProcessFinishedDisconnectNetwork(int vExitCode, QProcess::ExitStatus) { - Q_UNUSED(vExitStatus) if (vExitCode != 0) { emit didError(tr("Failed to disconnect from %1").arg(_network.ssid())); @@ -726,7 +764,6 @@ */ void WifiInterface::doRequestSetIPAddress(const QString &vIPAddress) { - Q_UNUSED(vIPAddress) LOG_DEBUG(QString("Handling request to set static IP address: %1").arg(vIPAddress)); if (_processSetStaticIPAddress.state() != QProcess::NotRunning) { @@ -737,8 +774,8 @@ } QString script; if ( ! checkScript(script, Wifi_Set_Static_IP) ) return; WifiSettings.setValue(WifiSettings_IPAddress, vIPAddress); - _useDHCP = false; - WifiSettings.setValue(WifiSettings_UseDHCP, _useDHCP); + _useStaticIP = true; + WifiSettings.setValue(WifiSettings_UseStaticIP, _useStaticIP); _processSetStaticIPAddress.start(script, QStringList() << _iface << vIPAddress); } @@ -749,15 +786,14 @@ * \param vExitCode - (int) the exit code * \param vExitStatus - (QProcess::ExitStatus) the exit status */ -void WifiInterface::onProcessFinishedSetIPAddress(int vExitCode, QProcess::ExitStatus vExitStatus) +void WifiInterface::onProcessFinishedSetIPAddress(int vExitCode, QProcess::ExitStatus) { - Q_UNUSED(vExitStatus) if (vExitCode != 0) { emit didError(tr("Failed to set static IP Address")); return; } - emit didSetStaticIPAddress(); + emit didSetStaticIPAddress(WifiSettings.value(WifiSettings_IPAddress).toString()); } /*! @@ -779,8 +815,8 @@ } QString script; if ( ! checkScript(script, Wifi_Set_Gateway) ) return; WifiSettings.setValue(WifiSettings_Gateway, vGateway); - _useDHCP = false; - WifiSettings.setValue(WifiSettings_UseDHCP, _useDHCP); + _useStaticGateway = true; + WifiSettings.setValue(WifiSettings_UseStaticGateway, _useStaticGateway); _processSetStaticGateway.start(script, QStringList() << vGateway); } @@ -791,15 +827,14 @@ * \param vExitCode - (int) the exit code * \param vExitStatus - (QProcess::ExitStatus) the exit status */ -void WifiInterface::onProcessFinishedSetGateway(int vExitCode, QProcess::ExitStatus vExitStatus) +void WifiInterface::onProcessFinishedSetGateway(int vExitCode, QProcess::ExitStatus) { - Q_UNUSED(vExitStatus) if (vExitCode != 0) { emit didError(tr("Failed to set gateway.")); return; } - emit didSetGateway(); + emit didSetGateway(WifiSettings.value(WifiSettings_Gateway).toString()); } /*! @@ -809,7 +844,6 @@ */ void WifiInterface::doRequestSetSubnetMask(const QString &vSubnetMask) { - Q_UNUSED(vSubnetMask) LOG_DEBUG(QString("Handling request to set static subnet mask: %1").arg(vSubnetMask)); if (_processSetStaticSubnetMask.state() != QProcess::NotRunning) { @@ -820,8 +854,8 @@ } QString script; if ( ! checkScript(script, Wifi_Set_SubnetMask) ) return; WifiSettings.setValue(WifiSettings_SubnetMask, vSubnetMask); - _useDHCP = false; - WifiSettings.setValue(WifiSettings_UseDHCP, _useDHCP); + _useStaticSubnetMask = true; + WifiSettings.setValue(WifiSettings_UseStaticSubnetMask, _useStaticSubnetMask); _processSetStaticSubnetMask.start(script, QStringList() << _iface << vSubnetMask); } @@ -832,15 +866,14 @@ * \param vExitCode - (int) the exit code * \param vExitStatus - (QProcess::ExitStatus) the exit status */ -void WifiInterface::onProcessFinishedSetSubnetMask(int vExitCode, QProcess::ExitStatus vExitStatus) +void WifiInterface::onProcessFinishedSetSubnetMask(int vExitCode, QProcess::ExitStatus) { - Q_UNUSED(vExitStatus) if (vExitCode != 0) { emit didError(tr("Failed to set subnet mask.")); return; } - emit didSetSubnetMask(); + emit didSetSubnetMask(WifiSettings.value(WifiSettings_SubnetMask).toString()); } /*! @@ -860,6 +893,8 @@ } QString script; if ( ! checkScript(script, Wifi_Set_DNS ) ) return; WifiSettings.setValue(WifiSettings_DNS, vDNS); + _useStaticDNS = true; + WifiSettings.setValue(WifiSettings_UseStaticSubnetMask, _useStaticDNS); _processSetDNS.start(script, QStringList() << vDNS); } @@ -870,15 +905,14 @@ * \param vExitCode - (int) the exit code * \param vExitStatus - (QProcess::ExitStatus) the exit status */ -void WifiInterface::onProcessFinishedSetDNS(int vExitCode, QProcess::ExitStatus vExitStatus) +void WifiInterface::onProcessFinishedSetDNS(int vExitCode, QProcess::ExitStatus) { - Q_UNUSED(vExitStatus) if (vExitCode != 0) { emit didError(tr("Failed to set DNS.")); return; } - emit didSetDNS(); + emit didSetDNS(WifiSettings.value(WifiSettings_DNS).toString()); } /*! Index: sources/wifi/WifiInterface.h =================================================================== diff -u -r66506a15ac0234c0a2fcf78d3262fdb91c51cbca -r87ca1f6fca153e2ac05425d2dc5937d5a46ba206 --- sources/wifi/WifiInterface.h (.../WifiInterface.h) (revision 66506a15ac0234c0a2fcf78d3262fdb91c51cbca) +++ sources/wifi/WifiInterface.h (.../WifiInterface.h) (revision 87ca1f6fca153e2ac05425d2dc5937d5a46ba206) @@ -38,6 +38,8 @@ * - Scans for Access Points * - Authenticates with Access Points * - Disconnects from Access Points + * - Requires that both antennas are attached + * to the HD board to properly scan and find Wi-Fi networks */ class WifiInterface : public QObject { @@ -48,7 +50,10 @@ QThread *_thread = nullptr; bool _init = false; bool _scanRunning = false; - bool _useDHCP = true; + bool _useStaticIP = false; + bool _useStaticGateway = false; + bool _useStaticSubnetMask = false; + bool _useStaticDNS = false; int _defaultTimeout = 5000; int _dhcpTimeout = 10000; int _scanTimeout = 30000; @@ -66,11 +71,13 @@ QProcess _processSetStaticGateway; QProcess _processSetStaticSubnetMask; QProcess _processSetDNS; + QProcess _processTestInternet; WifiNetworkData _network; const QString _scriptsFolder = Storage::Scripts_Path_Name; const QString _iface = "wlan0"; const QString _wpaSupplicantConfPath = "/etc/wpa_supplicant.conf"; + static const int _internetCheckTimerInterval = 10000; // ms // Singleton SINGLETON(WifiInterface) @@ -119,11 +126,12 @@ void didBusyChanged ( bool vBusy); void didStatusChanged (const QString &vNewStatus ); void didRequestAutoAssignedIP (); + void didInternetConnectionChange(const bool &vConnected); // static IP address settings - void didSetStaticIPAddress (); - void didSetGateway (); - void didSetSubnetMask (); - void didSetDNS (); + void didSetStaticIPAddress (const QString &); + void didSetGateway (const QString &); + void didSetSubnetMask (const QString &); + void didSetDNS (const QString &); // emitted from separate threads void didScanStatusChanged ( bool ); @@ -134,17 +142,19 @@ void quit(); void onStart(); void onStatusChanged(const QString &vMessage); + void timerEvent(QTimerEvent *); void onRequestAutoAssignedIP(); - void onProcessFinishedScan (int vExitCode, QProcess::ExitStatus vExitStatus); - void onProcessFinishedReadIP (int vExitCode, QProcess::ExitStatus vExitStatus); - void onProcessFinishedReadGateway (int vExitCode, QProcess::ExitStatus vExitStatus); - void onProcessFinishedReadDNS (int vExitCode, QProcess::ExitStatus vExitStatus); - void onProcessFinishedGenerateWPASupplicant (int vExitCode, QProcess::ExitStatus vExitStatus); - void onProcessFinishedStartWPASupplicant (int vExitCode, QProcess::ExitStatus vExitStatus); - void onProcessFinishedRequestAutoAssignedIP (int vExitCode, QProcess::ExitStatus vExitStatus); - void onProcessFinishedDisconnectNetwork (int vExitCode, QProcess::ExitStatus vExitStatus); - void onProcessFinishedSetIPAddress (int vExitCode, QProcess::ExitStatus vExitStatus); - void onProcessFinishedSetGateway (int vExitCode, QProcess::ExitStatus vExitStatus); - void onProcessFinishedSetSubnetMask (int vExitCode, QProcess::ExitStatus vExitStatus); - void onProcessFinishedSetDNS (int vExitCode, QProcess::ExitStatus vExitStatus); + void onProcessFinishedScan (int, QProcess::ExitStatus); + void onProcessFinishedReadIP (int, QProcess::ExitStatus); + void onProcessFinishedReadGateway (int, QProcess::ExitStatus); + void onProcessFinishedReadDNS (int, QProcess::ExitStatus); + void onProcessFinishedGenerateWPASupplicant (int vExitCode, QProcess::ExitStatus); + void onProcessFinishedStartWPASupplicant (int vExitCode, QProcess::ExitStatus); + void onProcessFinishedRequestAutoAssignedIP (int vExitCode, QProcess::ExitStatus); + void onProcessFinishedDisconnectNetwork (int vExitCode, QProcess::ExitStatus); + void onProcessFinishedTestInternet (int vExitCode, QProcess::ExitStatus); + void onProcessFinishedSetIPAddress (int vExitCode, QProcess::ExitStatus); + void onProcessFinishedSetGateway (int vExitCode, QProcess::ExitStatus); + void onProcessFinishedSetSubnetMask (int vExitCode, QProcess::ExitStatus); + void onProcessFinishedSetDNS (int vExitCode, QProcess::ExitStatus); };