########################################################################### # # 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 ACK_NOT_REQUIRED = [ ] @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_FILTER_FLUSH_HAS_BEEN_EXPIRED = 18 REQUEST_REJECT_REASON_SALINE_MAX_VOLUME_REACHED = 19 REQUEST_REJECT_REASON_SALINE_BOLUS_NOT_IN_PROGRESS = 20 REQUEST_REJECT_REASON_ACTION_DISABLED_IN_CURRENT_STATE = 21 REQUEST_REJECT_REASON_ALARM_IS_ACTIVE = 22 REQUEST_REJECT_REASON_INVALID_COMMAND = 23 REQUEST_REJECT_REASON_TREATMENT_IS_COMPLETED = 24 REQUEST_REJECT_REASON_ADDL_RINSEBACK_MAX_VOLUME_REACHED = 25 REQUEST_REJECT_REASON_DIALYZER_NOT_INVERTED = 26 REQUEST_REJECT_REASON_NO_PATIENT_CONNECTION_CONFIRM = 27 REQUEST_REJECT_REASON_DD_COMM_LOST = 28 REQUEST_REJECT_REASON_DD_NOT_IN_STANDBY_IDLE_STATE = 29 REQUEST_REJECT_REASON_INVALID_REQUEST_FORMAT = 30 REQUEST_REJECT_REASON_INVALID_DATE_OR_TIME = 31 REQUEST_REJECT_REASON_TREATMENT_IN_PROGRESS = 32 REQUEST_REJECT_REASON_BATTERY_IS_NOT_CHARGED = 33 REQUEST_REJECT_REASON_RINSEBACK_NOT_COMPLETED = 34 REQUEST_REJECT_REASON_DOOR_NOT_CLOSED = 35 REQUEST_REJECT_REASON_DD_DIALYSATE_CAP_OPEN = 36 REQUEST_REJECT_REASON_DD_CONCENTRATE_CAP_OPEN = 37 REQUEST_REJECT_REASON_DISINFECT_HAS_BEEN_EXPIRED = 38 REQUEST_REJECT_REASON_DD_SERVICE_IS_DUE = 39 REQUEST_REJECT_REASON_TD_SERVICE_IS_DUE = 40 REQUEST_REJECT_REASON_RO_FILTER_TEMPERATURE_OUT_OF_RANGE = 41 REQUEST_REJECT_REASON_DD_INCOMPATIBLE = 42 REQUEST_REJECT_REASON_DIALYZER_REPRIME_IN_PROGRESS = 43 REQUEST_REJECT_REASON_RO_ONLY_MODE_DD_BUSY = 44 REQUEST_REJECT_REASON_RO_ONLY_MODE_INVALID_PARAMETER = 45 REQUEST_REJECT_REASON_RO_ONLY_MODE_INVALID_PAYLOAD_LENGTH = 46 REQUEST_REJECT_REASON_TREATMENT_CANNOT_BE_RESUMED = 47 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 class MsgFieldPositionsFWVersions: # UI version message field positions START_POS_MAJOR = 6 # Hardcoded for now to avoid cyclic import issue. See protocols.CAN.DenaliMessage class END_POS_MAJOR = START_POS_MAJOR + 1 START_POS_MINOR = END_POS_MAJOR END_POS_MINOR = START_POS_MINOR + 1 START_POS_MICRO = END_POS_MINOR END_POS_MICRO = START_POS_MICRO + 1 START_POS_BUILD = END_POS_MICRO END_POS_BUILD = START_POS_BUILD + 2 START_POS_FPGA_ID = END_POS_BUILD END_POS_FPGA_ID = START_POS_FPGA_ID + 1 START_POS_FPGA_MAJOR = END_POS_FPGA_ID END_POS_FPGA_MAJOR = START_POS_FPGA_MAJOR + 1 START_POS_FPGA_MINOR = END_POS_FPGA_MAJOR END_POS_FPGA_MINOR = START_POS_FPGA_MINOR + 1 START_POS_FPGA_MICRO = END_POS_FPGA_MINOR END_POS_FPGA_MICRO = START_POS_FPGA_MICRO + 1 START_POS_COMPATIBILITY_REV = END_POS_FPGA_MICRO END_POS_COMPATIBILITY_REV = START_POS_COMPATIBILITY_REV + 4