Warum HTML5 die HMI-Technologie der Zukunft ist Andy Gryc, Senior Product Marketing Manager, Automotive Marc Lapierre, QNX CAR Developer [email protected], [email protected] Einführung Im Internetzeitalter haben viele, die Interesse an einer neuen Technologie haben und diese verstehen wollen, nicht das Problem, an zu wenig Informationen zu gelangen, sondern eher an zu viele. HTML5 ist da keine Ausnahme. Im Gegenteil, Informationen zu HTML5 gibt es im Überfluss: die W3CDokumente, Business-Case Betrachtungen, die Visionen der Technologie-Gurus und die unüberschaubare Vielfalt der How-To Artikel und Tutorials mit unzähligen Code-Beispielen1. Dieses Whitepaper soll die Lücke zwischen den visionären Abhandlungen und den Tutorials schließen. Es bietet einen Überblick über HTML5, der für all jene hilfreich sein wird, die ausreichend technisches Wissen mitbringen, um zu verstehen, was ein "Chromeless Browser" ist, aber noch nicht so weit in HTML5 vorgedrungen sind, dass sie nach detallierten Tipps suchen, wie z.B. ein JavaScript für die Bearbeitung von Audioausgaben optimiert werden kann. Abbildung 1: Detailansicht eines HTML5 basierten Infotainment-Systems. Zunächst müssen wir definieren, was wir unter HTML5 verstehen wollen. Genau genommen ist HTML5 die neueste, noch nicht vollständige Version des HTMLStandards zur Darstellung von Web-Inhalten. Allgemein wird unter HTML5 allerdings der Standard an sich zusammen mit zusätzlichen Standards und Technologien verstanden: CSS3 (Cascading Style Sheets), die Sprache 1 "HTML5 Rocks" bietet beispielsweise detaillierte (aber auch für Nichtentwickler verständliche) Informationen zum Einsatz von HTML5 <http://www.html5rocks.com> 1 Warum HTML5 die HMI-Technologie der Zukunft ist JavaScript und damit verbundene Standards wie AJAX (Asynchronous JavaScript And XML), JSON (JavaScript Object Notation), das Document Object Model (DOM) und weitere nicht proprietäre Standards wie XML. Wir werden uns in diesem Whitepaper mit dieser umfassenderen Definition von HTML5 beschäftigen. Zusätzlich wollen wir uns einen besseren Überblick verschaffen, indem wir die vielen neuen Features und Verbesserungen von HTML5 gegenüber den Vorgängern in drei Gruppen einteilen: • Anwendungen: HTML5 bietet nun genug Unterstützung für Anwendungen, die sowohl innerhalb als auch außerhalb des Browsers mit allen geforderten Funktionalitäten laufen können: Datenbanken, Threading, Input von der Gerätehardware u.v.a.m. • Rendering: Mit CSS3-Animationen, dem <canvas> Element, WebGL- und SVG-Grafik bietet HTML5 eine umfassende Kontrolle über die HMIDarstellung, die präzise genug für Spiele und flexibel genug für Anwendungen ist. • Verbessertes Entwicklungsmodell: Durch die Zunahme der Anwendungsentwickler (im Gegensatz zu reinen Web-Designern), die HTML5 für plattformunabhängige Anwendungen nutzen, hat sich auch die Arbeitsweise der Entwickler-Community geändert. Man folgt zunehmend klassischen Entwurfsmustern, in dem man durch die Trennung von Model (HTML/ DOM), View (CSS) und Controller (JavaScript) besser wartbare Architekturen schafft. Mittlerweile reicht HTML5 mit diesen Neuerungen weit über das traditionelle Anwendungsgebiet von HTML hinaus. Es ist nicht mehr nur ein Standard für die Darstellung von Web-Inhalten, sondern eine Technologie für HMIs aller Arten von Anwendungen – online oder offline, für traditionelle Browser oder "Chromeless Browser" (Rendering-Engines ohne Browser-Widgets wie Navigation, Verlauf, Lesezeichen, usw.). HTML5-Anwendungen HMTL-Inhalte erhalten mit HTML5 Fähigkeiten, die man bislang eher mit "echten" Anwendungen verbunden hätte. Einer der großen Vorteile ist, dass HMI-Designer nicht unterscheiden müssen, ob die Anwendung heruntergeladen wurde oder als Service in der Cloud läuft. Beides kann man mit derselben Codebasis unterstützen. Ein Navigationsprogramm in einem Fahrzeug zum Beispiel sollte idealerweise permanent online sein, um Verkehrsinformationen oder Wetterdaten empfangen zu können oder die Fahrzeugposition zu aktualisieren. In der Praxis kann aber eine permanente Datenverbindung nicht garantiert werden, Fahrzeuge bewegen sich auch mal außerhalb der Netzabdeckung oder z.B. in Tunnels. Eine HybridApplikation, die Daten lokal speichert, könnte solche Situationen problemlos lösen, sie würde einfach die lokal abgelegten Informationen synchronisieren, sobald die Verbindung wieder verfügbar ist. Lokale Datenspeicher Lokale Datenspeicherung ist eine Schlüsselanforderung für viele OfflineAnwendungen. Bei früheren HTML-Versionen war die lokale Datenspeicherung nur sehr eingeschränkt, unzuverlässig und restriktiv via Cookies (klein, sehr 2 Warum HTML5 die HMI-Technologie der Zukunft ist limitierte Kapazität), Plug-Ins (oft lästig, häufig veraltet, Probleme mit Firewalls) oder Browser-Erweiterungen (welche eine Abhängigkeit zu diesem Browser bedeutet) möglich. HTML5 bietet den Entwicklern sowohl Web-Speicherung, als auch IndexedDB-Datenbanken. Web-Speicherung Die Web-Speicherung ersetzt die alte lokale Speicherung mit Cookies und ist: • schneller: Nicht jede Server-Anfrage führt zu einer neuen Datenübertragung • sicherer: Die Daten sind nur auf der speichernden Webseite verfügbar • mächtiger: Die Datenmenge ist nicht so begrenzt wie bei Cookies Bei der Web-Speicherung gibt es zwei Möglichkeiten: Lokale Speicherung (die Daten sind persistent und bleiben lokal auf dem Gerät, solange sie nicht explizit gelöscht werden) oder Session-Speicherung (die Daten sind nicht persistent und werden beim Schließen des Browserfensters gelöscht). Beide Versionen der Web-Speicherung arbeiten mit Key-Value-Paaren. Leider unterstützt die Web-Speicherung folgende Features nicht: • Indizierung: Das Durchsuchen sehr großer Datenbestände kann die Performance stark beeinträchtigen. • Transaktionssicherheit bei Datenbanken: Anwendungen können sich gegenseitig die Daten überschreiben, somit müssen sich diese selbst um die Datenintegrität kümmern. IndexedDB IndexedDB bietet sowohl schnelles Suchen, als auch Transaktionssicherheit. Sie ist weniger komplex aufgebaut als die Web SQL Datenbank, die von der W3C inzwischen eingestellt wurde2, vermutlich da weder Microsoft noch Mozilla sie unterstützt haben. Wie schon der Name suggeriert, unterstützt IndexedDB die Indizierung von Feldern, auf denen häufig gesucht werden muss, was die Performance erhöht. Zudem kann man die gesamte Datenbank, Tabellen und einzelne Spalten sperren und somit die Datenintegrität bei Mehrfachzugriff gewährleisten. IndexedDB benötigt etwas mehr Know-How als Web-Speicherung, bietet den Anwendungen aber auch mehr Möglichkeiten beim Umgang mit den Daten. Wir sollten allerdings berücksichtigen, dass IndexedDB immer noch den Status eines Vorschlages (Proposal) hat und bislang weder Teil der HTML5Spezifikation ist, noch von allen Browsern unterstützt wird. Microsoft hat durchklingen lassen, dass der IE10 IndexedDB wahrscheinlich unterstützen wird, die Unterstützung bei mobilen Browsern ist Stand heute noch etwas unklar. Threading Ein Webseitenentwickler meinte, dass Threading die wichtigste Neuerung überhaupt in HTML5 sei. Threading wird durch eine Erweiterung in JavaScript zur Verfügung gestellt, welche eine Pseudo-Threading Implementierung namens 2 Die W3C hat die Weiterentwicklung und Unterstützung für die Web SQL Datenbank im November 2010 eingestellt. <http://dev.w3.org/html5/webdatabase/ > 3 Warum HTML5 die HMI-Technologie der Zukunft ist "Web-Worker" anbietet. Ein Web-Worker ist “eine JavaScript-Datei, die im Hintergrund geladen und ausgeführt wird”3. Web-Workers haben nicht Zugriff auf alle JavaScript-Features, sie können weder das DOM noch globale Variablen oder Funktionen verwenden4. Trotz dieser Einschränkungen ermöglicht Threading einen viel einfacheren Entwurf komplexer HTML5-Anwendungen. Beispielsweise könnte man mit HTML5 eine Anwendung zur Steuerung der Zapfsäule einer Tankstelle schreiben. Die Anwendung müsste u.a. in der Lage sein, die Kreditkarte des Kunden zu lesen, die Verbindung für die Transaktion aufzubauen und die geflossene Benzinmenge aus der Steuerung der Pumpe zu ermitteln und diese darzustellen. Ohne Threading wäre so eine Anwendung komplex und schwerfällig – man müsste den größten Teil der Funktionalität in die zugrunde liegenden C/C++ Services verlagern. Mit der JavaScriptThreadingUnterstützung hingegen kann man die Oberfäche zum größten Teil innerhalb des HMI implementieren und erreicht eine sauber entkoppelte Entwicklung. Multimedia Abbildung 2: JavaScript "Web Worker" Threads beim Start HTML5 bietet nun einer Transaktion an einer Zapfsäule. nicht proprietäre Spezifikationen an, die alle Content-Erzeuger-Tools und Browser unterstützen sollten, um die Anhängigkeit zu den Plug-Ins zu beenden. Mit den neuen Tags <audio> und <video> können Entwickler Multimediainhalte direkt in eine Seite einbauen, wie es bislang z.B. bei Bildern schon möglich war. Und die Anwender werden nicht ständig damit konfrontiert, ihren Flash Player, QuickTime oder Silverlight aktualisieren zu müssen. Innerhalb dieser Tags soll alles einfach nur funktionieren, vorausgesetzt das System bietet Support für den entsprechenden Codec. 3 Craig Buckler, “JavaScript Threading With HTML5 Web Workers”, SitePoint, 10. Dez. 2010. <http://www.sitepoint.com/javascript-threading-html5-web-workers/> 4 Robert Gravelle, “Introducing HTML 5 Web Workers: Bringing Multi-threading to JavaScript”, HTMLGoodies, <http://www.htmlgoodies.com/html5/tutorials/introducinghtml-5-web-workers-bringing-multi-threading-to-javascript.html> 4 Warum HTML5 die HMI-Technologie der Zukunft ist Wenn auch erwartet wird, dass der größte Teil der Audio-Verarbeitung durch lower-level Code, z.B. C oder C++ geschieht, so bietet HTML5 auch die Möglichkeit, die Audioverarbeitung direkt in JavaScript durchzuführen5. Gibt man den Entwicklern direkten Zugriff auf die Audioverarbeitung, so vereinfacht sich die Entwicklung enorm und die Effizienz der Entwickler steigt. Die Geschwindigkeit von JavaScript wird zwar nie an kompilierten Code heranreichen, aber abhängig von der verwendeten Plattform, dem Audiofile und der Komplexität der Verarbeitung, wird es für viele Fälle eine durchaus brauchbare Alternative sein. Leider sind die Video-Spezifikationen in HTML5 noch nicht so weit wie die für Audio. Das W3C hat zwar die Elemente und Attribute festgelegt (es gibt eine unterhaltsame Demo mit einem "Big Buck Bunny" Film)6, aber nachdem viele Browser in unterschiedlichste Richtungen tendieren, gibt es noch keinen Konsens bezüglich des Standard-Codecs für Videos. Die aussichtsreichsten Kandidaten scheinen H.264, Ogg und WebM zu sein, aber diese Debatte ist längst noch nicht vorüber und es scheint eine Menge unterschiedlicher Meinungen dazu zu geben. Sprachinterface Die "HTML5 Speech Incubator Group" hat eine standardisierte Schnittstelle vorgeschlagen, die es JavaScript erlaubt, mit einer zugrunde liegenden SprachEngine zu kommunizieren. Die Schnittstelle unterstützt sowohl Spracherkennung als auch synthetisierte Sprachausgabe und ist so konzipiert, dass "der Autor einer Webseite.... eine Web-Anwendung um Sprach-Funktionalität erweitern kann".7 Angenommen das zugrunde liegende System unterstützt eine SprachEngine, dann müsste ein Designer, der eine HMI mit Spracherkennung und Sprachausgabe entwickelt, nur die HTML5-Schnittstelle kennen. Geräteinteraktion Im Zuge der Migration von HTML-Implementierungen auf mobile Plattformen – von Smartphones bis zu Fahrzeugsystemen, bietet HTML5 APIs für den Zugriff auf Geräteinformationen, wie z.B. Orientierung (hoch / quer) oder Position. Damit kann man beispielsweise das HMI der Bildschirmorientierung anpassen, die Position eines Taxis über das Navigationssystem verfolgen oder die Zeitzone eines Handys automatisch anpassen - vorausgesetzt natürlich, das Gerät hat die benötigten GPS- und Beschleunigungs-Sensoren. Rendering Einer der großen Vorteile von HTML-Inhalten und Browsern ist ihr verzeihendes Naturell. Browser waren ursprünglich so konzipiert, dass sie so gut wie möglich darstellen, was ihnen vorgesetzt wird - und das ignorieren, was sie nicht verstehen. Wenn ein Font nicht verfügbar ist, nimmt man einfach einen anderen. Wenn ein Element oder Attribut unbekannt ist, wird es weggelassen. 5 W3C, “Web Audio API: W3C Editor’s Draft”, 2012. <https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html> 6 W3C, “HTML5 Video Events and API”. <http://www.w3.org/2010/05/video/mediaevents.html> 7 W3C, “HTML Speech Incubator Group Final Report”, 6.Dez. 2011. <http://www.w3.org/2005/Incubator/htmlspeech/XGR-htmlspeech-20111206/> 5 Warum HTML5 die HMI-Technologie der Zukunft ist Der Nachteil dieser Toleranz ist, dass kaum zwei Browser Inhalte exakt gleich darstellen. Das ist bei traditionellen Inhalten wie Text, Bildern, Formularen und eingebettetem Video oder Audio nicht weiter tragisch. Aber es ist eine gewaltige Hürde für HTML bei Darstellungen, die exakte Präzision erfordern. Die Position eines Balles in einem Videospiel muss exakt kontrollierbar sein. Man kann es nicht dem Browser überlassen, das Objekt mehr oder weniger an der Stelle darzustellen, die der Entwickler vorgibt. Auch Karten müssen exakt stimmen, ebenso wie z.B. die 3D-Darstellung einer Mammographie. Mit HTML5 kommt eine Reihe neuer Features, die es HMI-Entwicklern erlauben, Bilder exakt zu zeichnen und Displays pixelgenau ansprechen zu können. Neben der Präzision hat man häufig auch den Vorteil, Hardwarebeschleuniger verwenden zu können. Canvas Das HTML5-Element <canvas> definiert einen oder mehrere Bildschirmbereiche, in denen man mit JavaScript präzise Formen und Bilder zeichnen kann. Bei diesem Element benötigt man keine Browsererkennung, um den passenden Code für eine spezifische Browserversion bereitstellen zu können. Somit erlebt man keine unliebsamen Überraschungen. Solange der Browser HTML5-konform ist, werden Bitmaps innerhalb des Bereiches, der mit den Canvas-Attributen height und width festgelegt wird, exakt wie spezifiziert gezeichnet. In unserem Spiel beispielsweise wird der Ball genau dahin fallen, wo er auftreffen soll. Er wird also nicht auf dem linken Fuß auftreffen, wenn er eigentlich rechts landen sollte, nur weil Browser sich etwas unterschiedlich verhalten.8 Anzumerken ist aber, dass das <canvas> Element auch Ansprüche an den Entwurf stellt: Wenn die Ausgabe eines Programms auf ein anderes Gerät wandert (beispielsweise vom einem Tablet auf ein In-Vehicle-InfotainmentSystem), dann wird der Browser eine Darstellung in einem Canvas nicht automatisch einer geänderten Auflösung anpassen - das muss der Entwickler bedenken und ggf. entsprechend implementieren. WebGL und SVG SVG (Scalable Vector Graphics) bietet eine einfach anzuwendende Unterstützung für 2D-Grafik. Designer können JavaScript mit WebGL verwenden, um mit OpenGL ES 2.0 sogar 3D-Renderings erzeugen zu können. Mit HTML5 und JavaScript kann somit praktisch jede gewünschte Animation oder Grafik generiert werden. Die Sandbox Die gleichzeitige Darstellung mehrerer Fenster unterschiedlicher Quellen auf einem Bildschirm ist eine Vorgehensweise, die bislang besser vermieden werden sollte. Wenn man dies dem Browser gestattet, läuft man Gefahr, Sicherheitslücken zu öffnen. Beispielweise könnte eine bösartige Webseite ein unsichtbares Fenster über eine legale Seite legen und so medizinische Informationen oder Bankdaten ausspähen. 8 Siehe auch Mark Pilgrim, “Dive into HTML5” für ein schönes Beispiel zur CanvasProgrammierung. <http://diveintohtml5.info/canvas.html> 6 Warum HTML5 die HMI-Technologie der Zukunft ist Mit HTML5 können HMI-Entwickler Inhalte von verschiedenen Quellen in einer einzigen HTML-Seite vereinen und, ganz wichtig, Zugriffsrechte für die Inhalte festlegen. Das <iframe> Element verfügt nun über ein sandbox Attribut, das Zugriffsrechte kontrolliert. Es gibt eine Reihe von Einstellungen bzgl. der Zugriffsrechte, angefangen von dem Recht dass nur die reine Darstellung zulässt bis hin zu umfangreichen Rechten, welche die Ausführung von Scripten oder Formularen erlauben. Als Standardeinstellung wird die restriktivste und sicherste Einstellungen verwendet: "Display only". Ein HTML5-HMI kann somit z.B. eine Karte, Navigationsanweisungen und die Points of Interest, und wiederum deren Inhalte, auf einer Seite vereinen. Nachdem nicht verifizierte externe Inhalte auf die Sandbox beschränkt sind, muss man sich keine Gedanken um schädliche Inhalte machen. Besseres Programmiermodell Trotz der vielen neuen und sehr nützlichen Features ist die vermutlich wichtigste Neuerung von HTML5 nicht Teil der Spezifikation, sondern die Art und Weise wie die Entwicklergemeinde auf das Arbeiten mit HTML5 reagiert. Nachdem HTML5 auch für Anwendungen außerhalb der traditionellen Web-Browser immer attraktiver wird, verbreitet sich auch die Tendenz, die Anwendungslogik und Darstellung vom Datenmodell zu trennen, somit erhält das weit verbreitete Model-View-Controller Design-Pattern Einzug in die HTML-Welt. Semantische Tags Wie frühere Versionen von HTML orientiert sich HTML5 an SGML und hat einige syntaktische Features übernommen. Beispielsweise das <!doctype> Element. Allerdings bezieht sich HTML5 nicht mehr auf eine SGML Document Type Definition (DTD)9 und erweitert die Syntax um eigene Elemente (<section>, <header>, <article>, <aside>, <time>, etc.) welche, wie bei SGML, die Art des Inhaltes definieren und nicht die Darstellung. Diese wird mit CSS festgelegt. Jeder, der schon einmal versucht hat, ein Dokument mit <div> Tags zu versehen, wird die Änderung zu schätzen wissen. HTML5 hat nicht die Absicht, SGML oder XML für Verwaltung von Dokumentinhalten zu ersetzen. Vielmehr sollen die wenigen neuen Elemente zur Typfestlegung helfen, die Auszeichnung von Seiten und die Verarbeitung der Inhalte zu erleichtern. Das Document Object Model (DOM) Das Document Object Model ist ein HTML5-Mechanismus zur dynamischen Änderung von HTML-Dokumenten. Die beste Definition für das Document Object Model (DOM) kommt von der W3C selbst: Das Document Object Model ist eine plattform- und sprachneutrale Schnittstelle, welche es Programmen und Scripts ermöglicht, dynamisch auf Inhalte und Struktur von Dokumenten zuzugreifen und diese zu verändern. Das Dokument kann weiterverarbeitet werden und die Ergebnisse dieser 9 W3C, “HTML 5 Reference: A Web Developer’s Guide to HTML 5, W3C Editor’s Draft”, 23. März 2009. <http://dev.w3.org/html5/html-author/> 7 Warum HTML5 die HMI-Technologie der Zukunft ist Verarbeitung können wiederum in die dargestellte Seite eingearbeitet werden.10 Für die Verarbeitung des DOM wird JavaScript verwendet. Scripte ändern das Object Model abhängig von den Aktivitäten des Anwenders. Diese Änderungen werden wiederum von der Web-Rendering-Engine aufgegriffen, diese stellt dann die Seite entsprechend des veränderten DOM neu dar. Die HTML5Verbesserungen erlauben eine einfachere und konsistentere Bearbeitung des DOM. Die Programmierung von Anwendungen wird vereinfacht und für alle Plattformen einheitlich. Cascading Style Sheets (CSS3) Cascading Style Sheets sind schon lange Bestandteil des HTML-Designs. Auch bei HTML5 stehen sie an erster Stelle, wenn es um die Spezifikation der Darstellung von HTML-Seiten geht. HTML legt fest, was dargestellt werden soll, die Stylesheets legen fest, wie es dargestellt werden muss. Sofern es auf jedes Device angepasste Stylesheets gibt, kann eine Anwendung, die nur einmal geschrieben wurde, einfach zwischen den Geräten ausgetauscht werden. Die Stylesheets sorgen dafür, dass die Anwendung auf jedem Gerät passend dargestellt wird. Man kann sie "branden" oder Inhalte herausfiltern, wie z.B. Animationen oder andere Ablenkungen, wenn die Anwendung auf einem InVehicle-System läuft, bei dem jede Ablenkung des Fahrers vermieden werden muss. Abbildung 3: Cascading Stylesheets ermöglichen die Migration von Anwendungen zwischen Geräten Nichts davon ist komplett neu. Aber CSS3 bringt, wenn man so möchte, eine neue Dimension herein: Zeit. Es gibt neue, dynamische Fähigkeiten, z.B. 2Dund 3D-Transformationen oder Übergänge, bei denen ein Objekt kontinuierlich sein Aussehen verändert. Im Sinne der HTML5-Philosophie, die Details der Darstellung vom eigentlichen Inhalt zu trennen, bieten die Stylesheets allgemein 10 W3C Architecture Domain, “Document Object Model (DOM)”, <http://www.w3.org/DOM/#what>. 8 Warum HTML5 die HMI-Technologie der Zukunft ist verwendbare Manipulationen, anstatt spezielle Codierungen für einzelne Elemente zu fordern. Leider unterstützen aktuell nicht alle Browser alle CSS-Animationen. Die, die Unterstützung anbieten, benötigen teils unterschiedlichen Code für die Styles, beispielsweise ein Präfix vor dem transition Style: -moz-transition, -webkit-transition, usw. Fazit Seit dem Start 2011 hat der Erfolg von HTML5 alle Erwartungen übertroffen. HTML5 wird nicht irgendein weiterer Standard, sondern vielmehr der Standard, nicht nur für Webseiten, sondern für alle Arten moderner Benutzerschnittstellen. HTML ist einfach anwendbar - in einer vertrauten Umgebung. Es bietet unzählige neue Features, die zuvor auf grundverschiedene, inkompatible und proprietäre Technologien verteilt waren. HTML5 scheint sein Versprechen zu halten. Ü ber Q N X Software System s QNX Software Systems ist Hersteller innovativer Embedded-Technologien, dazu gehören Middleware, Entwicklungswerkzeuge und Betriebssysteme. Die komponentenbasierte Architektur des QNX® Neutrino® RTOS, die QNX Momentics® Tool Suite und die QNX Aviage® Middleware-Reihe bilden gemeinsam das zuverlässigste und skalierbarste Fundament für leistungsfähige Embedded-Systeme. Weltweit bekannte Firmen wie z.B. Cisco, Daimler, General Electric, Lockheed Martin oder Siemens nutzen QNX-Technologie für Telematik- und Infotainmentsysteme, Industrieroboter, Netzwerk-Router, medizinische Geräte, Sicherheits- und Verteidigungs-systeme und viele andere betriebs- und sicherheitskritische Applikationen. Die QNX-Firmenzentrale ist in Ottawa, Kanada, die deutsche Niederlassung befindet sich in Hannover. www.qnx.com © 2012 QNX Software Systems Limited, a subsidiary of Research In Motion Ltd. All rights reserved. QNX, Momentics, Neutrino, Aviage, Photon and Photon microGUI are trademarks of QNX Software Systems Limited, which are registered trademarks and/or used in certain jurisdictions, and are used under license by QNX Software Systems Limited. All other trademarks belong to their respective owners. 302227 MC411.112