blob: 1464ba7758924b9c341a69c27ae1dfa470cc56f6 [file] [log] [blame]
#!/usr/bin/env python3
import yaml
import os
import argparse
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 std::unordered_map<std::string,")
ofile.write(" std::set<phosphor::led::Layout::LedAction>>")
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")