Source code for tropicsquare.config.sensors

"""Sensors configuration (CFG_SENSORS @ 0x08)"""

from tropicsquare.config.base import BaseConfig
from tropicsquare.config.constants import (
    SENSORS_PTRNG0_TEST_DIS_BIT,
    SENSORS_PTRNG1_TEST_DIS_BIT,
    SENSORS_OSCMON_DIS_BIT,
    SENSORS_SHIELD_DIS_BIT,
    SENSORS_VMON_DIS_BIT,
    SENSORS_GLITCH_DIS_BIT,
    SENSORS_TEMP_DIS_BIT,
    SENSORS_LASER_DIS_BIT,
    SENSORS_EMP_DIS_BIT,
    SENSORS_CPU_ALERT_DIS_BIT,
    SENSORS_BF_PIN_VER_DIS_BIT,
    SENSORS_BF_SCB_DIS_BIT,
    SENSORS_BF_CPB_DIS_BIT,
    SENSORS_BF_ECC_DIS_BIT,
    SENSORS_BF_RAM_DIS_BIT,
    SENSORS_BF_EKDB_DIS_BIT,
    SENSORS_BF_IMEM_DIS_BIT,
    SENSORS_BF_PLATFORM_DIS_BIT
)


[docs] class SensorsConfig(BaseConfig): """Sensors and fault detection configuration register. Controls security sensors and bit-flip detection mechanisms. Each field disables a specific security feature when set to True. Fields: - ptrng0_test_dis: PTRNG0 test disable (bit 0) - ptrng1_test_dis: PTRNG1 test disable (bit 1) - oscmon_dis: Oscillator monitoring disable (bit 2) - shield_dis: Shield monitoring disable (bit 3) - vmon_dis: Voltage monitoring disable (bit 4) - glitch_dis: Glitch detection disable (bit 5) - temp_dis: Temperature sensor disable (bit 6) - laser_dis: Laser detection disable (bit 7) - emp_dis: EMP detection disable (bit 8) - cpu_alert_dis: CPU alert disable (bit 9) - bf_pin_ver_dis: Bit-flip PIN verification disable (bit 10) - bf_scb_dis: Bit-flip SCB disable (bit 11) - bf_cpb_dis: Bit-flip CPB disable (bit 12) - bf_ecc_dis: Bit-flip ECC disable (bit 13) - bf_ram_dis: Bit-flip RAM disable (bit 14) - bf_ekdb_dis: Bit-flip EKDB disable (bit 15) - bf_imem_dis: Bit-flip instruction memory disable (bit 16) - bf_platform_dis: Bit-flip platform disable (bit 17) """ def _get_bit(self, bit_pos): """Helper to get bit value.""" return bool((self._value >> bit_pos) & 1) def _set_bit(self, bit_pos, value): """Helper to set bit value.""" if value: self._value |= (1 << bit_pos) else: self._value &= ~(1 << bit_pos) @property def ptrng0_test_dis(self) -> bool: """PTRNG0 test disable (bit 0).""" return self._get_bit(SENSORS_PTRNG0_TEST_DIS_BIT) @ptrng0_test_dis.setter def ptrng0_test_dis(self, value: bool) -> None: self._set_bit(SENSORS_PTRNG0_TEST_DIS_BIT, value) @property def ptrng1_test_dis(self) -> bool: """PTRNG1 test disable (bit 1).""" return self._get_bit(SENSORS_PTRNG1_TEST_DIS_BIT) @ptrng1_test_dis.setter def ptrng1_test_dis(self, value: bool) -> None: self._set_bit(SENSORS_PTRNG1_TEST_DIS_BIT, value) @property def oscmon_dis(self) -> bool: """Oscillator monitoring disable (bit 2).""" return self._get_bit(SENSORS_OSCMON_DIS_BIT) @oscmon_dis.setter def oscmon_dis(self, value: bool) -> None: self._set_bit(SENSORS_OSCMON_DIS_BIT, value) @property def shield_dis(self) -> bool: """Shield monitoring disable (bit 3).""" return self._get_bit(SENSORS_SHIELD_DIS_BIT) @shield_dis.setter def shield_dis(self, value: bool) -> None: self._set_bit(SENSORS_SHIELD_DIS_BIT, value) @property def vmon_dis(self) -> bool: """Voltage monitoring disable (bit 4).""" return self._get_bit(SENSORS_VMON_DIS_BIT) @vmon_dis.setter def vmon_dis(self, value: bool) -> None: self._set_bit(SENSORS_VMON_DIS_BIT, value) @property def glitch_dis(self) -> bool: """Glitch detection disable (bit 5).""" return self._get_bit(SENSORS_GLITCH_DIS_BIT) @glitch_dis.setter def glitch_dis(self, value: bool) -> None: self._set_bit(SENSORS_GLITCH_DIS_BIT, value) @property def temp_dis(self) -> bool: """Temperature sensor disable (bit 6).""" return self._get_bit(SENSORS_TEMP_DIS_BIT) @temp_dis.setter def temp_dis(self, value: bool) -> None: self._set_bit(SENSORS_TEMP_DIS_BIT, value) @property def laser_dis(self) -> bool: """Laser detection disable (bit 7).""" return self._get_bit(SENSORS_LASER_DIS_BIT) @laser_dis.setter def laser_dis(self, value: bool) -> None: self._set_bit(SENSORS_LASER_DIS_BIT, value) @property def emp_dis(self) -> bool: """EMP detection disable (bit 8).""" return self._get_bit(SENSORS_EMP_DIS_BIT) @emp_dis.setter def emp_dis(self, value: bool) -> None: self._set_bit(SENSORS_EMP_DIS_BIT, value) @property def cpu_alert_dis(self) -> bool: """CPU alert disable (bit 9).""" return self._get_bit(SENSORS_CPU_ALERT_DIS_BIT) @cpu_alert_dis.setter def cpu_alert_dis(self, value: bool) -> None: self._set_bit(SENSORS_CPU_ALERT_DIS_BIT, value) @property def bf_pin_ver_dis(self) -> bool: """Bit-flip PIN verification disable (bit 10).""" return self._get_bit(SENSORS_BF_PIN_VER_DIS_BIT) @bf_pin_ver_dis.setter def bf_pin_ver_dis(self, value: bool) -> None: self._set_bit(SENSORS_BF_PIN_VER_DIS_BIT, value) @property def bf_scb_dis(self) -> bool: """Bit-flip SCB disable (bit 11).""" return self._get_bit(SENSORS_BF_SCB_DIS_BIT) @bf_scb_dis.setter def bf_scb_dis(self, value: bool) -> None: self._set_bit(SENSORS_BF_SCB_DIS_BIT, value) @property def bf_cpb_dis(self) -> bool: """Bit-flip CPB disable (bit 12).""" return self._get_bit(SENSORS_BF_CPB_DIS_BIT) @bf_cpb_dis.setter def bf_cpb_dis(self, value: bool) -> None: self._set_bit(SENSORS_BF_CPB_DIS_BIT, value) @property def bf_ecc_dis(self) -> bool: """Bit-flip ECC disable (bit 13).""" return self._get_bit(SENSORS_BF_ECC_DIS_BIT) @bf_ecc_dis.setter def bf_ecc_dis(self, value: bool) -> None: self._set_bit(SENSORS_BF_ECC_DIS_BIT, value) @property def bf_ram_dis(self) -> bool: """Bit-flip RAM disable (bit 14).""" return self._get_bit(SENSORS_BF_RAM_DIS_BIT) @bf_ram_dis.setter def bf_ram_dis(self, value: bool) -> None: self._set_bit(SENSORS_BF_RAM_DIS_BIT, value) @property def bf_ekdb_dis(self) -> bool: """Bit-flip EKDB disable (bit 15).""" return self._get_bit(SENSORS_BF_EKDB_DIS_BIT) @bf_ekdb_dis.setter def bf_ekdb_dis(self, value: bool) -> None: self._set_bit(SENSORS_BF_EKDB_DIS_BIT, value) @property def bf_imem_dis(self) -> bool: """Bit-flip instruction memory disable (bit 16).""" return self._get_bit(SENSORS_BF_IMEM_DIS_BIT) @bf_imem_dis.setter def bf_imem_dis(self, value: bool) -> None: self._set_bit(SENSORS_BF_IMEM_DIS_BIT, value) @property def bf_platform_dis(self) -> bool: """Bit-flip platform disable (bit 17).""" return self._get_bit(SENSORS_BF_PLATFORM_DIS_BIT) @bf_platform_dis.setter def bf_platform_dis(self, value: bool) -> None: self._set_bit(SENSORS_BF_PLATFORM_DIS_BIT, value)
[docs] def to_dict(self) -> dict: """Export fields as dictionary. :returns: Configuration fields and their values :rtype: dict """ return { 'ptrng0_test_dis': self.ptrng0_test_dis, 'ptrng1_test_dis': self.ptrng1_test_dis, 'oscmon_dis': self.oscmon_dis, 'shield_dis': self.shield_dis, 'vmon_dis': self.vmon_dis, 'glitch_dis': self.glitch_dis, 'temp_dis': self.temp_dis, 'laser_dis': self.laser_dis, 'emp_dis': self.emp_dis, 'cpu_alert_dis': self.cpu_alert_dis, 'bf_pin_ver_dis': self.bf_pin_ver_dis, 'bf_scb_dis': self.bf_scb_dis, 'bf_cpb_dis': self.bf_cpb_dis, 'bf_ecc_dis': self.bf_ecc_dis, 'bf_ram_dis': self.bf_ram_dis, 'bf_ekdb_dis': self.bf_ekdb_dis, 'bf_imem_dis': self.bf_imem_dis, 'bf_platform_dis': self.bf_platform_dis }
[docs] def __str__(self) -> str: """Human-readable representation.""" fields = self.to_dict() enabled_sensors = [k for k, v in fields.items() if not v] disabled_sensors = [k for k, v in fields.items() if v] return "SensorsConfig({} enabled, {} disabled)".format( len(enabled_sensors), len(disabled_sensors))