Stabalize wireless setup connection
This commit is contained in:
parent
51aee3352e
commit
396a548a09
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
@ -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();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user