【问题标题】:Got a DBus::Path with libdbus-c++ - what next?使用 libdbus-c++ 获得 DBus::Path - 下一步是什么?
【发布时间】:2023-03-11 16:27:01
【问题描述】:

我有一个简短的测试程序,用于研究如何将 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;
}

但是,我不知道下一步该做什么。目的是调用fi.w1.wpa_supplicant1.Interface的Scan()方法。

【问题讨论】:

    标签: c++ ipc dbus


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      • 2020-08-14
      • 2013-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多