得到一个带有libdbus-c ++的DBus :: Path - 下一步是什么?

时间:2013-05-09 15:24:26

标签: c++ ipc dbus

我正在使用一个简短的测试程序来研究如何将D-Bus与libdbus-c++库一起使用。我正在尝试连接到wpa_supplicant D-Bus API(记录为here),以便阅读WiFi AP列表及其优势。

this guide之后,我使用dbusxx-xml2cpp wpa_supplicant_dbus_service.xml --proxy=proxy.h生成了一个代理标头,并使用存根处理程序为WPAS类实现了信号:

class WPAS : public fi::w1::wpa_supplicant1_proxy,
                    public DBus::IntrospectableProxy,
                    public DBus::ObjectProxy
{
public:
     WPAS(DBus::Connection &connection, const char *path, const char *name):
     DBus::ObjectProxy(connection, path, name)
     {
     }

    void InterfaceAdded(const ::DBus::Path& path, const std::map< std::string, ::DBus::Variant >& properties) {}
    void InterfaceRemoved(const ::DBus::Path& path) {}
    void PropertiesChanged(const std::map< std::string, ::DBus::Variant >& properties) {}
};

其余代码如下所示:

#include <dbus-c++/dbus.h>
#include "proxy.h"

DBus::BusDispatcher dispatcher;

int main(int argc, char** argv)
{
    DBus::default_dispatcher = &dispatcher;
    DBus::Connection bus = DBus::Connection::SystemBus();

    DBus::Path path;

    WPAS wpad(bus, "/fi/w1/wpa_supplicant1", "fi.w1.wpa_supplicant1");

    path = wpad.GetInterface("wlan2");

    return 0;
}

但是,我不知道接下来该做什么。目的是调用Scan()的{​​{1}}方法。

1 个答案:

答案 0 :(得分:0)

它遵循与调用fi::w1::wpa_supplicant1.GetInterface的方式类似的模式;即我会创建另一个继承自WPASIfi::w1::wpa_supplicant1::Interface_proxyDBus::IntrospectableProxy的类(例如DBus::ObjectProxy)。

假设两个对象(wpad和接口)都在同一个服务上,您将按如下方式创建这个新类的实例:

WPASI wpasi( bus, path, "fi.w1.wpa_supplicant1" );

然后像往常一样调用wpasi.Scan()