ipc — получил DBus :: Path с libdbus-что дальше?

У меня есть короткая тестовая программа, которую я использую, чтобы понять, как использовать D-Bus с libdbus-c++ библиотека. Я пытаюсь подключиться к wpa_supplicant D-Bus API (задокументировано Вот), чтобы прочитать список точек доступа WiFi и их сильные стороны.

Следующий это руководство, Я сгенерировал заголовок прокси с 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,

1

Решение

Это происходит аналогично тому, как вы называете 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() по-прежнему.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]