| #!/usr/bin/python3 |
| |
| from gi.repository import GLib |
| |
| import dbus |
| import dbus.mainloop.glib |
| |
| _dbus2py = { |
| dbus.String : str, |
| dbus.UInt32 : int, |
| dbus.Int32 : int, |
| dbus.Int16 : int, |
| dbus.UInt16 : int, |
| dbus.UInt64 : int, |
| dbus.Int64 : int, |
| dbus.Byte : int, |
| dbus.Boolean : bool, |
| dbus.ByteArray : str, |
| dbus.ObjectPath : str |
| } |
| |
| def dbus2py(d): |
| t = type(d) |
| if t in _dbus2py: |
| return _dbus2py[t](d) |
| if t is dbus.Dictionary: |
| return dict([(dbus2py(k), dbus2py(v)) for k, v in d.items()]) |
| if t is dbus.Array and d.signature == "y": |
| return "".join([chr(b) for b in d]) |
| if t is dbus.Array or t is list: |
| return [dbus2py(v) for v in d] |
| if t is dbus.Struct or t is tuple: |
| return tuple([dbus2py(v) for v in d]) |
| return d |
| |
| def pretty(d): |
| d = dbus2py(d) |
| t = type(d) |
| |
| if t in (dict, tuple, list) and len(d) > 0: |
| if t is dict: |
| d = ", ".join(["%s = %s" % (k, pretty(v)) |
| for k, v in d.items()]) |
| return "{ %s }" % d |
| |
| d = " ".join([pretty(e) for e in d]) |
| |
| if t is tuple: |
| return "( %s )" % d |
| |
| return str(d) |
| |
| def property_changed(name, value, path, interface): |
| iface = interface[interface.rfind(".") + 1:] |
| print("{%s} [%s] %s = %s" % (iface, path, name, pretty(value))) |
| |
| def added(name, value, member, path, interface): |
| iface = interface[interface.rfind(".") + 1:] |
| print("{%s} [%s] %s %s" % (iface, member, name, pretty(value))) |
| |
| def removed(name, member, path, interface): |
| iface = interface[interface.rfind(".") + 1:] |
| print("{%s} [%s] %s" % (iface, member, name)) |
| |
| def event(member, path, interface): |
| iface = interface[interface.rfind(".") + 1:] |
| print("{%s} [%s] %s" % (iface, path, member)) |
| |
| def message(msg, args, member, path, interface): |
| iface = interface[interface.rfind(".") + 1:] |
| print("{%s} [%s] %s %s (%s)" % (iface, path, member, |
| str(msg), pretty(args))) |
| |
| def ussd(msg, member, path, interface): |
| iface = interface[interface.rfind(".") + 1:] |
| print("{%s} [%s] %s %s" % (iface, path, member, str(msg))) |
| |
| def value(value, member, path, interface): |
| iface = interface[interface.rfind(".") + 1:] |
| print("{%s} [%s] %s %s" % (iface, path, member, str(value))) |
| |
| if __name__ == '__main__': |
| dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) |
| |
| bus = dbus.SystemBus() |
| |
| bus.add_signal_receiver(property_changed, |
| bus_name="org.ofono.dundee", |
| signal_name = "PropertyChanged", |
| path_keyword="path", |
| interface_keyword="interface") |
| |
| bus.add_signal_receiver(added, |
| bus_name="org.ofono.dundee", |
| signal_name = "DeviceAdded", |
| member_keyword="member", |
| path_keyword="path", |
| interface_keyword="interface") |
| |
| bus.add_signal_receiver(removed, |
| bus_name="org.ofono.dundee", |
| signal_name = "DeviceRemoved", |
| member_keyword="member", |
| path_keyword="path", |
| interface_keyword="interface") |
| |
| |
| mainloop = GLib.MainLoop() |
| mainloop.run() |