Index: dialin/common/alarm_defs.py =================================================================== diff -u -r80501868a8f9a2c145945bbebb486fb3a32edfb2 -r65277463eda63686c6132b6716aaa997b6df1861 --- dialin/common/alarm_defs.py (.../alarm_defs.py) (revision 80501868a8f9a2c145945bbebb486fb3a32edfb2) +++ dialin/common/alarm_defs.py (.../alarm_defs.py) (revision 65277463eda63686c6132b6716aaa997b6df1861) @@ -79,7 +79,18 @@ ALARM_ID_HD_ACCELEROMETER_FAILURE = 74 # HD accelerometer error (no readings or FPGA reports error) ALARM_ID_DG_ACCELEROMETER_FAILURE = 75 # DG accelerometer error (no readings or FPGA reports error) ALARM_ID_DG_CRITICAL_DATA_ERROR = 76 # DG critical data integrity check failed. - NUM_OF_ALARM_IDS = 77 # Total number of alarms + ALARM_ID_RO_REJECTION_RATIO_OUT_OF_RANGE = 77, # RO rejection ratio out of range + ALARM_ID_INLET_WATER_PRESSURE_FAULT = 78, # Inlet water pressure fault + ALARM_ID_HD_VALVE_HOMING_FAILED = 79, # HD valve homing failed + ALARM_ID_HD_VALVE_TRANSITION_TIMEOUT = 80, # HD valve transition time out + ALARM_ID_HD_VALVE_NOT_FUNCTIONAL = 81, # HD valve not functional + ALARM_ID_HD_VALVE_CURRENT_OUT_OF_RANGE = 82, # HD valve current out of range + ALARM_ID_HD_VALVE_POSITION_OUT_OF_RANGE = 83, # HD valve position out of target + ALARM_ID_AIR_TRAP_ILLEGAL_LEVELS = 84, # Air trap level sensors reporting illegal combination of air/fluid + ALARM_ID_AIR_TRAP_FILL_DURING_PRIME = 85, # Air trap fill timeout during priming + ALARM_ID_AIR_TRAP_FILL_DURING_TREATMENT = 86, # Air trap fill timeout during treatment + ALARM_ID_INVALID_VALVE_SELECTED = 87, # HD valve invalid valve selected + NUM_OF_ALARM_IDS = 88 # Total number of alarms class AlarmPriorities: ALARM_PRIORITY_NONE = 0 # Indicates not an alarm or no alarms active at this time Index: dialin/common/msg_defs.py =================================================================== diff -u -r396fbc8690270d160c2b223a0a3802d913c1be95 -r65277463eda63686c6132b6716aaa997b6df1861 --- dialin/common/msg_defs.py (.../msg_defs.py) (revision 396fbc8690270d160c2b223a0a3802d913c1be95) +++ dialin/common/msg_defs.py (.../msg_defs.py) (revision 65277463eda63686c6132b6716aaa997b6df1861) @@ -1,6 +1,6 @@ import enum +from ..protocols.CAN import DenaliMessage - class MsgIds(enum.Enum): MSG_ID_UNUSED = 0 # Zero is an undefined (un-used) message ID) MSG_ID_OFF_BUTTON_PRESS = 1 # HD/UI off button interactions @@ -176,4 +176,53 @@ REQUEST_REJECT_REASON_UF_NOT_IN_PROGESS = 14 REQUEST_REJECT_REASON_UF_NOT_PAUSED = 15 REQUEST_REJECT_REASON_SALINE_BOLUS_IN_PROGRESS = 16 - NUM_OF_REQUEST_REJECT_REASONS = 17 + REQUEST_REJECT_REASON_PARAM_OUT_OF_RANGE = 17 + REQUEST_REJECT_REASON_HEPARIN_PRESTOP_EXCEEDS_DURATION = 18 + REQUEST_REJECT_REASON_ARTERIAL_PRESSURE_LOW_VS_HIGH = 19 + REQUEST_REJECT_REASON_VENOUS_PRESSURE_LOW_VS_HIGH = 20 + REQUEST_REJECT_REASON_SALINE_MAX_VOLUME_REACHED = 21 + REQUEST_REJECT_REASON_SALINE_BOLUS_NOT_IN_PROGRESS = 22 + NUM_OF_REQUEST_REJECT_REASONS = 23 + +class MsgFldPositions(): + # Generic response msg field byte positions (where 32-bit data fields are used) + START_POS_FIELD_1 = DenaliMessage.PAYLOAD_START_INDEX + 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 Index: dialin/dg/accelerometer.py =================================================================== diff -u -r10bd08a612562df62c94e3d304f17ba24f4275a6 -r65277463eda63686c6132b6716aaa997b6df1861 --- dialin/dg/accelerometer.py (.../accelerometer.py) (revision 10bd08a612562df62c94e3d304f17ba24f4275a6) +++ dialin/dg/accelerometer.py (.../accelerometer.py) (revision 65277463eda63686c6132b6716aaa997b6df1861) @@ -21,20 +21,14 @@ from ..utils.conversions import integer_to_bytearray, float_to_bytearray from .constants import RESET, NO_RESET from ..utils.base import _AbstractSubSystem, _publish +from ..common.msg_defs import MsgIds, MsgFldPositions from logging import Logger class DGAccelerometer(_AbstractSubSystem): """ Hemodialysis Delivery (DG) Dialin API sub-class for accelerometer related commands. """ - # Accelerometer message IDs - MSG_ID_DG_ACCELEROMETER_DATA = 0x0034 - MSG_ID_DG_ACCEL_OVERRIDE = 0xA017 - MSG_ID_DG_ACCEL_MAX_OVERRIDE = 0xA018 - MSG_ID_DG_ACCEL_SEND_INTERVAL_OVERRIDE = 0xA019 - MSG_ID_DG_ACCEL_SET_CALIBRATION = 0xA01A - # Vector axes class AccelerometerVector: def __init__(self, x=0.0, y=0.0, z=0.0): @@ -51,26 +45,6 @@ VECTOR_AXIS_Y = 1 VECTOR_AXIS_Z = 2 - # Pressure/Occlusion broadcast message field positions - START_POS_X = DenaliMessage.PAYLOAD_START_INDEX - END_POS_X = START_POS_X + 4 - START_POS_Y = END_POS_X - END_POS_Y = START_POS_Y + 4 - START_POS_Z = END_POS_Y - END_POS_Z = START_POS_Z + 4 - START_POS_MAX_X = END_POS_Z - END_POS_MAX_X = START_POS_MAX_X + 4 - START_POS_MAX_Y = END_POS_MAX_X - END_POS_MAX_Y = START_POS_MAX_Y + 4 - START_POS_MAX_Z = END_POS_MAX_Y - END_POS_MAX_Z = START_POS_MAX_Z + 4 - START_POS_TILT_X = END_POS_MAX_Z - END_POS_TILT_X = START_POS_TILT_X + 4 - START_POS_TILT_Y = END_POS_TILT_X - END_POS_TILT_Y = START_POS_TILT_Y + 4 - START_POS_TILT_Z = END_POS_TILT_Y - END_POS_TILT_Z = START_POS_TILT_Z + 4 - def __init__(self, can_interface, logger: Logger): """ HDAccelerometer constructor @@ -82,7 +56,7 @@ if self.can_interface is not None: channel_id = DenaliChannels.dg_sync_broadcast_ch_id - msg_id = self.MSG_ID_DG_ACCELEROMETER_DATA + msg_id = MsgIds.MSG_ID_DG_ACCELEROMETER_DATA self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_accelerometer_sync) @@ -125,19 +99,28 @@ @return: none """ - x = struct.unpack('f', bytearray(message['message'][self.START_POS_X:self.END_POS_X])) - y = struct.unpack('f', bytearray(message['message'][self.START_POS_Y:self.END_POS_Y])) - z = struct.unpack('f', bytearray(message['message'][self.START_POS_Z:self.END_POS_Z])) + x = struct.unpack('f', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_1:MsgFldPositions.END_POS_FIELD_1])) + y = struct.unpack('f', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_2:MsgFldPositions.END_POS_FIELD_2])) + z = struct.unpack('f', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_3:MsgFldPositions.END_POS_FIELD_3])) self.vector = self.AccelerometerVector( x[0], y[0], z[0] ) - x = struct.unpack('f', bytearray(message['message'][self.START_POS_MAX_X:self.END_POS_MAX_X])) - y = struct.unpack('f', bytearray(message['message'][self.START_POS_MAX_Y:self.END_POS_MAX_Y])) - z = struct.unpack('f', bytearray(message['message'][self.START_POS_MAX_Z:self.END_POS_MAX_Z])) + x = struct.unpack('f', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_4:MsgFldPositions.END_POS_FIELD_4])) + y = struct.unpack('f', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_5:MsgFldPositions.END_POS_FIELD_5])) + z = struct.unpack('f', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_6:MsgFldPositions.END_POS_FIELD_6])) self.vector_max = self.AccelerometerVector( x[0], y[0], z[0] ) - x = struct.unpack('f', bytearray(message['message'][self.START_POS_TILT_X:self.END_POS_TILT_X])) - y = struct.unpack('f', bytearray(message['message'][self.START_POS_TILT_Y:self.END_POS_TILT_Y])) - z = struct.unpack('f', bytearray(message['message'][self.START_POS_TILT_Z:self.END_POS_TILT_Z])) + x = struct.unpack('f', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_7:MsgFldPositions.END_POS_FIELD_7])) + y = struct.unpack('f', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_8:MsgFldPositions.END_POS_FIELD_8])) + z = struct.unpack('f', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_9:MsgFldPositions.END_POS_FIELD_9])) self.tilts = self.AccelerometerVector( x[0], y[0], z[0] ) def cmd_accel_vector_override(self, mag, axis, reset=NO_RESET): @@ -158,7 +141,7 @@ payload = rst + sta + idx message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_DG_ACCEL_OVERRIDE, + message_id=MsgIds.MSG_ID_DG_ACCEL_OVERRIDE, payload=payload) self.logger.debug("override DG accelerometer axis magnitude") @@ -198,7 +181,7 @@ payload = rst + sta + idx message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_DG_ACCEL_MAX_OVERRIDE, + message_id=MsgIds.MSG_ID_DG_ACCEL_MAX_OVERRIDE, payload=payload) self.logger.debug("override DG accelerometer axis maximum magnitude") @@ -237,7 +220,7 @@ payload = rst + mis message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_DG_ACCEL_SEND_INTERVAL_OVERRIDE, + message_id=MsgIds.MSG_ID_DG_ACCEL_SEND_INTERVAL_OVERRIDE, payload=payload) self.logger.debug("override DG accelerometer broadcast interval") @@ -275,7 +258,7 @@ payload = x + y + z message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_DG_ACCEL_SET_CALIBRATION, + message_id=MsgIds.MSG_ID_DG_ACCEL_SET_CALIBRATION, payload=payload) self.logger.debug("Setting DG accelerometer axis calibration offsets") Index: dialin/dg/conductivity_sensors.py =================================================================== diff -u -r219f8023145f879d9b17191f60a3f7700ff32665 -r65277463eda63686c6132b6716aaa997b6df1861 --- dialin/dg/conductivity_sensors.py (.../conductivity_sensors.py) (revision 219f8023145f879d9b17191f60a3f7700ff32665) +++ dialin/dg/conductivity_sensors.py (.../conductivity_sensors.py) (revision 65277463eda63686c6132b6716aaa997b6df1861) @@ -19,6 +19,7 @@ from ..utils.conversions import integer_to_bytearray, float_to_bytearray from ..protocols.CAN import (DenaliMessage, DenaliChannels) from ..utils.base import _AbstractSubSystem, _publish +from ..common.msg_defs import MsgIds, MsgFldPositions from logging import Logger @@ -29,21 +30,6 @@ Dialysate Generator (DG) Dialin API sub-class for conductivity sensors related commands. """ - # Data message ID - MSG_ID_DG_CONDUCTIVITY_DATA = 0x0031 - - # Override message IDs - MSG_ID_CONDUCTIVITY_OVERRIDE = 0xA015 - MSG_ID_CONDUCTIVITY_PUBLISH_INTERVAL_OVERRIDE = 0xA016 - - # Conductivity sensor broadcast message field positions - START_POS_RO_REJECTION_RATIO = DenaliMessage.PAYLOAD_START_INDEX - END_POS_RO_REJECTION_RATIO = START_POS_RO_REJECTION_RATIO + 4 - START_POS_CS_CPI = END_POS_RO_REJECTION_RATIO - END_POS_CS_CPI = START_POS_CS_CPI + 4 - START_POS_CS_CPO = END_POS_CS_CPI - END_POS_CS_CPO = START_POS_CS_CPO + 4 - def __init__(self, can_interface, logger: Logger): """ @@ -56,7 +42,7 @@ if self.can_interface is not None: channel_id = DenaliChannels.dg_sync_broadcast_ch_id - msg_id = self.MSG_ID_DG_CONDUCTIVITY_DATA + msg_id = MsgIds.MSG_ID_DG_CONDUCTIVITY_DATA self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_conductivity_sensors_sync) @@ -90,9 +76,9 @@ @return: None """ - ro_rejection_ratio = struct.unpack('f', bytearray(message['message'][self.START_POS_RO_REJECTION_RATIO:self.END_POS_RO_REJECTION_RATIO])) - cpi = struct.unpack('f', bytearray(message['message'][self.START_POS_CS_CPI:self.END_POS_CS_CPI])) - cpo = struct.unpack('f', bytearray(message['message'][self.START_POS_CS_CPO:self.END_POS_CS_CPO])) + ro_rejection_ratio = struct.unpack('f', bytearray(message['message'][MsgFldPositions.START_POS_FIELD_1:MsgFldPositions.END_POS_FIELD_1])) + cpi = struct.unpack('f', bytearray(message['message'][MsgFldPositions.START_POS_FIELD_2:MsgFldPositions.END_POS_FIELD_2])) + cpo = struct.unpack('f', bytearray(message['message'][MsgFldPositions.START_POS_FIELD_3:MsgFldPositions.END_POS_FIELD_3])) self.ro_rejection_ratio = ro_rejection_ratio[0] self.conductivity_sensor_cpi = cpi[0] @@ -118,7 +104,7 @@ payload = reset_byte_array + cond_byte_array + sensor_byte_array message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_CONDUCTIVITY_OVERRIDE, + message_id=MsgIds.MSG_ID_CONDUCTIVITY_OVERRIDE, payload=payload) if reset == RESET: @@ -152,7 +138,7 @@ payload = reset_byte_array + ms_byte_array message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_CONDUCTIVITY_PUBLISH_INTERVAL_OVERRIDE, + message_id=MsgIds.MSG_ID_CONDUCTIVITY_PUBLISH_INTERVAL_OVERRIDE, payload=payload) self.logger.debug("override DG conductivity sensor broadcast interval") Index: dialin/dg/dialysate_generator.py =================================================================== diff -u -r10bd08a612562df62c94e3d304f17ba24f4275a6 -r65277463eda63686c6132b6716aaa997b6df1861 --- dialin/dg/dialysate_generator.py (.../dialysate_generator.py) (revision 10bd08a612562df62c94e3d304f17ba24f4275a6) +++ dialin/dg/dialysate_generator.py (.../dialysate_generator.py) (revision 65277463eda63686c6132b6716aaa997b6df1861) @@ -30,6 +30,7 @@ DenaliChannels) from ..utils.base import _AbstractSubSystem, _publish, _LogManager +from ..common.msg_defs import MsgIds, MsgFldPositions class DG(_AbstractSubSystem): @@ -38,22 +39,9 @@ the DG firmware. """ - # DG message IDs - MSG_ID_DG_OPERATION_MODE_BROADCAST = 0x0027 - MSG_ID_DG_REQUEST_DG_VERSION = 0x001C - MSG_ID_DG_DG_VERSION_RESPONSE = 0x001E - MSG_ID_LOGIN_TO_DG = 0xA000 - MSG_ID_DG_SAFETY_SHUTDOWN_OVERRIDE = 0xA014 - # HD login password DG_LOGIN_PASSWORD = '123' - # broadcast message field positions - START_POS_DG_OP_MODE = DenaliMessage.PAYLOAD_START_INDEX - END_POS_DG_OP_MODE = START_POS_DG_OP_MODE + 4 - START_POS_DG_SUB_MODE = END_POS_DG_OP_MODE - END_POS_DG_SUB_MODE = START_POS_DG_SUB_MODE + 4 - # DG version message field positions START_POS_MAJOR = DenaliMessage.PAYLOAD_START_INDEX END_POS_MAJOR = START_POS_MAJOR + 1 @@ -124,11 +112,11 @@ # register handler for HD operation mode broadcast messages if self.can_interface is not None: channel_id = DenaliChannels.dg_sync_broadcast_ch_id - msg_id = self.MSG_ID_DG_OPERATION_MODE_BROADCAST + msg_id = MsgIds.MSG_ID_DG_OPERATION_MODE_BROADCAST self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_dg_op_mode_sync) self.can_interface.register_receiving_publication_function(DenaliChannels.dg_sync_broadcast_ch_id, - self.MSG_ID_DG_DG_VERSION_RESPONSE, + MsgIds.MSG_ID_DG_DG_VERSION_RESPONSE, self._handler_dg_version) # initialize variables that will be populated by DG version response @@ -229,9 +217,9 @@ """ mode = struct.unpack('i', bytearray( - message['message'][self.START_POS_DG_OP_MODE:self.END_POS_DG_OP_MODE])) + message['message'][MsgFldPositions.START_POS_FIELD_1:MsgFldPositions.END_POS_FIELD_1])) smode = struct.unpack('i', bytearray( - message['message'][self.START_POS_DG_SUB_MODE:self.END_POS_DG_SUB_MODE])) + message['message'][MsgFldPositions.START_POS_FIELD_2:MsgFldPositions.END_POS_FIELD_2])) self.dg_operation_mode = mode[0] self.dg_operation_sub_mode = smode[0] @@ -245,7 +233,7 @@ """ message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_LOGIN_TO_DG, + message_id=MsgIds.MSG_ID_LOGIN_TO_DG, payload=list(map(int, map(ord, self.DG_LOGIN_PASSWORD)))) self.logger.info("Logging in to the DG...") @@ -270,7 +258,7 @@ """ message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_DG_REQUEST_DG_VERSION) + message_id=MsgIds.MSG_ID_DG_REQUEST_DG_VERSION) self.logger.debug("Sending Dialin request for version to DG") @@ -286,7 +274,7 @@ """ message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_DG_SAFETY_SHUTDOWN_OVERRIDE) + message_id=MsgIds.MSG_ID_DG_SAFETY_SHUTDOWN_OVERRIDE) self.logger.debug("overriding DG safety shutdown") Index: dialin/dg/drain_pump.py =================================================================== diff -u -rf40bfedd0bef6a8b37ef61e0749f908dd97c5095 -r65277463eda63686c6132b6716aaa997b6df1861 --- dialin/dg/drain_pump.py (.../drain_pump.py) (revision f40bfedd0bef6a8b37ef61e0749f908dd97c5095) +++ dialin/dg/drain_pump.py (.../drain_pump.py) (revision 65277463eda63686c6132b6716aaa997b6df1861) @@ -15,6 +15,7 @@ ############################################################################ import struct from ..utils.conversions import integer_to_bytearray +from ..common.msg_defs import MsgIds, MsgFldPositions from .constants import RESET, NO_RESET from ..protocols.CAN import (DenaliMessage, DenaliChannels) @@ -27,17 +28,6 @@ Dialysate Generator (DG) Dialin API sub-class for drain pump related commands. """ - # Drain pump message IDs - MSG_ID_DG_DRAIN_PUMP_PUBLISHED_DATA = 0x0024 - MSG_ID_DG_DRAIN_PUMP_SET_SPEED_OVERRIDE = 0xA00B - MSG_ID_DG_DRAIN_PUMP_BROADAST_INTERVAL_OVERRIDE = 0xA00C - - # Drain pump broadcast message field positions - START_POS_SET_SPD = DenaliMessage.PAYLOAD_START_INDEX - END_POS_SET_SPD = START_POS_SET_SPD + 4 - START_POS_DAC = END_POS_SET_SPD - END_POS_DAC = START_POS_DAC + 4 - def __init__(self, can_interface, logger: Logger): """ DGDrainPump constructor @@ -49,7 +39,7 @@ if self.can_interface is not None: channel_id = DenaliChannels.dg_sync_broadcast_ch_id - msg_id = self.MSG_ID_DG_DRAIN_PUMP_PUBLISHED_DATA + msg_id = MsgIds.MSG_ID_DG_DRAIN_PUMP_PUBLISHED_DATA self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_drain_pump_sync) @@ -82,9 +72,9 @@ """ tgt = struct.unpack('i', bytearray( - message['message'][self.START_POS_SET_SPD:self.END_POS_SET_SPD])) + message['message'][MsgFldPositions.START_POS_FIELD_1:MsgFldPositions.END_POS_FIELD_1])) dac = struct.unpack('i', bytearray( - message['message'][self.START_POS_DAC:self.END_POS_DAC])) + message['message'][MsgFldPositions.START_POS_FIELD_2:MsgFldPositions.END_POS_FIELD_2])) self.target_drain_pump_speed_RPM = tgt[0] self.dac_value = dac[0] @@ -105,7 +95,7 @@ payload = rst + spd message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_DG_DRAIN_PUMP_SET_SPEED_OVERRIDE, + message_id=MsgIds.MSG_ID_DG_DRAIN_PUMP_SET_SPEED_OVERRIDE, payload=payload) self.logger.debug("override drain pump speed set point") @@ -145,7 +135,7 @@ payload = rst + mis message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_DG_DRAIN_PUMP_BROADAST_INTERVAL_OVERRIDE, + message_id=MsgIds.MSG_ID_DG_DRAIN_PUMP_BROADAST_INTERVAL_OVERRIDE, payload=payload) self.logger.debug("override drain pump data broadcast interval") Index: dialin/dg/hd_proxy.py =================================================================== diff -u -r10bd08a612562df62c94e3d304f17ba24f4275a6 -r65277463eda63686c6132b6716aaa997b6df1861 --- dialin/dg/hd_proxy.py (.../hd_proxy.py) (revision 10bd08a612562df62c94e3d304f17ba24f4275a6) +++ dialin/dg/hd_proxy.py (.../hd_proxy.py) (revision 65277463eda63686c6132b6716aaa997b6df1861) @@ -14,6 +14,7 @@ # ############################################################################ from ..utils.conversions import integer_to_bytearray +from ..common.msg_defs import MsgIds from ..protocols.CAN import (DenaliMessage, DenaliChannels) from ..utils.base import _AbstractSubSystem, _publish @@ -26,15 +27,7 @@ \brief Dialysate Generator (DG) Dialin API sub-class for HD proxy commands. """ - # Pressure/Occlusion message IDs - MSG_ID_HD_SWITCH_RESERVOIRS_CMD = 0x0021 - MSG_ID_HD_FILL_CMD = 0x0022 - MSG_ID_HD_DRAIN_CMD = 0x0023 - MSG_ID_HD_START_STOP_DG_CMD = 0x0026 - MSG_ID_HD_START_STOP_DG_TRIMMER_HEATER = 0x002B - MSG_ID_DG_START_STOP_HEAT_DISINFECT = 0x2F - # Reservoir IDs RESERVOIR1 = 0 RESERVOIR2 = 1 @@ -67,7 +60,7 @@ payload = res message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_HD_SWITCH_RESERVOIRS_CMD, + message_id=MsgIds.MSG_ID_HD_SWITCH_RESERVOIRS_CMD, payload=payload) self.logger.debug("switch reservoirs cmd sent to DG") @@ -98,7 +91,7 @@ payload = vol message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_HD_FILL_CMD, + message_id=MsgIds.MSG_ID_HD_FILL_CMD, payload=payload) self.logger.debug("fill cmd sent to DG") @@ -129,7 +122,7 @@ payload = vol message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_HD_DRAIN_CMD, + message_id=MsgIds.MSG_ID_HD_DRAIN_CMD, payload=payload) self.logger.debug("drain cmd sent to DG") @@ -165,7 +158,7 @@ payload = integer_to_bytearray(cmd) message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_HD_START_STOP_DG_CMD, + message_id=MsgIds.MSG_ID_HD_START_STOP_DG_CMD, payload=payload) self.logger.debug(str+"DG cmd sent to DG") @@ -198,7 +191,7 @@ payload = integer_to_bytearray(cmd) message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_HD_START_STOP_DG_TRIMMER_HEATER, + message_id=MsgIds.MSG_ID_HD_START_STOP_DG_TRIMMER_HEATER, payload=payload) self.logger.debug(str+"DG trimmer heater cmd sent to DG") @@ -225,7 +218,7 @@ # 1 is to start payload = integer_to_bytearray(1) message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_DG_START_STOP_HEAT_DISINFECT, + message_id=MsgIds.MSG_ID_DG_START_STOP_HEAT_DISINFECT, payload=payload) print("Starting heat disinfection process") received_message = self.can_interface.send(message) @@ -241,7 +234,7 @@ # 1 is to start payload = integer_to_bytearray(0) message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_DG_START_STOP_HEAT_DISINFECT, + message_id=MsgIds.MSG_ID_DG_START_STOP_HEAT_DISINFECT, payload=payload) print("Stopping heat disinfection process") received_message = self.can_interface.send(message) @@ -255,7 +248,7 @@ # 0 is to stop payload = integer_to_bytearray(0) message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_HD_START_STOP_DG_TRIMMER_HEATER, + message_id=MsgIds.MSG_ID_HD_START_STOP_DG_TRIMMER_HEATER, payload=payload) print("Stopping heat disinfection process") self.can_interface.send(message, 0) \ No newline at end of file Index: dialin/dg/heaters.py =================================================================== diff -u -r10bd08a612562df62c94e3d304f17ba24f4275a6 -r65277463eda63686c6132b6716aaa997b6df1861 --- dialin/dg/heaters.py (.../heaters.py) (revision 10bd08a612562df62c94e3d304f17ba24f4275a6) +++ dialin/dg/heaters.py (.../heaters.py) (revision 65277463eda63686c6132b6716aaa997b6df1861) @@ -17,6 +17,7 @@ import struct from ..utils.conversions import integer_to_bytearray from ..utils.conversions import float_to_bytearray +from ..common.msg_defs import MsgIds, MsgFldPositions from .constants import NO_RESET from ..protocols.CAN import (DenaliMessage, DenaliChannels) from ..utils.base import _AbstractSubSystem, _publish @@ -25,19 +26,6 @@ class Heaters(_AbstractSubSystem): - MSG_ID_DG_HEATERS_DATA = 0x2C - MSG_ID_START_STOP_PRIMARY_HEATER = 0xA011 - MSG_ID_DG_START_STOP_TRIMMER_HEATER_CMD = 0x2B - MSG_ID_SET_DG_DIALYSATE_TEMP_TARGETS = 0x19 - MSG_ID_HEATERS_PUBLISH_INTERVAL_ORVERRIDE = 0xA013 - - START_POS_MAIN_PRI_HEATER = DenaliMessage.PAYLOAD_START_INDEX - END_POS_MAIN_PRI_HEATER = START_POS_MAIN_PRI_HEATER + 4 - START_POS_SMALL_PRI_HEATER = END_POS_MAIN_PRI_HEATER - END_POS_SMALL_PRI_HEATER = START_POS_SMALL_PRI_HEATER + 4 - START_POS_TRIMMER_HEATER = END_POS_SMALL_PRI_HEATER - END_POS_TRIMMER_HEATER = START_POS_TRIMMER_HEATER + 4 - def __init__(self, can_interface, logger: Logger): super().__init__() @@ -50,7 +38,7 @@ if self.can_interface is not None: channel_id = DenaliChannels.dg_sync_broadcast_ch_id - msg_id = self.MSG_ID_DG_HEATERS_DATA + msg_id = MsgIds.MSG_ID_DG_HEATERS_DATA self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_heaters_sync) @_publish(["main_primary_heater_pwm", "small_primary_heater_pwm", "trimmer_heater_pwm"]) @@ -62,11 +50,11 @@ @returns none """ main_primary_heater_pwm = struct.unpack('i', bytearray( - message['message'][self.START_POS_MAIN_PRI_HEATER:self.END_POS_MAIN_PRI_HEATER])) + message['message'][MsgFldPositions.START_POS_FIELD_1:MsgFldPositions.END_POS_FIELD_1])) small_primary_heater_pwm = struct.unpack('i', bytearray( - message['message'][self.START_POS_SMALL_PRI_HEATER:self.END_POS_SMALL_PRI_HEATER])) + message['message'][MsgFldPositions.START_POS_FIELD_2:MsgFldPositions.END_POS_FIELD_2])) trimmer_heater_pwm = struct.unpack('i', bytearray( - message['message'][self.START_POS_TRIMMER_HEATER:self.END_POS_TRIMMER_HEATER])) + message['message'][MsgFldPositions.START_POS_FIELD_3:MsgFldPositions.END_POS_FIELD_3])) self.main_primary_heater_pwm = main_primary_heater_pwm[0] self.small_primary_heater_pwm = small_primary_heater_pwm[0] @@ -84,7 +72,7 @@ # 1 is to start the primary heater payload = integer_to_bytearray(1) message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_START_STOP_PRIMARY_HEATER, + message_id=MsgIds.MSG_ID_START_STOP_PRIMARY_HEATER, payload=payload) self.logger.debug("Starting the Primary heater") self.can_interface.send(message, 0) @@ -98,7 +86,7 @@ # 0 is to stop the primary heater payload = integer_to_bytearray(0) message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_START_STOP_PRIMARY_HEATER, + message_id=MsgIds.MSG_ID_START_STOP_PRIMARY_HEATER, payload=payload) self.logger.debug("Stopping the Primary heater") self.can_interface.send(message, 0) @@ -114,7 +102,7 @@ # 1 is to start the primary heater payload = integer_to_bytearray(1) message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_DG_START_STOP_TRIMMER_HEATER_CMD, + message_id=MsgIds.MSG_ID_DG_START_STOP_TRIMMER_HEATER_CMD, payload=payload) self.logger.debug("Starting the Trimmer heater") self.can_interface.send(message, 0) @@ -128,7 +116,7 @@ # 1 is to start the primary heater payload = integer_to_bytearray(0) message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_DG_START_STOP_TRIMMER_HEATER_CMD, + message_id=MsgIds.MSG_ID_DG_START_STOP_TRIMMER_HEATER_CMD, payload=payload) self.logger.debug("Stopping the Trimmer heater") self.can_interface.send(message, 0) @@ -145,7 +133,7 @@ trimmer_target = float_to_bytearray(trimmer_target_temp) payload = primary_target + trimmer_target message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_SET_DG_DIALYSATE_TEMP_TARGETS, + message_id=MsgIds.MSG_ID_SET_DG_DIALYSATE_TEMP_TARGETS, payload=payload) self.logger.debug("Setting Primary Heater to {} C and Trimmer Heater to {} C".format(pirmary_target_temp, trimmer_target_temp)) self.can_interface.send(message, 0) @@ -166,7 +154,7 @@ payload = resetValue + intervalValue message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_HEATERS_PUBLISH_INTERVAL_ORVERRIDE, + message_id=MsgIds.MSG_ID_HEATERS_PUBLISH_INTERVAL_ORVERRIDE, payload=payload) self.logger.debug("Sending {} ms publish interval to the Heaters module".format(ms)) Index: dialin/dg/load_cells.py =================================================================== diff -u -r900f99812cee2e022fbbd46cd916b08a1397dda7 -r65277463eda63686c6132b6716aaa997b6df1861 --- dialin/dg/load_cells.py (.../load_cells.py) (revision 900f99812cee2e022fbbd46cd916b08a1397dda7) +++ dialin/dg/load_cells.py (.../load_cells.py) (revision 65277463eda63686c6132b6716aaa997b6df1861) @@ -15,6 +15,7 @@ ############################################################################ import struct from ..utils.conversions import integer_to_bytearray, float_to_bytearray +from ..common.msg_defs import MsgIds, MsgFldPositions from .constants import RESET,NO_RESET from ..protocols.CAN import (DenaliMessage, DenaliChannels) @@ -29,21 +30,6 @@ Dialysate Generator (DG) Dialin API sub-class for load cell related commands. """ - # Pressure/Occlusion message IDs - MSG_ID_DG_LOAD_CELL_DATA = 0x000C - MSG_ID_DG_LOAD_CELL_OVERRIDE = 0xA005 - MSG_ID_DG_LOAD_CELL_DATA_BROADCAST_INTERVAL_OVERRIDE = 0xA00D - - # Load cell broadcast message field positions - START_POS_LC_A1 = DenaliMessage.PAYLOAD_START_INDEX - END_POS_LC_A1 = START_POS_LC_A1 + 4 - START_POS_LC_A2 = END_POS_LC_A1 - END_POS_LC_A2 = START_POS_LC_A2 + 4 - START_POS_LC_B1 = END_POS_LC_A2 - END_POS_LC_B1 = START_POS_LC_B1 + 4 - START_POS_LC_B2 = END_POS_LC_B1 - END_POS_LC_B2 = START_POS_LC_B2 + 4 - # Load Cell IDs LOAD_CELL_A1 = 0 LOAD_CELL_A2 = 1 @@ -61,7 +47,7 @@ if self.can_interface is not None: channel_id = DenaliChannels.dg_sync_broadcast_ch_id - msg_id = self.MSG_ID_DG_LOAD_CELL_DATA + msg_id = MsgIds.MSG_ID_DG_LOAD_CELL_DATA self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_load_cells_sync) @@ -89,13 +75,13 @@ """ a1 = struct.unpack('f', bytearray( - message['message'][self.START_POS_LC_A1:self.END_POS_LC_A1])) + message['message'][MsgFldPositions.START_POS_FIELD_1:MsgFldPositions.END_POS_FIELD_1])) a2 = struct.unpack('f', bytearray( - message['message'][self.START_POS_LC_A2:self.END_POS_LC_A2])) + message['message'][MsgFldPositions.START_POS_FIELD_2:MsgFldPositions.END_POS_FIELD_2])) b1 = struct.unpack('f', bytearray( - message['message'][self.START_POS_LC_B1:self.END_POS_LC_B1])) + message['message'][MsgFldPositions.START_POS_FIELD_3:MsgFldPositions.END_POS_FIELD_3])) b2 = struct.unpack('f', bytearray( - message['message'][self.START_POS_LC_B2:self.END_POS_LC_B2])) + message['message'][MsgFldPositions.START_POS_FIELD_4:MsgFldPositions.END_POS_FIELD_4])) self.load_cell_A1 = a1[0] self.load_cell_A2 = a2[0] @@ -127,7 +113,7 @@ payload = rst + grm + idx message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_DG_LOAD_CELL_OVERRIDE, + message_id=MsgIds.MSG_ID_DG_LOAD_CELL_OVERRIDE, payload=payload) self.logger.debug("override load cell weight value for sensor " + str(sensor)) @@ -160,7 +146,7 @@ payload = rst + mis message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_DG_LOAD_CELL_DATA_BROADCAST_INTERVAL_OVERRIDE, + message_id=MsgIds.MSG_ID_DG_LOAD_CELL_DATA_BROADCAST_INTERVAL_OVERRIDE, payload=payload) self.logger.debug("override DG load cell broadcast interval") Index: dialin/dg/pressures.py =================================================================== diff -u -r900f99812cee2e022fbbd46cd916b08a1397dda7 -r65277463eda63686c6132b6716aaa997b6df1861 --- dialin/dg/pressures.py (.../pressures.py) (revision 900f99812cee2e022fbbd46cd916b08a1397dda7) +++ dialin/dg/pressures.py (.../pressures.py) (revision 65277463eda63686c6132b6716aaa997b6df1861) @@ -15,6 +15,7 @@ ############################################################################ import struct from ..utils.conversions import integer_to_bytearray, float_to_bytearray +from ..common.msg_defs import MsgIds, MsgFldPositions from .constants import NO_RESET from ..protocols.CAN import (DenaliMessage, DenaliChannels) @@ -27,21 +28,6 @@ DG interface containing pressure related commands. """ - # Pressure message IDs - MSG_ID_DG_PRESSURES_DATA = 0x0020 - MSG_ID_DG_PRESSURE_OVERRIDE = 0xA006 - MSG_ID_DG_PRESSURE_DATA_BROADCAST_INTERVAL_OVERRIDE = 0xA007 - - # Pressure broadcast message field positions - START_POS_RO_INLET_PRES = DenaliMessage.PAYLOAD_START_INDEX - END_POS_RO_INLET_PRES = START_POS_RO_INLET_PRES + 4 - START_POS_RO_OUTLET_PRES = END_POS_RO_INLET_PRES - END_POS_RO_OUTLET_PRES = START_POS_RO_OUTLET_PRES + 4 - START_POS_DRAIN_INLET_PRES = END_POS_RO_OUTLET_PRES - END_POS_DRAIN_INLET_PRES = START_POS_DRAIN_INLET_PRES + 4 - START_POS_DRAIN_OUTLET_PRES = END_POS_DRAIN_INLET_PRES - END_POS_DRAIN_OUTLET_PRES = START_POS_DRAIN_OUTLET_PRES + 4 - # Pressure Sensor IDs PRESSURE_SENSOR_RO_PUMP_INLET = 0 PRESSURE_SENSOR_RO_PUMP_OUTLET = 1 @@ -60,7 +46,7 @@ if self.can_interface is not None: channel_id = DenaliChannels.dg_sync_broadcast_ch_id - msg_id = self.MSG_ID_DG_PRESSURES_DATA + msg_id = MsgIds.MSG_ID_DG_PRESSURES_DATA self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_pressures_sync) @@ -96,13 +82,13 @@ """ roi = struct.unpack('f', bytearray( - message['message'][self.START_POS_RO_INLET_PRES:self.END_POS_RO_INLET_PRES])) + message['message'][MsgFldPositions.START_POS_FIELD_1:MsgFldPositions.END_POS_FIELD_1])) roo = struct.unpack('f', bytearray( - message['message'][self.START_POS_RO_OUTLET_PRES:self.END_POS_RO_OUTLET_PRES])) + message['message'][MsgFldPositions.START_POS_FIELD_2:MsgFldPositions.END_POS_FIELD_2])) dri = struct.unpack('f', bytearray( - message['message'][self.START_POS_DRAIN_INLET_PRES:self.END_POS_DRAIN_INLET_PRES])) + message['message'][MsgFldPositions.START_POS_FIELD_3:MsgFldPositions.END_POS_FIELD_3])) dro = struct.unpack('f', bytearray( - message['message'][self.START_POS_DRAIN_OUTLET_PRES:self.END_POS_DRAIN_OUTLET_PRES])) + message['message'][MsgFldPositions.START_POS_FIELD_4:MsgFldPositions.END_POS_FIELD_4])) self.ro_pump_inlet_pressure = roi[0] self.ro_pump_outlet_pressure = roo[0] @@ -134,7 +120,7 @@ payload = rst + prs + idx message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_DG_PRESSURE_OVERRIDE, + message_id=MsgIds.MSG_ID_DG_PRESSURE_OVERRIDE, payload=payload) self.logger.debug("override pressure sensor") @@ -168,7 +154,7 @@ payload = rst + ivl message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_DG_PRESSURE_DATA_BROADCAST_INTERVAL_OVERRIDE, + message_id=MsgIds.MSG_ID_DG_PRESSURE_DATA_BROADCAST_INTERVAL_OVERRIDE, payload=payload) self.logger.debug("override pressure data broadcast interval") Index: dialin/dg/reservoirs.py =================================================================== diff -u -r8d1f61499650e23dac6f857e48daad42180db949 -r65277463eda63686c6132b6716aaa997b6df1861 --- dialin/dg/reservoirs.py (.../reservoirs.py) (revision 8d1f61499650e23dac6f857e48daad42180db949) +++ dialin/dg/reservoirs.py (.../reservoirs.py) (revision 65277463eda63686c6132b6716aaa997b6df1861) @@ -17,6 +17,7 @@ from ..protocols.CAN import (DenaliMessage, DenaliChannels) from ..utils.base import _AbstractSubSystem, _publish +from ..common.msg_defs import MsgIds, MsgFldPositions from logging import Logger @@ -25,17 +26,6 @@ DG interface containing reservoir related commands. """ - # Reservoir message IDs - MSG_ID_DG_RESERVOIR_DATA = 0x0028 - - # Reservoir broadcast message field positions - START_POS_ACT_RES = DenaliMessage.PAYLOAD_START_INDEX - END_POS_ACT_RES = START_POS_ACT_RES + 4 - START_POS_FILL_TO_VOL = END_POS_ACT_RES - END_POS_FILL_TO_VOL = START_POS_FILL_TO_VOL + 4 - START_POS_DRAIN_TO_VOL = END_POS_FILL_TO_VOL - END_POS_DRAIN_TO_VOL = START_POS_DRAIN_TO_VOL + 4 - # Reservoir IDs RESERVOIR1 = 0 RESERVOIR2 = 1 @@ -52,7 +42,7 @@ if self.can_interface is not None: channel_id = DenaliChannels.dg_sync_broadcast_ch_id - msg_id = self.MSG_ID_DG_RESERVOIR_DATA + msg_id = MsgIds.MSG_ID_DG_RESERVOIR_DATA self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_reservoirs_sync) @@ -100,11 +90,11 @@ """ res = struct.unpack('i', bytearray( - message['message'][self.START_POS_ACT_RES:self.END_POS_ACT_RES])) + message['message'][MsgFldPositions.START_POS_FIELD_1:MsgFldPositions.END_POS_FIELD_1])) fil = struct.unpack('i', bytearray( - message['message'][self.START_POS_FILL_TO_VOL:self.END_POS_FILL_TO_VOL])) + message['message'][MsgFldPositions.START_POS_FIELD_2:MsgFldPositions.END_POS_FIELD_2])) dra = struct.unpack('i', bytearray( - message['message'][self.START_POS_DRAIN_TO_VOL:self.END_POS_DRAIN_TO_VOL])) + message['message'][MsgFldPositions.START_POS_FIELD_3:MsgFldPositions.END_POS_FIELD_3])) self.active_reservoir = res[0] self.fill_to_vol_ml = fil[0] Index: dialin/dg/ro_pump.py =================================================================== diff -u -r10bd08a612562df62c94e3d304f17ba24f4275a6 -r65277463eda63686c6132b6716aaa997b6df1861 --- dialin/dg/ro_pump.py (.../ro_pump.py) (revision 10bd08a612562df62c94e3d304f17ba24f4275a6) +++ dialin/dg/ro_pump.py (.../ro_pump.py) (revision 65277463eda63686c6132b6716aaa997b6df1861) @@ -15,6 +15,7 @@ ############################################################################ import struct from ..utils.conversions import integer_to_bytearray, float_to_bytearray +from ..common.msg_defs import MsgIds, MsgFldPositions from .constants import RESET, NO_RESET from ..protocols.CAN import (DenaliMessage, DenaliChannels) @@ -29,23 +30,6 @@ """ - # RO pump message IDs - MSG_ID_DG_RO_PUMP_PUBLISHED_DATA = 0x001F - MSG_ID_DG_RO_PUMP_PRESSURE_SET_PT_OVERRIDE = 0xA008 - #MSG_ID_DG_RO_FLOW_RATE_OVERRIDE = 0xA009 - MSG_ID_DG_RO_PUMP_BROADCAST_INTERVAL_OVERRIDE = 0xA00A - MSG_ID_RO_PUMP_SET_PT_OVERRIDE = 0xA008 - - # RO pump broadcast message field positions - START_POS_PRES_SET_PT = DenaliMessage.PAYLOAD_START_INDEX - END_POS_PRES_SET_PT = START_POS_PRES_SET_PT + 4 - START_POS_MEAS_FLOW = END_POS_PRES_SET_PT - END_POS_MEAS_FLOW = START_POS_MEAS_FLOW + 4 - START_POS_PWM = END_POS_MEAS_FLOW - END_POS_PWM = START_POS_PWM + 4 - START_POS_STATE = END_POS_PWM - END_POS_STATE = START_POS_STATE + 4 - #Enums RAMP_UP_STATE = 0 @@ -61,7 +45,7 @@ if self.can_interface is not None: channel_id = DenaliChannels.dg_sync_broadcast_ch_id - msg_id = self.MSG_ID_DG_RO_PUMP_PUBLISHED_DATA + msg_id = MsgIds.MSG_ID_DG_RO_PUMP_PUBLISHED_DATA self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_ro_pump_sync) @@ -107,13 +91,13 @@ """ tgt = struct.unpack('f', bytearray( - message['message'][self.START_POS_PRES_SET_PT:self.END_POS_PRES_SET_PT])) + message['message'][MsgFldPositions.START_POS_FIELD_1:MsgFldPositions.END_POS_FIELD_1])) flow = struct.unpack('f', bytearray( - message['message'][self.START_POS_MEAS_FLOW:self.END_POS_MEAS_FLOW])) + message['message'][MsgFldPositions.START_POS_FIELD_2:MsgFldPositions.END_POS_FIELD_2])) pwm = struct.unpack('f', bytearray( - message['message'][self.START_POS_PWM:self.END_POS_PWM])) + message['message'][MsgFldPositions.START_POS_FIELD_3:MsgFldPositions.END_POS_FIELD_3])) ro_state = struct.unpack('i', bytearray( - message['message'][self.START_POS_STATE:self.END_POS_STATE])) + message['message'][MsgFldPositions.START_POS_FIELD_4:MsgFldPositions.END_POS_FIELD_4])) self.target_pressure_psi = tgt[0] self.measured_flow_rate_lpm = flow[0] @@ -149,7 +133,7 @@ payload = rst + prs message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_RO_PUMP_SET_PT_OVERRIDE, + message_id=MsgIds.MSG_ID_RO_PUMP_SET_PT_OVERRIDE, payload=payload) self.logger.debug("override RO pump pressure set point") @@ -189,7 +173,7 @@ payload = rst + flo message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_RO_PUMP_SET_PT_OVERRIDE, + message_id=MsgIds.MSG_ID_RO_PUMP_SET_PT_OVERRIDE, payload=payload) self.logger.debug("override RO pump pressure set point") @@ -230,7 +214,7 @@ payload = rst + mis message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_DG_RO_PUMP_BROADCAST_INTERVAL_OVERRIDE, + message_id=MsgIds.MSG_ID_DG_RO_PUMP_BROADCAST_INTERVAL_OVERRIDE, payload=payload) self.logger.debug("override RO pump data broadcast interval") Index: dialin/dg/temperature_sensors.py =================================================================== diff -u -r900f99812cee2e022fbbd46cd916b08a1397dda7 -r65277463eda63686c6132b6716aaa997b6df1861 --- dialin/dg/temperature_sensors.py (.../temperature_sensors.py) (revision 900f99812cee2e022fbbd46cd916b08a1397dda7) +++ dialin/dg/temperature_sensors.py (.../temperature_sensors.py) (revision 65277463eda63686c6132b6716aaa997b6df1861) @@ -16,6 +16,7 @@ import struct from ..utils.conversions import integer_to_bytearray from ..utils.conversions import float_to_bytearray +from ..common.msg_defs import MsgIds, MsgFldPositions from .constants import NO_RESET from ..protocols.CAN import (DenaliMessage, DenaliChannels) from ..utils.base import _AbstractSubSystem, _publish @@ -40,47 +41,6 @@ class TemperatureSensors(_AbstractSubSystem): - MSG_ID_DG_TEMPERATURE_DATA = 0x2D - MSG_ID_TEMPERATURE_SENSORS_PUBLISH_INTERVAL_OVERRIDE = 0xA012 - MSG_ID_TEMPERATURE_SENSORS_VALUE_OVERRIDE = 0xA010 - - # Inlet primary temperature sensor - START_POS_INLET_PRIMARY_TEMP = DenaliMessage.PAYLOAD_START_INDEX - END_POS_INLET_PRIMARY_TEMP = START_POS_INLET_PRIMARY_TEMP + 4 - # Outlet primary temperature sensor - START_POS_OUTLET_PRIMARY_TEMP = END_POS_INLET_PRIMARY_TEMP - END_POS_OUTLET_PRIMARY_TEMP = START_POS_OUTLET_PRIMARY_TEMP + 4 - # Conductivity sensor 1 temperature sensor - START_POS_CD1_TEMP = END_POS_OUTLET_PRIMARY_TEMP - END_POS_CD1_TEMP = START_POS_CD1_TEMP + 4 - # Conductivity sensor 2 temperature sensor - START_POS_CD2_TEMP = END_POS_CD1_TEMP - END_POS_CD2_TEMP = START_POS_CD2_TEMP + 4 - # Outlet redundancy temperature sensor - START_POS_OUTLET_REDUNDANCY_TEMP = END_POS_CD2_TEMP - END_POS_OUTLET_REDUNDANCY_TEMP = START_POS_OUTLET_REDUNDANCY_TEMP + 4 - # Dialysate inlet temperature sensor - START_POS_INLET_DIALYSATE_TEMP = END_POS_OUTLET_REDUNDANCY_TEMP - END_POS_INLET_DIALYSATE_TEMP = START_POS_INLET_DIALYSATE_TEMP + 4 - # Primary heater thermocouple temperature sensor - START_POS_PRI_TC_TEMP = END_POS_INLET_DIALYSATE_TEMP - END_POS_PRI_TC_TEMP = START_POS_PRI_TC_TEMP + 4 - # Trimmer heater thermocouple temperature sensor - START_POS_TRI_TC_TEMP = END_POS_PRI_TC_TEMP - END_POS_TRI_TC_TEMP = START_POS_TRI_TC_TEMP + 4 - # Primary heater cold junction temperature sensor - START_POS_PRI_CJ_TEMP = END_POS_TRI_TC_TEMP - END_POS_PRI_CJ_TEMP = START_POS_PRI_CJ_TEMP + 4 - # Trimmer heater cold junction temperature sensor - START_POS_TRI_CJ_TEMP = END_POS_PRI_CJ_TEMP - END_POS_TRI_CJ_TEMP = START_POS_TRI_CJ_TEMP + 4 - # Primary heater internal temperature - START_POS_PRI_INTERNAL_TEMP = END_POS_TRI_CJ_TEMP - END_POS_PRI_INTERNAL_TEMP = START_POS_PRI_INTERNAL_TEMP + 4 - # Trimmer heater internal temperature - START_POS_TRI_INTERNAL_TEMP = END_POS_PRI_INTERNAL_TEMP - END_POS_TRI_INTERNAL_TEMP = START_POS_TRI_INTERNAL_TEMP + 4 - def __init__(self, can_interface, logger: Logger): super().__init__() @@ -102,7 +62,7 @@ if self.can_interface is not None: channel_id = DenaliChannels.dg_sync_broadcast_ch_id - msg_id = self.MSG_ID_DG_TEMPERATURE_DATA + msg_id = MsgIds.MSG_ID_DG_TEMPERATURE_DATA self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_temperature_sensors_sync) @_publish(["inlet_primary", "outlet_primary", "cd1", "cd2","outlet_redundancy", "inlet_dialysate", "primary_tc", @@ -115,51 +75,51 @@ @returns none """ sensors_data = struct.unpack('f', bytearray( - message['message'][self.START_POS_INLET_PRIMARY_TEMP:self.END_POS_INLET_PRIMARY_TEMP])) + message['message'][MsgFldPositions.START_POS_FIELD_1:MsgFldPositions.END_POS_FIELD_1])) self.inlet_primary = sensors_data[0] sensors_data = struct.unpack('f', bytearray( - message['message'][self.START_POS_OUTLET_PRIMARY_TEMP:self.END_POS_OUTLET_PRIMARY_TEMP])) + message['message'][MsgFldPositions.START_POS_FIELD_2:MsgFldPositions.END_POS_FIELD_2])) self.outlet_primary = sensors_data[0] sensors_data = struct.unpack('f', bytearray( - message['message'][self.START_POS_CD1_TEMP:self.END_POS_CD1_TEMP])) + message['message'][MsgFldPositions.START_POS_FIELD_3:MsgFldPositions.END_POS_FIELD_3])) self.cd1 = sensors_data[0] sensors_data = struct.unpack('f', bytearray( - message['message'][self.START_POS_CD2_TEMP:self.END_POS_CD2_TEMP])) + message['message'][MsgFldPositions.START_POS_FIELD_4:MsgFldPositions.END_POS_FIELD_4])) self.cd2 = sensors_data[0] sensors_data = struct.unpack('f', bytearray( - message['message'][self.START_POS_OUTLET_REDUNDANCY_TEMP:self.END_POS_OUTLET_REDUNDANCY_TEMP])) + message['message'][MsgFldPositions.START_POS_FIELD_5:MsgFldPositions.END_POS_FIELD_5])) self.outlet_redundancy = sensors_data[0] sensors_data = struct.unpack('f', bytearray( - message['message'][self.START_POS_INLET_DIALYSATE_TEMP:self.END_POS_INLET_DIALYSATE_TEMP])) + message['message'][MsgFldPositions.START_POS_FIELD_6:MsgFldPositions.END_POS_FIELD_6])) self.inlet_dialysate = sensors_data[0] sensors_data = struct.unpack('f', bytearray( - message['message'][self.START_POS_PRI_TC_TEMP:self.END_POS_PRI_TC_TEMP])) + message['message'][MsgFldPositions.START_POS_FIELD_7:MsgFldPositions.END_POS_FIELD_7])) self.primary_tc = sensors_data[0] sensors_data = struct.unpack('f', bytearray( - message['message'][self.START_POS_TRI_TC_TEMP:self.END_POS_TRI_TC_TEMP])) + message['message'][MsgFldPositions.START_POS_FIELD_8:MsgFldPositions.END_POS_FIELD_8])) self.trimmer_tc = sensors_data[0] sensors_data = struct.unpack('f', bytearray( - message['message'][self.START_POS_PRI_CJ_TEMP:self.END_POS_PRI_CJ_TEMP])) + message['message'][MsgFldPositions.START_POS_FIELD_9:MsgFldPositions.END_POS_FIELD_9])) self.primary_cj = sensors_data[0] sensors_data = struct.unpack('f', bytearray( - message['message'][self.START_POS_TRI_CJ_TEMP:self.END_POS_TRI_CJ_TEMP])) + message['message'][MsgFldPositions.START_POS_FIELD_10:MsgFldPositions.END_POS_FIELD_10])) self.trimmer_cj = sensors_data[0] sensors_data = struct.unpack('f', bytearray( - message['message'][self.START_POS_PRI_INTERNAL_TEMP:self.END_POS_PRI_INTERNAL_TEMP])) + message['message'][MsgFldPositions.START_POS_FIELD_11:MsgFldPositions.END_POS_FIELD_11])) self.primary_internal = sensors_data[0] sensors_data = struct.unpack('f', bytearray( - message['message'][self.START_POS_TRI_INTERNAL_TEMP:self.END_POS_TRI_INTERNAL_TEMP])) + message['message'][MsgFldPositions.START_POS_FIELD_12:MsgFldPositions.END_POS_FIELD_12])) self.trimmer_internal = sensors_data[0] def cmd_temperature_sensors_broadcast_interval_override(self, ms, reset=NO_RESET): @@ -178,7 +138,7 @@ payload = reset_value + interval_value message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_TEMPERATURE_SENSORS_PUBLISH_INTERVAL_OVERRIDE, + message_id=MsgIds.MSG_ID_TEMPERATURE_SENSORS_PUBLISH_INTERVAL_OVERRIDE, payload=payload) self.logger.debug("Sending {} ms publish interval to the Temperature Sensors module".format(ms)) @@ -225,7 +185,7 @@ payload = rst + value + index message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_TEMPERATURE_SENSORS_VALUE_OVERRIDE, + message_id=MsgIds.MSG_ID_TEMPERATURE_SENSORS_VALUE_OVERRIDE, payload=payload) self.logger.debug("Setting sensor {} to {} C".format(sensor_index, sensor_value)) Index: dialin/dg/valves.py =================================================================== diff -u -r900f99812cee2e022fbbd46cd916b08a1397dda7 -r65277463eda63686c6132b6716aaa997b6df1861 --- dialin/dg/valves.py (.../valves.py) (revision 900f99812cee2e022fbbd46cd916b08a1397dda7) +++ dialin/dg/valves.py (.../valves.py) (revision 65277463eda63686c6132b6716aaa997b6df1861) @@ -16,6 +16,7 @@ import struct from ..utils.conversions import integer_to_bytearray +from ..common.msg_defs import MsgIds from .constants import NO_RESET from ..protocols.CAN import (DenaliMessage, DenaliChannels) from ..utils.base import _AbstractSubSystem, _publish @@ -31,11 +32,6 @@ Dialysate Generation (DG) interface for valve related commands. """ - # Valve state message IDs - MSG_ID_DG_VALVES_STATES = 0x2A - MSG_ID_DG_VALVE_STATE_OVERRIDE = 0xA00E - MSG_ID_DG_VALVES_STATES_PUBLISH_INTERVAL_OVERRIDE = 0xA00F - # Valves states publish message field positions START_POS_VALVES_STATES = DenaliMessage.PAYLOAD_START_INDEX END_POS_VALVES_STATES = START_POS_VALVES_STATES + 2 # Valves States come in as a U16 value (2 bytes) @@ -67,7 +63,7 @@ if self.can_interface is not None: channel_id = DenaliChannels.dg_sync_broadcast_ch_id - msg_id = self.MSG_ID_DG_VALVES_STATES + msg_id = MsgIds.MSG_ID_DG_VALVES_STATES self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_valves_sync) self.valve_states_all = 0x0000 @@ -258,7 +254,7 @@ payload = rst + ste + vlv message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_DG_VALVE_STATE_OVERRIDE, + message_id=MsgIds.MSG_ID_DG_VALVE_STATE_OVERRIDE, payload=payload) self.logger.debug("override valve state") @@ -292,7 +288,7 @@ payload = rst + ivl message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, - message_id=self.MSG_ID_DG_VALVES_STATES_PUBLISH_INTERVAL_OVERRIDE, + message_id=MsgIds.MSG_ID_DG_VALVES_STATES_PUBLISH_INTERVAL_OVERRIDE, payload=payload) self.logger.debug("override valves states publish interval") Index: dialin/hd/accelerometer.py =================================================================== diff -u -r10bd08a612562df62c94e3d304f17ba24f4275a6 -r65277463eda63686c6132b6716aaa997b6df1861 --- dialin/hd/accelerometer.py (.../accelerometer.py) (revision 10bd08a612562df62c94e3d304f17ba24f4275a6) +++ dialin/hd/accelerometer.py (.../accelerometer.py) (revision 65277463eda63686c6132b6716aaa997b6df1861) @@ -21,20 +21,14 @@ from ..utils.conversions import integer_to_bytearray, float_to_bytearray from .constants import RESET, NO_RESET from ..utils.base import _AbstractSubSystem, _publish +from ..common.msg_defs import MsgIds, MsgFldPositions from logging import Logger class HDAccelerometer(_AbstractSubSystem): """ Hemodialysis Delivery (HD) Dialin API sub-class for accelerometer related commands. """ - # Accelerometer message IDs - MSG_ID_HD_ACCELEROMETER_DATA = 0x0033 - MSG_ID_HD_ACCEL_OVERRIDE = 0x8027 - MSG_ID_HD_ACCEL_MAX_OVERRIDE = 0x8028 - MSG_ID_HD_ACCEL_SEND_INTERVAL_OVERRIDE = 0x8029 - MSG_ID_HD_ACCEL_SET_CALIBRATION = 0x802A - # Vector axes class AccelerometerVector: def __init__(self, x=0.0, y=0.0, z=0.0): @@ -51,26 +45,6 @@ VECTOR_AXIS_Y = 1 VECTOR_AXIS_Z = 2 - # Pressure/Occlusion broadcast message field positions - START_POS_X = DenaliMessage.PAYLOAD_START_INDEX - END_POS_X = START_POS_X + 4 - START_POS_Y = END_POS_X - END_POS_Y = START_POS_Y + 4 - START_POS_Z = END_POS_Y - END_POS_Z = START_POS_Z + 4 - START_POS_MAX_X = END_POS_Z - END_POS_MAX_X = START_POS_MAX_X + 4 - START_POS_MAX_Y = END_POS_MAX_X - END_POS_MAX_Y = START_POS_MAX_Y + 4 - START_POS_MAX_Z = END_POS_MAX_Y - END_POS_MAX_Z = START_POS_MAX_Z + 4 - START_POS_TILT_X = END_POS_MAX_Z - END_POS_TILT_X = START_POS_TILT_X + 4 - START_POS_TILT_Y = END_POS_TILT_X - END_POS_TILT_Y = START_POS_TILT_Y + 4 - START_POS_TILT_Z = END_POS_TILT_Y - END_POS_TILT_Z = START_POS_TILT_Z + 4 - def __init__(self, can_interface, logger: Logger): """ HDAccelerometer constructor @@ -82,7 +56,7 @@ if self.can_interface is not None: channel_id = DenaliChannels.hd_sync_broadcast_ch_id - msg_id = self.MSG_ID_HD_ACCELEROMETER_DATA + msg_id = MsgIds.MSG_ID_HD_ACCELEROMETER_DATA self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_accelerometer_sync) @@ -125,19 +99,28 @@ @return: none """ - x = struct.unpack('f', bytearray(message['message'][self.START_POS_X:self.END_POS_X])) - y = struct.unpack('f', bytearray(message['message'][self.START_POS_Y:self.END_POS_Y])) - z = struct.unpack('f', bytearray(message['message'][self.START_POS_Z:self.END_POS_Z])) + x = struct.unpack('f', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_1:MsgFldPositions.END_POS_FIELD_1])) + y = struct.unpack('f', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_2:MsgFldPositions.END_POS_FIELD_2])) + z = struct.unpack('f', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_3:MsgFldPositions.END_POS_FIELD_3])) self.vector = self.AccelerometerVector( x[0], y[0], z[0] ) - x = struct.unpack('f', bytearray(message['message'][self.START_POS_MAX_X:self.END_POS_MAX_X])) - y = struct.unpack('f', bytearray(message['message'][self.START_POS_MAX_Y:self.END_POS_MAX_Y])) - z = struct.unpack('f', bytearray(message['message'][self.START_POS_MAX_Z:self.END_POS_MAX_Z])) + x = struct.unpack('f', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_4:MsgFldPositions.END_POS_FIELD_4])) + y = struct.unpack('f', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_5:MsgFldPositions.END_POS_FIELD_5])) + z = struct.unpack('f', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_6:MsgFldPositions.END_POS_FIELD_6])) self.vector_max = self.AccelerometerVector( x[0], y[0], z[0] ) - x = struct.unpack('f', bytearray(message['message'][self.START_POS_TILT_X:self.END_POS_TILT_X])) - y = struct.unpack('f', bytearray(message['message'][self.START_POS_TILT_Y:self.END_POS_TILT_Y])) - z = struct.unpack('f', bytearray(message['message'][self.START_POS_TILT_Z:self.END_POS_TILT_Z])) + x = struct.unpack('f', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_7:MsgFldPositions.END_POS_FIELD_7])) + y = struct.unpack('f', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_8:MsgFldPositions.END_POS_FIELD_8])) + z = struct.unpack('f', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_9:MsgFldPositions.END_POS_FIELD_9])) self.tilts = self.AccelerometerVector( x[0], y[0], z[0] ) def cmd_accel_vector_override(self, mag, axis, reset=NO_RESET): @@ -158,7 +141,7 @@ payload = rst + sta + idx message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_ACCEL_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_ACCEL_OVERRIDE, payload=payload) self.logger.debug("override HD accelerometer axis magnitude") @@ -198,7 +181,7 @@ payload = rst + sta + idx message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_ACCEL_MAX_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_ACCEL_MAX_OVERRIDE, payload=payload) self.logger.debug("override HD accelerometer axis maximum magnitude") @@ -237,7 +220,7 @@ payload = rst + mis message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_ACCEL_SEND_INTERVAL_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_ACCEL_SEND_INTERVAL_OVERRIDE, payload=payload) self.logger.debug("override HD accelerometer broadcast interval") @@ -275,7 +258,7 @@ payload = x + y + z message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_ACCEL_SET_CALIBRATION, + message_id=MsgIds.MSG_ID_HD_ACCEL_SET_CALIBRATION, payload=payload) self.logger.debug("Setting HD accelerometer axis calibration offsets") Index: dialin/hd/alarms.py =================================================================== diff -u -r10bd08a612562df62c94e3d304f17ba24f4275a6 -r65277463eda63686c6132b6716aaa997b6df1861 --- dialin/hd/alarms.py (.../alarms.py) (revision 10bd08a612562df62c94e3d304f17ba24f4275a6) +++ dialin/hd/alarms.py (.../alarms.py) (revision 65277463eda63686c6132b6716aaa997b6df1861) @@ -17,6 +17,7 @@ DenaliChannels) from ..utils.conversions import integer_to_bytearray from ..utils.base import _AbstractSubSystem, _publish +from ..common.msg_defs import MsgIds from .constants import RESET, NO_RESET from collections import OrderedDict import struct @@ -29,14 +30,6 @@ HD interface containing alarm related commands. """ - # alarms message IDs - MSG_ID_HD_ALARMS_PUBLISHED_STATUS = 0x0002 - MSG_ID_HD_ALARM_ACTIVATE = 0x0003 - MSG_ID_HD_ALARM_CLEAR = 0x0004 - MSG_ID_HD_ALARM_LAMP_OVERRIDE = 0x8004 - MSG_ID_HD_ALARM_STATE_OVERRIDE = 0x8006 - MSG_ID_HD_ALARM_TIME_OVERRIDE = 0x8007 - # Alarm lamp patterns HD_ALARM_LAMP_PATTERN_OFF = 0 HD_ALARM_LAMP_PATTERN_OK = 1 @@ -67,68 +60,6 @@ START_POS_ALARM_ID = DenaliMessage.PAYLOAD_START_INDEX END_POS_ALARM_ID = START_POS_ALARM_ID + 2 - # See AlarmDefs.h - ALARM_ID_NO_ALARM = 0 - ALARM_ID_SOFTWARE_FAULT = 1 - ALARM_ID_STUCK_BUTTON_TEST_FAILED = 2 - ALARM_ID_FPGA_POST_TEST_FAILED = 3 - ALARM_ID_WATCHDOG_POST_TEST_FAILED = 4 - ALARM_ID_UI_COMM_POST_FAILED = 5 - ALARM_ID_BLOOD_PUMP_MC_CURRENT_CHECK = 6 - ALARM_ID_BLOOD_PUMP_OFF_CHECK = 7 - ALARM_ID_BLOOD_PUMP_MC_DIRECTION_CHECK = 8 - ALARM_ID_BLOOD_PUMP_ROTOR_SPEED_CHECK = 9 - ALARM_ID_DIAL_IN_PUMP_MC_CURRENT_CHECK = 10 - ALARM_ID_DIAL_IN_PUMP_OFF_CHECK = 11 - ALARM_ID_DIAL_IN_PUMP_MC_DIRECTION_CHECK = 12 - ALARM_ID_DIAL_IN_PUMP_ROTOR_SPEED_CHECK = 13 - ALARM_ID_DIAL_OUT_PUMP_MC_CURRENT_CHECK = 14 - ALARM_ID_DIAL_OUT_PUMP_OFF_CHECK = 15 - ALARM_ID_DIAL_OUT_PUMP_MC_DIRECTION_CHECK = 16 - ALARM_ID_DIAL_OUT_PUMP_ROTOR_SPEED_CHECK = 17 - ALARM_ID_WATCHDOG_EXPIRED = 18 - ALARM_ID_RTC_COMM_ERROR = 19 - ALARM_ID_RTC_CONFIG_ERROR = 20 - ALARM_ID_DG_COMM_TIMEOUT = 21 - ALARM_ID_UI_COMM_TIMEOUT = 22 - ALARM_ID_COMM_TOO_MANY_BAD_CRCS = 23 - ALARM_ID_TREATMENT_STOPPED_BY_USER = 24 - ALARM_ID_BLOOD_SITTING_WARNING = 25 - ALARM_ID_BLOOD_SITTING_TOO_LONG_NO_RESUME = 26 - ALARM_ID_BLOOD_SITTING_TOO_LONG_NO_RINSEBACK = 27 - ALARM_ID_CAN_MESSAGE_NOT_ACKED = 28 - ALARM_ID_OCCLUSION_BLOOD_PUMP = 29 - ALARM_ID_OCCLUSION_DIAL_IN_PUMP = 30 - ALARM_ID_OCCLUSION_DIAL_OUT_PUMP = 31 - ALARM_ID_ARTERIAL_PRESSURE_LOW = 32 - ALARM_ID_ARTERIAL_PRESSURE_HIGH = 33 - ALARM_ID_VENOUS_PRESSURE_LOW = 34 - ALARM_ID_VENOUS_PRESSURE_HIGH = 35 - ALARM_ID_UF_RATE_TOO_HIGH_ERROR = 36 - ALARM_ID_UF_VOLUME_ACCURACY_ERROR = 37 - ALARM_ID_RTC_BATTERY_LOW = 38 - ALARM_ID_RTC_OR_TIMER_ACCURACY_FAILURE = 39 - ALARM_ID_RTC_RAM_OPS_ERROR = 40 - ALARM_ID_NVDATA_EEPROM_OPS_FAILURE = 41 - ALARM_ID_NVDATA_MFG_RECORD_CRC_ERROR = 42 - ALARM_ID_NVDATA_SRVC_RECORD_CRC_ERROR = 43 - ALARM_ID_NVDATA_CAL_RECORD_CRC_ERROR = 44 - ALARM_ID_NVDATA_HW_USAGE_DATA_CRC_ERROR = 45 - AlARM_ID_NVDATA_DISINFECTION_DATE_CRC_ERROR = 46 - ALARM_ID_RO_PUMP_OUT_PRESSURE_OUT_OF_RANGE = 47 - ALARM_ID_TEMPERATURE_SENSORS_OUT_OF_RANGE = 48 - ALARM_ID_TEMPERATURE_SENSORS_INCONSISTENT = 49 - ALARM_ID_HD_COMM_TIMEOUT = 50 - ALARM_ID_VALVE_CONTROL_FAILURE = 51 - ALARM_ID_BLOOD_PUMP_FLOW_VS_MOTOR_SPEED_CHECK = 52 - ALARM_ID_DIAL_IN_PUMP_FLOW_VS_MOTOR_SPEED_CHECK = 53 - ALARM_ID_DIAL_OUT_PUMP_FLOW_VS_MOTOR_SPEED_CHECK = 54 - ALARM_ID_BLOOD_PUMP_MOTOR_SPEED_CHECK = 55 - ALARM_ID_DIAL_IN_PUMP_MOTOR_SPEED_CHECK = 56 - ALARM_ID_DIAL_OUT_PUMP_MOTOR_SPEED_CHECK = 57 - ALARM_ID_BLOOD_PUMP_ROTOR_SPEED_TOO_HIGH = 58 - ALARM_ID_INLET_WATER_TEMPERATURE_OUT_OF_RANGE = 59 - def __init__(self, can_interface, logger: Logger): """ @param can_interface: Denali Can Messenger object @@ -139,16 +70,16 @@ if self.can_interface is not None: channel_id = DenaliChannels.hd_alarm_broadcast_ch_id - msg_id = self.MSG_ID_HD_ALARMS_PUBLISHED_STATUS + msg_id = MsgIds.MSG_ID_HD_ALARMS_PUBLISHED_STATUS self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_alarms_status_sync) channel_id = DenaliChannels.hd_alarm_broadcast_ch_id - msg_id = self.MSG_ID_HD_ALARM_ACTIVATE + msg_id = MsgIds.MSG_ID_HD_ALARM_ACTIVATE self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_alarm_activate) channel_id = DenaliChannels.hd_alarm_broadcast_ch_id - msg_id = self.MSG_ID_HD_ALARM_CLEAR + msg_id = MsgIds.MSG_ID_HD_ALARM_CLEAR self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_alarm_clear) @@ -306,7 +237,7 @@ payload = rst + sta + alm message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_ALARM_STATE_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_ALARM_STATE_OVERRIDE, payload=payload) # Send message @@ -342,7 +273,7 @@ payload = rst + ms + alm message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_ALARM_TIME_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_ALARM_TIME_OVERRIDE, payload=payload) self.logger.debug("override alarm time since activated") @@ -390,7 +321,7 @@ payload = rst + pat message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_ALARM_LAMP_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_ALARM_LAMP_OVERRIDE, payload=payload) self.logger.debug("Override Alarm Lamp Pattern") Index: dialin/hd/blood_flow.py =================================================================== diff -u -r10bd08a612562df62c94e3d304f17ba24f4275a6 -r65277463eda63686c6132b6716aaa997b6df1861 --- dialin/hd/blood_flow.py (.../blood_flow.py) (revision 10bd08a612562df62c94e3d304f17ba24f4275a6) +++ dialin/hd/blood_flow.py (.../blood_flow.py) (revision 65277463eda63686c6132b6716aaa997b6df1861) @@ -19,6 +19,7 @@ from .constants import RESET, NO_RESET from .constants import PUMP_CONTROL_MODE_CLOSED_LOOP, PUMP_CONTROL_MODE_OPEN_LOOP from ..utils.base import _AbstractSubSystem, _publish +from ..common.msg_defs import MsgIds, MsgFldPositions import struct from logging import Logger @@ -31,33 +32,6 @@ """ - # bloodflow message IDs - MSG_ID_HD_BLOOD_FLOW_PUBLISHED_DATA = 0x0005 - MSG_ID_HD_BLOOD_FLOW_SET_RATE_OVERRIDE = 0x8008 - MSG_ID_HD_BLOOD_FLOW_MEAS_RATE_OVERRIDE = 0x8009 - MSG_ID_HD_BLOOD_PUMP_MC_MEAS_SPEED_OVERRIDE = 0x800A - MSG_ID_HD_BLOOD_PUMP_MC_MEAS_CURRENT_OVERRIDE = 0x800B - MSG_ID_HD_BLOOD_FLOW_PUBLISH_INTERVAL_OVERRIDE = 0x800C - MSG_ID_HD_BLOOD_PUMP_MEAS_SPEED_OVERRIDE = 0x800E - MSG_ID_HD_BLOOD_PUMP_ROTOR_MEAS_SPEED_OVERRIDE = 0x800F - MSG_ID_HD_BLOOD_FLOW_SET_CALIBRATION = 0x802B - - # bloodflow broadcast message field positions - START_POS_SET_PT = DenaliMessage.PAYLOAD_START_INDEX - END_POS_SET_PT = START_POS_SET_PT + 4 - START_POS_MEAS_FLOW = END_POS_SET_PT - END_POS_MEAS_FLOW = START_POS_MEAS_FLOW + 4 - START_POS_MEAS_ROT_SPEED = END_POS_MEAS_FLOW - END_POS_MEAS_ROT_SPEED = START_POS_MEAS_ROT_SPEED + 4 - START_POS_MEAS_SPEED = END_POS_MEAS_ROT_SPEED - END_POS_MEAS_SPEED = START_POS_MEAS_SPEED + 4 - START_POS_MEAS_MC_SPEED = END_POS_MEAS_SPEED - END_POS_MEAS_MC_SPEED = START_POS_MEAS_MC_SPEED + 4 - START_POS_MEAS_MC_CURR = END_POS_MEAS_MC_SPEED - END_POS_MEAS_MC_CURR = START_POS_MEAS_MC_CURR + 4 - START_POS_PWM_DC = END_POS_MEAS_MC_CURR - END_POS_PWM_DC = START_POS_PWM_DC + 4 - def __init__(self, can_interface, logger: Logger): """ HD_BloodFlow constructor @@ -68,7 +42,7 @@ if self.can_interface is not None: channel_id = DenaliChannels.hd_sync_broadcast_ch_id - msg_id = self.MSG_ID_HD_BLOOD_FLOW_PUBLISHED_DATA + msg_id = MsgIds.MSG_ID_HD_BLOOD_FLOW_PUBLISHED_DATA self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_blood_flow_sync) @@ -148,24 +122,20 @@ @return: none """ - # self.target_blood_flow_rate = int.from_bytes(bytearray( - # message['message'][self.START_POS_SET_PT:self.END_POS_SET_PT]), - # byteorder=DenaliMessage.BYTE_ORDER) tgt = struct.unpack('i', bytearray( - message['message'][self.START_POS_SET_PT:self.END_POS_SET_PT])) - + message['message'][MsgFldPositions.START_POS_FIELD_1:MsgFldPositions.END_POS_FIELD_1])) flow = struct.unpack('f', bytearray( - message['message'][self.START_POS_MEAS_FLOW:self.END_POS_MEAS_FLOW])) + message['message'][MsgFldPositions.START_POS_FIELD_2:MsgFldPositions.END_POS_FIELD_2])) rotor = struct.unpack('f', bytearray( - message['message'][self.START_POS_MEAS_ROT_SPEED:self.END_POS_MEAS_ROT_SPEED])) + message['message'][MsgFldPositions.START_POS_FIELD_3:MsgFldPositions.END_POS_FIELD_3])) speed = struct.unpack('f', bytearray( - message['message'][self.START_POS_MEAS_SPEED:self.END_POS_MEAS_SPEED])) + message['message'][MsgFldPositions.START_POS_FIELD_4:MsgFldPositions.END_POS_FIELD_4])) mcspeed = struct.unpack('f', bytearray( - message['message'][self.START_POS_MEAS_MC_SPEED:self.END_POS_MEAS_MC_SPEED])) + message['message'][MsgFldPositions.START_POS_FIELD_5:MsgFldPositions.END_POS_FIELD_5])) mccurr = struct.unpack('f', bytearray( - message['message'][self.START_POS_MEAS_MC_CURR:self.END_POS_MEAS_MC_CURR])) + message['message'][MsgFldPositions.START_POS_FIELD_6:MsgFldPositions.END_POS_FIELD_6])) pwm = struct.unpack('f', bytearray( - message['message'][self.START_POS_PWM_DC:self.END_POS_PWM_DC])) + message['message'][MsgFldPositions.START_POS_FIELD_7:MsgFldPositions.END_POS_FIELD_7])) self.target_blood_flow_rate = tgt[0] self.measured_blood_flow_rate = flow[0] @@ -194,7 +164,7 @@ payload = rst + flo + mod message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_BLOOD_FLOW_SET_RATE_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_BLOOD_FLOW_SET_RATE_OVERRIDE, payload=payload) self.logger.debug("override blood flow set point") @@ -238,7 +208,7 @@ payload = rst + flo message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_BLOOD_FLOW_MEAS_RATE_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_BLOOD_FLOW_MEAS_RATE_OVERRIDE, payload=payload) self.logger.debug("override measured blood flow") @@ -278,7 +248,7 @@ payload = rst + spd message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_BLOOD_PUMP_MC_MEAS_SPEED_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_BLOOD_PUMP_MC_MEAS_SPEED_OVERRIDE, payload=payload) self.logger.debug("override measured blood pump motor controller speed") @@ -317,7 +287,7 @@ payload = rst + cur message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_BLOOD_PUMP_MC_MEAS_CURRENT_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_BLOOD_PUMP_MC_MEAS_CURRENT_OVERRIDE, payload=payload) self.logger.debug("override measured blood pump motor controller current") @@ -357,7 +327,7 @@ payload = rst + spd message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_BLOOD_PUMP_MEAS_SPEED_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_BLOOD_PUMP_MEAS_SPEED_OVERRIDE, payload=payload) self.logger.debug("override measured blood pump speed") @@ -397,7 +367,7 @@ payload = rst + spd message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_BLOOD_PUMP_ROTOR_MEAS_SPEED_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_BLOOD_PUMP_ROTOR_MEAS_SPEED_OVERRIDE, payload=payload) self.logger.debug("override measured blood pump rotor speed") @@ -437,7 +407,7 @@ payload = rst + mis message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_BLOOD_FLOW_PUBLISH_INTERVAL_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_BLOOD_FLOW_PUBLISH_INTERVAL_OVERRIDE, payload=payload) self.logger.debug("override blood flow broadcast interval") @@ -471,7 +441,7 @@ payload = gan + off message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_BLOOD_FLOW_SET_CALIBRATION, + message_id=MsgIds.MSG_ID_HD_BLOOD_FLOW_SET_CALIBRATION, payload=payload) print("Setting blood flow calibration factors") Index: dialin/hd/buttons.py =================================================================== diff -u -r900f99812cee2e022fbbd46cd916b08a1397dda7 -r65277463eda63686c6132b6716aaa997b6df1861 --- dialin/hd/buttons.py (.../buttons.py) (revision 900f99812cee2e022fbbd46cd916b08a1397dda7) +++ dialin/hd/buttons.py (.../buttons.py) (revision 65277463eda63686c6132b6716aaa997b6df1861) @@ -17,6 +17,7 @@ DenaliCanMessenger, DenaliChannels) from ..utils.conversions import integer_to_bytearray +from ..common.msg_defs import MsgIds from .constants import RESET, NO_RESET from ..utils.base import _AbstractSubSystem, _publish from logging import Logger @@ -31,14 +32,6 @@ START_POS_POWEROFF = DenaliMessage.PAYLOAD_START_INDEX END_POS_POWEROFF_STATUS = START_POS_POWEROFF + 2 - # buttons message IDs - MSG_ID_HD_OFF_BUTTON_OVERRIDE = 0x8002 - MSG_ID_HD_STOP_BUTTON_OVERRIDE = 0x8003 - - MSG_ID_HD_POWEROFF_OPEN = 0x01 - MSG_ID_HD_POWEROFF_TIMEOUT = 0x01 - MSG_ID_HD_POWEROFF_BROADCAST = 0x000E - PRESSED = 1 RELEASED = 0 @@ -56,7 +49,7 @@ if self.can_interface is not None: self.can_interface.register_receiving_publication_function(DenaliChannels.hd_to_ui_ch_id, - self.MSG_ID_HD_POWEROFF_TIMEOUT, + MsgIds.MSG_ID_OFF_BUTTON_PRESS, self._handler_poweroff_timeout_occurred) def get_power_timeout_expired(self): @@ -113,7 +106,7 @@ payload = rst + sta message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_OFF_BUTTON_OVERRIDE, + message_id=MsgIds.MSG_ID_OFF_BUTTON_STATE_OVERRIDE, payload=payload) self.logger.debug("override off button") @@ -154,7 +147,7 @@ payload = rst + sta message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_STOP_BUTTON_OVERRIDE, + message_id=MsgIds.MSG_ID_STOP_BUTTON_STATE_OVERRIDE, payload=payload) self.logger.debug("override stop button") Index: dialin/hd/dialysate_inlet_flow.py =================================================================== diff -u -r10bd08a612562df62c94e3d304f17ba24f4275a6 -r65277463eda63686c6132b6716aaa997b6df1861 --- dialin/hd/dialysate_inlet_flow.py (.../dialysate_inlet_flow.py) (revision 10bd08a612562df62c94e3d304f17ba24f4275a6) +++ dialin/hd/dialysate_inlet_flow.py (.../dialysate_inlet_flow.py) (revision 65277463eda63686c6132b6716aaa997b6df1861) @@ -20,6 +20,7 @@ from .constants import RESET, NO_RESET from .constants import PUMP_CONTROL_MODE_CLOSED_LOOP, PUMP_CONTROL_MODE_OPEN_LOOP from ..utils.base import _AbstractSubSystem, _publish +from ..common.msg_defs import MsgIds, MsgFldPositions from logging import Logger class HDDialysateInletFlow(_AbstractSubSystem): @@ -30,33 +31,6 @@ """ - # DialysateFlow message IDs - MSG_ID_HD_DIAL_IN_FLOW_PUBLISHED_DATA = 0x0008 - MSG_ID_HD_DIAL_IN_FLOW_SET_RATE_OVERRIDE = 0x8010 - MSG_ID_HD_DIAL_IN_FLOW_MEAS_RATE_OVERRIDE = 0x8011 - MSG_ID_HD_DIAL_IN_PUMP_MC_MEAS_SPEED_OVERRIDE = 0x8012 - MSG_ID_HD_DIAL_IN_PUMP_MC_MEAS_CURRENT_OVERRIDE = 0x8013 - MSG_ID_HD_DIAL_IN_FLOW_PUBLISH_INTERVAL_OVERRIDE = 0x8014 - MSG_ID_HD_DIAL_IN_PUMP_MEAS_SPEED_OVERRIDE = 0x8015 - MSG_ID_HD_DIAL_IN_PUMP_ROTOR_MEAS_SPEED_OVERRIDE = 0x8016 - MSG_ID_HD_DIAL_IN_FLOW_SET_CALIBRATION = 0x802C - - # bloodflow broadcast message field positions - START_POS_SET_PT = DenaliMessage.PAYLOAD_START_INDEX - END_POS_SET_PT = START_POS_SET_PT + 4 - START_POS_MEAS_FLOW = END_POS_SET_PT - END_POS_MEAS_FLOW = START_POS_MEAS_FLOW + 4 - START_POS_MEAS_ROT_SPEED = END_POS_MEAS_FLOW - END_POS_MEAS_ROT_SPEED = START_POS_MEAS_ROT_SPEED + 4 - START_POS_MEAS_SPEED = END_POS_MEAS_ROT_SPEED - END_POS_MEAS_SPEED = START_POS_MEAS_SPEED + 4 - START_POS_MEAS_MC_SPEED = END_POS_MEAS_SPEED - END_POS_MEAS_MC_SPEED = START_POS_MEAS_MC_SPEED + 4 - START_POS_MEAS_MC_CURR = END_POS_MEAS_MC_SPEED - END_POS_MEAS_MC_CURR = START_POS_MEAS_MC_CURR + 4 - START_POS_PWM_DC = END_POS_MEAS_MC_CURR - END_POS_PWM_DC = START_POS_PWM_DC + 4 - def __init__(self, can_interface, logger: Logger): """ HD_DialysateFlow constructor @@ -68,7 +42,7 @@ if self.can_interface is not None: channel_id = DenaliChannels.hd_sync_broadcast_ch_id - msg_id = self.MSG_ID_HD_DIAL_IN_FLOW_PUBLISHED_DATA + msg_id = MsgIds.MSG_ID_HD_DIAL_IN_FLOW_PUBLISHED_DATA self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_dialysate_inlet_flow_sync) @@ -153,22 +127,22 @@ @return: none """ - self.target_dialysate_inlet_flow_rate = int.from_bytes(bytearray( - message['message'][self.START_POS_SET_PT:self.END_POS_SET_PT]), - byteorder=DenaliMessage.BYTE_ORDER) + tgt = struct.unpack('i', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_1:MsgFldPositions.END_POS_FIELD_1])) flow = struct.unpack('f', bytearray( - message['message'][self.START_POS_MEAS_FLOW:self.END_POS_MEAS_FLOW])) + message['message'][MsgFldPositions.START_POS_FIELD_2:MsgFldPositions.END_POS_FIELD_2])) rotor = struct.unpack('f', bytearray( - message['message'][self.START_POS_MEAS_ROT_SPEED:self.END_POS_MEAS_ROT_SPEED])) + message['message'][MsgFldPositions.START_POS_FIELD_3:MsgFldPositions.END_POS_FIELD_3])) speed = struct.unpack('f', bytearray( - message['message'][self.START_POS_MEAS_SPEED:self.END_POS_MEAS_SPEED])) + message['message'][MsgFldPositions.START_POS_FIELD_4:MsgFldPositions.END_POS_FIELD_4])) mcspeed = struct.unpack('f', bytearray( - message['message'][self.START_POS_MEAS_MC_SPEED:self.END_POS_MEAS_MC_SPEED])) + message['message'][MsgFldPositions.START_POS_FIELD_5:MsgFldPositions.END_POS_FIELD_5])) mccurr = struct.unpack('f', bytearray( - message['message'][self.START_POS_MEAS_MC_CURR:self.END_POS_MEAS_MC_CURR])) + message['message'][MsgFldPositions.START_POS_FIELD_6:MsgFldPositions.END_POS_FIELD_6])) pwm = struct.unpack('f', bytearray( - message['message'][self.START_POS_PWM_DC:self.END_POS_PWM_DC])) + message['message'][MsgFldPositions.START_POS_FIELD_7:MsgFldPositions.END_POS_FIELD_7])) + self.target_dialysate_inlet_flow_rate = tgt[0] self.measured_dialysate_inlet_flow_rate = flow[0] self.measured_dialysate_inlet_pump_rotor_speed = rotor[0] self.measured_dialysate_inlet_pump_speed = speed[0] @@ -195,7 +169,7 @@ payload = rst + flo + mod message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_DIAL_IN_FLOW_SET_RATE_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_DIAL_IN_FLOW_SET_RATE_OVERRIDE, payload=payload) self.logger.debug("override dialysate flow set point") @@ -239,7 +213,7 @@ payload = rst + flo message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_DIAL_IN_FLOW_MEAS_RATE_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_DIAL_IN_FLOW_MEAS_RATE_OVERRIDE, payload=payload) self.logger.debug("override measured dialysate flow") @@ -279,7 +253,7 @@ payload = rst + spd message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_DIAL_IN_PUMP_MC_MEAS_SPEED_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_DIAL_IN_PUMP_MC_MEAS_SPEED_OVERRIDE, payload=payload) self.logger.debug("override measured dialysate inlet pump motor controller speed") @@ -318,7 +292,7 @@ payload = rst + cur message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_DIAL_IN_PUMP_MC_MEAS_CURRENT_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_DIAL_IN_PUMP_MC_MEAS_CURRENT_OVERRIDE, payload=payload) self.logger.debug("override measured dialysate inlet pump motor controller current") @@ -358,7 +332,7 @@ payload = rst + spd message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_DIAL_IN_PUMP_MEAS_SPEED_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_DIAL_IN_PUMP_MEAS_SPEED_OVERRIDE, payload=payload) self.logger.debug("override measured dialysate inlet pump speed") @@ -398,7 +372,7 @@ payload = rst + spd message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_DIAL_IN_PUMP_ROTOR_MEAS_SPEED_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_DIAL_IN_PUMP_ROTOR_MEAS_SPEED_OVERRIDE, payload=payload) self.logger.debug("override measured dialysate inlet pump rotor speed") @@ -438,7 +412,7 @@ payload = rst + mis message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_DIAL_IN_FLOW_PUBLISH_INTERVAL_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_DIAL_IN_FLOW_PUBLISH_INTERVAL_OVERRIDE, payload=payload) self.logger.debug("override dialysate inlet flow broadcast interval") @@ -471,7 +445,7 @@ payload = gan + off message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_DIAL_IN_FLOW_SET_CALIBRATION, + message_id=MsgIds.MSG_ID_HD_DIAL_IN_FLOW_SET_CALIBRATION, payload=payload) print("Setting dialysate flow calibration factors") Index: dialin/hd/dialysate_outlet_flow.py =================================================================== diff -u -r10bd08a612562df62c94e3d304f17ba24f4275a6 -r65277463eda63686c6132b6716aaa997b6df1861 --- dialin/hd/dialysate_outlet_flow.py (.../dialysate_outlet_flow.py) (revision 10bd08a612562df62c94e3d304f17ba24f4275a6) +++ dialin/hd/dialysate_outlet_flow.py (.../dialysate_outlet_flow.py) (revision 65277463eda63686c6132b6716aaa997b6df1861) @@ -20,6 +20,8 @@ from .constants import RESET, NO_RESET from .constants import PUMP_CONTROL_MODE_CLOSED_LOOP, PUMP_CONTROL_MODE_OPEN_LOOP from ..utils.base import _AbstractSubSystem, _publish +from ..common.msg_defs import MsgIds, MsgFldPositions + from logging import Logger @@ -28,35 +30,6 @@ Hemodialysis Device (HD) Dialin API sub-class for dialysate outlet pump related commands. """ - # DialysateFlow message IDs - MSG_ID_HD_DIAL_OUT_FLOW_PUBLISHED_DATA = 0x000B - MSG_ID_HD_LOAD_CELL_READINGS = 0x000C - MSG_ID_HD_DIAL_OUT_FLOW_SET_RATE_OVERRIDE = 0x8001 - MSG_ID_HD_DIAL_OUT_FLOW_PUBLISH_INTERVAL_OVERRIDE = 0x801E - MSG_ID_HD_DIAL_OUT_UF_REF_VOLUME_OVERRIDE = 0x801F - MSG_ID_HD_DIAL_OUT_UF_MEAS_VOLUME_OVERRIDE = 0x8020 - MSG_ID_HD_DIAL_OUT_PUMP_MC_MEAS_SPEED_OVERRIDE = 0x8021 - MSG_ID_HD_DIAL_OUT_PUMP_MC_MEAS_CURRENT_OVERRIDE = 0x8022 - MSG_ID_HD_DIAL_OUT_PUMP_MEAS_SPEED_OVERRIDE = 0x8023 - MSG_ID_HD_DIAL_OUT_PUMP_ROTOR_MEAS_SPEED_OVERRIDE = 0x8024 - MSG_ID_HD_DIAL_OUT_LOAD_CELL_WEIGHT_OVERRIDE = 0x8025 - - # bloodflow broadcast message field positions - START_POS_REF_VOL = DenaliMessage.PAYLOAD_START_INDEX - END_POS_REF_VOL = START_POS_REF_VOL + 4 - START_POS_MEAS_VOL = END_POS_REF_VOL - END_POS_MEAS_VOL = START_POS_MEAS_VOL + 4 - START_POS_MEAS_ROT_SPEED = END_POS_MEAS_VOL - END_POS_MEAS_ROT_SPEED = START_POS_MEAS_ROT_SPEED + 4 - START_POS_MEAS_SPEED = END_POS_MEAS_ROT_SPEED - END_POS_MEAS_SPEED = START_POS_MEAS_SPEED + 4 - START_POS_MEAS_MC_SPEED = END_POS_MEAS_SPEED - END_POS_MEAS_MC_SPEED = START_POS_MEAS_MC_SPEED + 4 - START_POS_MEAS_MC_CURR = END_POS_MEAS_MC_SPEED - END_POS_MEAS_MC_CURR = START_POS_MEAS_MC_CURR + 4 - START_POS_PWM_DC = END_POS_MEAS_MC_CURR - END_POS_PWM_DC = START_POS_PWM_DC + 4 - def __init__(self, can_interface, logger: Logger): """ HDDialysateFlow constructor @@ -67,7 +40,7 @@ if self.can_interface is not None: channel_id = DenaliChannels.hd_sync_broadcast_ch_id - msg_id = self.MSG_ID_HD_DIAL_OUT_FLOW_PUBLISHED_DATA + msg_id = MsgIds.MSG_ID_HD_DIAL_OUT_FLOW_PUBLISHED_DATA self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_dialysate_outlet_flow_sync) @@ -152,19 +125,19 @@ """ refvol = struct.unpack('f', bytearray( - message['message'][self.START_POS_REF_VOL:self.END_POS_REF_VOL])) + message['message'][MsgFldPositions.START_POS_FIELD_1:MsgFldPositions.END_POS_FIELD_1])) measvol = struct.unpack('f', bytearray( - message['message'][self.START_POS_MEAS_VOL:self.END_POS_MEAS_VOL])) + message['message'][MsgFldPositions.START_POS_FIELD_2:MsgFldPositions.END_POS_FIELD_2])) rotor = struct.unpack('f', bytearray( - message['message'][self.START_POS_MEAS_ROT_SPEED:self.END_POS_MEAS_ROT_SPEED])) + message['message'][MsgFldPositions.START_POS_FIELD_3:MsgFldPositions.END_POS_FIELD_3])) speed = struct.unpack('f', bytearray( - message['message'][self.START_POS_MEAS_SPEED:self.END_POS_MEAS_SPEED])) + message['message'][MsgFldPositions.START_POS_FIELD_4:MsgFldPositions.END_POS_FIELD_4])) mcspeed = struct.unpack('f', bytearray( - message['message'][self.START_POS_MEAS_MC_SPEED:self.END_POS_MEAS_MC_SPEED])) + message['message'][MsgFldPositions.START_POS_FIELD_5:MsgFldPositions.END_POS_FIELD_5])) mccurr = struct.unpack('f', bytearray( - message['message'][self.START_POS_MEAS_MC_CURR:self.END_POS_MEAS_MC_CURR])) + message['message'][MsgFldPositions.START_POS_FIELD_6:MsgFldPositions.END_POS_FIELD_6])) pwm = struct.unpack('f', bytearray( - message['message'][self.START_POS_PWM_DC:self.END_POS_PWM_DC])) + message['message'][MsgFldPositions.START_POS_FIELD_7:MsgFldPositions.END_POS_FIELD_7])) self.reference_dialysate_outlet_uf_volume = refvol[0] self.measured_dialysate_outlet_uf_volume = measvol[0] @@ -193,7 +166,7 @@ payload = rst + flo + mod message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_DIAL_OUT_FLOW_SET_RATE_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_DIAL_OUT_FLOW_SET_RATE_OVERRIDE, payload=payload) print("override dialysate outlet pump set point") @@ -237,7 +210,7 @@ payload = rst + vol message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_DIAL_OUT_UF_REF_VOLUME_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_DIAL_OUT_UF_REF_VOLUME_OVERRIDE, payload=payload) self.logger.debug("override UF reference volume with " + str(refvol) + "mL.") @@ -277,7 +250,7 @@ payload = rst + vol message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_DIAL_OUT_UF_MEAS_VOLUME_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_DIAL_OUT_UF_MEAS_VOLUME_OVERRIDE, payload=payload) self.logger.debug("override measured UF volume with " + str(measvol) + " mL.") @@ -317,7 +290,7 @@ payload = rst + spd message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.measured_dialysate_outlet_pump_mc_speed, + message_id=MsgIds.MSG_ID_DIAL_OUT_PUMP_MC_MEAS_SPEED_OVERRIDE, payload=payload) self.logger.debug("override measured dialysate outlet pump motor controller speed to " + str(spd) + " RPM.") @@ -356,7 +329,7 @@ payload = rst + cur message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_DIAL_OUT_PUMP_MC_MEAS_CURRENT_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_DIAL_OUT_PUMP_MC_MEAS_CURRENT_OVERRIDE, payload=payload) self.logger.debug("override measured dialysate outlet pump motor controller current") @@ -396,7 +369,7 @@ payload = rst + spd message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_DIAL_OUT_PUMP_MEAS_SPEED_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_DIAL_OUT_PUMP_MEAS_SPEED_OVERRIDE, payload=payload) self.logger.debug("override measured dialysate outlet pump speed to " + str(speed) + " RPM.") @@ -436,7 +409,7 @@ payload = rst + spd message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_DIAL_OUT_PUMP_ROTOR_MEAS_SPEED_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_DIAL_OUT_PUMP_ROTOR_MEAS_SPEED_OVERRIDE, payload=payload) self.logger.debug("override measured dialysate outlet pump rotor speed to " + str(speed) + " RPM.") @@ -476,7 +449,7 @@ payload = rst + mis message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_DIAL_OUT_FLOW_PUBLISH_INTERVAL_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_DIAL_OUT_FLOW_PUBLISH_INTERVAL_OVERRIDE, payload=payload) self.logger.debug("override dialysate outlet flow broadcast interval to " + str(ms) + " ms.") @@ -524,7 +497,7 @@ payload = rst + spd + sen message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_DIAL_OUT_LOAD_CELL_WEIGHT_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_DIAL_OUT_LOAD_CELL_WEIGHT_OVERRIDE, payload=payload) self.logger.debug("override measured load cell weight to " + str(weight) + " grams for load cell # " + str(sensor)) @@ -565,7 +538,7 @@ payload = r1pb + r1bb + r2pb + r2bb message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_LOAD_CELL_READINGS, + message_id=MsgIds.MSG_ID_LOAD_CELL_READINGS, payload=payload) self.logger.debug("measured load cell weights set.") Index: dialin/hd/hemodialysis_device.py =================================================================== diff -u -r10bd08a612562df62c94e3d304f17ba24f4275a6 -r65277463eda63686c6132b6716aaa997b6df1861 --- dialin/hd/hemodialysis_device.py (.../hemodialysis_device.py) (revision 10bd08a612562df62c94e3d304f17ba24f4275a6) +++ dialin/hd/hemodialysis_device.py (.../hemodialysis_device.py) (revision 65277463eda63686c6132b6716aaa997b6df1861) @@ -31,6 +31,7 @@ from ..utils.conversions import integer_to_bytearray from ..utils.base import _AbstractSubSystem, _publish, _LogManager from .constants import NO_RESET +from ..common.msg_defs import MsgIds, MsgFldPositions class HD(_AbstractSubSystem): @@ -39,18 +40,6 @@ the HD firmware. """ - # HD message IDs - MSG_ID_HD_OPERATION_MODE_BROADCAST = 0x0025 - MSG_ID_LOGIN_TO_HD = 0x8000 - MSG_ID_HD_SAFETY_SHUTDOWN_OVERRIDE = 0x8026 - MSG_ID_POWEROFF_NOTIFY = 0x0020 - - # broadcast message field positions - START_POS_HD_OP_MODE = DenaliMessage.PAYLOAD_START_INDEX - END_POS_HD_OP_MODE = START_POS_HD_OP_MODE + 4 - START_POS_HD_SUB_MODE = END_POS_HD_OP_MODE - END_POS_HD_SUB_MODE = START_POS_HD_SUB_MODE + 4 - # HD login password HD_LOGIN_PASSWORD = '123' @@ -93,7 +82,7 @@ # register handler for HD operation mode broadcast messages if self.can_interface is not None: channel_id = DenaliChannels.hd_sync_broadcast_ch_id - msg_id = self.MSG_ID_HD_OPERATION_MODE_BROADCAST + msg_id = MsgIds.MSG_ID_HD_OPERATION_MODE_BROADCAST self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_hd_op_mode_sync) @@ -132,9 +121,9 @@ @return: None """ mode = struct.unpack('i', bytearray( - message['message'][self.START_POS_HD_OP_MODE:self.END_POS_HD_OP_MODE])) + message['message'][MsgFldPositions.START_POS_FIELD_1:MsgFldPositions.END_POS_FIELD_1])) smode = struct.unpack('i', bytearray( - message['message'][self.START_POS_HD_SUB_MODE:self.END_POS_HD_SUB_MODE])) + message['message'][MsgFldPositions.START_POS_FIELD_2:MsgFldPositions.END_POS_FIELD_2])) self.hd_operation_mode = mode[0] self.hd_operation_sub_mode = smode[0] @@ -148,7 +137,7 @@ """ message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_LOGIN_TO_HD, + message_id=MsgIds.MSG_ID_LOGIN_TO_HD, payload=list(map(int, map(ord, self.HD_LOGIN_PASSWORD)))) self.logger.debug("Logging in...") @@ -189,7 +178,7 @@ payload = rst + saf message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_SAFETY_SHUTDOWN_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_SAFETY_SHUTDOWN_OVERRIDE, payload=payload) self.logger.debug("overriding HD safety shutdown") Index: dialin/hd/pressure_occlusion.py =================================================================== diff -u -r900f99812cee2e022fbbd46cd916b08a1397dda7 -r65277463eda63686c6132b6716aaa997b6df1861 --- dialin/hd/pressure_occlusion.py (.../pressure_occlusion.py) (revision 900f99812cee2e022fbbd46cd916b08a1397dda7) +++ dialin/hd/pressure_occlusion.py (.../pressure_occlusion.py) (revision 65277463eda63686c6132b6716aaa997b6df1861) @@ -19,6 +19,7 @@ from ..utils.conversions import integer_to_bytearray, float_to_bytearray from .constants import RESET, NO_RESET from ..utils.base import _AbstractSubSystem, _publish +from ..common.msg_defs import MsgIds, MsgFldPositions from logging import Logger @@ -27,27 +28,6 @@ Hemodialysis Delivery (HD) Dialin API sub-class for pressure related commands. """ - # Pressure/Occlusion message IDs - MSG_ID_HD_PRESSURE_OCCLUSION_DATA = 0x0009 - MSG_ID_HD_PRESSURE_ARTERIAL_OVERRIDE = 0x8017 - MSG_ID_HD_PRESSURE_VENOUS_OVERRIDE = 0x8018 - MSG_ID_HD_OCCLUSION_BLOOD_PUMP_OVERRIDE = 0x8019 - MSG_ID_HD_OCCLUSION_DIAL_IN_PUMP_OVERRIDE = 0x801A - MSG_ID_HD_OCCLUSION_DIAL_OUT_PUMP_OVERRIDE = 0x801B - MSG_ID_HD_PRES_OCCL_SEND_INTERVAL_OVERRIDE = 0x801C - - # Pressure/Occlusion broadcast message field positions - START_POS_ART_PRES = DenaliMessage.PAYLOAD_START_INDEX - END_POS_ART_PRES = START_POS_ART_PRES + 4 - START_POS_VEN_PRES = END_POS_ART_PRES - END_POS_VEN_PRES = START_POS_VEN_PRES + 4 - START_POS_BP_OCCL = END_POS_VEN_PRES - END_POS_BP_OCCL = START_POS_BP_OCCL + 4 - START_POS_DIP_OCCL = END_POS_BP_OCCL - END_POS_DIP_OCCL = START_POS_DIP_OCCL + 4 - START_POS_DOP_OCCL = END_POS_DIP_OCCL - END_POS_DOP_OCCL = START_POS_DOP_OCCL + 4 - def __init__(self, can_interface, logger: Logger): """ HDPressureOcclusion constructor @@ -59,7 +39,7 @@ if self.can_interface is not None: channel_id = DenaliChannels.hd_sync_broadcast_ch_id - msg_id = self.MSG_ID_HD_PRESSURE_OCCLUSION_DATA + msg_id = MsgIds.MSG_ID_HD_PRESSURE_OCCLUSION_DATA self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_pressure_occlusion_sync) @@ -125,15 +105,15 @@ """ art = struct.unpack('f', bytearray( - message['message'][self.START_POS_ART_PRES:self.END_POS_ART_PRES])) + message['message'][MsgFldPositions.START_POS_FIELD_1:MsgFldPositions.END_POS_FIELD_1])) ven = struct.unpack('f', bytearray( - message['message'][self.START_POS_VEN_PRES:self.END_POS_VEN_PRES])) + message['message'][MsgFldPositions.START_POS_FIELD_2:MsgFldPositions.END_POS_FIELD_2])) bp = struct.unpack('f', bytearray( - message['message'][self.START_POS_BP_OCCL:self.END_POS_BP_OCCL])) + message['message'][MsgFldPositions.START_POS_FIELD_3:MsgFldPositions.END_POS_FIELD_3])) dpi = struct.unpack('f', bytearray( - message['message'][self.START_POS_DIP_OCCL:self.END_POS_DIP_OCCL])) + message['message'][MsgFldPositions.START_POS_FIELD_4:MsgFldPositions.END_POS_FIELD_4])) dpo = struct.unpack('f', bytearray( - message['message'][self.START_POS_DOP_OCCL:self.END_POS_DOP_OCCL])) + message['message'][MsgFldPositions.START_POS_FIELD_5:MsgFldPositions.END_POS_FIELD_5])) self.arterial_pressure = art[0] self.venous_pressure = ven[0] @@ -157,7 +137,7 @@ payload = rst + prs message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_PRESSURE_ARTERIAL_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_PRESSURE_ARTERIAL_OVERRIDE, payload=payload) self.logger.debug("override measured arterial pressure") @@ -196,7 +176,7 @@ payload = rst + prs message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_PRESSURE_VENOUS_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_PRESSURE_VENOUS_OVERRIDE, payload=payload) self.logger.debug("override measured venous pressure") @@ -234,7 +214,7 @@ payload = rst + occ message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_OCCLUSION_BLOOD_PUMP_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_OCCLUSION_BLOOD_PUMP_OVERRIDE, payload=payload) self.logger.debug("override measured blood pump occlusion pressure") @@ -273,7 +253,7 @@ payload = rst + occ message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_OCCLUSION_DIAL_IN_PUMP_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_OCCLUSION_DIAL_IN_PUMP_OVERRIDE, payload=payload) self.logger.debug("override measured dialysate inlet pump occlusion pressure") @@ -312,7 +292,7 @@ payload = rst + occ message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_OCCLUSION_DIAL_OUT_PUMP_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_OCCLUSION_DIAL_OUT_PUMP_OVERRIDE, payload=payload) self.logger.debug("override measured dialysate outlet pump occlusion pressure") @@ -351,7 +331,7 @@ payload = rst + mis message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=self.MSG_ID_HD_PRES_OCCL_SEND_INTERVAL_OVERRIDE, + message_id=MsgIds.MSG_ID_HD_PRES_OCCL_SEND_INTERVAL_OVERRIDE, payload=payload) self.logger.debug("override pressure/occlusion broadcast interval") @@ -372,23 +352,3 @@ else: self.logger.debug("Timeout!!!!") return False - - # TEST CODE *************************************** - def test_can_message(self, seq): - zero = integer_to_bytearray(0) - seq1 = integer_to_bytearray(seq) - seq2 = integer_to_bytearray(seq+1) - seq3 = integer_to_bytearray(seq+2) - seq4 = integer_to_bytearray(seq+3) - seq5 = integer_to_bytearray(seq+4) - - payload = seq1 + zero + seq2 + zero + seq3 + zero + seq4 + zero + seq5 - - message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, - message_id=6, - payload=payload) - - received_message = self.can_interface.send(message, 0) - - return True - Index: dialin/hd/treatment.py =================================================================== diff -u -r396fbc8690270d160c2b223a0a3802d913c1be95 -r65277463eda63686c6132b6716aaa997b6df1861 --- dialin/hd/treatment.py (.../treatment.py) (revision 396fbc8690270d160c2b223a0a3802d913c1be95) +++ dialin/hd/treatment.py (.../treatment.py) (revision 65277463eda63686c6132b6716aaa997b6df1861) @@ -18,7 +18,7 @@ DenaliChannels) from ..utils.base import _AbstractSubSystem, _publish from ..utils.conversions import integer_to_bytearray, float_to_bytearray -from ..common.msg_defs import MsgIds +from ..common.msg_defs import MsgIds, MsgFldPositions from logging import Logger @@ -76,40 +76,6 @@ SALINE_BOLUS_STATE_IN_PROGRESS = 2 # A saline bolus delivery is in progress SALINE_BOLUS_STATE_MAX_DELIVERED = 3 # Maximum saline bolus volume reached - # treatment time broadcast message field positions - START_POS_TIME_PRES = DenaliMessage.PAYLOAD_START_INDEX - END_POS_TIME_PRES = START_POS_TIME_PRES + 4 - START_POS_TIME_ELAPSED = END_POS_TIME_PRES - END_POS_TIME_ELAPSED = START_POS_TIME_ELAPSED + 4 - START_POS_TIME_REMAINING = END_POS_TIME_ELAPSED - END_POS_TIME_REMAINING = START_POS_TIME_REMAINING + 4 - - # treatment state broadcast message field positions - START_POS_TREATMENT_STATE = DenaliMessage.PAYLOAD_START_INDEX - END_POS_TREATMENT_STATE = START_POS_TREATMENT_STATE + 4 - START_POS_UF_STATE = END_POS_TREATMENT_STATE - END_POS_UF_STATE = START_POS_UF_STATE + 4 - START_POS_SALINE_BOLUS_IN_PROGRESS = END_POS_UF_STATE - END_POS_SALINE_BOLUS_IN_PROGRESS = START_POS_SALINE_BOLUS_IN_PROGRESS + 4 - - # Generic response msg field byte positions - START_POS_FIELD_1 = DenaliMessage.PAYLOAD_START_INDEX - 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 - def __init__(self, can_interface, logger: Logger): """ HDTreatment constructor @@ -229,11 +195,11 @@ """ tot = struct.unpack('i', bytearray( - message['message'][self.START_POS_TIME_PRES:self.END_POS_TIME_PRES])) + message['message'][MsgFldPositions.START_POS_FIELD_1:MsgFldPositions.END_POS_FIELD_1])) ela = struct.unpack('i', bytearray( - message['message'][self.START_POS_TIME_ELAPSED:self.END_POS_TIME_ELAPSED])) + message['message'][MsgFldPositions.START_POS_FIELD_2:MsgFldPositions.END_POS_FIELD_2])) rem = struct.unpack('i', bytearray( - message['message'][self.START_POS_TIME_REMAINING:self.END_POS_TIME_REMAINING])) + message['message'][MsgFldPositions.START_POS_FIELD_3:MsgFldPositions.END_POS_FIELD_3])) self.treatment_time_prescribed = tot[0] self.treatment_time_elapsed = ela[0] @@ -254,11 +220,11 @@ """ tst = struct.unpack('i', bytearray( - message['message'][self.START_POS_TREATMENT_STATE:self.END_POS_TREATMENT_STATE])) + message['message'][MsgFldPositions.START_POS_FIELD_1:MsgFldPositions.END_POS_FIELD_1])) ufs = struct.unpack('i', bytearray( - message['message'][self.START_POS_UF_STATE:self.END_POS_UF_STATE])) + message['message'][MsgFldPositions.START_POS_FIELD_2:MsgFldPositions.END_POS_FIELD_2])) bol = struct.unpack('i', bytearray( - message['message'][self.START_POS_SALINE_BOLUS_IN_PROGRESS:self.END_POS_SALINE_BOLUS_IN_PROGRESS])) + message['message'][MsgFldPositions.START_POS_FIELD_3:MsgFldPositions.END_POS_FIELD_3])) self.treatment_state = tst[0] self.treatment_uf_state = ufs[0] @@ -279,11 +245,11 @@ """ mxm = struct.unpack('i', bytearray( - message['message'][self.START_POS_FIELD_1:self.END_POS_FIELD_1])) + message['message'][MsgFldPositions.START_POS_FIELD_1:MsgFldPositions.END_POS_FIELD_1])) cum = struct.unpack('f', bytearray( - message['message'][self.START_POS_FIELD_2:self.END_POS_FIELD_2])) + message['message'][MsgFldPositions.START_POS_FIELD_2:MsgFldPositions.END_POS_FIELD_2])) bol = struct.unpack('f', bytearray( - message['message'][self.START_POS_FIELD_3:self.END_POS_FIELD_3])) + message['message'][MsgFldPositions.START_POS_FIELD_3:MsgFldPositions.END_POS_FIELD_3])) self.saline_bolus_max_vol = mxm[0] self.saline_bolus_cum_vol = cum[0] Index: dialin/hd/ui_proxy.py =================================================================== diff -u -r396fbc8690270d160c2b223a0a3802d913c1be95 -r65277463eda63686c6132b6716aaa997b6df1861 --- dialin/hd/ui_proxy.py (.../ui_proxy.py) (revision 396fbc8690270d160c2b223a0a3802d913c1be95) +++ dialin/hd/ui_proxy.py (.../ui_proxy.py) (revision 65277463eda63686c6132b6716aaa997b6df1861) @@ -18,7 +18,7 @@ from ..utils.conversions import integer_to_bytearray, float_to_bytearray import struct from ..utils.base import _AbstractSubSystem, _publish -from ..common.msg_defs import MsgIds +from ..common.msg_defs import MsgIds, RequestRejectReasons, MsgFldPositions from collections import OrderedDict from logging import Logger @@ -47,30 +47,6 @@ START_TREATMENT_CMD_CANCEL_TREATMENT_WORKFLOW = 1 START_TREATMENT_CMD_START_TREATMENT = 2 - 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_ARTERIAL_PRESSURE_LOW_VS_HIGH = 19 - REQUEST_REJECT_REASON_VENOUS_PRESSURE_LOW_VS_HIGH = 20 - REQUEST_REJECT_REASON_SALINE_MAX_VOLUME_REACHED = 21 - REQUEST_REJECT_REASON_SALINE_BOLUS_NOT_IN_PROGRESS = 22 - # HD version message field positions START_POS_MAJOR = DenaliMessage.PAYLOAD_START_INDEX END_POS_MAJOR = START_POS_MAJOR + 1 @@ -91,88 +67,6 @@ START_POS_FPGA_LAB = END_POS_FPGA_MINOR END_POS_FPGA_LAB = START_POS_FPGA_LAB + 1 - # HD update on valid treatment parameter ranges message field positions - START_POS_MIN_TREAT_TIME = DenaliMessage.PAYLOAD_START_INDEX - END_POS_MIN_TREAT_TIME = START_POS_MIN_TREAT_TIME + 4 - START_POS_MAX_TREAT_TIME = END_POS_MIN_TREAT_TIME - END_POS_MAX_TREAT_TIME = START_POS_MAX_TREAT_TIME + 4 - START_POS_MIN_UF_VOL = END_POS_MAX_TREAT_TIME - END_POS_MIN_UF_VOL = START_POS_MIN_UF_VOL + 4 - START_POS_MAX_UF_VOL = END_POS_MIN_UF_VOL - END_POS_MAX_UF_VOL = START_POS_MAX_UF_VOL + 4 - START_POS_MIN_DIAL_RATE = END_POS_MAX_UF_VOL - END_POS_MIN_DIAL_RATE = START_POS_MIN_DIAL_RATE + 4 - START_POS_MAX_DIAL_RATE = END_POS_MIN_DIAL_RATE - END_POS_MAX_DIAL_RATE = START_POS_MAX_DIAL_RATE + 4 - - # HD response to treatment duration change request message field positions - START_POS_TIME_CHG_RSP_ACCEPTED = DenaliMessage.PAYLOAD_START_INDEX - END_POS_TIME_CHG_RSP_ACCEPTED = START_POS_TIME_CHG_RSP_ACCEPTED + 4 - START_POS_TIME_CHG_RSP_REASON = END_POS_TIME_CHG_RSP_ACCEPTED - END_POS_TIME_CHG_RSP_REASON = START_POS_TIME_CHG_RSP_REASON + 4 - START_POS_TIME_CHG_RSP_TIME = END_POS_TIME_CHG_RSP_REASON - END_POS_TIME_CHG_RSP_TIME = START_POS_TIME_CHG_RSP_TIME + 4 - START_POS_TIME_CHG_RSP_UF_VOL = END_POS_TIME_CHG_RSP_TIME - END_POS_TIME_CHG_RSP_UF_VOL = START_POS_TIME_CHG_RSP_UF_VOL + 4 - - # HD response to UF volume change request message field positions - START_POS_UF_CHG_RSP_RESP = DenaliMessage.PAYLOAD_START_INDEX - END_POS_UF_CHG_RSP_RESP = START_POS_UF_CHG_RSP_RESP + 4 - START_POS_UF_CHG_RSP_REJECT_REASON = END_POS_UF_CHG_RSP_RESP - END_POS_UF_CHG_RSP_REJECT_REASON = START_POS_UF_CHG_RSP_REJECT_REASON + 4 - START_POS_UF_CHG_RSP_VOL = END_POS_UF_CHG_RSP_RESP - END_POS_UF_CHG_RSP_VOL = START_POS_UF_CHG_RSP_VOL + 4 - START_POS_UF_CHG_RSP_TIME = END_POS_UF_CHG_RSP_VOL - END_POS_UF_CHG_RSP_TIME = START_POS_UF_CHG_RSP_TIME + 4 - START_POS_UF_CHG_RSP_TIME_DIFF = END_POS_UF_CHG_RSP_TIME - END_POS_UF_CHG_RSP_TIME_DIFF = START_POS_UF_CHG_RSP_TIME_DIFF + 4 - START_POS_UF_CHG_RSP_RATE = END_POS_UF_CHG_RSP_TIME_DIFF - END_POS_UF_CHG_RSP_RATE = START_POS_UF_CHG_RSP_RATE + 4 - START_POS_UF_CHG_RSP_RATE_DIFF = END_POS_UF_CHG_RSP_RATE - END_POS_UF_CHG_RSP_RATE_DIFF = START_POS_UF_CHG_RSP_RATE_DIFF + 4 - START_POS_UF_CHG_RSP_OLD_RATE = END_POS_UF_CHG_RSP_RATE_DIFF - END_POS_UF_CHG_RSP_OLD_RATE = START_POS_UF_CHG_RSP_OLD_RATE + 4 - - # HD response to UF volume change confirmation message field positions - START_POS_UF_CNF_RSP_RESP = DenaliMessage.PAYLOAD_START_INDEX - END_POS_UF_CNF_RSP_RESP = START_POS_UF_CNF_RSP_RESP + 4 - START_POS_UF_CNF_RSP_REJECT_REASON = END_POS_UF_CNF_RSP_RESP - END_POS_UF_CNF_RSP_REJECT_REASON = START_POS_UF_CNF_RSP_REJECT_REASON + 4 - START_POS_UF_CNF_RSP_VOL = END_POS_UF_CNF_RSP_RESP - END_POS_UF_CNF_RSP_VOL = START_POS_UF_CNF_RSP_VOL + 4 - START_POS_UF_CNF_RSP_TIME = END_POS_UF_CNF_RSP_VOL - END_POS_UF_CNF_RSP_TIME = START_POS_UF_CNF_RSP_TIME + 4 - START_POS_UF_CNF_RSP_RATE = END_POS_UF_CNF_RSP_TIME - END_POS_UF_CNF_RSP_RATE = START_POS_UF_CNF_RSP_RATE + 4 - - # HD response to blood/dialysate flow change request message field positions - START_POS_BLD_DIAL_CHG_RSP_ACCEPTED = DenaliMessage.PAYLOAD_START_INDEX - END_POS_BLD_DIAL_CHG_RSP_ACCEPTED = START_POS_BLD_DIAL_CHG_RSP_ACCEPTED + 4 - START_POS_BLD_DIAL_CHG_RSP_REASON = END_POS_BLD_DIAL_CHG_RSP_ACCEPTED - END_POS_BLD_DIAL_CHG_RSP_REASON = START_POS_BLD_DIAL_CHG_RSP_REASON + 4 - START_POS_BLD_DIAL_CHG_RSP_BLD_RATE = END_POS_BLD_DIAL_CHG_RSP_REASON - END_POS_BLD_DIAL_CHG_RSP_BLD_RATE = START_POS_BLD_DIAL_CHG_RSP_BLD_RATE + 4 - START_POS_BLD_DIAL_CHG_RSP_DIAL_RATE = END_POS_BLD_DIAL_CHG_RSP_BLD_RATE - END_POS_BLD_DIAL_CHG_RSP_DIAL_RATE = START_POS_BLD_DIAL_CHG_RSP_DIAL_RATE + 4 - - # Generic response msg field byte positions - START_POS_FIELD_1 = DenaliMessage.PAYLOAD_START_INDEX - 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 - def __init__(self, can_interface, logger: Logger): """ @@ -740,42 +634,42 @@ @return: none """ - p = DenaliMessage.PAYLOAD_START_INDEX - val = struct.unpack('i', bytearray(message['message'][p:p+4])) - p += 4 - bld = struct.unpack('i', bytearray(message['message'][p:p+4])) - p += 4 - dia = struct.unpack('i', bytearray(message['message'][p:p+4])) - p += 4 - dur = struct.unpack('i', bytearray(message['message'][p:p+4])) - p += 4 - sto = struct.unpack('i', bytearray(message['message'][p:p+4])) - p += 4 - sal = struct.unpack('i', bytearray(message['message'][p:p+4])) - p += 4 - acd = struct.unpack('i', bytearray(message['message'][p:p+4])) - p += 4 - bic = struct.unpack('i', bytearray(message['message'][p:p+4])) - p += 4 - dlz = struct.unpack('i', bytearray(message['message'][p:p+4])) - p += 4 - bpi = struct.unpack('i', bytearray(message['message'][p:p+4])) - p += 4 - rbf = struct.unpack('i', bytearray(message['message'][p:p+4])) - p += 4 - apl = struct.unpack('i', bytearray(message['message'][p:p+4])) - p += 4 - aph = struct.unpack('i', bytearray(message['message'][p:p+4])) - p += 4 - vpl = struct.unpack('i', bytearray(message['message'][p:p+4])) - p += 4 - vph = struct.unpack('i', bytearray(message['message'][p:p+4])) - p += 4 - hdr = struct.unpack('i', bytearray(message['message'][p:p+4])) - p += 4 - hbv = struct.unpack('i', bytearray(message['message'][p:p+4])) - p += 4 - tmp = struct.unpack('i', bytearray(message['message'][p:p+4])) + val = struct.unpack('i', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_1:MsgFldPositions.END_POS_FIELD_1])) + bld = struct.unpack('i', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_2:MsgFldPositions.END_POS_FIELD_2])) + dia = struct.unpack('i', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_3:MsgFldPositions.END_POS_FIELD_3])) + dur = struct.unpack('i', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_4:MsgFldPositions.END_POS_FIELD_4])) + sto = struct.unpack('i', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_5:MsgFldPositions.END_POS_FIELD_5])) + sal = struct.unpack('i', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_6:MsgFldPositions.END_POS_FIELD_6])) + acd = struct.unpack('i', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_7:MsgFldPositions.END_POS_FIELD_7])) + bic = struct.unpack('i', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_8:MsgFldPositions.END_POS_FIELD_8])) + dlz = struct.unpack('i', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_9:MsgFldPositions.END_POS_FIELD_9])) + bpi = struct.unpack('i', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_10:MsgFldPositions.END_POS_FIELD_10])) + rbf = struct.unpack('i', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_11:MsgFldPositions.END_POS_FIELD_11])) + apl = struct.unpack('i', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_12:MsgFldPositions.END_POS_FIELD_12])) + aph = struct.unpack('i', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_13:MsgFldPositions.END_POS_FIELD_13])) + vpl = struct.unpack('i', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_14:MsgFldPositions.END_POS_FIELD_14])) + vph = struct.unpack('i', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_15:MsgFldPositions.END_POS_FIELD_15])) + hdr = struct.unpack('i', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_16:MsgFldPositions.END_POS_FIELD_16])) + hbv = struct.unpack('i', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_17:MsgFldPositions.END_POS_FIELD_17])) + tmp = struct.unpack('i', bytearray( + message['message'][MsgFldPositions.START_POS_FIELD_18:MsgFldPositions.END_POS_FIELD_18])) if val[0] == 1: self.treatment_parameters_valid = True @@ -822,17 +716,17 @@ @return: none """ mintime = struct.unpack('i', bytearray( - message['message'][self.START_POS_MIN_TREAT_TIME:self.END_POS_MIN_TREAT_TIME])) + message['message'][MsgFldPositions.START_POS_FIELD_1:MsgFldPositions.END_POS_FIELD_1])) maxtime = struct.unpack('i', bytearray( - message['message'][self.START_POS_MAX_TREAT_TIME:self.END_POS_MAX_TREAT_TIME])) + message['message'][MsgFldPositions.START_POS_FIELD_2:MsgFldPositions.END_POS_FIELD_2])) minufvol = struct.unpack('f', bytearray( - message['message'][self.START_POS_MIN_UF_VOL:self.END_POS_MIN_UF_VOL])) + message['message'][MsgFldPositions.START_POS_FIELD_3:MsgFldPositions.END_POS_FIELD_3])) maxufvol = struct.unpack('f', bytearray( - message['message'][self.START_POS_MAX_UF_VOL:self.END_POS_MAX_UF_VOL])) + message['message'][MsgFldPositions.START_POS_FIELD_4:MsgFldPositions.END_POS_FIELD_4])) mindialrt = struct.unpack('i', bytearray( - message['message'][self.START_POS_MIN_DIAL_RATE:self.END_POS_MIN_DIAL_RATE])) + message['message'][MsgFldPositions.START_POS_FIELD_5:MsgFldPositions.END_POS_FIELD_5])) maxdialrt = struct.unpack('i', bytearray( - message['message'][self.START_POS_MAX_DIAL_RATE:self.END_POS_MAX_DIAL_RATE])) + message['message'][MsgFldPositions.START_POS_FIELD_6:MsgFldPositions.END_POS_FIELD_6])) self.min_treatment_duration_min = mintime[0] self.max_treatment_duration_min = maxtime[0] @@ -858,11 +752,11 @@ @return: none """ rsp = struct.unpack('i', bytearray( - message['message'][self.START_POS_FIELD_1:self.END_POS_FIELD_1])) + message['message'][MsgFldPositions.START_POS_FIELD_1:MsgFldPositions.END_POS_FIELD_1])) rea = struct.unpack('i', bytearray( - message['message'][self.START_POS_FIELD_2:self.END_POS_FIELD_2])) + message['message'][MsgFldPositions.START_POS_FIELD_2:MsgFldPositions.END_POS_FIELD_2])) vol = struct.unpack('i', bytearray( - message['message'][self.START_POS_FIELD_3:self.END_POS_FIELD_3])) + message['message'][MsgFldPositions.START_POS_FIELD_3:MsgFldPositions.END_POS_FIELD_3])) if rsp[0] == 1: self.saline_bolus_request_succeeded = True @@ -890,13 +784,13 @@ @return: none """ rsp = struct.unpack('i', bytearray( - message['message'][self.START_POS_TIME_CHG_RSP_ACCEPTED:self.END_POS_TIME_CHG_RSP_ACCEPTED])) + message['message'][MsgFldPositions.START_POS_FIELD_1:MsgFldPositions.END_POS_FIELD_1])) rea = struct.unpack('i', bytearray( - message['message'][self.START_POS_TIME_CHG_RSP_REASON:self.END_POS_TIME_CHG_RSP_REASON])) + message['message'][MsgFldPositions.START_POS_FIELD_2:MsgFldPositions.END_POS_FIELD_2])) tim = struct.unpack('i', bytearray( - message['message'][self.START_POS_TIME_CHG_RSP_TIME:self.END_POS_TIME_CHG_RSP_TIME])) + message['message'][MsgFldPositions.START_POS_FIELD_3:MsgFldPositions.END_POS_FIELD_3])) vol = struct.unpack('f', bytearray( - message['message'][self.START_POS_TIME_CHG_RSP_UF_VOL:self.END_POS_TIME_CHG_RSP_UF_VOL])) + message['message'][MsgFldPositions.START_POS_FIELD_4:MsgFldPositions.END_POS_FIELD_4])) self.duration_change_succeeded = rsp[0] self.duration_change_reject_reason = rea[0] @@ -922,13 +816,13 @@ @return: none """ rsp = struct.unpack('i', bytearray( - message['message'][self.START_POS_BLD_DIAL_CHG_RSP_ACCEPTED:self.END_POS_BLD_DIAL_CHG_RSP_ACCEPTED])) + message['message'][MsgFldPositions.START_POS_FIELD_1:MsgFldPositions.END_POS_FIELD_1])) rea = struct.unpack('i', bytearray( - message['message'][self.START_POS_BLD_DIAL_CHG_RSP_REASON:self.END_POS_BLD_DIAL_CHG_RSP_REASON])) + message['message'][MsgFldPositions.START_POS_FIELD_2:MsgFldPositions.END_POS_FIELD_2])) bld = struct.unpack('i', bytearray( - message['message'][self.START_POS_BLD_DIAL_CHG_RSP_BLD_RATE:self.END_POS_BLD_DIAL_CHG_RSP_BLD_RATE])) + message['message'][MsgFldPositions.START_POS_FIELD_3:MsgFldPositions.END_POS_FIELD_3])) dil = struct.unpack('i', bytearray( - message['message'][self.START_POS_BLD_DIAL_CHG_RSP_DIAL_RATE:self.END_POS_BLD_DIAL_CHG_RSP_DIAL_RATE])) + message['message'][MsgFldPositions.START_POS_FIELD_4:MsgFldPositions.END_POS_FIELD_4])) if rsp[0] == self.RESPONSE_REJECTED: resp = False @@ -964,21 +858,21 @@ @return: none """ rsp = struct.unpack('i', bytearray( - message['message'][self.START_POS_UF_CHG_RSP_RESP:self.END_POS_UF_CHG_RSP_RESP])) + message['message'][MsgFldPositions.START_POS_FIELD_1:MsgFldPositions.END_POS_FIELD_1])) rea = struct.unpack('i', bytearray( - message['message'][self.START_POS_UF_CHG_RSP_REJECT_REASON:self.END_POS_UF_CHG_RSP_REJECT_REASON])) + message['message'][MsgFldPositions.START_POS_FIELD_2:MsgFldPositions.END_POS_FIELD_2])) vol = struct.unpack('f', bytearray( - message['message'][self.START_POS_UF_CHG_RSP_VOL:self.END_POS_UF_CHG_RSP_VOL])) + message['message'][MsgFldPositions.START_POS_FIELD_3:MsgFldPositions.END_POS_FIELD_3])) tim = struct.unpack('i', bytearray( - message['message'][self.START_POS_UF_CHG_RSP_TIME:self.END_POS_UF_CHG_RSP_TIME])) + message['message'][MsgFldPositions.START_POS_FIELD_4:MsgFldPositions.END_POS_FIELD_4])) tmd = struct.unpack('i', bytearray( - message['message'][self.START_POS_UF_CHG_RSP_TIME_DIFF:self.END_POS_UF_CHG_RSP_TIME_DIFF])) + message['message'][MsgFldPositions.START_POS_FIELD_5:MsgFldPositions.END_POS_FIELD_5])) rat = struct.unpack('f', bytearray( - message['message'][self.START_POS_UF_CHG_RSP_RATE:self.END_POS_UF_CHG_RSP_RATE])) + message['message'][MsgFldPositions.START_POS_FIELD_6:MsgFldPositions.END_POS_FIELD_6])) rtd = struct.unpack('f', bytearray( - message['message'][self.START_POS_UF_CHG_RSP_RATE_DIFF:self.END_POS_UF_CHG_RSP_RATE_DIFF])) + message['message'][MsgFldPositions.START_POS_FIELD_7:MsgFldPositions.END_POS_FIELD_7])) ort = struct.unpack('f', bytearray( - message['message'][self.START_POS_UF_CHG_RSP_OLD_RATE:self.END_POS_UF_CHG_RSP_OLD_RATE])) + message['message'][MsgFldPositions.START_POS_FIELD_8:MsgFldPositions.END_POS_FIELD_8])) if rsp[0] == self.RESPONSE_REJECTED: resp = False @@ -1015,15 +909,15 @@ @return: None """ rsp = struct.unpack('i', bytearray( - message['message'][self.START_POS_UF_CNF_RSP_RESP:self.END_POS_UF_CNF_RSP_RESP])) + message['message'][MsgFldPositions.START_POS_FIELD_1:MsgFldPositions.END_POS_FIELD_1])) rea = struct.unpack('i', bytearray( - message['message'][self.START_POS_UF_CNF_RSP_REJECT_REASON:self.END_POS_UF_CNF_RSP_REJECT_REASON])) + message['message'][MsgFldPositions.START_POS_FIELD_2:MsgFldPositions.END_POS_FIELD_2])) vol = struct.unpack('f', bytearray( - message['message'][self.START_POS_UF_CNF_RSP_VOL:self.END_POS_UF_CNF_RSP_VOL])) + message['message'][MsgFldPositions.START_POS_FIELD_3:MsgFldPositions.END_POS_FIELD_3])) tim = struct.unpack('i', bytearray( - message['message'][self.START_POS_UF_CNF_RSP_TIME:self.END_POS_UF_CNF_RSP_TIME])) + message['message'][MsgFldPositions.START_POS_FIELD_4:MsgFldPositions.END_POS_FIELD_4])) rat = struct.unpack('f', bytearray( - message['message'][self.START_POS_UF_CNF_RSP_RATE:self.END_POS_UF_CNF_RSP_RATE])) + message['message'][MsgFldPositions.START_POS_FIELD_5:MsgFldPositions.END_POS_FIELD_5])) if rsp[0] == self.RESPONSE_REJECTED: resp = False Index: tests/test_saline_bolus.py =================================================================== diff -u -r396fbc8690270d160c2b223a0a3802d913c1be95 -r65277463eda63686c6132b6716aaa997b6df1861 --- tests/test_saline_bolus.py (.../test_saline_bolus.py) (revision 396fbc8690270d160c2b223a0a3802d913c1be95) +++ tests/test_saline_bolus.py (.../test_saline_bolus.py) (revision 65277463eda63686c6132b6716aaa997b6df1861) @@ -30,7 +30,7 @@ # exit(1) # sleep(1) - for x in range(100): + for x in range(30): sleep(1) hdmod = hd.hd_operation_mode hdsub = hd.hd_operation_sub_mode @@ -39,11 +39,11 @@ mxvol = hd.treatment.get_saline_bolus_max_volume() cmvol = hd.treatment.get_saline_bolus_cumulative_volume_delivered() bovol = hd.treatment.get_saline_bolus_volume_delivered() - print(hdmod, hdsub, ufmod, sbmod, mxvol, cmvol, bovol) + print(x, hdmod, hdsub, ufmod, sbmod, mxvol, cmvol, bovol) hd.ui.cmd_ui_request_saline_bolus(True) - for x in range(100): + for x in range(60): sleep(1) hdmod = hd.hd_operation_mode hdsub = hd.hd_operation_sub_mode @@ -52,4 +52,6 @@ mxvol = hd.treatment.get_saline_bolus_max_volume() cmvol = hd.treatment.get_saline_bolus_cumulative_volume_delivered() bovol = hd.treatment.get_saline_bolus_volume_delivered() - print(hdmod, hdsub, ufmod, sbmod, mxvol, cmvol, bovol) + print(x, hdmod, hdsub, ufmod, sbmod, mxvol, cmvol, bovol) + + exit(1) Index: tools/start_env.sh =================================================================== diff -u --- tools/start_env.sh (revision 0) +++ tools/start_env.sh (revision 65277463eda63686c6132b6716aaa997b6df1861) @@ -0,0 +1,2 @@ +source ../venv/bin/activate +