From 0a5f2088affd1a92a38b067618585c57730b0646 Mon Sep 17 00:00:00 2001 From: Matt Porter Date: Wed, 25 Jul 2018 12:24:28 -0400 Subject: wifi: convert to libqtappfw network model Use libqtappfw's network model for the wifi network list, wifi status, and wifi power/connect/disconnect methods. Remove useless websocket message handling and other related code. Bug-AGL: SPEC-1542 Change-Id: I269fc03405be98f428b61e6a583eb5cbad767c6e Signed-off-by: Matt Porter --- app/Settings.qml | 2 - app/main.cpp | 2 + app/wifi/Wifi.qml | 284 +++++------------------------------------------------ package/config.xml | 2 +- 4 files changed, 26 insertions(+), 264 deletions(-) diff --git a/app/Settings.qml b/app/Settings.qml index 0d74c3b..b3a622a 100644 --- a/app/Settings.qml +++ b/app/Settings.qml @@ -49,8 +49,6 @@ ApplicationWindow { if (!app.isSetting) continue settingsModel.append({'icon': app.icon, 'title': app.title, 'checkable': app.checkable, 'app': app}) app.visible = false - - if (app.isWifi) app.activateWifi() } } diff --git a/app/main.cpp b/app/main.cpp index 7ad569f..082c444 100644 --- a/app/main.cpp +++ b/app/main.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include class DBus : public QObject @@ -84,6 +85,7 @@ int main(int argc, char *argv[]) bindingAddressWS.setQuery(query); QQmlContext *context = engine.rootContext(); context->setContextProperty(QStringLiteral("bindingAddressWS"), bindingAddressWS); + context->setContextProperty("network", new Network(bindingAddressWS, context)); std::string token = secret.toStdString(); LibHomeScreen* hs = new LibHomeScreen(); diff --git a/app/wifi/Wifi.qml b/app/wifi/Wifi.qml index b30863c..85e8b60 100644 --- a/app/wifi/Wifi.qml +++ b/app/wifi/Wifi.qml @@ -1,6 +1,6 @@ - /* * Copyright (C) 2016 The Qt Company Ltd. + * Copyright (C) 2018 Konsulko Group * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,7 +19,6 @@ import QtQuick 2.6 import QtQuick.Layouts 1.1 import QtQuick.Controls 2.0 import AGL.Demo.Controls 1.0 -import QtWebSockets 1.0 import ".." SettingPage { @@ -27,199 +26,11 @@ SettingPage { icon: '/wifi/images/HMI_Settings_WifiIcon.svg' title: 'Wifi' checkable: true + checked: network.wifiEnabled readonly property bool isWifi: true - property bool isInitializing: true - - property string address_str: bindingAddressWS - property string token_str: "" - property string api_str: "wifi-manager" - property string verb_str: "" - property string parameter_str: "" - property string payloadLength: "9999" - - property var msgid_enu: { - "call": 2, - "retok": 3, - "reterr": 4, - "event": 5 - } - property string request_str: "" - property string status_str: "" - - - - WebSocket { - id: websocket - url: address_str - onTextMessageReceived: { - var message_json = JSON.parse(message) - console.debug("Raw response: " + message) - /* server is not happy with our request, ignore it */ - if ((message_json[0] === msgid_enu.reterr)) { - - console.error("Return value is not OK!") - console.error("Raw response: " + message) - return - - } else if ((message_json[0] === msgid_enu.event)) { - - var eventContent = JSON.parse(JSON.stringify(message_json[2])) - - console.log("Received EVENT: " + eventContent.event) - - if (eventContent.event === "wifi-manager/networkList") { - - console.debug("Event data:" + eventContent.data.data1 + ", " + eventContent.data.data2 ) - console.log("Network List was updated, sending scan_result request") - - //update network list - verb_str = "scan_result" - sendSocketMesage(verb_str, 'None') - } - - else if (eventContent.event === "wifi-manager/passkey") { - - console.debug("Event data:" + eventContent.data.data1 + ", " + eventContent.data.data2 ) - console.log("Passkey requested") - dialog.visible = true - - } - else { - - console.error("Unhadled event.") - - } - } else if ((message_json[0] === msgid_enu.retok)) { - - - /* token creation or refresh happened, store it and enable buttons */ - if (verb_str == "connect") { - token_str = message_json[3] - - console.error("Connect reply received!") - - - } else if (verb_str == "logout") { - websocket.active = false // close the socket - - } else if (verb_str == "scan_result") { - - var jsonObjectNetworks = JSON.parse( - JSON.stringify(message_json[2].response)) - - networkList.clear() - for (var i = 0; i < jsonObjectNetworks.length; i++) { - - networkList.append({ - number: jsonObjectNetworks[i].Number, - name: jsonObjectNetworks[i].ESSID, - strength: jsonObjectNetworks[i].Strength, - serviceState: jsonObjectNetworks[i].State, - security: jsonObjectNetworks[i].Security, - address: jsonObjectNetworks[i].IPAddress - }) - } - - } - else if (verb_str == "status") { - - var status = "OFF" - status = (message_json[2].response).Power - - checked = (status === "ON") ? true : false - } - } else - console.log("Unhadled websocket message", message_json[0]) - } - onStatusChanged: { - - var parameterJson = 0 - var requestJson = 0 - - if (websocket.status == WebSocket.Error) { - status_str = "Error: " + websocket.errorString - - } else if (websocket.status == WebSocket.Open) { - status_str = "Socket opened; sending message..." - - //first get the status - verb_str = "status" - parameterJson = 'None' - sendSocketMesage(verb_str, parameterJson) - - - - } else if (websocket.status == WebSocket.Closed) { - status_str = "Socket closed" - console.log("Socket closed, bye.") - - websocket.active = false - - } - - console.log(status_str) - } - active: false - } onCheckedChanged: { - console.log("Wifi set to", checked) - - if (websocket.active) { - - if (checked == true) { - - //subscribe for events - sendSocketMesage("subscribe", { value: "networkList" }) - sendSocketMesage("subscribe", { value: "passkey" }) - sendSocketMesage("activate", 'None') - - //get scan results right away - verb_str = "scan_result" - sendSocketMesage(verb_str, 'None') - - } else { - - if (!isInitializing) { - networkList.clear() - - sendSocketMesage("deactivate", 'None') - sendSocketMesage("unsubscribe", { value: "passkey" }) - sendSocketMesage("unsubscribe", { value: "networkList" }) - } - } - isInitializing = false - } - - else { - console.log("Websocket not active.") - websocket.active = true - } - - - - } - - - function sendSocketMesage(verb, parameter) { - - - var requestJson = [msgid_enu.call, payloadLength, api_str + '/' - + verb, parameter] - - websocket.sendTextMessage(JSON.stringify(requestJson)) - - } - ListModel { - id: networkList - } - - - function securityType(security) { - if (security === "Open") - return "unsecured" - else - return "secured" + network.power(checked) } Component { @@ -229,8 +40,6 @@ SettingPage { width: ListView.view.width Image { anchors.left: parent.left - //width: 70 - //height: 50 id: icon source: { var svg @@ -242,7 +51,7 @@ SettingPage { svg = "3Bars" else svg = "Full" - if (securityType(security) === "unsecured") { + if (security === "Open") { return 'images/HMI_Settings_Wifi_%1.svg'.arg(svg) } else { return 'images/HMI_Settings_Wifi_Locked_%1.svg'.arg(svg) @@ -254,80 +63,38 @@ SettingPage { anchors.leftMargin: 5 Label { id: networkNameText - text: name + text: ssid color: '#66FF99' font.pixelSize: 48 - font.bold: serviceState === "ready" - || serviceState === "online" + font.bold: sstate === "ready" + || sstate === "online" } Label { - visible: serviceState === "ready" - || serviceState === "online" + visible: sstate === "ready" + || sstate === "online" text: "connected, " + address font.pixelSize: 18 color: "white" - //font.italic: true } } - - onClicked: { - var parameterJson = 0 - var requestJson = 0 - - //connectButton.border.color = "steelblue" - if ((serviceState === "ready") || serviceState === "online") { - - - //means we are connected - console.log("Disconnecting from", index, " ,", name) - - //make some indication that disconnection is in progress - //probably not good enough, though. TODO: make it better + if ((sstate === "ready") || sstate === "online") { + console.log("Disconnecting from ", ssid, " (", service, ")") networkNameText.font.italic = 1 - - verb_str = "disconnect" - parameterJson = { - network: view.currentIndex - } - sendSocketMesage(verb_str, parameterJson) - - - - + network.disconnect(service) } else { - console.log("Requesting connection to network #", index, ", ", name, ".") - view.currentIndex = model.index - - //make some indication that connection is in progress - //probably not good enough, though. TODO: make it better + console.log("Connecting to ", ssid, " (", service, ")") networkNameText.font.italic = 1 - - verb_str = "connect" - parameterJson = { - network: view.currentIndex - } - sendSocketMesage(verb_str, parameterJson) - + network.connect(service) } } - - // ImageButton { - // anchors.verticalCenter: parent.verticalCenter - // anchors.right: parent.right - // offImage: '../images/HMI_Settings_X.svg' - // onClicked: { - - // } - // } Image { source: '../images/HMI_Settings_DividingLine.svg' anchors.horizontalCenter: parent.horizontalCenter anchors.top: parent.top anchors.topMargin: -15 - visible: model.index > 0 } } @@ -337,7 +104,7 @@ SettingPage { id: view anchors.fill: parent anchors.margins: 100 - model: networkList + model: WifiNetworkModel delegate: wifiDevice clip: true } @@ -370,22 +137,14 @@ SettingPage { anchors.centerIn: parent TextField { id: password + property int reqid: 0 placeholderText: 'Password' } Button { text: 'Connect' highlighted: true onClicked: { - - var passkey = password.text - console.log("Validating", passkey) - - //just send the passkey, binder is waiting for it - verb_str = "insertpasskey" - var parameterJson = { - passkey: passkey - } - sendSocketMesage(verb_str, parameterJson) + network.input(password.reqid, password.text) dialog.visible = false } } @@ -406,8 +165,11 @@ SettingPage { } } - function activateWifi(){ - websocket.active = true + Connections { + target: network + onInputRequest: { + password.reqid = id + dialog.visible = true + } } - } diff --git a/package/config.xml b/package/config.xml index 2e40034..4ca6eaa 100644 --- a/package/config.xml +++ b/package/config.xml @@ -9,7 +9,7 @@ - + -- cgit 1.2.3-korg