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)
|
||||
{
|
||||
qDebug() << "ssl errors";
|
||||
qDebug() << "Connection: SSL errors:" << errors;
|
||||
QList<QSslError> ignoredErrors;
|
||||
foreach (const QSslError &error, errors) {
|
||||
if (error.error() == QSslError::HostNameMismatch) {
|
||||
@ -119,7 +119,7 @@ void NymeaConnection::onSslErrors(const QList<QSslError> &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<QSslError> &errors)
|
||||
|
||||
void NymeaConnection::onError(QAbstractSocket::SocketError error)
|
||||
{
|
||||
qWarning() << "socket error" << error;
|
||||
qWarning() << "Socket error" << error;
|
||||
emit connectionError();
|
||||
}
|
||||
|
||||
|
||||
@ -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<errorSignal>(&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;
|
||||
}
|
||||
|
||||
@ -25,6 +25,7 @@ private slots:
|
||||
void onConnected();
|
||||
void onEncrypted();
|
||||
void socketReadyRead();
|
||||
void onSocketStateChanged(const QAbstractSocket::SocketState &state);
|
||||
|
||||
private:
|
||||
QSslSocket m_socket;
|
||||
|
||||
@ -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()
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -21,6 +21,7 @@
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#include "wirelessaccesspoints.h"
|
||||
#include <QDebug>
|
||||
|
||||
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<WirelessAccessPoint *> 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<int, QByteArray> WirelessAccesspoints::roleNames() const
|
||||
roles[WirelessAccesspointRoleMacAddress] = "macAddress";
|
||||
roles[WirelessAccesspointRoleSignalStrength] = "signalStrength";
|
||||
roles[WirelessAccesspointRoleProtected] = "protected";
|
||||
roles[WirelessAccesspointRoleSelectedNetwork] = "selectedNetwork";
|
||||
return roles;
|
||||
}
|
||||
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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>(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>(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<WirelessAccessPoint *> 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<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;
|
||||
}
|
||||
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();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
Reference in New Issue
Block a user