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