def physical_to_logical(self, addr: LcnAddr) -> LcnAddr: """Convert the physical segment id of an address to the logical one. :param addr: The module's/group's address :type addr: :class:`~LcnAddr` :returns: The module's/group's address :rtype: :class:`~LcnAddr` """ return LcnAddr( self.local_seg_id if addr.get_seg_id() == 0 else addr.get_seg_id(), addr.get_id(), addr.is_group(), )
def generate_address_header(addr: LcnAddr, local_seg_id: int, wants_ack: bool) -> str: """Generate a PCK command address header. :param addr: The module's/group's address :type addr: :class:`~LcnAddr` :param int local_seg_id: The local segment id :param bool wants_ack: Is an acknowledge requested. :return: The PCK address header string. :rtype: str """ return ">{:s}{:03d}{:03d}{:s}".format( "G" if addr.is_group() else "M", addr.get_physical_seg_id(local_seg_id), addr.get_id(), "!" if wants_ack else ".", )