Index: dialin/common/msg_defs.py =================================================================== diff -u -r84bc297f6f9b0c6594b73ac1045ad64f8f6e347d -rea4c7120d474c48238d909b514109c320181b65f --- dialin/common/msg_defs.py (.../msg_defs.py) (revision 84bc297f6f9b0c6594b73ac1045ad64f8f6e347d) +++ dialin/common/msg_defs.py (.../msg_defs.py) (revision ea4c7120d474c48238d909b514109c320181b65f) @@ -85,7 +85,7 @@ 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 Index: dialin/dg/samplewater.py =================================================================== diff -u -rb99f3b5e496bf9451625ba7b0acc63a0e2d073b4 -rea4c7120d474c48238d909b514109c320181b65f --- dialin/dg/samplewater.py (.../samplewater.py) (revision b99f3b5e496bf9451625ba7b0acc63a0e2d073b4) +++ dialin/dg/samplewater.py (.../samplewater.py) (revision ea4c7120d474c48238d909b514109c320181b65f) @@ -19,6 +19,7 @@ from ..common.msg_defs import MsgIds, MsgFieldPositions from logging import Logger + class DGSampleWater(_AbstractSubSystem): """ @@ -36,9 +37,8 @@ self.logger = logger if self.can_interface is not None: - channel_id = DenaliChannels.hd_sync_broadcast_ch_id - msg_id = MsgIds.MSG_ID_DG_FILTER_FLUSH_PROGRESS.value - self.can_interface.register_receiving_publication_function(channel_id, msg_id, + self.can_interface.register_receiving_publication_function(DenaliChannels.hd_sync_broadcast_ch_id, + MsgIds.MSG_ID_DG_FILTER_FLUSH_PROGRESS.value, self._handler_filter_flush_progress_sync) self.filter_flush_timeout = 0 @@ -60,7 +60,6 @@ """ return self.filter_flush_time_countdown - @_publish([ "filter_flush_timeout", "filter_flush_time_countdown" Index: dialin/hd/pretreatment.py =================================================================== diff -u -rb99f3b5e496bf9451625ba7b0acc63a0e2d073b4 -rea4c7120d474c48238d909b514109c320181b65f --- dialin/hd/pretreatment.py (.../pretreatment.py) (revision b99f3b5e496bf9451625ba7b0acc63a0e2d073b4) +++ dialin/hd/pretreatment.py (.../pretreatment.py) (revision ea4c7120d474c48238d909b514109c320181b65f) @@ -18,7 +18,9 @@ from ..utils.base import _AbstractSubSystem, _publish, DialinEnum from ..common.msg_defs import MsgIds, MsgFieldPositions from logging import Logger +from enum import unique + @unique class PreTreatmentSubModes(DialinEnum): HD_PRE_TREATMENT_START_STATE = 0 @@ -30,11 +32,13 @@ HD_PRE_TREATMENT_RECIRCULATE_STATE = 6 HD_PRE_TREATMENT_PATIENT_CONNECTION_STATE = 7 + @unique class PreTreatmentSampleWaterStates(DialinEnum): SAMPLE_WATER_SETUP_STATE = 0 SAMPLE_WATER_STATE = 1 + @unique class PreTreatmentNoCartSelfTestStates(DialinEnum): NO_CART_SELF_TESTS_START_STATE = 0 @@ -51,6 +55,7 @@ NO_CART_SELF_TESTS_STOPPED_STATE = 11 NO_CART_SELF_TESTS_COMPLETE_STATE = 12 + @unique class PreTreatmentDrySelfTestStates(DialinEnum): DRY_SELF_TESTS_START_STATE = 0 @@ -64,6 +69,7 @@ DRY_SELF_TESTS_STOPPED_STATE = 8 DRY_SELF_TESTS_COMPLETE_STATE = 9 + @unique class PreTreatmentPrimeStates(DialinEnum): HD_PRIME_START_STATE = 0 @@ -79,11 +85,13 @@ HD_PRIME_PAUSE = 10 HD_PRIME_COMPLETE = 11 + @unique class PreTreatmentRecircStates(DialinEnum): PRE_TREATMENT_RECIRC_STATE = 0 PRE_TREATMENT_RECIRC_STOPPED_STATE = 1 + class HDPreTreatment(_AbstractSubSystem): """ @@ -101,12 +109,22 @@ self.logger = logger if self.can_interface is not None: - channel_id = DenaliChannels.hd_sync_broadcast_ch_id - - msg_id = MsgIds.MSG_ID_PRE_TREATMENT_STATE.value - self.can_interface.register_receiving_publication_function(channel_id, msg_id, + self.can_interface.register_receiving_publication_function(DenaliChannels.hd_sync_broadcast_ch_id, + MsgIds.MSG_ID_PRE_TREATMENT_STATE.value, self._handler_pre_treatment_state_sync) + msg_id = MsgIds.MSG_ID_HD_NO_CART_SELF_TEST_PROGRESS.value + self.can_interface.register_receiving_publication_function(DenaliChannels.hd_sync_broadcast_ch_id, msg_id, + self._handler_no_cart_self_test_progress_sync) + + self.can_interface.register_receiving_publication_function(DenaliChannels.hd_sync_broadcast_ch_id, + MsgIds.MSG_ID_HD_DRY_SELF_TEST_PROGRESS.value, + self._handler_dry_self_test_progress_sync) + + self.can_interface.register_receiving_publication_function(DenaliChannels.hd_sync_broadcast_ch_id, + MsgIds.MSG_ID_HD_PRIMING_STATUS_DATA.value, + self._handler_prime_progress_sync) + self.pre_treatment_submode = 0 self.pre_treatment_sample_water_state = 0 self.pre_treatment_no_cart_self_test_state = 0 @@ -116,6 +134,15 @@ self.pre_treatment_recirc_state = 0 self.pre_treatment_patient_connection_state = 0 + self.no_cart_self_test_timeout = 0 + self.no_cart_self_test_time_countdown = 0 + + self.dry_self_test_timeout = 0 + self.dry_self_test_time_countdown = 0 + + self.prime_timeout = 0 + self.prime_time_countdown = 0 + def get_pre_treatment_submode(self): """ Gets the pre-treatment state @@ -180,7 +207,54 @@ """ return self.pre_treatment_patient_connection_state + def get_no_cart_self_test_timeout(self): + """ + Gets the pre-treatment no cartridge self-test timeout + @return: The pre-treatment no cartridge self-test timeout + """ + return self.no_cart_self_test_timeout + + def get_no_cart_self_test_time_countdown(self): + """ + Gets the pre-treatment no cartridge self-test time countdown + + @return: The pre-treatment no cartridge self-test time countdown + """ + return self.no_cart_self_test_time_countdown + + def get_dry_self_test_timeout(self): + """ + Gets the pre-treatment dry self-test timeout + + @return: The pre-treatment dry self-test timeout + """ + return self.dry_self_test_timeout + + def get_dry_self_test_time_countdown(self): + """ + Gets the pre-treatment dry self-test time countdown + + @return: The pre-treatment dry self-test time countdown + """ + return self.dry_self_test_time_countdown + + def get_prime_timeout(self): + """ + Gets the pre-treatment prime timeout + + @return: The pre-treatment prime timeout + """ + return self.prime_timeout + + def get_prime_time_countdown(self): + """ + Gets the pre-treatment prime time countdown + + @return: The pre-treatment prime time countdown + """ + return self.prime_time_countdown + @_publish([ "pre_treatment_submode", "pre_treatment_sample_water_state", @@ -193,8 +267,7 @@ ]) def _handler_pre_treatment_state_sync(self, message): """ - Handles published pre-treatment state data messages. Pre-treatment state data are captured - for reference. + Handles published pre-treatment state data messages. @param message: published pre-treatment state data message @return: none @@ -244,3 +317,54 @@ self.pre_treatment_recirc_state = 'Unknown State' if PreTreatmentRecircStates.has_value(pt_recirc_state): self.pre_treatment_recirc_state = PreTreatmentRecircStates(pt_recirc_state).name + + @_publish([ + "no_cart_self_test_timeout", + "no_cart_self_test_time_countdown" + ]) + def _handler_no_cart_self_test_progress_sync(self, message): + """ + Handles published no cartridge self-test progress data messages. + + @param message: published no cartridge self-test progress data message + @return: None + """ + + self.no_cart_self_test_timeout = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] + self.no_cart_self_test_time_countdown = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] + + @_publish([ + "dry_self_test_timeout", + "dry_self_test_time_countdown" + ]) + def _handler_dry_self_test_progress_sync(self, message): + """ + Handles published dry self-test progress data messages. + + @param message: published dry self-test progress data message + @return: None + """ + + self.dry_self_test_timeout = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] + self.dry_self_test_time_countdown = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] + + @_publish([ + "prime_timeout", + "prime_time_countdown" + ]) + def _handler_prime_progress_sync(self, message): + """ + Handles published prime progress data messages. + + @param message: published prime progress data message + @return: None + """ + + self.prime_timeout = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] + self.prime_time_countdown = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0]