Index: leahi_dialin/td/proxies/ui_proxy.py =================================================================== diff -u -r3e8c15745640db0568536912a36704a567bd73c2 -rba415df9f8e76d6b0f21e8f69ba99346e42f7b09 --- leahi_dialin/td/proxies/ui_proxy.py (.../ui_proxy.py) (revision 3e8c15745640db0568536912a36704a567bd73c2) +++ leahi_dialin/td/proxies/ui_proxy.py (.../ui_proxy.py) (revision ba415df9f8e76d6b0f21e8f69ba99346e42f7b09) @@ -16,13 +16,13 @@ # Module imports from logging import Logger +from typing import List, Union # Project imports -from leahi_dialin.common import td_enum_repository from leahi_dialin.common.constants import ACCEPTED -from leahi_dialin.common.disp_defs_proxy import disp_enum_repository from leahi_dialin.common.generic_defs import DataTypes -from leahi_dialin.common.msg_defs import MsgIds, RequestRejectReasons +from leahi_dialin.common.msg_ids import MsgIds +from leahi_dialin.common.msg_defs import RequestRejectReasons from leahi_dialin.common.override_templates import cmd_generic_override from leahi_dialin.protocols.CAN import CanMessenger, CanChannels from leahi_dialin.utils.abstract_classes import AbstractSubSystem @@ -65,48 +65,175 @@ function = self._handler_uf_pause_resp_sync) # MSG_ID_TD_RESP_TREATMENT_PARAMS_TO_VALIDATE - self.tx_params_treatment_modality = td_enum_repository.TDTreatmentModalityTypes.HD.value - self.tx_params_hdf_dilution = td_enum_repository.TDTreatmentHDFDilution.HDF_NOT_APPLICABLE.value - self.tx_params_blood_flow_rate = 0 - self.tx_params_dialysate_flow_rate = 0 - self.tx_params_tx_duration = 0 - self.tx_params_heparin_duration = 0 - self.tx_params_heparin_type = disp_enum_repository.HeparinTypes.HEPARIN_TYPE_FRESENIUS_CENTRISOL.value - self.tx_params_dry_bicarb_cart_size = 0 - self.tx_params_sodium = 0 - self.tx_params_bicarb_concentrate = disp_enum_repository.BicarbTypes.BICARB_08_677753_0.value - self.tx_params_dialyzer_type = disp_enum_repository.DialyzerTypes.DIALYZER_TYPE_BBRAUN_PRO_13H.value - self.tx_params_fluid_bolus_volume = 0 - self.tx_params_bp_interval = 0 - self.tx_params_rinseback_volume = 0 - self.tx_params_hepatitis_b_status = td_enum_repository.TDTreaHeparinStates.HEPARIN_STATE_OFF.value - self.tx_params_acid_concentrate = disp_enum_repository.AcidTypes.ACID_08_1251_1.value - self.tx_params_subst_fluid_volume = 0.0 - self.tx_params_heparin_bolus_volume = 0.0 - self.tx_params_heparin_delivery_rate = 0.0 - self.tx_params_dialysate_temperature = 0.0 - self.tx_params_uf_pre_weight = 0.0 - self.tx_params_uf_est_target_weight = 0.0 - self.tx_params_uf_volume = 0.0 - self.tx_params_validate_timestamp = 0 + self.tx_param_ack = False + self.tx_param_reject_reason = { + 'treatment_modality': RequestRejectReasons.REQUEST_REJECT_REASON_NONE, + 'hdf_dilution': RequestRejectReasons.REQUEST_REJECT_REASON_NONE, + 'blood_flow_rate': RequestRejectReasons.REQUEST_REJECT_REASON_NONE, + 'dialysate_flow_rate': RequestRejectReasons.REQUEST_REJECT_REASON_NONE, + 'tx_duration': RequestRejectReasons.REQUEST_REJECT_REASON_NONE, + 'heparin_duration': RequestRejectReasons.REQUEST_REJECT_REASON_NONE, + 'heparin_type': RequestRejectReasons.REQUEST_REJECT_REASON_NONE, + 'dry_bicarb_cart_size': RequestRejectReasons.REQUEST_REJECT_REASON_NONE, + 'sodium': RequestRejectReasons.REQUEST_REJECT_REASON_NONE, + 'bicarb_concentrate': RequestRejectReasons.REQUEST_REJECT_REASON_NONE, + 'dialyzer_type': RequestRejectReasons.REQUEST_REJECT_REASON_NONE, + 'fluid_bolus_volume': RequestRejectReasons.REQUEST_REJECT_REASON_NONE, + 'bp_interval': RequestRejectReasons.REQUEST_REJECT_REASON_NONE, + 'rinseback_volume': RequestRejectReasons.REQUEST_REJECT_REASON_NONE, + 'hepatitis_b_status': RequestRejectReasons.REQUEST_REJECT_REASON_NONE, + 'acid_concentrate': RequestRejectReasons.REQUEST_REJECT_REASON_NONE, + 'subst_fluid_volume': RequestRejectReasons.REQUEST_REJECT_REASON_NONE, + 'heparin_bolus_volume': RequestRejectReasons.REQUEST_REJECT_REASON_NONE, + 'heparin_delivery_rate': RequestRejectReasons.REQUEST_REJECT_REASON_NONE, + 'dialysate_temperature': RequestRejectReasons.REQUEST_REJECT_REASON_NONE, + 'uf_pre_weight': RequestRejectReasons.REQUEST_REJECT_REASON_NONE, + 'uf_est_target_weight': RequestRejectReasons.REQUEST_REJECT_REASON_NONE, + 'uf_volume': RequestRejectReasons.REQUEST_REJECT_REASON_NONE + } + self.tx_params_validate_timestamp = 0 #: The timestamp of the latest treatment parameters validate response message # MSG_ID_TD_RESP_ULTRAFILTRATION_VOLUME_TO_VALIDATE - self.uf_volume_acceptance = 0 - self.uf_volume_rr = 0 + self.uf_volume_ack = False + self.uf_volume_reject_reason = RequestRejectReasons.REQUEST_REJECT_REASON_NONE self.uf_volume_ml = 0.0 - self.uf_volume_timestamp = 0 + self.uf_volume_timestamp = 0 #: The timestamp of the latest ultrafiltration validate response message # MSG_ID_TD_RESP_INITIATE_TREATMENT_WORKFLOW - self.initiate_tx_acceptance = 0 - self.initiate_tx_rr = 0 - self.initiate_tx_timestamp = 0 + self.initiate_tx_ack = False + self.initiate_tx_reject_reason = RequestRejectReasons.REQUEST_REJECT_REASON_NONE + self.initiate_tx_timestamp = 0 #: The timestamp of the latest initiate treatment reponse message # MSG_ID_TD_UF_PAUSE_RESUME_RESPONSE - self.uf_pause_resume_acceptance = 0 - self.uf_pause_resume_rr = 0 - self.uf_pause_resume_timestamp = 0 + self.uf_pause_resume_ack = False + self.uf_pause_resume_reject_reason = RequestRejectReasons.REQUEST_REJECT_REASON_NONE + self.uf_pause_resume_timestamp = 0 #: The timestamp of the latest pause ultrafiltration response message + +# ============================================================ Properties ============================================================ + @property + def tx_param_ack(self) -> bool: + """ + The Treatment Parameter Validate message's Ack data + """ + return self._tx_param_ack + + @tx_param_ack.setter + def tx_param_ack(self, value: bool): + self._tx_param_ack = value + + + @property + def tx_param_reject_reason(self) -> dict: + """ + The Treatment Parameter Validate Reject Reasons data + """ + return self._tx_param_reject_reason + + @tx_param_reject_reason.setter + def tx_param_reject_reason(self, value: Union[int, RequestRejectReasons]): + if isinstance(value, int): + self._tx_param_reject_reason = RequestRejectReasons(value) + else: + self._tx_param_reject_reason = value + + + @property + def uf_volume_ack(self) -> bool: + """ + The Ultrafiltration Validate message's Ack data + """ + return self._uf_volume_ack + + @uf_volume_ack.setter + def uf_volume_ack(self, value: bool): + self._uf_volume_ack = value + + + @property + def uf_volume_reject_reason(self) -> RequestRejectReasons: + """ + The Ultrafiltration Validate Reject Reasons data + """ + return self._uf_volume_reject_reason + + @uf_volume_reject_reason.setter + def uf_volume_reject_reason(self, value: Union[int, RequestRejectReasons]): + if isinstance(value, int): + self._uf_volume_reject_reason = RequestRejectReasons(value) + else: + self._uf_volume_reject_reason = value + + + @property + def uf_volume_ml(self) -> float: + """ + The Ultrafiltration Volume (mL) data + """ + return self._uf_volume_ml + + @uf_volume_ml.setter + def uf_volume_ml(self, value: float): + self._uf_volume_ml = value + + + @property + def initiate_tx_ack(self) -> bool: + """ + The Initiate Treatment message's Ack data + """ + return self._initiate_tx_ack + + @initiate_tx_ack.setter + def initiate_tx_ack(self, value: bool): + self._initiate_tx_ack = value + + + @property + def initiate_tx_reject_reason(self) -> RequestRejectReasons: + """ + The Initiate Treatment Reject Reasons data + """ + return self._initiate_tx_reject_reason + + @initiate_tx_reject_reason.setter + def initiate_tx_reject_reason(self, value: Union[int, RequestRejectReasons]): + if isinstance(value, int): + self._initiate_tx_reject_reason = RequestRejectReasons(value) + else: + self._initiate_tx_reject_reason = value + + + @property + def uf_pause_resume_ack(self) -> bool: + """ + The Pause Ultrafiltration message's Ack data + """ + return self._uf_pause_resume_ack + + @uf_pause_resume_ack.setter + def uf_pause_resume_ack(self, value: bool): + self._uf_pause_resume_ack = value + + + @property + def uf_pause_resume_reject_reason(self) -> RequestRejectReasons: + """ + The Pause Ultrafiltration Reject Reasons data + """ + return self._uf_pause_resume_reject_reason + + @uf_pause_resume_reject_reason.setter + def uf_pause_resume_reject_reason(self, value: Union[int, RequestRejectReasons]): + if isinstance(value, int): + self._uf_pause_resume_reject_reason = RequestRejectReasons(value) + else: + self._uf_pause_resume_reject_reason = value + + + +# ============================================================ Handlers ============================================================ def _handler_tx_parameters_val_resp_sync(self, message: dict, timestamp=0.0) -> None: """ Handles treatment parameters validation response from the TD. Treatment parameters acceptance and rejection @@ -117,32 +244,32 @@ :return: none """ msg_list = [] - msg_list.append(('self.tx_params_treatment_modality', DataTypes.U32)) - msg_list.append(('self.tx_params_hdf_dilution', DataTypes.U32)) - msg_list.append(('self.tx_params_blood_flow_rate', DataTypes.U32)) - msg_list.append(('self.tx_params_dialysate_flow_rate', DataTypes.U32)) - msg_list.append(('self.tx_params_tx_duration', DataTypes.U32)) - msg_list.append(('self.tx_params_heparin_duration', DataTypes.U32)) - msg_list.append(('self.tx_params_heparin_type', DataTypes.U32)) - msg_list.append(('self.tx_params_dry_bicarb_cart_size', DataTypes.U32)) - msg_list.append(('self.tx_params_sodium', DataTypes.U32)) - msg_list.append(('self.tx_params_bicarb_concentrate', DataTypes.U32)) - msg_list.append(('self.tx_params_dialyzer_type', DataTypes.U32)) - msg_list.append(('self.tx_params_fluid_bolus_volume', DataTypes.U32)) - msg_list.append(('self.tx_params_bp_interval', DataTypes.U32)) - msg_list.append(('self.tx_params_rinseback_volume', DataTypes.U32)) - msg_list.append(('self.tx_params_hepatitis_b_status', DataTypes.U32)) - msg_list.append(('self.tx_params_acid_concentrate', DataTypes.U32)) - msg_list.append(('self.tx_params_subst_fluid_volume', DataTypes.F32)) - msg_list.append(('self.tx_params_heparin_bolus_volume', DataTypes.F32)) - msg_list.append(('self.tx_params_heparin_delivery_rate', DataTypes.F32)) - msg_list.append(('self.tx_params_dialysate_temperature', DataTypes.F32)) - msg_list.append(('self.tx_params_uf_pre_weight', DataTypes.F32)) - msg_list.append(('self.tx_params_uf_est_target_weight', DataTypes.F32)) - msg_list.append(('self.tx_params_uf_volume', DataTypes.F32)) + msg_list.append((type(self).tx_param_ack, DataTypes.BOOL)) + msg_list.append((self.tx_param_reject_reason, 'treatment_modality', DataTypes.U32)) + msg_list.append((self.tx_param_reject_reason, 'hdf_dilution', DataTypes.U32)) + msg_list.append((self.tx_param_reject_reason, 'blood_flow_rate', DataTypes.U32)) + msg_list.append((self.tx_param_reject_reason, 'dialysate_flow_rate', DataTypes.U32)) + msg_list.append((self.tx_param_reject_reason, 'tx_duration', DataTypes.U32)) + msg_list.append((self.tx_param_reject_reason, 'heparin_duration', DataTypes.U32)) + msg_list.append((self.tx_param_reject_reason, 'heparin_type', DataTypes.U32)) + msg_list.append((self.tx_param_reject_reason, 'dry_bicarb_cart_size', DataTypes.U32)) + msg_list.append((self.tx_param_reject_reason, 'sodium', DataTypes.U32)) + msg_list.append((self.tx_param_reject_reason, 'bicarb_concentrate', DataTypes.U32)) + msg_list.append((self.tx_param_reject_reason, 'dialyzer_type', DataTypes.U32)) + msg_list.append((self.tx_param_reject_reason, 'fluid_bolus_volume', DataTypes.U32)) + msg_list.append((self.tx_param_reject_reason, 'bp_interval', DataTypes.U32)) + msg_list.append((self.tx_param_reject_reason, 'rinseback_volume', DataTypes.U32)) + msg_list.append((self.tx_param_reject_reason, 'hepatitis_b_status', DataTypes.U32)) + msg_list.append((self.tx_param_reject_reason, 'acid_concentrate', DataTypes.U32)) + msg_list.append((self.tx_param_reject_reason, 'subst_fluid_volume', DataTypes.U32)) + msg_list.append((self.tx_param_reject_reason, 'heparin_bolus_volume', DataTypes.U32)) + msg_list.append((self.tx_param_reject_reason, 'heparin_delivery_rate', DataTypes.U32)) + msg_list.append((self.tx_param_reject_reason, 'dialysate_temperature', DataTypes.U32)) + msg_list.append((self.tx_param_reject_reason, 'uf_pre_weight', DataTypes.U32)) + msg_list.append((self.tx_param_reject_reason, 'uf_est_target_weight', DataTypes.U32)) + msg_list.append((self.tx_param_reject_reason, 'uf_volume', DataTypes.U32)) - self.process_into_vars(decoder_list = msg_list, - message = message) + self.process_into_vars(decoder_list = msg_list, message = message) self.tx_params_validate_timestamp = timestamp @@ -156,12 +283,11 @@ :return: none """ msg_list = [] - msg_list.append(('self.uf_volume_acceptance', DataTypes.U32)) - msg_list.append(('self.uf_volume_rr', DataTypes.U32)) - msg_list.append(('self.uf_volume_ml', DataTypes.F32)) + msg_list.append((type(self).uf_pause_resume_ack, DataTypes.BOOL)) + msg_list.append((type(self).uf_pause_resume_reject_reason, DataTypes.U32)) + msg_list.append((type(self).uf_volume_ml, DataTypes.F32)) - self.process_into_vars(decoder_list = msg_list, - message = message) + self.process_into_vars(decoder_list = msg_list, message = message) self.uf_volume_timestamp = timestamp @@ -175,11 +301,10 @@ :return: none """ msg_list = [] - msg_list.append(('self.initiate_tx_acceptance', DataTypes.U32)) - msg_list.append(('self.initiate_tx_rr', DataTypes.U32)) + msg_list.append((type(self).initiate_tx_ack, DataTypes.BOOL)) + msg_list.append((type(self).initiate_tx_reject_reason, DataTypes.U32)) - self.process_into_vars(decoder_list = msg_list, - message = message) + self.process_into_vars(decoder_list = msg_list, message = message) self.initiate_tx_timestamp = timestamp @@ -193,14 +318,15 @@ :return: none """ msg_list = [] - msg_list.append(('self.uf_pause_resume_acceptance', DataTypes.U32)) - msg_list.append(('self.uf_pause_resume_rr', DataTypes.U32)) + msg_list.append((type(self).uf_pause_resume_ack, DataTypes.BOOL)) + msg_list.append((type(self).uf_pause_resume_reject_reason, DataTypes.U32)) - self.process_into_vars(decoder_list = msg_list, - message = message) + self.process_into_vars(decoder_list = msg_list, bmessage = message) self.uf_pause_resume_timestamp = timestamp + +# ============================================================ Overrides and Requests ============================================================ def cmd_send_ui_treatment_param_data(self, final_confirmation: int, treatment_modality: int,