Index: leahi_dialin/common/msg_defs.py =================================================================== diff -u -r6c90336ac2cd8cf34ac620cff431a847d9ddf557 -r775f2d7ca9a4d1c86c02bc27130f8765dc4156ad --- leahi_dialin/common/msg_defs.py (.../msg_defs.py) (revision 6c90336ac2cd8cf34ac620cff431a847d9ddf557) +++ leahi_dialin/common/msg_defs.py (.../msg_defs.py) (revision 775f2d7ca9a4d1c86c02bc27130f8765dc4156ad) @@ -134,6 +134,72 @@ END_POS_FIELD_28 = START_POS_FIELD_28 + 4 START_POS_FIELD_29 = END_POS_FIELD_28 END_POS_FIELD_29 = START_POS_FIELD_29 + 4 + START_POS_FIELD_30 = END_POS_FIELD_29 + END_POS_FIELD_30 = START_POS_FIELD_29 + 4 + START_POS_FIELD_31 = END_POS_FIELD_30 + END_POS_FIELD_31 = START_POS_FIELD_30 + 4 + START_POS_FIELD_32 = END_POS_FIELD_31 + END_POS_FIELD_32 = START_POS_FIELD_31 + 4 + START_POS_FIELD_33 = END_POS_FIELD_32 + END_POS_FIELD_33 = START_POS_FIELD_32 + 4 + START_POS_FIELD_34 = END_POS_FIELD_33 + END_POS_FIELD_34 = START_POS_FIELD_33 + 4 + START_POS_FIELD_35 = END_POS_FIELD_34 + END_POS_FIELD_35 = START_POS_FIELD_34 + 4 + START_POS_FIELD_36 = END_POS_FIELD_35 + END_POS_FIELD_36 = START_POS_FIELD_35 + 4 + START_POS_FIELD_37 = END_POS_FIELD_36 + END_POS_FIELD_37 = START_POS_FIELD_36 + 4 + START_POS_FIELD_38 = END_POS_FIELD_37 + END_POS_FIELD_38 = START_POS_FIELD_37 + 4 + START_POS_FIELD_39 = END_POS_FIELD_38 + END_POS_FIELD_39 = START_POS_FIELD_38 + 4 + START_POS_FIELD_40 = END_POS_FIELD_39 + END_POS_FIELD_40 = START_POS_FIELD_39 + 4 + START_POS_FIELD_41 = END_POS_FIELD_40 + END_POS_FIELD_41 = START_POS_FIELD_40 + 4 + START_POS_FIELD_42 = END_POS_FIELD_41 + END_POS_FIELD_42 = START_POS_FIELD_41 + 4 + START_POS_FIELD_43 = END_POS_FIELD_42 + END_POS_FIELD_43 = START_POS_FIELD_42 + 4 + START_POS_FIELD_44 = END_POS_FIELD_43 + END_POS_FIELD_44 = START_POS_FIELD_43 + 4 + START_POS_FIELD_45 = END_POS_FIELD_44 + END_POS_FIELD_45 = START_POS_FIELD_44 + 4 + START_POS_FIELD_46 = END_POS_FIELD_45 + END_POS_FIELD_46 = START_POS_FIELD_45 + 4 + START_POS_FIELD_47 = END_POS_FIELD_46 + END_POS_FIELD_47 = START_POS_FIELD_46 + 4 + START_POS_FIELD_48 = END_POS_FIELD_47 + END_POS_FIELD_48 = START_POS_FIELD_47 + 4 + START_POS_FIELD_49 = END_POS_FIELD_48 + END_POS_FIELD_49 = START_POS_FIELD_48 + 4 + START_POS_FIELD_50 = END_POS_FIELD_49 + END_POS_FIELD_50 = START_POS_FIELD_49 + 4 + START_POS_FIELD_51 = END_POS_FIELD_50 + END_POS_FIELD_51 = START_POS_FIELD_50 + 4 + START_POS_FIELD_52 = END_POS_FIELD_51 + END_POS_FIELD_52 = START_POS_FIELD_51 + 4 + START_POS_FIELD_53 = END_POS_FIELD_52 + END_POS_FIELD_53 = START_POS_FIELD_52 + 4 + START_POS_FIELD_54 = END_POS_FIELD_53 + END_POS_FIELD_54 = START_POS_FIELD_53 + 4 + START_POS_FIELD_55 = END_POS_FIELD_54 + END_POS_FIELD_55 = START_POS_FIELD_54 + 4 + START_POS_FIELD_56 = END_POS_FIELD_55 + END_POS_FIELD_56 = START_POS_FIELD_55 + 4 + START_POS_FIELD_57 = END_POS_FIELD_56 + END_POS_FIELD_57 = START_POS_FIELD_56 + 4 + START_POS_FIELD_58 = END_POS_FIELD_57 + END_POS_FIELD_58 = START_POS_FIELD_57 + 4 + START_POS_FIELD_59 = END_POS_FIELD_58 + END_POS_FIELD_59 = START_POS_FIELD_58 + 4 + START_POS_FIELD_60 = END_POS_FIELD_59 + END_POS_FIELD_60 = START_POS_FIELD_59 + 4 + START_POS_FIELD_61 = END_POS_FIELD_60 + END_POS_FIELD_61 = START_POS_FIELD_60 + 4 + START_POS_FIELD_62 = END_POS_FIELD_61 + END_POS_FIELD_62 = START_POS_FIELD_61 + 4 class MsgFieldPositionsFWVersions: @@ -155,4 +221,4 @@ START_POS_FPGA_MICRO = END_POS_FPGA_MINOR END_POS_FPGA_MICRO = START_POS_FPGA_MICRO + 1 START_POS_COMPATIBILITY_REV = END_POS_FPGA_MICRO - END_POS_COMPATIBILITY_REV = START_POS_COMPATIBILITY_REV + 4 \ No newline at end of file + END_POS_COMPATIBILITY_REV = START_POS_COMPATIBILITY_REV + 4 Index: leahi_dialin/dd/modules/drybicart.py =================================================================== diff -u -r1f2bf6d939eb4033dbedb7d7005494cc12fccbc6 -r775f2d7ca9a4d1c86c02bc27130f8765dc4156ad --- leahi_dialin/dd/modules/drybicart.py (.../drybicart.py) (revision 1f2bf6d939eb4033dbedb7d7005494cc12fccbc6) +++ leahi_dialin/dd/modules/drybicart.py (.../drybicart.py) (revision 775f2d7ca9a4d1c86c02bc27130f8765dc4156ad) @@ -20,14 +20,14 @@ # Project imports from leahi_dialin.common.constants import NO_RESET , RESET from leahi_dialin.common.generic_defs import DataTypes -from leahi_dialin.common.msg_defs import MsgIds +from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override +from dataclasses import dataclass from leahi_dialin.protocols.CAN import CanMessenger, CanChannels from leahi_dialin.utils.abstract_classes import AbstractSubSystem from leahi_dialin.utils.base import publish -from leahi_dialin.utils.conversions import integer_to_bytearray +from leahi_dialin.utils.conversions import integer_to_bytearray, float_to_bytearray - class DDDryBicart(AbstractSubSystem): """ DryBicart @@ -63,14 +63,17 @@ self.dd_dry_bicart_current_fill_time = 0 #: The Dry Bicart current fill time self.dd_dryBiCartType = 0 #: The Dry Bicart concentrate option index self.dd_dryBiCartDrainTimePeriod = 0 #: The Dry Bicart drain time period in sec + self.dd_dry_bicart_timestamp = 0 #: The timestamp of the last message + @publish(["msg_id_dd_dry_bicart_data", "dd_dry_bicart_fill_execution_state", "dd_bicarb_chamber_fill_execution_state", "dd_dry_bicart_drain_execution_state", "dd_dry_bicart_fill_cycle_counter", "dd_dry_bicart_max_fill_cycle_count", "dd_dry_bicart_fill_request", "dry_bicarb_chamber_fill_request", "dd_dry_bicart_drain_request", "dd_dry_bicart_last_fill_time", "dd_dry_bicart_current_fill_time", "dd_dryBiCartType", "dd_dryBiCartDrainTimePeriod", "dd_dry_bicart_timestamp"]) + def _handler_dry_bicart_sync(self, message, timestamp=0.0): """ Handles published dry bicart data messages. @@ -94,9 +97,9 @@ self.process_into_vars(decoder_list = msg_list, message = message) + self.dd_dry_bicart_timestamp = timestamp - def cmd_dry_bicart_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: """ Constructs and sends the dry bicart data broadcast interval override command @@ -237,3 +240,4 @@ override_text=str(small_large), logger=self.logger, can_interface=self.can_interface) + Index: leahi_dialin/utils/abstract_classes.py =================================================================== diff -u -r6c90336ac2cd8cf34ac620cff431a847d9ddf557 -r775f2d7ca9a4d1c86c02bc27130f8765dc4156ad --- leahi_dialin/utils/abstract_classes.py (.../abstract_classes.py) (revision 6c90336ac2cd8cf34ac620cff431a847d9ddf557) +++ leahi_dialin/utils/abstract_classes.py (.../abstract_classes.py) (revision 775f2d7ca9a4d1c86c02bc27130f8765dc4156ad) @@ -100,11 +100,11 @@ # If it's a instance variable (self.) then set it's value if variable_name.startswith('self'): - attr_name = variable_name[5:] - if not attr_name.isidentifier(): - print(f'Invalid attribute name: "{attr_name}"!') - raise ValueError('Invalid attribute name') - setattr(self, attr_name, value) + attr_path = variable_name[5:].split('.') + obj = self + for attr in attr_path[:-1]: + obj = getattr(obj, attr) + setattr(obj, attr_path[-1], value) start_pos = end_pos if debug: print('Finished cycle\n')