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