blob: 2dacc0e0cd5219e29b9e059eae13dbea21412538 [file] [log] [blame]
Vishwanatha Subbanna4f43f5e2020-03-09 03:56:57 -05001#!/usr/bin/env python3
Vishwanatha Subbannaccbdf672017-01-23 14:39:06 +05302import argparse
Patrick Williams6d254ee2022-12-06 10:52:53 -06003import os
4
5import yaml
Vishwanatha Subbanna32bb6f82017-03-27 18:15:52 +05306from inflection import underscore
Vishwanatha Subbannab21fda72016-10-17 17:46:37 +05307
Patrick Williamsfccfac92022-03-17 05:14:46 -05008if __name__ == "__main__":
Vishwanatha Subbannabb8fe0b2016-11-12 18:29:38 +05309 script_dir = os.path.dirname(os.path.realpath(__file__))
Vishwanatha Subbannaccbdf672017-01-23 14:39:06 +053010 parser = argparse.ArgumentParser()
Brad Bishop9a6220c2017-02-08 13:21:31 -050011 parser.add_argument(
Patrick Williamsfccfac92022-03-17 05:14:46 -050012 "-f", "--filename", default="led.yaml", help="Input File Name"
13 )
Brad Bishop9a6220c2017-02-08 13:21:31 -050014 parser.add_argument(
Patrick Williamsfccfac92022-03-17 05:14:46 -050015 "-i",
16 "--input-dir",
17 dest="inputdir",
Brad Bishop9a6220c2017-02-08 13:21:31 -050018 default=script_dir,
Patrick Williamsfccfac92022-03-17 05:14:46 -050019 help="Input directory",
20 )
Brad Bishop513f58e2017-02-08 13:25:17 -050021 parser.add_argument(
Patrick Williamsfccfac92022-03-17 05:14:46 -050022 "-o",
23 "--output-dir",
24 dest="outputdir",
25 default=".",
26 help="Output directory.",
27 )
Brad Bishop513f58e2017-02-08 13:25:17 -050028
Vishwanatha Subbannaccbdf672017-01-23 14:39:06 +053029 args = parser.parse_args()
30
31 # Default to the one that is in the current.
Brad Bishop9a6220c2017-02-08 13:21:31 -050032 yaml_dir = script_dir
Patrick Williamsfccfac92022-03-17 05:14:46 -050033 yaml_file = os.path.join(yaml_dir, "led.yaml")
Vishwanatha Subbannaccbdf672017-01-23 14:39:06 +053034
Brad Bishop513f58e2017-02-08 13:25:17 -050035 if args.inputdir:
36 yaml_dir = args.inputdir
Vishwanatha Subbannaccbdf672017-01-23 14:39:06 +053037
38 if args.filename:
39 yaml_file = os.path.join(yaml_dir, args.filename)
40
Patrick Williamsfccfac92022-03-17 05:14:46 -050041 with open(yaml_file, "r") as f:
Vishwanatha Subbannab21fda72016-10-17 17:46:37 +053042 ifile = yaml.safe_load(f)
43
Vishwanatha Subbanna1da8eb72017-06-15 13:46:05 +053044 # Dictionary having [Name:Priority]
45 priority_dict = {}
46
Patrick Williamsfccfac92022-03-17 05:14:46 -050047 with open(os.path.join(args.outputdir, "led-gen.hpp"), "w") as ofile:
48 ofile.write("/* !!! WARNING: This is a GENERATED Code..")
49 ofile.write("Please do NOT Edit !!! */\n\n")
Vishwanatha Subbannab21fda72016-10-17 17:46:37 +053050
Patrick Williams158b2c12022-03-17 05:57:44 -050051 ofile.write("static const phosphor::led::GroupMap")
Patrick Williamsfccfac92022-03-17 05:14:46 -050052 ofile.write(" systemLedMap = {\n\n")
Vishwanatha Subbannae0cf8fe2020-03-03 02:38:21 -060053 for group in list(ifile.keys()):
Patrick Williamsf2044032022-03-17 05:12:30 -050054 # This section generates an std::unordered_map of LedGroupNames to
55 # std::set of LEDs containing the name and properties
Vishwanatha Subbanna1da8eb72017-06-15 13:46:05 +053056 led_dict = ifile[group]
Brad Bishop9a6220c2017-02-08 13:21:31 -050057 ofile.write(
Patrick Williamsfccfac92022-03-17 05:14:46 -050058 ' {"'
59 + "/xyz/openbmc_project/led/groups/"
60 + underscore(group)
61 + '",{\n'
62 )
Vishwanatha Subbannab21fda72016-10-17 17:46:37 +053063
Vishwanatha Subbannad53de6f2017-03-30 11:21:37 +053064 # Some LED groups could be empty
Vishwanatha Subbanna1da8eb72017-06-15 13:46:05 +053065 if not led_dict:
Patrick Williamsfccfac92022-03-17 05:14:46 -050066 ofile.write(" }},\n")
Vishwanatha Subbannad53de6f2017-03-30 11:21:37 +053067 continue
68
Vishwanatha Subbannae0cf8fe2020-03-03 02:38:21 -060069 for led_name, list_dict in list(led_dict.items()):
Patrick Williamsfccfac92022-03-17 05:14:46 -050070 value = list_dict.get("Priority")
Vishwanatha Subbanna1da8eb72017-06-15 13:46:05 +053071 if led_name in priority_dict:
72 if value != priority_dict[led_name]:
73 # Priority for a particular LED needs to stay SAME
74 # across all groups
75 ofile.close()
76 os.remove(ofile.name)
Patrick Williamsfccfac92022-03-17 05:14:46 -050077 raise ValueError(
78 "Priority for ["
79 + led_name
80 + "] is NOT same across all groups"
81 )
Vishwanatha Subbanna1da8eb72017-06-15 13:46:05 +053082 else:
83 priority_dict[led_name] = value
84
Patrick Williamsfccfac92022-03-17 05:14:46 -050085 ofile.write(' {"' + underscore(led_name) + '",')
86 ofile.write(
87 "phosphor::led::Layout::Action::"
88 + str(list_dict.get("Action", "Off"))
89 + ","
90 )
91 ofile.write(str(list_dict.get("DutyOn", 50)) + ",")
92 ofile.write(str(list_dict.get("Period", 0)) + ",")
93 priority = str(list_dict.get("Priority", "Blink"))
94 ofile.write("phosphor::led::Layout::Action::" + priority + ",")
95 ofile.write("},\n")
96 ofile.write(" }},\n")
97 ofile.write("};\n")