| ## 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 <ipmid/types.hpp> | 
 |  | 
 | 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 |