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