Fix the UI
parent
8df96a2d53
commit
c293474fd4
|
|
@ -74,7 +74,6 @@
|
|||
#include "configuration/mqttpolicy.h"
|
||||
#include "configuration/mqttpolicies.h"
|
||||
#include "wifisetup/btwifisetup.h"
|
||||
#include "wifisetup/networkmanagercontroller.h"
|
||||
#include "types/wirelessaccesspoint.h"
|
||||
#include "types/wirelessaccesspoints.h"
|
||||
#include "models/wirelessaccesspointsproxy.h"
|
||||
|
|
@ -272,11 +271,9 @@ void registerQmlTypes() {
|
|||
qmlRegisterType<TagListProxyModel>(uri, 1, 0, "TagListProxyModel");
|
||||
|
||||
qmlRegisterType<BtWiFiSetup>(uri, 1, 0, "BtWiFiSetup");
|
||||
qmlRegisterType<NetworkManagerController>(uri, 1, 0, "NetworkManagerController");
|
||||
qmlRegisterType<BluetoothDiscovery>(uri, 1, 0, "BluetoothDiscovery");
|
||||
qmlRegisterUncreatableType<BluetoothDeviceInfo>(uri, 1, 0, "BluetoothDeviceInfo", "Can't create this in QML. Get it from the DeviceInfos.");
|
||||
qmlRegisterUncreatableType<BluetoothDeviceInfos>(uri, 1, 0, "BluetoothDeviceInfos", "Can't create this in QML. Get it from the BluetoothDiscovery.");
|
||||
qmlRegisterUncreatableType<WirelessSetupManager>(uri, 1, 0, "WirelessSetupManager", "Can't create this in QML. Get it from the NetworkManagerControler.");
|
||||
qmlRegisterUncreatableType<WirelessAccessPoint>(uri, 1, 0, "WirelessAccessPoint", "Can't create this in QML. Get it from the WirelessAccessPoints.");
|
||||
qmlRegisterUncreatableType<WirelessAccessPoints>(uri, 1, 0, "WirelessAccessPoints", "Can't create this in QML. Get it from the Engine instance.");
|
||||
qmlRegisterType<WirelessAccessPointsProxy>(uri, 1, 0, "WirelessAccessPointsProxy");
|
||||
|
|
|
|||
|
|
@ -134,8 +134,6 @@ SOURCES += \
|
|||
$${PWD}/wifisetup/bluetoothdeviceinfo.cpp \
|
||||
$${PWD}/wifisetup/bluetoothdeviceinfos.cpp \
|
||||
$${PWD}/wifisetup/bluetoothdiscovery.cpp \
|
||||
$${PWD}/wifisetup/wirelesssetupmanager.cpp \
|
||||
$${PWD}/wifisetup/networkmanagercontroller.cpp \
|
||||
$${PWD}/models/logsmodelng.cpp \
|
||||
$${PWD}/models/interfacesproxy.cpp \
|
||||
$${PWD}/models/tagsproxymodel.cpp \
|
||||
|
|
@ -281,8 +279,6 @@ HEADERS += \
|
|||
$${PWD}/wifisetup/bluetoothdeviceinfo.h \
|
||||
$${PWD}/wifisetup/bluetoothdeviceinfos.h \
|
||||
$${PWD}/wifisetup/bluetoothdiscovery.h \
|
||||
$${PWD}/wifisetup/wirelesssetupmanager.h \
|
||||
$${PWD}/wifisetup/networkmanagercontroller.h \
|
||||
$${PWD}/libnymea-app-core.h \
|
||||
$${PWD}/models/logsmodelng.h \
|
||||
$${PWD}/models/interfacesproxy.h \
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ static QBluetoothUuid wifiServiceUuid = QBluetoothUuid(QUuid("e0
|
|||
static QBluetoothUuid wifiCommanderCharacteristicUuid = QBluetoothUuid(QUuid("e081fec1-f757-4449-b9c9-bfa83133f7fc"));
|
||||
static QBluetoothUuid wifiResponseCharacteristicUuid = QBluetoothUuid(QUuid("e081fec2-f757-4449-b9c9-bfa83133f7fc"));
|
||||
static QBluetoothUuid wifiStatusCharacteristicUuid = QBluetoothUuid(QUuid("e081fec3-f757-4449-b9c9-bfa83133f7fc"));
|
||||
static QBluetoothUuid wifiModeCharacteristicUuid = QBluetoothUuid(QUuid("e081fec4-f757-4449-b9c9-bfa83133f7fc"));
|
||||
|
||||
static QBluetoothUuid networkServiceUuid = QBluetoothUuid(QUuid("ef6d6610-b8af-49e0-9eca-ab343513641c"));
|
||||
static QBluetoothUuid networkStatusCharacteristicUuid = QBluetoothUuid(QUuid("ef6d6611-b8af-49e0-9eca-ab343513641c"));
|
||||
|
|
@ -32,6 +33,9 @@ void BtWiFiSetup::connectToDevice(const BluetoothDeviceInfo *device)
|
|||
qDebug() << "device" << device;
|
||||
if (m_btController) {
|
||||
delete m_btController;
|
||||
m_currentConnection = nullptr;
|
||||
currentConnectionChanged();
|
||||
m_accessPoints->clearModel();
|
||||
m_status = StatusDisconnected;
|
||||
emit statusChanged(m_status);
|
||||
|
||||
|
|
@ -47,6 +51,11 @@ void BtWiFiSetup::connectToDevice(const BluetoothDeviceInfo *device)
|
|||
qDebug() << "Bluetooth disconnected";
|
||||
m_status = StatusDisconnected;
|
||||
emit statusChanged(m_status);
|
||||
m_btController->deleteLater();
|
||||
m_btController = nullptr;
|
||||
m_currentConnection = nullptr;
|
||||
emit currentConnectionChanged();
|
||||
m_accessPoints->clearModel();
|
||||
});
|
||||
|
||||
typedef void (QLowEnergyController::*errorsSignal)(QLowEnergyController::Error);
|
||||
|
|
@ -69,8 +78,6 @@ void BtWiFiSetup::disconnectFromDevice()
|
|||
{
|
||||
if (m_btController) {
|
||||
m_btController->disconnectFromDevice();
|
||||
m_btController->deleteLater();
|
||||
m_btController = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -86,7 +93,39 @@ void BtWiFiSetup::connectDeviceToWiFi(const QString &ssid, const QString &passwo
|
|||
parameters.insert("e", ssid);
|
||||
parameters.insert("p", password);
|
||||
request.insert("p", parameters);
|
||||
streamData(request);
|
||||
streamData(m_wifiService, wifiCommanderCharacteristicUuid, request);
|
||||
}
|
||||
|
||||
void BtWiFiSetup::disconnectDeviceFromWiFi()
|
||||
{
|
||||
if (m_status != StatusConnectedToWiFi) {
|
||||
qWarning() << "Cannot disconnect from wifi in state" << m_status;
|
||||
}
|
||||
QLowEnergyCharacteristic ssidCharacteristic = m_wifiService->characteristic(wifiCommanderCharacteristicUuid);
|
||||
QVariantMap request;
|
||||
request.insert("c", (int)WirelessServiceCommandDisconnect);
|
||||
streamData(m_wifiService, wifiCommanderCharacteristicUuid, request);
|
||||
}
|
||||
|
||||
void BtWiFiSetup::scanWiFi()
|
||||
{
|
||||
QLowEnergyCharacteristic characteristic = m_wifiService->characteristic(wifiCommanderCharacteristicUuid);
|
||||
QVariantMap request;
|
||||
request.insert("c", (int)WirelessServiceCommandScan);
|
||||
streamData(m_wifiService, wifiCommanderCharacteristicUuid, request);
|
||||
}
|
||||
|
||||
void BtWiFiSetup::pressPushButton()
|
||||
{
|
||||
if (!m_systemService) {
|
||||
qDebug() << "System service not available. Cannot perform push button pairing";
|
||||
return;
|
||||
}
|
||||
QLowEnergyCharacteristic commanderCharacteristic = m_systemService->characteristic(systemCommanderCharacteristicUuid);
|
||||
QVariantMap request;
|
||||
request.insert("c", (int)SystemServiceCommandPushAuthentication);
|
||||
|
||||
streamData(m_systemService, systemCommanderCharacteristicUuid, request);
|
||||
}
|
||||
|
||||
BtWiFiSetup::Status BtWiFiSetup::status() const
|
||||
|
|
@ -134,11 +173,23 @@ bool BtWiFiSetup::networkingEnabled() const
|
|||
return m_networkingEnabled;
|
||||
}
|
||||
|
||||
void BtWiFiSetup::setNetworkingEnabled(bool networkingEnabled)
|
||||
{
|
||||
QLowEnergyCharacteristic characteristic = m_networkService->characteristic(networkCommanderCharacteristicUuid);
|
||||
m_networkService->writeCharacteristic(characteristic, networkingEnabled ? QByteArray::fromHex("00") : QByteArray::fromHex("01"));
|
||||
}
|
||||
|
||||
bool BtWiFiSetup::wirelessEnabled() const
|
||||
{
|
||||
return m_wirelessEnabled;
|
||||
}
|
||||
|
||||
void BtWiFiSetup::setWirelessEnabled(bool wirelessEnabled) const
|
||||
{
|
||||
QLowEnergyCharacteristic characteristic = m_networkService->characteristic(networkCommanderCharacteristicUuid);
|
||||
m_networkService->writeCharacteristic(characteristic, wirelessEnabled ? QByteArray::fromHex("02") : QByteArray::fromHex("03"));
|
||||
}
|
||||
|
||||
WirelessAccessPoints *BtWiFiSetup::accessPoints() const
|
||||
{
|
||||
return m_accessPoints;
|
||||
|
|
@ -151,6 +202,7 @@ WirelessAccessPoint *BtWiFiSetup::currentConnection() const
|
|||
|
||||
void BtWiFiSetup::setupServices()
|
||||
{
|
||||
qDebug() << "Setting up services";
|
||||
m_deviceInformationService = m_btController->createServiceObject(QBluetoothUuid::DeviceInformation, m_btController);
|
||||
m_networkService = m_btController->createServiceObject(networkServiceUuid, m_btController);
|
||||
m_wifiService = m_btController->createServiceObject(wifiServiceUuid, m_btController);
|
||||
|
|
@ -223,6 +275,7 @@ void BtWiFiSetup::setupServices()
|
|||
m_wifiService->writeDescriptor(m_wifiService->characteristic(wifiResponseCharacteristicUuid).descriptor(QBluetoothUuid::ClientCharacteristicConfiguration), QByteArray::fromHex("0100"));
|
||||
m_wifiService->writeDescriptor(m_wifiService->characteristic(wifiStatusCharacteristicUuid).descriptor(QBluetoothUuid::ClientCharacteristicConfiguration), QByteArray::fromHex("0100"));
|
||||
|
||||
qDebug() << "Fetching networks after init";
|
||||
loadNetworks();
|
||||
});
|
||||
connect(m_wifiService, &QLowEnergyService::characteristicChanged, this, &BtWiFiSetup::characteristicChanged);
|
||||
|
|
@ -236,22 +289,15 @@ void BtWiFiSetup::setupServices()
|
|||
return;
|
||||
qDebug() << "System service discovered";
|
||||
m_systemService->writeDescriptor(m_systemService->characteristic(systemResponseCharacteristicUuid).descriptor(QBluetoothUuid::ClientCharacteristicConfiguration), QByteArray::fromHex("0100"));
|
||||
|
||||
});
|
||||
m_systemService->discoverDetails();
|
||||
}
|
||||
}
|
||||
|
||||
void BtWiFiSetup::streamData(const QVariantMap &request)
|
||||
void BtWiFiSetup::streamData(QLowEnergyService *service, const QUuid &characteristicUuid, const QVariantMap &request)
|
||||
{
|
||||
QLowEnergyCharacteristic characteristic = m_wifiService->characteristic(wifiCommanderCharacteristicUuid);
|
||||
if (!characteristic.isValid()) {
|
||||
qWarning() << "WifiSetupManager: WirelessService: Wireless commander characteristic not valid";
|
||||
return;
|
||||
}
|
||||
|
||||
QLowEnergyCharacteristic characteristic = service->characteristic(characteristicUuid);
|
||||
QByteArray data = QJsonDocument::fromVariant(request).toJson(QJsonDocument::Compact) + '\n';
|
||||
qDebug() << "WifiSetupManager: WirelessService: Start streaming response data:" << data.count() << "bytes";
|
||||
|
||||
int sentDataLength = 0;
|
||||
QByteArray remainingData = data;
|
||||
|
|
@ -261,8 +307,6 @@ void BtWiFiSetup::streamData(const QVariantMap &request)
|
|||
m_wifiService->writeCharacteristic(characteristic, package);
|
||||
remainingData = remainingData.remove(0, package.count());
|
||||
}
|
||||
|
||||
qDebug() << "WifiSetupManager: WirelessService: Finished streaming request data";
|
||||
}
|
||||
|
||||
void BtWiFiSetup::processWiFiPacket(const QVariantMap &data)
|
||||
|
|
@ -278,11 +322,19 @@ void BtWiFiSetup::processWiFiPacket(const QVariantMap &data)
|
|||
switch (command) {
|
||||
case WirelessServiceCommandGetNetworks:
|
||||
|
||||
m_accessPoints->clearModel();
|
||||
|
||||
foreach (const QVariant &data, data.value("p").toList()) {
|
||||
WirelessAccessPoint *accessPoint = new WirelessAccessPoint(this);
|
||||
bool found = false;
|
||||
for (int i = 0; i < m_accessPoints->rowCount(); i++) {
|
||||
WirelessAccessPoint *existingAp = m_accessPoints->get(i);
|
||||
if (existingAp->macAddress() == data.toMap().value("m").toString()) {
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
if (found) {
|
||||
continue;
|
||||
}
|
||||
|
||||
WirelessAccessPoint *accessPoint = new WirelessAccessPoint(this);
|
||||
accessPoint->setSsid(data.toMap().value("e").toString());
|
||||
accessPoint->setMacAddress(data.toMap().value("m").toString());
|
||||
accessPoint->setSignalStrength(data.toMap().value("s").toInt());
|
||||
|
|
@ -296,6 +348,29 @@ void BtWiFiSetup::processWiFiPacket(const QVariantMap &data)
|
|||
m_status = StatusConnectingToWiFi;
|
||||
emit statusChanged(m_status);
|
||||
break;
|
||||
case WirelessServiceCommandGetCurrentConnection:
|
||||
// Find current network
|
||||
m_currentConnection = nullptr;
|
||||
foreach (WirelessAccessPoint *accessPoint, m_accessPoints->wirelessAccessPoints()) {
|
||||
QVariantMap currentConnection = data.value("p").toMap();
|
||||
QString macAddress = currentConnection.value("m").toString();
|
||||
if (accessPoint->macAddress() == macAddress) {
|
||||
// Set the current network
|
||||
m_currentConnection = accessPoint;
|
||||
accessPoint->setHostAddress(currentConnection.value("i").toString());
|
||||
}
|
||||
}
|
||||
qDebug() << "current connection is:" << m_currentConnection;
|
||||
emit currentConnectionChanged();
|
||||
break;
|
||||
case WirelessServiceCommandScan:
|
||||
if (responseCode == WirelessServiceResponseSuccess) {
|
||||
qDebug() << "Fetching networks after wifi scan";
|
||||
loadNetworks();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
qWarning() << "Unhandled command reply";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -303,28 +378,29 @@ void BtWiFiSetup::loadNetworks()
|
|||
{
|
||||
QVariantMap request;
|
||||
request.insert("c", (int)WirelessServiceCommandGetNetworks);
|
||||
streamData(request);
|
||||
streamData(m_wifiService, wifiCommanderCharacteristicUuid, request);
|
||||
}
|
||||
|
||||
void BtWiFiSetup::loadCurrentConnection()
|
||||
{
|
||||
QVariantMap request;
|
||||
request.insert("c", (int)WirelessServiceCommandGetCurrentConnection);
|
||||
streamData(request);
|
||||
streamData(m_wifiService, wifiCommanderCharacteristicUuid, request);
|
||||
}
|
||||
|
||||
void BtWiFiSetup::characteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &data)
|
||||
void BtWiFiSetup::characteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &value)
|
||||
{
|
||||
if (characteristic.uuid() == wifiResponseCharacteristicUuid) {
|
||||
m_inputBuffers[characteristic.uuid()].append(data);
|
||||
|
||||
m_inputBuffers[characteristic.uuid()].append(value);
|
||||
if (!m_inputBuffers[characteristic.uuid()].endsWith("\n")) {
|
||||
return;
|
||||
}
|
||||
QByteArray data = m_inputBuffers.take(characteristic.uuid());
|
||||
QJsonParseError error;
|
||||
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
|
||||
QJsonDocument jsonDoc = QJsonDocument::fromJson(data.trimmed(), &error);
|
||||
if (error.error != QJsonParseError::NoError) {
|
||||
qWarning() << "Invalid json data received:" << error.errorString() << data << "from characteristic:" << characteristic.uuid();
|
||||
qWarning() << "Invalid json data received:" << error.errorString() << data.trimmed() << "from characteristic:" << characteristic.uuid();
|
||||
m_btController->disconnectFromDevice();
|
||||
return;
|
||||
}
|
||||
|
|
@ -332,7 +408,7 @@ void BtWiFiSetup::characteristicChanged(const QLowEnergyCharacteristic &characte
|
|||
|
||||
} else if (characteristic.uuid() == wifiStatusCharacteristicUuid) {
|
||||
|
||||
m_wirelessStatus = static_cast<WirelessStatus>(data.toHex().toInt(nullptr, 16));
|
||||
m_wirelessStatus = static_cast<WirelessStatus>(value.toHex().toInt(nullptr, 16));
|
||||
qDebug() << "Wireless status changed" << m_wirelessStatus;
|
||||
emit wirelessStatusChanged();
|
||||
|
||||
|
|
@ -342,8 +418,14 @@ void BtWiFiSetup::characteristicChanged(const QLowEnergyCharacteristic &characte
|
|||
loadCurrentConnection();
|
||||
}
|
||||
|
||||
// Note: wirelessEnabled characterristic seems broken server-side. Let's check the wifiStatus for it being enabled or not
|
||||
if (m_wirelessEnabled != (m_wirelessStatus != WirelessStatusUnavailable)) {
|
||||
m_wirelessEnabled = m_wirelessStatus != WirelessStatusUnavailable;
|
||||
emit wirelessEnabledChanged();
|
||||
}
|
||||
|
||||
} else if (characteristic.uuid() == networkStatusCharacteristicUuid) {
|
||||
m_networkStatus = static_cast<NetworkStatus>(data.toHex().toInt(nullptr, 16));
|
||||
m_networkStatus = static_cast<NetworkStatus>(value.toHex().toInt(nullptr, 16));
|
||||
qDebug() << "Network status changed:" << m_networkStatus;
|
||||
if (m_networkStatus == NetworkStatusGlobal) {
|
||||
m_status = StatusConnectedToWiFi;
|
||||
|
|
@ -352,6 +434,12 @@ void BtWiFiSetup::characteristicChanged(const QLowEnergyCharacteristic &characte
|
|||
loadCurrentConnection();
|
||||
}
|
||||
|
||||
// Note: networkingEnabled characterristic seems broken server-side. Let's check the networkStatus for it being enabled or not
|
||||
if (m_wirelessEnabled != (m_networkStatus != NetworkStatusAsleep)) {
|
||||
m_networkingEnabled = m_networkStatus != NetworkStatusAsleep;
|
||||
emit wirelessEnabledChanged();
|
||||
}
|
||||
|
||||
} else {
|
||||
qWarning() << "Unhandled packet from characteristic" << characteristic.uuid();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,8 +22,8 @@ class BtWiFiSetup : public QObject
|
|||
|
||||
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)
|
||||
Q_PROPERTY(bool networkingEnabled READ networkingEnabled WRITE setNetworkingEnabled NOTIFY networkingEnabledChanged)
|
||||
Q_PROPERTY(bool wirelessEnabled READ wirelessEnabled WRITE setWirelessEnabled NOTIFY wirelessEnabledChanged)
|
||||
|
||||
Q_PROPERTY(WirelessAccessPoints *accessPoints READ accessPoints CONSTANT)
|
||||
Q_PROPERTY(WirelessAccessPoint *currentConnection READ currentConnection NOTIFY currentConnectionChanged)
|
||||
|
|
@ -128,6 +128,9 @@ public:
|
|||
Q_INVOKABLE void connectToDevice(const BluetoothDeviceInfo *device);
|
||||
Q_INVOKABLE void disconnectFromDevice();
|
||||
Q_INVOKABLE void connectDeviceToWiFi(const QString &ssid, const QString &password);
|
||||
Q_INVOKABLE void disconnectDeviceFromWiFi();
|
||||
Q_INVOKABLE void scanWiFi();
|
||||
Q_INVOKABLE void pressPushButton();
|
||||
|
||||
Status status() const;
|
||||
|
||||
|
|
@ -140,7 +143,10 @@ public:
|
|||
NetworkStatus networkStatus() const;
|
||||
WirelessStatus wirelessStatus() const;
|
||||
bool networkingEnabled() const;
|
||||
void setNetworkingEnabled(bool networkingEnabled);
|
||||
|
||||
bool wirelessEnabled() const;
|
||||
void setWirelessEnabled(bool wirelessEnabled) const;
|
||||
|
||||
WirelessAccessPoints *accessPoints() const;
|
||||
WirelessAccessPoint *currentConnection() const;
|
||||
|
|
@ -165,14 +171,14 @@ signals:
|
|||
|
||||
private:
|
||||
void setupServices();
|
||||
void streamData(const QVariantMap &request);
|
||||
void streamData(QLowEnergyService *service, const QUuid &characteristicUuid, const QVariantMap &request);
|
||||
void processWiFiPacket(const QVariantMap &data);
|
||||
|
||||
void loadNetworks();
|
||||
void loadCurrentConnection();
|
||||
|
||||
private slots:
|
||||
void characteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &data);
|
||||
void characteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &value);
|
||||
|
||||
private:
|
||||
Status m_status = StatusDisconnected;
|
||||
|
|
|
|||
|
|
@ -1,78 +0,0 @@
|
|||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* Copyright 2013 - 2020, nymea GmbH
|
||||
* Contact: contact@nymea.io
|
||||
*
|
||||
* This file is part of nymea.
|
||||
* This project including source code and documentation is protected by
|
||||
* copyright law, and remains the property of nymea GmbH. All rights, including
|
||||
* reproduction, publication, editing and translation, are reserved. The use of
|
||||
* this project is subject to the terms of a license agreement to be concluded
|
||||
* with nymea GmbH in accordance with the terms of use of nymea GmbH, available
|
||||
* under https://nymea.io/license
|
||||
*
|
||||
* GNU General Public License Usage
|
||||
* Alternatively, this project may be redistributed and/or modified under the
|
||||
* terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation, GNU version 3. This project is distributed in the hope that it
|
||||
* will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
* Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this project. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
* For any further details and any questions please contact us under
|
||||
* contact@nymea.io or see our FAQ/Licensing Information on
|
||||
* https://nymea.io/license/faq
|
||||
*
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#include "networkmanagercontroller.h"
|
||||
|
||||
NetworkManagerController::NetworkManagerController(QObject *parent) : QObject(parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
BluetoothDeviceInfo *NetworkManagerController::bluetoothDeviceInfo() const
|
||||
{
|
||||
return m_bluetoothDeviceInfo;
|
||||
}
|
||||
|
||||
void NetworkManagerController::setBluetoothDeviceInfo(BluetoothDeviceInfo *bluetoothDeviceInfo)
|
||||
{
|
||||
if (m_bluetoothDeviceInfo != bluetoothDeviceInfo) {
|
||||
m_bluetoothDeviceInfo = bluetoothDeviceInfo;
|
||||
emit bluetoothDeviceInfoChanged();
|
||||
}
|
||||
}
|
||||
|
||||
WirelessSetupManager *NetworkManagerController::manager()
|
||||
{
|
||||
return m_wirelessSetupManager;
|
||||
}
|
||||
|
||||
void NetworkManagerController::connectDevice()
|
||||
{
|
||||
if (!m_bluetoothDeviceInfo) {
|
||||
qWarning() << "Can't connect to device. bluetoothDeviceInfo not set.";
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_wirelessSetupManager) {
|
||||
delete m_wirelessSetupManager;
|
||||
m_wirelessSetupManager = nullptr;
|
||||
emit managerChanged();
|
||||
}
|
||||
|
||||
if (!m_bluetoothDeviceInfo) {
|
||||
qDebug() << "Could not connect to device. There is no device info for" << m_bluetoothDeviceInfo->name() << m_bluetoothDeviceInfo->address();
|
||||
return;
|
||||
}
|
||||
|
||||
m_wirelessSetupManager = new WirelessSetupManager(m_bluetoothDeviceInfo->bluetoothDeviceInfo(), this);
|
||||
emit managerChanged();
|
||||
|
||||
m_wirelessSetupManager->connectDevice();
|
||||
}
|
||||
|
|
@ -1,68 +0,0 @@
|
|||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* Copyright 2013 - 2020, nymea GmbH
|
||||
* Contact: contact@nymea.io
|
||||
*
|
||||
* This file is part of nymea.
|
||||
* This project including source code and documentation is protected by
|
||||
* copyright law, and remains the property of nymea GmbH. All rights, including
|
||||
* reproduction, publication, editing and translation, are reserved. The use of
|
||||
* this project is subject to the terms of a license agreement to be concluded
|
||||
* with nymea GmbH in accordance with the terms of use of nymea GmbH, available
|
||||
* under https://nymea.io/license
|
||||
*
|
||||
* GNU General Public License Usage
|
||||
* Alternatively, this project may be redistributed and/or modified under the
|
||||
* terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation, GNU version 3. This project is distributed in the hope that it
|
||||
* will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
* Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this project. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
* For any further details and any questions please contact us under
|
||||
* contact@nymea.io or see our FAQ/Licensing Information on
|
||||
* https://nymea.io/license/faq
|
||||
*
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#ifndef NETWORKMANAGERCONTROLLER_H
|
||||
#define NETWORKMANAGERCONTROLLER_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QBluetoothDeviceInfo>
|
||||
|
||||
#include "bluetoothdeviceinfo.h"
|
||||
#include "wirelesssetupmanager.h"
|
||||
|
||||
class NetworkManagerController : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(BluetoothDeviceInfo* bluetoothDeviceInfo READ bluetoothDeviceInfo WRITE setBluetoothDeviceInfo)
|
||||
Q_PROPERTY(WirelessSetupManager *manager READ manager NOTIFY managerChanged)
|
||||
|
||||
public:
|
||||
explicit NetworkManagerController(QObject *parent = nullptr);
|
||||
|
||||
BluetoothDeviceInfo* bluetoothDeviceInfo() const;
|
||||
void setBluetoothDeviceInfo(BluetoothDeviceInfo* bluetoothDeviceInfo);
|
||||
|
||||
WirelessSetupManager *manager();
|
||||
|
||||
Q_INVOKABLE void connectDevice();
|
||||
|
||||
private:
|
||||
BluetoothDeviceInfo* m_bluetoothDeviceInfo = nullptr;
|
||||
|
||||
WirelessSetupManager *m_wirelessSetupManager = nullptr;
|
||||
|
||||
signals:
|
||||
void managerChanged();
|
||||
void nameChanged();
|
||||
void bluetoothDeviceInfoChanged();
|
||||
|
||||
};
|
||||
|
||||
#endif // NETWORKMANAGERCONTROLLER_H
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,275 +0,0 @@
|
|||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* Copyright 2013 - 2020, nymea GmbH
|
||||
* Contact: contact@nymea.io
|
||||
*
|
||||
* This file is part of nymea.
|
||||
* This project including source code and documentation is protected by
|
||||
* copyright law, and remains the property of nymea GmbH. All rights, including
|
||||
* reproduction, publication, editing and translation, are reserved. The use of
|
||||
* this project is subject to the terms of a license agreement to be concluded
|
||||
* with nymea GmbH in accordance with the terms of use of nymea GmbH, available
|
||||
* under https://nymea.io/license
|
||||
*
|
||||
* GNU General Public License Usage
|
||||
* Alternatively, this project may be redistributed and/or modified under the
|
||||
* terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation, GNU version 3. This project is distributed in the hope that it
|
||||
* will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
* Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this project. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
* For any further details and any questions please contact us under
|
||||
* contact@nymea.io or see our FAQ/Licensing Information on
|
||||
* https://nymea.io/license/faq
|
||||
*
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#ifndef WIRELESSSETUPMANAGER_H
|
||||
#define WIRELESSSETUPMANAGER_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QBluetoothDeviceInfo>
|
||||
|
||||
#include "bluetoothdevice.h"
|
||||
|
||||
class WirelessAccessPoint;
|
||||
class WirelessAccessPoints;
|
||||
class WirelessAccessPointsProxy;
|
||||
|
||||
class WirelessSetupManager : public BluetoothDevice
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(bool working READ working NOTIFY workingChanged)
|
||||
Q_PROPERTY(bool initialized READ initialized NOTIFY initializedChanged)
|
||||
|
||||
Q_PROPERTY(WirelessAccessPoints *accessPoints READ accessPoints CONSTANT)
|
||||
Q_PROPERTY(WirelessAccessPoint *currentConnection READ currentConnection NOTIFY currentConnectionChanged)
|
||||
|
||||
Q_PROPERTY(QString modelNumber READ modelNumber NOTIFY modelNumberChanged)
|
||||
Q_PROPERTY(QString manufacturer READ manufacturer NOTIFY manufacturerChanged)
|
||||
Q_PROPERTY(QString softwareRevision READ softwareRevision NOTIFY softwareRevisionChanged)
|
||||
Q_PROPERTY(QString firmwareRevision READ firmwareRevision NOTIFY firmwareRevisionChanged)
|
||||
Q_PROPERTY(QString hardwareRevision READ hardwareRevision NOTIFY hardwareRevisionChanged)
|
||||
|
||||
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)
|
||||
|
||||
public:
|
||||
|
||||
enum WirelessServiceCommand {
|
||||
WirelessServiceCommandInvalid = -1,
|
||||
WirelessServiceCommandGetNetworks = 0x00,
|
||||
WirelessServiceCommandConnect = 0x01,
|
||||
WirelessServiceCommandConnectHidden = 0x02,
|
||||
WirelessServiceCommandDisconnect = 0x03,
|
||||
WirelessServiceCommandScan = 0x04,
|
||||
WirelessServiceCommandGetCurrentConnection = 0x05
|
||||
};
|
||||
Q_ENUM(WirelessServiceCommand)
|
||||
|
||||
enum WirelessServiceResponse {
|
||||
WirelessServiceResponseSuccess = 0x00,
|
||||
WirelessServiceResponseIvalidCommand = 0x01,
|
||||
WirelessServiceResponseIvalidParameters = 0x02,
|
||||
WirelessServiceResponseNetworkManagerNotAvailable = 0x03,
|
||||
WirelessServiceResponseWirelessNotAvailable = 0x04,
|
||||
WirelessServiceResponseWirelessNotEnabled = 0x05,
|
||||
WirelessServiceResponseNetworkingNotEnabled = 0x06,
|
||||
WirelessServiceResponseUnknownError = 0x07
|
||||
};
|
||||
Q_ENUM(WirelessServiceResponse)
|
||||
|
||||
enum NetworkServiceCommand {
|
||||
NetworkServiceCommandInvalid = -1,
|
||||
NetworkServiceCommandEnableNetworking = 0x00,
|
||||
NetworkServiceCommandDisableNetworking = 0x01,
|
||||
NetworkServiceCommandEnableWireless = 0x02,
|
||||
NetworkServiceCommandDisableWireless = 0x03
|
||||
};
|
||||
Q_ENUM(NetworkServiceCommand)
|
||||
|
||||
enum NetworkServiceResponse {
|
||||
NetworkServiceResponseSuccess = 0x00,
|
||||
NetworkServiceResponseIvalidValue = 0x01,
|
||||
NetworkServiceResponseNetworkManagerNotAvailable = 0x02,
|
||||
NetworkServiceResponseWirelessNotAvailable = 0x03,
|
||||
NetworkServiceResponseUnknownError = 0x04,
|
||||
};
|
||||
Q_ENUM(NetworkServiceResponse)
|
||||
|
||||
enum SystemServiceCommand {
|
||||
SystemServiceCommandInvalid = -1,
|
||||
SystemServiceCommandPushAuthentication = 0x00
|
||||
};
|
||||
Q_ENUM(SystemServiceCommand)
|
||||
|
||||
enum SystemServiceResponse {
|
||||
SystemServiceResponseSuccess = 0x00,
|
||||
SystemServiceResponseUnknownError = 0x01,
|
||||
SystemServiceResponseInvalidCommand = 0x02,
|
||||
SystemServiceResponseInvalidValue = 0x03,
|
||||
SystemServiceResponsePushServiceUnavailable = 0x04,
|
||||
};
|
||||
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;
|
||||
QString manufacturer() const;
|
||||
QString softwareRevision() const;
|
||||
QString firmwareRevision() const;
|
||||
QString hardwareRevision() const;
|
||||
|
||||
bool initialized() const;
|
||||
bool working() const;
|
||||
|
||||
NetworkStatus networkStatus() const;
|
||||
WirelessSetupManager::WirelessStatus wirelessStatus() const;
|
||||
|
||||
bool networkingEnabled() const;
|
||||
bool wirelessEnabled() const;
|
||||
|
||||
WirelessAccessPoints *accessPoints() const;
|
||||
WirelessAccessPoint *currentConnection() const;
|
||||
|
||||
void reloadData();
|
||||
|
||||
// Wireless commands
|
||||
Q_INVOKABLE void loadNetworks();
|
||||
Q_INVOKABLE void loadCurrentConnection();
|
||||
Q_INVOKABLE void performWifiScan();
|
||||
Q_INVOKABLE void enableNetworking(bool enable);
|
||||
Q_INVOKABLE void enableWireless(bool enable);
|
||||
Q_INVOKABLE void connectWirelessNetwork(const QString &ssid, const QString &password = QString());
|
||||
Q_INVOKABLE void disconnectWirelessNetwork();
|
||||
Q_INVOKABLE void pressPushButton();
|
||||
|
||||
signals:
|
||||
void modelNumberChanged();
|
||||
void manufacturerChanged();
|
||||
void softwareRevisionChanged();
|
||||
void firmwareRevisionChanged();
|
||||
void hardwareRevisionChanged();
|
||||
|
||||
void initializedChanged();
|
||||
void workingChanged();
|
||||
|
||||
void networkStatusChanged();
|
||||
void wirelessStatusChanged();
|
||||
void networkingEnabledChanged();
|
||||
void wirelessEnabledChanged();
|
||||
|
||||
void currentConnectionChanged();
|
||||
|
||||
void errorOccurred(const QString &errorMessage);
|
||||
|
||||
private slots:
|
||||
void onConnectedChanged();
|
||||
void onServiceDiscoveryFinished();
|
||||
|
||||
void onDeviceInformationStateChanged(const QLowEnergyService::ServiceState &state);
|
||||
void onDeviceInformationCharacteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &value);
|
||||
void onDeviceInformationReadFinished(const QLowEnergyCharacteristic &characteristic, const QByteArray &value);
|
||||
|
||||
void onNetworkServiceStateChanged(const QLowEnergyService::ServiceState &state);
|
||||
void onNetworkServiceCharacteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &value);
|
||||
void onNetworkServiceReadFinished(const QLowEnergyCharacteristic &characteristic, const QByteArray &value);
|
||||
|
||||
void onWifiServiceStateChanged(const QLowEnergyService::ServiceState &state);
|
||||
void onWifiServiceCharacteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &value);
|
||||
void onWifiServiceReadFinished(const QLowEnergyCharacteristic &characteristic, const QByteArray &value);
|
||||
|
||||
void onSystemServiceStateChanged(const QLowEnergyService::ServiceState &state);
|
||||
void onSystemServiceCharacteristicChanged(const QLowEnergyCharacteristic &characteristic, const QByteArray &value);
|
||||
void onSystemServiceReadFinished(const QLowEnergyCharacteristic &characteristic, const QByteArray &value);
|
||||
|
||||
private:
|
||||
QLowEnergyService *m_deviceInformationService = nullptr;
|
||||
QLowEnergyService *m_netwokService = nullptr;
|
||||
QLowEnergyService *m_wifiService = nullptr;
|
||||
QLowEnergyService *m_systemService = nullptr;
|
||||
|
||||
WirelessAccessPoints *m_accessPoints = nullptr;
|
||||
WirelessAccessPoint *m_currentConnection = nullptr;
|
||||
|
||||
QString m_modelNumber;
|
||||
QString m_manufacturer;
|
||||
QString m_softwareRevision;
|
||||
QString m_firmwareRevision;
|
||||
QString m_hardwareRevision;
|
||||
|
||||
bool m_networkingEnabled = false;
|
||||
bool m_wirelessEnabled = false;
|
||||
|
||||
bool m_working = false;
|
||||
bool m_initialized = false;
|
||||
|
||||
NetworkStatus m_networkStatus = NetworkStatusUnknown;
|
||||
WirelessStatus m_wirelessStatus = WirelessStatusUnknown;
|
||||
|
||||
bool m_readingResponse = false;
|
||||
QByteArray m_inputDataStream;
|
||||
|
||||
QString m_ssid;
|
||||
QString m_password;
|
||||
|
||||
QVariantList m_accessPointsVariantList;
|
||||
|
||||
void checkInitialized();
|
||||
|
||||
// Private set methods for read only properties
|
||||
void setModelNumber(const QString &modelNumber);
|
||||
void setManufacturer(const QString &manufacturer);
|
||||
void setSoftwareRevision(const QString &softwareRevision);
|
||||
void setFirmwareRevision(const QString &firmwareRevision);
|
||||
void setHardwareRevision(const QString &hardwareRevision);
|
||||
|
||||
void setNetworkStatus(int networkStatus);
|
||||
void setWirelessStatus(int wirelessStatus);
|
||||
void setNetworkingEnabled(bool networkingEnabled);
|
||||
void setWirelessEnabled(bool wirelessEnabled);
|
||||
|
||||
// Data methods
|
||||
void streamData(const QVariantMap &request);
|
||||
void processNetworkResponse(const QVariantMap &response);
|
||||
void processWifiResponse(const QVariantMap &response);
|
||||
void processSystemResponse(const QVariantMap &response);
|
||||
|
||||
};
|
||||
|
||||
#endif // WIRELESSSETUPMANAGER_H
|
||||
|
|
@ -130,13 +130,11 @@ ApplicationWindow {
|
|||
anchors.bottomMargin: keyboardRect.height
|
||||
}
|
||||
|
||||
NymeaDiscovery {
|
||||
id: discovery
|
||||
property NymeaDiscovery nymeaDiscovery: NymeaDiscovery {
|
||||
objectName: "discovery"
|
||||
awsClient: AWSClient
|
||||
// discovering: pageStack.currentItem.objectName === "discoveryPage"
|
||||
}
|
||||
property alias _discovery: discovery
|
||||
|
||||
property var supportedInterfaces: [
|
||||
"light",
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ Item {
|
|||
d.pushSettingsPage("connection/wifisetup/BluetoothDiscoveryPage.qml");
|
||||
}
|
||||
function startDemoMode() {
|
||||
var host = discovery.nymeaHosts.createWanHost("Demo server", "nymea://nymea.nymea.io:2222")
|
||||
var host = nymeaDiscovery.nymeaHosts.createWanHost("Demo server", "nymea://nymea.nymea.io:2222")
|
||||
root.currentEngine.jsonRpcClient.connectToHost(host)
|
||||
}
|
||||
|
||||
|
|
@ -164,7 +164,7 @@ Item {
|
|||
}
|
||||
|
||||
Binding {
|
||||
target: _discovery
|
||||
target: nymeaDiscovery
|
||||
property: "discovering"
|
||||
value: engine.jsonRpcClient.currentHost === null
|
||||
}
|
||||
|
|
@ -180,11 +180,11 @@ Item {
|
|||
Component.onCompleted: {
|
||||
setupPushNotifications();
|
||||
if (autoConnectHost.length > 0) {
|
||||
var host = discovery.nymeaHosts.createLanHost("Manual connection", autoConnectHost);
|
||||
var host = nymeaDiscovery.nymeaHosts.createLanHost("Manual connection", autoConnectHost);
|
||||
engine.jsonRpcClient.connectToHost(host)
|
||||
} else if (tabSettings.lastConnectedHost.length > 0) {
|
||||
print("Last connected host was", tabSettings.lastConnectedHost)
|
||||
var cachedHost = discovery.nymeaHosts.find(tabSettings.lastConnectedHost);
|
||||
var cachedHost = nymeaDiscovery.nymeaHosts.find(tabSettings.lastConnectedHost);
|
||||
if (cachedHost) {
|
||||
engine.jsonRpcClient.connectToHost(cachedHost)
|
||||
return;
|
||||
|
|
@ -343,14 +343,14 @@ Item {
|
|||
var popup = certDialogComponent.createObject(root);
|
||||
popup.accepted.connect(function(){
|
||||
engine.jsonRpcClient.acceptCertificate(serverUuid, pem);
|
||||
engine.jsonRpcClient.connectToHost(discovery.nymeaHosts.find(serverUuid));
|
||||
engine.jsonRpcClient.connectToHost(nymeaDiscovery.nymeaHosts.find(serverUuid));
|
||||
})
|
||||
popup.open();
|
||||
}
|
||||
onConnectedChanged: {
|
||||
print("json client connected changed", engine.jsonRpcClient.connected)
|
||||
if (engine.jsonRpcClient.connected) {
|
||||
discovery.cacheHost(engine.jsonRpcClient.currentHost)
|
||||
nymeaDiscovery.cacheHost(engine.jsonRpcClient.currentHost)
|
||||
tabSettings.lastConnectedHost = engine.jsonRpcClient.serverUuid
|
||||
}
|
||||
init();
|
||||
|
|
|
|||
|
|
@ -126,7 +126,7 @@ SettingsPageBase {
|
|||
onClicked: {
|
||||
print("clicked, connected:", engine.jsonRpcClient.connected, model.id)
|
||||
if (!engine.jsonRpcClient.connected) {
|
||||
var host = discovery.nymeaHosts.find(model.id)
|
||||
var host = nymeaDiscovery.nymeaHosts.find(model.id)
|
||||
engine.jsonRpcClient.connectToHost(host);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ Page {
|
|||
|
||||
NymeaHostsFilterModel {
|
||||
id: hostsProxy
|
||||
discovery: _discovery
|
||||
discovery: nymeaDiscovery
|
||||
showUnreachableBearers: false
|
||||
jsonRpcClient: engine.jsonRpcClient
|
||||
showUnreachableHosts: false
|
||||
|
|
@ -220,16 +220,16 @@ Page {
|
|||
Layout.leftMargin: app.margins
|
||||
Layout.rightMargin: app.margins
|
||||
wrapMode: Text.WordWrap
|
||||
visible: discovery.nymeaHosts.count === 0
|
||||
visible: nymeaDiscovery.nymeaHosts.count === 0
|
||||
text: qsTr("Do you have a %1:core but it's not connected to your network yet? Use the wireless setup to connect it!").arg(app.systemName)
|
||||
}
|
||||
Button {
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: app.margins
|
||||
Layout.rightMargin: app.margins
|
||||
visible: discovery.nymeaHosts.count === 0
|
||||
visible: nymeaDiscovery.nymeaHosts.count === 0
|
||||
text: qsTr("Start wireless setup")
|
||||
onClicked: pageStack.push(Qt.resolvedUrl("wifisetup/BluetoothDiscoveryPage.qml"), {nymeaDiscovery: discovery})
|
||||
onClicked: pageStack.push(Qt.resolvedUrl("wifisetup/BluetoothDiscoveryPage.qml"))
|
||||
}
|
||||
Button {
|
||||
Layout.fillWidth: true
|
||||
|
|
@ -245,10 +245,10 @@ Page {
|
|||
Layout.leftMargin: app.margins
|
||||
Layout.rightMargin: app.margins
|
||||
Layout.bottomMargin: app.margins
|
||||
visible: discovery.nymeaHosts.count === 0
|
||||
visible: nymeaDiscovery.nymeaHosts.count === 0
|
||||
text: qsTr("Demo mode (online)")
|
||||
onClicked: {
|
||||
var host = discovery.nymeaHosts.createWanHost("Demo server", "nymea://nymea.nymea.io:2222")
|
||||
var host = nymeaDiscovery.nymeaHosts.createWanHost("Demo server", "nymea://nymea.nymea.io:2222")
|
||||
engine.jsonRpcClient.connectToHost(host)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -124,7 +124,7 @@ Page {
|
|||
}
|
||||
|
||||
print("Try to connect ", rpcUrl)
|
||||
var host = discovery.nymeaHosts.createLanHost("Manual connection", rpcUrl);
|
||||
var host = nymeaDiscovery.nymeaHosts.createLanHost("Manual connection", rpcUrl);
|
||||
engine.jsonRpcClient.connectToHost(host)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,57 +41,70 @@ Page {
|
|||
onBackPressed: pageStack.pop()
|
||||
}
|
||||
|
||||
property var nymeaDiscovery: null
|
||||
|
||||
BluetoothDiscovery {
|
||||
id: bluetoothDiscovery
|
||||
discoveryEnabled: pageStack.currentItem === root
|
||||
}
|
||||
|
||||
NetworkManagerController {
|
||||
id: networkManager
|
||||
BtWiFiSetup {
|
||||
id: wifiSetup
|
||||
|
||||
onStatusChanged: {
|
||||
print("status changed", status)
|
||||
switch (status) {
|
||||
case BtWiFiSetup.StatusDisconnected:
|
||||
pageStack.pop(root)
|
||||
break;
|
||||
case BtWiFiSetup.StatusConnectingToBluetooth:
|
||||
break;
|
||||
case BtWiFiSetup.StatusConnectedToBluetooth:
|
||||
if (!wifiSetup.networkingEnabled) {
|
||||
wifiSetup.networkingEnabled = true;
|
||||
}
|
||||
if (!wifiSetup.wirelessEnabled) {
|
||||
wifiSetup.wirelessEnabled = true;
|
||||
}
|
||||
setupDevice()
|
||||
break;
|
||||
case BtWiFiSetup.StatusConnectingToWiFi:
|
||||
break;
|
||||
case BtWiFiSetup.StatusConnectedToWiFi:
|
||||
print("Connected to wifi!")
|
||||
}
|
||||
}
|
||||
onBluetoothConnectionError: {
|
||||
print("Error")
|
||||
pageStack.pop(root)
|
||||
}
|
||||
onWirelessEnabledChanged: {
|
||||
if (wirelessEnabled) {
|
||||
scanWiFi();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function connectDevice(btDeviceInfo) {
|
||||
networkManager.bluetoothDeviceInfo = btDeviceInfo
|
||||
networkManager.connectDevice();
|
||||
wifiSetup.connectToDevice(btDeviceInfo)
|
||||
print("**** connecting")
|
||||
pageStack.push(connectingPageComponent, {deviceName: btDeviceInfo.name})
|
||||
}
|
||||
|
||||
function setupDevice() {
|
||||
pageStack.pop(root, StackView.Immediate)
|
||||
if (networkManager.manager.currentConnection) {
|
||||
print("***** pushing WirelessSetupPage with networkManager:", networkManager)
|
||||
var page = pageStack.push(Qt.resolvedUrl("WirelessSetupPage.qml"), { networkManagerController: networkManager, nymeaDiscovery: root.nymeaDiscovery } )
|
||||
if (wifiSetup.currentConnection) {
|
||||
var page = pageStack.push(Qt.resolvedUrl("WirelessSetupPage.qml"), { wifiSetup: wifiSetup } )
|
||||
page.done.connect(function() {
|
||||
pageStack.pop(root, StackView.Immediate);
|
||||
pageStack.pop();
|
||||
})
|
||||
} else {
|
||||
var page = pageStack.push(Qt.resolvedUrl("ConnectWiFiPage.qml"), { networkManagerController: networkManager } )
|
||||
var page = pageStack.push(Qt.resolvedUrl("ConnectWiFiPage.qml"), { wifiSetup: wifiSetup } )
|
||||
page.connected.connect(function() {
|
||||
setupDevice();
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: networkManager.manager
|
||||
onInitializedChanged: {
|
||||
if (networkManager.manager.initialized) {
|
||||
setupDevice()
|
||||
} else {
|
||||
pageStack.pop(root)
|
||||
}
|
||||
}
|
||||
|
||||
onConnectedChanged: {
|
||||
if (!networkManager.manager.connected) {
|
||||
pageStack.pop(root)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ Page {
|
|||
onBackPressed: pageStack.pop()
|
||||
}
|
||||
|
||||
property var networkManagerController: null
|
||||
property BtWiFiSetup wifiSetup: null
|
||||
|
||||
ColumnLayout {
|
||||
anchors { left: parent.left; top: parent.top; right: parent.right }
|
||||
|
|
@ -50,31 +50,31 @@ Page {
|
|||
Layout.fillWidth: true
|
||||
progressive: false
|
||||
text: qsTr("System UUID")
|
||||
subText: networkManagerController.manager.modelNumber
|
||||
subText: wifiSetup.modelNumber
|
||||
}
|
||||
NymeaSwipeDelegate {
|
||||
Layout.fillWidth: true
|
||||
progressive: false
|
||||
text: qsTr("Manufacturer")
|
||||
subText: networkManagerController.manager.manufacturer
|
||||
subText: wifiSetup.manufacturer
|
||||
}
|
||||
NymeaSwipeDelegate {
|
||||
Layout.fillWidth: true
|
||||
progressive: false
|
||||
text: qsTr("Software revision")
|
||||
subText: networkManagerController.manager.softwareRevision
|
||||
subText: wifiSetup.softwareRevision
|
||||
}
|
||||
NymeaSwipeDelegate {
|
||||
Layout.fillWidth: true
|
||||
progressive: false
|
||||
text: qsTr("Firmware revision")
|
||||
subText: networkManagerController.manager.firmwareRevision
|
||||
subText: wifiSetup.firmwareRevision
|
||||
}
|
||||
NymeaSwipeDelegate {
|
||||
Layout.fillWidth: true
|
||||
progressive: false
|
||||
text: qsTr("Hardware revision")
|
||||
subText: networkManagerController.manager.hardwareRevision
|
||||
subText: wifiSetup.hardwareRevision
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ import Nymea 1.0
|
|||
Page {
|
||||
id: root
|
||||
|
||||
property var networkManagerController: null
|
||||
property BtWiFiSetup wifiSetup: null
|
||||
|
||||
signal connected();
|
||||
|
||||
|
|
@ -50,13 +50,13 @@ Page {
|
|||
HeaderButton {
|
||||
imageSource: "../images/info.svg"
|
||||
onClicked: {
|
||||
pageStack.push(Qt.resolvedUrl("BoxInfoPage.qml"), {networkManagerController: root.networkManagerController})
|
||||
pageStack.push(Qt.resolvedUrl("BoxInfoPage.qml"), {wifiSetup: root.wifiSetup})
|
||||
}
|
||||
}
|
||||
HeaderButton {
|
||||
imageSource: "../images/settings.svg"
|
||||
onClicked: {
|
||||
pageStack.push(Qt.resolvedUrl("NetworkSettingsPage.qml"), {networkManagerController: root.networkManagerController})
|
||||
pageStack.push(Qt.resolvedUrl("NetworkSettingsPage.qml"), {wifiSetup: root.wifiSetup})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -69,14 +69,26 @@ Page {
|
|||
Layout.fillHeight: true
|
||||
|
||||
model: WirelessAccessPointsProxy {
|
||||
accessPoints: networkManagerController.manager.accessPoints
|
||||
accessPoints: wifiSetup.accessPoints
|
||||
}
|
||||
clip: true
|
||||
|
||||
Timer {
|
||||
interval: 5000
|
||||
repeat: true
|
||||
onTriggered: wifiSetup.scanWiFi()
|
||||
running: wifiSetup.accessPoints.count === 0
|
||||
}
|
||||
|
||||
BusyIndicator {
|
||||
anchors.centerIn: parent
|
||||
visible: wifiSetup.accessPoints.count === 0
|
||||
running: visible
|
||||
}
|
||||
|
||||
delegate: NymeaSwipeDelegate {
|
||||
width: parent.width
|
||||
text: model.ssid !== "" ? model.ssid : qsTr("Hidden Network")
|
||||
enabled: !networkManagerController.manager.working
|
||||
subText: model.hostAddress
|
||||
|
||||
iconColor: model.selectedNetwork ? Style.accentColor : "#808080"
|
||||
|
|
@ -136,16 +148,16 @@ Page {
|
|||
property string macAddress
|
||||
|
||||
Connections {
|
||||
target: root.networkManagerController.manager
|
||||
target: root.wifiSetup
|
||||
onCurrentConnectionChanged: {
|
||||
if (root.networkManagerController.manager.currentConnection && root.networkManagerController.manager.currentConnection.ssid === authenticationPage.ssid) {
|
||||
if (root.wifiSetup.currentConnection && root.wifiSetup.currentConnection.ssid === authenticationPage.ssid) {
|
||||
print("**** connected!")
|
||||
root.connected();
|
||||
}
|
||||
}
|
||||
onWirelessStatusChanged: {
|
||||
print("Wireless status changed:", networkManagerController.manager.networkStatus)
|
||||
if (networkManagerController.manager.wirelessStatus === WirelessSetupManager.WirelessStatusFailed) {
|
||||
print("Wireless status changed:", wifiSetup.networkStatus)
|
||||
if (wifiSetup.wirelessStatus === BtWiFiSetup.WirelessStatusFailed) {
|
||||
wrongPasswordText.visible = true
|
||||
pageStack.pop(authenticationPage)
|
||||
}
|
||||
|
|
@ -199,7 +211,7 @@ Page {
|
|||
text: qsTr("OK")
|
||||
enabled: passwordTextField.displayText.length >= 8
|
||||
onClicked: {
|
||||
root.networkManagerController.manager.connectWirelessNetwork(authenticationPage.ssid, passwordTextField.text)
|
||||
root.wifiSetup.connectDeviceToWiFi(authenticationPage.ssid, passwordTextField.text)
|
||||
pageStack.push(connectingWifiWaitPageComponent, {ssid: authenticationPage.ssid })
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ Page {
|
|||
onBackPressed: pageStack.pop()
|
||||
}
|
||||
|
||||
property var networkManagerController: null
|
||||
property BtWiFiSetup wifiSetup: null
|
||||
|
||||
ColumnLayout {
|
||||
anchors { left: parent.left; top: parent.top; right: parent.right }
|
||||
|
|
@ -49,17 +49,17 @@ Page {
|
|||
SwitchDelegate {
|
||||
Layout.fillWidth: true
|
||||
text: qsTr("Networking")
|
||||
checked: networkManagerController.manager.networkingEnabled
|
||||
onClicked: networkManagerController.manager.enableNetworking(checked)
|
||||
checked: wifiSetup.networkingEnabled
|
||||
onClicked: wifiSetup.networkingEnabled = checked
|
||||
}
|
||||
|
||||
SwitchDelegate {
|
||||
Layout.fillWidth: true
|
||||
enabled: networkManagerController.manager.networkingEnabled
|
||||
enabled: wifiSetup.networkingEnabled
|
||||
text: qsTr("Wireless network")
|
||||
checked: networkManagerController.manager.wirelessEnabled
|
||||
checked: wifiSetup.wirelessEnabled
|
||||
onClicked: {
|
||||
networkManagerController.manager.enableWireless(checked)
|
||||
wifiSetup.wirelessEnabled = checked
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -68,7 +68,7 @@ Page {
|
|||
Layout.leftMargin: app.margins
|
||||
Layout.rightMargin: app.margins
|
||||
text: qsTr("Trigger a wireless scan on the device.")
|
||||
onClicked: networkManagerController.manager.performWifiScan()
|
||||
onClicked: wifiSetup.scanWiFi()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,8 +37,7 @@ import Nymea 1.0
|
|||
Page {
|
||||
id: root
|
||||
|
||||
property var networkManagerController: null
|
||||
property var nymeaDiscovery: null
|
||||
property BtWiFiSetup wifiSetup: null
|
||||
|
||||
signal done()
|
||||
|
||||
|
|
@ -51,25 +50,24 @@ Page {
|
|||
HeaderButton {
|
||||
imageSource: "../images/info.svg"
|
||||
onClicked: {
|
||||
pageStack.push(Qt.resolvedUrl("BoxInfoPage.qml"), {networkManagerController: root.networkManagerController})
|
||||
pageStack.push(Qt.resolvedUrl("BoxInfoPage.qml"), {wifiSetup: root.wifiSetup})
|
||||
}
|
||||
}
|
||||
HeaderButton {
|
||||
imageSource: "../images/settings.svg"
|
||||
onClicked: {
|
||||
pageStack.push(Qt.resolvedUrl("NetworkSettingsPage.qml"), {networkManagerController: root.networkManagerController})
|
||||
pageStack.push(Qt.resolvedUrl("NetworkSettingsPage.qml"), {wifiSetup: root.wifiSetup})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
print("created with networkmanagercontroller:", root.networkManagerController)
|
||||
updateConnectButton();
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: root.networkManagerController.manager
|
||||
onErrorOccurred: {
|
||||
target: root.wifiSetup
|
||||
onWifiSetupError: {
|
||||
print("Error occurred", errorMessage)
|
||||
var errorDialog = Qt.createComponent(Qt.resolvedUrl("../components/ErrorDialog.qml"));
|
||||
var popup = errorDialog.createObject(app, {text: errorMessage})
|
||||
|
|
@ -82,25 +80,25 @@ Page {
|
|||
}
|
||||
|
||||
Connections {
|
||||
target: root.nymeadiscovery.nymeaHosts
|
||||
target: nymeaDiscovery.nymeaHosts
|
||||
onCountChanged: updateConnectButton();
|
||||
}
|
||||
|
||||
function updateConnectButton() {
|
||||
if (!root.networkManagerController.manager.currentConnection) {
|
||||
if (!root.wifiSetup.currentConnection) {
|
||||
connectButton.url = "";
|
||||
return;
|
||||
}
|
||||
|
||||
// FIXME: We should rather look for the UUID here, but nymea-networkmanager doesn't support getting us the nymea uuid (yet)
|
||||
for (var i = 0; i < root.nymeadiscovery.nymeaHosts.count; i++) {
|
||||
for (var j = 0; j < root.nymeadiscovery.nymeaHosts.get(i).connections.count; j++) {
|
||||
if (root.nymeadiscovery.nymeaHosts.get(i).connections.get(j).url.toString().indexOf(root.networkManagerController.manager.currentConnection.hostAddress) >= 0) {
|
||||
connectButton.url = root.nymeadiscovery.nymeaHosts.get(i).connections.get(j).url
|
||||
for (var i = 0; i < nymeaDiscovery.nymeaHosts.count; i++) {
|
||||
for (var j = 0; j < nymeaDiscovery.nymeaHosts.get(i).connections.count; j++) {
|
||||
if (nymeaDiscovery.nymeaHosts.get(i).connections.get(j).url.toString().indexOf(root.wifiSetup.currentConnection.hostAddress) >= 0) {
|
||||
connectButton.host = nymeaDiscovery.nymeaHosts.get(i)
|
||||
return;
|
||||
}
|
||||
}
|
||||
root.nymeadiscovery.nymeaHosts.get(i).connections.countChanged.connect(function() {
|
||||
nymeaDiscovery.nymeaHosts.get(i).connections.countChanged.connect(function() {
|
||||
updateConnectButton();
|
||||
})
|
||||
}
|
||||
|
|
@ -121,15 +119,15 @@ Page {
|
|||
Layout.fillWidth: true
|
||||
Layout.leftMargin: app.margins; Layout.rightMargin: app.margins
|
||||
wrapMode: Text.WordWrap
|
||||
text: root.networkManagerController.manager.currentConnection
|
||||
? qsTr("Your %1:core is connected to %2").arg(app.systemName).arg(root.networkManagerController.manager.currentConnection.ssid)
|
||||
text: root.wifiSetup.currentConnection
|
||||
? qsTr("Your %1:core is connected to %2").arg(app.systemName).arg(root.wifiSetup.currentConnection.ssid)
|
||||
: ""
|
||||
}
|
||||
|
||||
Label {
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: app.margins; Layout.rightMargin: app.margins
|
||||
text: qsTr("IP address: %1").arg(root.networkManagerController.manager.currentConnection.hostAddress)
|
||||
text: qsTr("IP address: %1").arg(root.wifiSetup.currentConnection.hostAddress)
|
||||
elide: Text.ElideRight
|
||||
}
|
||||
|
||||
|
|
@ -147,13 +145,14 @@ Page {
|
|||
|
||||
Button {
|
||||
id: connectButton
|
||||
visible: url != ""
|
||||
visible: host !== null
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: app.margins; Layout.rightMargin: app.margins
|
||||
text: qsTr("Connect to %1:core").arg(app.systemName)
|
||||
property string url
|
||||
property NymeaHost host: null
|
||||
onClicked: {
|
||||
engine.jsonRpcClient.connectToHost(url)
|
||||
print("connecting to", host)
|
||||
engine.jsonRpcClient.connectToHost(host)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -162,7 +161,7 @@ Page {
|
|||
Layout.leftMargin: app.margins; Layout.rightMargin: app.margins
|
||||
text: qsTr("Change network")
|
||||
onClicked: {
|
||||
var page = pageStack.push(Qt.resolvedUrl("ConnectWiFiPage.qml"), {networkManagerController: root.networkManagerController})
|
||||
var page = pageStack.push(Qt.resolvedUrl("ConnectWiFiPage.qml"), {wifiSetup: root.wifiSetup})
|
||||
page.connected.connect(function() {
|
||||
pageStack.pop(root)
|
||||
})
|
||||
|
|
|
|||
Loading…
Reference in New Issue