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