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()
|