Index: leahi_dialin/td/modules/treatment.py =================================================================== diff -u -r1f2bf6d939eb4033dbedb7d7005494cc12fccbc6 -r4bbcf07a714e5b38fb117023694cb0be0bd3815d --- leahi_dialin/td/modules/treatment.py (.../treatment.py) (revision 1f2bf6d939eb4033dbedb7d7005494cc12fccbc6) +++ leahi_dialin/td/modules/treatment.py (.../treatment.py) (revision 4bbcf07a714e5b38fb117023694cb0be0bd3815d) @@ -20,7 +20,7 @@ # Project imports from leahi_dialin.common.constants import NO_RESET from leahi_dialin.common.generic_defs import DataTypes -from leahi_dialin.common.msg_defs import MsgIds +from leahi_dialin.common.msg_ids import MsgIds from leahi_dialin.common.override_templates import cmd_generic_override from leahi_dialin.common import td_enum_repository from leahi_dialin.protocols.CAN import CanMessenger, CanChannels @@ -68,69 +68,157 @@ function = self._handler_resp_treatment_parameters_sync) # Treatment param ranges data - self.min_tx_time = 0 #: Minimum Treatment time - self.max_tx_time = 0 #: Maximum Treatment time - self.min_uf_volume = 0.0 #: Minimum Ultrafiltration volume - self.max_uf_volume = 0.0 #: Maximum Ultrafiltration volume - self.min_dial_rate = 0 #: Minimum Dialysate rate - self.max_dial_rate = 0 #: Maximum Dialysate rate self.tx_params_timestamp = 0 #: The timestamp of the latest Treatment Parameters message + self.treatment_param_ranges = { + 'min_tx_time': 0, # The Minimum Treatment time + 'max_tx_time': 0, # The Maximum Treatment time + 'min_uf_volume': 0.0, # The Minimum Ultrafiltration volume + 'max_uf_volume': 0.0, # The Maximum Ultrafiltration volume + 'min_dial_rate': 0, # The Minimum Dialysate rate + 'max_dial_rate': 0 # The Maximum Dialysate rate + } # Saline Bolus data - self.tgt_saline_volume = 0 #: Target Saline Bolus volume in mL - self.cum_saline_volume = 0.0 #: Cum Saline Bolus volume in mL - self.bol_saline_volume = 0.0 #: Bol Saline Bolus volume in mL - self.saline_bolus_state = 0 #: The State of the Saline Bolus self.saline_bolus_timestamp = 0 #: The timestamp of the latest Saline Bolus message + self.saline_bolus = { + 'tgt_saline_volume': 0, # Target Saline Bolus volume in mL + 'cum_saline_volume': 0.0, # Cum Saline Bolus volume in mL + 'bol_saline_volume': 0.0, # Bol Saline Bolus volume in mL + 'saline_bolus_state': 0 # The State of the Saline Bolus + } - # UF data - self.set_uf_volume = 0.0 #: The Ultrafiltration volume in L - self.tgt_uf_rate = 0.0 #: The Ultrafiltration rate in L/hr - self.uf_volume_delivered = 0.0 #: How much was delivered during Ultrafiltration in L - self.uf_state = 0 #: The State of the Ultrafiltration + # Saline Bolus data self.uf_timestamp = 0 #: The timestamp of the latest Ultrafiltration message + self.ultrafiltration = { + 'set_uf_volume': 0.0, # The Ultrafiltration volume in L + 'tgt_uf_rate': 0.0, # The Ultrafiltration rate in L/hr + 'uf_volume_delivered': 0.0, # How much was delivered during Ultrafiltration in L + 'uf_state': 0 # The State of the Ultrafiltration + } # Treatment Time Data - self.tx_time_prescribed = 0 #: Total Treatment duration - self.tx_time_elapsed = 0 #: How much time is elapsed in the Treatment - self.tx_time_remaining = 0 #: How much time is remaining from the Treatment self.tx_time_timestamp = 0 #: The timestamp of the latest Treatment message + self.treatment_times ={ + 'tx_time_prescribed': 0, # Total Treatment duration + 'tx_time_elapsed': 0, # How much time is elapsed in the Treatment + 'tx_time_remaining': 0 # How much time is remaining from the Treatment + } # Treatment State Data - self.tx_sub_mode = 0 #: The Treatment Operation Sub-Mode - self.blood_prime_state = 0 #: The Blood Prime Operation Sub-Mode - self.dialysis_state = 0 #: The Dialysis Operation Sub-Mode - self.isolated_uf_state = 0 #: The Isolated Ultrafiltration Operation Sub-Mode - self.tx_stop_state = 0 #: The Treatment Stop Operation Sub-Mode - self.rinseback_state = 0 #: The Rinsback Operation Sub-Mode - self.tx_recirc_state = 0 #: The Recirculation Operation Sub-Mode - self.tx_end_state = 0 #: The Treatment End Operation Sub-Mode self.tx_state_timestamp = 0 #: The timestamp of the latest Treatment State message + self.treatment_states = { + 'tx_sub_mode': 0, # The Treatment Operation Sub-Mode + 'blood_prime_state': 0, # The Blood Prime Operation Sub-Mode + 'dialysis_state': 0, # The Dialysis Operation Sub-Mode + 'isolated_uf_state': 0, # The Isolated Ultrafiltration Operation Sub-Mode + 'tx_stop_state': 0, # The Treatment Stop Operation Sub-Mode + 'rinseback_state': 0, # The Rinsback Operation Sub-Mode + 'tx_recirc_state': 0, # The Recirculation Operation Sub-Mode + 'tx_end_state': 0 # The Treatment End Operation Sub-Mode + } # Treatment Parameters Data. Most recent response. - self.blood_flow_rate = 0 #: The Blood flow rate - self.dialysate_flow_rate = 0 #: The Dialysate flow rate - self.tx_duration = 0 #: The Treatment duration - self.saline_bolus_volume = 0 #: The Saline Bolus volume - self.hep_stop_time = 0 #: The Heparin stop time - self.hep_time = 0 #: The Heparin start time - self.acid_con = 0 #: The selected Acid concentrate's option index - self.bicarb_con = 0 #: The selected Bicarb concentrate's option index - self.dialyzer_type = 0 #: The selected Dialyser option index - self.bp_interval = 0 #: The Body Pulse interval - self.rb_flow_rate = 0 #: The RB flow rate - self.rb_volume = 0 #: The RB volume - self.art_pressure_window = 0 #: The Artery pressure window duration - self.venous_pressure_window = 0 #: The Venous pressure window duration - self.venous_asymm_window = 0 #: The Venous asymmetric window duration - self.tmp_limit_window = 0 #: The Transmembrane limit window duration - self.dialysate_temp = 0.0 #: The Dialysate temperature - self.hep_dispense_rate = 0.0 #: The Heparin dispense rate - self.hep_bolus_vol = 0.0 #: The Heparin bolus volume - self.uf_vol = 0.0 #: The Ultrafiltration volume self.tx_param_req_timestamp = 0 #: The timestamp of the latest Treatment Parameters Request message + self.treatment_paramters = { + 'blood_flow_rate': 0, # The Blood flow rate + 'dialysate_flow_rate': 0, # The Dialysate flow rate + 'tx_duration': 0, # The Treatment duration + 'saline_bolus_volume': 0, # The Saline Bolus volume + 'hep_stop_time': 0, # The Heparin stop time + 'hep_time': 0, # The Heparin start time + 'acid_con': 0, # The selected Acid concentrate's option index + 'bicarb_con': 0, # The selected Bicarb concentrate's option index + 'dialyzer_type': 0, # The selected Dialyser option index + 'bp_interval': 0, # The Body Pulse interval + 'rb_flow_rate': 0, # The RB flow rate + 'rb_volume': 0, # The RB volume + 'art_pressure_window': 0, # The Artery pressure window duration + 'venous_pressure_window': 0, # The Venous pressure window duration + 'venous_asymm_window': 0, # The Venous asymmetric window duration + 'tmp_limit_window': 0, # The Transmembrane limit window duration + 'dialysate_temp': 0, # The Dialysate temperature + 'hep_dispense_rate': 0, # The Heparin dispense rate + 'hep_bolus_vol': 0, # The Heparin bolus volume + 'uf_vol': 0 # The Ultrafiltration volume + } + +# ============================================================ Properties ============================================================ + @property + def treatment_param_ranges(self) -> dict: + """ + The Treatment Parameter limits + """ + return self._min_tx_time + + @treatment_param_ranges.setter + def treatment_param_ranges(self, value): + self._min_tx_time = value + + + @property + def saline_bolus(self) -> dict: + """ + The Saline Bolus data + """ + return self._saline_bolus + + @saline_bolus.setter + def saline_bolus(self, value): + self._saline_bolus = value + + + @property + def ultrafiltration(self) -> int: + """ + The Ultrafiltration data + """ + return self._ultrafiltration + + @ultrafiltration.setter + def ultrafiltration(self, value): + self._ultrafiltration = value + + + @property + def treatment_times(self) -> int: + """ + The Treatment times + """ + return self._treatment_times + + @treatment_times.setter + def treatment_times(self, value): + self._treatment_times = value + + + @property + def treatment_states(self) -> int: + """ + The Treatment states + """ + return self._treatment_states + + @treatment_states.setter + def treatment_states(self, value): + self._treatment_states = value + + + @property + def treatment_paramters(self) -> int: + """ + The Treatment Parameters + """ + return self._treatment_paramters + + @treatment_paramters.setter + def treatment_paramters(self, value): + self._treatment_paramters = value + + + +# ============================================================ Handlers ============================================================ @publish(["msg_id_td_treatment_param_ranges", "min_tx_time","max_tx_time","min_uf_volume","max_uf_volume", "min_dial_rate","max_dial_rate","tx_params_timestamp"]) def _handler_treatment_param_ranges_sync(self, message, timestamp=0.0): @@ -141,15 +229,14 @@ @return: none """ msg_list = [] - msg_list.append(['self.min_tx_time', DataTypes.U32]) - msg_list.append(['self.max_tx_time', DataTypes.U32]) - msg_list.append(['self.min_uf_volume', DataTypes.F32]) - msg_list.append(['self.max_uf_volume', DataTypes.F32]) - msg_list.append(['self.min_dial_rate', DataTypes.U32]) - msg_list.append(['self.max_dial_rate', DataTypes.U32]) + msg_list.append((self.treatment_param_ranges, 'min_tx_time', DataTypes.U32)) + msg_list.append((self.treatment_param_ranges, 'max_tx_time', DataTypes.U32)) + msg_list.append((self.treatment_param_ranges, 'min_uf_volume', DataTypes.F32)) + msg_list.append((self.treatment_param_ranges, 'max_uf_volume', DataTypes.F32)) + msg_list.append((self.treatment_param_ranges, 'min_dial_rate', DataTypes.U32)) + msg_list.append((self.treatment_param_ranges, 'max_dial_rate', 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_timestamp = timestamp @@ -163,13 +250,12 @@ @return: none """ msg_list = [] - msg_list.append(['self.tgt_saline_volume', DataTypes.U32]) - msg_list.append(['self.cum_saline_volume', DataTypes.F32]) - msg_list.append(['self.bol_saline_volume', DataTypes.F32]) - msg_list.append(['self.saline_bolus_state', DataTypes.U32]) + msg_list.append((self.saline_bolus, 'tgt_saline_volume', DataTypes.U32)) + msg_list.append((self.saline_bolus, 'cum_saline_volume', DataTypes.F32)) + msg_list.append((self.saline_bolus, 'bol_saline_volume', DataTypes.F32)) + msg_list.append((self.saline_bolus, 'saline_bolus_state', DataTypes.U32)) - self.process_into_vars(decoder_list = msg_list, - message = message) + self.process_into_vars(decoder_list = msg_list, message = message) self.saline_bolus_timestamp = timestamp @@ -183,13 +269,12 @@ @return: none """ msg_list = [] - msg_list.append(['self.set_uf_volume', DataTypes.F32]) - msg_list.append(['self.tgt_uf_rate', DataTypes.F32]) - msg_list.append(['self.uf_volume_delivered', DataTypes.F32]) - msg_list.append(['self.uf_state', DataTypes.U32]) + msg_list.append((self.ultrafiltration, 'set_uf_volume', DataTypes.F32)) + msg_list.append((self.ultrafiltration, 'tgt_uf_rate', DataTypes.F32)) + msg_list.append((self.ultrafiltration, 'uf_volume_delivered', DataTypes.F32)) + msg_list.append((self.ultrafiltration, 'uf_state', DataTypes.U32)) - self.process_into_vars(decoder_list = msg_list, - message = message) + self.process_into_vars(decoder_list = msg_list, message = message) self.uf_timestamp = timestamp @@ -203,12 +288,11 @@ @return: none """ msg_list = [] - msg_list.append(['self.tx_time_prescribed', DataTypes.U32]) - msg_list.append(['self.tx_time_elapsed', DataTypes.U32]) - msg_list.append(['self.tx_time_remaining', DataTypes.U32]) + msg_list.append((self.treatment_times, 'tx_time_prescribed', DataTypes.U32)) + msg_list.append((self.treatment_times, 'tx_time_elapsed', DataTypes.U32)) + msg_list.append((self.treatment_times, 'tx_time_remaining', DataTypes.U32)) - self.process_into_vars(decoder_list = msg_list, - message = message) + self.process_into_vars(decoder_list = msg_list, message = message) self.tx_time_timestamp = timestamp @@ -222,17 +306,16 @@ @return: none """ msg_list = [] - msg_list.append(['self.tx_sub_mode', DataTypes.U32]) - msg_list.append(['self.blood_prime_state', DataTypes.U32]) - msg_list.append(['self.dialysis_state', DataTypes.U32]) - msg_list.append(['self.isolated_uf_state', DataTypes.U32]) - msg_list.append(['self.tx_stop_state', DataTypes.U32]) - msg_list.append(['self.rinseback_state', DataTypes.U32]) - msg_list.append(['self.tx_recirc_state', DataTypes.U32]) - msg_list.append(['self.tx_end_state', DataTypes.U32]) + msg_list.append((self.treatment_states, 'tx_sub_mode', DataTypes.U32)) + msg_list.append((self.treatment_states, 'blood_prime_state', DataTypes.U32)) + msg_list.append((self.treatment_states, 'dialysis_state', DataTypes.U32)) + msg_list.append((self.treatment_states, 'isolated_uf_state', DataTypes.U32)) + msg_list.append((self.treatment_states, 'tx_stop_state', DataTypes.U32)) + msg_list.append((self.treatment_states, 'rinseback_state', DataTypes.U32)) + msg_list.append((self.treatment_states, 'tx_recirc_state', DataTypes.U32)) + msg_list.append((self.treatment_states, 'tx_end_state', DataTypes.U32)) - self.process_into_vars(decoder_list = msg_list, - message = message) + self.process_into_vars(decoder_list = msg_list, message = message) self.tx_state_timestamp = timestamp @@ -249,32 +332,33 @@ @return: none """ msg_list = [] - msg_list.append(['self.blood_flow_rate', DataTypes.U32]) - msg_list.append(['self.dialysate_flow_rate', DataTypes.U32]) - msg_list.append(['self.tx_duration', DataTypes.U32]) - msg_list.append(['self.saline_bolus_volume', DataTypes.U32]) - msg_list.append(['self.hep_stop_time', DataTypes.U32]) - msg_list.append(['self.hep_time', DataTypes.U32]) - msg_list.append(['self.acid_con', DataTypes.U32]) - msg_list.append(['self.bicarb_con', DataTypes.U32]) - msg_list.append(['self.dialyzer_type', DataTypes.U32]) - msg_list.append(['self.bp_interval', DataTypes.U32]) - msg_list.append(['self.rb_flow_rate', DataTypes.U32]) - msg_list.append(['self.rb_volume', DataTypes.U32]) - msg_list.append(['self.art_pressure_window', DataTypes.U32]) - msg_list.append(['self.venous_pressure_window', DataTypes.U32]) - msg_list.append(['self.venous_asymm_window', DataTypes.U32]) - msg_list.append(['self.tmp_limit_window', DataTypes.U32]) - msg_list.append(['self.dialysate_temp', DataTypes.F32]) - msg_list.append(['self.hep_dispense_rate', DataTypes.F32]) - msg_list.append(['self.hep_bolus_vol', DataTypes.F32]) - msg_list.append(['self.uf_vol', DataTypes.F32]) + msg_list.append((self.treatment_paramters, 'blood_flow_rate', DataTypes.U32)) + msg_list.append((self.treatment_paramters, 'dialysate_flow_rate', DataTypes.U32)) + msg_list.append((self.treatment_paramters, 'tx_duration', DataTypes.U32)) + msg_list.append((self.treatment_paramters, 'saline_bolus_volume', DataTypes.U32)) + msg_list.append((self.treatment_paramters, 'hep_stop_time', DataTypes.U32)) + msg_list.append((self.treatment_paramters, 'hep_time', DataTypes.U32)) + msg_list.append((self.treatment_paramters, 'acid_con', DataTypes.U32)) + msg_list.append((self.treatment_paramters, 'bicarb_con', DataTypes.U32)) + msg_list.append((self.treatment_paramters, 'dialyzer_type', DataTypes.U32)) + msg_list.append((self.treatment_paramters, 'bp_interval', DataTypes.U32)) + msg_list.append((self.treatment_paramters, 'rb_flow_rate', DataTypes.U32)) + msg_list.append((self.treatment_paramters, 'rb_volume', DataTypes.U32)) + msg_list.append((self.treatment_paramters, 'art_pressure_window', DataTypes.U32)) + msg_list.append((self.treatment_paramters, 'venous_pressure_window', DataTypes.U32)) + msg_list.append((self.treatment_paramters, 'venous_asymm_window', DataTypes.U32)) + msg_list.append((self.treatment_paramters, 'tmp_limit_window', DataTypes.U32)) + msg_list.append((self.treatment_paramters, 'dialysate_temp', DataTypes.F32)) + msg_list.append((self.treatment_paramters, 'hep_dispense_rate', DataTypes.F32)) + msg_list.append((self.treatment_paramters, 'hep_bolus_vol', DataTypes.F32)) + msg_list.append((self.treatment_paramters, 'uf_vol', DataTypes.F32)) - self.process_into_vars(decoder_list = msg_list, - message = message) + self.process_into_vars(decoder_list = msg_list, message = message) self.tx_param_req_timestamp = timestamp + +# ============================================================ Overrides and Requests ============================================================ def cmd_set_treatment_parameter(self, tx_param_id: int = 0, tx_param_value = 0 ): """ Constructs and sends set treatment parameter command to the TD.