#!/usr/bin/env python3 import argparse import os import yaml from inflection import underscore if __name__ == "__main__": script_dir = os.path.dirname(os.path.realpath(__file__)) parser = argparse.ArgumentParser() parser.add_argument( "-f", "--filename", default="led.yaml", help="Input File Name" ) parser.add_argument( "-i", "--input-dir", dest="inputdir", default=script_dir, help="Input directory", ) parser.add_argument( "-o", "--output-dir", dest="outputdir", default=".", help="Output directory.", ) args = parser.parse_args() # Default to the one that is in the current. yaml_dir = script_dir yaml_file = os.path.join(yaml_dir, "led.yaml") if args.inputdir: yaml_dir = args.inputdir if args.filename: yaml_file = os.path.join(yaml_dir, args.filename) with open(yaml_file, "r") as f: ifile = yaml.safe_load(f) # Dictionary having [Name:Priority] priority_dict = {} with open(os.path.join(args.outputdir, "led-gen.hpp"), "w") as ofile: ofile.write("/* !!! WARNING: This is a GENERATED Code..") ofile.write("Please do NOT Edit !!! */\n\n") ofile.write("static const phosphor::led::GroupMap") ofile.write(" systemLedMap = {\n\n") for group in list(ifile.keys()): # This section generates an std::unordered_map of LedGroupNames to # std::set of LEDs containing the name and properties led_dict = ifile[group] ofile.write( ' {"' + "/xyz/openbmc_project/led/groups/" + underscore(group) + '",{\n' ) # Some LED groups could be empty if not led_dict: ofile.write(" }},\n") continue for led_name, list_dict in list(led_dict.items()): value = list_dict.get("Priority") if led_name in priority_dict: if value != priority_dict[led_name]: # Priority for a particular LED needs to stay SAME # across all groups ofile.close() os.remove(ofile.name) raise ValueError( "Priority for [" + led_name + "] is NOT same across all groups" ) else: priority_dict[led_name] = value ofile.write(' {"' + underscore(led_name) + '",') ofile.write( "phosphor::led::Layout::Action::" + str(list_dict.get("Action", "Off")) + "," ) ofile.write(str(list_dict.get("DutyOn", 50)) + ",") ofile.write(str(list_dict.get("Period", 0)) + ",") priority = str(list_dict.get("Priority", "Blink")) ofile.write("phosphor::led::Layout::Action::" + priority + ",") ofile.write("},\n") ofile.write(" }},\n") ofile.write("};\n")