Index: dialin/common/alarm_defs.py =================================================================== diff -u -rc1ea1df3705c31440c25aba6cb39ea94974a2cb7 -ra1ee274cb5cab5f83deae1c39efef89ee81289df --- dialin/common/alarm_defs.py (.../alarm_defs.py) (revision c1ea1df3705c31440c25aba6cb39ea94974a2cb7) +++ dialin/common/alarm_defs.py (.../alarm_defs.py) (revision a1ee274cb5cab5f83deae1c39efef89ee81289df) @@ -8,9 +8,9 @@ # @file alarm_defs.py # # @author (last) Peter Lucia -# @date (last) 10-Jun-2021 +# @date (last) 04-Aug-2021 # @author (original) Peter Lucia -# @date (original) 10-Jun-2021 +# @date (original) 04-Aug-2021 # ############################################################################ from enum import unique @@ -25,224 +25,271 @@ ALARM_ID_HD_FPGA_POST_TEST_FAILED = 2 ALARM_ID_DG_FPGA_POST_TEST_FAILED = 3 ALARM_ID_WATCHDOG_POST_TEST_FAILED = 4 - ALARM_ID_UI_COMM_POST_FAILED = 5 - ALARM_ID_RTC_CONFIG_ERROR = 6 - ALARM_ID_HD_ACCELEROMETER_SELF_TEST_FAILURE = 7 - ALARM_ID_DG_ACCELEROMETER_SELF_TEST_FAILURE = 8 - ALARM_ID_RTC_OR_TIMER_ACCURACY_FAILURE = 9 - ALARM_ID_DG_HEATERS_SELF_TEST_FAILURE = 10 - ALARM_ID_HD_INTEGRITY_POST_TEST_FAILED = 11 - ALARM_ID_DG_INTEGRITY_POST_TEST_FAILED = 12 - ALARM_ID_HD_BLOOD_FLOW_INVALID_CALIBRATION = 13 - ALARM_ID_HD_DIALYSATE_FLOW_INVALID_CALIBRATION = 14 - ALARM_ID_HD_SOFTWARE_FAULT = 15 - ALARM_ID_BLOOD_PUMP_MC_CURRENT_CHECK = 16 - ALARM_ID_BLOOD_PUMP_OFF_CHECK = 17 - ALARM_ID_BLOOD_PUMP_MC_DIRECTION_CHECK = 18 - ALARM_ID_BLOOD_PUMP_ROTOR_SPEED_CHECK = 19 - ALARM_ID_DIAL_IN_PUMP_MC_CURRENT_CHECK = 20 - ALARM_ID_DIAL_IN_PUMP_OFF_CHECK = 21 - ALARM_ID_DIAL_IN_PUMP_MC_DIRECTION_CHECK = 22 - ALARM_ID_DIAL_IN_PUMP_ROTOR_SPEED_CHECK = 23 - ALARM_ID_DIAL_OUT_PUMP_MC_CURRENT_CHECK = 24 - ALARM_ID_DIAL_OUT_PUMP_OFF_CHECK = 25 - ALARM_ID_DIAL_OUT_PUMP_MC_DIRECTION_CHECK = 26 - ALARM_ID_DIAL_OUT_PUMP_ROTOR_SPEED_CHECK = 27 - ALARM_ID_WATCHDOG_EXPIRED = 28 - ALARM_ID_UI_COMM_TIMEOUT = 29 - ALARM_ID_COMM_TOO_MANY_BAD_CRCS = 30 - ALARM_ID_CAN_MESSAGE_NOT_ACKED = 31 - ALARM_ID_UF_RATE_TOO_HIGH_ERROR = 32 - ALARM_ID_UF_VOLUME_ACCURACY_ERROR = 33 - ALARM_ID_HD_FPGA_COMM_TIMEOUT = 34 - ALARM_ID_VALVE_CONTROL_FAILURE = 35 - ALARM_ID_BLOOD_PUMP_MOTOR_SPEED_CHECK = 36 - ALARM_ID_DIAL_IN_PUMP_MOTOR_SPEED_CHECK = 37 - ALARM_ID_DIAL_OUT_PUMP_MOTOR_SPEED_CHECK = 38 - ALARM_ID_HD_CRITICAL_DATA_ERROR = 39 - ALARM_ID_DG_CRITICAL_DATA_ERROR = 40 - ALARM_ID_HD_ACCELEROMETER_FAILURE = 41 - ALARM_ID_DG_ACCELEROMETER_FAILURE = 42 - ALARM_ID_HD_VALVE_HOMING_FAILED = 43 - ALARM_ID_HD_VALVE_TRANSITION_TIMEOUT = 44 - ALARM_ID_HD_VALVE_NOT_FUNCTIONAL = 45 - ALARM_ID_HD_VALVE_CURRENT_OUT_OF_RANGE = 46 - ALARM_ID_HD_VALVE_POSITION_OUT_OF_RANGE = 47 - ALARM_ID_ARTERIAL_PRESSURE_SENSOR_FAULT = 48 - ALARM_ID_VENOUS_PRESSURE_SENSOR_FAULT = 49 - ALARM_ID_DG_COMMAND_INVALID_PARAMETER_FAULT = 50 - ALARM_ID_NVDATAMGMT_GROUP_RECORD_CRC_INVALID = 51 - ALARM_ID_HD_BP_OCCLUSION_SELF_TEST_FAILURE = 52 - ALARM_ID_HD_DIP_OCCLUSION_SELF_TEST_FAILURE = 53 - ALARM_ID_HD_DOP_OCCLUSION_SELF_TEST_FAILURE = 54 - ALARM_ID_HD_ARTERIAL_PRESSURE_SELF_TEST_FAILURE = 55 - ALARM_ID_HD_VENOUS_PRESSURE_SELF_TEST_FAILURE = 56 - ALARM_ID_HD_BLOOD_FLOW_STATUS_SELF_TEST_FAILURE = 57 - ALARM_ID_HD_DIALYSATE_FLOW_STATUS_SELF_TEST_FAILURE = 58 - ALARM_ID_HD_BLOOD_LEAK_SELF_TEST_FAILURE = 59 - ALARM_ID_HD_VOLTAGE_OUT_OF_RANGE = 60 - ALARM_ID_DG_VOLTAGE_OUT_OF_RANGE = 61 - ALARM_ID_HD_SYRINGE_PUMP_ENCODER_DIRECTION_ERROR = 62 - ALARM_ID_HD_SYRINGE_PUMP_CONTROLLER_DIRECTION_ERROR = 63 - ALARM_ID_HD_SYRINGE_PUMP_FAULT = 64 - ALARM_ID_HD_SYRINGE_PUMP_OVER_TRAVEL_ERROR = 65 - ALARM_ID_HD_SYRINGE_PUMP_DAC_WRITE_ERROR = 66 - ALARM_ID_HD_SYRINGE_PUMP_RUNNING_WHILE_BP_OFF_ERROR = 67 - ALARM_ID_DG_FPGA_COMM_TIMEOUT = 68 - ALARM_ID_DG_LOAD_CELL_ADC_ERROR = 69 - ALARM_ID_HD_VENOUS_PRESSURE_READ_TIMEOUT_ERROR = 70 - ALARM_ID_HD_VENOUS_PRESSURE_SENSOR_TEMP_OUT_OF_RANGE = 71 - ALARM_ID_HD_BP_OCCLUSION_READ_TIMEOUT_ERROR = 72 - ALARM_ID_HD_DPI_OCCLUSON_READ_TIMEOUT_ERROR = 73 - ALARM_ID_HD_DPO_OCCLUSION_READ_TIMEOUT_ERROR = 74 - ALARM_ID_HD_BP_OCCLUSION_SENSOR_ERROR = 75 - ALARM_ID_HD_DPI_OCCLUSION_SENSOR_ERROR = 76 - ALARM_ID_HD_DPO_OCCLUSION_SENSOR_ERROR = 77 - ALARM_ID_DG_CONCENTRATE_PUMP_FAULT = 78 - ALARM_ID_HD_BP_FLOW_READ_TIMEOUT_ERROR = 79 - ALARM_ID_HD_BP_FLOW_SENSOR_ERROR = 80 - ALARM_ID_HD_DP_FLOW_READ_TIMEOUT_ERROR = 81 - ALARM_ID_HD_DP_FLOW_SENSOR_ERROR = 82 - ALARM_ID_HD_BP_FLOW_SLOW_READ_TIMEOUT_ERROR = 83 - ALARM_ID_HD_DP_FLOW_SLOW_READ_TIMEOUT_ERROR = 84 - ALARM_ID_DG_LOAD_CELLS_TARE_WEIGHT_OUT_OF_RANGE = 85 - ALARM_ID_HD_BATTERY_COMM_FAULT = 86 - ALARM_ID_HD_SYRINGE_PUMP_STALL = 87 - ALARM_ID_HD_NO_CART_SELF_TEST_TIMEOUT = 88 - ALARM_ID_HD_DRY_SELF_TEST_TIMEOUT = 89 - ALARM_ID_DG_TEMPERATURE_SENSOR_FAULT = 90 - ALARM_ID_DG_SOFTWARE_FAULT = 91 - ALARM_ID_RTC_COMM_ERROR = 92 - ALARM_ID_DG_INVALID_LOAD_CELL_VALUE = 93 - ALARM_ID_DG_DRAIN_CIRCULATION_LINE_TIMEOUT = 94 - ALARM_ID_DG_TEMPERATURE_SENSORS_ADC_FAULT = 95 - ALARM_ID_DG_FLOW_METER_CHECK_FAILURE = 96 - ALARM_ID_RO_PUMP_FLOW_RATE_OUT_OF_RANGE = 97 - ALARM_ID_FLOW_RATE_OUT_OF_UPPER_RANGE = 98 - ALARM_ID_FLOW_RATE_OUT_OF_LOWER_RANGE = 99 - ALARM_ID_RO_PUMP_OFF_FAULT = 100 - ALARM_ID_RO_PUMP_PRESSURE_OUT_OF_RANGE = 101 - ALARM_ID_DRAIN_PUMP_RPM_OUT_OF_RANGE = 102 - ALARM_ID_DRAIN_PUMP_OFF_FAULT = 103 - ALARM_ID_DG_HEATERS_NEGATIVE_COLD_JUNCTION_TEMPERATURE = 104 - ALARM_ID_DG_HEATERS_FAULT = 105 - ALARM_ID_DG_THERMISTORS_TEMPERATURE_OUT_OF_RANGE = 106 - ALARM_ID_CP1_SPEED_CONTROL_ERROR = 107 - ALARM_ID_CP2_SPEED_CONTROL_ERROR = 108 - ALARM_ID_RO_REJECTION_RATIO_OUT_OF_RANGE = 109 - ALARM_ID_INLET_WATER_PRESSURE_FAULT = 110 - ALARM_ID_PRESSURE_SENSOR_FAULT = 111 - ALARM_ID_CONDUCTIVITY_SENSOR_FAULT = 112 - ALARM_ID_NVDATA_MFG_RECORD_CRC_ERROR = 113 - ALARM_ID_AIR_TRAP_ILLEGAL_LEVELS = 114 - ALARM_ID_NVDATAMGMT_INDIVIDUAL_RECORD_CRC_INVALID = 115 - ALARM_ID_NVDATAMGMT_INDIVIDUAL_RECORD_TIME_INVALID = 116 - ALARM_ID_DG_RESTARTED_FAULT = 117 - ALARM_ID_HD_SYRINGE_PUMP_ADC_ERROR = 118 - ALARM_ID_HD_SYRINGE_PUMP_VOLUME_ERROR = 119 - ALARM_ID_HD_SYRINGE_PUMP_SPEED_ERROR = 120 - ALARM_ID_HD_SYRINGE_PUMP_NOT_STOPPED_ERROR = 121 - ALARM_ID_HD_BLOOD_LEAK_FAULT = 122 - ALARM_ID_DG_LOAD_CELLS_INVALID_CALIBRATION = 123 - ALARM_ID_DG_PRIMARY_HEATERS_INTERNAL_TEMP_OUT_OF_RANGE = 124 - ALARM_ID_DG_TRIMMER_HEATER_INTERNAL_TEMP_OUT_OF_RANGE = 125 - ALARM_ID_DG_HEATERS_ON_WITH_NO_FLOW_TIMEOUT = 126 - ALARM_ID_HD_ARTERIAL_BUBBLE_SELF_TEST_FAILURE = 127 - ALARM_ID_HD_VENOUS_BUBBLE_SELF_TEST_FAILURE = 128 - ALARM_ID_END_OF_TREATMENT_HIGH = 129 - ALARM_ID_TREATMENT_STOPPED_NO_RINSEBACK = 130 - ALARM_ID_HD_BLOOD_LEAK_DETECTED = 131 - ALARM_ID_VENOUS_PRESSURE_LOW = 132 - ALARM_ID_HD_VENOUS_BUBBLE_DETECTED = 133 - ALARM_ID_HD_VENOUS_BUBBLE_DETECTED_RINSEBACK = 134 - ALARM_ID_VENOUS_PRESSURE_HIGH = 135 - ALARM_ID_ARTERIAL_PRESSURE_LOW = 136 - ALARM_ID_ARTERIAL_PRESSURE_HIGH = 137 - ALARM_ID_DG_FLUID_LEAK_DETECTED = 138 - ALARM_ID_HD_FLUID_LEAK_DETECTED = 139 - ALARM_ID_HD_SHOCK = 140 - ALARM_ID_DG_SHOCK = 141 - ALARM_ID_HD_EXCESSIVE_TILT = 142 - ALARM_ID_DG_EXCESSIVE_TILT = 143 - ALARM_ID_HD_AC_POWER_LOST = 144 - ALARM_ID_DG_COMM_TIMEOUT = 145 - ALARM_ID_AIR_TRAP_FILL_DURING_TREATMENT = 146 - ALARM_ID_OCCLUSION_BLOOD_PUMP = 147 - ALARM_ID_OCCLUSION_DIAL_IN_PUMP = 148 - ALARM_ID_OCCLUSION_DIAL_OUT_PUMP = 149 - ALARM_ID_ACID_CONDUCTIVITY_OUT_OF_RANGE = 150 - ALARM_ID_DIALYSATE_CONDUCTIVITY_OUT_OF_RANGE = 151 - ALARM_ID_DIALYSATE_CONDUCTIVITY_FAULT = 152 - ALARM_ID_INLET_WATER_HIGH_TEMPERATURE = 153 - ALARM_ID_INLET_WATER_LOW_TEMPERATURE = 154 - ALARM_ID_INLET_WATER_HIGH_CONDUCTIVITY = 155 - ALARM_ID_INLET_WATER_LOW_CONDUCTIVITY = 156 - ALARM_ID_INLET_WATER_LOW_PRESSURE = 157 - ALARM_ID_PRIME_COMPLETED_HIGH = 158 - ALARM_ID_UV_REACTOR_NOT_HEALTHY = 159 - ALARM_ID_DG_FAN_RPM_OUT_OF_RANGE = 160 - ALARM_ID_DG_DIALYSATE_FILL_OUT_OF_TIME = 161 - ALARM_ID_NVDATA_EEPROM_OPS_FAILURE = 162 - ALARM_ID_NVDATA_SRVC_RECORD_CRC_ERROR = 163 - ALARM_ID_NVDATA_HW_USAGE_DATA_CRC_ERROR = 164 - ALARM_ID_HD_COMM_TIMEOUT = 165 - ALARM_ID_BLOOD_PUMP_FLOW_VS_MOTOR_SPEED_CHECK = 166 - ALARM_ID_DIAL_IN_PUMP_FLOW_VS_MOTOR_SPEED_CHECK = 167 - ALARM_ID_BLOOD_PUMP_ROTOR_SPEED_TOO_HIGH = 168 - ALARM_ID_BLOOD_FLOW_SIGNAL_STRENGTH_TOO_LOW = 169 - ALARM_ID_DIALYSATE_FLOW_SIGNAL_STRENGTH_TOO_LOW = 170 - ALARM_ID_HD_LOAD_CELL_ACCELERATION_RES_1_ALARM = 171 - ALARM_ID_HD_LOAD_CELL_ACCELERATION_RES_2_ALARM = 172 - ALARM_ID_TREATMENT_RINSEBACK_TIMEOUT_ALARM = 173 - ALARM_ID_TREATMENT_RECIRC_TIMEOUT_ALARM = 174 - ALARM_ID_CARTRIDGE_DOOR_OPENED = 175 - ALARM_ID_DIALYSATE_TEMPERATURE_TOO_HIGH = 176 - ALARM_ID_DIALYSATE_TEMPERATURE_TOO_LOW = 177 - ALARM_ID_HD_SYRINGE_PUMP_SYRINGE_EMPTY = 178 - ALARM_ID_HD_SYRINGE_PUMP_OCCLUSION = 179 - ALARM_ID_DG_BAD_INLET_WATER_QUALITY = 180 - ALARM_ID_HD_SYRINGE_PUMP_NOT_ENOUGH_HEPARIN_ALARM = 181 - ALARM_ID_HD_ARTERIAL_BUBBLE_DETECTED = 182 - ALARM_ID_HD_ARTERIAL_BUBBLE_DETECTED_RINSEBACK = 183 - ALARM_ID_HD_PUMP_DIRECTION_STATUS_ERROR = 184 - ALARM_ID_NVDATA_CAL_RECORD_CRC_ERROR = 185 - ALARM_ID_HD_RESERVOIR_FULL_AND_DG_NOT_READY_TO_SWITCH = 186 - ALARM_ID_BLOOD_SITTING_WARNING = 187 - ALARM_ID_END_OF_TREATMENT_ALARM = 188 - ALARM_ID_PRIME_COMPLETED_MEDIUM = 189 - ALARM_ID_SALINE_BOLUS_VOLUME_CHECK_FAILURE = 190 - ALARM_ID_RINSEBACK_VOLUME_CHECK_FAILURE = 191 - ALARM_ID_END_TREATMENT_TIMEOUT_ALARM = 192 - ALARM_ID_BLOOD_PRIME_VOLUME_CHECK_FAILURE = 193 - ALARM_ID_HD_SYRINGE_DETECTED = 194 - ALARM_ID_HD_SYRINGE_PUMP_SYRINGE_REMOVED = 195 - ALARM_ID_EMPTY_SALINE_BAG = 196 - ALARM_ID_DIALYSATE_TEMPERATURE_HIGH = 197 - ALARM_ID_DIALYSATE_TEMPERATURE_LOW = 198 - ALARM_ID_TREATMENT_STOPPED_BY_USER = 199 - ALARM_ID_END_OF_TREATMENT_WARNING = 200 - ALARM_ID_PRIME_COMPLETED_LOW_PRIORITY = 201 - ALARM_ID_PRIME_OUT_OF_TIME = 202 - ALARM_ID_HD_PRIME_PURGE_AIR_TIME_OUT = 203 - ALARM_ID_PRIME_DIALYSATE_DIALYZER_TIME_OUT = 204 - ALARM_ID_PRIME_DIALYSATE_BYPASS_TIME_OUT = 205 - ALARM_ID_PRE_TREATMENT_DRY_SELF_TEST_FAILURE = 206 - ALARM_ID_PRE_TREATMENT_WET_SELF_TEST_FAILURE = 207 - ALARM_ID_RTC_BATTERY_LOW = 208 - ALARM_ID_RTC_RAM_OPS_ERROR = 209 - ALARM_ID_TREATMENT_STOPPED_AFTER_RINSEBACK = 210 - ALARM_ID_INSTALL_NEW_CARTRIDGE = 211 - ALARM_ID_CARTRIDGE_INSTALLED_IMPROPERLY = 212 - ALARM_ID_NO_CARTRIDGE_LOADED = 213 - ALARM_ID_CARTRIDGE_REMOVAL_FAILURE = 214 - ALARM_ID_BICARB_CONDUCTIVITY_OUT_OF_RANGE = 215 - ALARM_ID_DG_RESERVOIR_DRAIN_TIMEOUT = 216 - ALARM_ID_DG_RESERVOIR_FILL_TIMEOUT = 217 - ALARM_ID_DG_RESERVOIR_LEAK_TIMEOUT = 218 - ALARM_ID_DG_TEMP_SENSORS_DIFF_OUT_OF_RANGE = 219 - ALARM_ID_DG_HEAT_DISINFECT_TARGET_TEMP_TIMEOUT = 220 - ALARM_ID_DG_HEAT_DISINFECT_INLET_PRES_AND_TEMP_SNSRS_OUT = 221 - ALARM_ID_DG_HEAT_DISINFECT_INLET_COND_AND_TEMP_OUT = 222 - ALARM_ID_DG_CHEM_DISINFECT_TARGET_TEMP_TIMEOUT = 223 - ALARM_ID_DG_CHEM_DISINFECT_INLET_PRES_AND_TEMP_SNSRS_OUT = 224 - ALARM_ID_DG_CHEM_DISINFECT_INLET_COND_AND_TEMP_OUT = 225 + ALARM_ID_DG_WATCHDOG_POST_TEST_FAILED = 5 + ALARM_ID_UI_COMM_POST_FAILED = 6 + ALARM_ID_RTC_CONFIG_ERROR = 7 + ALARM_ID_HD_ACCELEROMETER_SELF_TEST_FAILURE = 8 + ALARM_ID_DG_ACCELEROMETER_SELF_TEST_FAILURE = 9 + ALARM_ID_RTC_OR_TIMER_ACCURACY_FAILURE = 10 + ALARM_ID_DG_HEATERS_SELF_TEST_FAILURE = 11 + ALARM_ID_HD_INTEGRITY_POST_TEST_FAILED = 12 + ALARM_ID_DG_INTEGRITY_POST_TEST_FAILED = 13 + ALARM_ID_HD_BLOOD_FLOW_INVALID_CALIBRATION = 14 + ALARM_ID_HD_DIALYSATE_FLOW_INVALID_CALIBRATION = 15 + ALARM_ID_HD_ALARM_AUDIO_SELF_TEST_FAILURE = 16 + ALARM_ID_HD_UI_POST_FAILED = 17 + ALARM_ID_DG_PRESSURE_SENSORS_INVALID_CAL_RECORD = 18 + ALARM_ID_DG_FLOW_SENSORS_INVALID_CAL_RECORD = 19 + ALARM_ID_DG_COND_SENSORS_INVALID_CAL_RECORD = 20 + ALARM_ID_DG_DRAIN_LINE_VOLUME_INVALID_CAL_RECORD = 21 + ALARM_ID_DG_RESERVOIRS_INVALID_CAL_RECORD = 22 + ALARM_ID_DG_ACID_CONCENTRATE_INVALID_CAL_RECORD = 23 + ALARM_ID_DG_BICARB_CONCENTRATE_INVALID_CAL_RECORD = 24 + ALARM_ID_DG_ACCELEROMETERS_INVALID_CAL_RECORD = 25 + ALARM_ID_HD_ACCELEROMETERS_INVALID_CAL_RECORD = 26 + ALARM_ID_HD_BLOOD_FLOW_INVALID_CAL_RECORD = 27 + ALARM_ID_HD_DIALYSATE_FLOW_INVALID_CAL_RECORD = 28 + ALARM_ID_HD_HEPARIN_FORCE_SENSOR_INVALID_CAL_RECORD = 29 + ALARM_ID_HD_SOFTWARE_FAULT = 30 + ALARM_ID_BLOOD_PUMP_MC_CURRENT_CHECK = 31 + ALARM_ID_BLOOD_PUMP_OFF_CHECK = 32 + ALARM_ID_BLOOD_PUMP_MC_DIRECTION_CHECK = 33 + ALARM_ID_BLOOD_PUMP_ROTOR_SPEED_CHECK = 34 + ALARM_ID_DIAL_IN_PUMP_MC_CURRENT_CHECK = 35 + ALARM_ID_DIAL_IN_PUMP_OFF_CHECK = 36 + ALARM_ID_DIAL_IN_PUMP_MC_DIRECTION_CHECK = 37 + ALARM_ID_DIAL_IN_PUMP_ROTOR_SPEED_CHECK = 38 + ALARM_ID_DIAL_OUT_PUMP_MC_CURRENT_CHECK = 39 + ALARM_ID_DIAL_OUT_PUMP_OFF_CHECK = 40 + ALARM_ID_DIAL_OUT_PUMP_MC_DIRECTION_CHECK = 41 + ALARM_ID_DIAL_OUT_PUMP_ROTOR_SPEED_CHECK = 42 + ALARM_ID_WATCHDOG_EXPIRED = 43 + ALARM_ID_UI_COMM_TIMEOUT = 44 + ALARM_ID_COMM_TOO_MANY_BAD_CRCS = 45 + ALARM_ID_CAN_MESSAGE_NOT_ACKED = 46 + ALARM_ID_UF_RATE_TOO_HIGH_ERROR = 47 + ALARM_ID_UF_VOLUME_ACCURACY_ERROR = 48 + ALARM_ID_HD_FPGA_COMM_TIMEOUT = 49 + ALARM_ID_VALVE_CONTROL_FAILURE = 50 + ALARM_ID_BLOOD_PUMP_MOTOR_SPEED_CHECK = 51 + ALARM_ID_DIAL_IN_PUMP_MOTOR_SPEED_CHECK = 52 + ALARM_ID_DIAL_OUT_PUMP_MOTOR_SPEED_CHECK = 53 + ALARM_ID_HD_CRITICAL_DATA_ERROR = 54 + ALARM_ID_DG_CRITICAL_DATA_ERROR = 55 + ALARM_ID_HD_ACCELEROMETER_FAILURE = 56 + ALARM_ID_DG_ACCELEROMETER_FAILURE = 57 + ALARM_ID_HD_VALVE_HOMING_FAILED = 58 + ALARM_ID_HD_VALVE_TRANSITION_TIMEOUT = 59 + ALARM_ID_HD_VALVE_NOT_FUNCTIONAL = 60 + ALARM_ID_HD_VALVE_CURRENT_OUT_OF_RANGE = 61 + ALARM_ID_HD_VALVE_POSITION_OUT_OF_RANGE = 62 + ALARM_ID_ARTERIAL_PRESSURE_SENSOR_FAULT = 63 + ALARM_ID_VENOUS_PRESSURE_SENSOR_FAULT = 64 + ALARM_ID_DG_COMMAND_INVALID_PARAMETER_FAULT = 65 + ALARM_ID_NVDATAMGMT_GROUP_RECORD_CRC_INVALID = 66 + ALARM_ID_HD_BP_OCCLUSION_SELF_TEST_FAILURE = 67 + ALARM_ID_HD_DIP_OCCLUSION_SELF_TEST_FAILURE = 68 + ALARM_ID_HD_DOP_OCCLUSION_SELF_TEST_FAILURE = 69 + ALARM_ID_HD_ARTERIAL_PRESSURE_SELF_TEST_FAILURE = 70 + ALARM_ID_HD_VENOUS_PRESSURE_SELF_TEST_FAILURE = 71 + ALARM_ID_HD_BLOOD_FLOW_STATUS_SELF_TEST_FAILURE = 72 + ALARM_ID_HD_DIALYSATE_FLOW_STATUS_SELF_TEST_FAILURE = 73 + ALARM_ID_HD_BLOOD_LEAK_SELF_TEST_FAILURE = 74 + ALARM_ID_HD_SYRINGE_PUMP_SELF_TEST_FAILURE = 75 + ALARM_ID_HD_VOLTAGE_OUT_OF_RANGE = 76 + ALARM_ID_DG_VOLTAGE_OUT_OF_RANGE = 77 + ALARM_ID_HD_SYRINGE_PUMP_ENCODER_DIRECTION_ERROR = 78 + ALARM_ID_HD_SYRINGE_PUMP_CONTROLLER_DIRECTION_ERROR = 79 + ALARM_ID_HD_SYRINGE_PUMP_FAULT = 80 + ALARM_ID_HD_SYRINGE_PUMP_OVER_TRAVEL_ERROR = 81 + ALARM_ID_HD_SYRINGE_PUMP_DAC_WRITE_ERROR = 82 + ALARM_ID_HD_SYRINGE_PUMP_RUNNING_WHILE_BP_OFF_ERROR = 83 + ALARM_ID_HD_VENOUS_PRESSURE_READ_TIMEOUT_ERROR = 84 + ALARM_ID_HD_VENOUS_PRESSURE_SENSOR_TEMP_OUT_OF_RANGE = 85 + ALARM_ID_HD_BP_OCCLUSION_READ_TIMEOUT_ERROR = 86 + ALARM_ID_HD_DPI_OCCLUSON_READ_TIMEOUT_ERROR = 87 + ALARM_ID_HD_DPO_OCCLUSION_READ_TIMEOUT_ERROR = 88 + ALARM_ID_HD_BP_OCCLUSION_SENSOR_ERROR = 89 + ALARM_ID_HD_DPI_OCCLUSION_SENSOR_ERROR = 90 + ALARM_ID_HD_DPO_OCCLUSION_SENSOR_ERROR = 91 + ALARM_ID_HD_BP_FLOW_READ_TIMEOUT_ERROR = 92 + ALARM_ID_HD_BP_FLOW_SENSOR_ERROR = 93 + ALARM_ID_HD_DP_FLOW_READ_TIMEOUT_ERROR = 94 + ALARM_ID_HD_DP_FLOW_SENSOR_ERROR = 95 + ALARM_ID_HD_BP_FLOW_SLOW_READ_TIMEOUT_ERROR = 96 + ALARM_ID_HD_DP_FLOW_SLOW_READ_TIMEOUT_ERROR = 97 + ALARM_ID_HD_BATTERY_COMM_FAULT = 98 + ALARM_ID_HD_SYRINGE_PUMP_STALL = 99 + ALARM_ID_HD_NO_CART_SELF_TEST_TIMEOUT = 100 + ALARM_ID_HD_DRY_SELF_TEST_TIMEOUT = 101 + ALARM_ID_RTC_COMM_ERROR = 102 + ALARM_ID_NVDATA_MFG_RECORD_CRC_ERROR = 103 + ALARM_ID_AIR_TRAP_ILLEGAL_LEVELS = 104 + ALARM_ID_NVDATAMGMT_INDIVIDUAL_RECORD_CRC_INVALID = 105 + ALARM_ID_NVDATAMGMT_INDIVIDUAL_RECORD_TIME_INVALID = 106 + ALARM_ID_DG_RESTARTED_FAULT = 107 + ALARM_ID_HD_SYRINGE_PUMP_ADC_ERROR = 108 + ALARM_ID_HD_SYRINGE_PUMP_VOLUME_ERROR = 109 + ALARM_ID_HD_SYRINGE_PUMP_SPEED_ERROR = 110 + ALARM_ID_HD_SYRINGE_PUMP_NOT_STOPPED_ERROR = 111 + ALARM_ID_HD_BLOOD_LEAK_FAULT = 112 + ALARM_ID_HD_ARTERIAL_BUBBLE_SELF_TEST_FAILURE = 113 + ALARM_ID_HD_VENOUS_BUBBLE_SELF_TEST_FAILURE = 114 + ALARM_ID_DG_TEMPERATURE_SENSOR_OUT_OF_RANGE = 115 + ALARM_ID_DG_TEMPERATURE_SENSOR_ADC_OUT_OF_RANGE = 116 + ALARM_ID_DG_PRIMARY_HEATER_INTERNAL_TEMP_OUT_OF_RANGE = 117 + ALARM_ID_DG_PRIMARY_HEATER_CJ_TEMP_OUT_OF_RANGE = 118 + ALARM_ID_DG_TRIMMER_HEATER_INTERNAL_TEMP_OUT_OF_RANGE = 119 + ALARM_ID_DG_TRIMMER_HEATER_CJ_TEMP_OUT_OF_RANGE = 120 + ALARM_ID_DG_MAIN_PRIMARY_HEATER_VOLTAGE_OUT_OF_RANGE = 121 + ALARM_ID_DG_SMALL_PRIMARY_HEATER_VOLTAGE_OUT_OF_RANGE = 122 + ALARM_ID_DG_TRIMMER_HEATER_VOLTAGE_OUT_OF_RANGE = 123 + ALARM_ID_END_OF_TREATMENT_HIGH = 124 + ALARM_ID_TREATMENT_STOPPED_NO_RINSEBACK = 125 + ALARM_ID_HD_BLOOD_LEAK_DETECTED = 126 + ALARM_ID_VENOUS_PRESSURE_LOW = 127 + ALARM_ID_HD_VENOUS_BUBBLE_DETECTED = 128 + ALARM_ID_HD_VENOUS_BUBBLE_DETECTED_RINSEBACK = 129 + ALARM_ID_VENOUS_PRESSURE_HIGH = 130 + ALARM_ID_ARTERIAL_PRESSURE_LOW = 131 + ALARM_ID_ARTERIAL_PRESSURE_HIGH = 132 + ALARM_ID_DG_FLUID_LEAK_DETECTED = 133 + ALARM_ID_HD_FLUID_LEAK_DETECTED = 134 + ALARM_ID_HD_SHOCK = 135 + ALARM_ID_DG_SHOCK = 136 + ALARM_ID_HD_EXCESSIVE_TILT = 137 + ALARM_ID_DG_EXCESSIVE_TILT = 138 + ALARM_ID_HD_AC_POWER_LOST = 139 + ALARM_ID_DG_COMM_TIMEOUT = 140 + ALARM_ID_AIR_TRAP_FILL_DURING_TREATMENT = 141 + ALARM_ID_OCCLUSION_BLOOD_PUMP = 142 + ALARM_ID_OCCLUSION_DIAL_IN_PUMP = 143 + ALARM_ID_OCCLUSION_DIAL_OUT_PUMP = 144 + ALARM_ID_ACID_CONDUCTIVITY_OUT_OF_RANGE = 145 + ALARM_ID_DIALYSATE_CONDUCTIVITY_OUT_OF_RANGE = 146 + ALARM_ID_DIALYSATE_CONDUCTIVITY_FAULT = 147 + ALARM_ID_INLET_WATER_HIGH_TEMPERATURE = 148 + ALARM_ID_INLET_WATER_LOW_TEMPERATURE = 149 + ALARM_ID_INLET_WATER_HIGH_CONDUCTIVITY = 150 + ALARM_ID_INLET_WATER_LOW_CONDUCTIVITY = 151 + ALARM_ID_INLET_WATER_LOW_PRESSURE = 152 + ALARM_ID_PRIME_COMPLETED_HIGH = 153 + ALARM_ID_NVDATA_EEPROM_OPS_FAILURE = 154 + ALARM_ID_NVDATA_SRVC_RECORD_CRC_ERROR = 155 + ALARM_ID_NVDATA_HW_USAGE_DATA_CRC_ERROR = 156 + ALARM_ID_NVDATA_CAL_RECORD_CRC_ERROR = 157 + ALARM_ID_BLOOD_PUMP_FLOW_VS_MOTOR_SPEED_CHECK = 158 + ALARM_ID_DIAL_IN_PUMP_FLOW_VS_MOTOR_SPEED_CHECK = 159 + ALARM_ID_BLOOD_PUMP_ROTOR_SPEED_TOO_HIGH = 160 + ALARM_ID_BLOOD_FLOW_SIGNAL_STRENGTH_TOO_LOW = 161 + ALARM_ID_DIALYSATE_FLOW_SIGNAL_STRENGTH_TOO_LOW = 162 + ALARM_ID_HD_LOAD_CELL_ACCELERATION_RES_1_ALARM = 163 + ALARM_ID_HD_LOAD_CELL_ACCELERATION_RES_2_ALARM = 164 + ALARM_ID_TREATMENT_RINSEBACK_TIMEOUT_ALARM = 165 + ALARM_ID_TREATMENT_RECIRC_TIMEOUT_ALARM = 166 + ALARM_ID_CARTRIDGE_DOOR_OPENED = 167 + ALARM_ID_DIALYSATE_TEMPERATURE_TOO_HIGH = 168 + ALARM_ID_DIALYSATE_TEMPERATURE_TOO_LOW = 169 + ALARM_ID_HD_SYRINGE_PUMP_SYRINGE_EMPTY = 170 + ALARM_ID_HD_SYRINGE_PUMP_OCCLUSION = 171 + ALARM_ID_HD_SYRINGE_PUMP_NOT_ENOUGH_HEPARIN_ALARM = 172 + ALARM_ID_HD_ARTERIAL_BUBBLE_DETECTED = 173 + ALARM_ID_HD_ARTERIAL_BUBBLE_DETECTED_RINSEBACK = 174 + ALARM_ID_HD_PUMP_DIRECTION_STATUS_ERROR = 175 + ALARM_ID_HD_RESERVOIR_FULL_AND_DG_NOT_READY_TO_SWITCH = 176 + ALARM_ID_DG_SOFTWARE_FAULT = 177 + ALARM_ID_HD_COMM_TIMEOUT = 178 + ALARM_ID_DG_FPGA_COMM_TIMEOUT = 179 + ALARM_ID_DG_LOAD_CELL_ADC_ERROR = 180 + ALARM_ID_DG_LOAD_CELLS_TARE_WEIGHT_OUT_OF_RANGE = 181 + ALARM_ID_DG_LOAD_CELLS_INVALID_CALIBRATION = 182 + ALARM_ID_DG_INVALID_LOAD_CELL_VALUE = 183 + ALARM_ID_UV_REACTOR_NOT_HEALTHY = 184 + ALARM_ID_DG_FAN_RPM_OUT_OF_RANGE = 185 + ALARM_ID_DG_CONCENTRATE_PUMP_FAULT = 186 + ALARM_ID_CP1_SPEED_CONTROL_ERROR = 187 + ALARM_ID_CP2_SPEED_CONTROL_ERROR = 188 + ALARM_ID_DRAIN_PUMP_RPM_OUT_OF_RANGE = 189 + ALARM_ID_DRAIN_PUMP_OFF_FAULT = 190 + ALARM_ID_FLOW_RATE_OUT_OF_UPPER_RANGE = 191 + ALARM_ID_FLOW_RATE_OUT_OF_LOWER_RANGE = 192 + ALARM_ID_RO_PUMP_FLOW_RATE_OUT_OF_RANGE = 193 + ALARM_ID_RO_PUMP_OFF_FAULT = 194 + ALARM_ID_RO_PUMP_PRESSURE_OUT_OF_RANGE = 195 + ALARM_ID_DG_TEMPERATURE_SENSOR_FAULT = 196 + ALARM_ID_DG_TEMPERATURE_SENSORS_ADC_FAULT = 197 + ALARM_ID_DG_HEATERS_NEGATIVE_COLD_JUNCTION_TEMPERATURE = 198 + ALARM_ID_DG_HEATERS_FAULT = 199 + ALARM_ID_DG_THERMISTORS_TEMPERATURE_OUT_OF_RANGE = 200 + ALARM_ID_DG_BAD_INLET_WATER_QUALITY = 201 + ALARM_ID_INLET_WATER_PRESSURE_FAULT = 202 + ALARM_ID_PRESSURE_SENSOR_FAULT = 203 + ALARM_ID_RO_REJECTION_RATIO_OUT_OF_RANGE = 204 + ALARM_ID_CONDUCTIVITY_SENSOR_FAULT = 205 + ALARM_ID_DG_DIALYSATE_FILL_OUT_OF_TIME = 206 + ALARM_ID_DG_FLOW_METER_CHECK_FAILURE = 207 + ALARM_ID_DG_HEATERS_ON_WITH_NO_FLOW_TIMEOUT = 208 + ALARM_ID_DG_DRAIN_CIRCULATION_LINE_TIMEOUT = 209 + ALARM_ID_HD_BATTERY_PACK_ERROR_DETECTED = 210 + ALARM_ID_BLOOD_SITTING_WARNING = 211 + ALARM_ID_END_OF_TREATMENT_ALARM = 212 + ALARM_ID_PRIME_COMPLETED_MEDIUM = 213 + ALARM_ID_SALINE_BOLUS_VOLUME_CHECK_FAILURE = 214 + ALARM_ID_RINSEBACK_VOLUME_CHECK_FAILURE = 215 + ALARM_ID_END_TREATMENT_TIMEOUT_ALARM = 216 + ALARM_ID_BLOOD_PRIME_VOLUME_CHECK_FAILURE = 217 + ALARM_ID_HD_SYRINGE_DETECTED = 218 + ALARM_ID_HD_SYRINGE_PUMP_SYRINGE_REMOVED = 219 + ALARM_ID_HD_BATTERY_PACK_CHARGE_TOO_LOW = 220 + ALARM_ID_EMPTY_SALINE_BAG = 221 + ALARM_ID_DIALYSATE_TEMPERATURE_HIGH = 222 + ALARM_ID_DIALYSATE_TEMPERATURE_LOW = 223 + ALARM_ID_TREATMENT_STOPPED_BY_USER = 224 + ALARM_ID_END_OF_TREATMENT_WARNING = 225 + ALARM_ID_PRIME_COMPLETED_LOW_PRIORITY = 226 + ALARM_ID_PRIME_OUT_OF_TIME = 227 + ALARM_ID_HD_PRIME_PURGE_AIR_TIME_OUT = 228 + ALARM_ID_PRIME_DIALYSATE_DIALYZER_TIME_OUT = 229 + ALARM_ID_PRIME_DIALYSATE_BYPASS_TIME_OUT = 230 + ALARM_ID_PRE_TREATMENT_DRY_SELF_TEST_FAILURE = 231 + ALARM_ID_PRE_TREATMENT_WET_SELF_TEST_FAILURE = 232 + ALARM_ID_RTC_BATTERY_LOW = 233 + ALARM_ID_RTC_RAM_OPS_ERROR = 234 + ALARM_ID_TREATMENT_STOPPED_AFTER_RINSEBACK = 235 + ALARM_ID_INSTALL_NEW_CARTRIDGE = 236 + ALARM_ID_CARTRIDGE_INSTALLED_IMPROPERLY = 237 + ALARM_ID_NO_CARTRIDGE_LOADED = 238 + ALARM_ID_CARTRIDGE_REMOVAL_FAILURE = 239 + ALARM_ID_BICARB_CONDUCTIVITY_OUT_OF_RANGE = 240 + ALARM_ID_DG_RESERVOIR_DRAIN_TIMEOUT = 241 + ALARM_ID_DG_RESERVOIR_FILL_TIMEOUT = 242 + ALARM_ID_DG_RESERVOIR_LEAK_TIMEOUT = 243 + ALARM_ID_DG_TEMP_SENSORS_DIFF_OUT_OF_RANGE = 244 + ALARM_ID_DG_HEAT_DISINFECT_TARGET_TEMP_TIMEOUT = 245 + ALARM_ID_DG_HEAT_DISINFECT_INLET_PRES_AND_TEMP_SNSRS_OUT = 246 + ALARM_ID_DG_HEAT_DISINFECT_INLET_COND_AND_TEMP_OUT = 247 + ALARM_ID_DG_CHEM_DISINFECT_TARGET_TEMP_TIMEOUT = 248 + ALARM_ID_DG_CHEM_DISINFECT_INLET_PRES_AND_TEMP_SNSRS_OUT = 249 + ALARM_ID_DG_CHEM_DISINFECT_INLET_COND_AND_TEMP_OUT = 250 + ALARM_ID_HD_INVALID_SYSTEM_RECORD = 251 + ALARM_ID_HD_INVALID_SERVICE_RECORD = 252 + ALARM_ID_DG_INVALID_SYSTEM_RECORD = 253 + ALARM_ID_DG_INVALID_SERVICE_RECORD = 254 + ALARM_ID_HD_UI_COMPATIBILITY_ERROR = 255 + ALARM_ID_HD_DG_COMPATIBILITY_ERROR = 256 + ALARM_ID_DG_FPGA_POWER_OUT_TIMEOUT = 257 + ALARM_ID_HD_FPGA_POWER_OUT_TIMEOUT = 258 + ALARM_ID_HD_TEMPERATURES_OUT_OF_RANGE = 259 + ALARM_ID_UI_POST_FAILURE_FILESYSTEM = 260 + ALARM_ID_UI_POST_FAILURE_CANBUS = 261 + ALARM_ID_UI_POST_FAILURE_DISPLAY = 262 + ALARM_ID_UI_POST_FAILURE_TOUCH = 263 + ALARM_ID_UI_POST_FAILURE_SDCARD = 264 + ALARM_ID_UI_POST_FAILURE_RTC = 265 + ALARM_ID_UI_POST_FAILURE_WIFI = 266 + ALARM_ID_UI_POST_FAILURE_BLUETOOTH = 267 + ALARM_ID_UI_POST_FAILURE_ETHERNET = 268 + ALARM_ID_UI_POST_FAILURE_SOUND = 269 + ALARM_ID_HD_SAFETY_SHUTDOWN_POST_TEST_FAILED = 270 + ALARM_ID_DG_SAFETY_SHUTDOWN_POST_TEST_FAILED = 271 + ALARM_ID_HD_FAN_RPM_OUT_OF_RANGE = 272 Index: dialin/common/dg_defs.py =================================================================== diff -u -r00fe4fbb96d3993c4c8a95566e03090e8b30a5e4 -ra1ee274cb5cab5f83deae1c39efef89ee81289df --- dialin/common/dg_defs.py (.../dg_defs.py) (revision 00fe4fbb96d3993c4c8a95566e03090e8b30a5e4) +++ dialin/common/dg_defs.py (.../dg_defs.py) (revision a1ee274cb5cab5f83deae1c39efef89ee81289df) @@ -99,3 +99,60 @@ DG_HEAT_DISINFECT_STATE_CANCEL_WATER_PATH = 21 # Heat disinfect, cancel mode water path state DG_HEAT_DISINFECT_STATE_COMPLETE = 22 # Heat disinfect, complete state NUM_OF_DG_HEAT_DISINFECT_STATES = 23 # Number of heat disinfect mode states + + +@unique +class HeatDisinfectUIStates(DialinEnum): + + HEAT_DISINFECT_UI_STATE_NOT_RUNNING = 0 + HEAT_DISINFECT_UI_STATE_FLUSH_BEFORE_DISINFECT = 1 + HEAT_DISINFECT_UI_STATE_HEAT_UP_WATER = 2 + HEAT_DISINFECT_UI_STATE_DISINFECT_RESERVOIR_1 = 3 + HEAT_DISINFECT_UI_STATE_TRANSITION_HOT_WATER = 4 + HEAT_DISINFECT_UI_STATE_DISINFECT_RESERVOIR_2 = 5 + HEAT_DISINFECT_UI_STATE_COOL_DOWN_DEVICE = 6 + HEAT_DISINFECT_UI_STATE_FLUSH_AFTER_DISINFECT = 7 + HEAT_DISINFECT_UI_STATE_CANCEL_DISINFECT = 8 + HEAT_DISINFECT_UI_STATE_COMPLETE = 9 + + +@unique +class ChemicalDisinfectStates(DialinEnum): + DG_CHEM_DISINFECT_STATE_START = 0 + DG_CHEM_DISINFECT_STATE_DRAIN_R1 = 1 + DG_CHEM_DISINFECT_STATE_DRAIN_R2 = 2 + DG_CHEM_DISINFECT_STATE_FLUSH_DRAIN = 3 + DG_CHEM_DISINFECT_STATE_FLUSH_CIRCULATION = 4 + DG_CHEM_DISINFECT_STATE_FLUSH_R1_AND_R2 = 5 + DG_CHEM_DISINFECT_STATE_FLUSH_R2_AND_DRAIN_R1 = 6 + DG_CHEM_DISINFECT_STATE_FLUSH_DRAIN_R2 = 7 + DG_CHEM_DISINFECT_STATE_FLUSH_DRAIN_R1 = 8 + DG_CHEM_DISINFECT_STATE_PRIME_ACID_LINE = 9 + DG_CHEM_DISINFECT_STATE_FILL_WITH_WATER_AND_DISINFECTANT = 10 + DG_CHEM_DISINFECT_STATE_REMOVE_ACID_BOTTLE_FROM_UI = 11 + DG_CHEM_DISINFECT_STATE_DISINFECT_R1_TO_R2 = 12 + DG_CHEM_DISINFECT_STATE_FILL_R2_WITH_DISINFECTANT = 13 + DG_CHEM_DISINFECT_STATE_DISINFECT_R2_TO_R1 = 14 + DG_CHEM_DISINFECT_STATE_COOL_DOWN_HEATERS = 15 + DG_CHEM_DISINFECT_STATE_DISINFECTANT_DRAIN_R1 = 16 + DG_CHEM_DISINFECT_STATE_DISINFECTANT_DRAIN_R2 = 17 + DG_CHEM_DISINFECT_STATE_RINSE_R1_TO_R2 = 18 + DG_CHEM_DISINFECT_STATE_RINSE_R2_TO_R1_AND_DRAIN_R1 = 19 + DG_CHEM_DISINFECT_STATE_RINSE_R1_TO_R2_AND_DRAIN_R2 = 20 + DG_CHEM_DISINFECT_STATE_RINSE_CIRCULATION = 21 + DG_CHEM_DISINFECT_STATE_CANCEL_BASIC_PATH = 22 + DG_CHEM_DISINFECT_STATE_CANCEL_WATER_PATH = 23 + DG_CHEM_DISINFECT_STATE_COMPLETE = 24 + + +@unique +class ChemDisinfectUIStates(DialinEnum): + CHEM_DISINFECT_UI_STATE_NOT_RUNNING = 0 + CHEM_DISINFECT_UI_STATE_FLUSH_BEFORE_DISINFECT = 1 + CHEM_DISINFECT_UI_STATE_MIX_WATER_AND_ACID = 2 + CHEM_DISINFECT_UI_STATE_REMOVE_ACID = 3 + CHEM_DISINFECT_UI_STATE_DISINFECT_DEVICE = 4 + CHEM_DISINFECT_UI_STATE_FLUSH_AFTER_DISINFECT = 5 + CHEM_DISINFECT_UI_STATE_CANCEL_DISINFECT = 6 + CHEM_DISINFECT_UI_STATE_COMPLETE = 7 + Index: dialin/common/msg_ids.py =================================================================== diff -u -r6356891100bf5058c4c77ac388eb23415d6435c6 -ra1ee274cb5cab5f83deae1c39efef89ee81289df --- dialin/common/msg_ids.py (.../msg_ids.py) (revision 6356891100bf5058c4c77ac388eb23415d6435c6) +++ dialin/common/msg_ids.py (.../msg_ids.py) (revision a1ee274cb5cab5f83deae1c39efef89ee81289df) @@ -176,8 +176,13 @@ MSG_ID_HD_SERIAL_NUMBER = 0X99 MSG_ID_HD_SET_STANDBY_DISINFECT_SUB_MODE_REQUEST = 0X9A MSG_ID_HD_SET_STANDBY_DISINFECT_SUB_MODE_RESPONSE = 0X9B - MSG_ID_HD_DISINFECTS_UI_STATE_READINGS_FROM_DG = 0X9C - MSG_ID_HD_DISINFECTS_UI_STATES_DATA = 0X9D + MSG_ID_HD_DISINFECTS_UI_STATE_READINGS = 0X9C + MSG_ID___AVAILABLE_1 = 0x9D + MSG_ID_HD_UI_VERSION_INFO_REQUEST = 0x9E + MSG_ID_HD_UI_VERSION_INFO_RESPONSE = 0x9F + MSG_ID_REQUEST_HD_USAGE_INFO = 0XA0 + MSG_ID_DG_SWITCHES_DATA = 0xA1 + MSG_ID_HD_SWITCHES_DATA = 0xA2 MSG_ID_CAN_ERROR_COUNT = 0X999 MSG_ID_TESTER_LOGIN_REQUEST = 0X8000 MSG_ID_DIAL_OUT_FLOW_SET_PT_OVERRIDE = 0X8001 @@ -266,13 +271,17 @@ MSG_ID_HD_ALARM_AUDIO_CURRENT_LG_OVERRIDE = 0X8055 MSG_ID_HD_ALARM_BACKUP_AUDIO_CURRENT_OVERRIDE = 0X8056 MSG_ID_HD_VALVES_CURRENT_OVERRIDE = 0X8057 + MSG_ID_HD_VALVES_POSITION_COUNT_OVERRIDE = 0x8058 MSG_ID_HD_SYRINGE_PUMP_STATUS_OVERRIDE = 0X8059 MSG_ID_HD_SYRINGE_PUMP_ENCODER_STATUS_OVERRIDE = 0X805A MSG_ID_HD_SYRINGE_PUMP_ADC_DAC_STATUS_OVERRIDE = 0X805B MSG_ID_HD_SYRINGE_PUMP_ADC_READ_COUNTER_OVERRIDE = 0X805C MSG_ID_HD_BUBBLES_DATA_SEND_INTERVAL_OVERRIDE = 0X805D MSG_ID_HD_BUBBLE_STATUS_OVERRIDE = 0X805E MSG_ID_HD_BUBBLE_SELF_TEST_REQUEST = 0X8060 + MSG_ID_HD_BLOOD_PRIME_SAFETY_VOLUME_OVERRIDE = 0X8061 + MSG_ID_HD_SWITCHES_STATUS_OVERRIDE = 0X8062 + MSG_ID_HD_SWITCHES_PUBLISH_INTERVAL_OVERRIDE = 0X8063 MSG_ID_DG_TESTER_LOGIN_REQUEST = 0XA000 MSG_ID_DG_ALARM_STATE_OVERRIDE = 0XA001 MSG_ID_DG_WATCHDOG_TASK_CHECKIN_OVERRIDE = 0XA002 @@ -300,8 +309,8 @@ MSG_ID_DG_MONITORED_VOLTAGES_SEND_INTERVAL_OVERRIDE = 0XA01A MSG_ID_DG_MONITORED_VOLTAGES_OVERRIDE = 0XA01B MSG_ID_DRAIN_PUMP_SET_DELTA_PRESSURE_OVERRIDE = 0XA01C - MSG_ID___AVAILABLE_12 = 0XA01D - MSG_ID___AVAILABLE_13 = 0XA01E + MSG_ID_DG_SWITCHES_STATUS_OVERRIDE = 0XA01D + MSG_ID_DG_SWITCHES_PUBLISH_INTERVAL_OVERRIDE = 0XA01E MSG_ID___AVAILABLE_14 = 0XA01F MSG_ID___AVAILABLE_15 = 0XA020 MSG_ID___AVAILABLE_16 = 0XA021 Index: dialin/dg/ro_pump.py =================================================================== diff -u -r6e20f4690ce887c351d8c65546f93311e5df6ad1 -ra1ee274cb5cab5f83deae1c39efef89ee81289df --- dialin/dg/ro_pump.py (.../ro_pump.py) (revision 6e20f4690ce887c351d8c65546f93311e5df6ad1) +++ dialin/dg/ro_pump.py (.../ro_pump.py) (revision a1ee274cb5cab5f83deae1c39efef89ee81289df) @@ -192,9 +192,9 @@ self.logger.debug("Timeout!!!!") return False - def cmd_ro_flow_rate_override(self, flow: float, reset: int = NO_RESET) -> int: + def cmd_ro_flow_rate_measured_override(self, flow: float, reset: int = NO_RESET) -> int: """ - Constructs and sends the RO rate override command. + Constructs and sends the RO measured rate override command. Constraints: Must be logged into DG. Index: dialin/dg/valves.py =================================================================== diff -u -r6e20f4690ce887c351d8c65546f93311e5df6ad1 -ra1ee274cb5cab5f83deae1c39efef89ee81289df --- dialin/dg/valves.py (.../valves.py) (revision 6e20f4690ce887c351d8c65546f93311e5df6ad1) +++ dialin/dg/valves.py (.../valves.py) (revision a1ee274cb5cab5f83deae1c39efef89ee81289df) @@ -313,7 +313,7 @@ """ rst = integer_to_bytearray(reset) - ste = integer_to_bytearray(state) + ste = integer_to_bytearray(int(state)) vlv = integer_to_bytearray(valve) payload = rst + ste + vlv Index: dialin/hd/alarms.py =================================================================== diff -u -ra198f8e6ce34ced17036f7558f5d9819e784dfbd -ra1ee274cb5cab5f83deae1c39efef89ee81289df --- dialin/hd/alarms.py (.../alarms.py) (revision a198f8e6ce34ced17036f7558f5d9819e784dfbd) +++ dialin/hd/alarms.py (.../alarms.py) (revision a1ee274cb5cab5f83deae1c39efef89ee81289df) @@ -236,6 +236,78 @@ """ return self.safety_shutdown_active + def get_alarm_flag_system_fault(self) -> bool: + """ + Gets the alarm flag system fault. + + @return: (bool) Alarm flag system fault (T/F) + """ + return (self.alarms_flags & 1) > 0 + + def get_alarm_flag_stop(self) -> bool: + """ + Gets the alarm flag no clear. + + @return: (bool) Alarm flag no clear (T/F) + """ + return (self.alarms_flags & 2) > 0 + + def get_alarm_flag_no_clear(self) -> bool: + """ + Gets the alarm flag no clear. + + @return: (bool) Alarm flag no clear (T/F) + """ + return (self.alarms_flags & 4) > 0 + + def get_alarm_flag_no_resume(self) -> bool: + """ + Gets the alarm flag no resume. + + @return: (bool) Alarm flag no resume (T/F) + """ + return (self.alarms_flags & 8) > 0 + + def get_alarm_flag_no_rinseback(self) -> bool: + """ + Gets the alarm flag no rinseback. + + @return: (bool) Alarm flag no rinseback (T/F) + """ + return (self.alarms_flags & 16) > 0 + + def get_alarm_flag_no_end_treatment(self) -> bool: + """ + Gets the alarm flag no end treatment. + + @return: (bool) Alarm flag no end treatment (T/F) + """ + return (self.alarms_flags & 32) > 0 + + def get_alarm_flag_no_new_treatment(self) -> bool: + """ + Gets the alarm flag no new treatment. + + @return: (bool) Alarm flag no new treatment (T/F) + """ + return (self.alarms_flags & 64) > 0 + + def get_alarm_flag_lamp_on(self) -> bool: + """ + Gets the alarm flag lamp on. + + @return: (bool) Alarm lamp on (T/F) + """ + return (self.alarms_flags & 1024) > 0 + + def get_alarm_flag_no_minimize(self) -> bool: + """ + Gets the alarm flag no minimize. + + @return: (bool) Alarm cannot be minimized (T/F) + """ + return (self.alarms_flags & 16384) > 0 + @_publish(["alarms_state", "alarm_top", "alarms_silence_expires_in", "alarms_escalates_in", "alarms_flags"]) def _handler_alarms_status_sync(self, message): """ @@ -337,7 +409,7 @@ @return: 1 if successful, zero otherwise """ - key = integer_to_bytearray(-758926171) # 0xD2C3B4A5 + key = integer_to_bytearray(-758926171) # 0xD2C3B4A5 payload = key message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, @@ -387,9 +459,13 @@ str_res = "reset back to normal" else: str_res = ("active" if state != 0 else "inactive") + self.logger.debug("Alarm " + str(alarm) + " " + str_res + ": " + str( + received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK - return 1 == received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] - return False + return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + else: + self.logger.debug("Timeout!!!!") + return False def cmd_alarm_time_override(self, alarm: int, time_ms: int, reset: int = NO_RESET) -> int: """ @@ -486,7 +562,7 @@ else: str_pat = "manual" self.logger.debug("Alarm lamp pattern overridden to " + str_pat + ":" + - str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: Index: dialin/hd/syringe_pump.py =================================================================== diff -u -r6e20f4690ce887c351d8c65546f93311e5df6ad1 -ra1ee274cb5cab5f83deae1c39efef89ee81289df --- dialin/hd/syringe_pump.py (.../syringe_pump.py) (revision 6e20f4690ce887c351d8c65546f93311e5df6ad1) +++ dialin/hd/syringe_pump.py (.../syringe_pump.py) (revision a1ee274cb5cab5f83deae1c39efef89ee81289df) @@ -16,7 +16,7 @@ import struct from ..utils.conversions import integer_to_bytearray, float_to_bytearray from ..utils.checks import check_broadcast_interval_override_ms -from .constants import RESET,NO_RESET +from .constants import RESET, NO_RESET from ..common.msg_defs import MsgIds, MsgFieldPositions from ..protocols.CAN import (DenaliMessage, DenaliChannels) @@ -190,12 +190,12 @@ return self.syringe_pump_adc_read_counter @_publish(["syringe_pump_state", "syringe_pump_set_rate_ml_hr", - "syringe_pump_meas_rate_ml_hr","syringe_pump_position", - "syringe_pump_volume_ml","syringe_pump_home_v", - "syringe_pump_switch_v","syringe_pump_force_v", - "heparin_state","syringe_pump_safety_volume_ml", - "syringe_pump_status","syringe_pump_encoder_status", - "syringe_pump_adc_dac_status","syringe_pump_adc_read_counter"]) + "syringe_pump_meas_rate_ml_hr", "syringe_pump_position", + "syringe_pump_volume_ml", "syringe_pump_home_v", + "syringe_pump_switch_v", "syringe_pump_force_v", + "heparin_state", "syringe_pump_safety_volume_ml", + "syringe_pump_status", "syringe_pump_encoder_status", + "syringe_pump_adc_dac_status", "syringe_pump_adc_read_counter"]) def _handler_syringe_pump_data(self, message): """ Handles published syringe pump data messages. Syringe pump data are captured @@ -326,7 +326,7 @@ else: str_res = str(ms) + " ms: " self.logger.debug("Syringe pump data broadcast interval overridden to " + str_res + - str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: @@ -364,7 +364,7 @@ else: str_res = str(position) + " encoder counts: " self.logger.debug("Syringe pump measured position overridden to " + str_res + - str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: @@ -402,7 +402,7 @@ else: str_res = str(rate) + " mL/hr: " self.logger.debug("Syringe pump measured rate overridden to " + str_res + - str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: @@ -440,7 +440,7 @@ else: str_res = str(volts) + " volts: " self.logger.debug("Syringe pump measured force overridden to " + str_res + - str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: @@ -478,7 +478,7 @@ else: str_res = str(volts) + " volts: " self.logger.debug("Syringe pump measured syringe detection overridden to " + str_res + - str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: @@ -516,7 +516,7 @@ else: str_res = str(volts) + " volts: " self.logger.debug("Syringe pump measured home overridden to " + str_res + - str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: @@ -554,7 +554,7 @@ else: str_res = str(volume) + " mL: " self.logger.debug("Syringe pump measured volume overridden to " + str_res + - str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: Index: dialin/hd/ui_proxy.py =================================================================== diff -u -rf7927c4086e16a080e6ba1552e10f6d776c84e17 -ra1ee274cb5cab5f83deae1c39efef89ee81289df --- dialin/hd/ui_proxy.py (.../ui_proxy.py) (revision f7927c4086e16a080e6ba1552e10f6d776c84e17) +++ dialin/hd/ui_proxy.py (.../ui_proxy.py) (revision a1ee274cb5cab5f83deae1c39efef89ee81289df) @@ -145,7 +145,7 @@ def __init__(self, can_interface, logger: Logger): """ - @param can_interface: the denali can interface object + @param can_interface: the Denali CAN interface object """ super().__init__() @@ -1628,6 +1628,19 @@ self.logger.debug("Sending user start treatment request to HD.") self.can_interface.send(message, 0) + def cmd_ui_patient_disconnection_confirm(self) -> None: + """ + Constructs and sends a ui patient disconnection confirm message + + @return: none + """ + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, + message_id=MsgIds.MSG_ID_UI_PATIENT_DISCONNECTION_CONFIRM.value) + + self.logger.debug("Sending user patient disconnection confirm msg to HD.") + self.can_interface.send(message, 0) + def cmd_ui_disposable_removal_confirm(self) -> None: """ Constructs and sends a ui disposable removal confirm message Index: dialin/hd/valves.py =================================================================== diff -u -r8ba3986f8fe9ef801c9f592a37f90933effbd34d -ra1ee274cb5cab5f83deae1c39efef89ee81289df --- dialin/hd/valves.py (.../valves.py) (revision 8ba3986f8fe9ef801c9f592a37f90933effbd34d) +++ dialin/hd/valves.py (.../valves.py) (revision a1ee274cb5cab5f83deae1c39efef89ee81289df) @@ -16,11 +16,12 @@ import struct -from ..utils.conversions import integer_to_bytearray +from ..utils.checks import check_broadcast_interval_override_ms +from ..utils.conversions import integer_to_bytearray, float_to_bytearray from .constants import NO_RESET from ..protocols.CAN import (DenaliMessage, DenaliChannels) from ..utils.base import _AbstractSubSystem, _publish, DialinEnum -from ..common import MsgIds +from ..common import MsgIds, MsgIdsDialin from logging import Logger from enum import unique @@ -35,7 +36,6 @@ @unique class ValvesPositions(DialinEnum): - VALVE_POSITION_NOT_IN_POSITION = 0 VALVE_POSITION_A_INSERT_EJECT = 1 VALVE_POSITION_B_OPEN = 2 VALVE_POSITION_C_CLOSE = 3 @@ -140,11 +140,17 @@ def cmd_hd_valves_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: """ Constructs and sends broadcast time interval + Constraints: + Must be logged into HD. + Given interval must be non-zero and a multiple of the HD general task interval (50 ms). @param ms: Publish time interval in ms @param reset: integer - 1 to reset a previous override, 0 to override @returns 1 if successful, zero otherwise """ + if not check_broadcast_interval_override_ms(ms): + return False + reset_value = integer_to_bytearray(reset) interval_value = integer_to_bytearray(ms) payload = reset_value + interval_value @@ -200,8 +206,78 @@ self.logger.debug("HD cmd_valve_override Timeout!!!") return False - def cmd_set_hd_valve_pwm(self, valve: int, pwm: int, direction: int, reset: int = NO_RESET) -> int: + def cmd_set_hd_valve_current_override(self, valve:int, current:float, reset:int=NO_RESET) -> int: """ + Constructs and sends the HD valves set position for a valve + + @param valve: integer - Valve number: + VDI = 0 + VDO = 1 + VBA = 2 + VBV = 3 + @param current: float value to override current + @param reset: integer - 1 to reset a previous override, 0 to override + @returns 1 if successful, zero otherwise + """ + reset_value = integer_to_bytearray(reset) + vlv = integer_to_bytearray(valve) + cur = float_to_bytearray(current) + payload = reset_value + cur + vlv + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, + message_id=MsgIds.MSG_ID_HD_VALVES_CURRENT_OVERRIDE.value, + payload=payload) + # Send message + received_message = self.can_interface.send(message) + + # If there is content... + if received_message is not None: + + self.logger.debug("Setting {} current to {:5.3f} A".format(str(ValvesEnum(valve).name), current)) + + # response payload is OK or not OK + return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + else: + self.logger.debug("HD current override Timeout!!!") + return False + + def cmd_set_hd_valve_position_count_override(self, valve:int, position_count:int, reset:int=NO_RESET) -> int: + """ + Constructs and sends the HD valves set position for a valve + + @param valve: integer - Valve number: + VDI = 0 + VDO = 1 + VBA = 2 + VBV = 3 + @param position_count: integer value + @param reset: integer - 1 to reset a previous override, 0 to override + @returns 1 if successful, zero otherwise + """ + reset_value = integer_to_bytearray(reset) + vlv = integer_to_bytearray(valve) + pos = integer_to_bytearray(position_count) + payload = reset_value + pos + vlv + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, + message_id=MsgIdsDialin.MSG_ID_HD_VALVES_POSITION_COUNT_OVERRIDE.value, + payload=payload) + # Send message + received_message = self.can_interface.send(message) + + # If there is content... + if received_message is not None: + + self.logger.debug("Setting {} position to {} ".format(str(ValvesEnum(valve).name), position_count)) + + # response payload is OK or not OK + return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + else: + self.logger.debug("HD current override Timeout!!!") + return False + + def cmd_set_hd_valve_pwm(self, valve:int, pwm:int, direction:int, reset:int=NO_RESET) -> int: + """ Constructs and sends the HD valves PWM command @param valve: integer - Valve number: @@ -271,7 +347,7 @@ @returns 1 if successful, zero otherwise """ - if valve_state == AirTrapState.STATE_OPEN: + if valve_state == AirTrapState.STATE_OPEN.value: payload = integer_to_bytearray(1) else: payload = integer_to_bytearray(0) @@ -292,7 +368,7 @@ return False @_publish(["valves_status", "hd_air_trap_status"]) - def _handler_hd_valves_sync(self, message): + def _handler_hd_valves_sync(self, message:dict) -> None: """ Handles published HD valves data messages. HD valves data are captured for reference. @@ -330,7 +406,5 @@ self.valves_status[vlv_name] = {'Valve': vlv_name, 'PosID': ValvesPositions(pos_ID).name, 'PosCnt': pos_cnt, 'Cmd': next_pos, 'State': ValvesStates(state_ID).name, 'Current': current, 'PosA': pos_a, 'PosB': pos_b, 'PosC': pos_c, 'PWM': pwm} - - if AirTrapState.has_value(air_trap): - self.hd_air_trap_status = AirTrapState(air_trap).name - + # Update the air trap valve's status + self.hd_air_trap_status = air_trap Index: dialin/utils/__init__.py =================================================================== diff -u -r6e20f4690ce887c351d8c65546f93311e5df6ad1 -ra1ee274cb5cab5f83deae1c39efef89ee81289df --- dialin/utils/__init__.py (.../__init__.py) (revision 6e20f4690ce887c351d8c65546f93311e5df6ad1) +++ dialin/utils/__init__.py (.../__init__.py) (revision a1ee274cb5cab5f83deae1c39efef89ee81289df) @@ -4,6 +4,7 @@ from .conversions import * from .excel_ops import * from .nv_ops_utils import * +from .singleton import * from .data_logger import DataLogger YES = 1 -NO = 0 \ No newline at end of file +NO = 0 Index: dialin/utils/conversions.py =================================================================== diff -u -rb17d2a1969b535d66bf534556ac42fd2bb28fd1d -ra1ee274cb5cab5f83deae1c39efef89ee81289df --- dialin/utils/conversions.py (.../conversions.py) (revision b17d2a1969b535d66bf534556ac42fd2bb28fd1d) +++ dialin/utils/conversions.py (.../conversions.py) (revision a1ee274cb5cab5f83deae1c39efef89ee81289df) @@ -14,63 +14,77 @@ # ############################################################################ import struct +from typing import List, Union -def byte_to_bytearray(val): +def byte_to_bytearray(val: int) -> bytes: """ Converts a byte value into a byte array (little endian) @param val: (int) integer to convert to byte array @return: byte array """ + if type(val) != int: + raise ValueError("Expected integer but received {0} with type {1}".format(val, type(val))) return struct.pack(" bytes: """ Converts a short integer (2 bytes) value into a byte array (little endian) @param val: (int) integer to convert to byte array @return: byte array """ + if type(val) != int: + raise ValueError("Expected integer but received {0} with type {1}".format(val, type(val))) return struct.pack(" bytes: """ Converts an integer value into a byte array (little endian) - @param val: (int) integer to convert to byte array + @param val: integer to convert to byte array, bool is accepted @return: byte array """ + if type(val) != bool and type(val) != int: + raise ValueError("Expected integer but received {0} with type {1}".format(val, type(val))) return struct.pack(" bytes: """ Converts an integer value into a byte array (little endian) @param val: (int) integer to convert to byte array @return: byte array """ + if type(val) != int or val < 0: + raise ValueError("Expected unsigned integer but received {0} with type {1}".format(val, type(val))) return struct.pack(" bytes: """ Converts a float value into a byte array (little endian) - @param val: (float) to convert to byte array + @param val: float to convert to byte array, int is accepted @return:: byte array """ + if type(val) != float and type(val) != int: + raise ValueError("Expected float but received {0} with type {1}".format(val, type(val))) return struct.pack(' List[int]: """ Converts an integer to a bit array. For direct conversion to binary please use bin(val), as this function has a separate purpose @param val: (int) the number to convert @param num_bits: (int) the number of bits needed @return: (List[int]) The number represented in binary form as a list of 1's and 0's """ + if type(val) != int: + raise ValueError("Expected integer but received {0} with type {1}".format(val, type(val))) return [(val >> bit) & 1 for bit in range(num_bits - 1, -1, -1)] \ No newline at end of file Index: setup.py =================================================================== diff -u -r24e107b2ac852390b49583c5390860aadde6244a -ra1ee274cb5cab5f83deae1c39efef89ee81289df --- setup.py (.../setup.py) (revision 24e107b2ac852390b49583c5390860aadde6244a) +++ setup.py (.../setup.py) (revision a1ee274cb5cab5f83deae1c39efef89ee81289df) @@ -14,25 +14,24 @@ # ############################################################################ import setuptools -from version import * setuptools.setup( name="dialin", - version=DEV_VERSION, author="Peter Lucia", author_email="plucia@diality.com", description="The Diality Dialin API", packages=setuptools.find_packages(exclude=["test*", "tools", "venv"]), - package_data={"" : ["AlarmIds.txt"]}, - include_package_data = True, classifiers=[ # all classifiers: https://pypi.org/classifiers/ "Programming Language :: Python :: 3.6", "Operating System :: POSIX :: Linux", ], python_requires="~=3.6", + use_scm_version = {"version_scheme" : "no-guess-dev"}, + setup_requires=['setuptools_scm'], install_requires=[ "aenum", "cycler", + "importlib-metadata", "kiwisolver", "matplotlib", "numpy",