【问题标题】:Updated Bluez DBUS-API document?更新了 Bluez DBUS-API 文档?
【发布时间】:2014-02-04 00:05:59
【问题描述】:

我刚刚尝试运行一个 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 方法,所以我很困惑。

【问题讨论】:

    标签: bluetooth glib dbus vala gio


    【解决方案1】:

    AFAICT org.bluez.Adapter 消失了(我在运行 bluez-5.12 的 Fedora 20 系统上看不到它)。取而代之的是org.bluez.Adapter1。您可以在 https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc 获取有关 bluez D-Bus API 的所有最新文档

    【讨论】:

    • org.bluez.Adapter 转而使用 org.bluez.Adapter1?真是个混蛋
    • 为什么?他们需要打破向后兼容性,因此他们添加了具有新名称的新 API。这对我来说似乎很合理。如果每个人都能预料到每个用例并在第一次尝试时设计出完美的 API,那就太好了,但这似乎不太可能……
    【解决方案2】:

    获取BlueZ DBus 文档的最佳方法是从BlueZ web site 下载源代码,解压缩,然后查看doc 目录。那里列出了所有当前的 DBus API。

    我最近经常使用这些文件。你可以要求更好,但它们已经足够好了。大部分是显而易见的,并且解释了最不明显的问题。

    【讨论】:

      【解决方案3】:

      BlueZ 官方网站还为BlueZ 5 API introduction and porting guide 提供了一篇博文,其中提供了一些关于他们的 DBus API 的描述。他们在页面顶部写道:

      与 BlueZ 相比,BlueZ 5 D-Bus API 包含重大变化 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))
      

      【讨论】:

        猜你喜欢
        • 2021-05-09
        • 2013-04-12
        • 2015-10-01
        • 2021-10-09
        • 2015-12-25
        • 2016-01-24
        • 2020-11-18
        • 2016-08-25
        • 1970-01-01
        相关资源
        最近更新 更多