#!/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)