1f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc#!/usr/bin/python
2f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc
3f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Jancimport gobject
4f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc
5f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Jancimport dbus.mainloop.glib
6f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc
7f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Jancdef create_device_reply(device):
8f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	print "Pairing succeed!"
9f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	mainloop.quit()
10f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc
11f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Jancdef create_device_error(error):
12f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	print "Pairing failed."
13f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	mainloop.quit()
14f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc
15f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Jancif __name__ == '__main__':
16f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
17f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc
18f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	mainloop = gobject.MainLoop()
19f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc
20f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	bus = dbus.SystemBus()
21f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	manager = dbus.Interface(bus.get_object("org.bluez", "/"),
22f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc							"org.bluez.Manager")
23f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc
24f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	adapter0_path = manager.FindAdapter("hci0")
25f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	adapter1_path = manager.FindAdapter("hci1")
26f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc
27f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	adapter0 = dbus.Interface(bus.get_object("org.bluez", adapter0_path),
28f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc							"org.bluez.Adapter")
29f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	adapter1 = dbus.Interface(bus.get_object("org.bluez", adapter1_path),
30f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc							"org.bluez.Adapter")
31f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc
32f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	adapter0_address = adapter0.GetProperties()["Address"]
33f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	adapter1_address = adapter1.GetProperties()["Address"]
34f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	print "Adapters:"
35f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	print "    hci0: " + adapter0_address
36f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	print "    hci1: " + adapter1_address
37f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	print
38f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc
39f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	print "Removing any existing bond..."
40f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc
41f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	try:
42f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc		device = adapter0.FindDevice(adapter1_address)
43f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc		adapter0.RemoveDevice(device)
44f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	except:
45f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc		pass
46f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc
47f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	try:
48f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc		device = adapter1.FindDevice(adapter0_address)
49f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc		adapter1.RemoveDevice(device)
50f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	except:
51f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc		pass
52f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc
53f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	print "Done."
54f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	print
55f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	print "Reading local Out of Band data..."
56f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc
57f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	oob_adapter0 = dbus.Interface(bus.get_object("org.bluez",
58f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc					adapter0_path), "org.bluez.OutOfBand")
59f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	oob_adapter1 = dbus.Interface(bus.get_object("org.bluez",
60f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc					adapter1_path), "org.bluez.OutOfBand")
61f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc
62f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	oob0 = oob_adapter0.ReadLocalData()
63f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	oob1 = oob_adapter1.ReadLocalData()
64f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc
65f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	print "Done."
66f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	print
67f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	print "Exchanging Out of Band data..."
68f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc
69f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	oob_adapter0.AddRemoteData(adapter1_address, oob1[0], oob1[1])
70f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	oob_adapter1.AddRemoteData(adapter0_address, oob0[0], oob0[1])
71f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc
72f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	print "Done."
73f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	print
74f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	print "Starting to pair."
75f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	adapter1.CreatePairedDevice(adapter0_address, "/test/agent_oob",
76f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc					"DisplayYesNo",
77f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc					reply_handler=create_device_reply,
78f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc					error_handler=create_device_error)
79f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc
80f6a34aa79b36995707f4f6cf29393cbbe602ac47Szymon Janc	mainloop.run()
81