diff options
-rw-r--r-- | app/Als-meter-demo.qml | 298 | ||||
-rw-r--r-- | app/MidOther.qml | 2 | ||||
-rw-r--r-- | app/Shift.qml | 9 | ||||
-rw-r--r-- | app/Tacho.qml | 2 | ||||
-rw-r--r-- | app/app.pro | 7 | ||||
-rw-r--r-- | app/camera.cpp | 2 | ||||
-rw-r--r-- | app/main.cpp | 91 | ||||
-rw-r--r-- | 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 <maxID; idx++){ std::stringstream no; no << "/dev/video" << idx; diff --git a/app/main.cpp b/app/main.cpp index 88a4978..91f39bb 100644 --- a/app/main.cpp +++ b/app/main.cpp @@ -18,77 +18,20 @@ #include <QtCore/QDebug> #include <QtCore/QCommandLineParser> #include <QtCore/QUrlQuery> -#include <QtCore/QFile> -#include <QtDBus/QDBusInterface> -#include <QtDBus/QDBusReply> #include <QtGui/QGuiApplication> #include <QtQml/QQmlApplicationEngine> #include <QtQml/QQmlContext> #include <QtQuickControls2/QQuickStyle> -#include <QtDBus/QDBusConnection> -#include <unistd.h> -#include "camera.h" -#include <QQuickWindow> -#include <libhomescreen.hpp> +#include <QtQuick/QQuickWindow> +#include <qlibhomescreen.h> #include <qlibwindowmanager.h> -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 @@ <?xml version="1.0" encoding="UTF-8"?> -<widget xmlns="http://www.w3.org/ns/widgets" id="als-meter-demo" version="0.1"> - <name>Als-meter-demo</name> +<widget xmlns="http://www.w3.org/ns/widgets" id="alsmeterdemo" version="0.1"> + <name>alsmeterdemo</name> <icon src="icon.svg"/> - <content src="bin/als-meter-demo" type="application/vnd.agl.native"/> - <description>This is a steering-wheel binding's demo application</description> + <content src="bin/alsmeterdemo" type="application/vnd.agl.native"/> + <description>This is a meter demo application</description> <author>TOYOTA</author> <license>APL 2.0</license> <feature name="urn:AGL:widget:required-api"> - <param name="steering-wheel" value="ws" /> + <param name="low-can" value="ws" /> <param name="windowmanager" value="ws"/> <param name="homescreen" value="ws"/> </feature> |