Qt中的Dbus org.bluez实现

时间:2013-08-27 13:41:56

标签: c++ qt bluetooth dbus bluez

我开始在Qt中使用DBus和蓝牙。我想开发一个脚本,只需通过DBus调用方法并获得回复。代码的一部分在这里(这是主要的部分):

QString hostname("00:07:80:60:CE:22");
QDBusConnection bus = QDBusConnection::sessionBus();
QDBusInterface interface("org.bluez", "/", "Manager", bus, 0);

qDebug()<<"is valid: "<<interface.isValid()<<interface.lastError();

interface.lastError()给出以下错误:

QDBusError(“org.freedesktop.DBus.Error.ServiceUnknown”,“任何.service文件未提供名称org.bluez”)

我安装了bluez和dbus。我可以从命令中搜索蓝牙设备。

我也试过命令sudo bluetoothd -d -n然后我得到这个: D-Bus设置失败:名称已在使用中 bluetoothd [21952]:无法上D-Bus

有谁知道可能会出现什么问题?

1 个答案:

答案 0 :(得分:0)

您收到的错误(name already in use)表示蓝牙守护程序已在您的系统上运行。你可以通过sudo service bluetooth stop来阻止它,虽然我觉得这是一个非常野蛮的方式来结束蓝牙守护进程。如果你结束守护进程,你也会结束BlueZ D-Bus实现,所以你将无法使用它。

虽然我从未使用过Qt的蓝牙/ dbus实现,但您的代码存在一些问题:

首先,BlueZ界面是通过系统总线发布的,而不是会话总线,因此这是应该进行的第一次更改。

其次,你传递"Manager"参数的功能是什么?如果您尝试挂钩名为"Manager"的DBus接口,则没有。我不确定是否有,看到你在2013年问过这个问题。你可以看到Bluez使用名为D-Feet的程序实现的DBus接口。你应该尝试一下,因为它帮助我理解了Bluez与DBus的工作原理。我推荐sudo apt-get install d-feet。在"/"路径发布的唯一接口是org.freedesktop.DBus.Introspectableorg.freedesktop.DBus.Objectmanager。同样,使用D-Feet可以很容易地看到并进行实验,因为它允许抽象接口和路径的可视化表示。

如果有任何机会,你以后会因GATT而遇到麻烦;使用bluetoothd实验标记运行-E;这使BlueZ GATT功能成为可能。 (只是抬头)。