Adafruit_Python_PlatformDetect/adafruit_platformdetect/chip.py
Brennen Bearnes 534776a825 add tweaks for pylint; detect (some) generic linux systems; rename class
Main wrapper class is now `Detector`, which is more noun-y than verb-y.

Added GENERIC_X86 and GENERIC_LINUX_PC to chip and board, respectively.

Made pylint happier.
2018-12-13 14:12:14 -07:00

59 lines
1.7 KiB
Python

"""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