From 95b45c40f7db39d4a9a0ceb2995b976b0f2792e4 Mon Sep 17 00:00:00 2001 From: zheng_wenlong Date: Wed, 6 Feb 2019 13:51:09 +0900 Subject: Change als-meter-demo by using low-can Change als-meter-demo by using low-can data. For m3ulcb/h3ulcb board, the usb camera device id is over 10, Detect the camera device from 0 to 19. Change-Id: Icbd0b4327c9c356f40cea320420d149d850e4347 Signed-off-by: zheng_wenlong --- app/Als-meter-demo.qml | 298 ++++++++++++++++++++++++------------------------- app/MidOther.qml | 2 +- app/Shift.qml | 9 +- app/Tacho.qml | 2 +- app/app.pro | 7 +- app/camera.cpp | 2 +- app/main.cpp | 91 ++------------- package/config.xml | 10 +- 8 files changed, 171 insertions(+), 250 deletions(-) diff --git a/app/Als-meter-demo.qml b/app/Als-meter-demo.qml index 4549704..486c4bf 100644 --- a/app/Als-meter-demo.qml +++ b/app/Als-meter-demo.qml @@ -27,12 +27,13 @@ ApplicationWindow { height: 1487 property string als_meter_demo_request_str: "" - property string api_str: "steering-wheel" + 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 int wshift: 0 + property string wshift: "N" + property int circulation: 0 WebSocket { id: websocket @@ -57,23 +58,19 @@ ApplicationWindow { if (message_json[0] === msgid_enu.event){ var propertyName = message_json[2].event.split("/")[1] - if (propertyName === "TransmissionMode"){ + if (propertyName === "messages.transmission.mode"){ wshift = message_json[2].data.value - }else if (propertyName === "VehicleSpeed"){ + }else if (propertyName === "messages.vehicle.average.speed"){ vehiclespeed = message_json[2].data.value - }else if (propertyName === "EngineSpeed"){ + }else if (propertyName === "messages.engine.speed"){ enginespeed = message_json[2].data.value } - }else if (message_json[0] === msgid_enu.retok){ - for (var item in message_json[2].response){ - if (item === "TransmissionMode"){ - wshift = message_json[2].response["TransmissionMode"]["value"] - }else if (item === "VehicleSpeed"){ - vehiclespeed = message_json[2].response["VehicleSpeed"]["value"] - }else if (item === "EngineSpeed"){ - enginespeed = message_json[2].response["EngineSpeed"]["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]) } @@ -93,153 +90,160 @@ ApplicationWindow { } Item { - id: topscreen_up - width: root.width - height: (root.height - bottomscreen.height)/2 + id: container + anchors.centerIn: parent + width: 1080 + height: 1487 + scale: screenInfo.scale_factor() - CameraControl { - id:cameracontrol_up - listWH: true - device: camera_up + Item { + id: topscreen_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 + height: (root.height - bottomscreen.height)/2 - if (isrunning){ - if (cameracontrol_dn.device.cameraCnt() === 1) - cameracontrol_dn.switchstatus = false; - }else{ - cameracontrol_dn.switchstatus = true; - } + CameraControl { + id:cameracontrol_up + listWH: true + device: camera_up + width: root.width + height:80 } - onCamraCntChanged: { - if (!camera_dn.isrunning) - cameracontrol_dn.number = camera_dn.camranum(); + 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 (!camera_up.isrunning) - cameracontrol_up.number = camera_up.camranum(); - } + 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(); - Image { - id: camerabg_up - anchors.centerIn: parent - width: 200 - height: 200 - source: "images/camera/camera_bg.svg" + 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 + Item { + id: topscreen_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 + 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; + 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(); + onCamraCntChanged: { + if (!camera_up.isrunning) + cameracontrol_up.number = camera_up.camranum(); - if (!camera_dn.isrunning) - cameracontrol_dn.number = camera_dn.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" + 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 + 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" } - ColumnLayout { - id: tachoparts - anchors.horizontalCenter: parent.horizontalCenter - Tacho { - anchors.top: parent.top - anchors.topMargin: -60 - anchors.horizontalCenter: parent.horizontalCenter + 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 } - MidOther { - anchors.bottom: parent.bottom - anchors.bottomMargin: 110 + 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 } } - 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){ @@ -255,36 +259,22 @@ ApplicationWindow { } } - Connections { - target: appVisible - onVisibleChanged: { - if (!visible){ - if (websocket.active) - do_unsubscribe() - }else{ - if (websocket.active){ - do_subscribe() - }else{ - websocket.active = true - } - } - } - } - 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", "VehicleSpeed") - do_call(api_str, "subscribe", "TransmissionMode") - do_call(api_str, "subscribe", "EngineSpeed") + 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", "VehicleSpeed") - do_call(api_str, "unsubscribe", "TransmissionMode") - do_call(api_str, "unsubscribe", "EngineSpeed") + 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") } } diff --git a/app/MidOther.qml b/app/MidOther.qml index 579d5f1..d765414 100644 --- a/app/MidOther.qml +++ b/app/MidOther.qml @@ -31,6 +31,6 @@ Item { fillMode: Image.PreserveAspectFit asynchronous: true smooth: true - source: recirc_mid[recirc] + source: recirc_mid[circulation] } } diff --git a/app/Shift.qml b/app/Shift.qml index 60a0f0f..7d2d017 100644 --- a/app/Shift.qml +++ b/app/Shift.qml @@ -21,7 +21,8 @@ import QtWebSockets 1.0 Row { property real percent: 1 property var carshift: [ - "images/meters/tacho_shift_N.svg", "images/meters/tacho_shift_D.svg" + "images/meters/tacho_shift_N.svg", "images/meters/tacho_shift_D.svg", + "images/meters/tacho_shift_P.svg", "images/meters/tacho_shift_R.svg" ] property var wheelshift: [ @@ -36,16 +37,16 @@ Row { fillMode: Image.PreserveAspectFit smooth: true asynchronous: true - source: wshift === 0 ? carshift[0] : carshift[1] + source: wshift == "N" ? carshift[0] : ( wshift == "P" ? carshift[2] : ( wshift == "R" ? carshift[3] : carshift[1])) } Image { - visible: wshift > 0 + visible: (wshift == "D1" || wshift == "D2"||wshift == "D3"||wshift == "D4"||wshift == "D5"||wshift == "D6") width: percent*sourceSize.width height: percent*sourceSize.height fillMode: Image.PreserveAspectFit smooth: true asynchronous: true - source: (wshift > 0 && wshift <= wheelshift.length) ? wheelshift[wshift-1] : wheelshift[0] + source: (wshift == "D1") ? wheelshift[0] : ((wshift == "D2") ? wheelshift[1] : ((wshift == "D3") ? wheelshift[2] : ((wshift == "D4") ? wheelshift[3] : ((wshift == "D5") ? wheelshift[4] : wheelshift[5] )))) } } diff --git a/app/Tacho.qml b/app/Tacho.qml index 9c4fbee..853b12b 100644 --- a/app/Tacho.qml +++ b/app/Tacho.qml @@ -50,7 +50,7 @@ Item { Shift { percent: imgwidth/480 anchors.right: parent.right - anchors.rightMargin: wshift > 0 ? (imgwidth-width)/2+25 : (imgwidth-width)/2-5 + anchors.rightMargin: (wshift == "N" || wshift == "P" ||wshift == "R" )? (imgwidth-width)/2+25 : (imgwidth-width)/2-5 anchors.bottom: parent.bottom anchors.bottomMargin: 100 spacing: -10 diff --git a/app/app.pro b/app/app.pro index 035807c..2127084 100644 --- a/app/app.pro +++ b/app/app.pro @@ -1,5 +1,5 @@ -TARGET = als-meter-demo -QT = quickcontrols2 dbus +TARGET = alsmeterdemo +QT = quickcontrols2 LIBS += -lopencv_core -lopencv_videoio @@ -7,7 +7,6 @@ equals(QT_ARCH, "arm") { QMAKE_CXXFLAGS += -mfp16-format=ieee } - HEADERS += \ camera.h @@ -16,7 +15,7 @@ SOURCES += \ camera.cpp CONFIG += link_pkgconfig -PKGCONFIG += libhomescreen qlibwindowmanager +PKGCONFIG += qlibwindowmanager qlibhomescreen RESOURCES += \ als-meter-demo.qrc \ diff --git a/app/camera.cpp b/app/camera.cpp index 107880c..c21fba5 100644 --- a/app/camera.cpp +++ b/app/camera.cpp @@ -47,7 +47,7 @@ void Camera::paint(QPainter *painter) { } void Camera::enumerateCameras() { - int maxID = 10; + int maxID = 20; for (int idx = 0; idx #include #include -#include -#include -#include #include #include #include #include -#include -#include -#include "camera.h" -#include -#include +#include +#include #include -class AppVisible : public QObject -{ - Q_OBJECT -public: - AppVisible(QObject *parent = nullptr) : QObject(parent){ - m_ppid = getppid(); - m_visible = true; - QDBusConnection::sessionBus().connect("org.agl.windowmanager", - "/windowmanager", - "org.agl.windowmanager", - "appLayerVisibleChanged", - this, - SLOT(appLayerVisibleChanged(int,bool))); - } - -public slots: - void appLayerVisibleChanged(int pid, bool visible){ - bool tempvis = visible; - - if(tempvis && (m_ppid != pid)) - tempvis = false; - - if(m_visible != tempvis){ - m_visible = tempvis; - emit visibleChanged(m_visible); - } - } - -signals: - void visibleChanged(const bool& visible); - -private: - int m_ppid; - bool m_visible; -}; - -class DBus : public QObject -{ - Q_OBJECT -public: - DBus(QObject *parent = nullptr) - : QObject(parent) - , interface("org.agl.homescreen", "/StatusBar", "org.agl.statusbar", QDBusConnection::sessionBus()) - {} - - Q_INVOKABLE void setStatusIcon(int index, const QString &url) { - interface.call("setStatusIcon", index, url); - } - -private: - QDBusInterface interface; -}; +#include "camera.h" int main(int argc, char *argv[]) { - QString myname = QString("Als-meter-demo"); + QString myname = QString("alsmeterdemo"); QGuiApplication app(argc, argv); app.setApplicationName(myname); @@ -123,12 +66,9 @@ int main(int argc, char *argv[]) query.addQueryItem(QStringLiteral("token"), secret); bindingAddressWS.setQuery(query); QQmlContext *context = engine.rootContext(); - AppVisible appVisible; - context->setContextProperty(QStringLiteral("appVisible"), &appVisible); context->setContextProperty(QStringLiteral("bindingAddressWS"), bindingAddressWS); std::string token = secret.toStdString(); - LibHomeScreen* hs = new LibHomeScreen(); QLibWindowmanager* qwm = new QLibWindowmanager(); // WindowManager @@ -146,23 +86,16 @@ int main(int argc, char *argv[]) }); // HomeScreen - hs->init(port, token.c_str()); + QLibHomeScreen* qhs = new QLibHomeScreen(); + qhs->init(port, token.c_str()); // Set the event handler for Event_TapShortcut which will activate the surface for windowmanager - hs->set_event_handler(LibHomeScreen::Event_TapShortcut, [qwm, myname](json_object *object){ - json_object *appnameJ = nullptr; - if(json_object_object_get_ex(object, "application_name", &appnameJ)) - { - const char *appname = json_object_get_string(appnameJ); - if(myname == appname) - { - qDebug("Surface %s got tapShortcut\n", appname); - qwm->activateSurface(myname); - } - } + qhs->set_event_handler(QLibHomeScreen::Event_TapShortcut, [qwm, myname](json_object *object){ + qDebug("Surface %s got tapShortcut\n", qPrintable(myname)); + qwm->activateSurface(myname); }); + AGLScreenInfo screenInfo(qwm->get_scale_factor()); + engine.rootContext()->setContextProperty(QStringLiteral("screenInfo"), &screenInfo); - DBus dbus; - engine.rootContext()->setContextProperty("dbus", &dbus); engine.load(QUrl(QStringLiteral("qrc:/Als-meter-demo.qml"))); QObject *root = engine.rootObjects().first(); @@ -172,5 +105,3 @@ int main(int argc, char *argv[]) return app.exec(); } - -#include "main.moc" diff --git a/package/config.xml b/package/config.xml index a8047f7..d2ea792 100644 --- a/package/config.xml +++ b/package/config.xml @@ -1,13 +1,13 @@ - - Als-meter-demo + + alsmeterdemo - - This is a steering-wheel binding's demo application + + This is a meter demo application TOYOTA APL 2.0 - + -- cgit 1.2.3-korg