support InterfaceAdded signal
diff --git a/bin/Openbmc.py b/bin/Openbmc.py
index b370d8b..b87fec8 100755
--- a/bin/Openbmc.py
+++ b/bin/Openbmc.py
@@ -5,17 +5,11 @@
GPIO_DEV = '/sys/class/gpio'
BUS = "system"
-ENUMS = {
- 'org.openbmc.SensorIntegerThreshold.state' :
- ['NOT_SET','NORMAL','LOWER_CRITICAL','LOWER_WARNING','UPPER_WARNING','UPPER_CRITICAL'],
-}
-
def getSystemName():
#use filename as system name, strip off path and ext
parts = __file__.replace('.pyc','').replace('.py','').split('/')
return parts[len(parts)-1]
-
def getDBus():
bus = None
if (BUS == "session"):
@@ -24,18 +18,11 @@
bus = dbus.SystemBus()
return bus
-
-def getManagerInterface(bus,manager):
- bus_name = "org.openbmc.managers."+manager
- obj_name = "/org/openbmc/managers/"+manager
- obj = bus.get_object(bus_name,obj_name)
- return dbus.Interface(obj,bus_name)
-
-
class DbusProperties(dbus.service.Object):
def __init__(self):
dbus.service.Object.__init__(self)
self.properties = {}
+ self.object_path = ""
@dbus.service.method(dbus.PROPERTIES_IFACE,
in_signature='ss', out_signature='v')
@@ -94,17 +81,66 @@
if (value_changed == True):
self.PropertiesChanged(interface_name, prop_dict, [])
-
@dbus.service.signal(dbus.PROPERTIES_IFACE,
signature='sa{sv}as')
def PropertiesChanged(self, interface_name, changed_properties,
invalidated_properties):
pass
+class DbusObjectManager(dbus.service.Object):
+ def __init__(self):
+ dbus.service.Object.__init__(self)
+ self.objects = {}
+
+ def add(self,object_path,obj):
+ self.objects[object_path] = obj
+ self.InterfacesAdded(object_path,obj.properties)
+
+ def remove(self,object_path):
+ obj = self.objects.pop(object_path,None)
+ obj.remove_from_connection()
+ self.InterfacesRemoved(object_path,obj.properties.keys())
+
+ def get(self,object_path):
+ return self.objects[object_path]
+
+ @dbus.service.method("org.freedesktop.DBus.ObjectManager",
+ in_signature='', out_signature='a{oa{sa{sv}}}')
+ def GetManagedObjects(self):
+ data = {}
+ for objpath in self.objects.keys():
+ data[objpath] = self.objects[objpath].properties
+ return data
+
+ @dbus.service.signal("org.freedesktop.DBus.ObjectManager",
+ signature='oa{sa{sv}}')
+ def InterfacesAdded(self,object_path,properties):
+ self.ObjectAdded(object_path,"")
+
+ @dbus.service.signal("org.freedesktop.DBus.ObjectManager",
+ signature='oas')
+ def InterfacesRemoved(self,object_path,interfaces):
+ pass
+
+ ## Legacy support, need to eventually refactor out
@dbus.service.signal("org.openbmc.Object.ObjectMapper",
signature='ss')
def ObjectAdded(self,object_path,interface_name):
pass
+ ## flattens interfaces
+ @dbus.service.method('org.openbmc.Object.Enumerate',
+ in_signature='', out_signature='a{sa{sv}}')
+ def enumerate(self):
+ data = {}
+ for objpath in self.objects.keys():
+ props = self.objects[objpath].properties
+ data[objpath] = { }
+ for iface in props.keys():
+ data[objpath].update(props[iface])
+
+ return data
+
+