## 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 !!! <% interfaceDict = {} sensorNameMaxLength = 16 %>\ %for key in sensorDict.keys(): <% sensor = sensorDict[key] serviceInterface = sensor["serviceInterface"] if serviceInterface == "org.freedesktop.DBus.Properties": updateFunc = "set::" getFunc = "get::" elif serviceInterface == "xyz.openbmc_project.Inventory.Manager": updateFunc = "notify::" getFunc = "inventory::get::" else: assert "Un-supported interface: " + serviceInterface endif if serviceInterface not in interfaceDict: interfaceDict[serviceInterface] = {} interfaceDict[serviceInterface]["updateFunc"] = updateFunc interfaceDict[serviceInterface]["getFunc"] = getFunc %>\ % endfor #include "sensordatahandler.hpp" #include namespace ipmi { namespace sensor { extern const IdInfoMap __attribute__((init_priority(101))) sensors = { % for key in sensorDict.keys(): % if key: {${key},{ <% sensor = sensorDict[key] interfaces = sensor["interfaces"] path = sensor["path"] serviceInterface = sensor["serviceInterface"] sensorType = sensor["sensorType"] entityID = sensor.get("entityID", 0) instance = sensor.get("entityInstance", 0) readingType = sensor["sensorReadingType"] multiplier = sensor.get("multiplierM", 1) offsetB = sensor.get("offsetB", 0) bExp = sensor.get("bExp", 0) rExp = sensor.get("rExp", 0) sensorUnits1 = sensor.get("sensorUnits1", 0) unit = sensor.get("unit", "") scale = sensor.get("scale", 0) hasScale = "true" if "scale" in sensor.keys() else "false" valueReadingType = sensor["readingType"] updateFunc = interfaceDict[serviceInterface]["updateFunc"] updateFunc += sensor["readingType"] getFunc = interfaceDict[serviceInterface]["getFunc"] getFunc += sensor["readingType"] sensorName = sensor.get("sensorName", None) if sensorName: assert len(sensorName) <= sensorNameMaxLength, \ "sensor name '%s' is too long (%d bytes max)" % \ (sensorName, sensorNameMaxLength) else: sensorNameFunc = "get::" + sensor.get("sensorNamePattern", "nameLeaf") if "readingAssertion" == valueReadingType or "readingData" == valueReadingType: for interface,properties in interfaces.items(): for dbus_property,property_value in properties.items(): for offset,values in property_value["Offsets"].items(): valueType = values["type"] updateFunc = "set::" + valueReadingType + "<" + valueType + ">" getFunc = "get::" + valueReadingType + "<" + valueType + ">" sensorInterface = serviceInterface if serviceInterface == "org.freedesktop.DBus.Properties": sensorInterface = next(iter(interfaces)) mutability = sensor.get("mutability", "Mutability::Read") %> .entityType = ${entityID}, .instance = ${instance}, .sensorType = ${sensorType}, .sensorPath = "${path}", .sensorInterface = "${sensorInterface}", .sensorReadingType = ${readingType}, .coefficientM = ${multiplier}, .coefficientB = ${offsetB}, .exponentB = ${bExp}, .scaledOffset = ${offsetB * pow(10,bExp)}, .exponentR = ${rExp}, .hasScale = ${hasScale}, .scale = ${scale}, .sensorUnits1 = ${sensorUnits1}, .unit = "${unit}", .updateFunc = ${updateFunc}, .getFunc = ${getFunc}, .mutability = Mutability(${mutability}), % if sensorName: .sensorName = "${sensorName}", .sensorNameFunc = nullptr, % else: .sensorName = "", .sensorNameFunc = ${sensorNameFunc}, % endif .propertyInterfaces = { % for interface,properties in interfaces.items(): {"${interface}",{ % if properties: % for dbus_property,property_value in properties.items(): {"${dbus_property}",{ <% try: preReq = property_value["Prereqs"] except KeyError: preReq = dict() %>\ { % for preOffset,preValues in preReq.items(): { ${preOffset},{ % for name,value in preValues.items(): % if name == "type": <% continue %>\ % endif <% value = str(value).lower() %>\ ${value}, % endfor } }, % endfor }, { % for offset,values in property_value["Offsets"].items(): { ${offset},{ % if offset == 0xFF: }}, <% continue %>\ % endif <% valueType = values["type"] %>\ <% try: skip = values["skipOn"] if skip == "assert": skipVal = "SkipAssertion::ASSERT" elif skip == "deassert": skipVal = "SkipAssertion::DEASSERT" else: assert "Unknown skip value " + str(skip) except KeyError: skipVal = "SkipAssertion::NONE" %>\ ${skipVal}, % for name,value in values.items(): % if name == "type" or name == "skipOn": <% continue %>\ % endif % if valueType == "string": std::string("${value}"), % elif valueType == "bool": <% value = str(value).lower() %>\ ${value}, % else: ${value}, % endif % endfor } }, % endfor }}}, % endfor % endif }}, % endfor }, }}, % endif % endfor }; } // namespace sensor } // namespace ipmi