我正在使用一个简短的测试程序来研究如何将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}}方法。
答案 0 :(得分:0)
它遵循与调用fi::w1::wpa_supplicant1.GetInterface
的方式类似的模式;即我会创建另一个继承自WPASI
,fi::w1::wpa_supplicant1::Interface_proxy
和DBus::IntrospectableProxy
的类(例如DBus::ObjectProxy
)。
假设两个对象(wpad和接口)都在同一个服务上,您将按如下方式创建这个新类的实例:
WPASI wpasi( bus, path, "fi.w1.wpa_supplicant1" );
然后像往常一样调用wpasi.Scan()
。