/* * Copyright (c) 2017 TOYOTA MOTOR CORPORATION * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import QtQuick 2.6 import QtQuick.Layouts 1.3 import QtQuick.Controls 2.0 import QtQuick.Window 2.2 import Camera 1.0 import QtWebSockets 1.0 ApplicationWindow { id: root width: 1080 height: 1487 property string als_meter_demo_request_str: "" property string api_str: "low-can" property var msgid_enu: { "call":2, "retok":3, "reterr":4, "event":5 } property int recirc:0 property int vehiclespeed: 0 property real enginespeed: 0 property string wshift: "N" property int circulation: 0 WebSocket { id: websocket url: bindingAddressWS onStatusChanged: { if (websocket.status === WebSocket.Error){ console.log ("Error: " + websocket.errorString) websocket.active = false countdown.start() }else if (websocket.status === WebSocket.Open){ console.log ("Socket Open") do_subscribe() }else if (websocket.status === WebSocket.Closed){ console.log ("Socket closed") } } onTextMessageReceived: { var message_json = JSON.parse(message); console.log("Raw response: " + message) if (message_json[0] === msgid_enu.event){ var propertyName = message_json[2].event.split("/")[1] if (propertyName === "messages.transmission.mode"){ wshift = message_json[2].data.value }else if (propertyName === "messages.vehicle.average.speed"){ vehiclespeed = message_json[2].data.value }else if (propertyName === "messages.engine.speed"){ enginespeed = message_json[2].data.value } else if ( message.indexOf("messages.hvac.circulation") > 0 ) { circulation = message_json[2].data.value ? 1 : 0 } }else if (message_json[0] === msgid_enu.retok){ console.log ("Response is OK!") }else{ console.log ("Event type error:", message_json[0]) } } active: false } Timer { id: countdown repeat: false interval: 3000 triggeredOnStart: false onTriggered: { websocket.active = true } } Item { id: container anchors.centerIn: parent width: 1080 height: 1487 scale: screenInfo.scale_factor() Item { id: topscreen_up width: root.width height: (root.height - bottomscreen.height)/2 CameraControl { id:cameracontrol_up listWH: true device: camera_up width: root.width height:80 } Camera { id: camera_up width: root.width height: topscreen_up.height - cameracontrol_up.height anchors.top: cameracontrol_up.bottom onIsrunningChanged: { camerabg_up.visible = !isrunning if (isrunning){ if (cameracontrol_dn.device.cameraCnt() === 1) cameracontrol_dn.switchstatus = false; }else{ cameracontrol_dn.switchstatus = true; } } onCamraCntChanged: { if (!camera_dn.isrunning) cameracontrol_dn.number = camera_dn.camranum(); if (!camera_up.isrunning) cameracontrol_up.number = camera_up.camranum(); } Image { id: camerabg_up anchors.centerIn: parent width: 200 height: 200 source: "images/camera/camera_bg.svg" } } } Item { id: topscreen_dn width: root.width height: (root.height - bottomscreen.height)/2 anchors.top: topscreen_up.bottom CameraControl { id:cameracontrol_dn listWH: false device: camera_dn width: root.width height:80 back:0 } Camera { id: camera_dn width: root.width height: topscreen_dn.height - cameracontrol_dn.height anchors.top: cameracontrol_dn.bottom onIsrunningChanged: { camerabg_dn.visible = !isrunning if (isrunning){ if (cameracontrol_up.device.cameraCnt() === 1) cameracontrol_up.switchstatus = false; }else{ cameracontrol_up.switchstatus = true; } } onCamraCntChanged: { if (!camera_up.isrunning) cameracontrol_up.number = camera_up.camranum(); if (!camera_dn.isrunning) cameracontrol_dn.number = camera_dn.camranum(); } Image { id: camerabg_dn anchors.centerIn: parent width: 200 height: 200 source: "images/camera/camera_bg.svg" } } } Item { id: bottomscreen width: root.width height: 600 anchors.bottom: parent.bottom Image { width: parent.width height: parent.height asynchronous: true fillMode: Image.TileHorizontally smooth: true source: "images/homescreen/homebg_bottom.svg" } RowLayout { id: smtparts anchors.left: parent.left anchors.right: parent.right Speed { id: speedparts anchors.left: parent.left anchors.leftMargin: 30 anchors.bottom: parent.bottom anchors.bottomMargin: 120 width: imgwidth height: imgheight } ColumnLayout { id: tachoparts anchors.horizontalCenter: parent.horizontalCenter Tacho { anchors.top: parent.top anchors.topMargin: -60 anchors.horizontalCenter: parent.horizontalCenter width: imgwidth height: imgheight } MidOther { anchors.bottom: parent.bottom anchors.bottomMargin: 110 anchors.horizontalCenter: parent.horizontalCenter width: imgwidth height: imgheight } } Mid { id: midparts anchors.right: parent.right anchors.rightMargin: 25 anchors.bottom: parent.bottom anchors.bottomMargin: 90 width: imgwidth height: imgheight } } } } onVisibleChanged: { if (visible){ if (!websocket.active){ websocket.active = true }else{ do_subscribe() } } else { countdown.stop() if (websocket.active) do_unsubscribe() } } function do_call(binding, verb, event_name) { als_meter_demo_request_str = '[' + msgid_enu.call + ',"99999","' + binding+'/'+verb + '", {"event":"' + event_name + '"} ]' websocket.sendTextMessage (als_meter_demo_request_str) } function do_subscribe() { do_call(api_str, "subscribe", "vehicle.average.speed") do_call(api_str, "subscribe", "transmission.mode") do_call(api_str, "subscribe", "engine.speed") do_call(api_str, "subscribe", "hvac.circulation") } function do_unsubscribe() { do_call(api_str, "unsubscribe", "vehicle.average.speed") do_call(api_str, "unsubscribe", "transmission.mode") do_call(api_str, "unsubscribe", "engine.speed") do_call(api_str, "unsubscribe", "hvac.circulation") } }