Source code for udsoncan.common.DataFormatIdentifier

__all__ = ['DataFormatIdentifier']

import struct
from udsoncan import tools

from typing import Union


[docs]class DataFormatIdentifier: """ Defines the compression and encryption method of a specific chunk of data. Mainly used by the :ref:`RequestUpload<RequestUpload>` and :ref:`RequestDownload<RequestDownload>` services :param compression: Value between 0 and 0xF specifying the compression method. Only the value 0 has a meaning defined by UDS standard and it is `No compression`. All other values are ECU manufacturer specific. :type compression: int :param encryption: Value between 0 and 0xF specifying the encryption method. Only the value 0 has a meaning defined by UDS standard and it is `No encryption`. All other values are ECU manufacturer specific. :type encryption: int """ compression: int encryption: int def __init__(self, compression: int = 0, encryption: int = 0): for param in (compression, encryption): tools.validate_int(param, min=0, max=0xF, name="compression and encryption method") self.compression = compression self.encryption = encryption @classmethod def from_byte(cls, byte: Union[bytes, int]) -> "DataFormatIdentifier": byte = int(byte) return cls(compression=(byte >> 4) & 0xF, encryption=(byte & 0xF)) def get_byte_as_int(self) -> int: return ((self.compression & 0xF) << 4) | (self.encryption & 0xF) def get_byte(self) -> bytes: return struct.pack('B', self.get_byte_as_int()) def __str__(self) -> str: return 'Compression:0x%x, Encryption:0x%x' % (self.compression, self.encryption) def __repr__(self) -> str: return '<%s: %s at 0x%08x>' % (self.__class__.__name__, str(self), id(self))