2016-03-23 11 views
1

Ich habe einen dbus-send-Aufruf: dbus-send --system --print-reply --dest = org.freedesktop.ModemManager1 "/ org/freedesktop/ModemManager1/Modem/0 "org.freedesktop.DBus.Properties.Get string: org.freedesktop.ModemManager1.Modem string:" SignalQuality "dbus call in C von shell dbus-send

Und ich würde gerne einen einfachen C-Code schreiben, der genau das Gleiche tut, na ja, C Weg.

Ich kann nicht genug Informationen, oder irgendetwas finden, das mich macht Sinn für mich zu helfen, herauszufinden, was ich das C konvertieren müssen

ich g_dbus_proxy Anrufe mit begrenztem Erfolg versucht haben.

Ich habe versucht:

#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; 
    } 

aber es funktioniert nicht ständig mit Fehlern fehlgeschlagen: Keine solche Schnittstelle `org.freedesktop.DBus.Properties.Get‘ auf Objekt auf Pfad/org/Freedesktop/ModemManager1/Modem/0

Irgendwelche Ideen, wie man das in Gang bringt?

Antwort

1

Ich denke interface_name sollte "org.freedesktop.DBus.Properties" sein, wenn Sie g_dbus_proxy_new_for_bus_sync(..) nennen, so versuchen

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

und method_name sollte „org.freedesktop sein. DBus.Properties.Get ", wenn Sie g_dbus_proxy_call_sync() aufrufen, versuchen Sie so:

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);