| import dbus |
| |
| SERVICE_NAME = "org.bluez" |
| ADAPTER_INTERFACE = SERVICE_NAME + ".Adapter1" |
| DEVICE_INTERFACE = SERVICE_NAME + ".Device1" |
| |
| def get_managed_objects(): |
| bus = dbus.SystemBus() |
| manager = dbus.Interface(bus.get_object("org.bluez", "/"), |
| "org.freedesktop.DBus.ObjectManager") |
| return manager.GetManagedObjects() |
| |
| def find_adapter(pattern=None): |
| return find_adapter_in_objects(get_managed_objects(), pattern) |
| |
| def find_adapter_in_objects(objects, pattern=None): |
| bus = dbus.SystemBus() |
| for path, ifaces in objects.items(): |
| adapter = ifaces.get(ADAPTER_INTERFACE) |
| if adapter is None: |
| continue |
| if not pattern or pattern == adapter["Address"] or \ |
| path.endswith(pattern): |
| obj = bus.get_object(SERVICE_NAME, path) |
| return dbus.Interface(obj, ADAPTER_INTERFACE) |
| raise Exception("Bluetooth adapter not found") |
| |
| def find_device(device_address, adapter_pattern=None): |
| return find_device_in_objects(get_managed_objects(), device_address, |
| adapter_pattern) |
| |
| def find_device_in_objects(objects, device_address, adapter_pattern=None): |
| bus = dbus.SystemBus() |
| path_prefix = "" |
| if adapter_pattern: |
| adapter = find_adapter_in_objects(objects, adapter_pattern) |
| path_prefix = adapter.object_path |
| for path, ifaces in objects.items(): |
| device = ifaces.get(DEVICE_INTERFACE) |
| if device is None: |
| continue |
| if (device["Address"] == device_address and |
| path.startswith(path_prefix)): |
| obj = bus.get_object(SERVICE_NAME, path) |
| return dbus.Interface(obj, DEVICE_INTERFACE) |
| |
| raise Exception("Bluetooth device not found") |