Qt Automotive Suite - under the hood after one year of hacking. From the Qt World Summit 2017, Berlin, Germany.
Qt Automotive Suite was released a year ago and development is making progress. This talk be focused on technical details of new features in the Qt Application Manager, the new plugin for Qt Creator, additions to Qt IVI, changes in Neptune UI, and even things we are not going to do and why. We will discuss how those features map to the needs we observe in ongoing projects and in the future ones.
2. Introduction
Johan Thelin, System Architect at Luxoft
Background: Qt Champion, Foundations of Qt
Development, QmlBook, Pelagicore, Nokia Qt
Development Frameworks
qmlbook.org
3. 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
4. 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
5. 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
6. 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
8. 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
9. 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
10. Qt Application Manager
• Notification Manager
• Prioritization
• Stickyness
• Actions
• Progress
• Time outs
• All still via
org.freedesktop.Notifications
11. Qt Application Manager
Code base maintenance
More usage of C++11
nullptr
Q_DECL_NOEXCEPT_EXPR(false)
13. 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
16. WindowOverview Page
delegate: Item {
MouseArea {
anchors.fill: parent
onClicked: {
ApplicationManager.startApplication(ApplicationManagerInterface.appIdFromWindow(model.item))
root.close()
// Hide all other windows, otherwise the will be in the stack and switching doesn't work
for (var i = 0; i < gridView.model.count; ++i) {
var window = gridView.model.get(i).item
if (window !== model.item)
WindowManager.setWindowProperty(window, "visibility", false)
}
}
}
Tool {
onClicked: ApplicationManager.stopApplication(ApplicationManagerInterface.appIdFromWindow(model.item))
}
}
17. 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
18. 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
19. 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
21. 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
22. 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
24. 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