Index: leahi_dialin/common/msg_defs.py =================================================================== diff -u -r775f2d7ca9a4d1c86c02bc27130f8765dc4156ad -r81e359d6c7ced081bd4580ec3e6cc38939781c6a --- leahi_dialin/common/msg_defs.py (.../msg_defs.py) (revision 775f2d7ca9a4d1c86c02bc27130f8765dc4156ad) +++ leahi_dialin/common/msg_defs.py (.../msg_defs.py) (revision 81e359d6c7ced081bd4580ec3e6cc38939781c6a) @@ -2,223 +2,87 @@ # # 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. +# 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 +# @author (last) Enum Updater Script +# @date (last) 03-Aug-2026 +# @author (original) Zoltan Miskolci +# @date (original) 31-Jul-2026 # ############################################################################ from enum import unique -from ..utils.enums import DialinEnum -from .msg_ids import MsgIds -from .constants import MSG_HEADER_SIZE +from leahi_dialin.utils.enums import DialinEnum -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 -RequestRejectReasons._str_list = {} + REQUEST_REJECT_REASON_NONE = 0 # Used when there is no rejection + REQUEST_REJECT_REASON_NOT_ALLOWED_IN_CURRENT_MODE = 1 # Request is not allowed in the current operating mode + REQUEST_REJECT_REASON_TIMEOUT_WAITING_FOR_USER_CONFIRM = 2 # Validated request was not confirmed by user in reasonable time + REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE = 3 # Request is not allowed if not in treatment mode + REQUEST_REJECT_REASON_INVALID_TREATMENT_STATE = 4 # Request is not allowed in current treatment state + REQUEST_REJECT_REASON_TREATMENT_TOO_CLOSE_TO_FINISHED = 5 # Request is not allowed so near end of treatment + REQUEST_REJECT_REASON_TREATMENT_TIME_OUT_OF_RANGE = 6 # Treatment duration is out of range + REQUEST_REJECT_REASON_TREATMENT_TIME_LESS_THAN_CURRENT = 7 # Treatment time change is less than currently elapsed treatment time + REQUEST_REJECT_REASON_BLOOD_FLOW_OUT_OF_RANGE = 8 # Blood flow is out of range + REQUEST_REJECT_REASON_DIAL_FLOW_OUT_OF_RANGE = 9 # Dialysate flow is out of range + REQUEST_REJECT_REASON_DIAL_VOLUME_OUT_OF_RANGE = 10 # Dialysate flow rate or treatment duration causes dialysate volume to exceed limit + REQUEST_REJECT_REASON_UF_VOLUME_OUT_OF_RANGE = 11 # Ultrafiltration volume is out of range + REQUEST_REJECT_REASON_UF_RATE_OUT_OF_RANGE = 12 # Ultrafiltration rate is out of range + REQUEST_REJECT_REASON_TREATMENT_TIME_LESS_THAN_MINIMUM = 13 # Treatment time change is less than minimum treatment time + REQUEST_REJECT_REASON_UF_NOT_IN_PROGESS = 14 # Ultrafiltration is not currently in progress + REQUEST_REJECT_REASON_UF_NOT_PAUSED = 15 # Ultrafiltration is not currently paused + REQUEST_REJECT_REASON_FLUID_BOLUS_IN_PROGRESS = 16 # A fluid bolus is in progress + REQUEST_REJECT_REASON_PARAM_OUT_OF_RANGE = 17 # A treatment parameter is out of range + REQUEST_REJECT_REASON_FILTER_FLUSH_HAS_BEEN_EXPIRED = 18 # Filter flush time has been expired + REQUEST_REJECT_REASON_SALINE_MAX_VOLUME_REACHED = 19 # Saline bolus volume maximum has been reached - no more saline allowed + REQUEST_REJECT_REASON_FLUID_BOLUS_NOT_IN_PROGRESS = 20 # A fluid bolus is not in progress + REQUEST_REJECT_REASON_ACTION_DISABLED_IN_CURRENT_STATE = 21 # Requested user action is disabled in current state + REQUEST_REJECT_REASON_ALARM_IS_ACTIVE = 22 # Requested user action not allowed while alarm is active + REQUEST_REJECT_REASON_INVALID_COMMAND = 23 # Requested user action invalid + REQUEST_REJECT_REASON_TREATMENT_IS_COMPLETED = 24 # The treatment has been completed + REQUEST_REJECT_REASON_ADDL_RINSEBACK_MAX_VOLUME_REACHED = 25 # Rinseback additional volume maximum has been reached - no more additional rinsebacks allowed + REQUEST_REJECT_REASON_DIALYZER_NOT_INVERTED = 26 # Dialyzer not inverted yet + REQUEST_REJECT_REASON_NO_PATIENT_CONNECTION_CONFIRM = 27 # The user has not confirmed patient connection + REQUEST_REJECT_REASON_DD_COMM_LOST = 28 # Treatment cannot initiate if DD comm is lost + REQUEST_REJECT_REASON_DD_NOT_IN_STANDBY_IDLE_STATE = 29 # Treatment cannot initiate if DD is not in standby idle state + REQUEST_REJECT_REASON_INVALID_REQUEST_FORMAT = 30 # Request message not formatted properly + REQUEST_REJECT_REASON_INVALID_DATE_OR_TIME = 31 # Given date/time is invalid + REQUEST_REJECT_REASON_TREATMENT_IN_PROGRESS = 32 # Treatment is in progress + REQUEST_REJECT_REASON_BATTERY_IS_NOT_CHARGED = 33 # Battery does not have enough charge to start treatment + REQUEST_REJECT_REASON_RINSEBACK_NOT_COMPLETED = 34 # Cannot move on to recirculate without completing full rinseback. + REQUEST_REJECT_REASON_DOOR_NOT_CLOSED = 35 # Door is not closed + REQUEST_REJECT_REASON_DD_DIALYSATE_CAP_OPEN = 36 # Dialysate cap open + REQUEST_REJECT_REASON_DD_CONCENTRATE_CAP_OPEN = 37 # Concentrate cap open + REQUEST_REJECT_REASON_DISINFECT_HAS_BEEN_EXPIRED = 38 # Disinfect has been expired + REQUEST_REJECT_REASON_DD_SERVICE_IS_DUE = 39 # DD service is due + REQUEST_REJECT_REASON_TD_SERVICE_IS_DUE = 40 # TD service is due + REQUEST_REJECT_REASON_RO_FILTER_TEMPERATURE_OUT_OF_RANGE = 41 # RO filter temperature out of range + REQUEST_REJECT_REASON_DD_INCOMPATIBLE = 42 # DD firmware version is not compatible with TD firmware + REQUEST_REJECT_REASON_DIALYZER_REPRIME_IN_PROGRESS = 43 # Fluid bolus is not allowed during dialyzer reprime + REQUEST_REJECT_REASON_RO_ONLY_MODE_DD_BUSY = 44 # RO only mode DD is busy + REQUEST_REJECT_REASON_RO_ONLY_MODE_INVALID_PARAMETER = 45 # RO only mode invalid parameter + REQUEST_REJECT_REASON_RO_ONLY_MODE_INVALID_PAYLOAD_LENGTH = 46 # RO only mode invalid payload length + REQUEST_REJECT_REASON_TREATMENT_CANNOT_BE_RESUMED = 47 # Cannot resume treatment per alarm + REQUEST_REJECT_REASON_HEPARIN_STOP_TIME_EXCEEDS_DURATION = 48 # The Heparin stop time setting is greater than the treatment duration + REQUEST_REJECT_REASON_HEPARIN_STOP_TIME_WITH_NO_DISPENSE = 49 # Heparin settings are zero but stop time setting is non-zero + REQUEST_REJECT_REASON_HEPARIN_PAUSE_INVALID_IN_THIS_STATE = 50 # Heparin cannot be paused if not currently deliverying Heparin + REQUEST_REJECT_REASON_HEPARIN_NOT_PAUSED = 51 # Heparin cannot be resumed if not paused + REQUEST_REJECT_REASON_HEPARIN_VOLUME_EXCEEDS_10_ML = 52 # Heparin volume needed for treatment exceeds 10 mL maximum. + REQUEST_REJECT_REASON_PARAM_NOT_APPLICABLE = 53 # Treatment parameter not applicable for current treatment modality type + REQUEST_REJECT_REASON_ACID_CONV_FACTOR_MISMATCH = 54 # Acid conversion factor from UI mismatch with FW + REQUEST_REJECT_REASON_INVALID_PATIENT_WEIGHTS = 55 # Patient pre and estimated target weights are invalid + REQUEST_REJECT_REASON_UF_VOL_AND_WEIGHTS_INCONSISTENT = 56 # UF volume and the patient weights are not consistent + REQUEST_REJECT_REASON_TD_AUTHENTICATION_INVALID = 57 # TD authentication invalid + REQUEST_REJECT_REASON_CONFIRMATION_NOT_EXPECTED = 58 # Confirmation received without prior validation + REQUEST_REJECT_REASON_CONFIRMATION_MISMATCH = 59 # Confirmed value does not match validated value + REQUEST_REJECT_REASON_INVALID_TREATMENT_SUB_STATE = 60 # Request is not allowed in current treatment sub-state + REQUEST_REJECT_REASON_MODALITY_MISMATCH = 61 # Mismatched modality (Rx entered vs reatment initiation modality ) + NUM_OF_REQUEST_REJECT_REASONS = 62 # Number of settings change reject codes +RequestRejectReasons._str_list = { } -class MsgFieldPositions: - # Generic response msg field byte positions (where 32-bit data fields are used) - START_POS_FIELD_1 = MSG_HEADER_SIZE # Hardcoded for now to avoid cyclic import issue. See protocols.CAN.CanMessage 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 - START_POS_FIELD_30 = END_POS_FIELD_29 - END_POS_FIELD_30 = START_POS_FIELD_29 + 4 - START_POS_FIELD_31 = END_POS_FIELD_30 - END_POS_FIELD_31 = START_POS_FIELD_30 + 4 - START_POS_FIELD_32 = END_POS_FIELD_31 - END_POS_FIELD_32 = START_POS_FIELD_31 + 4 - START_POS_FIELD_33 = END_POS_FIELD_32 - END_POS_FIELD_33 = START_POS_FIELD_32 + 4 - START_POS_FIELD_34 = END_POS_FIELD_33 - END_POS_FIELD_34 = START_POS_FIELD_33 + 4 - START_POS_FIELD_35 = END_POS_FIELD_34 - END_POS_FIELD_35 = START_POS_FIELD_34 + 4 - START_POS_FIELD_36 = END_POS_FIELD_35 - END_POS_FIELD_36 = START_POS_FIELD_35 + 4 - START_POS_FIELD_37 = END_POS_FIELD_36 - END_POS_FIELD_37 = START_POS_FIELD_36 + 4 - START_POS_FIELD_38 = END_POS_FIELD_37 - END_POS_FIELD_38 = START_POS_FIELD_37 + 4 - START_POS_FIELD_39 = END_POS_FIELD_38 - END_POS_FIELD_39 = START_POS_FIELD_38 + 4 - START_POS_FIELD_40 = END_POS_FIELD_39 - END_POS_FIELD_40 = START_POS_FIELD_39 + 4 - START_POS_FIELD_41 = END_POS_FIELD_40 - END_POS_FIELD_41 = START_POS_FIELD_40 + 4 - START_POS_FIELD_42 = END_POS_FIELD_41 - END_POS_FIELD_42 = START_POS_FIELD_41 + 4 - START_POS_FIELD_43 = END_POS_FIELD_42 - END_POS_FIELD_43 = START_POS_FIELD_42 + 4 - START_POS_FIELD_44 = END_POS_FIELD_43 - END_POS_FIELD_44 = START_POS_FIELD_43 + 4 - START_POS_FIELD_45 = END_POS_FIELD_44 - END_POS_FIELD_45 = START_POS_FIELD_44 + 4 - START_POS_FIELD_46 = END_POS_FIELD_45 - END_POS_FIELD_46 = START_POS_FIELD_45 + 4 - START_POS_FIELD_47 = END_POS_FIELD_46 - END_POS_FIELD_47 = START_POS_FIELD_46 + 4 - START_POS_FIELD_48 = END_POS_FIELD_47 - END_POS_FIELD_48 = START_POS_FIELD_47 + 4 - START_POS_FIELD_49 = END_POS_FIELD_48 - END_POS_FIELD_49 = START_POS_FIELD_48 + 4 - START_POS_FIELD_50 = END_POS_FIELD_49 - END_POS_FIELD_50 = START_POS_FIELD_49 + 4 - START_POS_FIELD_51 = END_POS_FIELD_50 - END_POS_FIELD_51 = START_POS_FIELD_50 + 4 - START_POS_FIELD_52 = END_POS_FIELD_51 - END_POS_FIELD_52 = START_POS_FIELD_51 + 4 - START_POS_FIELD_53 = END_POS_FIELD_52 - END_POS_FIELD_53 = START_POS_FIELD_52 + 4 - START_POS_FIELD_54 = END_POS_FIELD_53 - END_POS_FIELD_54 = START_POS_FIELD_53 + 4 - START_POS_FIELD_55 = END_POS_FIELD_54 - END_POS_FIELD_55 = START_POS_FIELD_54 + 4 - START_POS_FIELD_56 = END_POS_FIELD_55 - END_POS_FIELD_56 = START_POS_FIELD_55 + 4 - START_POS_FIELD_57 = END_POS_FIELD_56 - END_POS_FIELD_57 = START_POS_FIELD_56 + 4 - START_POS_FIELD_58 = END_POS_FIELD_57 - END_POS_FIELD_58 = START_POS_FIELD_57 + 4 - START_POS_FIELD_59 = END_POS_FIELD_58 - END_POS_FIELD_59 = START_POS_FIELD_58 + 4 - START_POS_FIELD_60 = END_POS_FIELD_59 - END_POS_FIELD_60 = START_POS_FIELD_59 + 4 - START_POS_FIELD_61 = END_POS_FIELD_60 - END_POS_FIELD_61 = START_POS_FIELD_60 + 4 - START_POS_FIELD_62 = END_POS_FIELD_61 - END_POS_FIELD_62 = START_POS_FIELD_61 + 4 - - -class MsgFieldPositionsFWVersions: - # UI version message field positions - START_POS_MAJOR = MSG_HEADER_SIZE # Hardcoded for now to avoid cyclic import issue. See protocols.CAN.CanMessage 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 +ACK_NOT_REQUIRED = [ ]