Date post: | 22-Jan-2018 |
Category: |
Software |
Upload: | johan-thelin |
View: | 162 times |
Download: | 2 times |
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