From 396a548a0924e2c7828d566fed82387d6d8c3ead Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Sat, 12 May 2018 19:31:17 +0200 Subject: [PATCH] Stabalize wireless setup connection --- mea/nymeaconnection.cpp | 6 +- mea/tcpsocketinterface.cpp | 11 +- mea/tcpsocketinterface.h | 1 + mea/ui/WirelessControlerPage.qml | 118 ++++++++++++--- mea/wifisetup/wirelessaccesspoint.cpp | 10 ++ mea/wifisetup/wirelessaccesspoint.h | 4 + mea/wifisetup/wirelessaccesspoints.cpp | 30 ++++ mea/wifisetup/wirelessaccesspoints.h | 5 +- mea/wifisetup/wirelesssetupmanager.cpp | 189 ++++++++++--------------- mea/wifisetup/wirelesssetupmanager.h | 45 +++++- 10 files changed, 280 insertions(+), 139 deletions(-) diff --git a/mea/nymeaconnection.cpp b/mea/nymeaconnection.cpp index 0a6491bc..a1026438 100644 --- a/mea/nymeaconnection.cpp +++ b/mea/nymeaconnection.cpp @@ -79,7 +79,7 @@ void NymeaConnection::sendData(const QByteArray &data) void NymeaConnection::onSslErrors(const QList &errors) { - qDebug() << "ssl errors"; + qDebug() << "Connection: SSL errors:" << errors; QList ignoredErrors; foreach (const QSslError &error, errors) { if (error.error() == QSslError::HostNameMismatch) { @@ -119,7 +119,7 @@ void NymeaConnection::onSslErrors(const QList &errors) } } else { // Reject the connection on all other errors... - qDebug() << "error:" << error.errorString() << error.certificate(); + qDebug() << "SSL Error:" << error.errorString() << error.certificate(); } } m_currentInterface->ignoreSslErrors(ignoredErrors); @@ -127,7 +127,7 @@ void NymeaConnection::onSslErrors(const QList &errors) void NymeaConnection::onError(QAbstractSocket::SocketError error) { - qWarning() << "socket error" << error; + qWarning() << "Socket error" << error; emit connectionError(); } diff --git a/mea/tcpsocketinterface.cpp b/mea/tcpsocketinterface.cpp index 4d8de25e..f54f6d93 100644 --- a/mea/tcpsocketinterface.cpp +++ b/mea/tcpsocketinterface.cpp @@ -12,6 +12,8 @@ TcpSocketInterface::TcpSocketInterface(QObject *parent) : NymeaInterface(parent) QObject::connect(&m_socket, &QSslSocket::readyRead, this, &TcpSocketInterface::socketReadyRead); typedef void (QSslSocket:: *errorSignal)(QAbstractSocket::SocketError); QObject::connect(&m_socket, static_cast(&QSslSocket::error), this, &TcpSocketInterface::error); + QObject::connect(&m_socket, &QSslSocket::stateChanged, this, &TcpSocketInterface::onSocketStateChanged); + } QStringList TcpSocketInterface::supportedSchemes() const @@ -47,12 +49,12 @@ void TcpSocketInterface::connect(const QUrl &url) { m_url = url; if (url.scheme() == "nymeas") { - qDebug() << "connecting to" << url.host() << url.port(); + qDebug() << "TCP socket connecting to" << url.host() << url.port(); m_socket.connectToHostEncrypted(url.host(), url.port()); } else if (url.scheme() == "nymea") { m_socket.connectToHost(url.host(), url.port()); } else { - qWarning() << "Unsupported scheme"; + qWarning() << "TCP socket: Unsupported scheme"; } } @@ -71,3 +73,8 @@ void TcpSocketInterface::socketReadyRead() QByteArray data = m_socket.readAll(); emit dataReady(data); } + +void TcpSocketInterface::onSocketStateChanged(const QAbstractSocket::SocketState &state) +{ + qDebug() << "Socket state changed -->" << state; +} diff --git a/mea/tcpsocketinterface.h b/mea/tcpsocketinterface.h index edfa7103..5fefa4fb 100644 --- a/mea/tcpsocketinterface.h +++ b/mea/tcpsocketinterface.h @@ -25,6 +25,7 @@ private slots: void onConnected(); void onEncrypted(); void socketReadyRead(); + void onSocketStateChanged(const QAbstractSocket::SocketState &state); private: QSslSocket m_socket; diff --git a/mea/ui/WirelessControlerPage.qml b/mea/ui/WirelessControlerPage.qml index 42c117df..c74c7d39 100644 --- a/mea/ui/WirelessControlerPage.qml +++ b/mea/ui/WirelessControlerPage.qml @@ -1,6 +1,7 @@ import QtQuick 2.4 import QtQuick.Controls 2.1 import QtQuick.Layouts 1.2 +import QtQuick.Controls.Material 2.1 import "components" import Mea 1.0 @@ -40,6 +41,13 @@ Page { errorDialog.errorText = errorMessage errorDialog.open() } + + onWirelessStatusChanged: { + switch(networkManger.manager.wirelessStatus) { + case WirelessSetupManager.WirelessStatusDisconnected: + networkManger.manager.accessPoints.setSelectedNetwork("", "") + } + } } ColumnLayout { @@ -48,15 +56,27 @@ Page { Label { wrapMode: Text.WordWrap - Layout.fillWidth: true - text: qsTr("Network status: ") + networkManger.manager.networkStatus - } - - - Label { - wrapMode: Text.WordWrap - Layout.fillWidth: true - text: qsTr("Wireless status: ") + networkManger.manager.wirelessStatus + Layout.alignment: Qt.AlignHCenter + text:{ + switch (networkManger.manager.networkStatus) { + case WirelessSetupManager.NetworkStatusUnknown: + return qsTr("Unknown status."); + case WirelessSetupManager.NetworkStatusAsleep: + return qsTr("Asleep."); + case WirelessSetupManager.NetworkStatusDisconnected: + return qsTr("Disconnected."); + case WirelessSetupManager.NetworkStatusDisconnecting: + return qsTr("Disconnecting..."); + case WirelessSetupManager.NetworkStatusConnecting: + return qsTr("Connecting..."); + case WirelessSetupManager.NetworkStatusLocal: + return qsTr("Connected local."); + case WirelessSetupManager.NetworkStatusConnectedSite: + return qsTr("Connected site."); + case WirelessSetupManager.NetworkStatusGlobal: + return qsTr("Online."); + } + } } BusyIndicator { @@ -75,7 +95,13 @@ Page { delegate: ItemDelegate { width: parent.width - height: app.delegateHeight + height: model.selectedNetwork ? app.delegateHeight * 1.5 : app.delegateHeight + + Rectangle { + anchors.fill: parent + color: guhAccent + visible: model.selectedNetwork + } RowLayout { anchors.verticalCenter: parent.verticalCenter @@ -83,7 +109,7 @@ Page { anchors.right: parent.right Item { - Layout.fillHeight: true + Layout.preferredHeight: app.delegateHeight Layout.preferredWidth: height ColorIcon { @@ -130,7 +156,7 @@ Page { ColumnLayout { Layout.fillWidth: true - + Layout.alignment: Qt.AlignVCenter Label { text: model.ssid } @@ -139,6 +165,48 @@ Page { text: model.macAddress font.pixelSize: app.smallFont } + + Label { + text: { + switch (networkManger.manager.wirelessStatus) { + case WirelessSetupManager.WirelessStatusUnknown: + return qsTr("Unknown status."); + case WirelessSetupManager.WirelessStatusUnmanaged: + return qsTr("Network unmanaged."); + case WirelessSetupManager.WirelessStatusUnavailable: + return qsTr("Network unavailable."); + case WirelessSetupManager.WirelessStatusDisconnected: + return qsTr("Disconnected."); + case WirelessSetupManager.WirelessStatusPrepare: + return qsTr("Prepare connection..."); + case WirelessSetupManager.WirelessStatusConfig: + return qsTr("Configure network..."); + case WirelessSetupManager.WirelessStatusNeedAuth: + return qsTr("Authentication needed"); + case WirelessSetupManager.WirelessStatusIpConfig: + return qsTr("Configuration IP..."); + case WirelessSetupManager.WirelessStatusIpCheck: + return qsTr("Check IP..."); + case WirelessSetupManager.WirelessStatusSecondaries: + return qsTr("Secondaries..."); + case WirelessSetupManager.WirelessStatusActivated: + return qsTr("Network connected."); + case WirelessSetupManager.WirelessStatusDeactivating: + return qsTr("Network disconnecting..."); + case WirelessSetupManager.WirelessStatusFailed: + return qsTr("Network connection failed."); + } + } + + font.pixelSize: app.smallFont + visible: model.selectedNetwork + } + } + + Button { + text: qsTr("Disconnect") + visible: model.selectedNetwork && networkManger.manager.wirelessStatus === WirelessSetupManager.WirelessStatusActivated + onClicked: networkManger.manager.disconnectWirelessNetwork() } } @@ -181,10 +249,27 @@ Page { text: qsTr("Please enter the password for the Wifi network.") } - TextField { + RowLayout { Layout.fillWidth: true - id: passwordTextField - echoMode: TextInput.Password + + TextField { + id: passwordTextField + Layout.fillWidth: true + echoMode: TextInput.Password + } + + Button { + text: qsTr("Show password") + onClicked: { + if (passwordTextField.echoMode === TextInput.Normal) { + text = qsTr("Show password") + passwordTextField.echoMode = TextInput.Password + } else { + text = qsTr("Hide password") + passwordTextField.echoMode = TextInput.Normal + } + } + } } Button { @@ -192,6 +277,7 @@ Page { text: qsTr("Connect") onPressed: { networkManger.manager.connectWirelessNetwork(ssid, passwordTextField.text) + networkManger.manager.accessPoints.setSelectedNetwork(ssid, macAddress) pageStack.pop() } } @@ -229,7 +315,7 @@ Page { Page { id: root header: GuhHeader { - text: qsTr("Network manager settings") + text: qsTr("Network settings") onBackPressed: pageStack.pop() } diff --git a/mea/wifisetup/wirelessaccesspoint.cpp b/mea/wifisetup/wirelessaccesspoint.cpp index 30faebad..ded8e572 100644 --- a/mea/wifisetup/wirelessaccesspoint.cpp +++ b/mea/wifisetup/wirelessaccesspoint.cpp @@ -67,3 +67,13 @@ void WirelessAccessPoint::setProtected(const bool &isProtected) { m_isProtected = isProtected; } + +bool WirelessAccessPoint::selectedNetwork() const +{ + return m_selectedNetwork; +} + +void WirelessAccessPoint::setSelectedNetwork(bool selected) +{ + m_selectedNetwork = selected; +} diff --git a/mea/wifisetup/wirelessaccesspoint.h b/mea/wifisetup/wirelessaccesspoint.h index b1a9a0ac..d9c12205 100644 --- a/mea/wifisetup/wirelessaccesspoint.h +++ b/mea/wifisetup/wirelessaccesspoint.h @@ -45,11 +45,15 @@ public: bool isProtected() const; void setProtected(const bool &isProtected); + bool selectedNetwork() const; + void setSelectedNetwork(bool selected); + private: QString m_ssid; QString m_macAddress; int m_signalStrength; bool m_isProtected; + bool m_selectedNetwork; }; diff --git a/mea/wifisetup/wirelessaccesspoints.cpp b/mea/wifisetup/wirelessaccesspoints.cpp index afec6f95..4decc3fc 100644 --- a/mea/wifisetup/wirelessaccesspoints.cpp +++ b/mea/wifisetup/wirelessaccesspoints.cpp @@ -21,6 +21,7 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "wirelessaccesspoints.h" +#include WirelessAccesspoints::WirelessAccesspoints(QObject *parent) : QAbstractListModel(parent) { @@ -66,6 +67,8 @@ QVariant WirelessAccesspoints::data(const QModelIndex &index, int role) const return accessPoint->signalStrength(); } else if (role == WirelessAccesspointRoleProtected) { return accessPoint->isProtected(); + } else if (role == WirelessAccesspointRoleSelectedNetwork) { + return accessPoint->selectedNetwork(); } return QVariant(); @@ -94,8 +97,34 @@ void WirelessAccesspoints::clearModel() endResetModel(); } +void WirelessAccesspoints::setSelectedNetwork(const QString &ssid, const QString &macAdderss) +{ + beginResetModel(); + + foreach (WirelessAccessPoint *accessPoint, m_wirelessAccessPoints) { + if (accessPoint->ssid() == ssid && accessPoint->macAddress() == macAdderss) { + qDebug() << "Set selected network:" << ssid << macAdderss; + accessPoint->setSelectedNetwork(true); + } else { + accessPoint->setSelectedNetwork(false); + } + } + + // FIXME: find a better way to update network selected and resort the list + QList wirelessAccessPoints = m_wirelessAccessPoints; + + qSort(wirelessAccessPoints.begin(), wirelessAccessPoints.end(), signalStrengthLessThan); + m_wirelessAccessPoints = wirelessAccessPoints; + + endResetModel(); +} + bool WirelessAccesspoints::signalStrengthLessThan(const WirelessAccessPoint *a, const WirelessAccessPoint *b) { + // Keep the selected network on top + if (a->selectedNetwork()) + return true; + return a->signalStrength() > b->signalStrength(); } @@ -106,6 +135,7 @@ QHash WirelessAccesspoints::roleNames() const roles[WirelessAccesspointRoleMacAddress] = "macAddress"; roles[WirelessAccesspointRoleSignalStrength] = "signalStrength"; roles[WirelessAccesspointRoleProtected] = "protected"; + roles[WirelessAccesspointRoleSelectedNetwork] = "selectedNetwork"; return roles; } diff --git a/mea/wifisetup/wirelessaccesspoints.h b/mea/wifisetup/wirelessaccesspoints.h index 3c89d13e..ceea6a7c 100644 --- a/mea/wifisetup/wirelessaccesspoints.h +++ b/mea/wifisetup/wirelessaccesspoints.h @@ -36,7 +36,8 @@ public: WirelessAccesspointRoleSsid = Qt::DisplayRole, WirelessAccesspointRoleMacAddress, WirelessAccesspointRoleSignalStrength, - WirelessAccesspointRoleProtected + WirelessAccesspointRoleProtected, + WirelessAccesspointRoleSelectedNetwork }; explicit WirelessAccesspoints(QObject *parent = 0); @@ -52,6 +53,8 @@ public: void clearModel(); + Q_INVOKABLE void setSelectedNetwork(const QString &ssid, const QString &macAdderss); + static bool signalStrengthLessThan(const WirelessAccessPoint *a, const WirelessAccessPoint *b); protected: diff --git a/mea/wifisetup/wirelesssetupmanager.cpp b/mea/wifisetup/wirelesssetupmanager.cpp index b4bdaccd..d9681a1e 100644 --- a/mea/wifisetup/wirelesssetupmanager.cpp +++ b/mea/wifisetup/wirelesssetupmanager.cpp @@ -90,12 +90,12 @@ bool WirelessSetupManager::working() const return m_working; } -QString WirelessSetupManager::networkStatus() const +WirelessSetupManager::NetworkStatus WirelessSetupManager::networkStatus() const { return m_networkStatus; } -QString WirelessSetupManager::wirelessStatus() const +WirelessSetupManager::WirelessStatus WirelessSetupManager::wirelessStatus() const { return m_wirelessStatus; } @@ -115,6 +115,11 @@ WirelessAccesspoints *WirelessSetupManager::accessPoints() return m_accessPoints; } +void WirelessSetupManager::reloadData() +{ + loadNetworks(); +} + void WirelessSetupManager::loadNetworks() { qDebug() << "WifiSetupManager: Start loading wifi networks"; @@ -310,10 +315,20 @@ void WirelessSetupManager::pressPushButton() void WirelessSetupManager::checkInitialized() { - setInitialized(m_deviceInformationService->state() == QLowEnergyService::ServiceDiscovered - && m_netwokService->state() == QLowEnergyService::ServiceDiscovered - && m_wifiService->state() == QLowEnergyService::ServiceDiscovered - && m_systemService->state() == QLowEnergyService::ServiceDiscovered); + bool initialized = false; + + if (m_systemService) { + initialized = m_deviceInformationService->state() == QLowEnergyService::ServiceDiscovered + && m_netwokService->state() == QLowEnergyService::ServiceDiscovered + && m_wifiService->state() == QLowEnergyService::ServiceDiscovered + && m_systemService->state() == QLowEnergyService::ServiceDiscovered; + } else { + initialized = m_deviceInformationService->state() == QLowEnergyService::ServiceDiscovered + && m_netwokService->state() == QLowEnergyService::ServiceDiscovered + && m_wifiService->state() == QLowEnergyService::ServiceDiscovered; + } + + setInitialized(initialized); } void WirelessSetupManager::setModelNumber(const QString &modelNumber) @@ -381,36 +396,8 @@ void WirelessSetupManager::setNetworkStatus(int networkStatus) if (m_networkStatus == networkStatus) return; - switch (networkStatus) { - case 0: - m_networkStatus = tr("Unknown"); - break; - case 1: - m_networkStatus = tr("Asleep"); - break; - case 2: - m_networkStatus = tr("Disconnected"); - break; - case 3: - m_networkStatus = tr("Disconnecting..."); - break; - case 4: - m_networkStatus = tr("Connecting..."); - break; - case 5: - m_networkStatus = tr("Connected local."); - break; - case 6: - m_networkStatus = tr("Connected site."); - break; - case 7: - m_networkStatus = tr("Connected global."); - break; - default: - m_networkStatus = tr("-"); - break; - } - + m_networkStatus = static_cast(networkStatus); + qDebug() << "-->" << m_networkStatus; emit networkStatusChanged(); } @@ -419,51 +406,8 @@ void WirelessSetupManager::setWirelessStatus(int wirelessStatus) if (m_wirelessStatus == wirelessStatus) return; - switch (wirelessStatus) { - case 0: - m_wirelessStatus = tr("Unknown"); - break; - case 1: - m_wirelessStatus = tr("Unmanaged"); - break; - case 2: - m_wirelessStatus = tr("Unavailable"); - break; - case 3: - m_wirelessStatus = tr("Disconnected"); - break; - case 4: - m_wirelessStatus = tr("Prepare"); - break; - case 5: - m_wirelessStatus = tr("Configure"); - break; - case 6: - m_wirelessStatus = tr("Authentication needed"); - break; - case 7: - m_wirelessStatus = tr("IP configuration"); - break; - case 8: - m_wirelessStatus = tr("IP check"); - break; - case 9: - m_wirelessStatus = tr("Secondaries"); - break; - case 10: - m_wirelessStatus = tr("Connected"); - break; - case 11: - m_wirelessStatus = tr("Deactivating"); - break; - case 12: - m_wirelessStatus = tr("failed"); - break; - default: - m_wirelessStatus = tr("-"); - break; - } - + m_wirelessStatus = static_cast(wirelessStatus); + qDebug() << "-->" << m_wirelessStatus; emit wirelessStatusChanged(); } @@ -512,18 +456,33 @@ void WirelessSetupManager::streamData(const QVariantMap &request) void WirelessSetupManager::processNetworkResponse(const QVariantMap &response) { - setWorking(false); - if (!response.contains("c") || !response.contains("r")) { qWarning() << "WifiSetupManager: Got invalid response map."; return; } - WirelessServiceCommand command = (WirelessServiceCommand)response.value("c").toInt(); - WirelessServiceResponse responseCode = (WirelessServiceResponse)response.value("r").toInt(); + NetworkServiceCommand command = (NetworkServiceCommand)response.value("c").toInt(); + NetworkServiceResponse responseCode = (NetworkServiceResponse)response.value("r").toInt(); - if (responseCode != WirelessServiceResponseSuccess) { + if (responseCode != NetworkServiceResponseSuccess) { qWarning() << "WifiSetupManager: Got error for command" << command << responseCode; + + + switch (responseCode) { + case NetworkServiceResponseIvalidValue: + emit errorOccured(tr("Invalid value.")); + break; + case NetworkServiceResponseNetworkManagerNotAvailable: + emit errorOccured(tr("There is no networkmanager available on the device.")); + break; + case NetworkServiceResponseWirelessNotAvailable: + emit errorOccured(tr("There is no wireless device available on the device.")); + break; + default: + emit errorOccured("Unknown error occured."); + break; + } + return; } @@ -579,19 +538,9 @@ void WirelessSetupManager::processWifiResponse(const QVariantMap &response) return; } - QList accessPointsList; - QVariantList accessPointsVariantList = response.value("p").toList(); - foreach (const QVariant &accessPointVariant, accessPointsVariantList) { - QVariantMap accessPointVariantMap = accessPointVariant.toMap(); - WirelessAccessPoint *accessPoint = new WirelessAccessPoint(this); - accessPoint->setSsid(accessPointVariantMap.value("e").toString()); - accessPoint->setMacAddress(accessPointVariantMap.value("m").toString()); - accessPoint->setSignalStrength(accessPointVariantMap.value("s").toInt()); - accessPoint->setProtected(accessPointVariantMap.value("p").toBool()); - accessPointsList.append(accessPoint); - } + m_accessPointsVariantList = response.value("p").toList(); + loadCurrentConnection(); - m_accessPoints->setWirelessAccessPoints(accessPointsList); break; } case WirelessServiceCommandConnect: @@ -603,9 +552,26 @@ void WirelessSetupManager::processWifiResponse(const QVariantMap &response) case WirelessServiceCommandDisconnect: break; - case WirelessServiceCommandGetCurrentConnection: + case WirelessServiceCommandGetCurrentConnection: { + qDebug() << "Current network connection" << response; + QVariantMap currentConnection = response.value("p").toMap();; + + QList accessPointsList; + foreach (const QVariant &accessPointVariant, m_accessPointsVariantList) { + QVariantMap accessPointVariantMap = accessPointVariant.toMap(); + WirelessAccessPoint *accessPoint = new WirelessAccessPoint(this); + accessPoint->setSsid(accessPointVariantMap.value("e").toString()); + accessPoint->setMacAddress(accessPointVariantMap.value("m").toString()); + accessPoint->setSignalStrength(accessPointVariantMap.value("s").toInt()); + accessPoint->setProtected(accessPointVariantMap.value("p").toBool()); + accessPointsList.append(accessPoint); + } + + m_accessPoints->setWirelessAccessPoints(accessPointsList); + m_accessPoints->setSelectedNetwork(currentConnection.value("e").toString(), currentConnection.value("m").toString()); break; + } default: break; } @@ -639,7 +605,9 @@ void WirelessSetupManager::onConnectedChanged() m_deviceInformationService->deleteLater(); m_netwokService->deleteLater(); m_wifiService->deleteLater(); - m_systemService->deleteLater(); + + if (m_systemService) + m_systemService->deleteLater(); m_deviceInformationService = nullptr; m_netwokService = nullptr; @@ -744,18 +712,17 @@ void WirelessSetupManager::onServiceDiscoveryFinished() if (!m_systemService) { m_systemService = controller()->createServiceObject(systemServiceUuid, this); if (!m_systemService) { - qWarning() << "WifiSetupManager: Could not create system service."; - controller()->disconnectFromDevice(); - return; + qWarning() << "WifiSetupManager: Could not create system service. Looks like this networkmanager has not implemented that."; + //controller()->disconnectFromDevice(); + } else { + connect(m_systemService, &QLowEnergyService::stateChanged, this, &WirelessSetupManager::onWifiServiceStateChanged); + connect(m_systemService, &QLowEnergyService::characteristicChanged, this, &WirelessSetupManager::onWifiServiceCharacteristicChanged); + connect(m_systemService, &QLowEnergyService::characteristicRead, this, &WirelessSetupManager::onWifiServiceReadFinished); + + if (m_systemService->state() == QLowEnergyService::DiscoveryRequired) + m_systemService->discoverDetails(); + } - - connect(m_systemService, &QLowEnergyService::stateChanged, this, &WirelessSetupManager::onWifiServiceStateChanged); - connect(m_systemService, &QLowEnergyService::characteristicChanged, this, &WirelessSetupManager::onWifiServiceCharacteristicChanged); - connect(m_systemService, &QLowEnergyService::characteristicRead, this, &WirelessSetupManager::onWifiServiceReadFinished); - - if (m_systemService->state() == QLowEnergyService::DiscoveryRequired) - m_systemService->discoverDetails(); - } } diff --git a/mea/wifisetup/wirelesssetupmanager.h b/mea/wifisetup/wirelesssetupmanager.h index 17443fc9..c9c9ec7f 100644 --- a/mea/wifisetup/wirelesssetupmanager.h +++ b/mea/wifisetup/wirelesssetupmanager.h @@ -44,8 +44,8 @@ class WirelessSetupManager : public BluetoothDevice Q_PROPERTY(QString firmwareRevision READ firmwareRevision NOTIFY firmwareRevisionChanged) Q_PROPERTY(QString hardwareRevision READ hardwareRevision NOTIFY hardwareRevisionChanged) - Q_PROPERTY(QString networkStatus READ networkStatus NOTIFY networkStatusChanged) - Q_PROPERTY(QString wirelessStatus READ wirelessStatus NOTIFY wirelessStatusChanged) + Q_PROPERTY(NetworkStatus networkStatus READ networkStatus NOTIFY networkStatusChanged) + Q_PROPERTY(WirelessStatus wirelessStatus READ wirelessStatus NOTIFY wirelessStatusChanged) Q_PROPERTY(bool networkingEnabled READ networkingEnabled NOTIFY networkingEnabledChanged) Q_PROPERTY(bool wirelessEnabled READ wirelessEnabled NOTIFY wirelessEnabledChanged) @@ -107,6 +107,35 @@ public: }; Q_ENUM(SystemServiceResponse) + enum NetworkStatus { + NetworkStatusUnknown = 0x00, + NetworkStatusAsleep = 0x01, + NetworkStatusDisconnected = 0x02, + NetworkStatusDisconnecting = 0x03, + NetworkStatusConnecting = 0x04, + NetworkStatusLocal = 0x05, + NetworkStatusConnectedSite = 0x06, + NetworkStatusGlobal = 0x07 + }; + Q_ENUM(NetworkStatus) + + enum WirelessStatus { + WirelessStatusUnknown = 0x00, + WirelessStatusUnmanaged = 0x01, + WirelessStatusUnavailable = 0x02, + WirelessStatusDisconnected = 0x03, + WirelessStatusPrepare = 0x04, + WirelessStatusConfig = 0x05, + WirelessStatusNeedAuth = 0x06, + WirelessStatusIpConfig = 0x07, + WirelessStatusIpCheck = 0x08, + WirelessStatusSecondaries = 0x09, + WirelessStatusActivated = 0x0A, + WirelessStatusDeactivating = 0x0B, + WirelessStatusFailed = 0x0C + }; + Q_ENUM(WirelessStatus) + explicit WirelessSetupManager(const QBluetoothDeviceInfo &deviceInfo, QObject *parent = nullptr); QString modelNumber() const; @@ -119,14 +148,16 @@ public: bool initializing() const; bool working() const; - QString networkStatus() const; - QString wirelessStatus() const; + NetworkStatus networkStatus() const; + WirelessSetupManager::WirelessStatus wirelessStatus() const; bool networkingEnabled() const; bool wirelessEnabled() const; WirelessAccesspoints *accessPoints(); + void reloadData(); + // Wireless commands Q_INVOKABLE void loadNetworks(); Q_INVOKABLE void loadCurrentConnection(); @@ -158,8 +189,8 @@ private: bool m_initialized = false; bool m_initializing = false; - QString m_networkStatus; - QString m_wirelessStatus; + NetworkStatus m_networkStatus; + WirelessStatus m_wirelessStatus; bool m_readingResponse; QByteArray m_inputDataStream; @@ -167,6 +198,8 @@ private: QString m_ssid; QString m_password; + QVariantList m_accessPointsVariantList; + void checkInitialized(); // Private set methods for read only properties