/usr/lib/neard/tools/bt-handover is in neard-tools 0.16-0.1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | #!/usr/bin/python
import os
import sys
import gobject
import dbus
import dbus.mainloop.glib
from optparse import OptionParser
import neardutils
from dbus.lowlevel import MethodCallMessage, HANDLER_RESULT_NOT_YET_HANDLED
mainloop = gobject.MainLoop()
def device_added(path, interfaces):
for iface, props in interfaces.iteritems():
if "org.neard.Device" in interfaces:
print("Pairing with %s" % (path))
device = dbus.Interface(bus.get_object("org.neard", path),
"org.neard.Device")
device.Push(({ "Type" : "Handover", "Carrier" : "bluetooth"}))
break
def device_removed(path, interfaces):
for iface in interfaces:
if "org.neard.Device" in interfaces:
print("Lost device %s" % (path))
mainloop.quit()
break
def remove_paired_devices(bt_adapter):
manager = dbus.Interface(bus.get_object("org.bluez", "/"),
"org.freedesktop.DBus.ObjectManager")
objects = manager.GetManagedObjects()
all_adapters = (path for path, interfaces in objects.iteritems() if
"org.bluez.Adapter1" in interfaces.keys()
and path.endswith(bt_adapter))
bluez_adapter = None
for adapter in sorted(all_adapters):
bluez_adapter = dbus.Interface(bus.get_object("org.bluez",
adapter),
"org.bluez.Adapter1")
break
if(bluez_adapter is None):
print("Bluetooth adapter %s could not be found" % bluez_adapter)
exit()
adapter_path = bluez_adapter.object_path
print("Using %s" % adapter_path)
adapter_props = dbus.Interface(bus.get_object("org.bluez", adapter_path),
"org.freedesktop.DBus.Properties")
powered = adapter_props.Get("org.bluez.Adapter1", "Powered")
if (powered == dbus.Boolean(0)):
print("Bluetooth adapter %s is not powered" % adapter_path )
exit()
all_devices = (path for path, interfaces in objects.iteritems() if
("org.bluez.Device1" in interfaces.keys()
and path.startswith(bluez_adapter.object_path)))
for device in all_devices:
print("Removing %s" % (device))
bluez_adapter.RemoveDevice(device)
def remove_paired_devices_bluez4():
bluez_manager = dbus.Interface(bus.get_object("org.bluez", "/"),
"org.bluez.Manager")
bluez_adapter_path = bluez_manager.DefaultAdapter()
bluez_adapter = dbus.Interface(bus.get_object("org.bluez",
bluez_adapter_path),
"org.bluez.Adapter")
print("Using %s" % bluez_adapter.object_path)
for bluez_path in bluez_adapter.ListDevices():
print("Removing %s" % (bluez_path))
bluez_adapter.RemoveDevice(bluez_path)
if __name__ == '__main__':
parser = OptionParser()
parser.add_option("", "--bluez4", action="store_true",
dest="use_bluez4",
help="Use BlueZ 4 to remove paired devices.")
parser.add_option("-a", "--adapter", metavar="BT_ADAPTER",
dest="bt_adapter", default="",
help="The bluetooth adapter that is used by "
"the bluetooth stack. This options is "
"ignored when using BlueZ 4, instead "
"the default adapter is used.")
(options, args) = parser.parse_args()
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
adapter_path = neardutils.find_adapter().object_path
print("Adapter path %s" % (adapter_path))
adapter = dbus.Interface(bus.get_object("org.neard", adapter_path),
"org.neard.Adapter")
adapter_props = dbus.Interface(bus.get_object("org.neard", adapter_path),
"org.freedesktop.DBus.Properties")
powered = adapter_props.Get("org.neard.Adapter", "Powered")
if (powered == dbus.Boolean(0)):
adapter_props.Set("org.neard.Adapter", "Powered", dbus.Boolean(1))
if (options.use_bluez4):
remove_paired_devices_bluez4()
else:
remove_paired_devices(options.bt_adapter)
polling = adapter_props.Get("org.neard.Adapter", "Polling")
if (polling == dbus.Boolean(0)):
adapter.StartPollLoop("Initiator")
bus.add_signal_receiver(device_added, bus_name="org.neard",
dbus_interface="org.freedesktop.DBus.ObjectManager",
signal_name="InterfacesAdded")
bus.add_signal_receiver(device_removed, bus_name="org.neard",
dbus_interface="org.freedesktop.DBus.ObjectManager",
signal_name="InterfacesRemoved")
mainloop.run()
|