You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

91 lines
2.6 KiB

#!/usr/bin/env python3
# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
#
# SPDX-License-Identifier: MIT
"""
`bin.rpi_info`
================================================================================
Interactive mode will prompt for the revision code
Otherwise it will be detected automatically
* Author(s): Melissa LeBlanc-Williams
Implementation Notes
--------------------
**Software and Dependencies:**
* Linux and Python 3.7 or Higher
"""
import sys
import argparse
import adafruit_platformdetect
from adafruit_platformdetect.revcodes import PiDecoder
detector = adafruit_platformdetect.Detector()
parser = argparse.ArgumentParser()
def print_property(label, value):
"""Format and print a property"""
print(f"{label}: {value}")
def main(interactive):
"""Run the program"""
pi_rev_code = detector.board._pi_rev_code() # pylint: disable=protected-access
if pi_rev_code is None:
print("Raspberry Pi not detected. Using interactive mode")
if pi_rev_code is None or interactive:
pi_rev_code = input(
"Enter a Raspberry Pi revision code (e.g. d03114 or 000f): "
)
print_property("Revision Code", pi_rev_code)
try:
decoder = PiDecoder(pi_rev_code)
except ValueError:
print("Invalid revision code. It should be a hexadecimal value.")
sys.exit(1)
if not decoder.is_valid_code():
print(
"Code is invalid. This rev code includes at least one "
"value that is outside of the expected range."
)
sys.exit(1)
if decoder.is_new_format():
print_property("Overvoltage", decoder.overvoltage)
print_property("OTP Program", decoder.otp_program)
print_property("OTP Read", decoder.otp_read)
print_property("Warranty bit", decoder.warranty_bit)
print_property("New flag", decoder.rev_style)
print_property("Memory size", decoder.memory_size)
print_property("Manufacturer", decoder.manufacturer)
print_property("Processor", decoder.processor)
print_property("Type", decoder.type)
print_property("Revision", decoder.revision)
else:
print_property("Warranty bit", decoder.warranty_bit)
print_property("Model", decoder.type)
print_property("Revision", decoder.revision)
print_property("RAM", decoder.memory_size)
print_property("Manufacturer", decoder.manufacturer)
# Main function
if __name__ == "__main__":
parser.add_argument(
"-i", "--interactive", help="Interactive Mode", action="store_true"
)
args = parser.parse_args()
main(args.interactive)