########################################################################### # # Copyright (c) 2020-2024 Diality Inc. - All Rights Reserved. # # 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 msg_defs.py # # @author (last) Dara Navaei # @date (last) 08-May-2024 # @author (original) Peter Lucia # @date (original) 07-Aug-2020 # ############################################################################ from enum import unique from ..utils.base import DialinEnum from .msg_ids import MsgIds # Define msg ids that are not yet added to common but are needed in dialin @unique class MsgIdsDialin(DialinEnum): MSG_DIALIN_ID_HD_SERIAL_NUMBER_RESPONSE = 0x87 MSG_DIALIN_ID_DG_SERIAL_NUMBER_RESPONSE = 0x88 MSG_DIALIN_ID_UI_SYSTEM_USAGE_REQUEST = 0x89 MSG_DIALIN_ID_HD_SYSTEM_USAGE_RESPONSE = 0x8A MSG_DIALIN_ID_DG_SYSTEM_USAGE_RESPONSE = 0x8C MSG_DIALIN_ID_HD_FLUID_LEAK_STATE_DETECTOR_OVERRIDE = 0x8047 MSG_DIALIN_ID_HD_VALVES_POSITION_COUNT_OVERRIDE = 0x8058 MSG_DIALIN_ID_HD_DISINFECT_STATE = 0x7E MSG_DIALIN_ID_HD_VERSION_REQUEST = 0x9E MSG_DIALIN_ID_UI_POST_REPORT_VERSION = 0x9F ACK_NOT_REQUIRED = [ MsgIds.MSG_ID_ALARM_STATUS_DATA.value, MsgIds.MSG_ID_ALARM_TRIGGERED.value, MsgIds.MSG_ID_ALARM_CLEARED.value, MsgIds.MSG_ID_BLOOD_FLOW_DATA.value, MsgIds.MSG_ID_DIALYSATE_FLOW_DATA.value, MsgIds.MSG_ID_PRESSURE_OCCLUSION_DATA.value, MsgIds.MSG_ID_RTC_EPOCH_DATA.value, MsgIds.MSG_ID_DIALYSATE_OUT_FLOW_DATA.value, MsgIds.MSG_ID_LOAD_CELL_READINGS_DATA.value, MsgIds.MSG_ID_TREATMENT_TIME_DATA.value, MsgIds.MSG_ID_POWER_OFF_WARNING.value, MsgIds.MSG_ID_TREATMENT_STATE_DATA.value, MsgIds.MSG_ID_RO_PUMP_DATA.value, MsgIds.MSG_ID_DG_PRESSURES_DATA.value, MsgIds.MSG_ID_DRAIN_PUMP_DATA.value, MsgIds.MSG_ID_HD_OP_MODE_DATA.value, MsgIds.MSG_ID_DG_OP_MODE_DATA.value, MsgIds.MSG_ID_DG_RESERVOIRS_DATA.value, MsgIds.MSG_ID_DG_VALVES_STATES_DATA.value, MsgIds.MSG_ID_DG_HEATERS_DATA.value, MsgIds.MSG_ID_DG_TEMPERATURE_DATA.value, MsgIds.MSG_ID_SALINE_BOLUS_DATA.value, MsgIds.MSG_ID_DG_CONDUCTIVITY_DATA.value, MsgIds.MSG_ID_HD_ACCELEROMETER_DATA.value, MsgIds.MSG_ID_DG_ACCELEROMETER_DATA.value, MsgIds.MSG_ID_DG_HEAT_DISINFECT_DATA.value, MsgIds.MSG_ID_HD_VALVES_DATA.value, MsgIds.MSG_ID_HD_AIR_TRAP_DATA.value, MsgIds.MSG_ID_ALARM_CONDITION_CLEARED.value, MsgIds.MSG_ID_DG_CONCENTRATE_PUMP_DATA.value, MsgIds.MSG_ID_HD_PRIMING_STATUS_DATA.value, MsgIds.MSG_ID_DG_UV_REACTORS_DATA.value, MsgIds.MSG_ID_DG_THERMISTORS_DATA.value, MsgIds.MSG_ID_DG_FANS_DATA.value, MsgIds.MSG_ID_HD_TREATMENT_STOP_TIMER_DATA.value, MsgIds.MSG_ID_HD_HEPARIN_DATA.value, MsgIds.MSG_ID_HD_RINSEBACK_PROGRESS.value, MsgIds.MSG_ID_HD_BLOOD_PRIME_PROGRESS_DATA.value, MsgIds.MSG_ID_HD_RECIRC_PROGRESS_DATA.value, MsgIds.MSG_ID_PRE_TREATMENT_STATE_DATA.value, MsgIds.MSG_ID_DG_FILTER_FLUSH_PROGRESS_DATA.value, MsgIds.MSG_ID_HD_NO_CART_SELF_TEST_PROGRESS_DATA.value, MsgIds.MSG_ID_HD_DRY_SELF_TEST_PROGRESS_DATA.value, MsgIds.MSG_ID_HD_SYRINGE_PUMP_DATA.value, MsgIds.MSG_ID_HD_FLUID_LEAK_STATE_DATA.value, MsgIds.MSG_ID_DG_FLUID_LEAK_STATE_DATA.value, MsgIds.MSG_ID_HD_BLOOD_LEAK_DATA.value, MsgIds.MSG_ID_HD_POST_TREATMENT_STATE_DATA.value, MsgIds.MSG_ID_DG_FLUSH_DATA.value, MsgIds.MSG_ID_HD_VOLTAGES_DATA.value, MsgIds.MSG_ID_HD_ALARM_INFORMATION_DATA.value, MsgIds.MSG_ID_DG_HEAT_DISINFECT_TIME_DATA.value, MsgIds.MSG_ID_DG_CHEM_DISINFECT_TIME_DATA.value, MsgIds.MSG_ID_DG_VOLTAGES_DATA.value, MsgIds.MSG_ID_DG_CHEM_DISINFECT_DATA.value, MsgIds.MSG_ID_HD_BUBBLES_DATA.value, MsgIds.MSG_ID_HD_TEMPERATURES_DATA.value, MsgIds.MSG_ID_DG_SWITCHES_DATA.value, MsgIds.MSG_ID_HD_SWITCHES_DATA.value, MsgIds.MSG_ID_HD_FANS_DATA.value, MsgIds.MSG_ID_DG_ALARM_INFO_DATA.value, MsgIds.MSG_ID_HD_RESERVOIRS_DATA.value, MsgIds.MSG_ID_DG_CPLD_STATUS_DATA.value, MsgIds.MSG_ID_DG_DIALIN_CHECK_IN.value, MsgIds.MSG_ID_HD_DIALIN_CHECK_IN.value ] @unique class RequestRejectReasons(DialinEnum): REQUEST_REJECT_REASON_NONE = 0 REQUEST_REJECT_REASON_NOT_ALLOWED_IN_CURRENT_MODE = 1 REQUEST_REJECT_REASON_TIMEOUT_WAITING_FOR_USER_CONFIRM = 2 REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE = 3 REQUEST_REJECT_REASON_INVALID_TREATMENT_STATE = 4 REQUEST_REJECT_REASON_TREATMENT_TOO_CLOSE_TO_FINISHED = 5 REQUEST_REJECT_REASON_TREATMENT_TIME_OUT_OF_RANGE = 6 REQUEST_REJECT_REASON_TREATMENT_TIME_LESS_THAN_CURRENT = 7 REQUEST_REJECT_REASON_BLOOD_FLOW_OUT_OF_RANGE = 8 REQUEST_REJECT_REASON_DIAL_FLOW_OUT_OF_RANGE = 9 REQUEST_REJECT_REASON_DIAL_VOLUME_OUT_OF_RANGE = 10 REQUEST_REJECT_REASON_UF_VOLUME_OUT_OF_RANGE = 11 REQUEST_REJECT_REASON_UF_RATE_OUT_OF_RANGE = 12 REQUEST_REJECT_REASON_TREATMENT_TIME_LESS_THAN_MINIMUM = 13 REQUEST_REJECT_REASON_UF_NOT_IN_PROGESS = 14 REQUEST_REJECT_REASON_UF_NOT_PAUSED = 15 REQUEST_REJECT_REASON_SALINE_BOLUS_IN_PROGRESS = 16 REQUEST_REJECT_REASON_PARAM_OUT_OF_RANGE = 17 REQUEST_REJECT_REASON_HEPARIN_PRESTOP_EXCEEDS_DURATION = 18 REQUEST_REJECT_REASON_DG_FILTER_FLUSH_HAS_BEEN_EXPIRED = 19 REQUEST_REJECT_REASON_AVAILABLE_2 = 20 REQUEST_REJECT_REASON_SALINE_MAX_VOLUME_REACHED = 21 REQUEST_REJECT_REASON_SALINE_BOLUS_NOT_IN_PROGRESS = 22 REQUEST_REJECT_REASON_ACTION_DISABLED_IN_CURRENT_STATE = 23 REQUEST_REJECT_REASON_ALARM_IS_ACTIVE = 24 REQUEST_REJECT_REASON_INVALID_COMMAND = 25 REQUEST_REJECT_REASON_TREATMENT_IS_COMPLETED = 26 REQUEST_REJECT_REASON_ADDL_RINSEBACK_MAX_VOLUME_REACHED = 27 REQUEST_REJECT_REASON_DIALYZER_NOT_INVERTED = 28 REQUEST_REJECT_REASON_NO_PATIENT_CONNECTION_CONFIRM = 29 REQUEST_REJECT_REASON_HEPARIN_PAUSE_INVALID_IN_THIS_STATE = 30 REQUEST_REJECT_REASON_HEPARIN_NOT_PAUSED = 31 REQUEST_REJECT_REASON_DG_COMM_LOST = 32 REQUEST_REJECT_REASON_DRAIN_NOT_COMPLETE = 33 REQUEST_REJECT_REASON_DG_NOT_IN_STANDBY_IDLE_STATE = 34 REQUEST_REJECT_REASON_INVALID_REQUEST_FORMAT = 35 REQUEST_REJECT_REASON_INVALID_DATE_OR_TIME = 36 REQUEST_REJECT_REASON_TREATMENT_IN_PROGRESS = 37 REQUEST_REJECT_REASON_BATTERY_IS_NOT_CHARGED = 38 REQUEST_REJECT_REASON_RINSEBACK_NOT_COMPLETED = 39 REQUEST_REJECT_REASON_RESERVOIR_ONE_IS_NOT_READY = 40 REQUEST_REJECT_REASON_PUMP_TRACK_NOT_CLOSED = 41 REQUEST_REJECT_REASON_DOOR_NOT_CLOSED = 42 REQUEST_REJECT_REASON_SYRINGE_NOT_PRESENT = 43 REQUEST_REJECT_REASON_DG_DIALYSATE_CAP_OPEN = 44 REQUEST_REJECT_REASON_DG_CONCENTRATE_CAP_OPEN = 45 REQUEST_REJECT_REASON_DG_DISINFECT_HAS_BEEN_EXPIRED = 46 REQUEST_REJECT_REASON_DG_SERVICE_IS_DUE = 47 REQUEST_REJECT_REASON_HD_SERVICE_IS_DUE = 48 REQUEST_REJECT_REASON_DG_CHEM_FLUSH_NOT_COMPLETED = 49 REQUEST_REJECT_REASON_DG_RO_FILTER_TEMPERATURE_OUT_OF_RANGE = 50 REQUEST_REJECT_REASON_DG_INCOMPATIBLE = 51 REQUEST_REJECT_REASON_HEPARIN_PRESTOP_WITH_NO_DISPENSE = 52 REQUEST_REJECT_REASON_DIALYZER_REPRIME_IN_PROGRESS = 53 REQUEST_REJECT_REASON_DG_RO_ONLY_MODE_DG_BUSY = 54 REQUEST_REJECT_REASON_DG_RO_ONLY_MODE_INVALID_PARAMETER = 55 REQUEST_REJECT_REASON_DG_RO_ONLY_MODE_INVALID_PAYLOAD_LENGTH = 56 REQUEST_REJECT_REASON_TREATMENT_CANNOT_BE_RESUMED = 57 REQUEST_REJECT_REASON_EXCEEDS_MAXIMUM_HEPARIN_VOLUME = 58 REQUEST_REJECT_REASON_CHEM_DISINFECT_NOT_ENABLED_INST_CONFIG = 59 NUM_OF_REQUEST_REJECT_REASONS = 60 class MsgFieldPositions: # Generic response msg field byte positions (where 32-bit data fields are used) START_POS_FIELD_1 = 6 # Hardcoded for now to avoid cyclic import issue. See protocols.CAN.DenaliMessage class END_POS_FIELD_1 = START_POS_FIELD_1 + 4 START_POS_FIELD_2 = END_POS_FIELD_1 END_POS_FIELD_2 = START_POS_FIELD_2 + 4 START_POS_FIELD_3 = END_POS_FIELD_2 END_POS_FIELD_3 = START_POS_FIELD_3 + 4 START_POS_FIELD_4 = END_POS_FIELD_3 END_POS_FIELD_4 = START_POS_FIELD_4 + 4 START_POS_FIELD_5 = END_POS_FIELD_4 END_POS_FIELD_5 = START_POS_FIELD_5 + 4 START_POS_FIELD_6 = END_POS_FIELD_5 END_POS_FIELD_6 = START_POS_FIELD_6 + 4 START_POS_FIELD_7 = END_POS_FIELD_6 END_POS_FIELD_7 = START_POS_FIELD_7 + 4 START_POS_FIELD_8 = END_POS_FIELD_7 END_POS_FIELD_8 = START_POS_FIELD_8 + 4 START_POS_FIELD_9 = END_POS_FIELD_8 END_POS_FIELD_9 = START_POS_FIELD_9 + 4 START_POS_FIELD_10 = END_POS_FIELD_9 END_POS_FIELD_10 = START_POS_FIELD_10 + 4 START_POS_FIELD_11 = END_POS_FIELD_10 END_POS_FIELD_11 = START_POS_FIELD_11 + 4 START_POS_FIELD_12 = END_POS_FIELD_11 END_POS_FIELD_12 = START_POS_FIELD_12 + 4 START_POS_FIELD_13 = END_POS_FIELD_12 END_POS_FIELD_13 = START_POS_FIELD_13 + 4 START_POS_FIELD_14 = END_POS_FIELD_13 END_POS_FIELD_14 = START_POS_FIELD_14 + 4 START_POS_FIELD_15 = END_POS_FIELD_14 END_POS_FIELD_15 = START_POS_FIELD_15 + 4 START_POS_FIELD_16 = END_POS_FIELD_15 END_POS_FIELD_16 = START_POS_FIELD_16 + 4 START_POS_FIELD_17 = END_POS_FIELD_16 END_POS_FIELD_17 = START_POS_FIELD_17 + 4 START_POS_FIELD_18 = END_POS_FIELD_17 END_POS_FIELD_18 = START_POS_FIELD_18 + 4 START_POS_FIELD_19 = END_POS_FIELD_18 END_POS_FIELD_19 = START_POS_FIELD_19 + 4 START_POS_FIELD_20 = END_POS_FIELD_19 END_POS_FIELD_20 = START_POS_FIELD_20 + 4 START_POS_FIELD_21 = END_POS_FIELD_20 END_POS_FIELD_21 = START_POS_FIELD_21 + 4 START_POS_FIELD_22 = END_POS_FIELD_21 END_POS_FIELD_22 = START_POS_FIELD_22 + 4 START_POS_FIELD_23 = END_POS_FIELD_22 END_POS_FIELD_23 = START_POS_FIELD_23 + 4 START_POS_FIELD_24 = END_POS_FIELD_23 END_POS_FIELD_24 = START_POS_FIELD_24 + 4 START_POS_FIELD_25 = END_POS_FIELD_24 END_POS_FIELD_25 = START_POS_FIELD_25 + 4 START_POS_FIELD_26 = END_POS_FIELD_25 END_POS_FIELD_26 = START_POS_FIELD_26 + 4 START_POS_FIELD_27 = END_POS_FIELD_26 END_POS_FIELD_27 = START_POS_FIELD_27 + 4 START_POS_FIELD_28 = END_POS_FIELD_27 END_POS_FIELD_28 = START_POS_FIELD_28 + 4 START_POS_FIELD_29 = END_POS_FIELD_28 END_POS_FIELD_29 = START_POS_FIELD_29 + 4