gpt4 book ai didi

c++ - 从 net.connman.Manager 的 GetService 方法动态提取 D-Bus 参数和对象路径

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:19:15 27 4
gpt4 key购买 nike

我计划开发一个应用程序,它将使用 DBus 和 connman,一个用于嵌入式设备的无线管理器。根据我的理解,DBus 公开了程序使用的方法,并允许开发人员在自己的程序中也使用这些方法。

我知道Qt有QtDbus模块,如果我的理解是正确的,net.connman.Manager接口(interface)下的GetServices方法显示了可用的无线网络。检查 qdbusviewer 程序中 GetServices 方法的输出,我可以看到每个无线网络都有自己唯一的对象路径,例如 /net/connman/service/wifi_00120ec15ba0_4c616964614d616774616c6173_managed_psk

要在 net.connman.Services 接口(interface)下使用 Connect 和 Disconnect 方法,我需要对象路径,以便我可以创建一个新接口(interface),允许我调用 Connect/Disconnect。我目前正在尝试此处概述的方法 How do I extract the returned data from QDBusMessage in a Qt DBus call? ,但是当我尝试返回对象路径时,我只会得到一个空白:

这是我获取对象路径的代码:

QDBusConnection bus = QDBusConnection::systemBus();
QDBusInterface *interface = new QDBusInterface("net.connman",
"/",
"net.connman.Manager",
bus,
this);

QDBusMessage test = interface->call("GetServices");
QList<QVariant> outArgs = test.arguments();

QVariant first = outArgs.at(0);
qDebug() << first;

QDBusVariant dbvFirst = first.value<QDBusVariant>();

QVariant vFirst = dbvFirst.variant();
qDebug() << vFirst;

QDBusArgument dbusArgs = vFirst.value<QDBusArgument>();
qDebug() << "QDBusArgument current type is" << dbusArgs.currentType();

QDBusObjectPath path;
dbusArgs.beginArray();
while (!dbusArgs.atEnd())
{
dbusArgs >> path;
}

dbusArgs.endArray();
qDebug() << path.path();

如何提取 GetService 方法返回的参数和对象路径?有没有人正确地做到了这一点?我是 Qt 和编程的新手,所以任何帮助将不胜感激。

谢谢

最佳答案

这可能会晚一些,但希望这可以帮助其他人。我不确定您的调用的返回类型(在 dbus 中是 a(oa{sv})),但我尝试使用 QArrayOfPathProperties。因此,使用您的代码,test.arguments() 返回的类型将是:

QArrayOfPathProperties outArg;

提取可能是这样的:

for (int row = 0; row < outArg.size(); ++row) {
QMap<QString,QVariant> map = outArg.at(row).properties;
// for example you can extract the value like this:
auto serviceName = map.value("Name");
}

关于c++ - 从 net.connman.Manager 的 GetService 方法动态提取 D-Bus 参数和对象路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28979341/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com