2

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

按照本指南,我生成了一个代理标头,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()方法fi.w1.wpa_supplicant1.Interface

4

1 回答 1

0

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

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

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

然后wpasi.Scan()像往常一样打电话。

于 2013-06-03T16:40:00.697 回答