Source code for tropicsquare.config.base

"""Base configuration class for TROPIC01 config objects"""


[docs] class BaseConfig: """Base class for all configuration objects. Configuration objects represent 32-bit hardware registers that control various aspects of TROPIC01 operation. Each config object provides bit-level access to individual configuration fields. Default value is 0xFFFFFFFF (all bits set) to prevent accidental erasure of I-CONFIG memory, where bits can only be changed from 1 to 0 (irreversible operation). Attributes: _value: 32-bit integer holding the raw configuration value """
[docs] def __init__(self, value: int = 0xFFFFFFFF) -> None: """Initialize config object. :param value: 32-bit configuration value (default: 0xFFFFFFFF) """ self._value = value
[docs] @classmethod def from_bytes(cls, data: bytes) -> 'BaseConfig': """Create config object from raw bytes. :param data: 4 bytes in big-endian format :returns: New config object instance :raises ValueError: If data is not exactly 4 bytes """ if len(data) != 4: raise ValueError("Expected 4 bytes, got {}".format(len(data))) value = int.from_bytes(data, 'little') return cls(value)
[docs] def to_bytes(self) -> bytes: """Convert config object to raw bytes. :returns: 4 bytes in big-endian format """ return self._value.to_bytes(4, 'little')
[docs] def to_dict(self) -> dict: """Export configuration fields as dictionary. :returns: Dictionary mapping field names to values :rtype: dict :raises NotImplementedError: Must be implemented by subclasses """ raise NotImplementedError("Subclasses must implement to_dict()")
[docs] def __repr__(self) -> str: """Machine-readable representation.""" return "{}(0x{:08x})".format(self.__class__.__name__, self._value)
[docs] def __str__(self) -> str: """Human-readable representation. Default implementation shows class name and hex value. Subclasses should override for more detailed output. """ return "{}(0x{:08x})".format(self.__class__.__name__, self._value)