|
|
- """Attempt detection of current chip / CPU."""
- import sys
-
- AM33XX = "AM33XX"
- BCM2XXX = "BCM2XXX"
- ESP8266 = "ESP8266"
- SAMD21 = "SAMD21"
- STM32 = "STM32"
- SUN8I = "SUN8I"
- GENERIC_X86 = "GENERIC_X86"
-
- class Chip:
- """Attempt detection of current chip / CPU."""
- def __init__(self, detector):
- self.detector = detector
-
- @property
- # pylint: disable=invalid-name
- def id(self):
- """Return a unique id for the detected chip, if any."""
- platform = sys.platform
- if platform == "linux":
- return self._linux_id()
- if platform == "esp8266":
- return ESP8266
- if platform == "samd21":
- return SAMD21
- if platform == "pyboard":
- return STM32
- return None
- # pylint: enable=invalid-name
-
- def _linux_id(self):
- """Attempt to detect the CPU on a computer running the Linux kernel."""
- linux_id = None
-
- hardware = self.detector.get_cpuinfo_field("Hardware")
-
- if hardware is None:
- vendor_id = self.detector.get_cpuinfo_field("vendor_id")
- if vendor_id in ("GenuineIntel", "AuthenticAMD"):
- linux_id = GENERIC_X86
- elif hardware in ("BCM2708", "BCM2708", "BCM2835"):
- linux_id = BCM2XXX
- elif "AM33XX" in hardware:
- linux_id = AM33XX
- elif "sun8i" in hardware:
- linux_id = SUN8I
-
- return linux_id
-
- def __getattr__(self, attr):
- """
- Detect whether the given attribute is the currently-detected chip. See
- list of constants at the top of this module for available options.
- """
- if self.id == attr:
- return True
- return False
|