32d4a71e36
Install pygobject dependency and bump versions of some of its dependencies. Fix gobject-introspection build error on host by setting -Dbuild_introspection_data=false. Update bluezutils.py to use items() function renamed in recent python versions. Remove .cache dir from agentpath, otherwise dbus complains that the path is invalid. The directory exists so it's unclear what the real problem is here. Include python_fix_abi function in build so target files don't get host arch naming.
47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
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")
|