blob: b320d529748a4159550733e05e4b4955627947ab [file] [log] [blame]
Norman Jamesce46e3e2015-08-30 22:25:55 -05001import dbus
Norman James9e6acf92015-09-08 07:00:04 -05002import xml.etree.ElementTree as ET
Norman Jamesce46e3e2015-08-30 22:25:55 -05003
4BUS_PREFIX = 'org.openbmc'
Norman James362a80f2015-09-14 14:04:39 -05005OBJ_PREFIX = "/org/openbmc"
Norman Jamesce46e3e2015-08-30 22:25:55 -05006GPIO_DEV = '/sys/class/gpio'
7
8
9FRU_TYPES = {
Norman James90baede2015-09-02 20:32:49 -050010 'CPU' : 1,
11 'DIMM' : 2,
12 'BACKPLANE' : 3,
13 'RISER_CARD' : 4,
14 'FAN' : 5
Norman Jamesce46e3e2015-08-30 22:25:55 -050015}
Norman James362a80f2015-09-14 14:04:39 -050016FRU_STATES = {
17 'NORMAL' : 0,
18 'RECOVERABLE_ERROR' : 1,
19 'FATAL_ERROR' : 2,
20 'NOT_PRESENT' : 3,
21}
Norman James32e74e22015-09-15 21:28:06 -050022
23EVENT_TYPES = ['NONE','FATAL','RECOVERABLE','WARNING','SW_ERROR','INFO']
24
25
Norman Jamesce46e3e2015-08-30 22:25:55 -050026ENUMS = {
27 'org.openbmc.SensorIntegerThreshold.state' :
28 ['NOT_SET','NORMAL','LOWER_CRITICAL','LOWER_WARNING','UPPER_WARNING','UPPER_CRITICAL'],
Norman James362a80f2015-09-14 14:04:39 -050029}
30
31DBUS_TO_BASE_TYPES = {
32 'dbus.Byte' : 'int',
33 'dbus.Double' : 'float',
34 'dbus.Int32' : 'int',
35 'dbus.UInt32' : 'long',
36 'dbus.String' : 'str',
37 'dbus.UInt64' : 'long',
38 'dbus.Boolean' : 'bool',
39}
40
41BASE_TO_DBUS_TYPES = {
42 'int' : 'dbus.Int32',
43 'float' : 'dbus.Double',
44 'str' : 'dbus.String',
45 'long' : 'dbus.Int64',
46 'bool' : 'dbus.Boolean'
Norman Jamesce46e3e2015-08-30 22:25:55 -050047}
Norman James90baede2015-09-02 20:32:49 -050048
Norman James5d78b4d2015-09-05 13:34:34 -050049
Norman James362a80f2015-09-14 14:04:39 -050050def getManagerInterface(bus,manager):
51 bus_name = "org.openbmc.managers."+manager
52 obj_name = "/org/openbmc/managers/"+manager
53 obj = bus.get_object(bus_name,obj_name)
54 return dbus.Interface(obj,bus_name)
Norman James5d78b4d2015-09-05 13:34:34 -050055
Norman James5d78b4d2015-09-05 13:34:34 -050056
Norman James362a80f2015-09-14 14:04:39 -050057def get_objs(bus,bus_name,path,objects):
58 obj = bus.get_object(bus_name,path)
Norman James9e6acf92015-09-08 07:00:04 -050059 introspect_iface = dbus.Interface(obj,"org.freedesktop.DBus.Introspectable")
Norman James362a80f2015-09-14 14:04:39 -050060 #print introspect_iface.Introspect()
Norman James9e6acf92015-09-08 07:00:04 -050061 tree = ET.ElementTree(ET.fromstring(introspect_iface.Introspect()))
62 root = tree.getroot()
Norman James362a80f2015-09-14 14:04:39 -050063 for node in root.iter('node'):
64 if (node.attrib.has_key('name') == False):
65 for intf in node.iter('interface'):
66 intf_name = intf.attrib['name']
67 if (intf_name.find(BUS_PREFIX)==0):
68 parts=path.split('/')
69 instance = parts[len(parts)-1]
70 if (objects.has_key(instance) == False):
71 objects[instance] = {}
72 objects[instance]['PATH'] = path
73 objects[instance]['INIT'] = []
74 for method in intf.iter('method'):
75 if (method.attrib['name'] == "init"):
76 objects[instance]['INIT'].append(intf_name)
77
78 else:
79 node_name = node.attrib['name']
80 if (node_name != path):
81 get_objs(bus,bus_name,path+"/"+node.attrib['name'],objects)
82
83
84
85#def get_methods(obj):
86# methods = {}
87# introspect_iface = dbus.Interface(obj,"org.freedesktop.DBus.Introspectable")
88 # tree = ET.ElementTree(ET.fromstring(introspect_iface.Introspect()))
89 # root = tree.getroot()
90# for intf in root.iter('interface'):
91 # intf_name = intf.attrib['name']
92# if (intf_name.find(BUS_PREFIX)==0):
93# methods[intf_name] = {}
94# for method in intf.iter('method'):
95# methods[intf_name][method.attrib['name']] = True
96#
97# return methods
Norman James5d78b4d2015-09-05 13:34:34 -050098
Norman James90baede2015-09-02 20:32:49 -050099class DbusProperty:
100 def __init__(self,name,value):
Norman James90baede2015-09-02 20:32:49 -0500101 self.name = str(name)
102 self.dbusType = str(type(value)).split("'")[1]
Norman James362a80f2015-09-14 14:04:39 -0500103 self.variant_level = 2
Norman James90baede2015-09-02 20:32:49 -0500104 self.value = None
Norman James362a80f2015-09-14 14:04:39 -0500105 if (BASE_TO_DBUS_TYPES.has_key(self.dbusType) == False):
106 self.variant_level = value.variant_level
107 try:
108 self.value = eval(DBUS_TO_BASE_TYPES[self.dbusType]+"(value)")
109 except:
110 raise Exception("Unknown dbus type: "+self.dbusType)
111 else:
112 self.dbusType = BASE_TO_DBUS_TYPES[self.dbusType]
113 self.value = value
Norman James90baede2015-09-02 20:32:49 -0500114
Norman James5d78b4d2015-09-05 13:34:34 -0500115 def setValue(self,value):
Norman James90baede2015-09-02 20:32:49 -0500116 try:
Norman James362a80f2015-09-14 14:04:39 -0500117 self.value = eval(DBUS_TO_BASE_TYPES[self.dbusType]+"(value)")
Norman James90baede2015-09-02 20:32:49 -0500118 except:
119 raise Exception("Unknown dbus type: "+self.dbusType)
120
Norman James5d78b4d2015-09-05 13:34:34 -0500121 def setVariant(self,variant_level):
122 self.variant_level = variant_level
Norman James90baede2015-09-02 20:32:49 -0500123
124 def getName(self):
125 return self.name
Norman James5d78b4d2015-09-05 13:34:34 -0500126
Norman James90baede2015-09-02 20:32:49 -0500127 def getValue(self):
Norman James5d78b4d2015-09-05 13:34:34 -0500128 e = self.dbusType+"(self.value, variant_level="+str(self.variant_level)+")"
Norman James90baede2015-09-02 20:32:49 -0500129 return eval(e)
130
Norman James362a80f2015-09-14 14:04:39 -0500131 def getBaseValue(self):
132 return self.value
Norman James90baede2015-09-02 20:32:49 -0500133
134 def __str__(self):
135 return self.dbusType+":"+str(self.value)