Index: dialin/common/hd_defs.py =================================================================== diff -u -r1dcdd74a0515845ccde2be8271d3576b9ca80033 -r211f04b9e9ff6558bc34f99ee805e18ad9c30579 --- dialin/common/hd_defs.py (.../hd_defs.py) (revision 1dcdd74a0515845ccde2be8271d3576b9ca80033) +++ dialin/common/hd_defs.py (.../hd_defs.py) (revision 211f04b9e9ff6558bc34f99ee805e18ad9c30579) @@ -17,17 +17,16 @@ from ..utils.base import DialinEnum @unique -class HDDefs(DialinEnum): - MODE_FAUL = 0 # Fault mode - MODE_SERV = 1 # Service mode - MODE_INIT = 2 # Initialization & POST mode - MODE_STAN = 3 # Standby mode - MODE_TPAR = 4 # Treatment Parameters mode - MODE_PRET = 5 # Pre-Treatment mode - MODE_TREA = 6 # Treatment mode - MODE_POST = 7 # Post-Treatment mode - MODE_NLEG = 8 # Not legal - an illegale mode transition occurred - NUM_OF_MODES = 9 # Number of HD operation modes +class HDOpModes(DialinEnum): + MODE_FAUL = 0 # Fault mode + MODE_SERV = 1 # Service mode + MODE_INIT = 2 # Initialization & POST mode + MODE_STAN = 3 # Standby mode + MODE_TPAR = 4 # Treatment Parameters mode + MODE_PRET = 5 # Pre-Treatment mode + MODE_TREA = 6 # Treatment mode + MODE_POST = 7 # Post-Treatment mode + NUM_OF_MODES = 8 # Number of HD operation modes @unique class PreTreatmentSubModes(DialinEnum): @@ -103,3 +102,36 @@ class PreTreatmentRecircStates(DialinEnum): PRE_TREATMENT_RECIRC_STATE = 0 PRE_TREATMENT_RECIRC_STOPPED_STATE = 1 + +# Heparin states +@unique +class HeparinStates(DialinEnum): + HEPARIN_STATE_OFF = 0 # Heparin treatment parameters set to zero or not yet set + HEPARIN_STATE_STOPPED = 1 # Heparin delivery is stopped because treatment paused or not yet started + HEPARIN_STATE_PAUSED = 2 # Heparin delivery is paused by user + HEPARIN_STATE_INITIAL_BOLUS = 3 # Heparin bolus is currently being delivered + HEPARIN_STATE_DISPENSING = 4 # Heparin continuous delivery is in progress + HEPARIN_STATE_COMPLETED = 5 # Heparin delivery is completed + HEPARIN_STATE_EMPTY = 6 # Heparin syringe is empty + +# Syringe pump states +@unique +class SyringePumpStates(DialinEnum): + SYRINGE_PUMP_INIT_STATE = 0 # Syringe pump initialize state + SYRINGE_PUMP_OFF_STATE = 1 # Syringe pump off state + SYRINGE_PUMP_RETRACT_STATE = 2 # Syringe pump retract state + SYRINGE_PUMP_SEEK_STATE = 3 # Syringe pump seek state + SYRINGE_PUMP_PRIME_STATE = 4 # Syringe pump prime state + SYRINGE_PUMP_HEP_BOLUS_STATE = 5 # Syringe pump bolus state + SYRINGE_PUMP_HEP_CONTINUOUS_STATE = 6 # Syringe pump continuous state + SYRINGE_PUMP_CONFIG_FORCE_SENSOR_STATE = 7 # Syringe pump configure force sensor state + +# Syringe pump operations +@unique +class SyringePumpOperations(DialinEnum): + SYRINGE_PUMP_OP_STOP = 0 # Stop syringe pump + SYRINGE_PUMP_OP_RETRACT = 1 # Retract syringe pump + SYRINGE_PUMP_OP_SEEK = 2 # Seek plunger + SYRINGE_PUMP_OP_PRIME = 3 # Prime Heparin line + SYRINGE_PUMP_OP_BOLUS = 4 # Deliver Heparin bolus of set volume over 5 minutes + SYRINGE_PUMP_OP_CONTINUOUS = 5 # Continuous dispense of Heparin at set rate Index: dialin/common/msg_defs.py =================================================================== diff -u -r5b8814a19b1691f263de795014f30cda2e8d72eb -r211f04b9e9ff6558bc34f99ee805e18ad9c30579 --- dialin/common/msg_defs.py (.../msg_defs.py) (revision 5b8814a19b1691f263de795014f30cda2e8d72eb) +++ dialin/common/msg_defs.py (.../msg_defs.py) (revision 211f04b9e9ff6558bc34f99ee805e18ad9c30579) @@ -78,20 +78,21 @@ MSG_ID_HD_START_TREATMENT_RESPONSE = 0x39 # HD response to user request to initiate a treatment MSG_ID_HD_VALVES_DATA = 0x3A # HD broadcast of valves data MSG_ID_UI_USER_CONFIRM_TREATMENT_PARAMS = 0x3B # UI user confirmation of treatment parameters - MSG_ID___AVAILABLE_1 = 0x3C # NOT used - available - MSG_ID___AVAILABLE_2 = 0x3D # NOT used - available + MSG_ID_UI_START_PRIME_REQUEST = 0x3C # UI user has requested to start priming + MSG_ID_HD_START_PRIME_RESPONSE = 0x3D # HD response to user request to start priming MSG_ID_HD_AIR_TRAP_DATA = 0x003E # HD broadcast of air trap data MSG_ID_ALARM_CONDITION_CLEARED = 0x3F # Broadcast that the alarm condition has been cleared MSG_ID_UI_ALARM_USER_ACTION = 0x40 # UI user has requested an alarm action MSG_ID_USER_UF_PAUSE_RESUME_RESPONSE = 0x41 # HD response to user request to pause or resume UF MSG_ID_DG_CONCENTRATE_PUMP_DATA = 0x42 # DG broadcast of concentrate pump data - MSG_ID_DG_PRIMING_STATUS_DATA = 0x43 # HD priming status during cartridge prime + MSG_ID_HD_PRIMING_STATUS_DATA = 0x43 # HD priming status during cartridge prime MSG_ID_DG_UV_REACTORS_DATA = 0x44 # DG broadcast UV reactors data MSG_ID_DG_THERMISTORS_DATA = 0x45 # DG broadcast thermistors data MSG_ID_UI_PRESSURE_LIMITS_CHANGE_REQUEST = 0x46 # UI request to change pressure limits MSG_ID_HD_PRESSURE_LIMITS_CHANGE_RESPONSE = 0x47 # HD response to change pressure limits request MSG_ID_DG_FANS_DATA = 0x48 # DG broadcast fans data MSG_ID_HD_TREATMENT_STOP_TIMER_DATA = 0x49 # HD broadcast of treatment stop timer (countdown to treatment stop - no rinseback alarm) + MSG_ID_UI_PATIENT_DISCONNECTION_CONFIRM = 0x4A # UI patient disconnection confirm MSG_ID_UI_HEPARIN_PAUSE_RESUME_REQUEST = 0x4B # UI request to pause/resume Heparin delivery MSG_ID_HD_HEPARIN_PAUSE_RESUME_RESPONSE = 0x4C # HD Heparin Pause/Resume Response MSG_ID_HD_HEPARIN_DATA = 0x4D # HD Broadcast heparin data @@ -125,6 +126,11 @@ MSG_ID_HD_SYRINGE_PUMP_DATA = 0x69 # HD broadcast of syringe pump data MSG_ID_HD_FLUID_LEAK_STATE = 0x6A # HD broadcast of fluid leak state MSG_ID_DG_FLUID_LEAK_STATE = 0x6B # DG broadcast of fluid leak state + MSG_ID_HD_BLOOD_LEAK_STATE = 0x6C # HD broadcast of blood leak state + MSG_ID_UI_HD_SET_RTC_REQUEST = 0x6D # UI to DG Request to set RTC Request + MSG_ID_HD_UI_SET_RTC_RESPONSE = 0x6E # DG to UI set RTC Response + MSG_ID_UI_DG_SET_RTC_REQUEST = 0x6F # UI to HD request to set RTC Request + MSG_ID_DG_UI_SET_RTC_RESPONSE = 0x70 # HD to UI Set RTC Response MSG_ID_CAN_ERROR_COUNT = 0x999 # test code in support of EMC testing @@ -231,7 +237,7 @@ MSG_ID_DG_ACCEL_OVERRIDE = 0xA017 # DG accelerometer sensor override request MSG_ID_DG_ACCEL_MAX_OVERRIDE = 0xA018 # DG accelerometer sensor max. override request MSG_ID_DG_ACCEL_SEND_INTERVAL_OVERRIDE = 0xA019 # DG accelerometer data broadcast interval override request - MSG_ID_DG_ACCEL_SET_CALIBRATION = 0xA01A # DG accelerometer set calibration factors request + MSG_ID___AVAILABLE_11 = 0xA01A # This msg ID is available for use MSG_ID_RO_PUMP_SET_PWM = 0xA01B # RO pump set PWM for open loop MSG_ID_DRAIN_PUMP_SET_DELTA_PRESSURE_OVERRIDE = 0xA01C # Drain pump set delta pressure override MSG_ID_HEAT_DISINFECT_RECIRC_PATH_DURATION_MINS = 0xA01D # Heat disinfection recirculation path duration in minutes @@ -246,7 +252,7 @@ MSG_ID_CONCENTRATE_PUMP_STATE_CHANGE_REQUEST = 0xA026 # Concentrate pumps' state change request (on / off) MSG_ID_CONCENTRATE_PUMP_PUBLISH_INTERVAL_OVERRIDE = 0xA027 # Concentrate pumps' data publish interval override request MSG_ID_DG_START_STOP_INLET_UV_REACTOR = 0xA028 # DG start/stop inlet UV reactor - MSG_ID_DG_REQUEST_CALIBRATION_DATA = 0xA029 # Requests calibration data from DG + MSG_ID_DG_REQUEST_CALIBRATION_DATA = 0xA029 # Requests calibration_record data from DG MSG_ID_DG_FANS_DATA_PUBLISH_OVERRIDE = 0xA02A # Fans data publish interval override request MSG_ID_DG_START_STOP_OUTLET_UV_REACTOR = 0xA02B # DG start/stop outlet UV reactor MSG_ID_DG_UV_REACTORS_HEALTH_OVERRIDE = 0xA02C # DG UV reactors health override request @@ -256,7 +262,18 @@ MSG_ID_DG_RO_FLOW_RATE_OVERRIDE = 0xA030 # DG RO flow rate override MSG_ID_DG_RO_PUMP_TARGET_FLOW_OVERRIDE = 0xA031 # DG RO pump target flow rate override MSG_ID_DG_RO_PUMP_TARGET_PRESSURE_OVERRIDE = 0xA032 # DG RO pump target pressure override - MSG_ID_DG_SET_CALIBRATION_DATA = 0xA033 # DG set calibration data + MSG_ID_DG_SET_CALIBRATION_RECORD = 0xA033 # DG set calibration_record record + MSG_ID_DG_GET_CALIBRATION_RECORD = 0xA034 # DG get calibration_record record + MSG_ID_DG_SEND_CALIBRATION_RECORD = 0xA035 # DG send calibration_record record from firmware + MSG_ID_DG_SET_SYSTEM_RECORD = 0xA036 # DG send system record + MSG_ID_DG_GET_SYSTEM_RECORD = 0xA037 # DG get system record + MSG_ID_DG_SEND_SYSTEM_RECORD = 0xA038 # DG send system record from firmware + MSG_ID_DG_SET_SERVICE_RECORD = 0xA03A # DG set service record that is sent from Dialin + MSG_ID_DG_GET_SERVICE_RECORD = 0xA039 # DG get service record that is requested from Dialin + MSG_ID_DG_SEND_SERVICE_RECORD = 0xA03B # DG send service record that is requested from Dialin + MSG_ID_DG_GET_SCHEDULED_RUNS_RECORD = 0xA03C # DG get scheduled runs that is requested from Dialin + MSG_ID_DG_SET_SCHEDULED_RUNS_RECORD = 0xA03D # DG set scheduled runs that is received from Dialin + MSG_ID_DG_SEND_SCHEDULED_RUNS_RECORD = 0xA03E # DG send scheduled runs to CAN bus to be received in Dialin (equivalent to publish) MSG_ID_HD_DEBUG_EVENT = 0xFFF1 # HD debug event text to be logged in event log MSG_ID_DG_DEBUG_EVENT = 0xFFF2 # DG debug event text to be logged in event log Index: dialin/hd/hemodialysis_device.py =================================================================== diff -u -r3a5030c08d57bddc2c22dca05d1070375e3cb5f7 -r211f04b9e9ff6558bc34f99ee805e18ad9c30579 --- dialin/hd/hemodialysis_device.py (.../hemodialysis_device.py) (revision 3a5030c08d57bddc2c22dca05d1070375e3cb5f7) +++ dialin/hd/hemodialysis_device.py (.../hemodialysis_device.py) (revision 211f04b9e9ff6558bc34f99ee805e18ad9c30579) @@ -31,6 +31,7 @@ from .service_record import HDServiceNVRecords from .pressure_occlusion import HDPressureOcclusion from .pretreatment import HDPreTreatment +from .syringe_pump import HDSyringePump from ..protocols.CAN import (DenaliMessage, DenaliCanMessenger, DenaliChannels) @@ -39,6 +40,7 @@ from ..utils.base import _AbstractSubSystem, _publish, _LogManager from .constants import NO_RESET from ..common.msg_defs import MsgIds, MsgFieldPositions +from ..common.hd_defs import HDOpModes class HD(_AbstractSubSystem): @@ -50,16 +52,6 @@ # HD login password HD_LOGIN_PASSWORD = '123' - # HD operation modes - HD_OP_MODE_FAULT = 0 - HD_OP_MODE_SERVICE = 1 - HD_OP_MODE_INIT_POST = 2 - HD_OP_MODE_STANDBY = 3 - HD_OP_MODE_TREATMENT_PARAMS = 4 - HD_OP_MODE_PRE_TREATMENT = 6 - HD_OP_MODE_TREATMENT = 7 - HD_OP_MODE_POST_TREATMENT = 8 - def __init__(self, can_interface="can0", log_level=None): """ HD object provides test/service commands for the HD sub-system. @@ -91,12 +83,9 @@ msg_id = MsgIds.MSG_ID_HD_OP_MODE.value self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_hd_op_mode_sync) - #msg_id = MsgIds.MSG_ID_HD_CALIBRATION_DATA.value - #self.can_interface.register_receiving_publication_function(channel_id, msg_id, - # self._handler_hd_cal_data_sync) # create properties - self.hd_operation_mode = self.HD_OP_MODE_INIT_POST + self.hd_operation_mode = HDOpModes.MODE_INIT.value self.hd_operation_sub_mode = 0 # Create command groups @@ -114,6 +103,7 @@ self.treatment = HDTreatment(self.can_interface, self.logger) self.pretreatment = HDPreTreatment(self.can_interface, self.logger) self.pressure_occlusion = HDPressureOcclusion(self.can_interface, self.logger) + self.syringe_pump = HDSyringePump(self.can_interface, self.logger) self.valves = HDValves(self.can_interface, self.logger) self.calibration_record = HDCalibrationNVRecord(self.can_interface, self.logger) self.system_record = HDSystemNVRecords(self.can_interface, self.logger)