MikrofonSensor und TemperaturSenor die zwei Python programme funktionieren. mit den jeweiligen 2 json Datein. Beim TemperaturSensor wird im Terminal keine Wertre ausgegeben aber in der json Datei kann man die Temp und Hum sehen.
This commit is contained in:
parent
4c654ec969
commit
1751076592
2614 changed files with 349009 additions and 0 deletions
134
lib/python3.11/site-packages/adafruit_platformdetect/__init__.py
Normal file
134
lib/python3.11/site-packages/adafruit_platformdetect/__init__.py
Normal file
|
@ -0,0 +1,134 @@
|
|||
# SPDX-FileCopyrightText: 2014-2018 Tony DiCola, Limor Fried, Brennen Bearnes
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
"""
|
||||
Attempt to detect the current platform.
|
||||
"""
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
try:
|
||||
from typing import Optional
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
from adafruit_platformdetect.board import Board
|
||||
from adafruit_platformdetect.chip import Chip
|
||||
|
||||
# Needed to find libs (like libusb) installed by homebrew on Apple Silicon
|
||||
if sys.platform == "darwin":
|
||||
os.environ["DYLD_FALLBACK_LIBRARY_PATH"] = "/opt/homebrew/lib/"
|
||||
|
||||
|
||||
# Various methods here may retain state in future, so tell pylint not to worry
|
||||
# that they don't use self right now:
|
||||
# pylint: disable=no-self-use
|
||||
class Detector:
|
||||
"""Wrap various platform detection functions."""
|
||||
|
||||
def __init__(self) -> None:
|
||||
self.board = Board(self)
|
||||
self.chip = Chip(self)
|
||||
|
||||
def get_cpuinfo_field(self, field: str) -> Optional[str]:
|
||||
"""
|
||||
Search /proc/cpuinfo for a field and return its value, if found,
|
||||
otherwise None.
|
||||
"""
|
||||
# Match a line like 'Hardware : BCM2709':
|
||||
pattern = r"^" + field + r"\s+:\s+(.*)$"
|
||||
|
||||
with open("/proc/cpuinfo", "r", encoding="utf-8") as infile:
|
||||
cpuinfo = infile.read().split("\n")
|
||||
for line in cpuinfo:
|
||||
match = re.search(pattern, line, flags=re.IGNORECASE)
|
||||
if match:
|
||||
return match.group(1)
|
||||
return None
|
||||
|
||||
def check_dt_compatible_value(self, value: str) -> bool:
|
||||
"""
|
||||
Search /proc/device-tree/compatible for a value and return True, if found,
|
||||
otherwise False.
|
||||
"""
|
||||
# Match a value like 'qcom,apq8016-sbc':
|
||||
dt_compatible = self.get_device_compatible()
|
||||
if dt_compatible and value in dt_compatible:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def get_armbian_release_field(self, field: str) -> Optional[str]:
|
||||
"""
|
||||
Search /etc/armbian-release, if it exists, for a field and return its
|
||||
value, if found, otherwise None.
|
||||
"""
|
||||
field_value = None
|
||||
|
||||
pattern = r"^" + field + r"=(.*)"
|
||||
try:
|
||||
with open("/etc/armbian-release", "r", encoding="utf-8") as release_file:
|
||||
armbian = release_file.read().split("\n")
|
||||
for line in armbian:
|
||||
match = re.search(pattern, line)
|
||||
if match:
|
||||
field_value = match.group(1)
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
|
||||
return field_value
|
||||
|
||||
def get_device_model(self) -> Optional[str]:
|
||||
"""
|
||||
Search /proc/device-tree/model for the device model and return its value, if found,
|
||||
otherwise None.
|
||||
"""
|
||||
try:
|
||||
with open("/proc/device-tree/model", "r", encoding="utf-8") as model_file:
|
||||
return model_file.read()
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
return None
|
||||
|
||||
def get_device_compatible(self) -> Optional[str]:
|
||||
"""
|
||||
Search /proc/device-tree/compatible for the compatible chip name.
|
||||
"""
|
||||
try:
|
||||
with open(
|
||||
"/proc/device-tree/compatible", "r", encoding="utf-8"
|
||||
) as model_file:
|
||||
return model_file.read()
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
return None
|
||||
|
||||
def check_board_asset_tag_value(self) -> Optional[str]:
|
||||
"""
|
||||
Search /sys/devices/virtual/dmi/id for the device model and return its value, if found,
|
||||
otherwise None.
|
||||
"""
|
||||
try:
|
||||
with open(
|
||||
"/sys/devices/virtual/dmi/id/board_asset_tag", "r", encoding="utf-8"
|
||||
) as tag_file:
|
||||
return tag_file.read().strip()
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
return None
|
||||
|
||||
def check_board_name_value(self) -> Optional[str]:
|
||||
"""
|
||||
Search /sys/devices/virtual/dmi/id for the board name and return its value, if found,
|
||||
otherwise None. Debian/ubuntu based
|
||||
"""
|
||||
try:
|
||||
with open(
|
||||
"/sys/devices/virtual/dmi/id/board_name", "r", encoding="utf-8"
|
||||
) as board_name_file:
|
||||
return board_name_file.read().strip()
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
return None
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
1362
lib/python3.11/site-packages/adafruit_platformdetect/board.py
Normal file
1362
lib/python3.11/site-packages/adafruit_platformdetect/board.py
Normal file
File diff suppressed because it is too large
Load diff
483
lib/python3.11/site-packages/adafruit_platformdetect/chip.py
Normal file
483
lib/python3.11/site-packages/adafruit_platformdetect/chip.py
Normal file
|
@ -0,0 +1,483 @@
|
|||
# SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
"""
|
||||
`adafruit_platformdetect.chip`
|
||||
================================================================================
|
||||
|
||||
Attempt detection of current chip / CPU
|
||||
|
||||
* Author(s): Melissa LeBlanc-Williams
|
||||
|
||||
Implementation Notes
|
||||
--------------------
|
||||
|
||||
**Software and Dependencies:**
|
||||
|
||||
* Linux and Python 3.7 or Higher
|
||||
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
try:
|
||||
from typing import Optional
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
from adafruit_platformdetect.constants import chips
|
||||
|
||||
__version__ = "3.79.0"
|
||||
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_PlatformDetect.git"
|
||||
|
||||
|
||||
class Chip:
|
||||
"""Attempt detection of current chip / CPU."""
|
||||
|
||||
def __init__(self, detector) -> None:
|
||||
self.detector = detector
|
||||
self._chip_id = None
|
||||
|
||||
# pylint: disable=invalid-name,too-many-branches,too-many-return-statements
|
||||
@property
|
||||
def id(
|
||||
self,
|
||||
) -> Optional[str]:
|
||||
"""Return a unique id for the detected chip, if any."""
|
||||
# There are some times we want to trick the platform detection
|
||||
# say if a raspberry pi doesn't have the right ID, or for testing
|
||||
|
||||
# Caching
|
||||
if self._chip_id:
|
||||
return self._chip_id
|
||||
|
||||
if getattr(os, "environ", None) is not None:
|
||||
try:
|
||||
return os.environ["BLINKA_FORCECHIP"]
|
||||
except KeyError: # no forced chip, continue with testing!
|
||||
pass
|
||||
|
||||
# Special cases controlled by environment var
|
||||
if os.environ.get("BLINKA_FT232H"):
|
||||
from pyftdi.usbtools import UsbTools
|
||||
|
||||
# look for it based on PID/VID
|
||||
count = len(UsbTools.find_all([(0x0403, 0x6014)]))
|
||||
if count == 0:
|
||||
raise RuntimeError(
|
||||
"BLINKA_FT232H environment variable "
|
||||
+ "set, but no FT232H device found"
|
||||
)
|
||||
self._chip_id = chips.FT232H
|
||||
return self._chip_id
|
||||
if os.environ.get("BLINKA_FT2232H"):
|
||||
from pyftdi.usbtools import UsbTools
|
||||
|
||||
# look for it based on PID/VID
|
||||
count = len(UsbTools.find_all([(0x0403, 0x6010)]))
|
||||
if count == 0:
|
||||
raise RuntimeError(
|
||||
"BLINKA_FT2232H environment variable "
|
||||
+ "set, but no FT2232H device found"
|
||||
)
|
||||
self._chip_id = chips.FT2232H
|
||||
return self._chip_id
|
||||
if os.environ.get("BLINKA_FT4232H"):
|
||||
from pyftdi.usbtools import UsbTools
|
||||
|
||||
# look for it based on PID/VID
|
||||
count = len(UsbTools.find_all([(0x0403, 0x6011)]))
|
||||
if count == 0:
|
||||
raise RuntimeError(
|
||||
"BLINKA_FT4232H environment variable "
|
||||
+ "set, but no FT4232H device found"
|
||||
)
|
||||
self._chip_id = chips.FT4232H
|
||||
return self._chip_id
|
||||
if os.environ.get("BLINKA_MCP2221"):
|
||||
import hid
|
||||
|
||||
# look for it based on PID/VID
|
||||
for dev in hid.enumerate():
|
||||
if dev["vendor_id"] == 0x04D8 and dev["product_id"] == 0x00DD:
|
||||
self._chip_id = chips.MCP2221
|
||||
return self._chip_id
|
||||
raise RuntimeError(
|
||||
"BLINKA_MCP2221 environment variable "
|
||||
+ "set, but no MCP2221 device found"
|
||||
)
|
||||
if os.environ.get("BLINKA_OS_AGNOSTIC"):
|
||||
# we don't need to look for this chip, it's just a flag
|
||||
self._chip_id = chips.OS_AGNOSTIC
|
||||
return self._chip_id
|
||||
if os.environ.get("BLINKA_U2IF"):
|
||||
import hid
|
||||
|
||||
# look for it based on PID/VID
|
||||
for dev in hid.enumerate():
|
||||
vendor = dev["vendor_id"]
|
||||
product = dev["product_id"]
|
||||
# NOTE: If any products are added here, they need added
|
||||
# to _rp2040_u2if_id() in board.py as well.
|
||||
# pylint: disable=too-many-boolean-expressions
|
||||
if (
|
||||
(
|
||||
# Raspberry Pi Pico
|
||||
vendor == 0xCAFE
|
||||
and product == 0x4005
|
||||
)
|
||||
or (
|
||||
# Waveshare RP2040 One
|
||||
vendor == 0x2E8A
|
||||
and product == 0x103A
|
||||
)
|
||||
or (
|
||||
# Feather RP2040
|
||||
# Itsy Bitsy RP2040
|
||||
# QT Py RP2040
|
||||
# QT2040 Trinkey
|
||||
# MacroPad RP2040
|
||||
# Feather RP2040 ThinkInk
|
||||
# Feather RP2040 RFM
|
||||
# Feather RP2040 CAN Bus
|
||||
vendor == 0x239A
|
||||
and product
|
||||
in (
|
||||
0x00F1,
|
||||
0x00FD,
|
||||
0x00F7,
|
||||
0x0109,
|
||||
0x0107,
|
||||
0x812C,
|
||||
0x812E,
|
||||
0x8130,
|
||||
0x0105,
|
||||
)
|
||||
)
|
||||
):
|
||||
self._chip_id = chips.RP2040_U2IF
|
||||
return self._chip_id
|
||||
raise RuntimeError(
|
||||
"BLINKA_U2IF environment variable "
|
||||
+ "set, but no compatible device found"
|
||||
)
|
||||
if os.environ.get("BLINKA_GREATFET"):
|
||||
import usb
|
||||
|
||||
if usb.core.find(idVendor=0x1D50, idProduct=0x60E6) is not None:
|
||||
self._chip_id = chips.LPC4330
|
||||
return self._chip_id
|
||||
raise RuntimeError(
|
||||
"BLINKA_GREATFET environment variable "
|
||||
+ "set, but no GreatFET device found"
|
||||
)
|
||||
if os.environ.get("BLINKA_NOVA"):
|
||||
self._chip_id = chips.BINHO
|
||||
return self._chip_id
|
||||
|
||||
platform = sys.platform
|
||||
if platform in ("linux", "linux2"):
|
||||
self._chip_id = self._linux_id()
|
||||
return self._chip_id
|
||||
if platform == "esp8266":
|
||||
self._chip_id = chips.ESP8266
|
||||
return self._chip_id
|
||||
if platform == "samd21":
|
||||
self._chip_id = chips.SAMD21
|
||||
return self._chip_id
|
||||
if platform == "pyboard":
|
||||
self._chip_id = chips.STM32F405
|
||||
return self._chip_id
|
||||
if platform == "rp2":
|
||||
self._chip_id = chips.RP2040
|
||||
return self._chip_id
|
||||
# nothing found!
|
||||
return None
|
||||
|
||||
# pylint: enable=invalid-name
|
||||
|
||||
def _linux_id(self) -> Optional[str]:
|
||||
# pylint: disable=too-many-branches,too-many-statements
|
||||
# pylint: disable=too-many-return-statements
|
||||
"""Attempt to detect the CPU on a computer running the Linux kernel."""
|
||||
if self.detector.check_dt_compatible_value("beagle,am67a-beagley-ai"):
|
||||
return chips.AM67A
|
||||
if self.detector.check_dt_compatible_value("ti,am625"):
|
||||
return chips.AM625X
|
||||
if self.detector.check_dt_compatible_value("ti,am654"):
|
||||
return chips.AM65XX
|
||||
|
||||
if self.detector.check_dt_compatible_value("ti,am652"):
|
||||
return chips.AM65XX
|
||||
|
||||
if self.detector.check_dt_compatible_value("sun4i-a10"):
|
||||
return chips.A10
|
||||
|
||||
if self.detector.check_dt_compatible_value("sun7i-a20"):
|
||||
return chips.A20
|
||||
|
||||
if self.detector.check_dt_compatible_value("amlogic,g12a"):
|
||||
return chips.S905Y2
|
||||
if self.detector.check_dt_compatible_value("amlogic, g12a"):
|
||||
return chips.S905X3
|
||||
|
||||
if self.detector.check_dt_compatible_value("sun8i-h3"):
|
||||
return chips.H3
|
||||
|
||||
if self.detector.check_dt_compatible_value("qcom,apq8016"):
|
||||
return chips.APQ8016
|
||||
|
||||
if self.detector.check_dt_compatible_value("fu500"):
|
||||
return chips.HFU540
|
||||
|
||||
if self.detector.check_dt_compatible_value("sun20iw1p1"):
|
||||
return chips.C906
|
||||
|
||||
# Older Builds
|
||||
if self.detector.check_dt_compatible_value("sifive"):
|
||||
return chips.JH71X0
|
||||
|
||||
# Newer Builds
|
||||
if self.detector.check_dt_compatible_value("jh7100"):
|
||||
return chips.JH71X0
|
||||
|
||||
if self.detector.check_dt_compatible_value("jh7110"):
|
||||
return chips.JH7110
|
||||
|
||||
if self.detector.check_dt_compatible_value("sun8i-a33"):
|
||||
return chips.A33
|
||||
|
||||
if self.detector.check_dt_compatible_value("rockchip,rk3308"):
|
||||
return chips.RK3308
|
||||
|
||||
if self.detector.check_dt_compatible_value("radxa,rock-4c-plus"):
|
||||
return chips.RK3399_T
|
||||
|
||||
if self.detector.check_dt_compatible_value("rockchip,rk3399pro"):
|
||||
return chips.RK3399PRO
|
||||
|
||||
if self.detector.check_dt_compatible_value("rockchip,rk3399"):
|
||||
return chips.RK3399
|
||||
|
||||
if self.detector.check_dt_compatible_value("rockchip,rk3288"):
|
||||
return chips.RK3288
|
||||
|
||||
if self.detector.check_dt_compatible_value("rockchip,rk3328"):
|
||||
return chips.RK3328
|
||||
|
||||
if self.detector.check_dt_compatible_value("rockchip,rk3566"):
|
||||
return chips.RK3566
|
||||
|
||||
if self.detector.check_dt_compatible_value("rockchip,rk3568"):
|
||||
return chips.RK3568
|
||||
|
||||
if self.detector.check_dt_compatible_value("rockchip,rk3588"):
|
||||
return chips.RK3588
|
||||
|
||||
if self.detector.check_dt_compatible_value("rockchip,rv1106"):
|
||||
return chips.RV1106
|
||||
|
||||
if self.detector.check_dt_compatible_value("rockchip,rv1103"):
|
||||
return chips.RV1103
|
||||
|
||||
if self.detector.check_dt_compatible_value("amlogic,a311d"):
|
||||
return chips.A311D
|
||||
|
||||
if self.detector.check_dt_compatible_value("st,stm32mp157"):
|
||||
return chips.STM32MP157
|
||||
|
||||
if self.detector.check_dt_compatible_value("st,stm32mp153"):
|
||||
return chips.STM32MP157DAA1
|
||||
|
||||
if self.detector.check_dt_compatible_value("sun50i-a64"):
|
||||
return chips.A64
|
||||
|
||||
if self.detector.check_dt_compatible_value("sun50i-h5"):
|
||||
return chips.H5
|
||||
|
||||
if self.detector.check_dt_compatible_value("sun50i-h618"):
|
||||
return chips.H618
|
||||
|
||||
if self.detector.check_dt_compatible_value("sun50i-h616"):
|
||||
return chips.H616
|
||||
|
||||
if self.detector.check_dt_compatible_value("sun50iw9"):
|
||||
return chips.H616
|
||||
|
||||
if self.detector.check_dt_compatible_value("sun50i-h6"):
|
||||
return chips.H6
|
||||
|
||||
if self.detector.check_dt_compatible_value("sun55iw3"):
|
||||
return chips.T527
|
||||
|
||||
if self.detector.check_dt_compatible_value("spacemit,k1-x"):
|
||||
return chips.K1
|
||||
|
||||
if self.detector.check_dt_compatible_value("renesas,r9a09g056"):
|
||||
return chips.RZV2N
|
||||
|
||||
if self.detector.check_dt_compatible_value("renesas,r9a09g057"):
|
||||
return chips.RZV2H
|
||||
|
||||
if self.detector.check_dt_compatible_value("mediatek,mt8167"):
|
||||
return chips.MT8167
|
||||
|
||||
if self.detector.check_dt_compatible_value("imx6ull"):
|
||||
return chips.IMX6ULL
|
||||
|
||||
if self.detector.check_dt_compatible_value("ti,j721e"):
|
||||
return chips.TDA4VM
|
||||
|
||||
if self.detector.check_dt_compatible_value("sun20i-d1"):
|
||||
return chips.D1_RISCV
|
||||
|
||||
if self.detector.check_dt_compatible_value("imx8mp"):
|
||||
return chips.IMX8MP
|
||||
|
||||
if self.detector.check_dt_compatible_value("libretech,aml-s905x-cc"):
|
||||
return chips.S905X
|
||||
|
||||
if self.detector.check_dt_compatible_value("light-lpi4a"):
|
||||
return chips.TH1520
|
||||
|
||||
if self.detector.check_dt_compatible_value("hobot,x3"):
|
||||
return chips.SUNRISE_X3
|
||||
|
||||
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 == "AuthenticAMD":
|
||||
model_name = self.detector.get_cpuinfo_field("model name").upper()
|
||||
if "RYZEN EMBEDDED V1202B" in model_name:
|
||||
linux_id = chips.RYZEN_V1202B
|
||||
if "RYZEN EMBEDDED V1605B" in model_name:
|
||||
linux_id = chips.RYZEN_V1605B
|
||||
else:
|
||||
linux_id = chips.GENERIC_X86
|
||||
## print("linux_id = ", linux_id)
|
||||
elif vendor_id == "GenuineIntel":
|
||||
model_name = self.detector.get_cpuinfo_field("model name").upper()
|
||||
## print('model_name =', model_name)
|
||||
if "N3710" in model_name:
|
||||
linux_id = chips.PENTIUM_N3710
|
||||
if "N5105" in model_name:
|
||||
linux_id = chips.CELERON_N5105
|
||||
elif "X5-Z8350" in model_name:
|
||||
linux_id = chips.ATOM_X5_Z8350
|
||||
elif "J4105" in model_name:
|
||||
linux_id = chips.ATOM_J4105
|
||||
else:
|
||||
linux_id = chips.GENERIC_X86
|
||||
## print("linux_id = ", linux_id)
|
||||
|
||||
compatible = self.detector.get_device_compatible()
|
||||
if compatible and "tegra" in compatible:
|
||||
compats = compatible.split("\x00")
|
||||
if "nvidia,tegra210" in compats:
|
||||
linux_id = chips.T210
|
||||
elif "nvidia,tegra186" in compats:
|
||||
linux_id = chips.T186
|
||||
elif "nvidia,tegra194" in compats:
|
||||
linux_id = chips.T194
|
||||
elif "nvidia,tegra234" in compats:
|
||||
linux_id = chips.T234
|
||||
if compatible and "imx8m" in compatible:
|
||||
linux_id = chips.IMX8MX
|
||||
if compatible and "odroid-c2" in compatible:
|
||||
linux_id = chips.S905
|
||||
if compatible and "amlogic" in compatible:
|
||||
compatible_list = (
|
||||
compatible.replace("\x00", ",").replace(" ", "").split(",")
|
||||
)
|
||||
if "g12a" in compatible_list:
|
||||
# 'sm1' is correct for S905X3, but some kernels use 'g12a'
|
||||
return chips.S905X3
|
||||
if "g12b" in compatible_list:
|
||||
return chips.S922X
|
||||
if "sm1" in compatible_list:
|
||||
return chips.S905X3
|
||||
if "vim3amlogic" in compatible_list:
|
||||
return chips.A311D
|
||||
if compatible and "sun50i-a64" in compatible:
|
||||
linux_id = chips.A64
|
||||
if compatible and "sun50i-h6" in compatible:
|
||||
linux_id = chips.H6
|
||||
if compatible and "sun50i-h5" in compatible:
|
||||
linux_id = chips.H5
|
||||
if compatible and "odroid-xu4" in compatible:
|
||||
linux_id = chips.EXYNOS5422
|
||||
if compatible and "cvitek,cv180x" in compatible:
|
||||
linux_id = chips.CV1800B
|
||||
cpu_model = self.detector.get_cpuinfo_field("cpu model")
|
||||
|
||||
if cpu_model is not None:
|
||||
if "MIPS 24Kc" in cpu_model:
|
||||
linux_id = chips.MIPS24KC
|
||||
elif "MIPS 24KEc" in cpu_model:
|
||||
linux_id = chips.MIPS24KEC
|
||||
|
||||
# we still haven't identified the hardware, so
|
||||
# convert it to a list and let the remaining
|
||||
# conditions attempt.
|
||||
if not linux_id:
|
||||
hardware = [
|
||||
entry.replace("\x00", "") for entry in compatible.split(",")
|
||||
]
|
||||
|
||||
if not linux_id:
|
||||
if "AM33XX" in hardware:
|
||||
linux_id = chips.AM33XX
|
||||
elif "DRA74X" in hardware:
|
||||
linux_id = chips.DRA74X
|
||||
elif "sun4i" in hardware:
|
||||
linux_id = chips.A10
|
||||
elif "sun7i" in hardware:
|
||||
linux_id = chips.A20
|
||||
elif "sun8i" in hardware:
|
||||
linux_id = chips.SUN8I
|
||||
elif "ODROIDC" in hardware:
|
||||
linux_id = chips.S805
|
||||
elif "ODROID-C2" in hardware:
|
||||
linux_id = chips.S905
|
||||
elif "ODROID-N2" in hardware:
|
||||
linux_id = chips.S922X
|
||||
elif "ODROID-C4" in hardware:
|
||||
linux_id = chips.S905X3
|
||||
elif "ODROID-XU4" in hardware:
|
||||
linux_id = chips.EXYNOS5422
|
||||
elif "KHADAS-VIM3" in hardware:
|
||||
linux_id = chips.A311D
|
||||
elif "SAMA5" in hardware:
|
||||
linux_id = chips.SAMA5
|
||||
elif "Pinebook" in hardware:
|
||||
linux_id = chips.A64
|
||||
elif "ASUS_TINKER_BOARD" in hardware:
|
||||
linux_id = chips.RK3288
|
||||
elif "Xilinx Zynq" in hardware:
|
||||
compatible = self.detector.get_device_compatible()
|
||||
if compatible and "xlnx,zynq-7000" in compatible:
|
||||
linux_id = chips.ZYNQ7000
|
||||
else:
|
||||
if isinstance(hardware, str):
|
||||
if hardware.upper() in chips.BCM_RANGE:
|
||||
linux_id = chips.BCM2XXX
|
||||
elif isinstance(hardware, list):
|
||||
if {model.upper() for model in hardware} & chips.BCM_RANGE:
|
||||
linux_id = chips.BCM2XXX
|
||||
|
||||
return linux_id
|
||||
|
||||
def __getattr__(self, attr: str) -> bool:
|
||||
"""
|
||||
Detect whether the given attribute is the currently-detected chip. See
|
||||
list of constants at the top of this module for available options.
|
||||
"""
|
||||
if attr == "id":
|
||||
raise AttributeError() # Avoid infinite recursion
|
||||
if self.id == attr:
|
||||
return True
|
||||
return False
|
|
@ -0,0 +1,5 @@
|
|||
# SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
"""Common constants used all over the module."""
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,688 @@
|
|||
# SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
"""Definition of boards and/or ids"""
|
||||
# Allow for aligned constant definitions:
|
||||
VISIONFIVE2 = "VISIONFIVE2"
|
||||
BEAGLE_PLAY = "BEAGLE_PLAY"
|
||||
BEAGLEBONE_AI64 = "BEAGLEBONE_AI64"
|
||||
BEAGLEBONE = "BEAGLEBONE"
|
||||
BEAGLEBONE_BLACK = "BEAGLEBONE_BLACK"
|
||||
BEAGLEBONE_BLUE = "BEAGLEBONE_BLUE"
|
||||
BEAGLEBONE_BLACK_WIRELESS = "BEAGLEBONE_BLACK_WIRELESS"
|
||||
BEAGLEBONE_POCKETBEAGLE = "BEAGLEBONE_POCKETBEAGLE"
|
||||
BEAGLEBONE_GREEN = "BEAGLEBONE_GREEN"
|
||||
BEAGLEBONE_GREEN_WIRELESS = "BEAGLEBONE_GREEN_WIRELESS"
|
||||
BEAGLEBONE_GREEN_GATEWAY = "BEAGLEBONE_GREEN_GATEWAY"
|
||||
BEAGLEBONE_BLACK_INDUSTRIAL = "BEAGLEBONE_BLACK_INDUSTRIAL"
|
||||
BEAGLEBONE_ENHANCED = "BEAGLEBONE_ENHANCED"
|
||||
BEAGLEBONE_USOMIQ = "BEAGLEBONE_USOMIQ"
|
||||
BEAGLEBONE_AIR = "BEAGLEBONE_AIR"
|
||||
BEAGLEBONE_AI = "BEAGLEBONE_AI"
|
||||
BEAGLEBONE_POCKETBONE = "BEAGLEBONE_POCKETBONE"
|
||||
BEAGLEV_STARLIGHT = "BEAGLEV_STARLIGHT"
|
||||
BEAGLEY_AI = "BEAGLEY_AI"
|
||||
BEAGLELOGIC_STANDALONE = "BEAGLELOGIC_STANDALONE"
|
||||
OSD3358_DEV_BOARD = "OSD3358_DEV_BOARD"
|
||||
OSD3358_SM_RED = "OSD3358_SM_RED"
|
||||
OLIMEX_LIME2 = "OLIMEX_LIME2"
|
||||
FEATHER_HUZZAH = "FEATHER_HUZZAH"
|
||||
FEATHER_M0_EXPRESS = "FEATHER_M0_EXPRESS"
|
||||
GENERIC_LINUX_PC = "GENERIC_LINUX_PC"
|
||||
PYBOARD = "PYBOARD"
|
||||
NODEMCU = "NODEMCU"
|
||||
RASPBERRY_PI_PICO = "RASPBERRY_PI_PICO"
|
||||
GIANT_BOARD = "GIANT_BOARD"
|
||||
|
||||
# ASUS Tinker Boards
|
||||
ASUS_TINKER_BOARD = "ASUS_TINKER_BOARD"
|
||||
ASUS_TINKER_BOARD_2 = "ASUS_TINKER_BOARD_2"
|
||||
ASUS_TINKER_EDGE_R = "ASUS_TINKER_EDGE_R"
|
||||
|
||||
# Walnut Pi boards
|
||||
WALNUT_PI_1B = "WALNUT_PI_1B"
|
||||
WALNUT_PI_1B_EMMC = "WALNUT_PI_1B_EMMC"
|
||||
|
||||
# Clockwork Pi boards
|
||||
CLOCKWORK_CPI3 = "CLOCKWORK_CPI3"
|
||||
|
||||
# Orange Pi boards
|
||||
ORANGE_PI_PC = "ORANGE_PI_PC"
|
||||
ORANGE_PI_R1 = "ORANGE_PI_R1"
|
||||
ORANGE_PI_ZERO = "ORANGE_PI_ZERO"
|
||||
ORANGE_PI_ONE = "ORANGE_PI_ONE"
|
||||
ORANGE_PI_LITE = "ORANGE_PI_LITE"
|
||||
ORANGE_PI_PC_PLUS = "ORANGE_PI_PC_PLUS"
|
||||
ORANGE_PI_PLUS_2E = "ORANGE_PI_PLUS_2E"
|
||||
ORANGE_PI_2 = "ORANGE_PI_2"
|
||||
ORANGE_PI_PC2 = "ORANGE_PI_PC2"
|
||||
ORANGE_PI_ZERO_PLUS_2H5 = "ORANGE_PI_ZERO_PLUS_2H5"
|
||||
ORANGE_PI_ZERO_PLUS = "ORANGE_PI_ZERO_PLUS"
|
||||
ORANGE_PI_ZERO_2 = "ORANGE_PI_ZERO_2"
|
||||
ORANGE_PI_3 = "ORANGE_PI_3"
|
||||
ORANGE_PI_3B = "ORANGE_PI_3B"
|
||||
ORANGE_PI_3_LTS = "ORANGE_PI_3_LTS"
|
||||
ORANGE_PI_4 = "ORANGE_PI_4"
|
||||
ORANGE_PI_4_LTS = "ORANGE_PI_4_LTS"
|
||||
ORANGE_PI_5 = "ORANGE_PI_5"
|
||||
ORANGE_PI_5_MAX = "ORANGE_PI_5_MAX"
|
||||
ORANGE_PI_5_PLUS = "ORANGE_PI_5_PLUS"
|
||||
|
||||
# Nano Pi boards
|
||||
NANOPI_NEO_AIR = "NANOPI_NEO_AIR"
|
||||
NANOPI_DUO2 = "NANOPI_DUO2"
|
||||
NANOPI_NEO = "NANOPI_NEO"
|
||||
NANOPI_NEO_2 = "NANOPI_NEO_2"
|
||||
|
||||
# Banana Pi boards
|
||||
BANANA_PI_M2_ZERO = "BANANA_PI_M2_ZERO"
|
||||
BANANA_PI_M2_PLUS = "BANANA_PI_M2_PLUS"
|
||||
BANANA_PI_M2_BERRY = "BANANA_PI_M2_BERRY"
|
||||
BANANA_PI_M4_BERRY = "BANANA_PI_M4_BERRY"
|
||||
BANANA_PI_M4_ZERO = "BANANA_PI_M4_ZERO"
|
||||
BANANA_PI_M5 = "BANANA_PI_M5"
|
||||
BANANA_PI_F3 = "BANANA_PI_F3"
|
||||
BANANA_PI_F5 = "BANANA_PI_F5"
|
||||
BANANA_PI_AI2N = "BANANA_PI_AI2N"
|
||||
BANANA_PI_AI2H = "BANANA_PI_AI2H"
|
||||
|
||||
# LeMaker boards
|
||||
LEMAKER_BANANA_PRO = "LEMAKER_BANANA_PRO"
|
||||
|
||||
# NVIDIA Jetson boards
|
||||
JETSON_TX1 = "JETSON_TX1"
|
||||
JETSON_TX2 = "JETSON_TX2"
|
||||
JETSON_TX2_NX = "JETSON_TX2_NX"
|
||||
CLARA_AGX_XAVIER = "CLARA_AGX_XAVIER"
|
||||
JETSON_XAVIER = "JETSON_XAVIER"
|
||||
JETSON_AGX_ORIN = "JETSON_ORIN"
|
||||
JETSON_NANO = "JETSON_NANO"
|
||||
JETSON_NX = "JETSON_NX"
|
||||
JETSON_ORIN_NANO = "JETSON_ORIN_NANO"
|
||||
JETSON_ORIN_NX = "JETSON_ORIN_NX"
|
||||
|
||||
# Texas Instruments SK boards
|
||||
TI_J721E_SK = "TI_J721E_SK"
|
||||
|
||||
# Google Coral dev board
|
||||
CORAL_EDGE_TPU_DEV = "CORAL_EDGE_TPU_DEV"
|
||||
CORAL_EDGE_TPU_DEV_MINI = "CORAL_EDGE_TPU_DEV_MINI"
|
||||
|
||||
# Xilinx PYNQ FPGA dev boards
|
||||
PYNQ_Z1 = "PYNQ_Z1"
|
||||
PYNQ_Z2 = "PYNQ_Z2"
|
||||
|
||||
# STM32 MPU boards
|
||||
STM32MP157C_DK2 = "STM32MP157C_DK2"
|
||||
OSD32MP1_BRK = "OSD32MP1_BRK"
|
||||
OSD32MP1_RED = "OSD32MP1_RED"
|
||||
STMP157_OLINUXINO_LIME2 = "STMP157_OLINUXINO_LIME2"
|
||||
|
||||
# Embedfire LubanCat board
|
||||
LUBANCAT_IMX6ULL = "LUBANCAT_IMX6ULL"
|
||||
LUBANCAT_STM32MP157 = "LUBANCAT_STM32MP157"
|
||||
LUBANCAT_ZERO = "LUBANCAT_ZERO"
|
||||
LUBANCAT1 = "LUBANCAT1"
|
||||
LUBANCAT2 = "LUBANCAT2"
|
||||
LUBANCAT4 = "LUBANCAT4"
|
||||
LUBANCAT5 = "LUBANCAT5"
|
||||
|
||||
# Various Raspberry Pi models
|
||||
RASPBERRY_PI_B_REV1 = "RASPBERRY_PI_B_REV1"
|
||||
RASPBERRY_PI_B_REV2 = "RASPBERRY_PI_B_REV2"
|
||||
RASPBERRY_PI_B_PLUS = "RASPBERRY_PI_B_PLUS"
|
||||
RASPBERRY_PI_A = "RASPBERRY_PI_A"
|
||||
RASPBERRY_PI_A_PLUS = "RASPBERRY_PI_A_PLUS"
|
||||
RASPBERRY_PI_CM1 = "RASPBERRY_PI_CM1"
|
||||
RASPBERRY_PI_ZERO = "RASPBERRY_PI_ZERO"
|
||||
RASPBERRY_PI_ZERO_W = "RASPBERRY_PI_ZERO_W"
|
||||
RASPBERRY_PI_ZERO_2_W = "RASPBERRY_PI_ZERO_2_W"
|
||||
RASPBERRY_PI_2B = "RASPBERRY_PI_2B"
|
||||
RASPBERRY_PI_3B = "RASPBERRY_PI_3B"
|
||||
RASPBERRY_PI_3B_PLUS = "RASPBERRY_PI_3B_PLUS"
|
||||
RASPBERRY_PI_CM3 = "RASPBERRY_PI_CM3"
|
||||
RASPBERRY_PI_3A_PLUS = "RASPBERRY_PI_3A_PLUS"
|
||||
RASPBERRY_PI_CM3_PLUS = "RASPBERRY_PI_CM3_PLUS"
|
||||
RASPBERRY_PI_4B = "RASPBERRY_PI_4B"
|
||||
RASPBERRY_PI_AVNET_IIOT_GW = "RASPBERY_PI_AVNET_IIOT_GW"
|
||||
RASPBERRY_PI_400 = "RASPBERRY_PI_400"
|
||||
RASPBERRY_PI_CM4 = "RASPBERRY_PI_CM4"
|
||||
RASPBERRY_PI_CM4S = "RASPBERRY_PI_CM4S"
|
||||
RASPBERRY_PI_5 = "RASPBERRY_PI_5"
|
||||
RASPBERRY_PI_CM5 = "RASPBERRY_PI_CM5"
|
||||
RASPBERRY_PI_500 = "RASPBERRY_PI_500"
|
||||
RASPBERRY_PI_CM5_LITE = "RASPBERRY_PI_CM5_LITE"
|
||||
|
||||
ODROID_C1 = "ODROID_C1"
|
||||
ODROID_C1_PLUS = "ODROID_C1_PLUS"
|
||||
ODROID_C2 = "ODROID_C2"
|
||||
ODROID_C4 = "ODROID_C4"
|
||||
ODROID_H3 = "ODROID_H3"
|
||||
ODROID_N2 = "ODROID_N2"
|
||||
ODROID_XU4 = "ODROID_XU4"
|
||||
ODROID_M1 = "ODROID_M1"
|
||||
ODROID_M1S = "ODROID_M1S"
|
||||
|
||||
FTDI_FT232H = "FTDI_FT232H"
|
||||
FTDI_FT2232H = "FTDI_FT2232H"
|
||||
FTDI_FT4232H = "FTDI_FT4232H"
|
||||
DRAGONBOARD_410C = "DRAGONBOARD_410C"
|
||||
|
||||
SIFIVE_UNLEASHED = "SIFIVE_UNLEASHED"
|
||||
|
||||
ALLWINER_D1 = "ALLWINER_D1"
|
||||
LICHEE_RV = "LICHEE_RV"
|
||||
LICHEEPI_4A = "LICHEEPI_4A"
|
||||
|
||||
MICROCHIP_MCP2221 = "MICROCHIP_MCP2221"
|
||||
|
||||
# Linkspirte Pcduino based boards
|
||||
PCDUINO2 = "PCDUINO2"
|
||||
PCDUINO3 = "PCDUINO3"
|
||||
|
||||
# Boards with u2if firmware
|
||||
# https://github.com/execuc/u2if
|
||||
PICO_U2IF = "PICO_U2IF"
|
||||
FEATHER_U2IF = "FEATHER_U2IF"
|
||||
FEATHER_CAN_U2IF = "FEATHER_CAN_U2IF"
|
||||
FEATHER_EPD_U2IF = "FEATHER_EPD_U2IF"
|
||||
FEATHER_RFM_U2IF = "FEATHER_RFM_U2IF"
|
||||
ITSYBITSY_U2IF = "ITSYBITSY_U2IF"
|
||||
MACROPAD_U2IF = "MACROPAD_U2IF"
|
||||
QTPY_U2IF = "QTPY_U2IF"
|
||||
QT2040_TRINKEY_U2IF = "QT2040_TRINKEY_U2IF"
|
||||
KB2040_U2IF = "KB2040_U2IF"
|
||||
|
||||
RP2040_ONE_U2IF = "RP2040_ONE_U2IF"
|
||||
|
||||
BINHO_NOVA = "BINHO_NOVA"
|
||||
|
||||
ONION_OMEGA = "ONION_OMEGA"
|
||||
ONION_OMEGA2 = "ONION_OMEGA2"
|
||||
|
||||
PINE64 = "PINE64"
|
||||
PINEH64 = "PINEH64"
|
||||
PINEBOOK = "PINEBOOK"
|
||||
PINEPHONE = "PINEPHONE"
|
||||
SOPINE = "SOPINE"
|
||||
QUARTZ64_A = "QUARTZ64_A"
|
||||
|
||||
RADXA_ZERO = "RADXA_ZERO"
|
||||
RADXA_ZERO3 = "RADXA_ZERO3"
|
||||
RADXA_CM3 = "RADXA_CM3"
|
||||
|
||||
ROCK_PI_3A = "ROCK_PI_3A"
|
||||
ROCK_3B = "ROCK_3B"
|
||||
ROCK_PI_3C = "ROCK_PI_3C"
|
||||
ROCK_PI_S = "ROCK_PI_S"
|
||||
ROCK_PI_4 = "ROCK_PI_4"
|
||||
ROCK_PI_4_C_PLUS = "ROCK_PI_4C+"
|
||||
ROCK_PI_4_SE = "ROCK_PI_4_SE"
|
||||
ROCK_PI_X = "ROCK_PI_X"
|
||||
ROCK_PI_E = "ROCK_PI_E"
|
||||
ROCK_PI_5 = "ROCK_PI_5"
|
||||
ROCK_PI_5C = "ROCK_PI_5C"
|
||||
|
||||
# Vicharak Boards
|
||||
VAAMAN = "VAAMAN"
|
||||
AXON = "AXON"
|
||||
|
||||
GREATFET_ONE = "GREATFET_ONE"
|
||||
|
||||
# SeeedStudio boards
|
||||
ODYSSEY_X86J41X5 = "ODYSSEY_X86J41X5"
|
||||
|
||||
# Udoo boards
|
||||
UDOO_BOLT_V3 = "UDOO_BOLT_V3"
|
||||
UDOO_BOLT_V8 = "UDOO_BOLT_V8"
|
||||
UDOO_X86 = "UDOO_X86"
|
||||
|
||||
# MaaXBoard
|
||||
MAAXBOARD = "MAAXBOARD"
|
||||
MAAXBOARD_MINI = "MAAXBOARD_MINI"
|
||||
|
||||
# Shenzhen MilkV Technology boards ids
|
||||
MILKV_DUO = "MILKV_DUO"
|
||||
|
||||
# Khadas VIM3
|
||||
KHADAS_VIM3 = "KHADAS_VIM3"
|
||||
|
||||
_KHADAS_40_PIN_IDS = (KHADAS_VIM3,)
|
||||
|
||||
# Vivid Unit
|
||||
VIVID_UNIT = "VIVID_UNIT"
|
||||
|
||||
_VIVID_UNIT_IDS = (VIVID_UNIT,)
|
||||
|
||||
# Luckfox Pico boards
|
||||
LUCKFOX_PICO = "LUCKFOX_PICO"
|
||||
LUCKFOX_PICO_MAX = "LUCKFOX_PICO_MAX"
|
||||
LUCKFOX_PICO_MINI = "LUCKFOX_PICO_MINI"
|
||||
LUCKFOX_PICO_PLUS = "LUCKFOX_PICO_PLUS"
|
||||
|
||||
# Ameridroid boards
|
||||
INDIEDROID_NOVA = "INDIEDROID_NOVA"
|
||||
|
||||
# Horizon
|
||||
RDK_X3 = "RDK_X3"
|
||||
|
||||
# StarFive boards
|
||||
_STARFIVE_BOARD_IDS = (VISIONFIVE2,)
|
||||
# Asus Tinkerboard
|
||||
_ASUS_TINKER_BOARD_IDS = (
|
||||
ASUS_TINKER_BOARD,
|
||||
ASUS_TINKER_BOARD_2,
|
||||
ASUS_TINKER_EDGE_R,
|
||||
)
|
||||
|
||||
# WalnutPi
|
||||
_WALNUT_PI_IDS = (
|
||||
WALNUT_PI_1B,
|
||||
WALNUT_PI_1B_EMMC,
|
||||
)
|
||||
|
||||
# STM32MP1
|
||||
_STM32MP1_IDS = (
|
||||
STM32MP157C_DK2,
|
||||
LUBANCAT_STM32MP157,
|
||||
OSD32MP1_BRK,
|
||||
OSD32MP1_RED,
|
||||
STMP157_OLINUXINO_LIME2,
|
||||
)
|
||||
|
||||
# OrangePI
|
||||
_ORANGE_PI_IDS = (
|
||||
ORANGE_PI_PC,
|
||||
ORANGE_PI_R1,
|
||||
ORANGE_PI_ZERO,
|
||||
ORANGE_PI_ONE,
|
||||
ORANGE_PI_LITE,
|
||||
ORANGE_PI_PC_PLUS,
|
||||
ORANGE_PI_PLUS_2E,
|
||||
ORANGE_PI_2,
|
||||
ORANGE_PI_PC2,
|
||||
ORANGE_PI_ZERO_PLUS_2H5,
|
||||
ORANGE_PI_ZERO_PLUS,
|
||||
ORANGE_PI_ZERO_2,
|
||||
ORANGE_PI_3,
|
||||
ORANGE_PI_3B,
|
||||
ORANGE_PI_3_LTS,
|
||||
ORANGE_PI_4,
|
||||
ORANGE_PI_4_LTS,
|
||||
ORANGE_PI_5,
|
||||
ORANGE_PI_5_PLUS,
|
||||
)
|
||||
|
||||
# NanoPi
|
||||
_NANOPI_IDS = (
|
||||
NANOPI_NEO_AIR,
|
||||
NANOPI_DUO2,
|
||||
NANOPI_NEO,
|
||||
NANOPI_NEO_2,
|
||||
)
|
||||
|
||||
# BananaPI
|
||||
_BANANA_PI_IDS = (
|
||||
BANANA_PI_M2_ZERO,
|
||||
BANANA_PI_M2_PLUS,
|
||||
BANANA_PI_M2_BERRY,
|
||||
BANANA_PI_M4_BERRY,
|
||||
BANANA_PI_M4_ZERO,
|
||||
BANANA_PI_M5,
|
||||
BANANA_PI_F3,
|
||||
BANANA_PI_F5,
|
||||
BANANA_PI_AI2N,
|
||||
BANANA_PI_AI2H,
|
||||
)
|
||||
|
||||
# LeMaker
|
||||
_LEMAKER_IDS = (LEMAKER_BANANA_PRO,)
|
||||
|
||||
# LubanCat
|
||||
_LUBANCAT_IDS = (
|
||||
LUBANCAT_IMX6ULL,
|
||||
LUBANCAT_STM32MP157,
|
||||
LUBANCAT_ZERO,
|
||||
LUBANCAT1,
|
||||
LUBANCAT2,
|
||||
LUBANCAT4,
|
||||
LUBANCAT5,
|
||||
)
|
||||
|
||||
# Coral boards
|
||||
_CORAL_IDS = (CORAL_EDGE_TPU_DEV, CORAL_EDGE_TPU_DEV_MINI)
|
||||
|
||||
_PYNQ_IDS = (PYNQ_Z1, PYNQ_Z2)
|
||||
|
||||
_JETSON_IDS = (
|
||||
(JETSON_TX1, ("nvidia,p2371-2180", "nvidia,jetson-cv")),
|
||||
(
|
||||
JETSON_TX2,
|
||||
(
|
||||
"nvidia,p2771-0000",
|
||||
"nvidia,p2771-0888",
|
||||
"nvidia,p3489-0000",
|
||||
"nvidia,lightning",
|
||||
"nvidia,quill",
|
||||
"nvidia,storm",
|
||||
),
|
||||
),
|
||||
(JETSON_TX2_NX, ("nvidia,p3509-0000+p3636-0001",)),
|
||||
(CLARA_AGX_XAVIER, ("nvidia,e3900-0000+p2888-0004",)),
|
||||
(
|
||||
JETSON_XAVIER,
|
||||
(
|
||||
"nvidia,p2972-0000",
|
||||
"nvidia,p2972-0006",
|
||||
"nvidia,jetson-xavier",
|
||||
"nvidia,jetson-xavier-industrial",
|
||||
"nvidia,galen-industrial",
|
||||
),
|
||||
),
|
||||
(JETSON_NANO, ("nvidia,p3450-0000", "nvidia,p3450-0002", "nvidia,jetson-nano")),
|
||||
(
|
||||
JETSON_NX,
|
||||
(
|
||||
"nvidia,p3509-0000+p3668-0000",
|
||||
"nvidia,p3509-0000+p3668-0001",
|
||||
"nvidia,p3509-0000-a00+p3668-0000-a01",
|
||||
"nvidia,p3509-0000-a00+p3668-0001-a01",
|
||||
"nvidia,p3449-0000+p3668-0000",
|
||||
"nvidia,p3449-0000+p3668-0001",
|
||||
"nvidia,p3449-0000+p3668-0003",
|
||||
),
|
||||
),
|
||||
(
|
||||
JETSON_AGX_ORIN,
|
||||
(
|
||||
"nvidia,p3737-0000+p3701-0000",
|
||||
"nvidia,p3737-0000+p3701-0004",
|
||||
"nvidia,p3737-0000+p3701-0008",
|
||||
"nvidia,p3737-0000+p3701-0005",
|
||||
"nvidia,p3737-0000+p3701-0001",
|
||||
),
|
||||
),
|
||||
(
|
||||
JETSON_ORIN_NX,
|
||||
(
|
||||
"nvidia,p3509-0000+p3767-0000",
|
||||
"nvidia,p3768-0000+p3767-0000",
|
||||
"nvidia,p3509-0000+p3767-0001",
|
||||
"nvidia,p3768-0000+p3767-0001",
|
||||
),
|
||||
),
|
||||
(
|
||||
JETSON_ORIN_NANO,
|
||||
(
|
||||
"nvidia,p3509-0000+p3767-0003",
|
||||
"nvidia,p3768-0000+p3767-0003",
|
||||
"nvidia,p3509-0000+p3767-0004",
|
||||
"nvidia,p3768-0000+p3767-0004",
|
||||
"nvidia,p3509-0000+p3767-0005",
|
||||
"nvidia,p3768-0000+p3767-0005",
|
||||
"nvidia,p3768-0000+p3767-0005-super",
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
_TI_SK_BOARD_IDS = ((TI_J721E_SK, ("ti,j721e-sk", "ti,j721e")),)
|
||||
|
||||
# Raspberry Pi boards
|
||||
|
||||
_RASPBERRY_PI_40_PIN_IDS = (
|
||||
RASPBERRY_PI_B_PLUS,
|
||||
RASPBERRY_PI_A_PLUS,
|
||||
RASPBERRY_PI_ZERO,
|
||||
RASPBERRY_PI_ZERO_W,
|
||||
RASPBERRY_PI_ZERO_2_W,
|
||||
RASPBERRY_PI_2B,
|
||||
RASPBERRY_PI_3B,
|
||||
RASPBERRY_PI_3B_PLUS,
|
||||
RASPBERRY_PI_3A_PLUS,
|
||||
RASPBERRY_PI_4B,
|
||||
RASPBERRY_PI_AVNET_IIOT_GW,
|
||||
RASPBERRY_PI_400,
|
||||
RASPBERRY_PI_5,
|
||||
RASPBERRY_PI_500,
|
||||
)
|
||||
|
||||
_RASPBERRY_PI_CM_IDS = (
|
||||
RASPBERRY_PI_CM1,
|
||||
RASPBERRY_PI_CM3,
|
||||
RASPBERRY_PI_CM3_PLUS,
|
||||
RASPBERRY_PI_CM4,
|
||||
RASPBERRY_PI_CM4S,
|
||||
RASPBERRY_PI_CM5,
|
||||
RASPBERRY_PI_CM5_LITE,
|
||||
)
|
||||
|
||||
# Pi 4 boards have additional peripherals
|
||||
_RASPBERRY_PI_4_IDS = (
|
||||
RASPBERRY_PI_4B,
|
||||
RASPBERRY_PI_CM4,
|
||||
RASPBERRY_PI_CM4S,
|
||||
RASPBERRY_PI_400,
|
||||
)
|
||||
|
||||
# Pi 5 boards work differently
|
||||
_RASPBERRY_PI_5_IDS = (
|
||||
RASPBERRY_PI_5,
|
||||
RASPBERRY_PI_CM5,
|
||||
RASPBERRY_PI_500,
|
||||
RASPBERRY_PI_CM5_LITE,
|
||||
)
|
||||
|
||||
_PI_MODELS = {
|
||||
0x00: RASPBERRY_PI_A,
|
||||
0x01: {
|
||||
1.0: RASPBERRY_PI_B_REV1,
|
||||
2.0: RASPBERRY_PI_B_REV2,
|
||||
},
|
||||
0x02: RASPBERRY_PI_A_PLUS,
|
||||
0x03: RASPBERRY_PI_B_PLUS,
|
||||
0x04: RASPBERRY_PI_2B,
|
||||
0x06: RASPBERRY_PI_CM1,
|
||||
0x08: RASPBERRY_PI_3B,
|
||||
0x09: RASPBERRY_PI_ZERO,
|
||||
0x0A: RASPBERRY_PI_CM3,
|
||||
0x0B: RASPBERRY_PI_AVNET_IIOT_GW,
|
||||
0x0C: RASPBERRY_PI_ZERO_W,
|
||||
0x0D: RASPBERRY_PI_3B_PLUS,
|
||||
0x0E: RASPBERRY_PI_3A_PLUS,
|
||||
0x10: RASPBERRY_PI_CM3_PLUS,
|
||||
0x11: RASPBERRY_PI_4B,
|
||||
0x12: RASPBERRY_PI_ZERO_2_W,
|
||||
0x13: RASPBERRY_PI_400,
|
||||
0x14: RASPBERRY_PI_CM4,
|
||||
0x15: RASPBERRY_PI_CM4S,
|
||||
0x17: RASPBERRY_PI_5,
|
||||
0x18: RASPBERRY_PI_CM5,
|
||||
0x19: RASPBERRY_PI_500,
|
||||
0x1A: RASPBERRY_PI_CM5_LITE,
|
||||
}
|
||||
|
||||
# ODROID boards
|
||||
|
||||
_ODROID_40_PIN_IDS = (
|
||||
ODROID_C1,
|
||||
ODROID_C1_PLUS,
|
||||
ODROID_C2,
|
||||
ODROID_C4,
|
||||
ODROID_N2,
|
||||
ODROID_XU4,
|
||||
ODROID_M1,
|
||||
ODROID_M1S,
|
||||
)
|
||||
|
||||
_ODROID_MINI_PC_IDS = (ODROID_H3,)
|
||||
|
||||
_BEAGLEBONE_IDS = (
|
||||
BEAGLEY_AI,
|
||||
BEAGLE_PLAY,
|
||||
BEAGLEBONE_AI64,
|
||||
BEAGLEBONE,
|
||||
BEAGLEBONE_BLACK,
|
||||
BEAGLEBONE_BLUE,
|
||||
BEAGLEBONE_BLACK_WIRELESS,
|
||||
BEAGLEBONE_POCKETBEAGLE,
|
||||
BEAGLEBONE_GREEN,
|
||||
BEAGLEBONE_GREEN_WIRELESS,
|
||||
BEAGLEBONE_GREEN_GATEWAY,
|
||||
BEAGLEBONE_BLACK_INDUSTRIAL,
|
||||
BEAGLEBONE_ENHANCED,
|
||||
BEAGLEBONE_USOMIQ,
|
||||
BEAGLEBONE_AIR,
|
||||
BEAGLEBONE_AI,
|
||||
BEAGLEBONE_POCKETBONE,
|
||||
BEAGLELOGIC_STANDALONE,
|
||||
BEAGLEV_STARLIGHT,
|
||||
OSD3358_DEV_BOARD,
|
||||
OSD3358_SM_RED,
|
||||
)
|
||||
|
||||
_LINARO_96BOARDS_IDS = (DRAGONBOARD_410C,)
|
||||
|
||||
_SIFIVE_IDS = (SIFIVE_UNLEASHED,)
|
||||
|
||||
_OLIMEX_IDS = (OLIMEX_LIME2,)
|
||||
|
||||
# BeagleBone eeprom board ids from:
|
||||
# https://github.com/beagleboard/image-builder
|
||||
# Thanks to zmatt on freenode #beagle for pointers.
|
||||
_BEAGLEBONE_BOARD_IDS = {
|
||||
BEAGLE_PLAY: (("A0", "7.BEAGLE")),
|
||||
BEAGLEBONE_AI64: (("B0", "7.BBONEA")),
|
||||
# Original bone/white:
|
||||
BEAGLEBONE: (
|
||||
("A3", "A335BONE00A3"),
|
||||
("A4", "A335BONE00A4"),
|
||||
("A5", "A335BONE00A5"),
|
||||
("A6", "A335BONE00A6"),
|
||||
("A6A", "A335BONE0A6A"),
|
||||
("A6B", "A335BONE0A6B"),
|
||||
("B", "A335BONE000B"),
|
||||
),
|
||||
BEAGLEBONE_BLACK: (
|
||||
("A5", "A335BNLT00A5"),
|
||||
("A5A", "A335BNLT0A5A"),
|
||||
("A5B", "A335BNLT0A5B"),
|
||||
("A5C", "A335BNLT0A5C"),
|
||||
("A6", "A335BNLT00A6"),
|
||||
("A6A", "A335BNLT0A6A"),
|
||||
("B", "A335BNLT000B"),
|
||||
("C", "A335BNLT000C"),
|
||||
("C", "A335BNLT00C0"),
|
||||
),
|
||||
BEAGLEBONE_BLUE: (("A2", "A335BNLTBLA2"),),
|
||||
BEAGLEBONE_BLACK_WIRELESS: (("A5", "A335BNLTBWA5"),),
|
||||
BEAGLEBONE_POCKETBEAGLE: (("A2", "A335PBGL00A2"),),
|
||||
BEAGLEBONE_GREEN: (("1A", "A335BNLT...."), ("UNKNOWN", "A335BNLTBBG1")),
|
||||
BEAGLEBONE_GREEN_WIRELESS: (("W1A", "A335BNLTGW1A"),),
|
||||
BEAGLEBONE_GREEN_GATEWAY: (("GA1", "A335BNLTGG1A"),),
|
||||
BEAGLEBONE_BLACK_INDUSTRIAL: (
|
||||
("A0", "A335BNLTAIA0"), # Arrow
|
||||
("A0", "A335BNLTEIA0"), # Element14
|
||||
),
|
||||
BEAGLEBONE_ENHANCED: (("A", "A335BNLTSE0A"),),
|
||||
BEAGLEBONE_USOMIQ: (("6", "A335BNLTME06"),),
|
||||
BEAGLEBONE_AIR: (("A0", "A335BNLTNAD0"),),
|
||||
BEAGLEBONE_POCKETBONE: (("0", "A335BNLTBP00"),),
|
||||
OSD3358_DEV_BOARD: (("0.1", "A335BNLTGH01"),),
|
||||
OSD3358_SM_RED: (("0", "A335BNLTOS00"),),
|
||||
BEAGLELOGIC_STANDALONE: (("A", "A335BLGC000A"),),
|
||||
}
|
||||
|
||||
# Onion omega boards
|
||||
_ONION_OMEGA_BOARD_IDS = (ONION_OMEGA, ONION_OMEGA2)
|
||||
|
||||
# Pine64 boards and devices
|
||||
_PINE64_DEV_IDS = (PINE64, PINEH64, PINEBOOK, PINEPHONE, SOPINE, QUARTZ64_A)
|
||||
|
||||
# Pcduino boards
|
||||
_PCDUINO_DEV_IDS = (PCDUINO2, PCDUINO3)
|
||||
# RockPi boards and devices
|
||||
_ROCK_PI_IDS = (
|
||||
ROCK_PI_S,
|
||||
ROCK_PI_4,
|
||||
ROCK_PI_4_C_PLUS,
|
||||
ROCK_PI_4_SE,
|
||||
ROCK_PI_X,
|
||||
ROCK_PI_E,
|
||||
RADXA_ZERO,
|
||||
RADXA_ZERO3,
|
||||
ROCK_PI_5,
|
||||
ROCK_PI_5C,
|
||||
RADXA_CM3,
|
||||
ROCK_PI_3A,
|
||||
ROCK_3B,
|
||||
ROCK_PI_3C,
|
||||
)
|
||||
|
||||
# Vicharak Boards
|
||||
_VICHARAK_BOARD_IDS = (VAAMAN, AXON)
|
||||
|
||||
# UDOO
|
||||
_UDOO_BOARD_IDS = {UDOO_BOLT_V8: ("SC40-2000-0000-C0|C",), UDOO_X86: ("dummy",)}
|
||||
|
||||
# SeeedStudio boards
|
||||
_SEEED_BOARD_IDS = (ODYSSEY_X86J41X5,)
|
||||
|
||||
# MaaXBoard boards
|
||||
_MAAXBOARD_IDS = ("MAAXBOARD", "MAAXBOARD_MINI")
|
||||
|
||||
# Lichee RISC-V boards
|
||||
_LICHEE_RISCV_IDS = (LICHEE_RV, LICHEEPI_4A)
|
||||
|
||||
# Siemens Simatic IOT2000 Gateways
|
||||
SIEMENS_SIMATIC_IOT2050_ADV = "SIEMENS_SIMATIC_IOT2050_ADVANCED"
|
||||
SIEMENS_SIMATIC_IOT2050_BASIC = "SIEMENS_SIMATIC_IOT2050_BASIC"
|
||||
|
||||
# Siemens Simatic IOT2000 Gateways
|
||||
_SIEMENS_SIMATIC_IOT2000_IDS = (
|
||||
SIEMENS_SIMATIC_IOT2050_ADV,
|
||||
SIEMENS_SIMATIC_IOT2050_BASIC,
|
||||
)
|
||||
|
||||
# Libre Computer Boards
|
||||
AML_S905X_CC = "AML-S905X-CC"
|
||||
ROC_RK3328_CC = "ROC-RK3328-CC"
|
||||
|
||||
# Libre Computer Boards
|
||||
_LIBRE_COMPUTER_IDS = (
|
||||
AML_S905X_CC,
|
||||
ROC_RK3328_CC,
|
||||
)
|
||||
|
||||
# NXP System on Module Computer boards
|
||||
NXP_IMX8MPLUS_SOM = "NXP_IMX8MPLUS_SOM"
|
||||
|
||||
_NXP_SOM_IDS = (NXP_IMX8MPLUS_SOM,)
|
||||
|
||||
# Repka-Pi boards
|
||||
REPKA_PI_3_H5 = "REPKA_PI_3_H5"
|
||||
REPKA_PI_4_H6 = "REPKA_PI_4_H6"
|
||||
|
||||
# Repka-Pi
|
||||
_REPKA_PI_IDS = (
|
||||
REPKA_PI_3_H5,
|
||||
REPKA_PI_4_H6,
|
||||
)
|
||||
|
||||
_MILKV_IDS_ = (MILKV_DUO,)
|
||||
|
||||
# Luckfox
|
||||
_LUCKFOX_IDS = (
|
||||
LUCKFOX_PICO,
|
||||
LUCKFOX_PICO_MAX,
|
||||
LUCKFOX_PICO_MINI,
|
||||
LUCKFOX_PICO_PLUS,
|
||||
)
|
||||
|
||||
# Horizon
|
||||
_HORIZON_IDS = (RDK_X3,)
|
||||
|
||||
_AMERIDROID_IDS = (INDIEDROID_NOVA,)
|
||||
|
||||
# Agnostic board
|
||||
OS_AGNOSTIC_BOARD = "OS_AGNOSTIC_BOARD"
|
|
@ -0,0 +1,92 @@
|
|||
# SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
"""Definition of chips."""
|
||||
A311D = "A311D"
|
||||
OS_AGNOSTIC = "OS_AGNOSTIC"
|
||||
AM33XX = "AM33XX"
|
||||
AM625X = "AM625X"
|
||||
AM65XX = "AM65XX"
|
||||
AM67A = "AM67A"
|
||||
DRA74X = "DRA74X"
|
||||
TDA4VM = "TDA4VM"
|
||||
IMX6ULL = "IMX6ULL"
|
||||
IMX8MX = "IMX8MX"
|
||||
IMX8MP = "IMX8MP"
|
||||
BCM2XXX = "BCM2XXX"
|
||||
ESP8266 = "ESP8266"
|
||||
EXYNOS5422 = "EXYNOS5422"
|
||||
RYZEN_V1202B = "RYZEN_V1202B"
|
||||
RYZEN_V1605B = "RYZEN_V1605B"
|
||||
SAMD21 = "SAMD21"
|
||||
SUN4I = "SUN4I"
|
||||
SUN7I = "SUN7I"
|
||||
SUN8I = "SUN8I"
|
||||
S805 = "S805"
|
||||
S905 = "S905"
|
||||
S905X = "S905X"
|
||||
S905X3 = "S905X3"
|
||||
S905Y2 = "S905Y2"
|
||||
S922X = "S922X"
|
||||
SAMA5 = "SAMA5"
|
||||
T210 = "T210"
|
||||
T186 = "T186"
|
||||
T194 = "T194"
|
||||
T234 = "T234"
|
||||
APQ8016 = "APQ8016"
|
||||
GENERIC_X86 = "GENERIC_X86"
|
||||
FT232H = "FT232H"
|
||||
FT2232H = "FT2232H"
|
||||
FT4232H = "FT4232H"
|
||||
HFU540 = "HFU540"
|
||||
C906 = "C906"
|
||||
JH71X0 = "JH71X0"
|
||||
JH7110 = "JH7110"
|
||||
MCP2221 = "MCP2221"
|
||||
BINHO = "BINHO"
|
||||
MIPS24KC = "MIPS24KC"
|
||||
MIPS24KEC = "MIPS24KEC"
|
||||
ZYNQ7000 = "ZYNQ7000"
|
||||
A10 = "A10"
|
||||
A20 = "A20"
|
||||
A64 = "A64"
|
||||
H6 = "H6"
|
||||
A33 = "A33"
|
||||
H5 = "H5"
|
||||
H3 = "H3"
|
||||
H616 = "H616"
|
||||
H618 = "H618"
|
||||
T527 = "T527"
|
||||
RK3308 = "RK3308"
|
||||
RK3399 = "RK3399"
|
||||
RK3399_T = "RK3399_T"
|
||||
RK3399PRO = "RK3399PRO"
|
||||
RK3328 = "RK3328"
|
||||
LPC4330 = "LPC4330"
|
||||
RK3288 = "RK3288"
|
||||
RK3566 = "RK3566"
|
||||
RK3568 = "RK3568"
|
||||
RK3588 = "RK3588"
|
||||
RV1103 = "RV1103"
|
||||
RV1106 = "RV1106"
|
||||
PENTIUM_N3710 = "PENTIUM_N3710" # SOC Braswell core
|
||||
CELERON_N5105 = "CELERON_N5105"
|
||||
STM32F405 = "STM32F405"
|
||||
RP2040 = "RP2040"
|
||||
STM32MP157 = "STM32MP157"
|
||||
STM32MP157DAA1 = "STM32MP157DAA1"
|
||||
MT8167 = "MT8167"
|
||||
ATOM_X5_Z8350 = "X5-Z8350"
|
||||
RP2040_U2IF = "RP2040_U2IF"
|
||||
D1_RISCV = "D1_RISCV"
|
||||
ATOM_J4105 = "ATOM_J4105"
|
||||
TH1520 = "TH1520"
|
||||
K1 = "K1"
|
||||
RZV2N = "RZV2N"
|
||||
RZV2H = "RZV2H"
|
||||
SUNRISE_X3 = "SUNRISE_X3"
|
||||
|
||||
BCM_RANGE = {"BCM2708", "BCM2709", "BCM2711", "BCM2712", "BCM2835", "BCM2837"}
|
||||
|
||||
CV1800B = "CV1800B"
|
306
lib/python3.11/site-packages/adafruit_platformdetect/revcodes.py
Normal file
306
lib/python3.11/site-packages/adafruit_platformdetect/revcodes.py
Normal file
|
@ -0,0 +1,306 @@
|
|||
# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
"""
|
||||
`adafruit_platformdetect.revcodes`
|
||||
================================================================================
|
||||
|
||||
Class to help with Raspberry Pi Rev Codes
|
||||
|
||||
* Author(s): Melissa LeBlanc-Williams
|
||||
|
||||
Implementation Notes
|
||||
--------------------
|
||||
|
||||
**Software and Dependencies:**
|
||||
|
||||
* Linux and Python 3.7 or Higher
|
||||
|
||||
Data values from https://github.com/raspberrypi/documentation/blob/develop/
|
||||
documentation/asciidoc/computers/raspberry-pi/revision-codes.adoc#new-style-revision-codes
|
||||
|
||||
"""
|
||||
|
||||
NEW_OVERVOLTAGE = (
|
||||
"Overvoltage allowed",
|
||||
"Overvoltage disallowed",
|
||||
)
|
||||
|
||||
NEW_OTP_PROGRAM = (
|
||||
"OTP programming is allowed",
|
||||
"OTP programming is disallowed",
|
||||
)
|
||||
|
||||
NEW_OTP_READ = (
|
||||
"OTP reading is allowed",
|
||||
"OTP reading is disallowed",
|
||||
)
|
||||
|
||||
NEW_WARRANTY_BIT = (
|
||||
"Warranty is intact",
|
||||
"Warranty has been voided by overclocking",
|
||||
)
|
||||
|
||||
NEW_REV_STYLE = (
|
||||
"Old-style revision",
|
||||
"New-style revision",
|
||||
)
|
||||
|
||||
NEW_MEMORY_SIZE = (
|
||||
"256MB",
|
||||
"512MB",
|
||||
"1GB",
|
||||
"2GB",
|
||||
"4GB",
|
||||
"8GB",
|
||||
)
|
||||
|
||||
NEW_MANUFACTURER = (
|
||||
"Sony UK",
|
||||
"Egoman",
|
||||
"Embest",
|
||||
"Sony Japan",
|
||||
"Embest",
|
||||
"Stadium",
|
||||
)
|
||||
|
||||
NEW_PROCESSOR = (
|
||||
"BCM2835",
|
||||
"BCM2836",
|
||||
"BCM2837",
|
||||
"BCM2711",
|
||||
"BCM2712",
|
||||
)
|
||||
|
||||
PI_TYPE = {
|
||||
0x00: "A",
|
||||
0x01: "B",
|
||||
0x02: "A+",
|
||||
0x03: "B+",
|
||||
0x04: "2B",
|
||||
0x05: "Alpha (early prototype)",
|
||||
0x06: "CM1",
|
||||
0x08: "3B",
|
||||
0x09: "Zero",
|
||||
0x0A: "CM3",
|
||||
0x0B: "Custom",
|
||||
0x0C: "Zero W",
|
||||
0x0D: "3B+",
|
||||
0x0E: "3A+",
|
||||
0x0F: "Internal use only",
|
||||
0x10: "CM3+",
|
||||
0x11: "4B",
|
||||
0x12: "Zero 2 W",
|
||||
0x13: "400",
|
||||
0x14: "CM4",
|
||||
0x15: "CM4S",
|
||||
0x17: "5",
|
||||
0x18: "CM5",
|
||||
0x19: "500",
|
||||
0x1A: "CM5 Lite",
|
||||
}
|
||||
|
||||
OLD_MANUFACTURER = (
|
||||
"Sony UK",
|
||||
"Egoman",
|
||||
"Embest",
|
||||
"Qisda",
|
||||
)
|
||||
|
||||
OLD_MEMORY_SIZE = ("256MB", "512MB", "256MB/512MB")
|
||||
|
||||
NEW_REV_STRUCTURE = {
|
||||
"overvoltage": (31, 1, NEW_OVERVOLTAGE),
|
||||
"otp_program": (30, 1, NEW_OTP_PROGRAM),
|
||||
"otp_read": (29, 1, NEW_OTP_READ),
|
||||
"warranty": (25, 1, NEW_WARRANTY_BIT),
|
||||
"rev_style": (23, 1, NEW_REV_STYLE),
|
||||
"memory_size": (20, 3, NEW_MEMORY_SIZE),
|
||||
"manufacturer": (16, 4, NEW_MANUFACTURER),
|
||||
"processor": (12, 4, NEW_PROCESSOR),
|
||||
"type": (4, 8, PI_TYPE),
|
||||
"revision": (0, 4, int),
|
||||
}
|
||||
|
||||
OLD_REV_STRUCTURE = {
|
||||
"type": (0, PI_TYPE),
|
||||
"revision": (1, float),
|
||||
"memory_size": (2, OLD_MEMORY_SIZE),
|
||||
"manufacturer": (3, OLD_MANUFACTURER),
|
||||
}
|
||||
|
||||
OLD_REV_EXTRA_PROPS = {
|
||||
"warranty": (24, 1, NEW_WARRANTY_BIT),
|
||||
}
|
||||
|
||||
OLD_REV_LUT = {
|
||||
0x02: (1, 1.0, 0, 1),
|
||||
0x03: (1, 1.0, 0, 1),
|
||||
0x04: (1, 2.0, 0, 0),
|
||||
0x05: (1, 2.0, 0, 3),
|
||||
0x06: (1, 2.0, 0, 1),
|
||||
0x07: (0, 2.0, 0, 1),
|
||||
0x08: (0, 2.0, 0, 0),
|
||||
0x09: (0, 2.0, 0, 3),
|
||||
0x0D: (1, 2.0, 1, 1),
|
||||
0x0E: (1, 2.0, 1, 0),
|
||||
0x0F: (1, 2.0, 1, 1),
|
||||
0x10: (3, 1.2, 1, 0),
|
||||
0x11: (6, 1.0, 1, 0),
|
||||
0x12: (2, 1.1, 0, 0),
|
||||
0x13: (3, 1.2, 1, 2),
|
||||
0x14: (6, 1.0, 1, 2),
|
||||
0x15: (2, 1.1, 2, 2),
|
||||
}
|
||||
|
||||
|
||||
class PiDecoder:
|
||||
"""Raspberry Pi Revision Code Decoder"""
|
||||
|
||||
def __init__(self, rev_code):
|
||||
try:
|
||||
self.rev_code = int(rev_code, 16) & 0xFFFFFFFF
|
||||
except ValueError:
|
||||
print("Invalid revision code. It should be a hexadecimal value.")
|
||||
|
||||
def is_valid_code(self):
|
||||
"""Quickly check the validity of a code"""
|
||||
if self.is_new_format():
|
||||
for code_format in NEW_REV_STRUCTURE.values():
|
||||
lower_bit, bit_size, values = code_format
|
||||
prop_value = (self.rev_code >> lower_bit) & ((1 << bit_size) - 1)
|
||||
if not self._valid_value(prop_value, values):
|
||||
return False
|
||||
else:
|
||||
if (
|
||||
self.rev_code & 0xFFFF
|
||||
) not in OLD_REV_LUT.keys(): # pylint: disable=consider-iterating-dictionary
|
||||
return False
|
||||
for code_format in OLD_REV_STRUCTURE.values():
|
||||
index, values = code_format
|
||||
code_format = OLD_REV_LUT[self.rev_code & 0xFFFF]
|
||||
if index >= len(code_format):
|
||||
return False
|
||||
if not self._valid_value(code_format[index], values):
|
||||
return False
|
||||
return True
|
||||
|
||||
def _get_rev_prop_value(self, name, structure=None, raw=False):
|
||||
if structure is None:
|
||||
structure = NEW_REV_STRUCTURE
|
||||
if name not in structure.keys():
|
||||
raise ValueError(f"Unknown property {name}")
|
||||
lower_bit, bit_size, values = structure[name]
|
||||
prop_value = self._get_bits_value(lower_bit, bit_size)
|
||||
if not self._valid_value(prop_value, values):
|
||||
raise ValueError(f"Invalid value {prop_value} for property {name}")
|
||||
if raw:
|
||||
return prop_value
|
||||
return self._format_value(prop_value, values)
|
||||
|
||||
def _get_bits_value(self, lower_bit, bit_size):
|
||||
return (self.rev_code >> lower_bit) & ((1 << bit_size) - 1)
|
||||
|
||||
def _get_old_rev_prop_value(self, name, raw=False):
|
||||
if (
|
||||
name
|
||||
not in OLD_REV_STRUCTURE.keys() # pylint: disable=consider-iterating-dictionary
|
||||
):
|
||||
raise ValueError(f"Unknown property {name}")
|
||||
index, values = OLD_REV_STRUCTURE[name]
|
||||
data = OLD_REV_LUT[self.rev_code & 0xFFFF]
|
||||
if index >= len(data):
|
||||
raise IndexError(f"Index {index} out of range for property {name}")
|
||||
if not self._valid_value(data[index], values):
|
||||
raise ValueError(f"Invalid value {data[index]} for property {name}")
|
||||
if raw:
|
||||
return data[index]
|
||||
return self._format_value(data[index], values)
|
||||
|
||||
@staticmethod
|
||||
def _format_value(value, valid_values):
|
||||
if valid_values is float or valid_values is int:
|
||||
return valid_values(value)
|
||||
return valid_values[value]
|
||||
|
||||
@staticmethod
|
||||
def _valid_value(value, valid_values):
|
||||
if valid_values is float or valid_values is int:
|
||||
return isinstance(value, valid_values)
|
||||
if isinstance(valid_values, (tuple, list)) and 0 <= value < len(valid_values):
|
||||
return True
|
||||
if isinstance(valid_values, dict) and value in valid_values.keys():
|
||||
return True
|
||||
return False
|
||||
|
||||
def _get_property(self, name, raw=False):
|
||||
if name not in NEW_REV_STRUCTURE:
|
||||
raise ValueError(f"Unknown property {name}")
|
||||
if self.is_new_format():
|
||||
return self._get_rev_prop_value(name, raw=raw)
|
||||
if name in OLD_REV_EXTRA_PROPS:
|
||||
return self._get_rev_prop_value(
|
||||
name, structure=OLD_REV_EXTRA_PROPS, raw=raw
|
||||
)
|
||||
return self._get_old_rev_prop_value(name, raw=raw)
|
||||
|
||||
def is_new_format(self):
|
||||
"""Check if the code is in the new format"""
|
||||
return self._get_rev_prop_value("rev_style", raw=True) == 1
|
||||
|
||||
@property
|
||||
def overvoltage(self):
|
||||
"""Overvoltage allowed/disallowed"""
|
||||
return self._get_property("overvoltage")
|
||||
|
||||
@property
|
||||
def warranty_bit(self):
|
||||
"""Warranty bit"""
|
||||
return self._get_property("warranty")
|
||||
|
||||
@property
|
||||
def otp_program(self):
|
||||
"""OTP programming allowed/disallowed"""
|
||||
return self._get_property("otp_program")
|
||||
|
||||
@property
|
||||
def otp_read(self):
|
||||
"""OTP reading allowed/disallowed"""
|
||||
return self._get_property("otp_read")
|
||||
|
||||
@property
|
||||
def rev_style(self):
|
||||
"""Revision Code style"""
|
||||
# Force new style for Rev Style
|
||||
return self._get_rev_prop_value("rev_style")
|
||||
|
||||
@property
|
||||
def memory_size(self):
|
||||
"""Memory size"""
|
||||
return self._get_property("memory_size")
|
||||
|
||||
@property
|
||||
def manufacturer(self):
|
||||
"""Manufacturer"""
|
||||
return self._get_property("manufacturer")
|
||||
|
||||
@property
|
||||
def processor(self):
|
||||
"""Processor"""
|
||||
return self._get_property("processor")
|
||||
|
||||
@property
|
||||
def type(self):
|
||||
"""Specific Model"""
|
||||
return self._get_property("type")
|
||||
|
||||
@property
|
||||
def type_raw(self):
|
||||
"""Raw Value of Specific Model"""
|
||||
return self._get_property("type", raw=True)
|
||||
|
||||
@property
|
||||
def revision(self):
|
||||
"""Revision Number"""
|
||||
return self._get_property("revision")
|
Loading…
Add table
Add a link
Reference in a new issue