【发布时间】:2012-10-12 07:48:27
【问题描述】:
我如何检查给定设备已连接的天气。使用 org.bluez.AudioSource GetProperty 我正在使用 c 和 DBus,任何人都可以帮助我摆脱这个...
【问题讨论】:
我如何检查给定设备已连接的天气。使用 org.bluez.AudioSource GetProperty 我正在使用 c 和 DBus,任何人都可以帮助我摆脱这个...
【问题讨论】:
我假设您一直在查看 BlueZ D-BUS API,这是一份与 BlueZ 信号和查询信息有关的所有内容的宝贵文档。您可以在 doc/ 文件夹中的任何 BlueZ 源中找到它。
要检查设备是否连接,您首先需要使用 D-BUS 获取计算机上的所有蓝牙设备及其路径,我不会提供任何 C 文档,因为您可以轻松找到很多关于这方面的例子使用谷歌。我将向您展示您可以通过 dbus-send 进行哪些 D-BUS 调用以获取此类信息。
获取设备列表:
dbus-send --system \
--dest=org.bluez \
--print-reply / \
org.bluez.Manager.GetProperties
这将返回一个适配器数组及其路径。
获得这些路径后,您可以检索与您的适配器配对的所有蓝牙设备的列表。
获取配对设备:
dbus-send --system \
--print-reply \
--dest=org.bluez \
/org/bluez/{pid}/hci0 \
org.bluez.Adapter.GetProperties
这会为您提供Devices 数组字段中的配对设备列表。
一旦您获得了与您的蓝牙适配器配对的设备列表,您就可以知道它是否已连接到 AudioSource 接口。
让设备连接到 AudioSource 接口:
dbus-send --system \
--print-reply \
--dest=org.bluez \
/org/bluez/{pid}/hci0/dev_XX_XX_XX_XX_XX_XX \
org.bluez.AudioSource.GetProperties
我发现首先尝试使用 dbus-send 调用 d-bus 更方便,因为 D-BUS C API 有点混乱且使用不方便。
【讨论】:
BlueZ version 4.98 上,org.bluez.AudioSource.GetProperties 抛出error: 错误 org.freedesktop.DBus.Error.UnknownMethod:接口“org.bluez.AudioSource”上带有签名“”的方法“GetProperties”不存在在@ 987654332@, 它works: 方法返回sender=:1.2 -> dest=:1.51 reply_serial=2 array [dict entry(string "State" variant string"disconnected")]