1 ## This file is a template.  The comment below is emitted
2 ## into the rendered file; feel free to edit this file.
3 // !!! WARNING: This is a GENERATED Code..Please do NOT Edit !!!
4 <%
5 interfaceDict = {}
6 sensorNameMaxLength = 16
7 %>\
8 %for key in sensorDict.keys():
9 <%
10     sensor = sensorDict[key]
11     serviceInterface = sensor["serviceInterface"]
12     if serviceInterface == "org.freedesktop.DBus.Properties":
13         updateFunc = "set::"
14         getFunc = "get::"
15     elif serviceInterface == "xyz.openbmc_project.Inventory.Manager":
16         updateFunc = "notify::"
17         getFunc = "inventory::get::"
18     else:
19         assert "Un-supported interface: " + serviceInterface
20     endif
21     if serviceInterface not in interfaceDict:
22         interfaceDict[serviceInterface] = {}
23         interfaceDict[serviceInterface]["updateFunc"] = updateFunc
24         interfaceDict[serviceInterface]["getFunc"] = getFunc
25 %>\
26 % endfor
27 
28 #include "sensordatahandler.hpp"
29 
30 #include <ipmid/types.hpp>
31 
32 namespace ipmi {
33 namespace sensor {
34 
35 extern const IdInfoMap sensors = {
36 % for key in sensorDict.keys():
37    % if key:
38 {${key},{
39 <%
40        sensor = sensorDict[key]
41        interfaces = sensor["interfaces"]
42        path = sensor["path"]
43        serviceInterface = sensor["serviceInterface"]
44        sensorType = sensor["sensorType"]
45        entityID = sensor.get("entityID", 0)
46        instance = sensor.get("entityInstance", 0)
47        readingType = sensor["sensorReadingType"]
48        multiplier = sensor.get("multiplierM", 1)
49        offsetB = sensor.get("offsetB", 0)
50        bExp = sensor.get("bExp", 0)
51        rExp = sensor.get("rExp", 0)
52        unit = sensor.get("unit", "")
53        scale = sensor.get("scale", 0)
54        hasScale = "true" if "scale" in sensor.keys() else "false"
55        valueReadingType = sensor["readingType"]
56        updateFunc = interfaceDict[serviceInterface]["updateFunc"]
57        updateFunc += sensor["readingType"]
58        getFunc = interfaceDict[serviceInterface]["getFunc"]
59        getFunc += sensor["readingType"]
60        sensorName = sensor.get("sensorName", None)
61        if sensorName:
62            assert len(sensorName) <= sensorNameMaxLength, \
63                    "sensor name '%s' is too long (%d bytes max)" % \
64                    (sensorName, sensorNameMaxLength)
65        else:
66            sensorNameFunc = "get::" + sensor.get("sensorNamePattern",
67                    "nameLeaf")
68 
69        if "readingAssertion" == valueReadingType or "readingData" == valueReadingType:
70            for interface,properties in interfaces.items():
71                for dbus_property,property_value in properties.items():
72                    for offset,values in property_value["Offsets"].items():
73                        valueType = values["type"]
74            updateFunc = "set::" + valueReadingType + "<" + valueType + ">"
75            getFunc = "get::" + valueReadingType + "<" + valueType + ">"
76        sensorInterface = serviceInterface
77        if serviceInterface == "org.freedesktop.DBus.Properties":
78            sensorInterface = next(iter(interfaces))
79        mutability = sensor.get("mutability", "Mutability::Read")
80 %>
81         .entityType = ${entityID},
82         .instance = ${instance},
83         .sensorType = ${sensorType},
84         .sensorPath = "${path}",
85         .sensorInterface = "${sensorInterface}",
86         .sensorReadingType = ${readingType},
87         .coefficientM = ${multiplier},
88         .coefficientB = ${offsetB},
89         .exponentB = ${bExp},
90         .scaledOffset = ${offsetB * pow(10,bExp)},
91         .exponentR = ${rExp},
92         .hasScale = ${hasScale},
93         .scale = ${scale},
94         .unit = "${unit}",
95         .updateFunc = ${updateFunc},
96         .getFunc = ${getFunc},
97         .mutability = Mutability(${mutability}),
98     % if sensorName:
99         .sensorName = "${sensorName}",
100     % else:
101         .sensorNameFunc = ${sensorNameFunc},
102     % endif
103         .propertyInterfaces = {
104     % for interface,properties in interfaces.items():
105             {"${interface}",{
106             % if properties:
107                 % for dbus_property,property_value in properties.items():
108                     {"${dbus_property}",{
109 <%
110 try:
111     preReq = property_value["Prereqs"]
112 except KeyError:
113     preReq = dict()
114 %>\
115                     {
116                         % for preOffset,preValues in preReq.items():
117                         { ${preOffset},{
118                             % for name,value in preValues.items():
119                                 % if name == "type":
120 <%                              continue %>\
121                                 % endif
122 <%                          value = str(value).lower() %>\
123                                 ${value},
124                             % endfor
125                             }
126                         },
127                         % endfor
128                     },
129                     {
130                     % for offset,values in property_value["Offsets"].items():
131                         { ${offset},{
132                             % if offset == 0xFF:
133                                 }},
134 <%                          continue %>\
135                             % endif
136 <%                          valueType = values["type"] %>\
137 <%
138 try:
139     skip = values["skipOn"]
140     if skip == "assert":
141         skipVal = "SkipAssertion::ASSERT"
142     elif skip == "deassert":
143         skipVal = "SkipAssertion::DEASSERT"
144     else:
145         assert "Unknown skip value " + str(skip)
146 except KeyError:
147     skipVal = "SkipAssertion::NONE"
148 %>\
149                                 ${skipVal},
150                         % for name,value in values.items():
151                             % if name == "type" or name == "skipOn":
152 <%                          continue %>\
153                             % endif
154                             % if valueType == "string":
155                             std::string("${value}"),
156                             % elif valueType == "bool":
157 <%                         value = str(value).lower() %>\
158                             ${value},
159                             % else:
160                             ${value},
161                             % endif
162                         % endfor
163                             }
164                         },
165                     % endfor
166                     }}},
167                 % endfor
168             % endif
169             }},
170     % endfor
171      },
172 }},
173    % endif
174 % endfor
175 };
176 
177 } // namespace sensor
178 } // namespace ipmi
179