Index: config.xml
===================================================================
diff -u -rc6274593f3f5a607595b95f0243313a6cf32d599 -reabfecc1d8d205f4b8888b99158c54f5ac92ae4e
--- config.xml (.../config.xml) (revision c6274593f3f5a607595b95f0243313a6cf32d599)
+++ config.xml (.../config.xml) (revision eabfecc1d8d205f4b8888b99158c54f5ac92ae4e)
@@ -4,4 +4,8 @@
+<<<<<<< HEAD
+
+=======
+>>>>>>> create_custom_treatment
Index: shared/scripts/configuration/config.py
===================================================================
diff -u -r7cd0c21e76de3964af8178655467e82ff99ae98d -reabfecc1d8d205f4b8888b99158c54f5ac92ae4e
--- shared/scripts/configuration/config.py (.../config.py) (revision 7cd0c21e76de3964af8178655467e82ff99ae98d)
+++ shared/scripts/configuration/config.py (.../config.py) (revision eabfecc1d8d205f4b8888b99158c54f5ac92ae4e)
@@ -6,9 +6,8 @@
# 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 utils.py
-#
-# @author (last) LTTS
+# @file config.py
+# @author (last) LTTS
# @date (last) 18-Jan-2022
#
############################################################################
@@ -18,15 +17,525 @@
AUT_NAME = "denaliSquish"
COMMON_PATH = os.environ['HOME']+"/Projects"
-
COLOR_CODES = {"Aqua": "#81ffff", "Blue": "#017dea", "Blue 2": "#1090d5", "Green": "#29fd2d", "Grey": "#d3d3d3",
"Lavender": "#db98f5", "Light Blue": "#acd7f1", "Light Teal": "#29f1da","Lime": "#b7fc36",
"Magenta":"#fd28fd", "Orange": "#f2721c", "Peach":"#f1979a", "Red": "#c53b33", "Rose":"#fc178d",
"Slate blue":"#7f7ffa", "Violet": "#6435c9", "White": "#ffffff", "Yellow": "#fcfc4d"}
+ALARM_ID_AND_MESSAGES = {
+ 1: "Stuck button POST failure.\nStop or Off button detected to be pressed for at least 1 second during test shortly after power up.",
+ 2: "HD FPGA POST failure.",
+ 3: "DG FPGA POST failure.",
+ 4: "HD Watchdog POST failure.",
+ 5: "DG Watchdog POST failure.",
+ 6: "UI communication POST failure.\nUI failed to communicate within a reasonable time after power up.",
+ 7: "Real-time clock configuration error.",
+ 8: "HD accelerometer failed POST.",
+ 9: "DG accelerometer failed POST.",
+ 10: "RTC or MCU timer inaccurate.",
+ 11: "DG heaters failed POST.",
+ 12: "HD firmware image integrity POST test failed." ,
+ 13: "DG firmware image integrity POST test failed.",
+ 14: "HD blood flow invalid calibration.",
+ 15: "HD dialysate flow invalid calibration.",
+ 16: "HD alarm audio failed POST.",
+ 17: "HD UI POST failed.",
+ 18: "DG load cells invalid calibration record.",
+ 19: "DG flow sensors invalid calibration record.",
+ 20: "DG conductivity sensors invalid calibration record.",
+ 21: "DG drain line volume invalid calibration record.",
+ 22: "DG reservoirs invalid calibration record.",
+ 23: "DG acid concentrate calibration record.",
+ 24: "DG bicarb concentrate calibration record.",
+ 25: "DG accelerometer invalid calibration record.",
+ 26: "HD accelerometer invalid calibration record.",
+ 27: "HD blood flow invalid calibration record.",
+ 28: "HD dialyzer flow invalid calibration record." ,
+ 29: "HD heparin force sensor invalid calibration record.",
+ 30: "HD Software fault.\nSoftware found itself in an unexpected state.",
+ 31: "Blood pump failed motor controller current check.\nToo high when pump should be off or out of range when pump should be running.",
+ 32: "Blood pump failed motor off check.\nMeasured speed while commanded off.",
+ 33: "Blood pump failed motor direction check.\nMeasured vs commanded.",
+ 34: "Blood pump failed rotor speed check.\nMismatch with rotor and motor speeds.",
+ 35: "Dialysis inlet pump failed motor controller current check.\nToo high when pump should be off or out of range when pump should be running.",
+ 36: "Dialysis inlet pump failed motor off check.\nMeasured speed while commanded off.",
+ 37: "Dialysis inlet pump failed motor direction check.\nMeasured vs commanded.",
+ 38: "Dialysis inlet pump failed rotor speed check.\nMismatch with rotor and motor speeds.",
+ 39: "Dialysis outlet pump failed motor controller current check.\nToo high when pump should be off or out of range when pump should be running.",
+ 40: "Dialysis outlet pump failed motor off check.\nMeasured speed while commanded off.",
+ 41: "Dialysis outlet pump failed motor direction check.\nMeasured vs commanded.",
+ 42: "Dialysis outlet pump failed rotor speed check.\nMismatch with rotor and motor speeds.",
+ 43: "Watchdog expired error.\nWatchdog was not \"pet\" within the appropriate time.",
+ 44: "User interface communication timeout.",
+ 45: "Too many bad CRCs detected on received system messages.",
+ 46: "System message that required acknowledgment was not acknowledged.",
+ 47: "Ultrafiltration rate is too high error during treatment.",
+ 48: "Ultrafiltration volume accuracy error during treatment.",
+ 49: "HD FPGA communication down for too long." ,
+ 50: "FPGA not accepting commanded valve states.",
+ 51: "Blood pump failed motor speed check.\nMeasured vs commanded.",
+ 52: "Dialysate inlet pump failed motor speed check.\nMeasured vs commanded." ,
+ 53: "Dialysate outlet pump failed motor speed check.\nMeasured vs commanded.",
+ 54: "HD critical data integrity check failed.",
+ 55: "DG critical data integrity check failed.",
+ 56: "HD accelerometer error (no readings or FPGA reports error).",
+ 57: "DG accelerometer error (no readings or FPGA reports error).",
+ 58: "HD valve homing failed.",
+ 59: "HD valve transition time out.",
+ 60: "HD valve not functional.",
+ 61: "HD valve current out of range.",
+ 62: "HD valve position out of target.",
+ 63: "FPGA reports failure reading arterial pressure sensor.",
+ 64: "FPGA reports failure reading venous pressure sensor.",
+ 65: "HD requests DG command with invalid parameter fault.",
+ 66: "This alarm ID is available for use.",
+ 67: "HD blood pump occlusion self-test failure alarm.",
+ 68: "HD active reservoir recirculation out of range.",
+ 69: "This alarm ID is available for use.",
+ 70: "HD arterial pressure self-test failure alarm.",
+ 71: "HD venous pressure self-test failure alarm.",
+ 72: "HD blood flow meter status check self-test failure alarm.",
+ 73: "HD dialysate flow meter status check self-test failure alarm.",
+ 74: "HD blood leak detector self-test failure alarm.",
+ 75: "HD syringe pump self-test failure alarm.",
+ 76: "HD monitored voltage is out of range.",
+ 77: "DG monitored voltage is out of range.",
+ 78: "HD syringe pump direction (from encoder) error.",
+ 79: "HD syringe pump direction (from controller) error.",
+ 80: "HD syringe pump fault reported by FPGA.",
+ 81: "HD syringe pump over travel error.",
+ 82: "HD syringe pump DAC write failure.",
+ 83: "HD syringe pump is running while the BP is off.",
+ 84: "HD venous pressure sensor not being read." ,
+ 85: "HD venous pressure sensor temperature out of range error.",
+ 86: "HD BP occlusion sensor not being read.",
+ 87: "This alarm ID is available for use.",
+ 88: "This alarm ID is available for use." ,
+ 89: "HD BP occlusion sensor error.",
+ 90: "This alarm ID is available for use.",
+ 91: "HD No dialysate flow data receive in the last 3 seconds.",
+ 92: "This alarm ID is available for use." ,
+ 93: "This alarm ID is available for use.",
+ 94: "This alarm ID is available for use." ,
+ 95: "This alarm ID is available for use." ,
+ 96: "This alarm ID is available for use.",
+ 97: "This alarm ID is available for use.",
+ 98: "HD battery communication fault." ,
+ 99: "HD syringe pump stall alarm.",
+ 100: "HD no cartridge self-test timeout." ,
+ 101: "HD dry self-test timeout.",
+ 102: "Real-time clock communication error.",
+ 103: "HD non-volatile calibration group invalid record CRC.",
+ 104: "Air trap level sensors reporting illegal combination of air/fluid.",
+ 105: "DG non-volatile system group invalid record CRC.",
+ 106: "This alarm ID is available for use.",
+ 107: "HD reports DG restarted fault.",
+ 108: "HD syringe pump ADC error.",
+ 109: "HD syringe pump volume check error.",
+ 110: "HD syringe pump speed check error.",
+ 111: "HD syringe pump not stopped in off state error.",
+ 112: "HD blood leak detector fault.",
+ 113: "HD arterial air bubble detector self-test failure.",
+ 114: "HD venous air bubble detector self-test failure.",
+ 115: "DG temperature sensor out of range.",
+ 116: "DG temperature sensor ADC out of range.",
+ 117: "DG primary heater internal temperature out of range." ,
+ 118: "DG primary heater cold junction temperature out of range." ,
+ 119: "DG trimmer heater internal temperature out of range." ,
+ 120: "DG trimmer heater cold junction temperature out of range." ,
+ 121: "DG main primary heater voltage out of range.",
+ 122: "DG small primary heater voltage out of range.",
+ 123: "DG trimmer heater voltage out of range.",
+ 124: "HD end of treatment alarm (high priority - user still not acting to end treatment)." ,
+ 125: "Blood sitting too long after treatment stopped by user alarm (>5 min)." ,
+ 126: "HD blood leak detected alarm.",
+ 127: "Venous pressure too low during treatment.",
+ 128: "HD venous air bubble detected alarm.",
+ 129: "HD venous air bubble detected rinseback alarm." ,
+ 130: "Venous pressure too high during treatment." ,
+ 131: "Arterial pressure too low during treatment." ,
+ 132: "Arterial pressure too high during treatment.",
+ 133: "DG fluid leak detected alarm.",
+ 134: "HD fluid leak detected alarm." ,
+ 135: "HD experienced large acceleration." ,
+ 136: "DG experienced large acceleration.",
+ 137: "HD tilt exceeds maximum." ,
+ 138: "DG tilt exceeds maximum.",
+ 139: "HD AC power lost alarm." ,
+ 140: "Dialysate generator communication timeout." ,
+ 141: "Air trap fill timeout during treatment.",
+ 142: "Blood pump occlusion detected.",
+ 143: "This alarm ID is available for use.",
+ 144: "This alarm ID is available for use.",
+ 145: "Concentrate conductivity after adding acid out of range alarm." ,
+ 146: "Dialysate conductivity out of range." ,
+ 147: "DG dialysate generation conductivity fault alarm.",
+ 148: "Inlet water temperature too high." ,
+ 149: "Inlet water temperature too low." ,
+ 150: "Inlet water conductivity too high." ,
+ 151: "Inlet water conductivity too low." ,
+ 152: "Inlet water pressure too low." ,
+ 153: "HD prime completed high priority alarm.",
+ 154: "EEPROM operations (read, write, erase) failure.",
+ 155: "This alarm ID is available for use.",
+ 156: "HW usage data (treatment time in HD and total consumed water in DG) failure.",
+ 157: "This alarm ID is available for use." ,
+ 158: "Blood pump failed flow vs motor speed check.",
+ 159: "Dialysate inlet pump failed flow vs motor speed check.",
+ 160: "Blood pump rotor speed too high.",
+ 161: "Blood flow sensor signal strength too low.",
+ 162: "Dialysate flow sensor signal strength too low.",
+ 163: "HD sees primary load cell for reservoir 1 change too much too fast.",
+ 164: "HD sees primary load cell for reservoir 2 change too much too fast.",
+ 165: "HD in treatment rinseback operation timeout.",
+ 166: "HD in treatment re-circ sub-mode for too long." ,
+ 167: "HD cartridge door opened alarm." ,
+ 168: "HD active reservoir depletion timeout.",
+ 169: "Dialysate flow rate out of range.",
+ 170: "HD syringe empty alarm." ,
+ 171: "HD syringe pump occlusion alarm.",
+ 172: "HD syringe pump not enough Heparin alarm.",
+ 173: "HD arterial air bubble detected alarm." ,
+ 174: "HD arterial air bubble detected rinseback alarm.",
+ 175: "HD pump direction status error.",
+ 176: "HD active reservoir is full during treatment and DG not ready to switch reservoirs.",
+ 177: "DG software fault.\nSoftware found itself in an unexpected state." ,
+ 178: "HD communication timeout.",
+ 179: "DG FPGA communication down for too long." ,
+ 180: "DG load cell ADC error." ,
+ 181: "DG load cells weight out of range for tare.",
+ 182: "DG load cells invalid calibration.",
+ 183: "DG invalid load cell value.",
+ 184: "Inlet or Outlet UV reactor not healthy.",
+ 185: "DG fan RPM out of range.",
+ 186: "DG concentrate pump fault." ,
+ 187: "DG concentrate pump CP1 speed control error.",
+ 188: "DG concentrate pump CP2 speed control error." ,
+ 189: "DG drain pump RPM out of range.",
+ 190: "DG drain pump off fault.",
+ 191: "DG flow rate out of upper range." ,
+ 192: "DG flow rate out of lower range." ,
+ 193: "RO pump flow rate out of range.",
+ 194: "DG RO pump duty cycle out of range.",
+ 195: "DG RO pump pressure out of range.",
+ 196: "DG temperature sensor error flag fault.",
+ 197: "DG temperature sensors ADC fault." ,
+ 198: "DG heaters cold junction temperature out of range.",
+ 199: "DG heaters fault." ,
+ 200: "DG thermistors/sensors temperature out of range.",
+ 201: "Inlet water quality is bad (temperature, conductivity, pressure).",
+ 202: "Inlet water pressure fault." ,
+ 203: "Pressure sensor fault.",
+ 204: "RO rejection ratio out of range." ,
+ 205: "Conductivity sensor fault.",
+ 206: "DG dialysate fill runs out of time." ,
+ 207: "DG flow meter check failure alarm.",
+ 208: "DG primary heater on with no flow time out.",
+ 209: "DG drain circulation line timeout.",
+ 210: "HD battery pack detected an error." ,
+ 211: "Blood sitting too long warning (>4 min).",
+ 212: "HD end of treatment alarm (user not acting to end treatment).",
+ 213: "HD prime completed medium priority alarm.",
+ 214: "HD Saline bolus volume check failure.",
+ 215: "HD rinseback volume check failure." ,
+ 216: "HD end treatment sub-mode timeout alarm.",
+ 217: "HD blood prime volume check failure.",
+ 218: "HD syringe detected alarm.",
+ 219: "HD syringe pump syringe removed alarm." ,
+ 220: "HD battery pack SOC is too low.",
+ 221: "HD Saline bag is empty.",
+ 222: "HD dialysate temperature too high alarm.",
+ 223: "HD dialysate temperature too low alarm.",
+ 224: "Treatment stopped by user action - pressed stop button.",
+ 225: "HD end of treatment warning." ,
+ 226: "HD prime completed low priority alarm.",
+ 227: "HD prime out of time alarm.",
+ 228: "HD time out on prime sub-mode purge air state.",
+ 229: "HD prime dialysate dialyzer time out alarm.",
+ 230: "HD prime dialysate bypass time out alarm." ,
+ 231: "HD pre-treatment mode dry self-tests failure." ,
+ 232: "HD pre-treatment mode wet self-tests failure." ,
+ 233: "RTC battery low." ,
+ 234: "RTC (i.e read time) or RAM operations failure (read or write)." ,
+ 235: "HD in treatment stopped sub-mode after rinseback completed (no escalation).",
+ 236: "HD needs new cartridge to be installed." ,
+ 237: "HD prime saline dialyzer time out alarm." ,
+ 238: "HD no cartridge loaded or installed improperly alarm." ,
+ 239: "HD fail to remove cartridge alarm." ,
+ 240: "Bicarb conductivity out of range during bicarb pump check alarm." ,
+ 241: "DG reservoir drain time out.",
+ 242: "DG reservoir fill time out.",
+ 243: "DG reservoir leak time out.",
+ 244: "DG temperature sensors difference out of range.",
+ 245: "DG heat disinfect target temperature time out (could not reach to temperature).",
+ 246: "DG heat disinfect inlet pressure and temperature sensors out of range.",
+ 247: "DG heat disinfect inlet conductivity and temperature out of range.",
+ 248: "DG chemical disinfect could not reach to target temperature." ,
+ 249: "DG chemical disinfect inlet pressure and temperature sensors out of range." ,
+ 250: "DG chemical disinfect inlet conductivity and temperature out of range." ,
+ 251: "HD invalid system record." ,
+ 252: "HD invalid service record.",
+ 253: "DG invalid system record." ,
+ 254: "DG invalid service record." ,
+ 255: "HD and UI software builds are not compatible.",
+ 256: "HD and DG software builds are not compatible.",
+ 257: "DG FPGA power out timeout.",
+ 258: "HD FPGA power out timeout." ,
+ 259: "HD temperatures out of range." ,
+ 260: "UI POST Application Integrity (Sha256Sum) failure.",
+ 261: "UI POST CANBus failure.",
+ 262: "UI POST Display failure.",
+ 263: "UI POST Touch failure." ,
+ 264: "UI POST SD-Card failure.",
+ 265: "UI POST RTC failure." ,
+ 266: "UI POST WiFi failure.",
+ 267: "UI POST Bluetooth failure.",
+ 268: "UI POST Ethernet failure.",
+ 269: "UI POST Sound failure." ,
+ 270: "HD POST Safety Shutdown failure.",
+ 271: "DG POST Safety Shutdown failure." ,
+ 272: "HD Fan RPM out of range." ,
+ 273: "HD measured blood pump flow rate is out of range." ,
+ 274: "HD measured dialysate inlet pump flow rate is out of range.",
+ 275: "HD arterial pressure sensor is reading out of range." ,
+ 276: "HD venous pressure sensor is reading out of range.",
+ 277: "HD BP occlusion sensor is reading out of range." ,
+ 278: "HD active reservoir weight out of range." ,
+ 279: "DG dialysate drain time out." ,
+ 280: "HD arterial pressure sensor read timeout error." ,
+ 281: "Acid concentration bottle low volume alarm." ,
+ 282: "Bicarbonate concentration bottle low volume alarm." ,
+ 283: "DG load cells weight out of range." ,
+ 284: "DG load cells primary/back up drift out of range.",
+ 285: "HD treatment recirculate timeout warning." ,
+ 286: "HD treatment rinseback complete timeout warning.",
+ 287: "HD processor clock speed checks against FPGA clock failure.",
+ 288: "DG trimmer heater on with flow timeout.",
+ 289: "Total number of alarms.",
+ 290: "ALARM_ID_UNDEFINED [{}]",
+ }
+
+ALARM_PRIORITIES = {1: "LOW", 2: "MEDIUM", 3: "HIGH"}
+NUM_OF_ALARM_PRIORITIES = 4 # Total number of alarm priorities
+ACCEPTED = True
+REJECTED = False
+ALARM_LIST_TITLE = "Alarm list"
+UNDEFINED_ALARM_ID_MSG = "ALARM_ID_UNDEFINED"
+ALARM_TITLE = "Alarm"
+
+
+ALARM_ID_NO_ALARM = 0
+ALARM_ID_OUT_OF_RANGE = 290
+
+ALARM_PRIORITY_OPTIONS = {
+ 0 : 'ALARM_PRIORITY_NONE' ,
+ 1 : 'ALARM_PRIORITY_LOW' ,
+ 2 : 'ALARM_PRIORITY_MEDIUM',
+ 3 : 'ALARM_PRIORITY_HIGH',
+}
+
+# alarm colors
+ALARMS_COLORS_HEADER = {
+ "ALARM_PRIORITY_NONE" : "#438feb",
+ "ALARM_PRIORITY_LOW" : "#db8f00",
+ "ALARM_PRIORITY_MEDIUM" : "#db8f00",
+ "ALARM_PRIORITY_HIGH" : "#831913"
+}
+
+ALARMS_COLORS_BODY = {
+ "ALARM_PRIORITY_NONE" : "#254670",
+ "ALARM_PRIORITY_LOW" : "#f5a623",
+ "ALARM_PRIORITY_MEDIUM" : "#f5a623",
+ "ALARM_PRIORITY_HIGH" : "#c53b33"
+}
+
+ALARM_MUTE_FLAG = 0B0000001000000000
+ALARM_UNMUTE_FLAG = 0B0000000000000000
+
+ALARM_BUTTONS_OK = 0B0000000010111000
+
+ALARM_BUTTONS_RESUME = 0B0000000000110000
+ALARM_BUTTONS_RESUME_RINSEBACK = 0B0000000000100000
+ALARM_BUTTONS_RESUME_END = 0B0000000000010000
+
+ALARM_BUTTONS_RINSEBACK = 0B0000000000101000
+ALARM_BUTTONS_RINSEBACK_RESUME = ALARM_BUTTONS_RESUME_RINSEBACK
+ALARM_BUTTONS_RINSEBACK_END = 0B0000000000001000
+
+ALARM_BUTTONS_END = 0B0000000000011000
+ALARM_BUTTONS_END_RESUME = ALARM_BUTTONS_RESUME_END
+ALARM_BUTTONS_END_RINSEBACK = ALARM_BUTTONS_RINSEBACK_END
+
+ALARM_BUTTONS_RESUME_RINSEBACK_END = 0B0000000000000000
+ALARM_BUTTONS_RINSEBACK_RESUME_END = ALARM_BUTTONS_RESUME_RINSEBACK_END
+ALARM_BUTTONS_END_RESUME_RINSEBACK = ALARM_BUTTONS_RESUME_RINSEBACK_END
+
+
+#standby mode
+GOODMORNING_START_TIME_SEC = 0
+GOODEVENING_START_TIME_SEC = 43200
+
+BLOOD_PRIMING_TEXT = "Blood Priming"
+LIQUID_UNIT = "mL"
+BLOOD_PRIMING_DEFAULT_VALUE = "0 mL"
+SALINE_BOLUS_CUMULATIVE = 300
+
+
+UF_MINIMUM_VALUE = 0
+UF_MAXIMUM_VALUE = 600
+PAUSED_TEXT = "Ultrafiltration Paused"
+RESUME_TEXT = "RESUME ULTRAFILTRATION"
+EDIT_TEXT = "EDIT ULTRAFILTRATION VOLUME"
+TITLE_TEXT = "ULTRAFILTRATION VOLUME (L)"
+
+
+# dictionary of rejection reason from application source code.
+# message location -> denali-> Headers-> common-> MsgDefs.h
+REJECTION_REASON = {
+ 0 : "No Active Alarm List" , # Used when there is no rejection
+ 1 : "REQUEST_REJECT_REASON_NOT_ALLOWED_IN_CURRENT_MODE" , # "REQuest is not allowed in the current operating mode
+ 2 : "REQUEST_REJECT_REASON_TIMEOUT_WAITING_FOR_USER_CONFIRM" , # Validated "REQuest was not confirmed by user in reasonable time
+ 3 : "REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE" , # "REQuest is not allowed if not in treatment mode
+ 4 : "REQUEST_REJECT_REASON_INVALID_TREATMENT_STATE" , # "REQuest is not allowed in current treatment state
+ 5 : "REQUEST_REJECT_REASON_TREATMENT_TOO_CLOSE_TO_FINISHED" , # "REQuest is not allowed so near end of treatment
+ 6 : "REQUEST_REJECT_REASON_TREATMENT_TIME_OUT_OF_RANGE" , # Treatment duration is out of range
+ 7 : "REQUEST_REJECT_REASON_TREATMENT_TIME_LESS_THAN_CURRENT" , # Treatment time change is less than currently elapsed treatment time
+ 8 : "REQUEST_REJECT_REASON_BLOOD_FLOW_OUT_OF_RANGE" , # Blood flow is out of range
+ 9 : "REQUEST_REJECT_REASON_DIAL_FLOW_OUT_OF_RANGE" , # Dialysate flow is out of range
+ 10 : "REQUEST_REJECT_REASON_DIAL_VOLUME_OUT_OF_RANGE" , # Dialysate flow rate or treatment duration causes dialysate volume to exceed limit
+ 11 : "REQUEST_REJECT_REASON_UF_VOLUME_OUT_OF_RANGE" , # Ultrafiltration volume is out of range
+ 12 : "REQUEST_REJECT_REASON_UF_RATE_OUT_OF_RANGE" , # Ultrafiltration rate is out of range
+ 13 : "REQUEST_REJECT_REASON_TREATMENT_TIME_LESS_THAN_MINIMUM" , # Treatment time change is less than minimum treatment time
+ 14 : "REQUEST_REJECT_REASON_UF_NOT_IN_PROGESS" , # Ultrafiltration is not currently in progress
+ 15 : "REQUEST_REJECT_REASON_UF_NOT_PAUSED" , # Ultrafiltration is not currently paused
+ 16 : "REQUEST_REJECT_REASON_SALINE_BOLUS_IN_PROGRESS" , # A saline bolus is in progress
+ 17 : "REQUEST_REJECT_REASON_PARAM_OUT_OF_RANGE" , # A treatment parameter is out of range
+ 18 : "REQUEST_REJECT_REASON_HEPARIN_PRESTOP_EXCEEDS_DURATION" , # The Heparin pre-stop setting is greater than the treatment duration
+ 19 : "REQUEST_REJECT_REASON_ARTERIAL_PRESSURE_LOW_VS_HIGH" , # Arterial pressure low and high alarm limits are not inconsistent
+ 20 : "REQUEST_REJECT_REASON_VENOUS_PRESSURE_LOW_VS_HIGH" , # Venous pressure low and high alarm limits are inconsistent
+ 21 : "REQUEST_REJECT_REASON_SALINE_MAX_VOLUME_REACHED" , # Saline bolus volume maximum has been reached - no more saline allowed
+ 22 : "REQUEST_REJECT_REASON_SALINE_BOLUS_NOT_IN_PROGRESS" , # A saline bolus is not in progress
+ 23 : "REQUEST_REJECT_REASON_ACTION_DISABLED_IN_CURRENT_STATE" , # "REQuested user action is disabled in current state
+ 24 : "REQUEST_REJECT_REASON_ALARM_IS_ACTIVE" , # "REQuested user action not allowed while alarm is active
+ 25 : "REQUEST_REJECT_REASON_INVALID_COMMAND" , # "REQuested user action invalid
+ 26 : "REQUEST_REJECT_REASON_TREATMENT_IS_COMPLETED" , # The treatment has been completed
+ 27 : "REQUEST_REJECT_REASON_ADDL_RINSEBACK_MAX_VOLUME_REACHED" , # Rinseback additional volume maximum has been reached - no more additional rinsebacks allowed
+ 28 : "REQUEST_REJECT_REASON_UF_VOLUME_NOT_SET" , # Ultrafiltration volume is not set yet
+ 29 : "REQUEST_REJECT_REASON_NO_PATIENT_CONNECTION_CONFIRM" , # The user has not confirmed patient connection
+ 30 : "REQUEST_REJECT_REASON_HEPARIN_PAUSE_INVALID_IN_THIS_STATE" , # Heparin cannot be paused if not currently deliverying Heparin
+ 31 : "REQUEST_REJECT_REASON_HEPARIN_NOT_PAUSED" , # Heparin cannot be resumed if not paused
+ 32 : "REQUEST_REJECT_REASON_DG_COMM_LOST" , # Treatment cannot initiate if DG comm is lost
+ 33 : "REQUEST_REJECT_REASON_DRAIN_NOT_COMPLETE" , # Post-treatment reservoirs drain not complete
+ 34 : "REQUEST_REJECT_REASON_DG_NOT_IN_STANDBY_IDLE_STATE" , # Treatment cannot initiate if DG is not in standby idle state
+ 35 : "REQUEST_REJECT_REASON_INVALID_REQUEST_FORMAT" , # "REQuest message not formatted properly
+ 36 : "REQUEST_REJECT_REASON_INVALID_DATE_OR_TIME" , # Given date/time is invalid
+ 37 : "REQUEST_REJECT_REASON_NO_NEW_TREATMENT_ALARM_TRIGGERED" , # Treatment cannot initiate if an alarm with no new treatment property has triggered before
+ 38 : "REQUEST_REJECT_REASON_BATTERY_IS_NOT_CHARGED" , # Battery does not have enough charge to start treatment
+ 39 : "REQUEST_REJECT_REASON_RINSEBACK_NOT_COMPLETED" , # Cannot move on to recirculate without completing full rinseback
+}
+
+NUM_OF_REQUEST_REJECT_REASONS = 39
+
+#main treatment pressure
+PRESSURE_TITLE = "PRESSURES"
+ARTERIAL_TITLE = "Arterial"
+VENOUS_TITLE = "Venous"
+VENOUS_UOM = "mmHg"
+ARTERIAL_UOM = "mmHg"
+LOW_TEXT = "LOW"
+HIGH_TEXT = "HIGH"
+ACCEPTED = True
+REJECTED = False
+
+#pressure
+PRESSURE_STEPS = 10
+ARTERIAL_PRESSURE_MINIMUM = -400
+ARTERIAL_PRESSURE_MAXIMUM = +600
+ARTERIAL_PRESSURE_LOW_MIN = -300
+ARTERIAL_PRESSURE_LOW_DEF = -300
+ARTERIAL_PRESSURE_LOW_MAX = +200
+ARTERIAL_PRESSURE_HIGH_MIN = -300
+ARTERIAL_PRESSURE_HIGH_DEF = +100
+ARTERIAL_PRESSURE_HIGH_MAX = +200
+
+VENOUS_PRESSURE_MINIMUM = -100
+VENOUS_PRESSURE_MAXIMUM = +700
+VENOUS_PRESSURE_LOW_MIN = -100
+VENOUS_PRESSURE_LOW_DEF = -100
+VENOUS_PRESSURE_LOW_MAX = +600
+VENOUS_PRESSURE_HIGH_MIN = +100
+VENOUS_PRESSURE_HIGH_DEF = +400
+VENOUS_PRESSURE_HIGH_MAX = +600
+
+#main_treatment_flows
+BLOOD_FLOW_MINIMUM_VALUE = 100
+BLOOD_FLOW_BUFFER = 25
+FLOW_SLIDER_WIDTH_BUFFER = 37
+BLOOD_FLOW_MAXIMUM_VALUE = 500
+DIALYSATE_FLOW_MINIMUM_VALUE = 0
+DIALYSATE_FLOW_MAXIMUM_VALUE = 0 # Seems to be bug. need change
+FLOW_UNIT = "mL/min"
+BLOOD_FLOW_TEXT = "blood"
+DIALYSATE_FLOW_TEXT = "dialysate"
+
+#main treatment screen
+VITALS_TITLE = "VITALS"
+OUT_OF_RANGE_COLOR = "#c53b33"
+IN_RANGE_COLOR = "#fcfcfc"
+SYSTOLIC_LOWER_LIMIT = 60
+SYSTOLIC_UPPER_LIMIT = 250
+DIASTOLIC_LOWER_LIMIT = 40
+DIASTOLIC_UPPER_LIMIT = 200
+HEART_RATE_LOWER_LIMIT = 40
+HEART_RATE_UPPER_LIMIT = 180
+HEART_RATE_TITLE = "Heart Rate"
+BLOOD_PRESSURE_TITLE = "Blood Pressure"
+BLOOD_PRESSURE_UNIT = "mmHg"
+HEART_RATE_UNIT = "BPM"
+BLOOD_PRIMING_RANGE = 300
+BLOOD_PRIMING_TARGET_MAXIMUM = 300
+
+
+#tst_treatment_monitoring
+FLOWS_TEXT = "FLOWS"
+BLOOD_UNIT = "mL/min"
+DIALYSATE_TEXT = "Dialysate"
+BLOOD_TEXT = "Blood"
+VITALS_TEXT = "VITALS"
+BLOOD_PRESSURE_TEXT = "mmHg"
+HEARTRATE_UNIT = "BPM"
+PRESSURE_TEXT = "PRESSURE (mmHg)"
+ARTEREAL_TEXT = "Arterial"
+VENOUS_TEXT = "Venous"
+TIME_DURATION_TEXT = "Time Remaining"
+ULTRAFILTERATION_TEXT = "ULTRAFILTRATION VOLUME (L)"
+SALINE_BOLUS = "SALINE BOLUS"
+VOLUME_DELIVERED = "Volume Delivered"
+CUMULATIVE_DELIVERED = "Cumulative Delivered"
+HEPARIN_TEXT = "HEPARIN"
+VOLUME_DELIVERED = "Volume Delivered"
+
+#patient id
+CHARACTER_PATIENT_ID = ["qwerty","sampleid","abcdefghijklmnop","patientid", "username"]
+ALPHANUMERIC_PATIENT_ID = ["sA@MpLE#123", "A@BH&321","5432@qwerty"]
+KEYBOARD_SWITCH = ["ABC", "&123"]
+
+
+#main-treatment heparin
+HEPARIN_UNIT = "mL"
+HEPARIN_DELIVERY_TEXT = "HEPARIN DELIVERY"
+HEPARIN_DELIVERY_OFF_TEXT = "Heparin Delivery Off"
+HEPARIN_STOP_TEXT = "Heparin Delivery Stopped"
+HEPARIN_RESUME_DELIVERY_TEXT = "RESUME DELIVERY"
+HEPARIN_BOLUS_ACTIVE_TEXT = "Heparin Bolus Active"
+HEPARIN_PAUSE_DELIVERY_TEXT = "PAUSE DELIVERY"
+HEPARIN_MAXIMUM_VOLUME_DELIVERED_TEXT = "Maximum Cumulative Heparin Volume Delivered"
+HEPARIN_SYRINGE_EMPTY_TEXT = "Heparin Syringe Empty"
+
+#Time_Duration
+PAUSED_TEXT = "Treatment Paused"
CREATE_TREATMENT_PARAMETERS = ["Blood Flow Rate", "Dialysate Flow Rate", "Duration","Heparin Dispensing Rate",
"Heparin Bolus Volume","Heparin Stop Time", "Saline Bolus","Dialysate Temperature","Blood Pressure Measurement Interval",
"Rinseback Flow Rate"]
-
Index: shared/scripts/configuration/utility.py
===================================================================
diff -u -rfed7c8b5a54773c39ada56105305174959a8a7be -reabfecc1d8d205f4b8888b99158c54f5ac92ae4e
--- shared/scripts/configuration/utility.py (.../utility.py) (revision fed7c8b5a54773c39ada56105305174959a8a7be)
+++ shared/scripts/configuration/utility.py (.../utility.py) (revision eabfecc1d8d205f4b8888b99158c54f5ac92ae4e)
@@ -7,9 +7,7 @@
#
# @file utils.py
#
-# @author (last) Papiya Mandal
-# @date (last) 21-Jan-2022
-# @author (last) Joseph varghese
+# @author (last) LTTS
# @date (last) 15-Jan-2022
#
############################################################################
@@ -23,7 +21,7 @@
from dialin.ui import utils
from datetime import datetime
from dialin.ui.hd_simulator import HDSimulator
-#from builtins import str as pyStr
+from builtins import int as pyInt
#from builtins import float as pyFloat
hd = HDSimulator()
@@ -63,13 +61,13 @@
return True
return False
-
-def scroll_to_zone(zone=None, screen_object=None):
+
+def scroll_to_zone(zone=None, screen_object=None, direction = None):
"""
- scroll to the numeric if object is hidden
- @param zone - UI object
- @param screen_object - container object of zone
- @return boolean true/false
+ scroll to the UI, if object is hidden
+ @param zone - object to be find out.
+ @param screen_object - object of the screen.
+ @return boolean
"""
counter = 0
while counter <= 100:
@@ -182,3 +180,92 @@
def rejection_msg(text):
names.rejection_msg["text"] = text
return names.rejection_msg
+
+def set_slider_value(slider_value= None, slider_object= None, bidirectional= False,
+ slider_range = None):
+ """
+ Method to drag slider to desired value
+ @param slider_value : value in which slider should be placed
+ @param slider_object : object of the slider
+ @param bidirectional : True, if slider have 2 handler
+ @return boolean (True - if user able to select slider. else, false)
+ """
+ slider_value = pyFloat(slider_value)
+ actual_value = slider_value
+ if slider_range == "Max":
+ x_value = 600
+ else:
+ x_value = 0
+ counter = 0
+ while True:
+ if slider_value < 0:
+ slider_value = -1 * slider_value
+ squish.mouseDrag(slider_object, x_value, 0, slider_value, 0, squish.Qt.NoModifier,
+ squish.Qt.LeftButton)
+ if counter == 50:
+ test.fail("User unable to fix slider value")
+ return False
+ if bidirectional is True:
+ if slider_range == "Low":
+ if actual_value == pyFloat(slider_object.minValue):
+ return True
+ if slider_value >= pyFloat(slider_object.minValue):
+ slider_value = slider_value - 30
+ if slider_value <= pyFloat(slider_object.minValue):
+ slider_value = slider_value + 30
+ if slider_range == "Max":
+ if actual_value == pyFloat(slider_object.maxValue):
+ return True
+ if slider_value >= pyFloat(slider_object.maxValue):
+ slider_value = slider_value + 30
+ if slider_value <= pyFloat(slider_object.maxValue):
+ slider_value = slider_value - 30
+ else:
+ if actual_value == pyFloat(slider_object.value):
+ return True
+ if slider_value >= pyFloat(slider_object.value):
+ slider_value = slider_value + 30
+ if slider_value <= pyFloat(slider_object.value):
+ slider_value = slider_value - 30
+ counter = counter + 1
+
+
+def slider_movement_for_negative_values(slider_value= None, slider_object= None, bidirectional= False,
+ slider_range = None):
+ """
+ Method to drag slider for negative values value
+ @param slider_value : value in which slider should be placed
+ @param slider_object : object of the slider
+ @param bidirectional : True, if slider have 2 handler
+ @return boolean (True - if user able to select slider. else, false)
+ """
+ slider_value = pyFloat(slider_value)
+ actual_value = slider_value
+ if slider_range == "Max":
+ x_value = 600
+ else:
+ x_value = 0
+ counter = 0
+ while True:
+ squish.mouseDrag(slider_object, x_value, 0, slider_value, 0, squish.Qt.NoModifier,
+ squish.Qt.LeftButton)
+ if counter == 50:
+ test.fail("User unable to fix slider slider_value")
+ return False
+ if bidirectional is True:
+ if slider_range == "Low":
+ if actual_value == pyFloat(slider_object.minValue):
+ return True
+ if slider_value >= pyFloat(slider_object.minValue):
+ slider_value = slider_value + 30
+ if slider_value <= pyFloat(slider_object.minValue):
+ slider_value = slider_value - 30
+ if slider_range == "Max":
+ if actual_value == pyFloat(slider_object.maxValue):
+ return True
+ if slider_value >= pyFloat(slider_object.maxValue):
+ slider_value = slider_value + 30
+ if slider_value <= pyFloat(slider_object.maxValue):
+ slider_value = slider_value - 30
+ counter = counter + 1
+
Index: shared/scripts/names.py
===================================================================
diff -u -ra444d63bdd6253aa0b98144365a03eaf6d39811f -reabfecc1d8d205f4b8888b99158c54f5ac92ae4e
--- shared/scripts/names.py (.../names.py) (revision a444d63bdd6253aa0b98144365a03eaf6d39811f)
+++ shared/scripts/names.py (.../names.py) (revision eabfecc1d8d205f4b8888b99158c54f5ac92ae4e)
@@ -35,8 +35,6 @@
o_PreTreatementCreateStack_PreTreatmentBase_TreatmentFlowBase = {"container":o_PreTreatmentCreateStack_PreTreatmentBase_TreatmentFlowBase,"objectName":"_PreTreatmentBase","type":"TreatmentFlowBase", "visible": True}
o_treatmentStack_treatmentHome_TreatmentHome = {"container": o_treatmentStack_TreatmentStack, "id": "_treatmentHome", "type": "TreatmentHome", "unnamed": 1, "visible": True}
-
-#create_treatment
o_confirmButton_TouchRect = {"container": o_Gui_MainView, "gradient": 0, "objectName": "_confirmButton", "type": "TouchRect", "visible": False}
o_backButton_BackButton = {"container": o_Gui_MainView, "gradient": 0, "objectName": "_backButton", "type": "BackButton", "visible": False}
o_NinePatchImage = {"container": o_Gui_MainView, "occurrence": 6, "type": "NinePatchImage", "unnamed": 1, "visible": False}
@@ -326,3 +324,23 @@
o_done_indicator = {"container": o_initialModeScreen_ScreenItem, "id": "_checkIndicator", "source": "qrc:/images/iBusyDone", "type": "Image", "unnamed": 1, "visible": True}
o_fail_indicator = {"container": o_initialModeScreen_ScreenItem, "id": "_checkIndicator", "source": "qrc:/images/iBusyFail", "type": "Image", "unnamed": 1, "visible": True}
o_progress_bar = {"container": o_initialModeScreen_ScreenItem, "id": "_textMaximum", "type": "Text", "unnamed": 1, "visible": False}
+
+#create_treatment
+o_PreTreatmentBase_confirmButton_TouchRect = {"container": o_PreTreatmentCreateStack_PreTreatmentBase_TreatmentFlowBase, "text": "CONFIRM", "type": "Text", "unnamed": 1, "visible": True}
+o_PreTreatmentCreate_bloodFlowRate_SliderCreateTreatment = {"container": o_PreTreatmentCreateStack_PreTreatmentCreate_PreTreatmentCreate, "gradient": 0, "objectName": "_bloodFlowRate", "type": "SliderCreateTreatment", "visible": True}
+o_PreTreatmentBase_confirmButton_TouchRect_2 = {"container": o_PreTreatmentCreateStack_PreTreatmentBase_TreatmentFlowBase, "gradient": 0, "objectName": "_confirmButton", "type": "TouchRect", "visible": True}
+o_PreTreatmentCreate_heparinDispensingRate_SliderCreateTreatment = {"container": o_PreTreatmentCreateStack_PreTreatmentCreate_PreTreatmentCreate, "gradient": 0, "objectName": "_heparinDispensingRate", "type": "SliderCreateTreatment", "visible": True}
+o_PreTreatmentBase_backgroundRect_Rectangle_2 = {"container": o_PreTreatmentCreateStack_PreTreatmentBase_TreatmentFlowBase, "gradient": 0, "id": "_backgroundRect", "type": "Rectangle", "unnamed": 1, "visible": True}
+o_PreTreatmentCreateStack_PreTreatmentConfirm_TreatmentFlowBase = {"container": o_PreTreatmentCreateStack_PreTreatmentCreateStack, "objectName": "_PreTreatmentConfirm", "type": "TreatmentFlowBase", "visible": True}
+o_treatment_confirm_flickable = {"container": o_PreTreatmentCreateStack_PreTreatmentConfirm_TreatmentFlowBase, "objectName": "_PreTreatmentConfirmFlickable", "type": "Flickable", "visible": True}
+o_prescription_mesurement = {"container": o_PreTreatmentCreateStack_PreTreatmentConfirm_TreatmentFlowBase, "type": "Text", "visible": True}
+o_operating_parameters = {"container": o_PreTreatmentCreateStack_PreTreatmentCreate_PreTreatmentCreate, "type": "Text", "unnamed": 1, "visible": True}
+o_treatment_create_flickable = {"container": o_PreTreatmentCreateStack_PreTreatmentCreate_PreTreatmentCreate, "objectName": "TreatmentCreateFlickable", "type": "Flickable", "visible": True}
+o_create_treatment_screen = {"container": o_PreTreatmentCreateStack_PreTreatmentCreate_PreTreatmentCreate, "objectName": "TreatmentCreateFlickable", "type": "Flickable", "visible": True}
+o_confirm_title_text = {"container": o_PreTreatmentCreateStack_PreTreatmentConfirm_TreatmentFlowBase, "text": "Confirm Treatment", "type": "Text", "unnamed": 1, "visible": True}
+o_prescription_title_text = {"container": o_PreTreatmentCreateStack_PreTreatmentConfirm_TreatmentFlowBase, "objectName": "ConfirmTreatmentTable_prescription", "type": "Text", "visible": True}
+o_input_patient_id = {"container": o_PreTreatmentCreateStack_PreTreatmentBase_TreatmentFlowBase, "echoMode": 0, "id": "_input", "type": "TextInput", "unnamed": 1, "visible": True}
+o_confirm_button = {"container": o_PreTreatmentCreateStack_PreTreatmentBase_TreatmentFlowBase, "text": "CONFIRM", "type": "Text", "unnamed": 1, "visible": True}
+o_back_button_confirm_treatment = {"container": o_Gui_MainView, "type": "Text", "unnamed": 1, "visible": True}
+
+
Index: suite.conf
===================================================================
diff -u -rc6274593f3f5a607595b95f0243313a6cf32d599 -reabfecc1d8d205f4b8888b99158c54f5ac92ae4e
--- suite.conf (.../suite.conf) (revision c6274593f3f5a607595b95f0243313a6cf32d599)
+++ suite.conf (.../suite.conf) (revision eabfecc1d8d205f4b8888b99158c54f5ac92ae4e)
@@ -1,10 +1,9 @@
AUT=denaliSquish
-CWD=
ENVVARS=envvars
-HOOK_SUB_PROCESSES=true
+HOOK_SUB_PROCESSES=false
IMPLICITAUTSTART=0
LANGUAGE=Python
OBJECTMAPSTYLE=script
-TEST_CASES=tst_post tst_patientID_UI tst_standbymode tst_pre_treatment tst_case1
+TEST_CASES=tst_environment tst_post tst_standbymode tst_In_treatment tst_main_treatment_pressure tst_treatment_blood_dialysateflow_rate tst_main_treatment_vitals tst_ui_alarms_list tst_ui_alarms_dialog tst_main_treatment_ultrafilteration tst_main_treatment_heparin
VERSION=3
WRAPPERS=Qt
Index: tst_In_treatment/test.py
===================================================================
diff -u -rc6274593f3f5a607595b95f0243313a6cf32d599 -reabfecc1d8d205f4b8888b99158c54f5ac92ae4e
--- tst_In_treatment/test.py (.../test.py) (revision c6274593f3f5a607595b95f0243313a6cf32d599)
+++ tst_In_treatment/test.py (.../test.py) (revision eabfecc1d8d205f4b8888b99158c54f5ac92ae4e)
@@ -16,20 +16,14 @@
# section
import names
-import squish
import re
-from time import sleep
from dialin.ui import utils
from dialin.ui import unittests
-
from dialin.ui.hd_simulator import HDSimulator
from builtins import str as pyStr
-from builtins import int as pyInt
+from configuration import utility, config
-BLOOD_PRIMING_TEXT = "Blood Priming"
-SALINE_UNIT = "mL"
-BLOOD_PRIMING_DEFAULT_VALUE = "0 mL"
UF_MINIMUM_VALUE = 0.000
UF_MAXIMUM_VALUE = 0.600
UF_DEFAULT_VALUE = 0.000
@@ -44,12 +38,12 @@
@return: N/A
"""
- blood_priming_page = waitForObject(names.blood_priming)
+ blood_priming_page = waitForObject(names.o_blood_priming)
blood_priming_text = blood_priming_page.text
- test.compare(blood_priming_text, BLOOD_PRIMING_TEXT)
- blood_priming_value = waitForObject(names.blood_priming_value_by_default)
+ test.compare(blood_priming_text, config.BLOOD_PRIMING_TEXT)
+ blood_priming_value = waitForObject(names.o_blood_priming_value_by_default)
blood_priming_text = blood_priming_value.text
- test.compare(blood_priming_text, BLOOD_PRIMING_DEFAULT_VALUE)
+ test.compare(blood_priming_text, config.BLOOD_PRIMING_DEFAULT_VALUE)
def verification_of_uf_from_dialysis_state():
@@ -58,10 +52,10 @@
@return: N/A
"""
- uf_minimum = waitForObject(names.uf_minimum_value)
+ uf_minimum = waitForObject(names.o_uf_minimum_value)
uf_minimum_value = uf_minimum.text
test.compare(format(UF_MINIMUM_VALUE, ".3f"), uf_minimum_value)
- uf_maximum = waitForObject(names.uf_maximum_value)
+ uf_maximum = waitForObject(names.o_uf_maximum_value)
uf_maximum_value = uf_maximum.text
test.compare(format(UF_MAXIMUM_VALUE,".3f"), uf_maximum_value)
@@ -72,7 +66,7 @@
@input: expected target value.
"""
- saline_value = waitForObject(names.fluid_text)
+ saline_value = waitForObject(names.o_fluid_text)
saline_target = object.children(saline_value)[0]
target_value = saline_target.text
target_value_displayed = re.findall(r'\d+', pyStr(target_value))
@@ -85,9 +79,9 @@
@input: expected cumulative value.
"""
- saline_text = waitForObject(names.cumulative_fluid_text)
+ saline_text = waitForObject(names.o_cumulative_fluid_text)
saline_unit = object.children(saline_text)[0]
- if saline_unit.text == SALINE_UNIT:
+ if saline_unit.text == config.LIQUID_UNIT:
saline_cumulative = object.children(saline_text)[1]
test.compare(pyStr(expected_cumulative_value), pyStr(saline_cumulative.text))
else:
@@ -100,9 +94,9 @@
@input: expected delivered value.
"""
- saline_text = waitForObject(names.fluid_text)
+ saline_text = waitForObject(names.o_fluid_text)
saline_unit = object.children(saline_text)[1]
- if saline_unit.text == SALINE_UNIT:
+ if saline_unit.text == config.LIQUID_UNIT:
saline_cumulative = object.children(saline_text)[2]
test.compare(pyStr(expected_delivered_value), pyStr(saline_cumulative.text))
else:
@@ -116,33 +110,33 @@
@return: N/A
"""
#user clicks on ultra filteration section
- uf_maximum = waitForObject(names.uf_maximum_value)
+ uf_maximum = waitForObject(names.o_uf_maximum_value)
mouseClick(uf_maximum)
utils.waitForGUI(0.5)
- uf_minimum = waitForObject(names.uf_minimum_value_pop_up)
+ uf_minimum = waitForObject(names.o_uf_minimum_value_pop_up)
uf_minimum_value = uf_minimum.text
test.compare(format(UF_MINIMUM_VALUE, ".3f"), uf_minimum_value)
- test.log(f"Uf minimum value should be {format(UF_MINIMUM_VALUE,'.3f')}")
+ test.log("Uf minimum value should be "+format(UF_MINIMUM_VALUE,'.3f'))
- uf_maximum = waitForObject(names.uf_maximum_value_pop_up)
+ uf_maximum = waitForObject(names.o_uf_maximum_value_pop_up)
uf_maximum_value = uf_maximum.text
test.compare(format(UF_MAXIMUM_VALUE,".3f"), uf_maximum_value)
- test.log(f"Uf maximum value should be {format(UF_MAXIMUM_VALUE,'.3f')}")
+ test.log("Uf maximum value should be "+format(UF_MAXIMUM_VALUE,'.3f'))
- tapObject(waitForObject(names.edit_uf_value))
- uf_maximum_displayed = waitForObject(names.uf_maximum_value)
+ tapObject(waitForObject(names.o_edit_uf_value))
+ uf_maximum_displayed = waitForObject(names.o_uf_maximum_value)
test.compare(format(UF_MAXIMUM_VALUE,".3f"), uf_maximum_displayed.text)
- test.log(f"Uf maximum value displayed on uf_edit section should be " +\
- f"{format(UF_MAXIMUM_VALUE,'.3f')} by default")
+ test.log("Uf maximum value displayed on uf_edit section should be " +\
+ format(UF_MAXIMUM_VALUE,'.3f')+" by default")
utils.waitForGUI(1)
- tapObject(waitForObject(names.uf_back_button))
- tapObject(waitForObject(names.uf_close_button))
+ tapObject(waitForObject(names.o_uf_back_button))
+ tapObject(waitForObject(names.o_uf_close_button))
def main():
- utils.tstStart("Verification of In-Treatment section of application")
- startApplication("denaliSquish")
+ utils.tstStart("tst_In-treatment")
+ utility.start_application(config.AUT_NAME)
hd = HDSimulator()
@@ -172,18 +166,16 @@
hd.cmd_set_treatment_saline_bolus_data(target = target_value,
cumulative = cumulative_value,
delivered = delivered_value)
- test.log(f"Verification of saline values from dialysis state for target value : {target_value}"+\
- f" cumulative value : {cumulative_value} and delivered value : {delivered_value}")
+ test.log("Verification of saline values from dialysis state for target value :" + str(target_value)+\
+ " cumulative value :" +str(cumulative_value)+" and delivered value :"+ str(delivered_value))
verification_of_target_value(expected_target_value = target_value)
utils.waitForGUI(0.5)
verification_of_delivered_value(expected_delivered_value = delivered_value)
utils.waitForGUI(0.5)
verification_of_cumulative_value(expected_cumulative_value = cumulative_value)
utils.waitForGUI(0.5)
- #hd.cmd_set_saline_bolus_response(accepted= 1, reason=0, target=150, state= 1)
-
-
+
utils.tstDone()
Index: tst_post/test.py
===================================================================
diff -u -rc6274593f3f5a607595b95f0243313a6cf32d599 -reabfecc1d8d205f4b8888b99158c54f5ac92ae4e
--- tst_post/test.py (.../test.py) (revision c6274593f3f5a607595b95f0243313a6cf32d599)
+++ tst_post/test.py (.../test.py) (revision eabfecc1d8d205f4b8888b99158c54f5ac92ae4e)
@@ -1,48 +1,113 @@
# -*- coding: utf-8 -*-
-
-##
# 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 tst_post
-# date 2020/12/27
-# author Behrouz NematiPour
+# date 03/17/2022
+# author Papiya Mandal
#
+import names
-# NOTE:
-# This test is a demo and is intended to be used as an example on how to call the dialin API within SquishQt.
+from builtins import int as pyInt
+from configuration.config import AUT_NAME
+from dialin.ui import utils
+from dialin.ui.hd_simulator import HDSimulator
+MSGS_AND_CONDITIONS = { 1: [True, False], 5: [True, False], 2: [True, False],
+ 4: [True, False], 8: [True, False], 9: [False, False],
+ 3: [True, False], 10: [True, False], 15: [True, False],
+ 11: [True, False], 17: [True, False], 12: [True, False],
+ 20: [True, False], 13: [True, False], 14: [True, False],
+ 6: [False, False], 19: [True, False], 18: [True, False],
+ 7: [True, True], 16: [False, True],
+ }
+
+hd = HDSimulator()
-# import names
-from time import sleep
-from dialin.ui import utils
-from dialin.ui import unittests
+def get_progress():
+ """
+ Method to obtain progress
+ @return: Progress value
+ """
+ progress_bar = object.parent(waitForObjectExists(names.o_progress_bar))
+ progress_bar_children = object.children(progress_bar)
+ progress_bar_val_parent = progress_bar_children[3]
+ progress_bar_val_parents_children = object.children(progress_bar_val_parent)
+ progress_bar_val = progress_bar_val_parents_children[1]
+ return progress_bar_val.text.toUtf8().constData()
+
-from dialin.ui.hd_simulator import HDSimulator
-# from dialin.ui.dg_simulator import DGSimulator
-# from dialin.ui.hd_simulator_alarms import HDAlarmsSimulator
+def verify_the_progress(value, final_msg_posted) -> None:
+ """
+ Method to verify the progress
+ @param value: int single message
+ """
+ progress = pyInt(get_progress())-1
+ if final_msg_posted is True:
+ test.xcompare(value, progress, "Final value " +
+ "{value} should ".format(value=value) +
+ "not reflect on the progress bar")
+ elif final_msg_posted is False:
+ test.compare(value, progress, "{value}".format(value=value) +
+ " should reflect on progress bar")
+
-def main():
- utils.tstStart("demo")
- startApplication("denaliSquish")
+def post_a_message_and_verify_progress_and_completion(msgs_and_conditions):
+ """
+ method to post a message and verify the progress bar and
+ if final message is posted
+ """
+ for msg, conditions in msgs_and_conditions.items():
+ final_msg = conditions[0]
+ final_msg_posted = conditions[1]
+ hd.cmd_send_hd_post(msg, final_msg, final_msg_posted)
+ utils.waitForGUI(2)
+ verify_the_progress(value=msg, final_msg_posted=final_msg_posted)
+ verify_final_message_posted(final_msg=final_msg, final_msg_posted=final_msg_posted)
+
+
+def verify_final_message_posted(final_msg=None, final_msg_posted=None) -> None:
+ """
+ method to verify the indication of final
+ message posted
+ @param final_msg: bool final message(True/False)
+ @param final_msg_posted: bool if this is the final post message(True/False)
+ @return: None
+ """
+ test.startSection("Verifying the status")
+ if final_msg == True and final_msg_posted == True:
- hd = HDSimulator()
- #dg = DGSimulator()
+ if object.exists(names.o_done_indicator):
+ done_indicator = waitForObject(names.o_done_indicator)
+ test.compare(done_indicator.enabled, True, "Done, Final value passed")
+
+ elif (final_msg == False and final_msg_posted == True) :
+
+ if object.exists(names.o_fail_indicator):
+ fail_indicator = waitForObject(names.o_fail_indicator)
+ test.compare(fail_indicator.enabled, True, "Failed, Final value not passed")
+
+ elif (final_msg == True and final_msg_posted == False)\
+ or (final_msg == False and final_msg_posted == False):
+
+ if object.exists(names.o_busy_indicator):
+ busy_indicator = waitForObject(names.o_busy_indicator)
+ test.compare(busy_indicator.enabled, True, "Waiting for a value")
+ test.endSection()
+def main():
+
+ utils.tstStart(__file__)
+ startApplication(AUT_NAME)
+
hd.cmd_send_power_on_self_test_version_request()
- for i in range(20):
- hd.cmd_send_hd_post(i, True, False)
- sleep(0.1)
- hd.cmd_send_hd_post(0, True, True)
- hd.cmd_send_hd_operation_mode(4, 0)
+
+ post_a_message_and_verify_progress_and_completion(MSGS_AND_CONDITIONS)
+ utils.waitForGUI(2)
- unittests.test_python_version()
- unittests.test_crc8()
- unittests.test_can0()
-
utils.tstDone()
Index: tst_standbymode/test.py
===================================================================
diff -u -r0cc92d3b75bfb96dc4ecafd760a9ce15e455033b -reabfecc1d8d205f4b8888b99158c54f5ac92ae4e
--- tst_standbymode/test.py (.../test.py) (revision 0cc92d3b75bfb96dc4ecafd760a9ce15e455033b)
+++ tst_standbymode/test.py (.../test.py) (revision eabfecc1d8d205f4b8888b99158c54f5ac92ae4e)
@@ -14,17 +14,20 @@
# NOTE:
# This test contradicts verification of standbymode.
-
-import names
import datetime
-import test
+import names
+
from time import sleep
from dialin.ui import utils
from dialin.ui.hd_simulator import HDSimulator
-from configuration import utility, config
+from configuration import config
from builtins import int as pyInt
+GOODMORNING_START_TIME_SEC = 0
+GOODEVENING_START_TIME_SEC = 43200
+
+
def get_current_time():
"""
Tests to get current time.
@@ -70,11 +73,11 @@
def main():
- utils.tstStart("tst_standbymode")
- utility.start_application(config.AUT_NAME)
+ utils.tstStart(__file__)
+ startApplication(config.AUT_NAME)
hd = HDSimulator()
- #dg = DGSimulator()
+
hd.cmd_send_power_on_self_test_version_request()
hd.cmd_send_hd_operation_mode(3)