2016-05-09 5 views
1

私は組み込みLinuxの近くですべてのWifiベアラを取得するためにQtベースの小さなアプリケーションを作成しています。そのためにQtDBusでConnmanを使用しています。すべての無線LAN信号を取得するために、qdbusxml2cppアプリケーションを使用して自動生成されたアダプタコードを取得しようとしています。これを行うには、私は次のコンテンツとサービスのた記述としてconnman-dbus.confファイルを使用しています:qdbusxml2cppが正しく動作していない

<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN" 
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> 
<busconfig> 
    <policy user="root"> 
     <allow own="net.connman"/> 
     <allow send_destination="net.connman"/> 
     <allow send_interface="net.connman.Agent"/> 
     <allow send_interface="net.connman.Counter"/> 
     <allow send_interface="net.connman.Notification"/> 
    <allow send_interface="net.connman.Manager"/> 
    </policy> 
    <policy at_console="true"> 
     <allow send_destination="net.connman"/> 
    </policy> 
    <policy context="default"> 
     <deny send_destination="net.connman"/> 
    </policy> 
</busconfig> 

その後、私は、次のコマンドを実行します。

$ qdbusxml2cpp -N -v /etc/dbus-1/system.d/connman-dbus.conf -a connmandbusexample.h:connmandbusexample.cpp 

しかし、結果をこれは、次のコードです:

connmandbusexample.cpp

/* 
* This file was generated by qdbusxml2cpp version 0.8 
* Command line was: qdbusxml2cpp -N -v /etc/dbus-1/system.d/connman-dbus.conf -a connmandbusexample.h:connmandbusexample.cpp 
* 
* qdbusxml2cpp is Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies). 
* 
* This is an auto-generated file. 
* Do not edit! All changes made to it will be lost. 
*/ 

#include "connmandbusexample.h" 
#include <QtCore/QMetaObject> 
#include <QtCore/QByteArray> 
#include <QtCore/QList> 
#include <QtCore/QMap> 
#include <QtCore/QString> 
#include <QtCore/QStringList> 
#include <QtCore/QVariant> 

connmandbusexample.h

/* 
* This file was generated by qdbusxml2cpp version 0.8 
* Command line was: qdbusxml2cpp -N -v /etc/dbus-1/system.d/connman-dbus.conf -a connmandbusexample.h:connmandbusexample.cpp 
* 
* qdbusxml2cpp is Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies). 
* 
* This is an auto-generated file. 
* This file may have been hand-edited. Look for HAND-EDIT comments 
* before re-generating it. 
*/ 

#ifndef CONNMANDBUSEXAMPLE_H_1462807819 
#define CONNMANDBUSEXAMPLE_H_1462807819 

#include <QtCore/QObject> 
#include <QtDBus/QtDBus> 
QT_BEGIN_NAMESPACE 
class QByteArray; 
template<class T> class QList; 
template<class Key, class Value> class QMap; 
class QString; 
class QStringList; 
class QVariant; 
QT_END_NAMESPACE 

#endif 

あなたが見ることができるように、このコードは有用ではありませんので、私はqdbusxml2cppと間違って何かをやっている場合、私は思ったんだけど。また、QtDBusを使用するより適切なアプローチでこれを実現できるかどうかはわかりません。最後に、ルート権限で動作していないQtアプリケーションからWi-Fiネットワークに接続することは可能ですか?上記のすべては、このトピックで役立つ非常に関連した質問ですと思います。

答えて

0

変換するファイルはDBusデーモンの設定ファイルですが、DBusインターフェースのインターフェース仕様はありません。それは、どの信号がバス上でconmanから/ conmanに送信されることが許されているかを記述するだけで、どのように見えるのかは説明していません。

適切なインターフェイスxmlを変換する必要があります。thisのようになります。使用しているconmanの正確なバージョンについては、インターフェース仕様を使用することをお勧めします。例としてgithubから最新のトランクバージョンを取得しました。

xml(イントロスペクション形式)hereでDBusインターフェイスの説明の詳細を参照できます。

私はconmanの機能に慣れていないか、またはD-Bus経由でアクセスできる機能について知っていませんが、these notesを一見したところで、それを介して使用可能なインターフェースをスキャンできるはずですinterface - net.connman.Technology.Scanメソッドを使用してみてください。

は、一般的にQDbusを使用しては何も問題はありません、ドキュメントがさえ述べて:

低レベルの実装は、主に使用するアプリケーションの作成者のために設計されていないことに留意すべきです。むしろ、それは執筆者を拘束するための基礎であり、再実装のための参照です。これを行うことができる場合は、上位レベルのバインディングまたは実装のいずれかを使用することをお勧めします。

QtDBusはthose higher level bindingsのいずれかです。