79 lines
2.7 KiB
Python
79 lines
2.7 KiB
Python
#!/usr/bin/env python3
|
|
|
|
# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
"""
|
|
`bin.rev_code_tester`
|
|
================================================================================
|
|
|
|
Tests that all existing rev codes in the boards constant file
|
|
match what the decoder finds.
|
|
|
|
* Author(s): Melissa LeBlanc-Williams
|
|
|
|
Implementation Notes
|
|
--------------------
|
|
|
|
**Software and Dependencies:**
|
|
|
|
* Linux and Python 3.7 or Higher
|
|
|
|
"""
|
|
|
|
import adafruit_platformdetect
|
|
import adafruit_platformdetect.constants.boards as ap_board
|
|
from adafruit_platformdetect.revcodes import PiDecoder
|
|
|
|
detector = adafruit_platformdetect.Detector()
|
|
|
|
|
|
def print_property(label, value):
|
|
"Format and print a property"
|
|
print(f"{label}: {value}")
|
|
|
|
|
|
def print_info(pi_decoder):
|
|
"Print the info for the board"
|
|
if pi_decoder.is_new_format():
|
|
print_property("Overvoltage", pi_decoder.overvoltage)
|
|
print_property("OTP Program", pi_decoder.otp_program)
|
|
print_property("OTP Read", pi_decoder.otp_read)
|
|
print_property("Warranty bit", pi_decoder.warranty_bit)
|
|
print_property("New flag", pi_decoder.rev_style)
|
|
print_property("Memory size", pi_decoder.memory_size)
|
|
print_property("Manufacturer", pi_decoder.manufacturer)
|
|
print_property("Processor", pi_decoder.processor)
|
|
print_property("Type", pi_decoder.type)
|
|
print_property("Revision", pi_decoder.revision)
|
|
else:
|
|
print_property("Warranty bit", pi_decoder.warranty_bit)
|
|
print_property("Model", pi_decoder.type)
|
|
print_property("Revision", pi_decoder.revision)
|
|
print_property("RAM", pi_decoder.memory_size)
|
|
print_property("Manufacturer", pi_decoder.manufacturer)
|
|
|
|
|
|
# Iterate through the _PI_REV_CODES dictionary to find the model
|
|
# Run the code through the decoder to check that:
|
|
# - It is a valid code
|
|
# - It matches the model
|
|
for model, codes in ap_board._PI_REV_CODES.items(): # pylint: disable=protected-access
|
|
for pi_rev_code in codes:
|
|
try:
|
|
decoder = PiDecoder(pi_rev_code)
|
|
except ValueError as e:
|
|
print("Invalid revision code. It should be a hexadecimal value.")
|
|
decoded_model = ap_board._PI_MODELS[ # pylint: disable=protected-access
|
|
decoder.type_raw
|
|
]
|
|
if isinstance(decoded_model, dict):
|
|
decoded_model = decoded_model[decoder.revision]
|
|
if decoded_model == model:
|
|
print(f"Decoded model matches expected model: {model}")
|
|
else:
|
|
print(f"Decoded model does not match expected model: {model}")
|
|
print(f"Decoded model: {decoded_model}")
|
|
print(f"Expected model: {model}")
|
|
print_info(decoder)
|