Qt Automotive Suite - under the hood // Qt World Summit 2017

Post on 22-Jan-2018

162 views 2 download

transcript

Qt Automotive SuiteUnder the hood after one year of hackingJohan Thelin

Introduction

Johan Thelin, System Architect at Luxoft

Background: Qt Champion, Foundations of Qt Development, QmlBook, Pelagicore, Nokia Qt Development Frameworks

qmlbook.org

What’s in the Box?

Core components (non UI)

Qt Application Manager

Qt IVI

Qt GENIVI Extras

Tools and best practices

QmlLive

GammaRay

Integrations of QtAM in QtCreator

What’s in the Box?

Neptune – An Automotive Reference UI

Center stack

Instrument Cluster

AppStore

Solutions to selected key issues in IVI

Notifications prioritization

Application life-cycle

Security for deployment and execution

What’s left to do?

Qt Automotive Suite provides a reference UI

OEMs still have to provide

Deep vehicle integration

OEM specific features and extensions

End-user available application distribution

Developers first!

Our mission is to bring the Qt way to automotive

Easy to get started

Ease of development

Great documentation

All the tools you need at your fingertips

A Look at the Past Year

Qt Application Manager at a Glance

Wayland compositor

Graphics

Input

Owns the Apps

Installation, update, removal

Start, pause, stop

Run-time for the System UI

Qt Application Manager

Timing and fidelity

StartTimer Start-up timing Support custom checkpoints Can be used for the System UI and Apps

ProcessMonitor Frame rate Memory usage CPU load

SystemMonitor Frame rate Memory rate CPU load # of CPUs Amount of memory

Qt Application Manager

• Notification Manager

• Prioritization

• Stickyness

• Actions

• Progress

• Time outs

• All still via org.freedesktop.Notifications

Qt Application Manager

Code base maintenance

More usage of C++11 nullptr

Q_DECL_NOEXCEPT_EXPR(false)

Qt Application Manager

Neptune UI at a Glance

Reference UI and demonstrator baseline

System UI runs on Qt Application Manager

A variety of Apps

Settings

Navigation

Media

Browser

and so on

Neptune UI

• Most visible change is the WindowOverview page

WindowOverview Page

GridView {model: ListModel {}

delegate: Item {ShaderEffectSource {

anchors.fill: parentanchors.margins: gridView.paddingsourceItem: model.item

}}

Connections {target: ApplicationManagerInterface

onApplicationSurfaceReady: {...

gridView.model.append({ "item" : item })}

onApplicationSurfaceLost: {for (var i = 0; i < gridView.model.count; ++i) {

if (gridView.model.get(i).item === item)gridView.model.remove(i);

}}

}

WindowOverview Page

delegate: Item {MouseArea {

anchors.fill: parentonClicked: {

ApplicationManager.startApplication(ApplicationManagerInterface.appIdFromWindow(model.item))root.close()// Hide all other windows, otherwise the will be in the stack and switching doesn't workfor (var i = 0; i < gridView.model.count; ++i) {

var window = gridView.model.get(i).itemif (window !== model.item)

WindowManager.setWindowProperty(window, "visibility", false)}

}}

Tool {onClicked: ApplicationManager.stopApplication(ApplicationManagerInterface.appIdFromWindow(model.item))

}}

Taking it to the Next Level

• We are doing a face-lift of Neptune...

• ...both graphical and code wise

• New look and feel – still under development

• Qt Quick Controls 2

• Updated layout strategy

Qt IVI at a Glance

Qt abstraction layer on top of the platform services

IPC agnostic, platform agnostic

Dynamically loaded backends

Dynamic bindings all the way

Can interchange backends

Allows for service discovery

Qt IVI – Code Generator with QFace

• Reference implementations of Media and VehicleFunctions

• Integration of QFace

• Code generator based on Qt aware IDL

• Jinja based code generators – very simply to extend

• Fully integrated in your qmake / cmake workflow

• Handwritten APIs for static APIs, e.g. media, tuner, bluetooth

• Generated APIs for volatile APIs, e.g. vehicle signals

File(s)Generator(s)

Qt IVI - QFace

IDL Model Generator(s) Source file(s)

QFace

Qt IVI - QFace

• IDL supports

• Interfaces

• Data types, structs, enums, etc

• Annotations – meta-data for the generators

• Jinja based generators

• Used for Python web frameworks

• Lets you traverse the model

• Very easy to write custom generators

System

Module

Import Interface

Property

Operation

Event

Enum Flag Struct

Property

QML Live

• Live reloader with server/client architecture

• Very quick turn-around time for developers and designers

• Many contributions from Jolla

• Extraction of core to lib

• Many bugs squashed

• Lost dependencies on widgets

More...

• Qt

• GammaRay

• Qt GENIVI Extras module

Where are we heading?

Updated Neptune UI

Redesigned

Qt Quick Controls 2

Qt3D for vehicle visualizations

Integration of Squish

A new Instrument Cluster

Qt IVI

More APIs

Refactoring VehicleSettings to use QFace

Enhanched Emulator support

More how-to documentation

Where to get it?

qt.io pelux.iogenivi.org

Thank you for your attention!

jthelin@luxoft.com