3

我有一个 dbus-send 调用: dbus-send --system --print-reply --dest=org.freedesktop.ModemManager1 "/org/freedesktop/ModemManager1/Modem/0" org.freedesktop.DBus.Properties.Get string :org.freedesktop.ModemManager1.Modem 字符串:"SignalQuality"

而且我想编写一个简单的 C 代码来做完全相同的事情,嗯,C 方式。

我找不到足够的信息或任何对我有意义的信息来帮助我弄清楚将其转换为 C 需要什么。

我尝试了 g_dbus_proxy 调用,但成功有限。

我努力了:

#define MM_DBUS_SERVICE "org.freedesktop.ModemManager1"
#define MM_DBUS_PATH "/org/freedesktop/ModemManager1/Modem/0"
#define MM_DBUS_GET_PROPERTIES  "org.freedesktop.DBus.Properties.Get"

proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
                                           G_DBUS_PROXY_FLAGS_NONE,
                                           NULL,
                                           MM_DBUS_SERVICE,
                                           MM_DBUS_PATH,
                                           MM_DBUS_GET_PROPERTIES,
                                           NULL, NULL);
    ret = g_dbus_proxy_call_sync (proxy,
                                  "SignalQuality",
                                  NULL,
                                  G_DBUS_CALL_FLAGS_NONE, -1,
                                  NULL, &error);
    if (!ret) {
            g_dbus_error_strip_remote_error (error);
            g_print ("failed: %s\n", error->message);
            g_error_free (error);
            return;
    }

但它不断失败并出现错误失败:路径/org/freedesktop/ModemManager1/Modem/0 处的对象上没有此类接口`org.freedesktop.DBus.Properties.Get'

有什么想法可以让这一切顺利进行吗?

4

1 回答 1

3

当您调用g_dbus_proxy_new_for_bus_sync(..)时,我认为interface_name应该是“org.freedesktop.DBus.Properties”,所以请尝试

#define MM_DBUS_GET_PROPERTIES  "org.freedesktop.DBus.Properties"

当您调用g_dbus_proxy_call_sync()时,method_name应为“org.freedesktop.DBus.Properties.Get”,因此请尝试:

ret = g_dbus_proxy_call_sync (proxy,
                              "org.freedesktop.DBus.Properties.Get",
                              g_variant_new ("(ss)",
                                          "org.freedesktop.ModemManager1.Modem",
                                          "SignalQuality"),
                              G_DBUS_CALL_FLAGS_NONE, -1,
                              NULL, &error);
于 2016-03-23T22:55:38.397 回答