xref: /openbmc/phosphor-host-ipmid/scripts/writesensor.mako.cpp (revision a23af1206bc4c835516909c87c71be0e7428264c)
10065905eSRatan Gupta ## This file is a template.  The comment below is emitted
20065905eSRatan Gupta ## into the rendered file; feel free to edit this file.
30065905eSRatan Gupta // !!! WARNING: This is a GENERATED Code..Please do NOT Edit !!!
4e0af7209SDhruvaraj Subhashchandran <%
51bb0d387SDeepak Kodihalli interfaceDict = {}
6be4ffa87SJeremy Kerr sensorNameMaxLength = 16
7e0af7209SDhruvaraj Subhashchandran %>\
831eed5c5STom Joseph %for key in sensorDict.keys():
9e0af7209SDhruvaraj Subhashchandran <%
10e0af7209SDhruvaraj Subhashchandran     sensor = sensorDict[key]
11e0af7209SDhruvaraj Subhashchandran     serviceInterface = sensor["serviceInterface"]
12e0af7209SDhruvaraj Subhashchandran     if serviceInterface == "org.freedesktop.DBus.Properties":
131bb0d387SDeepak Kodihalli         updateFunc = "set::"
149f9a9a4dSTom Joseph         getFunc = "get::"
15e0af7209SDhruvaraj Subhashchandran     elif serviceInterface == "xyz.openbmc_project.Inventory.Manager":
161bb0d387SDeepak Kodihalli         updateFunc = "notify::"
179f9a9a4dSTom Joseph         getFunc = "inventory::get::"
18e0af7209SDhruvaraj Subhashchandran     else:
191bb0d387SDeepak Kodihalli         assert "Un-supported interface: " + serviceInterface
20e0af7209SDhruvaraj Subhashchandran     endif
211bb0d387SDeepak Kodihalli     if serviceInterface not in interfaceDict:
221bb0d387SDeepak Kodihalli         interfaceDict[serviceInterface] = {}
231bb0d387SDeepak Kodihalli         interfaceDict[serviceInterface]["updateFunc"] = updateFunc
249f9a9a4dSTom Joseph         interfaceDict[serviceInterface]["getFunc"] = getFunc
25e0af7209SDhruvaraj Subhashchandran %>\
26e0af7209SDhruvaraj Subhashchandran % endfor
271bb0d387SDeepak Kodihalli 
28e0af7209SDhruvaraj Subhashchandran #include "sensordatahandler.hpp"
290065905eSRatan Gupta 
3033250240SVernon Mauery #include <ipmid/types.hpp>
31db0cbe64SPatrick Venture 
32db0cbe64SPatrick Venture namespace ipmi {
33db0cbe64SPatrick Venture namespace sensor {
341bb0d387SDeepak Kodihalli 
35*a23af120SJian Zhang extern const IdInfoMap __attribute__((init_priority(101))) sensors = {
3631eed5c5STom Joseph % for key in sensorDict.keys():
370065905eSRatan Gupta    % if key:
380065905eSRatan Gupta {${key},{
390065905eSRatan Gupta <%
400065905eSRatan Gupta        sensor = sensorDict[key]
410065905eSRatan Gupta        interfaces = sensor["interfaces"]
420065905eSRatan Gupta        path = sensor["path"]
431bb0d387SDeepak Kodihalli        serviceInterface = sensor["serviceInterface"]
440065905eSRatan Gupta        sensorType = sensor["sensorType"]
4531ff6e6fSTom Joseph        entityID = sensor.get("entityID", 0)
4631ff6e6fSTom Joseph        instance = sensor.get("entityInstance", 0)
470065905eSRatan Gupta        readingType = sensor["sensorReadingType"]
4810f4959aSEmily Shaffer        multiplier = sensor.get("multiplierM", 1)
49b673ff6aSTom Joseph        offsetB = sensor.get("offsetB", 0)
504d1a5dd4SKirill Pakhomov        bExp = sensor.get("bExp", 0)
510a1301c1STom Joseph        rExp = sensor.get("rExp", 0)
52c5324251STony Lee        sensorUnits1 = sensor.get("sensorUnits1", 0)
5362235618SEmily Shaffer        unit = sensor.get("unit", "")
5462235618SEmily Shaffer        scale = sensor.get("scale", 0)
5562235618SEmily Shaffer        hasScale = "true" if "scale" in sensor.keys() else "false"
56e0af7209SDhruvaraj Subhashchandran        valueReadingType = sensor["readingType"]
571bb0d387SDeepak Kodihalli        updateFunc = interfaceDict[serviceInterface]["updateFunc"]
581bb0d387SDeepak Kodihalli        updateFunc += sensor["readingType"]
599f9a9a4dSTom Joseph        getFunc = interfaceDict[serviceInterface]["getFunc"]
609f9a9a4dSTom Joseph        getFunc += sensor["readingType"]
61be4ffa87SJeremy Kerr        sensorName = sensor.get("sensorName", None)
62be4ffa87SJeremy Kerr        if sensorName:
63be4ffa87SJeremy Kerr            assert len(sensorName) <= sensorNameMaxLength, \
64be4ffa87SJeremy Kerr                    "sensor name '%s' is too long (%d bytes max)" % \
65be4ffa87SJeremy Kerr                    (sensorName, sensorNameMaxLength)
66be4ffa87SJeremy Kerr        else:
67be4ffa87SJeremy Kerr            sensorNameFunc = "get::" + sensor.get("sensorNamePattern",
68be4ffa87SJeremy Kerr                    "nameLeaf")
69be4ffa87SJeremy Kerr 
70580af36bSTom Joseph        if "readingAssertion" == valueReadingType or "readingData" == valueReadingType:
71580af36bSTom Joseph            for interface,properties in interfaces.items():
72580af36bSTom Joseph                for dbus_property,property_value in properties.items():
73e245e4e9SDhruvaraj Subhashchandran                    for offset,values in property_value["Offsets"].items():
74580af36bSTom Joseph                        valueType = values["type"]
75580af36bSTom Joseph            updateFunc = "set::" + valueReadingType + "<" + valueType + ">"
76580af36bSTom Joseph            getFunc = "get::" + valueReadingType + "<" + valueType + ">"
771bb0d387SDeepak Kodihalli        sensorInterface = serviceInterface
781bb0d387SDeepak Kodihalli        if serviceInterface == "org.freedesktop.DBus.Properties":
791bb0d387SDeepak Kodihalli            sensorInterface = next(iter(interfaces))
80cc941e15SEmily Shaffer        mutability = sensor.get("mutability", "Mutability::Read")
810065905eSRatan Gupta %>
828deea358SJeremy Kerr         .entityType = ${entityID},
838deea358SJeremy Kerr         .instance = ${instance},
848deea358SJeremy Kerr         .sensorType = ${sensorType},
858deea358SJeremy Kerr         .sensorPath = "${path}",
868deea358SJeremy Kerr         .sensorInterface = "${sensorInterface}",
878deea358SJeremy Kerr         .sensorReadingType = ${readingType},
888deea358SJeremy Kerr         .coefficientM = ${multiplier},
898deea358SJeremy Kerr         .coefficientB = ${offsetB},
908deea358SJeremy Kerr         .exponentB = ${bExp},
918deea358SJeremy Kerr         .scaledOffset = ${offsetB * pow(10,bExp)},
928deea358SJeremy Kerr         .exponentR = ${rExp},
938deea358SJeremy Kerr         .hasScale = ${hasScale},
948deea358SJeremy Kerr         .scale = ${scale},
95c5324251STony Lee         .sensorUnits1 = ${sensorUnits1},
968deea358SJeremy Kerr         .unit = "${unit}",
978deea358SJeremy Kerr         .updateFunc = ${updateFunc},
988deea358SJeremy Kerr         .getFunc = ${getFunc},
998deea358SJeremy Kerr         .mutability = Mutability(${mutability}),
100be4ffa87SJeremy Kerr     % if sensorName:
101be4ffa87SJeremy Kerr         .sensorName = "${sensorName}",
10211d68897SWilly Tu         .sensorNameFunc = nullptr,
103be4ffa87SJeremy Kerr     % else:
10411d68897SWilly Tu         .sensorName = "",
1058deea358SJeremy Kerr         .sensorNameFunc = ${sensorNameFunc},
106be4ffa87SJeremy Kerr     % endif
1078deea358SJeremy Kerr         .propertyInterfaces = {
1081bb0d387SDeepak Kodihalli     % for interface,properties in interfaces.items():
1090065905eSRatan Gupta             {"${interface}",{
110bbf8bd6cSSantosh Puranik             % if properties:
1111bb0d387SDeepak Kodihalli                 % for dbus_property,property_value in properties.items():
1120065905eSRatan Gupta                     {"${dbus_property}",{
113e245e4e9SDhruvaraj Subhashchandran <%
114e245e4e9SDhruvaraj Subhashchandran try:
115e245e4e9SDhruvaraj Subhashchandran     preReq = property_value["Prereqs"]
11631eed5c5STom Joseph except KeyError:
117e245e4e9SDhruvaraj Subhashchandran     preReq = dict()
118e245e4e9SDhruvaraj Subhashchandran %>\
119e245e4e9SDhruvaraj Subhashchandran                     {
120e245e4e9SDhruvaraj Subhashchandran                         % for preOffset,preValues in preReq.items():
121e245e4e9SDhruvaraj Subhashchandran                         { ${preOffset},{
122e245e4e9SDhruvaraj Subhashchandran                             % for name,value in preValues.items():
123e245e4e9SDhruvaraj Subhashchandran                                 % if name == "type":
124e245e4e9SDhruvaraj Subhashchandran <%                              continue %>\
125e245e4e9SDhruvaraj Subhashchandran                                 % endif
126e245e4e9SDhruvaraj Subhashchandran <%                          value = str(value).lower() %>\
127e245e4e9SDhruvaraj Subhashchandran                                 ${value},
128e245e4e9SDhruvaraj Subhashchandran                             % endfor
129e245e4e9SDhruvaraj Subhashchandran                             }
130e245e4e9SDhruvaraj Subhashchandran                         },
131e245e4e9SDhruvaraj Subhashchandran                         % endfor
132e245e4e9SDhruvaraj Subhashchandran                     },
133e245e4e9SDhruvaraj Subhashchandran                     {
134e245e4e9SDhruvaraj Subhashchandran                     % for offset,values in property_value["Offsets"].items():
1350065905eSRatan Gupta                         { ${offset},{
136e0af7209SDhruvaraj Subhashchandran                             % if offset == 0xFF:
137e0af7209SDhruvaraj Subhashchandran                                 }},
138e0af7209SDhruvaraj Subhashchandran <%                          continue %>\
139e0af7209SDhruvaraj Subhashchandran                             % endif
140ca4c4467SRatan Gupta <%                          valueType = values["type"] %>\
141e84841ceSDhruvaraj Subhashchandran <%
142e84841ceSDhruvaraj Subhashchandran try:
143e84841ceSDhruvaraj Subhashchandran     skip = values["skipOn"]
144e84841ceSDhruvaraj Subhashchandran     if skip == "assert":
145e84841ceSDhruvaraj Subhashchandran         skipVal = "SkipAssertion::ASSERT"
146e84841ceSDhruvaraj Subhashchandran     elif skip == "deassert":
147e84841ceSDhruvaraj Subhashchandran         skipVal = "SkipAssertion::DEASSERT"
148e84841ceSDhruvaraj Subhashchandran     else:
149e84841ceSDhruvaraj Subhashchandran         assert "Unknown skip value " + str(skip)
15031eed5c5STom Joseph except KeyError:
151e84841ceSDhruvaraj Subhashchandran     skipVal = "SkipAssertion::NONE"
152e84841ceSDhruvaraj Subhashchandran %>\
153e84841ceSDhruvaraj Subhashchandran                                 ${skipVal},
1541bb0d387SDeepak Kodihalli                         % for name,value in values.items():
155e84841ceSDhruvaraj Subhashchandran                             % if name == "type" or name == "skipOn":
156ca4c4467SRatan Gupta <%                          continue %>\
1570065905eSRatan Gupta                             % endif
1580065905eSRatan Gupta                             % if valueType == "string":
1590065905eSRatan Gupta                             std::string("${value}"),
160ca4c4467SRatan Gupta                             % elif valueType == "bool":
161ca4c4467SRatan Gupta <%                         value = str(value).lower() %>\
162ca4c4467SRatan Gupta                             ${value},
1630065905eSRatan Gupta                             % else:
1640065905eSRatan Gupta                             ${value},
1650065905eSRatan Gupta                             % endif
1660065905eSRatan Gupta                         % endfor
1670065905eSRatan Gupta                             }
1680065905eSRatan Gupta                         },
1690065905eSRatan Gupta                     % endfor
170e245e4e9SDhruvaraj Subhashchandran                     }}},
1710065905eSRatan Gupta                 % endfor
172bbf8bd6cSSantosh Puranik             % endif
1730065905eSRatan Gupta             }},
1740065905eSRatan Gupta     % endfor
17562235618SEmily Shaffer      },
1760065905eSRatan Gupta }},
1770065905eSRatan Gupta    % endif
1780065905eSRatan Gupta % endfor
1790065905eSRatan Gupta };
1800065905eSRatan Gupta 
181db0cbe64SPatrick Venture } // namespace sensor
182db0cbe64SPatrick Venture } // namespace ipmi
183