From 6add0b810bfd859ad21cb6b3f98b0bbfaa15aa62 Mon Sep 17 00:00:00 2001 From: Vishwanatha Subbanna Date: Fri, 21 Jul 2017 19:02:37 +0530 Subject: Use generated occ to sensor ID map Change-Id: I948cc33ef05c2c49353277f4d5df958012a9801f Signed-off-by: Vishwanatha Subbanna --- Makefile.am | 11 ++++++++++- configure.ac | 5 +++++ example/occ_sensor.yaml | 4 ++++ occ_sensor.mako.hpp | 31 +++++++++++++++++++++++++++++++ occ_status.cpp | 1 + occ_status.hpp | 15 ++++++++++++++- sensor_gen.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 108 insertions(+), 2 deletions(-) create mode 100644 example/occ_sensor.yaml create mode 100755 occ_sensor.mako.hpp create mode 100755 sensor_gen.py 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 + +namespace open_power +{ +namespace occ +{ + +using instanceID = int; +using sensorID = uint8_t; +const std::map 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; +// 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 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)) -- cgit v1.2.1