#!/usr/bin/python from __future__ import absolute_import, print_function, unicode_literals import gobject import dbus.mainloop.glib def create_device_reply(device): print("Pairing succeed!") mainloop.quit() def create_device_error(error): print("Pairing failed.") mainloop.quit() if __name__ == '__main__': dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) mainloop = gobject.MainLoop() bus = dbus.SystemBus() manager = dbus.Interface(bus.get_object("org.bluez", "/"), "org.bluez.Manager") adapter0_path = manager.FindAdapter("hci0") adapter1_path = manager.FindAdapter("hci1") adapter0 = dbus.Interface(bus.get_object("org.bluez", adapter0_path), "org.bluez.Adapter") adapter1 = dbus.Interface(bus.get_object("org.bluez", adapter1_path), "org.bluez.Adapter") adapter0_address = adapter0.GetProperties()["Address"] adapter1_address = adapter1.GetProperties()["Address"] print("Adapters:") print(" hci0: " + adapter0_address) print(" hci1: " + adapter1_address) print() print("Removing any existing bond...") try: device = adapter0.FindDevice(adapter1_address) adapter0.RemoveDevice(device) except: pass try: device = adapter1.FindDevice(adapter0_address) adapter1.RemoveDevice(device) except: pass print("Done.") print() print("Reading local Out of Band data...") oob_adapter0 = dbus.Interface(bus.get_object("org.bluez", adapter0_path), "org.bluez.OutOfBand") oob_adapter1 = dbus.Interface(bus.get_object("org.bluez", adapter1_path), "org.bluez.OutOfBand") oob0 = oob_adapter0.ReadLocalData() oob1 = oob_adapter1.ReadLocalData() print("Done.") print() print("Exchanging Out of Band data...") oob_adapter0.AddRemoteData(adapter1_address, oob1[0], oob1[1]) oob_adapter1.AddRemoteData(adapter0_address, oob0[0], oob0[1]) print("Done.") print() print("Starting to pair.") adapter1.CreatePairedDevice(adapter0_address, "/test/agent_oob", "DisplayYesNo", reply_handler=create_device_reply, error_handler=create_device_error) mainloop.run()