更新的Bluez DBUS-API文档?

8

我刚刚尝试运行一个Vala Bluez示例(在DbusClientSamples页面中找到),但是我遇到了以下错误:

GDBus.Error:org.freedesktop.DBus.Error.UnknownObject:
Method "DiscoverDevices" with signature "" on interface "org.bluez.Adapter"
doesn't exist

这个样例是否使用了已弃用的API?如果是,那么我在哪里可以找到有关bluez的DBUS API的更新文档?我通过谷歌搜索发现的所有文档都包含DiscoverDevices方法,所以我感到很困惑。

3个回答

11

5
org.bluez.Adapter被org.bluez.Adapter1所取代了?真是一团糟。 - knocte
1
为什么?他们需要打破向后兼容性,因此使用新名称添加了新的API。我认为这似乎是相当合理的。如果每个人都预期到每种用例并在第一次尝试时设计出完美的API,那将是很好的,但这似乎不太可能... - nemequ

5
最好获取BlueZ DBus文档的方法是从BlueZ网站下载源代码,解压缩后查看doc目录。所有当前的DBus API都在那里列出。
我最近经常使用这些文档。它们足够好了,虽然可能有更好的选择。大部分内容都很明显,最不明显的问题也有解释。

1
官方BlueZ网站还提供了BlueZ 5 API介绍和移植指南的博客文章,其中提供了关于DBus API的一些描述。在页面顶部,他们写道:
BlueZ 5 D-Bus API与BlueZ 4相比有重大变化。这些变化的主要原因是BlueZ 5中以下功能:
...
引入接口版本(例如org.bluez.Adapter1)。当引入新版本时,我们将尝试同时支持至少最新的两个版本。
...
有一个部分讨论了DBus对象管理器:
相反,应用程序将通过执行ObjectManager.GetManagedObjects调用来发现可用的适配器,并查找具有“org.bluez.Adapter1”接口的任何返回对象。
此外,除了查看BlueZ源代码的docs目录(如thisthis答案中所提到的),我发现检查test目录中的示例源代码(https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/test)也很有帮助。

这里是example-advertisement代码的部分内容:

BLUEZ_SERVICE_NAME = 'org.bluez'
LE_ADVERTISING_MANAGER_IFACE = 'org.bluez.LEAdvertisingManager1'
DBUS_OM_IFACE = 'org.freedesktop.DBus.ObjectManager'
DBUS_PROP_IFACE = 'org.freedesktop.DBus.Properties'

...

def main(timeout=0):
    ...
    adapter_props = dbus.Interface(bus.get_object(BLUEZ_SERVICE_NAME, adapter),
                                   "org.freedesktop.DBus.Properties")

    adapter_props.Set("org.bluez.Adapter1", "Powered", dbus.Boolean(1))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接