summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVishwanatha Subbanna <vishwa@linux.vnet.ibm.com>2017-07-21 19:02:37 +0530
committerVishwanatha Subbanna <vishwa@linux.vnet.ibm.com>2017-08-02 22:52:39 +0530
commit6add0b810bfd859ad21cb6b3f98b0bbfaa15aa62 (patch)
tree6ad789b4d8617d8b19f749c020a04e843bd647b4
parent5f031f3c722f0a4d10e562f5cfa54ba32d12958e (diff)
downloadopenpower-occ-control-6add0b810bfd859ad21cb6b3f98b0bbfaa15aa62.zip
openpower-occ-control-6add0b810bfd859ad21cb6b3f98b0bbfaa15aa62.tar.gz
Use generated occ to sensor ID map
Change-Id: I948cc33ef05c2c49353277f4d5df958012a9801f Signed-off-by: Vishwanatha Subbanna <vishwa@linux.vnet.ibm.com>
-rw-r--r--Makefile.am11
-rw-r--r--configure.ac5
-rw-r--r--example/occ_sensor.yaml4
-rwxr-xr-xocc_sensor.mako.hpp31
-rw-r--r--occ_status.cpp1
-rw-r--r--occ_status.hpp15
-rwxr-xr-xsensor_gen.py43
7 files changed, 108 insertions, 2 deletions
diff --git a/Makefile.am b/Makefile.am
index 361af89..548e7ff 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -19,10 +19,19 @@ openpower_occ_control_SOURCES = \
occ_finder.cpp
BUILT_SOURCES = org/open_power/OCC/Device/error.hpp \
- org/open_power/OCC/Device/error.cpp
+ org/open_power/OCC/Device/error.cpp \
+ occ_sensor.hpp
CLEANFILES = ${BUILT_SOURCES}
+REQ_MAKO_FILE ?= ${top_srcdir}/occ_sensor.mako.hpp
+REQ_PY_SCRIPT ?= ${top_srcdir}/sensor_gen.py
+
+EXTRA_DIST = $(REQ_MAKO_FILE) $(REQ_PY_SCRIPT)
+
+occ_sensor.hpp: ${REQ_PY_SCRIPT} ${REQ_MAKO_FILE}
+ $(AM_V_GEN) ${PYTHON} ${REQ_PY_SCRIPT} -i ${YAML_PATH} > $@
+
openpower_occ_control_LDFLAGS = \
$(SDBUSPLUS_LIBS) \
$(PHOSPHOR_LOGGING_LIBS) \
diff --git a/configure.ac b/configure.ac
index 06497f1..3091e67 100644
--- a/configure.ac
+++ b/configure.ac
@@ -105,6 +105,11 @@ AC_ARG_VAR(CPU_SUBPATH, [The subpath containing CPU objects])
AS_IF([test "x$CPU_SUBPATH" == "x"], [CPU_SUBPATH="/xyz/openbmc_project/inventory/system/chassis/motherboard"])
AC_DEFINE_UNQUOTED([CPU_SUBPATH], ["$CPU_SUBPATH"], [The subpath containing CPU objects])
+# Handling configuration files
+AC_ARG_VAR(YAML_PATH, [The path to the yaml config files.])
+AS_IF([test "x$YAML_PATH" == "x"], [YAML_PATH="$srcdir/example"])
+AC_DEFINE_UNQUOTED([YAML_PATH], ["$YAML_PATH"], [The path to the yaml config files])
+
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([Makefile test/Makefile])
AC_OUTPUT
diff --git a/example/occ_sensor.yaml b/example/occ_sensor.yaml
new file mode 100644
index 0000000..748a804
--- /dev/null
+++ b/example/occ_sensor.yaml
@@ -0,0 +1,4 @@
+- Instance: 0
+ SensorID: 0x08
+- Instance: 1
+ SensorID: 0x09
diff --git a/occ_sensor.mako.hpp b/occ_sensor.mako.hpp
new file mode 100755
index 0000000..b5fac53
--- /dev/null
+++ b/occ_sensor.mako.hpp
@@ -0,0 +1,31 @@
+## This file is a template. The comment below is emitted
+## into the rendered file; feel free to edit this file.
+// WARNING: Generated header. Do not edit!
+
+
+#pragma once
+
+#include <map>
+
+namespace open_power
+{
+namespace occ
+{
+
+using instanceID = int;
+using sensorID = uint8_t;
+const std::map<instanceID, sensorID> Status::sensorMap = {
+\
+% for occ in occDict:
+<%
+ instance = occ.get("Instance")
+ id = occ.get("SensorID")
+%>\
+\
+ { ${instance}, ${id} },\
+
+% endfor
+};
+
+} // namespace occ
+} // namespace open_power
diff --git a/occ_status.cpp b/occ_status.cpp
index 83825c5..08b1ef3 100644
--- a/occ_status.cpp
+++ b/occ_status.cpp
@@ -1,4 +1,5 @@
#include "occ_status.hpp"
+#include "occ_sensor.hpp"
namespace open_power
{
namespace occ
diff --git a/occ_status.hpp b/occ_status.hpp
index f426048..d30d642 100644
--- a/occ_status.hpp
+++ b/occ_status.hpp
@@ -13,6 +13,12 @@ namespace occ
namespace Base = sdbusplus::org::open_power::OCC::server;
using Interface = sdbusplus::server::object::object<Base::Status>;
+// OCC status instance. Ex. for "occ0", the instance is 0
+using instanceID = int;
+
+// IPMI sensor ID for a given OCC instance
+using sensorID = uint8_t;
+
/** @class Status
* @brief Implementation of OCC Active Status
*/
@@ -35,8 +41,9 @@ class Status : public Interface
Status(sdbusplus::bus::bus& bus, EventPtr& event, const char* path)
: Interface(bus, path),
path(path),
+ instance(((this->path.back() - '0'))),
device(event,
- name + std::to_string((this->path.back() - '0') + 1),
+ name + std::to_string(instance + 1),
std::bind(&Status::deviceErrorHandler, this))
{
// Nothing to do here
@@ -63,6 +70,12 @@ class Status : public Interface
/** @brief occ name prefix */
std::string name = OCC_NAME;
+ /** @brief OCC instance number. Ex, 0,1, etc */
+ int instance;
+
+ /** @brief OCC instance to Sensor ID mapping */
+ static const std::map<instanceID, sensorID> sensorMap;
+
/** @brief OCC device object to do bind and unbind */
Device device;
diff --git a/sensor_gen.py b/sensor_gen.py
new file mode 100755
index 0000000..bedf4f8
--- /dev/null
+++ b/sensor_gen.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python
+
+import os
+import yaml
+import argparse
+from mako.template import Template
+import contextlib
+
+if __name__ == '__main__':
+ script_dir = os.path.dirname(os.path.realpath(__file__))
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ "-f", "--filename",
+ default='occ_sensor.yaml',
+ help="Input File Name")
+ parser.add_argument(
+ "-i", "--input-dir",
+ dest='inputdir',
+ default=script_dir,
+ help="Input 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, 'occ_sensor.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 fd:
+ ifile = yaml.safe_load(fd)
+
+ # Render the mako template
+ template = os.path.join(script_dir, 'occ_sensor.mako.hpp')
+ t = Template(filename=template)
+ with open('occ_sensor.hpp', 'w') as fd:
+ fd.write(
+ t.render(
+ occDict=ifile))
OpenPOWER on IntegriCloud