/*! * * Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. * \copyright * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, * IN PART OR IN WHOLE, * WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * \file alarmstatus.cpp * \date 3/9/2020 * \author Behrouz NematiPour * */ #include "malarmstatus.h" #include "AlarmDefs.h" using namespace Model; MAlarmStatus::MAlarmStatus() { } QString MAlarmStatus::toString() const { return QString("Alarm Status(%1, %2, %3, %4, %5)") .arg(_data.mState .value ) .arg(_data.mTop .value ) .arg(_data.mMuteTimeout .value ) .arg(_data.mEscalatesIn .value ) .arg(_data.mFlags .toString()); } void MAlarmStatus::toVariantList(QVariantList &vData) const { vData += _data.mState .value ; vData += _data.mTop .value ; vData += _data.mMuteTimeout .value ; vData += _data.mEscalatesIn .value ; for (int i = 0; i < _data.mFlags.count(); i++) { vData += _data.mFlags.at(i); } } void MAlarmStatus::fromByteArray(const QByteArray &vByteArray) { int index = 0; // message data start position Types::getValue<>(vByteArray, index, _data.mState ); Types::getValue<>(vByteArray, index, _data.mTop ); Types::getValue<>(vByteArray, index, _data.mMuteTimeout ); Types::getValue<>(vByteArray, index, _data.mEscalatesIn ); Types::getBits (vByteArray, index, _data.mFlags , eFlag_Bits_Length); } MAlarmStatus::Data MAlarmStatus::data() const { Data data; data.mState = _data.mState .value; data.mTop = _data.mTop .value; data.mMuteTimeout = _data.mMuteTimeout .value; data.mEscalatesIn = _data.mEscalatesIn .value; data.mFlags = _data.mFlags ; return data; } /** * @brief MAlarmStatus::toText * Looks up the alarm description using the alarm enum * @param val - the alarm enum (int) * @return The alarm description (QString) */ QString MAlarmStatus::toText(int val) { switch (val) { case ALARM_ID_NO_ALARM: return "NULL Alarm"; case ALARM_ID_SOFTWARE_FAULT: return "Software Error"; case ALARM_ID_STUCK_BUTTON_TEST_FAILED: return "Indication for when no alarms is a possible situation."; case ALARM_ID_FPGA_POST_TEST_FAILED: return "FPGA POST failure."; case ALARM_ID_WATCHDOG_POST_TEST_FAILED: return "Watchdog POST failure."; case ALARM_ID_UI_COMM_POST_FAILED: return "UI communication POST failure."; case ALARM_ID_BLOOD_PUMP_MC_CURRENT_CHECK: return "Blood pump failed motor controller current check."; case ALARM_ID_BLOOD_PUMP_MC_SPEED_CHECK: return "Blood pump failed motor controller speed check."; case ALARM_ID_BLOOD_PUMP_MC_DIRECTION_CHECK: return "Blood pump failed motor controller direction check."; case ALARM_ID_BLOOD_PUMP_ROTOR_SPEED_CHECK: return "Blood pump failed rotor speed check."; case ALARM_ID_DIAL_IN_PUMP_MC_CURRENT_CHECK: return "Dialysis inlet pump failed motor controller current check."; case ALARM_ID_DIAL_IN_PUMP_MC_SPEED_CHECK: return "Dialysis inlet pump failed motor controller speed check."; case ALARM_ID_DIAL_IN_PUMP_MC_DIRECTION_CHECK: return "Dialysis inlet pump failed motor controller direction check."; case ALARM_ID_DIAL_IN_PUMP_ROTOR_SPEED_CHECK: return "Dialysis inlet pump failed rotor speed check. "; case ALARM_ID_DIAL_OUT_PUMP_MC_CURRENT_CHECK: return "Dialysis outlet pump failed motor controller current check. "; case ALARM_ID_DIAL_OUT_PUMP_MC_SPEED_CHECK: return "Dialysis outlet pump failed motor controller speed check. "; case ALARM_ID_DIAL_OUT_PUMP_MC_DIRECTION_CHECK: return "Dialysis outlet pump failed motor controller direction check. "; case ALARM_ID_DIAL_OUT_PUMP_ROTOR_SPEED_CHECK: return "Dialysis outlet pump failed rotor speed check. "; case ALARM_ID_WATCHDOG_EXPIRED: return "Watchdog expired error. "; case ALARM_ID_RTC_COMM_ERROR: return "Real-time clock communication error. "; case ALARM_ID_RTC_CONFIG_ERROR: return "Real-time clock configuration error. "; case ALARM_ID_DG_COMM_TIMEOUT: return "Dialysate generator communication timeout. "; case ALARM_ID_UI_COMM_TIMEOUT: return "User interface communication timeout. "; case ALARM_ID_COMM_TOO_MANY_BAD_CRCS: return "Too many bad CRCs detected on received system messages. "; case ALARM_ID_TREATMENT_STOPPED_BY_USER: return "Treatment stopped by user action - pressed stop button. "; case ALARM_ID_BLOOD_SITTING_WARNING: return "Blood sitting too long warning (>4 min). "; case ALARM_ID_BLOOD_SITTING_TOO_LONG_NO_RESUME: return "Blood sitting too long alarm (>5 min). "; case ALARM_ID_BLOOD_SITTING_TOO_LONG_NO_RINSEBACK: return "Blood sitting too long alarm (>10 min). "; case ALARM_ID_CAN_MESSAGE_NOT_ACKED: return "System message needing acknowledgment was not acknowledged. "; case ALARM_ID_OCCLUSION_BLOOD_PUMP: return "Blood pump occlusion detected. "; case ALARM_ID_OCCLUSION_DIAL_IN_PUMP: return "Dialysate inlet pump occlusion detected. "; case ALARM_ID_OCCLUSION_DIAL_OUT_PUMP: return "Dialysate outlet pump occlusion detected. "; case ALARM_ID_ARTERIAL_PRESSURE_LOW: return "Arterial pressure too low during treatment. "; case ALARM_ID_ARTERIAL_PRESSURE_HIGH: return "Arterial pressure too high during treatment. "; case ALARM_ID_VENOUS_PRESSURE_LOW: return "Venous pressure too low during treatment. "; case ALARM_ID_VENOUS_PRESSURE_HIGH: return "Venous pressure too high during treatment."; case ALARM_ID_UF_RATE_TOO_HIGH_ERROR: return "Ultrafiltration rate is too high error during treatment. "; case ALARM_ID_UF_VOLUME_ACCURACY_ERROR: return "Ultrafiltration volume accuracy error during treatment. "; case ALARM_ID_RTC_BATTERY_LOW: return "RTC battery low. "; case ALARM_ID_RTC_OR_TIMER_ACCURACY_FAILURE: return "RTC or MCU timer inaccurate. "; case ALARM_ID_RTC_RAM_OPS_ERROR: return "RTC or RAM operations failure (read or write). "; case ALARM_ID_NVDATA_EEPROM_OPS_FAILURE: return "EEPRON operations (read, write, erase) failure. "; case ALARM_ID_NVDATA_MFG_RECORD_CRC_ERROR: return "Manufacturing record CRC failure. "; case ALARM_ID_NVDATA_SRVC_RECORD_CRC_ERROR: return "Service record CRC failure. "; case ALARM_ID_NVDATA_CAL_RECORD_CRC_ERROR: return "Calibration record CRC failure. "; case ALARM_ID_NVDATA_HW_USAGE_DATA_CRC_ERROR: return "HW usage data failure. "; case AlARM_ID_NVDATA_DISINFECTION_DATE_CRC_ERROR: return "Last disinfection date CRC error "; case ALARM_ID_RO_PUMP_OUT_PRESSURE_OUT_OF_RANGE: return "Pressure at outlet of RO pump is out of range. "; case ALARM_ID_TEMPERATURE_SENSORS_OUT_OF_RANGE: return "DG temperature sensors ADC read out of range. "; case ALARM_ID_TEMPERATURE_SENSORS_INCONSISTENT: return "DG temperature sensors values are inconsistent "; case ALARM_ID_HD_COMM_TIMEOUT: return "HD communication timeout. "; default: return "Alarm Not Recognized"; } return ""; }