Stabalize wireless setup connection

This commit is contained in:
Simon Stürz 2018-05-12 19:31:17 +02:00 committed by Michael Zanetti
parent 51aee3352e
commit 396a548a09
10 changed files with 280 additions and 139 deletions

View File

@ -79,7 +79,7 @@ void NymeaConnection::sendData(const QByteArray &data)
void NymeaConnection::onSslErrors(const QList<QSslError> &errors) void NymeaConnection::onSslErrors(const QList<QSslError> &errors)
{ {
qDebug() << "ssl errors"; qDebug() << "Connection: SSL errors:" << errors;
QList<QSslError> ignoredErrors; QList<QSslError> ignoredErrors;
foreach (const QSslError &error, errors) { foreach (const QSslError &error, errors) {
if (error.error() == QSslError::HostNameMismatch) { if (error.error() == QSslError::HostNameMismatch) {
@ -119,7 +119,7 @@ void NymeaConnection::onSslErrors(const QList<QSslError> &errors)
} }
} else { } else {
// Reject the connection on all other errors... // Reject the connection on all other errors...
qDebug() << "error:" << error.errorString() << error.certificate(); qDebug() << "SSL Error:" << error.errorString() << error.certificate();
} }
} }
m_currentInterface->ignoreSslErrors(ignoredErrors); m_currentInterface->ignoreSslErrors(ignoredErrors);
@ -127,7 +127,7 @@ void NymeaConnection::onSslErrors(const QList<QSslError> &errors)
void NymeaConnection::onError(QAbstractSocket::SocketError error) void NymeaConnection::onError(QAbstractSocket::SocketError error)
{ {
qWarning() << "socket error" << error; qWarning() << "Socket error" << error;
emit connectionError(); emit connectionError();
} }

View File

@ -12,6 +12,8 @@ TcpSocketInterface::TcpSocketInterface(QObject *parent) : NymeaInterface(parent)
QObject::connect(&m_socket, &QSslSocket::readyRead, this, &TcpSocketInterface::socketReadyRead); QObject::connect(&m_socket, &QSslSocket::readyRead, this, &TcpSocketInterface::socketReadyRead);
typedef void (QSslSocket:: *errorSignal)(QAbstractSocket::SocketError); typedef void (QSslSocket:: *errorSignal)(QAbstractSocket::SocketError);
QObject::connect(&m_socket, static_cast<errorSignal>(&QSslSocket::error), this, &TcpSocketInterface::error); QObject::connect(&m_socket, static_cast<errorSignal>(&QSslSocket::error), this, &TcpSocketInterface::error);
QObject::connect(&m_socket, &QSslSocket::stateChanged, this, &TcpSocketInterface::onSocketStateChanged);
} }
QStringList TcpSocketInterface::supportedSchemes() const QStringList TcpSocketInterface::supportedSchemes() const
@ -47,12 +49,12 @@ void TcpSocketInterface::connect(const QUrl &url)
{ {
m_url = url; m_url = url;
if (url.scheme() == "nymeas") { 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()); m_socket.connectToHostEncrypted(url.host(), url.port());
} else if (url.scheme() == "nymea") { } else if (url.scheme() == "nymea") {
m_socket.connectToHost(url.host(), url.port()); m_socket.connectToHost(url.host(), url.port());
} else { } else {
qWarning() << "Unsupported scheme"; qWarning() << "TCP socket: Unsupported scheme";
} }
} }
@ -71,3 +73,8 @@ void TcpSocketInterface::socketReadyRead()
QByteArray data = m_socket.readAll(); QByteArray data = m_socket.readAll();
emit dataReady(data); emit dataReady(data);
} }
void TcpSocketInterface::onSocketStateChanged(const QAbstractSocket::SocketState &state)
{
qDebug() << "Socket state changed -->" << state;
}

View File

@ -25,6 +25,7 @@ private slots:
void onConnected(); void onConnected();
void onEncrypted(); void onEncrypted();
void socketReadyRead(); void socketReadyRead();
void onSocketStateChanged(const QAbstractSocket::SocketState &state);
private: private:
QSslSocket m_socket; QSslSocket m_socket;

View File

@ -1,6 +1,7 @@
import QtQuick 2.4 import QtQuick 2.4
import QtQuick.Controls 2.1 import QtQuick.Controls 2.1
import QtQuick.Layouts 1.2 import QtQuick.Layouts 1.2
import QtQuick.Controls.Material 2.1
import "components" import "components"
import Mea 1.0 import Mea 1.0
@ -40,6 +41,13 @@ Page {
errorDialog.errorText = errorMessage errorDialog.errorText = errorMessage
errorDialog.open() errorDialog.open()
} }
onWirelessStatusChanged: {
switch(networkManger.manager.wirelessStatus) {
case WirelessSetupManager.WirelessStatusDisconnected:
networkManger.manager.accessPoints.setSelectedNetwork("", "")
}
}
} }
ColumnLayout { ColumnLayout {
@ -48,15 +56,27 @@ Page {
Label { Label {
wrapMode: Text.WordWrap wrapMode: Text.WordWrap
Layout.fillWidth: true Layout.alignment: Qt.AlignHCenter
text: qsTr("Network status: ") + networkManger.manager.networkStatus text:{
} switch (networkManger.manager.networkStatus) {
case WirelessSetupManager.NetworkStatusUnknown:
return qsTr("Unknown status.");
Label { case WirelessSetupManager.NetworkStatusAsleep:
wrapMode: Text.WordWrap return qsTr("Asleep.");
Layout.fillWidth: true case WirelessSetupManager.NetworkStatusDisconnected:
text: qsTr("Wireless status: ") + networkManger.manager.wirelessStatus 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 { BusyIndicator {
@ -75,7 +95,13 @@ Page {
delegate: ItemDelegate { delegate: ItemDelegate {
width: parent.width 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 { RowLayout {
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
@ -83,7 +109,7 @@ Page {
anchors.right: parent.right anchors.right: parent.right
Item { Item {
Layout.fillHeight: true Layout.preferredHeight: app.delegateHeight
Layout.preferredWidth: height Layout.preferredWidth: height
ColorIcon { ColorIcon {
@ -130,7 +156,7 @@ Page {
ColumnLayout { ColumnLayout {
Layout.fillWidth: true Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
Label { Label {
text: model.ssid text: model.ssid
} }
@ -139,6 +165,48 @@ Page {
text: model.macAddress text: model.macAddress
font.pixelSize: app.smallFont 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.") text: qsTr("Please enter the password for the Wifi network.")
} }
TextField { RowLayout {
Layout.fillWidth: true 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 { Button {
@ -192,6 +277,7 @@ Page {
text: qsTr("Connect") text: qsTr("Connect")
onPressed: { onPressed: {
networkManger.manager.connectWirelessNetwork(ssid, passwordTextField.text) networkManger.manager.connectWirelessNetwork(ssid, passwordTextField.text)
networkManger.manager.accessPoints.setSelectedNetwork(ssid, macAddress)
pageStack.pop() pageStack.pop()
} }
} }
@ -229,7 +315,7 @@ Page {
Page { Page {
id: root id: root
header: GuhHeader { header: GuhHeader {
text: qsTr("Network manager settings") text: qsTr("Network settings")
onBackPressed: pageStack.pop() onBackPressed: pageStack.pop()
} }

View File

@ -67,3 +67,13 @@ void WirelessAccessPoint::setProtected(const bool &isProtected)
{ {
m_isProtected = isProtected; m_isProtected = isProtected;
} }
bool WirelessAccessPoint::selectedNetwork() const
{
return m_selectedNetwork;
}
void WirelessAccessPoint::setSelectedNetwork(bool selected)
{
m_selectedNetwork = selected;
}

View File

@ -45,11 +45,15 @@ public:
bool isProtected() const; bool isProtected() const;
void setProtected(const bool &isProtected); void setProtected(const bool &isProtected);
bool selectedNetwork() const;
void setSelectedNetwork(bool selected);
private: private:
QString m_ssid; QString m_ssid;
QString m_macAddress; QString m_macAddress;
int m_signalStrength; int m_signalStrength;
bool m_isProtected; bool m_isProtected;
bool m_selectedNetwork;
}; };

View File

@ -21,6 +21,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include "wirelessaccesspoints.h" #include "wirelessaccesspoints.h"
#include <QDebug>
WirelessAccesspoints::WirelessAccesspoints(QObject *parent) : QAbstractListModel(parent) WirelessAccesspoints::WirelessAccesspoints(QObject *parent) : QAbstractListModel(parent)
{ {
@ -66,6 +67,8 @@ QVariant WirelessAccesspoints::data(const QModelIndex &index, int role) const
return accessPoint->signalStrength(); return accessPoint->signalStrength();
} else if (role == WirelessAccesspointRoleProtected) { } else if (role == WirelessAccesspointRoleProtected) {
return accessPoint->isProtected(); return accessPoint->isProtected();
} else if (role == WirelessAccesspointRoleSelectedNetwork) {
return accessPoint->selectedNetwork();
} }
return QVariant(); return QVariant();
@ -94,8 +97,34 @@ void WirelessAccesspoints::clearModel()
endResetModel(); 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<WirelessAccessPoint *> wirelessAccessPoints = m_wirelessAccessPoints;
qSort(wirelessAccessPoints.begin(), wirelessAccessPoints.end(), signalStrengthLessThan);
m_wirelessAccessPoints = wirelessAccessPoints;
endResetModel();
}
bool WirelessAccesspoints::signalStrengthLessThan(const WirelessAccessPoint *a, const WirelessAccessPoint *b) 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(); return a->signalStrength() > b->signalStrength();
} }
@ -106,6 +135,7 @@ QHash<int, QByteArray> WirelessAccesspoints::roleNames() const
roles[WirelessAccesspointRoleMacAddress] = "macAddress"; roles[WirelessAccesspointRoleMacAddress] = "macAddress";
roles[WirelessAccesspointRoleSignalStrength] = "signalStrength"; roles[WirelessAccesspointRoleSignalStrength] = "signalStrength";
roles[WirelessAccesspointRoleProtected] = "protected"; roles[WirelessAccesspointRoleProtected] = "protected";
roles[WirelessAccesspointRoleSelectedNetwork] = "selectedNetwork";
return roles; return roles;
} }

View File

@ -36,7 +36,8 @@ public:
WirelessAccesspointRoleSsid = Qt::DisplayRole, WirelessAccesspointRoleSsid = Qt::DisplayRole,
WirelessAccesspointRoleMacAddress, WirelessAccesspointRoleMacAddress,
WirelessAccesspointRoleSignalStrength, WirelessAccesspointRoleSignalStrength,
WirelessAccesspointRoleProtected WirelessAccesspointRoleProtected,
WirelessAccesspointRoleSelectedNetwork
}; };
explicit WirelessAccesspoints(QObject *parent = 0); explicit WirelessAccesspoints(QObject *parent = 0);
@ -52,6 +53,8 @@ public:
void clearModel(); void clearModel();
Q_INVOKABLE void setSelectedNetwork(const QString &ssid, const QString &macAdderss);
static bool signalStrengthLessThan(const WirelessAccessPoint *a, const WirelessAccessPoint *b); static bool signalStrengthLessThan(const WirelessAccessPoint *a, const WirelessAccessPoint *b);
protected: protected:

View File

@ -90,12 +90,12 @@ bool WirelessSetupManager::working() const
return m_working; return m_working;
} }
QString WirelessSetupManager::networkStatus() const WirelessSetupManager::NetworkStatus WirelessSetupManager::networkStatus() const
{ {
return m_networkStatus; return m_networkStatus;
} }
QString WirelessSetupManager::wirelessStatus() const WirelessSetupManager::WirelessStatus WirelessSetupManager::wirelessStatus() const
{ {
return m_wirelessStatus; return m_wirelessStatus;
} }
@ -115,6 +115,11 @@ WirelessAccesspoints *WirelessSetupManager::accessPoints()
return m_accessPoints; return m_accessPoints;
} }
void WirelessSetupManager::reloadData()
{
loadNetworks();
}
void WirelessSetupManager::loadNetworks() void WirelessSetupManager::loadNetworks()
{ {
qDebug() << "WifiSetupManager: Start loading wifi networks"; qDebug() << "WifiSetupManager: Start loading wifi networks";
@ -310,10 +315,20 @@ void WirelessSetupManager::pressPushButton()
void WirelessSetupManager::checkInitialized() void WirelessSetupManager::checkInitialized()
{ {
setInitialized(m_deviceInformationService->state() == QLowEnergyService::ServiceDiscovered bool initialized = false;
&& m_netwokService->state() == QLowEnergyService::ServiceDiscovered
&& m_wifiService->state() == QLowEnergyService::ServiceDiscovered if (m_systemService) {
&& m_systemService->state() == QLowEnergyService::ServiceDiscovered); 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) void WirelessSetupManager::setModelNumber(const QString &modelNumber)
@ -381,36 +396,8 @@ void WirelessSetupManager::setNetworkStatus(int networkStatus)
if (m_networkStatus == networkStatus) if (m_networkStatus == networkStatus)
return; return;
switch (networkStatus) { m_networkStatus = static_cast<NetworkStatus>(networkStatus);
case 0: qDebug() << "-->" << m_networkStatus;
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;
}
emit networkStatusChanged(); emit networkStatusChanged();
} }
@ -419,51 +406,8 @@ void WirelessSetupManager::setWirelessStatus(int wirelessStatus)
if (m_wirelessStatus == wirelessStatus) if (m_wirelessStatus == wirelessStatus)
return; return;
switch (wirelessStatus) { m_wirelessStatus = static_cast<WirelessStatus>(wirelessStatus);
case 0: qDebug() << "-->" << m_wirelessStatus;
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;
}
emit wirelessStatusChanged(); emit wirelessStatusChanged();
} }
@ -512,18 +456,33 @@ void WirelessSetupManager::streamData(const QVariantMap &request)
void WirelessSetupManager::processNetworkResponse(const QVariantMap &response) void WirelessSetupManager::processNetworkResponse(const QVariantMap &response)
{ {
setWorking(false);
if (!response.contains("c") || !response.contains("r")) { if (!response.contains("c") || !response.contains("r")) {
qWarning() << "WifiSetupManager: Got invalid response map."; qWarning() << "WifiSetupManager: Got invalid response map.";
return; return;
} }
WirelessServiceCommand command = (WirelessServiceCommand)response.value("c").toInt(); NetworkServiceCommand command = (NetworkServiceCommand)response.value("c").toInt();
WirelessServiceResponse responseCode = (WirelessServiceResponse)response.value("r").toInt(); NetworkServiceResponse responseCode = (NetworkServiceResponse)response.value("r").toInt();
if (responseCode != WirelessServiceResponseSuccess) { if (responseCode != NetworkServiceResponseSuccess) {
qWarning() << "WifiSetupManager: Got error for command" << command << responseCode; 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; return;
} }
@ -579,19 +538,9 @@ void WirelessSetupManager::processWifiResponse(const QVariantMap &response)
return; return;
} }
QList<WirelessAccessPoint *> accessPointsList; m_accessPointsVariantList = response.value("p").toList();
QVariantList accessPointsVariantList = response.value("p").toList(); loadCurrentConnection();
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_accessPoints->setWirelessAccessPoints(accessPointsList);
break; break;
} }
case WirelessServiceCommandConnect: case WirelessServiceCommandConnect:
@ -603,9 +552,26 @@ void WirelessSetupManager::processWifiResponse(const QVariantMap &response)
case WirelessServiceCommandDisconnect: case WirelessServiceCommandDisconnect:
break; break;
case WirelessServiceCommandGetCurrentConnection: case WirelessServiceCommandGetCurrentConnection: {
qDebug() << "Current network connection" << response;
QVariantMap currentConnection = response.value("p").toMap();;
QList<WirelessAccessPoint *> 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; break;
}
default: default:
break; break;
} }
@ -639,7 +605,9 @@ void WirelessSetupManager::onConnectedChanged()
m_deviceInformationService->deleteLater(); m_deviceInformationService->deleteLater();
m_netwokService->deleteLater(); m_netwokService->deleteLater();
m_wifiService->deleteLater(); m_wifiService->deleteLater();
m_systemService->deleteLater();
if (m_systemService)
m_systemService->deleteLater();
m_deviceInformationService = nullptr; m_deviceInformationService = nullptr;
m_netwokService = nullptr; m_netwokService = nullptr;
@ -744,18 +712,17 @@ void WirelessSetupManager::onServiceDiscoveryFinished()
if (!m_systemService) { if (!m_systemService) {
m_systemService = controller()->createServiceObject(systemServiceUuid, this); m_systemService = controller()->createServiceObject(systemServiceUuid, this);
if (!m_systemService) { if (!m_systemService) {
qWarning() << "WifiSetupManager: Could not create system service."; qWarning() << "WifiSetupManager: Could not create system service. Looks like this networkmanager has not implemented that.";
controller()->disconnectFromDevice(); //controller()->disconnectFromDevice();
return; } 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();
} }
} }

View File

@ -44,8 +44,8 @@ class WirelessSetupManager : public BluetoothDevice
Q_PROPERTY(QString firmwareRevision READ firmwareRevision NOTIFY firmwareRevisionChanged) Q_PROPERTY(QString firmwareRevision READ firmwareRevision NOTIFY firmwareRevisionChanged)
Q_PROPERTY(QString hardwareRevision READ hardwareRevision NOTIFY hardwareRevisionChanged) Q_PROPERTY(QString hardwareRevision READ hardwareRevision NOTIFY hardwareRevisionChanged)
Q_PROPERTY(QString networkStatus READ networkStatus NOTIFY networkStatusChanged) Q_PROPERTY(NetworkStatus networkStatus READ networkStatus NOTIFY networkStatusChanged)
Q_PROPERTY(QString wirelessStatus READ wirelessStatus NOTIFY wirelessStatusChanged) Q_PROPERTY(WirelessStatus wirelessStatus READ wirelessStatus NOTIFY wirelessStatusChanged)
Q_PROPERTY(bool networkingEnabled READ networkingEnabled NOTIFY networkingEnabledChanged) Q_PROPERTY(bool networkingEnabled READ networkingEnabled NOTIFY networkingEnabledChanged)
Q_PROPERTY(bool wirelessEnabled READ wirelessEnabled NOTIFY wirelessEnabledChanged) Q_PROPERTY(bool wirelessEnabled READ wirelessEnabled NOTIFY wirelessEnabledChanged)
@ -107,6 +107,35 @@ public:
}; };
Q_ENUM(SystemServiceResponse) 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); explicit WirelessSetupManager(const QBluetoothDeviceInfo &deviceInfo, QObject *parent = nullptr);
QString modelNumber() const; QString modelNumber() const;
@ -119,14 +148,16 @@ public:
bool initializing() const; bool initializing() const;
bool working() const; bool working() const;
QString networkStatus() const; NetworkStatus networkStatus() const;
QString wirelessStatus() const; WirelessSetupManager::WirelessStatus wirelessStatus() const;
bool networkingEnabled() const; bool networkingEnabled() const;
bool wirelessEnabled() const; bool wirelessEnabled() const;
WirelessAccesspoints *accessPoints(); WirelessAccesspoints *accessPoints();
void reloadData();
// Wireless commands // Wireless commands
Q_INVOKABLE void loadNetworks(); Q_INVOKABLE void loadNetworks();
Q_INVOKABLE void loadCurrentConnection(); Q_INVOKABLE void loadCurrentConnection();
@ -158,8 +189,8 @@ private:
bool m_initialized = false; bool m_initialized = false;
bool m_initializing = false; bool m_initializing = false;
QString m_networkStatus; NetworkStatus m_networkStatus;
QString m_wirelessStatus; WirelessStatus m_wirelessStatus;
bool m_readingResponse; bool m_readingResponse;
QByteArray m_inputDataStream; QByteArray m_inputDataStream;
@ -167,6 +198,8 @@ private:
QString m_ssid; QString m_ssid;
QString m_password; QString m_password;
QVariantList m_accessPointsVariantList;
void checkInitialized(); void checkInitialized();
// Private set methods for read only properties // Private set methods for read only properties