diff options
author | Gatis Paeglis <gatis.paeglis@digia.com> | 2014-09-18 17:50:36 +0200 |
---|---|---|
committer | Gatis Paeglis <gatis.paeglis@digia.com> | 2014-09-19 12:46:31 +0300 |
commit | 6b1c6cb2f84f5824d765da1d7a54ea81eb0389f8 (patch) | |
tree | e97aad11b960332215ee854a00c33b52794f0dc1 /src/imports/wifi/pluginmain.cpp | |
parent | 2671db076e6b27f4267c488a50aef24285738a61 (diff) |
Fix timing issues in wifi library
There is a timing issue on a device startup if the
default application calls Wifi.Interface.wifiSupported()
before qconnectivity service has finished initialize wifi
firmware/driver. This results in wifiSupported() returing
false on nexus 2013, even if this device supports wifi.
The solution is to move firmware/driver initialization
to Qt Wifi library.
Change-Id: If5b4650181f8b7237bd19f3fc3afbd2c75f759e8
Task-number: QTEE-770
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@digia.com>
Diffstat (limited to 'src/imports/wifi/pluginmain.cpp')
-rw-r--r-- | src/imports/wifi/pluginmain.cpp | 66 |
1 files changed, 3 insertions, 63 deletions
diff --git a/src/imports/wifi/pluginmain.cpp b/src/imports/wifi/pluginmain.cpp index 51a2e7c..a779e44 100644 --- a/src/imports/wifi/pluginmain.cpp +++ b/src/imports/wifi/pluginmain.cpp @@ -17,74 +17,14 @@ ** ****************************************************************************/ #include "qwifimanager.h" +#include "qwifiinterface.h" -#include <QtCore/QDir> -#include <QtCore/QDebug> -#include <QtCore/QByteArray> #include <QtQml/QQmlExtensionPlugin> #include <QtQml/qqml.h> -#ifdef Q_OS_ANDROID -#include <hardware_legacy/wifi.h> -#endif -/*! - \qmltype Interface - \inqmlmodule Qt.labs.wifi - \ingroup wifi-qmltypes - \brief The Interface element provides the module API. - - This element cannot be directly created. It can only be accessed via a namespace import. - - \code - import Qt.labs.wifi 0.1 - import Qt.labs.wifi 0.1 as Wifi - - Component.onCompleted: { - if (Wifi.Interface.wifiSupported()) { - var component = Qt.createComponent("WifiMenu.qml") - } else { - print("WiFi functionality not available on this device.") - } - } - \endcode -*/ - -/*! - \qmlmethod bool Interface::wifiSupported() - - Returns true if the device is WiFi capable (provides a WiFi driver), otherwise returns false. -*/ - - -class QWifiGlobal : public QObject -{ - Q_OBJECT -public: - explicit QWifiGlobal(QObject *parent = 0) - : QObject(parent) {} - ~QWifiGlobal() {} - - Q_INVOKABLE bool wifiSupported() const - { - bool hasInterface = QDir().exists(QStringLiteral("/sys/class/net/wlan0")); - if (!hasInterface) - qWarning() << "QWifiGlobal: could not find wifi interface in /sys/class/net/"; -#ifdef Q_OS_ANDROID - if (hasInterface && wifi_load_driver() == 0 && wifi_start_supplicant(0) == 0) { - return true; - } else { - qWarning() << "QWifiGlobal: wifi driver is not available"; - return false; - } -#else - return hasInterface; -#endif - } -}; - static QObject *global_object_wifi(QQmlEngine *, QJSEngine *) { - return new QWifiGlobal; + return new QWifiInterface; } class QWifiPlugin : public QQmlExtensionPlugin @@ -99,7 +39,7 @@ public: qmlRegisterType<QWifiManager>(uri, 0, 1, "WifiManager"); qmlRegisterType<QWifiNetworkListModel>(); - qmlRegisterSingletonType<QWifiGlobal>(uri, 0, 1, "Interface", global_object_wifi); + qmlRegisterSingletonType<QWifiInterface>(uri, 0, 1, "Interface", global_object_wifi); } }; |