Index: scripts/bluetooth_paired_query.sh =================================================================== diff -u -r47c8f13876317ba36500400f894d96c9bce9eb17 -r748e088be863e08a1f8d12ff895c2525cd891e31 --- scripts/bluetooth_paired_query.sh (.../bluetooth_paired_query.sh) (revision 47c8f13876317ba36500400f894d96c9bce9eb17) +++ scripts/bluetooth_paired_query.sh (.../bluetooth_paired_query.sh) (revision 748e088be863e08a1f8d12ff895c2525cd891e31) @@ -24,7 +24,7 @@ #PAIRED_DEVICE_INFO="28:FF:B2:78:5B:BF BP7000" #PAIRED_DEVICE_INFO="" -#PAIRED_DEVICE_INFO=$(echo "paired-devices" | bluetoothctl | grep ^Device | cut -b 8-125) +PAIRED_DEVICE_INFO=$(echo "paired-devices" | bluetoothctl | grep ^Device | cut -b 8-125) echo $PAIRED_DEVICE_INFO Index: sources/bluetooth/BluetoothInterface.cpp =================================================================== diff -u -r1d6adeff8df4dc9395d6a2aee3c7f33d903c4711 -r748e088be863e08a1f8d12ff895c2525cd891e31 --- sources/bluetooth/BluetoothInterface.cpp (.../BluetoothInterface.cpp) (revision 1d6adeff8df4dc9395d6a2aee3c7f33d903c4711) +++ sources/bluetooth/BluetoothInterface.cpp (.../BluetoothInterface.cpp) (revision 748e088be863e08a1f8d12ff895c2525cd891e31) @@ -78,13 +78,14 @@ void BluetoothInterface::quit() { if ( ! _isValid ) return; - // coco begin validated: Application termination is not correctly done in coco!!! - // it has been tested and works perfectly fine in normal run. - quitThread(); // validated if ( _local ) _local ->deleteLater(); if ( _agent ) _agent ->deleteLater(); quitDevice(); + + // coco begin validated: Application termination is not correctly done in coco!!! + // it has been tested and works perfectly fine in normal run. + quitThread(); // validated } // coco end Index: sources/device/DeviceError.cpp =================================================================== diff -u -r9ae3b0d6624904693329309aaf8ff02784c17184 -r748e088be863e08a1f8d12ff895c2525cd891e31 --- sources/device/DeviceError.cpp (.../DeviceError.cpp) (revision 9ae3b0d6624904693329309aaf8ff02784c17184) +++ sources/device/DeviceError.cpp (.../DeviceError.cpp) (revision 748e088be863e08a1f8d12ff895c2525cd891e31) @@ -27,13 +27,22 @@ using namespace Device; const char *DeviceError::Scripts_Error_Text[] = { - QT_TR_NOOP("The device script file is not found."), - QT_TR_NOOP("The device script file is not executable."), - QT_TR_NOOP("The request is already in progress."), - QT_TR_NOOP("The requested value is out of range."), - QT_TR_NOOP("The requested value is incorrect."), - QT_TR_NOOP("The response value is incorrect."), - QT_TR_NOOP("The watch file is not found."), + QT_TR_NOOP("The device script abnormal exit." ), // eDevice_Scripts_Error_Status + QT_TR_NOOP("The device script file is not found." ), // eDevice_Scripts_Error_NotFound + QT_TR_NOOP("The device script file is not executable." ), // eDevice_Scripts_Error_NotExecutable + QT_TR_NOOP("The request is already in progress." ), // eDevice_Scripts_Error_IsRunning + QT_TR_NOOP("The requested value is out of range." ), // eDevice_Scripts_Error_OutOfRange + QT_TR_NOOP("The requested value is incorrect." ), // eDevice_Scripts_Error_Incorrect_Req + QT_TR_NOOP("The response value is incorrect." ), // eDevice_Scripts_Error_Incorrect_Rsp + + QT_TR_NOOP("The watch file is not found." ), // eDevice_Watch_Error_NotFound + QT_TR_NOOP("The watch file cannot be added." ), // eDevice_Watch_Error_NotAdded + + QT_TR_NOOP("The Bluetooth cuff pair clear error." ), // eDevice_BCuff_Error_Reset + + QT_TR_NOOP("The Bluetooth cuff pair query error." ), // eDevice_BCuff_Error_Query + QT_TR_NOOP("No paired Bluetooth cuff found." ), // eDevice_BCuff_Error_Query_Empty + QT_TR_NOOP("The Bluetooth cuff pair invalid address." ), // eDevice_BCuff_Error_Query_Addr }; /*! @@ -49,21 +58,22 @@ DeviceError::Scripts_Error_Enum err = DeviceError::eDevice_OK; vScript = _scriptsFolder + vShellScript; QFileInfo info(vScript); - if ( ! info.exists () ) { err = DeviceError::eDevice_Scripts_Error_NotFound ; goto lOut; } - if ( ! info.isExecutable() ) { err = DeviceError::eDevice_Scripts_Error_NotExecutable ; goto lOut; } + if ( ! info.exists () ) { err = DeviceError::eDevice_Scripts_Error_NotFound ; goto lOut; } + if ( ! info.isExecutable() ) { err = DeviceError::eDevice_Scripts_Error_NotExecutable ; goto lOut; } lOut: return err; } -QString DeviceError::deviceErrorText(DeviceError::Scripts_Error_Enum vError) { +QString DeviceError::deviceErrorText(DeviceError::Scripts_Error_Enum vError, int vExitCode) { QString message; int idx = vError - eDevice_Scripts_Error_Start - 1; - int len = sizeof Scripts_Error_Text / sizeof Scripts_Error_Text[0]; - if (idx > len) { message = QObject::tr("Device error no text defined [%1]").arg(vError); goto lOut; } + int len = (sizeof Scripts_Error_Text / sizeof Scripts_Error_Text[0]); + // DEBUG: qDebug() << len << idx; + if (idx >= len) { message = QObject::tr("Unknown device error %2 [%1]").arg(vExitCode).arg(vError) ; goto lOut; } if (eDevice_Scripts_Error_Start < vError && vError < eDevice_Error_End) { - message = QObject::tr(Scripts_Error_Text[idx]); goto lOut; } + message = QObject::tr(Scripts_Error_Text[idx]) + (vExitCode ? QString(" [%1]").arg(vExitCode) : "") ; goto lOut; } - message = QObject::tr("Device error"); + message = QObject::tr("Device error [%1]").arg(vExitCode); lOut: return message; } Index: sources/model/hd/alarm/MAlarmMapping.cpp =================================================================== diff -u -r3779eaac00ecfa03d5b0405171ab68a0e0ff5538 -r748e088be863e08a1f8d12ff895c2525cd891e31 --- sources/model/hd/alarm/MAlarmMapping.cpp (.../MAlarmMapping.cpp) (revision 3779eaac00ecfa03d5b0405171ab68a0e0ff5538) +++ sources/model/hd/alarm/MAlarmMapping.cpp (.../MAlarmMapping.cpp) (revision 748e088be863e08a1f8d12ff895c2525cd891e31) @@ -7,7 +7,7 @@ * * \file MAlarmMapping.cpp * \author (last) Behrouz NematiPour - * \date (last) 04-Nov-2021 + * \date (last) 12-Dec-2021 * \author (original) Behrouz NematiPour * \date (original) 03-May-2021 * @@ -99,9 +99,9 @@ /*0063*/case GuiAlarmID::ALARM_ID_ARTERIAL_PRESSURE_SENSOR_FAULT : { result = QObject::tr("FPGA reports failure reading arterial pressure sensor." ); break; } /* 63*/ /*0064*/case GuiAlarmID::ALARM_ID_VENOUS_PRESSURE_SENSOR_FAULT : { result = QObject::tr("FPGA reports failure reading venous pressure sensor." ); break; } /* 64*/ /*0065*/case GuiAlarmID::ALARM_ID_DG_COMMAND_INVALID_PARAMETER_FAULT : { result = QObject::tr("HD requests DG command with invalid parameter fault." ); break; } /* 65*/ -/*0066*/case GuiAlarmID::ALARM_ID_NVDATAMGMT_GROUP_RECORD_CRC_INVALID : { result = QObject::tr("DG non-volatile calibration group invalid record CRC." ); break; } /* 66*/ +/*0066*/case GuiAlarmID::ALARM_ID____AVAILABLE_21 : { result = QObject::tr("This alarm ID is available for use." ); break; } /* 66*/ /*0067*/case GuiAlarmID::ALARM_ID_HD_BP_OCCLUSION_SELF_TEST_FAILURE : { result = QObject::tr("HD blood pump occlusion self-test failure alarm." ); break; } /* 67*/ -/*0068*/case GuiAlarmID::ALARM_ID____AVAILABLE_5 : { result = QObject::tr("This alarm ID is available for use." ); break; } /* 68*/ +/*0068*/case GuiAlarmID::ALARM_ID_HD_ACTIVE_RESERVOIR_RECIRCULATION_OUT_OF_RANGE : { result = QObject::tr("HD active reservoir recirculation out of range." ); break; } /* 68*/ /*0069*/case GuiAlarmID::ALARM_ID____AVAILABLE_6 : { result = QObject::tr("This alarm ID is available for use." ); break; } /* 69*/ /*0070*/case GuiAlarmID::ALARM_ID_HD_ARTERIAL_PRESSURE_SELF_TEST_FAILURE : { result = QObject::tr("HD arterial pressure self-test failure alarm." ); break; } /* 70*/ /*0071*/case GuiAlarmID::ALARM_ID_HD_VENOUS_PRESSURE_SELF_TEST_FAILURE : { result = QObject::tr("HD venous pressure self-test failure alarm." ); break; } /* 71*/ @@ -139,7 +139,7 @@ /*0103*/case GuiAlarmID::ALARM_ID_HD_NVDATAMGMT_CAL_GROUP_RECORD_CRC_INVALID : { result = QObject::tr("HD non-volatile calibration group invalid record CRC." ); break; } /* 103*/ /*0104*/case GuiAlarmID::ALARM_ID_AIR_TRAP_ILLEGAL_LEVELS : { result = QObject::tr("Air trap level sensors reporting illegal combination of air/fluid." ); break; } /* 104*/ /*0105*/case GuiAlarmID::ALARM_ID_DG_NVDATAMGMT_CAL_GROUP_RECORD_CRC_INVALID : { result = QObject::tr("DG non-volatile system group invalid record CRC." ); break; } /* 105*/ -/*0106*/case GuiAlarmID::ALARM_ID_DG_NVDATAMGMT_SERVICE_GROUP_RECORD_CRC_INVALID : { result = QObject::tr("DG non-volatile service group invalid record CRC." ); break; } /* 106*/ +/*0106*/case GuiAlarmID::ALARM_ID____AVAILABLE_20 : { result = QObject::tr("This alarm ID is available for use." ); break; } /* 106*/ /*0107*/case GuiAlarmID::ALARM_ID_DG_RESTARTED_FAULT : { result = QObject::tr("HD reports DG restarted fault." ); break; } /* 107*/ /*0108*/case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_ADC_ERROR : { result = QObject::tr("HD syringe pump ADC error." ); break; } /* 108*/ /*0109*/case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_VOLUME_ERROR : { result = QObject::tr("HD syringe pump volume check error." ); break; } /* 109*/ @@ -188,10 +188,10 @@ /*0152*/case GuiAlarmID::ALARM_ID_INLET_WATER_LOW_PRESSURE : { result = QObject::tr("Inlet water pressure too low." ); break; } /* 152*/ /*0153*/case GuiAlarmID::ALARM_ID_PRIME_COMPLETED_HIGH : { result = QObject::tr("HD prime completed high priority alarm." ); break; } /* 153*/ /*0154*/case GuiAlarmID::ALARM_ID_NVDATA_EEPROM_OPS_FAILURE : { result = QObject::tr("EEPROM operations (read, write, erase) failure." ); break; } /* 154*/ -/*0155*/case GuiAlarmID::ALARM_ID_DG_NVDATAMGMT_SERVICE_RECORD_CRC_ERROR : { result = QObject::tr("DG non-volatile service invalid record CRC." ); break; } /* 155*/ +/*0155*/case GuiAlarmID::ALARM_ID____AVAILABLE_22 : { result = QObject::tr("This alarm ID is available for use." ); break; } /* 155*/ /*0156*/case GuiAlarmID::ALARM_ID_NVDATA_HW_USAGE_DATA_CRC_ERROR : { result = QObject::tr("HW usage data (treatment time in HD and total consumed water in DG) failure." ); break; } /* 156*/ -/*0157*/case GuiAlarmID::ALARM_ID_NVDATA_CAL_RECORD_CRC_ERROR : { result = QObject::tr("Calibration record CRC failure." ); break; } /* 157*/ -/*0158*/case GuiAlarmID::ALARM_ID_BLOOD_PUMP_FLOW_VS_MOTOR_SPEED_CHECK : { result = QObject::tr("Blood pump failed flow vs motor speed check." ); break; } /* 158*/ +/*0157*/case GuiAlarmID::ALARM_ID____AVAILABLE_23 : { result = QObject::tr("This alarm ID is available for use." ); break; } /* 157*/ +/*0158*/case GuiAlarmID::ALARM_ID____AVAILABLE_24 : { result = QObject::tr("Blood pump failed flow vs motor speed check." ); break; } /* 158*/ /*0159*/case GuiAlarmID::ALARM_ID_DIAL_IN_PUMP_FLOW_VS_MOTOR_SPEED_CHECK : { result = QObject::tr("Dialysate inlet pump failed flow vs motor speed check." ); break; } /* 159*/ /*0160*/case GuiAlarmID::ALARM_ID_BLOOD_PUMP_ROTOR_SPEED_TOO_HIGH : { result = QObject::tr("Blood pump rotor speed too high." ); break; } /* 160*/ /*0161*/case GuiAlarmID::ALARM_ID_BLOOD_FLOW_SIGNAL_STRENGTH_TOO_LOW : { result = QObject::tr("Blood flow sensor signal strength too low." ); break; } /* 161*/ @@ -201,8 +201,8 @@ /*0165*/case GuiAlarmID::ALARM_ID_TREATMENT_RINSEBACK_TIMEOUT_ALARM : { result = QObject::tr("HD in treatment rinseback operation timeout." ); break; } /* 165*/ /*0166*/case GuiAlarmID::ALARM_ID_TREATMENT_RECIRC_TIMEOUT_ALARM : { result = QObject::tr("HD in treatment re-circ sub-mode for too long." ); break; } /* 166*/ /*0167*/case GuiAlarmID::ALARM_ID_CARTRIDGE_DOOR_OPENED : { result = QObject::tr("HD cartridge door opened alarm." ); break; } /* 167*/ -/*0168*/case GuiAlarmID::ALARM_ID____AVAILABLE_1 : { result = QObject::tr("This alarm ID is available for use." ); break; } /* 168*/ -/*0169*/case GuiAlarmID::ALARM_ID_DIALYSATE_FLOW_RATE_OUT_OF_RANGE : { result = QObject::tr("This alarm ID is available for use." ); break; } /* 169*/ +/*0168*/case GuiAlarmID::ALARM_ID_HD_ACTIVE_RESERVOIR_DEPLETION_TIME_OUT : { result = QObject::tr("HD active reservoir depletion timeout." ); break; } /* 168*/ +/*0169*/case GuiAlarmID::ALARM_ID_DIALYSATE_FLOW_RATE_OUT_OF_RANGE : { result = QObject::tr("Dialysate flow rate out of range." ); break; } /* 169*/ /*0170*/case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_SYRINGE_EMPTY : { result = QObject::tr("HD syringe empty alarm." ); break; } /* 170*/ /*0171*/case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_OCCLUSION : { result = QObject::tr("HD syringe pump occlusion alarm." ); break; } /* 171*/ /*0172*/case GuiAlarmID::ALARM_ID_HD_SYRINGE_PUMP_NOT_ENOUGH_HEPARIN_ALARM : { result = QObject::tr("HD syringe pump not enough Heparin alarm." ); break; } /* 172*/ @@ -270,7 +270,7 @@ /*0234*/case GuiAlarmID::ALARM_ID_RTC_RAM_OPS_ERROR : { result = QObject::tr("RTC (i.e read time) or RAM operations failure (read or write)." ); break; } /* 234*/ /*0235*/case GuiAlarmID::ALARM_ID_TREATMENT_STOPPED_AFTER_RINSEBACK : { result = QObject::tr("HD in treatment stopped sub-mode after rinseback completed (no escalation)." ); break; } /* 235*/ /*0236*/case GuiAlarmID::ALARM_ID_INSTALL_NEW_CARTRIDGE : { result = QObject::tr("HD needs new cartridge to be installed." ); break; } /* 236*/ -/*0237*/case GuiAlarmID::ALARM_ID____AVAILABLE_7 : { result = QObject::tr("This alarm ID is available for use." ); break; } /* 237*/ +/*0237*/case GuiAlarmID::ALARM_ID_PRIME_SALINE_DIALYZER_TIME_OUT : { result = QObject::tr("HD prime saline dialyzer time out alarm." ); break; } /* 237*/ /*0238*/case GuiAlarmID::ALARM_ID_NO_CARTRIDGE_LOADED : { result = QObject::tr("HD no cartridge loaded or installed improperly alarm." ); break; } /* 238*/ /*0239*/case GuiAlarmID::ALARM_ID_CARTRIDGE_REMOVAL_FAILURE : { result = QObject::tr("HD fail to remove cartridge alarm." ); break; } /* 239*/ /*0240*/case GuiAlarmID::ALARM_ID_BICARB_CONDUCTIVITY_OUT_OF_RANGE : { result = QObject::tr("Bicarb conductivity out of range during bicarb pump check alarm." ); break; } /* 240*/ @@ -303,15 +303,15 @@ /*0267*/case GuiAlarmID::ALARM_ID_UI_POST_FAILURE_BLUETOOTH : { result = QObject::tr("UI POST Bluetooth failure." ); break; } /* 267*/ /*0268*/case GuiAlarmID::ALARM_ID_UI_POST_FAILURE_ETHERNET : { result = QObject::tr("UI POST Ethernet failure." ); break; } /* 268*/ /*0269*/case GuiAlarmID::ALARM_ID_UI_POST_FAILURE_SOUND : { result = QObject::tr("UI POST Sound failure." ); break; } /* 269*/ -/*0270*/case GuiAlarmID::ALARM_ID_HD_SAFETY_SHUTDOWN_POST_TEST_FAILED : { result = QObject::tr("HD Watchdog POST failure." ); break; } /* 270*/ -/*0271*/case GuiAlarmID::ALARM_ID_DG_SAFETY_SHUTDOWN_POST_TEST_FAILED : { result = QObject::tr("HD Watchdog POST failure." ); break; } /* 271*/ +/*0270*/case GuiAlarmID::ALARM_ID_HD_SAFETY_SHUTDOWN_POST_TEST_FAILED : { result = QObject::tr("HD POST Safety Shutdown failure." ); break; } /* 270*/ +/*0271*/case GuiAlarmID::ALARM_ID_DG_SAFETY_SHUTDOWN_POST_TEST_FAILED : { result = QObject::tr("DG POST Safety Shutdown failure." ); break; } /* 271*/ /*0272*/case GuiAlarmID::ALARM_ID_HD_FAN_RPM_OUT_OF_RANGE : { result = QObject::tr("HD Fan RPM out of range." ); break; } /* 272*/ /*0273*/case GuiAlarmID::ALARM_ID_HD_BLOOD_FLOW_OUT_OF_RANGE : { result = QObject::tr("HD measured blood pump flow rate is out of range." ); break; } /* 273*/ /*0274*/case GuiAlarmID::ALARM_ID_HD_DIAL_IN_FLOW_OUT_OF_RANGE : { result = QObject::tr("HD measured dialysate inlet pump flow rate is out of range." ); break; } /* 274*/ /*0275*/case GuiAlarmID::ALARM_ID_HD_ARTERIAL_PRESSURE_OUT_OF_RANGE : { result = QObject::tr("HD arterial pressure sensor is reading out of range." ); break; } /* 275*/ /*0276*/case GuiAlarmID::ALARM_ID_HD_VENOUS_PRESSURE_OUT_OF_RANGE : { result = QObject::tr("HD venous pressure sensor is reading out of range." ); break; } /* 276*/ /*0277*/case GuiAlarmID::ALARM_ID_HD_BP_OCCLUSION_OUT_OF_RANGE : { result = QObject::tr("HD BP occlusion sensor is reading out of range." ); break; } /* 277*/ -/*0278*/case GuiAlarmID::ALARM_ID____AVAILABLE_3 : { result = QObject::tr("This alarm ID is available for use." ); break; } /* 278*/ +/*0278*/case GuiAlarmID::ALARM_ID_HD_ACTIVE_RESERVOIR_WEIGHT_OUT_OF_RANGE : { result = QObject::tr("HD active reservoir weight out of range." ); break; } /* 278*/ /*0279*/case GuiAlarmID::ALARM_ID_DG_DIALYSATE_DRAIN_TIME_OUT : { result = QObject::tr("DG dialysate drain time out." ); break; } /* 279*/ /*0280*/case GuiAlarmID::ALARM_ID_HD_ARTERIAL_PRESSURE_READ_TIMEOUT_ERROR : { result = QObject::tr("HD arterial pressure sensor read timeout error." ); break; } /* 280*/ /*0281*/case GuiAlarmID::ALARM_ID_DG_ACID_BOTTLE_LOW_VOLUME : { result = QObject::tr("Acid concentration bottle low volume alarm." ); break; } /* 281*/