Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

446 views

Published on

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.

Published in: Software
  • Be the first to comment

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

  1. 1. Qt Automotive Suite Under the hood after one year of hacking Johan Thelin
  2. 2. Introduction  Johan Thelin, System Architect at Luxoft  Background: Qt Champion, Foundations of Qt Development, QmlBook, Pelagicore, Nokia Qt Development Frameworks qmlbook.org
  3. 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. 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. 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. 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
  7. 7. A Look at the Past Year
  8. 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. 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. 10. Qt Application Manager • Notification Manager • Prioritization • Stickyness • Actions • Progress • Time outs • All still via org.freedesktop.Notifications
  11. 11. Qt Application Manager  Code base maintenance  More usage of C++11  nullptr  Q_DECL_NOEXCEPT_EXPR(false)
  12. 12. Qt Application Manager
  13. 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
  14. 14. Neptune UI • Most visible change is the WindowOverview page
  15. 15. WindowOverview Page GridView { model: ListModel {} delegate: Item { ShaderEffectSource { anchors.fill: parent anchors.margins: gridView.padding sourceItem: 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); } } }
  16. 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. 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. 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. 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
  20. 20. File(s)Generator(s) Qt IVI - QFace IDL Model Generator(s) Source file(s) QFace
  21. 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. 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
  23. 23. More... • Qt • GammaRay • Qt GENIVI Extras module
  24. 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
  25. 25. Where to get it? qt.io pelux.iogenivi.org
  26. 26. Thank you for your attention! jthelin@luxoft.com

×