blob: 435580106f4447ed131101636b6274e76e9d6508 [file] [log] [blame]
## This file is a template. The comment below is emitted
## into the rendered file; feel free to edit this file.
// !!! WARNING: This is a GENERATED Code..Please do NOT Edit !!!
<%
from collections import defaultdict
readingTypes = { 'reading': 'cmdData.reading',
'assertion': '((cmdData.assertOffset8_14 << 8)|cmdData.assertOffset0_7)',
'eventdata1': 'cmdData.eventData1',
'eventdata2': 'cmdData.eventData2',
'eventdata3': 'cmdData.eventData3'}
funcProps = {}
%>\
%for key in sensorDict.iterkeys():
<%
sensor = sensorDict[key]
sensorType = sensor["sensorType"]
serviceInterface = sensor["serviceInterface"]
readingType = sensor["readingType"]
if serviceInterface == "org.freedesktop.DBus.Properties":
command = "Set"
elif serviceInterface == "xyz.openbmc_project.Inventory.Manager":
command = "Notify"
else:
assert "Un-supported interface: serviceInterface"
endif
sensorInterface = serviceInterface
updateFunc = "sensor_set::sensor_type_" + str(sensorType) + "::update"
funcProps[sensorType] = {}
funcProps[sensorType].update({"command" : command})
funcProps[sensorType].update({"path" : sensor["path"]})
funcProps[sensorType].update({"serviceInterface" : serviceInterface})
funcProps[sensorType].update({"updateFunc" : updateFunc})
funcProps[sensorType].update({"readingType" : readingType})
funcProps[sensorType].update({"source" : readingTypes[readingType]})
funcProps[sensorType].update({"interfaces" : sensor["interfaces"]})
if command == "Set":
for interface, props in funcProps[sensorType]["interfaces"].items():
sensorInterface = interface
funcProps[sensorType].update({"sensorInterface" : sensorInterface})
%>\
% endfor
#include <bitset>
#include "types.hpp"
#include "host-ipmid/ipmid-api.h"
#include <phosphor-logging/elog-errors.hpp>
#include "xyz/openbmc_project/Common/error.hpp"
#include <phosphor-logging/log.hpp>
#include "sensordatahandler.hpp"
namespace ipmi
{
namespace sensor
{
namespace sensor_set
{
% for sensorType, funcProp in funcProps.iteritems():
namespace sensor_type_${sensorType}
{
ipmi_ret_t update(const SetSensorReadingReq& cmdData,
const Info& sensorInfo)
{
auto msg = ${(funcProp["command"]).lower()}::makeDbusMsg(
"${funcProp['serviceInterface']}",
sensorInfo.sensorPath,
"${funcProp['command']}",
"${funcProp['sensorInterface']}");
auto interfaceList = sensorInfo.sensorInterfaces;
% for interface, properties in funcProp["interfaces"].iteritems():
% for dbus_property, property_value in properties.iteritems():
% for offset, values in property_value.iteritems():
% if offset == 0xFF:
<% funcName = "appendReadingData"%>\
<% param = "static_cast<"+values["type"]+">("+funcProp["source"]+")"%>\
% elif funcProp["readingType"] == "assertion":
<% funcName = "appendAssertion"%>\
<% param = "sensorInfo.sensorPath, cmdData"%>\
% else:
<% funcName = "appendDiscreteSignalData"%>\
<% param = funcProp["source"]%>\
% endif
% endfor
% endfor
% endfor
auto result = ${(funcProp["command"]).lower()}::${funcName}(msg,
interfaceList,
${param});
if (result != IPMI_CC_OK)
{
return result;
}
return updateToDbus(msg);
}
}//namespace sensor_type_${sensorType}
% endfor
}//namespace sensor_get
}//namespace sensor
}//namespace ipmi
using namespace ipmi::sensor;
extern const IdInfoMap sensors = {
% for key in sensorDict.iterkeys():
% if key:
{${key},{
<%
sensor = sensorDict[key]
interfaces = sensor["interfaces"]
path = sensor["path"]
sensorType = sensor["sensorType"]
readingType = sensor["sensorReadingType"]
multiplier = sensor.get("multiplierM", 1)
offset = sensor.get("offsetB", 0)
exp = sensor.get("bExp", 0)
valueReadingType = sensor["readingType"]
updateFunc = funcProps[sensorType]["updateFunc"]
%>
${sensorType},"${path}",${readingType},${multiplier},${offset},${exp},
${offset * pow(10,exp)},${updateFunc},{
% for interface,properties in interfaces.iteritems():
{"${interface}",{
% for dbus_property,property_value in properties.iteritems():
{"${dbus_property}",{
% for offset,values in property_value.iteritems():
{ ${offset},{
% if offset == 0xFF:
}},
<% continue %>\
% endif
<% valueType = values["type"] %>\
% for name,value in values.iteritems():
% if name == "type":
<% continue %>\
% endif
% if valueType == "string":
std::string("${value}"),
% elif valueType == "bool":
<% value = str(value).lower() %>\
${value},
% else:
${value},
% endif
% endfor
}
},
% endfor
}},
% endfor
}},
% endfor
}
}},
% endif
% endfor
};