Use YAML for UCD definitions

Use a Python script to generate the UCD power sequencer information
needed for the pseq-monitor application.

Change-Id: I51f4b61bb4f22705584b73ba599b517780fa9adc
Signed-off-by: Brandon Wyman <bjwyman@gmail.com>
diff --git a/configure.ac b/configure.ac
index 907796f..bc423ac 100644
--- a/configure.ac
+++ b/configure.ac
@@ -72,6 +72,26 @@
       AC_DEFINE_UNQUOTED([UCD90160_DEVICE_ACCESS], ["$UCD90160_DEVICE_ACCESS"], [Turn off UCD90160 hardware access])
 )
 
+AC_ARG_VAR(UCD90160_DEF_YAML_FILE,
+           [The sequencer definition file to use])
+AS_IF([test "x$UCD90160_DEF_YAML_FILE" == "x"],
+      [UCD90160_DEF_YAML_FILE="\${top_srcdir}/power-sequencer/example/ucd90160.yaml"])
+AC_DEFINE_UNQUOTED([UCD90160_DEF_YAML_FILE], ["$UCD90160_DEF_YAML_FILE"],
+                   [The sequencer definition file to use])
+
+AC_ARG_VAR(UCD90160_DEF_OUTPUT_DIR,
+           [The output directory for the generated UCD90160 definition file])
+AS_IF([test "x$UCD90160_DEF_OUTPUT_DIR" == "x"],
+      [UCD90160_DEF_OUTPUT_DIR="\${top_srcdir}/power-sequencer/"])
+AC_DEFINE_UNQUOTED([UCD90160_DEF_OUTPUT_DIR], ["$UCD90160_DEF_OUTPUT_DIR"],
+                   [The output directory for the generated UCD90160 definition file])
+
+AC_SUBST([GEN_UCD90160_DEFS],
+         ["$PYTHON \${top_srcdir}/power-sequencer/gen-ucd90160-defs.py \
+                  -i $UCD90160_DEF_YAML_FILE \
+                  -o $UCD90160_DEF_OUTPUT_DIR"])
+
+
 AC_ARG_VAR(INPUT_HISTORY_BUSNAME_ROOT, [The D-Bus busname root for the PS input history.])
 AS_IF([test "x$INPUT_HISTORY_BUSNAME_ROOT" == "x"],
       [INPUT_HISTORY_BUSNAME_ROOT="org.open_power.powersupply"])
diff --git a/power-sequencer/Makefile.am b/power-sequencer/Makefile.am
index a13348b..d9f0324 100644
--- a/power-sequencer/Makefile.am
+++ b/power-sequencer/Makefile.am
@@ -9,7 +9,9 @@
 	main.cpp \
 	pgood_monitor.cpp \
 	runtime_monitor.cpp \
-	ucd90160.cpp \
+	ucd90160.cpp
+
+nodist_pseq_monitor_SOURCES = \
 	ucd90160_defs.cpp
 
 pseq_monitor_LDADD = \
@@ -24,3 +26,8 @@
 	${PHOSPHOR_DBUS_INTERFACES_CFLAGS} \
 	$(SDBUSPLUS_CFLAGS) \
 	$(SDEVENTPLUS_CFLAGS)
+
+BUILT_SOURCES = ucd90160_defs.cpp
+
+ucd90160_defs.cpp: ${srcdir}/gen-ucd90160-defs.py templates/ucd90160_defs.mako.cpp
+	$(AM_V_GEN)$(GEN_UCD90160_DEFS)
diff --git a/power-sequencer/example/ucd90160.yaml b/power-sequencer/example/ucd90160.yaml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/power-sequencer/example/ucd90160.yaml
diff --git a/power-sequencer/gen-ucd90160-defs.py b/power-sequencer/gen-ucd90160-defs.py
new file mode 100755
index 0000000..1eb0d06
--- /dev/null
+++ b/power-sequencer/gen-ucd90160-defs.py
@@ -0,0 +1,41 @@
+#!/usr/bin/env python
+
+import os
+import yaml
+from argparse import ArgumentParser
+from mako.template import Template
+from mako.lookup import TemplateLookup
+
+if __name__ == '__main__':
+    parser = ArgumentParser(
+        description="Power sequencer UCD90160 definition parser")
+
+    parser.add_argument('-i', '--input_yaml', dest='input_yaml',
+                        default="example/ucd90160.yaml",
+                        help='UCD90160 definitions YAML')
+
+    parser.add_argument('-o', '--output_dir', dest='output_dir',
+                        default=".",
+                        help='output directory')
+
+    args = parser.parse_args()
+
+    if not args.input_yaml or not args.output_dir:
+        parser.print_usage()
+        sys.exit(1)
+
+    with open(args.input_yaml, 'r') as ucd90160_input:
+        ucd90160_data = yaml.safe_load(ucd90160_input) or {}
+
+    templates_dir = os.path.join(
+            os.path.dirname(os.path.realpath(__file__)),
+            "templates")
+
+    output_file = os.path.join(args.output_dir, "ucd90160_defs.cpp")
+
+    mylookup = TemplateLookup(
+            directories=templates_dir.split())
+    mytemplate = mylookup.get_template('ucd90160_defs.mako.cpp')
+
+    with open(output_file, 'w') as output:
+        output.write(mytemplate.render(ucd90160s=ucd90160_data))
diff --git a/power-sequencer/ucd90160_defs.cpp b/power-sequencer/templates/ucd90160_defs.mako.cpp
similarity index 83%
rename from power-sequencer/ucd90160_defs.cpp
rename to power-sequencer/templates/ucd90160_defs.mako.cpp
index 531a989..3aea9a6 100644
--- a/power-sequencer/ucd90160_defs.cpp
+++ b/power-sequencer/templates/ucd90160_defs.mako.cpp
@@ -1,21 +1,6 @@
-/**
- * Copyright © 2017 IBM Corporation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include "ucd90160.hpp"
+/* This is a generated file. */
 
-// Separated out to facilitate possible future generation of file.
+#include "ucd90160.hpp"
 
 namespace witherspoon
 {