#!/usr/bin/python import gobject import sys import dbus import dbus.mainloop.glib import re from optparse import OptionParser, make_option dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) bus = dbus.SystemBus() mainloop = gobject.MainLoop() manager = dbus.Interface(bus.get_object("org.bluez", "/"), "org.bluez.Manager") option_list = [ make_option("-i", "--device", action="store", type="string", dest="dev_id"), ] parser = OptionParser(option_list=option_list) (options, args) = parser.parse_args() if options.dev_id: adapter_path = manager.FindAdapter(options.dev_id) else: adapter_path = manager.DefaultAdapter() adapter = dbus.Interface(bus.get_object("org.bluez", adapter_path), "org.bluez.Adapter") if (len(args) < 1): print "Usage: %s " % (sys.argv[0]) print "" print " list" print " services
" print " create
" print " remove " print " disconnect
" print " discover
[pattern]" print " class
" print " name
" print " alias
[alias]" print " trusted
[yes/no]" print " blocked
[yes/no]" sys.exit(1) if (args[0] == "list"): for path in adapter.ListDevices(): device = dbus.Interface(bus.get_object("org.bluez", path), "org.bluez.Device") properties = device.GetProperties() print "%s %s" % (properties["Address"], properties["Alias"]) sys.exit(0) def create_device_reply(device): print "New device (%s)" % device mainloop.quit() sys.exit(0) def create_device_error(error): print "Creating device failed: %s" % error mainloop.quit() sys.exit(1) if (args[0] == "create"): if (len(args) < 2): print "Need address parameter" else: adapter.CreateDevice(args[1], reply_handler=create_device_reply, error_handler=create_device_error) mainloop.run() if (args[0] == "remove"): if (len(args) < 2): print "Need address or object path parameter" else: try: path = adapter.FindDevice(args[1]) except: path = args[1] adapter.RemoveDevice(path) sys.exit(0) if (args[0] == "disconnect"): if (len(args) < 2): print "Need address parameter" else: path = adapter.FindDevice(args[1]) device = dbus.Interface(bus.get_object("org.bluez", path), "org.bluez.Device") device.Disconnect() sys.exit(0) if (args[0] == "discover"): if (len(args) < 2): print "Need address parameter" else: path = adapter.FindDevice(args[1]) device = dbus.Interface(bus.get_object("org.bluez", path), "org.bluez.Device") if (len(args) < 3): pattern = "" else: pattern = args[2] services = device.DiscoverServices(pattern); for key in services.keys(): p = re.compile(">.*?<") xml = p.sub("><", services[key].replace("\n", "")) print "[ 0x%5x ]" % (key) print xml print sys.exit(0) if (args[0] == "class"): if (len(args) < 2): print "Need address parameter" else: path = adapter.FindDevice(args[1]) device = dbus.Interface(bus.get_object("org.bluez", path), "org.bluez.Device") properties = device.GetProperties() print "0x%06x" % (properties["Class"]) sys.exit(0) if (args[0] == "name"): if (len(args) < 2): print "Need address parameter" else: path = adapter.FindDevice(args[1]) device = dbus.Interface(bus.get_object("org.bluez", path), "org.bluez.Device") properties = device.GetProperties() print properties["Name"] sys.exit(0) if (args[0] == "alias"): if (len(args) < 2): print "Need address parameter" else: path = adapter.FindDevice(args[1]) device = dbus.Interface(bus.get_object("org.bluez", path), "org.bluez.Device") if (len(args) < 3): properties = device.GetProperties() print properties["Alias"] else: device.SetProperty("Alias", args[2]) sys.exit(0) if (args[0] == "trusted"): if (len(args) < 2): print "Need address parameter" else: path = adapter.FindDevice(args[1]) device = dbus.Interface(bus.get_object("org.bluez", path), "org.bluez.Device") if (len(args) < 3): properties = device.GetProperties() print properties["Trusted"] else: if (args[2] == "yes"): value = dbus.Boolean(1) elif (args[2] == "no"): value = dbus.Boolean(0) else: value = dbus.Boolean(args[2]) device.SetProperty("Trusted", value) sys.exit(0) if (args[0] == "blocked"): if (len(args) < 2): print "Need address parameter" else: path = adapter.FindDevice(args[1]) device = dbus.Interface(bus.get_object("org.bluez", path), "org.bluez.Device") if (len(args) < 3): properties = device.GetProperties() print properties["Blocked"] else: if (args[2] == "yes"): value = dbus.Boolean(1) elif (args[2] == "no"): value = dbus.Boolean(0) else: value = dbus.Boolean(args[2]) device.SetProperty("Blocked", value) sys.exit(0) if (args[0] == "services"): if (len(args) < 2): print "Need address parameter" else: path = adapter.FindDevice(args[1]) device = dbus.Interface(bus.get_object("org.bluez", path), "org.bluez.Device") properties = device.GetProperties() for path in properties["Services"]: print path sys.exit(0) print "Unknown command" sys.exit(1)