Service-Controller für Computersvsteme, insbesondere für ein
Kraftfahrzeug
Beschreibung
Die Erfindung betrifft ein Verfahren zum Betrieb eines Service-Controllers für fahrzeugspezifische Computersysteme gemäß den Merkmalen des Anspruches 1 und Computersystem gemäß den Merkmalen des Anspruches 11.
Multitaskingsysteme und Multitaskingechtzeitsysteme sind weitläufig bekannt. So existiert beispielsweise seit Jahren das Programmiersystem Unix, mit welchem ein Multitaskingsystem realisiert werden kann. Im Weiteren existieren diverse Echtzeitbetriebssysteme, wie beispielsweise QNX. Dies ermöglicht es ein Programm in „Echtzeit" Befehle auszuführen.
Im Weiteren ist bekannt die Steuerung eines Gerätes mittels Software vorzunehmen. Hierzu wird über eine Eingabeeinrichtung am Gerät eine Funktion ausgewählt und diese wird in einen Befehl umgesetzt, welcher vom Gerät ausgeführt wird. Befinden sich jedoch in einem Kraftfahrzeug diverse zu bedienende Komponenten, so werden in der Regel einzelne Befehle nicht vom Benutzer an den Komponenten selbst initiiert, sondern an einer für mehrere Komponenten gemeinsamen Multifunktionsbedieneinrichtung. Diese Multifunktionsbedieneinrichtung vermittelt dann den einzelnen angeschlossenen Komponenten die auszuführenden Befehle und die betroffenen Komponenten führen dann diesen Befehl bzw. diese Befehle aus. Eine solche Multifunktionsbedieneinrichtung ist beispielsweise aus der WO 00/21795 bekannt.
Eine Lösungsmöglichkeit stellt das an und für sich bekannte Schichtenmodell dar. Tritt ein Befehl in einer höheren Schicht auf, beispielsweise ist in einem
Multimediasystem mit angeschlossenem Radiosystem und
Verkehrsfunkdecoder und der Verkehrsfunkdecoder empfängt eine eingehende Verkehrsnachricht, so wird dies sofortig dem System mitgeteilt. Das System entzieht den laufenden Prozessen die Rechenzeit und schaltet die entsprechende Verkehrsnachricht durch.
Aus DE-A1-100 43 086 ist eine Cockpitsystemarchitektur, insbesondere für ein Kraftfahrzeug, mit mindestens einer fahrzeugspezifischen Komponente und mindestens einer Multimediakomponente bekannt. Die einzelnen Komponenten verfügen über diverse Funktionen, beispielsweise über eine Bedienfunktion, eine Anfahrtszeigefunktion, eine Signalverarbeitungsfunktion und eine Steuerfunktion, welche auf Software- und Hardwarebasis realisiert sind. Die einzelnen Funktionen der jeweiligen Komponenten sind partioniert, d. h. getrennt und funktionsweise komponentenunabhängig modular zusammengefasst.
Aus DE-C1-199 29 330 ist ein Fahrzeugkommunikationssystem mit einem Datenbus und daran angeschlossenen Komponenten offenbart. Unter den Komponenten befindet sich wenigstens eine Anzeige-/Bedieneinrichtung und eine diese steuernde Recheneinrichtung. Auf der Anzeige-/Bedieneinrichtung und/oder der diese steuernden Recheneinrichtung ist eine auf dem HTML/XML- Seitenformat basierende Oberfläche implementiert.
Die genannten Systeme weisen keine Grenzlinien zwischen dem Echtzeitbetriebssystem, dem Service und den Bedienschnittstellen, im Weiteren als Human Machine Interface oder kurz HMI bezeichnet, auf.
Aus FIG 1 ist eine Realisierungsform für heutige Infotainmentsysteme für Kraftfahrzeuge aufgezeigt. Dieses System weist ein Human Machine Interface auf und es sind weitere Einrichtungen wie Compact Disc Player, Navigation, Radio integriert bzw. angeschlossen. Diese einzelnen Einrichtungen sind in einem einzigen Gerät zusammengefasst und weisen eine gemeinsame Anzeige- und Bedieneinrichtung auf.
Beispielhaft ist in FIG 2 ein weiteres derzeitig bekanntes Infotainmentsystem schematisch dargestellt, dieses System ist vergleichbar mit dem System, welches aus der bereits genannten Patentschrift DE-C1-199 29 330 bekannt ist. Dieses System weist eine Steuereinrichtung mit einem Human Machine Interface auf, welches über ein Busprotokoll bzw. ein API-Protokoll an externe Geräte wie CD-Navigation, Telefon, Radio usw. angeschlossen ist.
Aufgabe der Erfindung ist es, die starre Systemarchitektur der bekannten Multifunktionsbedieneinrichtungen aufzulösen und im Weiteren es zu ermöglichen an bestehende Systeme weitere Geräte/Anwendungen anzuschließen und/oder Komponenten zu tauschen.
Diese Aufgabe wird mit den Merkmalen der Ansprüche 1 , 11 und 21 gelöst. Weitere vorteilhafte Ausgestaltungen der Erfindung sind durch die abhängigen Ansprüche und der weiteren Beschreibung benannt.
Zur Lösung wird ein sogenannter Service-Controller integriert, welcher die Verteilung von Services zwischen dem Computersystem und einem Echtzeitbetriebssystem managt. Hierzu werden spezielle Interfaces am Service- Controller zum Human Machine Interface und zum Echtzeitbetriebssysteme implementiert, welche einen speziellen Zugriff auf die einzelnen Services des Systems ermöglichen. Auf diese Weise ist es auch möglich ein Konfliktmanagement zwischen den einzelnen Services zu erreichen.
Datenzugangsbarrieren können mehrstufig und kapselbar ausgestaltet werden, da diese für jeden Service einzeln darstellbar sind. Mehrstufig heißt, dass zu jedem vorhandenen Human Machine Interface und zu jeder Applikation, beispielsweise einem Internetzugang, ausschließlich geschützt über notwendige Zugangscodes, ein Zugriff ermöglicht wird. Dies ergibt durch eine Codierbarkeit des Systems sowie ein integriertes Management eine differenzierte Datenübertragungen auf und zu speziellen Applikationen und Services. Es werden eindeutige Zugriffsrechte zuweisbar, d. h. dass
beispielweise für Internetaktivitäten, die im System laufen, die notwendigen und die ausreichenden Reserven zur Verfügung gestellt werden. Dies gewährt insbesondere eine Sicherheit gegen Hacker im Sinne einer Fire Wall. Es ist somit nicht möglich, dass ein Service auf externe, von ihm nicht benötigte Resourcen zu greifen kann.
Der Ansatz des Systems besteht darin, dass unter der vorhandenen Human Machine Interface Schnittstelle die Steuerung der
Bedienoberflächenprogrammierung und die gesamte Bediensoftware angeordnet wird. Die Bedienoberflächenprogrammierung beinhaltet z. B. Steuerungsaufgaben für die Human Machine Interface Schnittstelle, insbesondere welches Anzeigenbild und welche Tastenbelegung nach Auswahl einer Funktion angezeigt wird und welche Eingaben ein Nutzer an der Bedienoberfläche vornehmen kann. Außerdem wird durch die Human Machine Interface Schnittstelle eine Bedienlogik eingeführt, in der sowohl die Gerätesteuerung als auch die Gesamtsystemsteuerung miteinander verwoben ist. Bei der großen Komplexität des Systems können die tatsächlichen Abläufe nicht mehr, oder nur häufig sehr schwer, nachvollzogen werden. Diese hängen jedoch von den vorgegebenen Systemmöglichkeiten ab. Bei der Ausgestaltung der Bedienoberfläche ist vordefiniert, welche Funktionen ein Gerät ausführen kann und welche Funktionen für einen Nutzer bereitgestellt werden. Diese werden den aktuell am Gerät möglichen Eingaben bzw. aktuell vornehmbaren Funktionen des Gerätes zugewiesen. Diese Aufgaben übernimmt der Service Controller, in dem er vom Gerät die aktuell vorhandenen Funktionen, welche auch ausführbar sind, abruft und auf dem Human Machine Interface darstellt. Auf dem Human Machine Interface und der Anzeigevorrichtung werden nur die Funktionen angezeigt, welche auch tatsächlich vom Gerät aktuell ausführbar sind. Um dies zu verdeutlichen, wird beispielhaft an einem CD-Player dies näher erläutert. Der CD-Player hat eine CD geladen. Er ist im Zustand „Pause". Der Service-Controller signalisiert zum Human Machine Interface, dass lediglich die Funktionen „CD play", „CD auswerfen" oder in einem „Stop-Modus gehen" vorhanden sind. Weitere Funktionen sind nicht möglich und werden nicht
angezeigt. Diese Informationen werden vom Gerät selbst bereitgestellt. Das Gerät überträgt zum jeweiligen Betriebsstatus seine vorhandenen und ausführbaren Funktionen dem Service-Controller. Folglich ist für einen Nutzer eindeutig zu erkennen, welche Funktionen er auswählen kann und welche Funktionen das Gerät bereitstellt. Das vorhandene Anzeigepotential auf der Anzeigevorrichtung wird auf die einzelnen, tatsächlich möglichen Funktionen zugeschnitten. Wählt ein Benutzer beispielsweise die Funktion „CD play" aus, so überwacht der Service-Controller die Ausführung des entsprechenden Befehls für den CD-Player und fragt zugleich ab, ob weitere Funktionen bzw. Funktionsanfragen vorliegen. Anschließend gibt er den Befehl über den Bus zum CD-Player aus. Dem Verstärker wird mitgeteilt, dass ab sofort der CD- Player für den Sound zuständig ist. Der CD-Player ist nunmehr die Signalquelle für die Audiodaten und der Verstärker verstärkt diese und leitet selbige an die ausgewählten Signalsenken. Zugleich schaltet der Service-Controller eine Leitung zwischen dem Verstärker und dem CD-Player. Der Service-Controller erledigt somit zwei Aufgaben zugleich, erstens dem Human Machine Interface mitzuteilen, welche Funktionen im Moment auf den Bus möglich sind, und welche Funktionen für einen Nutzer frei auswählbar sind. Zugleich steuert er die einzelnen Geräte im Bus.
Es erfolgt eine definierte Aufteilung der Systemdynamik. Im Weiteren wird auf ein dreischichtiges System die weiteren Erläuterungen gestützt, die Erfindung ist aber nicht hierauf limitiert, sondern die Beschreibung erfolgt rein beispielhaft.
Die Systemdynamik ist in drei Schichten realisiert, in denen die gesamte Systemdynamik anteilig und unabhängig bearbeitet wird. Diese drei Schichten sind:
- die Dynamik des Verhaltens, das vom User beeinflusst wird, Human Machine Interface und multimodale Eingabemöglichkeiten; - die Dynamik der Beziehung zwischen unterschiedlichen
Applikationen, wie beispielsweise dem Service Controller;
- die Dynamik innerhalb einer Applikation, im Weiteren mit „Service" bezeichnet.
Um die Funktionsweise des drei Schichtenmodells zu verdeutlichen, wird dies anhand eines konkreten Beispiels, eben des Drückens eines Bedienbuttons auf der Human Machine Interface, der die Funktion „CD abspielen" zugewiesen ist, erläutert. Wird diese Schaltfläche (Button) gedrückt, geht das System sofort in den Zustand „CD play" unter der Beteiligung von gleichzeitig wechselnden Services bezüglich Verstärker, Ausgabeeinheiten usw. Dies bedeutet, dass mit dem Ausführen des funktionszugeordneten Services „CD play" weitere Services gestartet werden, welche zur Ausführung des Befehls nötig sind. Es werden somit über das Computersystem die entsprechenden Daten und benötigten Einheiten aktiviert und freigeschaltet. Bei „CD play" werden folglich die Verstärker in derart angesteuert, dass sie die Ausgangsdaten des CD-Players verstärken und an die Ausgabeeinheit bzw. Ausgabeeinheiten, insbesondere Lautsprecher weiterleiten und möglicherweise diese Daten (Lautstärke, Frequenzen) grafisch auf einem Display darstellt. Auf diese Weise ist es erstmalig möglich, die systemdynamischen Teile klar strukturiert und in Schichten darzustellen. Die Eingabe des „CD play"-Befehls wird über das Human Machine Interface, welches in der ersten Schicht abläuft, in Auftrag gegeben und geht an den Service Controller, der in der zweiten Schicht abläuft, ohne seitens des Human Machine Interface notwendigerweise die weitere Ausführung zu überwachen oder direkte Verbindung mit den weiteren Services zu haben, welche ausgeführt werden. Der Service-Controller wählt und steuert die weiteren notwendigen Funktionen.
Die Systemdynamik wird nicht wie bisher im Userinterface des Human Machine Interface abgehandelt, sondern als ein „Konfliktmanagement" im Service- Controller separat und konkret bearbeitet. Dies bedeutet, dass der Service- Controller die Steuerung der Restarbeiten übernimmt und das Human Machine Interface separat abgekoppelt ist. Mehrere gleichzeitig angesprochene Systeme werden also untereinander eine Dynamik in ihrer Abfolge haben. Diese
Dynamik regelt der Service-Controller eigenständig. So würde es wenig Sinn machen, den Verstärker auszuregeln, ehe die ersten Signale zur Verstärkung anliegen. Es besteht aber auch die Möglichkeit, das alle Services gleichzeitig zur Verfügung stehen müssen, teilweise möglicherweise auch in Konflikt zueinander treten. Der Service-Controller ist als Mittel und als handelnde Instanz tätig, die unabhängig von Wissen und ggf. Wollen des Bedieners Konflikte im Vorfeld der Servicerealisierung ausräumt.
Der große Vorteil dieses Systems besteht darin, dass die Bedienlogik der einzelnen Geräte, welche angeschlossen sind, immer gleich bleiben kann, auch wenn ein neues Gerät angeschlossen wird. Der Service-Controller fragt die Bedienlogik des Gerätes ab und fügt sie selbsttätig dem System zu und bindet dieses in das Regelwerk mit den entsprechenden Regeln ein. In Ausnahmefällen muss der entsprechende Block der Bedienlogik im System selbst ausgetauscht werden. Dies erkennt jedoch der Service-Controller selbsttätig und führt diese Aufgaben aus. Hierbei fragt der Service-Controller bei Einfügung eines neuen Gerätes dessen Funktionen und dessen Bedienlogik ab und speichert sie selbsttätig. Über den Service-Controller wird mithin ein doppeltes Regelwerk geschaffen, ein gerätespezifisches Regelwerk und ein Regelwerk, das die Zusammenhänge zwischen den Geräten und Anwendungen beschreibt. Bei der Eingabe einer Funktion durch den Benutzer über das Human Machine Interface überprüft der Service-Controller, ob die Funktion nach dem vorhandenen Regelwerk zulässig, durchführbar und erzeugbar ist. Wenn die Funktion vorhanden und durchführbar ist, veranlasst er eine Befehlkaskade, die das Gesamtsystem steuert. Es werden alle Geräte in einem Zustand gesteuert, der für das Ausführen des Bedienbefehls oder einen automatischen Bedienbefehl notwendig ist. Der Service-Controller erzeugt eine regelbasierende Zusammenschau der Geräte und deren Funktionen und stellt die Abläufe selbsttätig zusammen, welche zur Ausführung notwendig sind.
In einer weiteren Ausgestaltung der Erfindung ist im Regelwerk ein Service-API vorhanden, dessen Funktionen zur Gerätesteuerung in Blöcke für verschiedene
Busse unterteilt werden, beispielsweise CAN-Bus, MOST-Bus, usw. Dieses Service-API kann so auf verschiedene Busblöcke gestellt werden und diese miteinander verbinden, und zwar unabhängig von den angeschlossenen Geräten. Durch dieses Service-API ist die weitere abhängige Bedienlogik, insbesondere der Service-Controller, nicht mehr zwingend in Kenntnis zu halten, welche physikalischen Geräte die gewünschte Funktion abruft und in welcher Form diese Funktion bzw. dieser Befehl abzugeben ist. Der Service- Controller muss lediglich erkennen, welche Funktionen vorhanden sind und welche Funktionen möglich sind. Den Rest steuert dann das Service-API. Dies ermöglicht es bei Einfügung eines Gerätes in das System die Regel an lediglich einer Stelle, und zwar im Service-Controller einzufügen. Die weiteren Anbindungen nimmt dann das Service-API automatisch vor. Dadurch wird das System transparenter.
Im Folgenden wird die Regelbasierung und die Funktionsweise anhand der Besonderheiten in einem Fahrzeug erläutert.
Einzelne Applikationen können von sich aus, ohne Zutun des Benutzers, Anspruch auf Systemresourcen erheben. Wird beispielsweise während des CD- Hörens im Fahrzeug eine Verkehrsnachricht empfangen bzw. ein Traffic- Announcement ausgelöst, d.h. der Tuner erhebt Anspruch auf die Ressourcen Lautsprecher um dort die eingehende bzw. eingegangene Verkehrsnachricht auszugeben und ist im Weiteren denkbar, dass während eines Telefonats, das im Hintergrund laufenden Navigationssystem ebenfalls die Ressource Lautsprecher nutzen will, um eine notwendige Zeit- und Orts- oder Handlungsanweisung für den Fahrer auszugeben, so wurde dies bisher in Form einer hart codierten Straight-Forward-Implementierung gelöst, wobei dann direkt auf diese Ressourcen, ohne Nutzung einer Zwischeninstanz, direkt zugegriffen wird.
Bei der vorliegenden Erfindung greift hier der Service-Controller als regelbasierendes Konfliktmanagementsystem ein. Immer und in jedem Fall
besteht ein vorhersehbares Verhalten des Systems. In dem oben beschriebenen Fall wird der Service-Controller eine Servicenachricht ausgeben und vorher eine Wiedergabeunterbrechung herbeiführen. Ist dann die Servicenachrichtausgabe beendet, so wird der Service-Controller die Wiedergabe der CD weiter fortführen. Im weiteren ist über den Service- Controller nunmehr möglich, Übergänge von Servicezuständen, von Applikationen, Geräten, Sensoren, Tunern, welche nicht rechtzeitig erfolgen, sondern eine gewisse Übergangs- oder Startzeit benötigen, zu regeln. Die Erfassung und Controllerüberwachung der vorgenannten Zeit-, Zulassungs- und Aktivitätsrahmen erfolgt nach vorgegebenen Regeln für die einzelnen Services selbst, losgelöst vom Konfliktmanagement zwischen den verschiedenen Services und von den Eingaben des Benutzers über das Human Machine Interface. Für jeden der drei Bereiche, wie oben geschildert, in eigener, neugeschaffener Softwareinstanz werden Priorität anhand von Software- Instanzen abgehandelt bzw. verarbeitet. Auf diese Weise werden die bisherigen Probleme, dass ein Benutzer von einem Systemabsturz ausgeht, umgangen. Es kann keine Blockade mehr entstehen, weil die unterschiedlichen Dynamikbereiche, wie oben beschrieben, in unterschiedlichen Softwareinstanzen aufgearbeitet werden. Das scheinbar unlogische Verhalten oder Systemverhalten wird dadurch vermieden, dass der Service-Controller in der Lage ist den aktuell gewünschten Applikationszustand zu differenzieren und zu bewirken.
Durch die klare Aufteilung der Systemdynamik in getrennte Softwarelayer, eben in mehrere Dynamikschichten, können einzelnen Schichten auf unterschiedlichen Prozessoren oder sogar unterschiedlichen Betriebssystemen laufen. Auf diese Weise kann z. B. der Service-Controller auf einem QNX- basierten Rechner, das Human Machine Interface auf einem Windows-CE basierten Rechner ablaufen und der Service-Controller managt dann die Konflikte, die hierbei auftreten, eigenständig. Auf diese Weise können Multiprozessorsysteme konfliktfrei gemanagt werden.
Die Systemschnittstellen, insbesondere die Schnittstellen zwischen dem Human Machine Interface, dem Service-Controller und Applikationen sind streng nachrichten-basierend.
Die Implementierungsmöglichkeit auf Multiprozessorsysteme mit unterschiedlichen Betriebssystemen ist gewährleistet.
Mehrere Human Machine Interface Instanzen, wie für Fahrer, Beifahrer-, Passagiere und sogar komplett verschiedene Applikationen können von einem Service-Controller dieser Softwarearchitektur gemanagt werden. Das Human Machine Interface kann sogar über ein Wide Area Network abgekoppelt werden, so dass Services im Sinn der Fernwaltung möglich sind. Außerdem besteht die Möglichkeit der Fernsteuerung des Fahrzeugs von außerhalb, sowie End-to-End-Lösungen von Applikationen ohne Fahrerbeteiligung, um beispielsweise automatische Servicenachrichten vom Fahrzeug zum Provider zu ermöglichen. Eine automatische Autorisierung und/oder Wartung der Fahrzeuge, eine Fernwartung einer fahrzeuginternen Datenbank, ebenso wie die Vorgaben von Navigationszielen, wie beispielsweise bei Fahrzeugflotten- Management, ist somit von extern möglich.
Das System wird dadurch standardkonform einfach darstellbar, weil standardisierte Protokolle, wie z. B. TPC/IP verwendet werden können.
Das System bietet Freiheiten in der Implementierungstechnik, es können unterschiedliche Schichten und unterschiedliche Services in verschiedenen Programmiersprachen wie z. B. C, CH, C# (C-Sharp), Java, XML programmiert sein.
Durch diese formale Architekturdefinition ist eine Unabhängigkeit von konkreten Echtzeitbetriebssystemen und von der Prozessorart gegeben. Daher kann wesentlich einfacher das bisher auf Echtzeitbetriebssysteme basierende
System auch partioniert werden, ohne notwendigerweise die Mikroprozessorart zu kennen.
Das Systemkonzept erlaubt obendrein an der messagebasierenden Schnittstelle eine Einbindung eines OSGI-Frameworks (Open System Gateway Initiative). Damit ist eine erhebliche Systemerweiterbarkeit unter Verwirklichung strenger Sicherheitsanforderung an den Zugangsrechten und die Kapselung von Services, möglich.
Im weiteren wird die Erfindung anhand eines konkreten Ausführungsbeispiels anhand der Figuren FIG 3 bis FIG 5 näher erläutert.
Es zeigt:
FIG 3 ein erfindungsgemäßes Schichtenmodell,
FIG 4 die Komponenten eines Service-Controllers und
FIG 5 eine Struktur eines Service-Controllers.
In FIG 3 wird ein Schichtenmodell beschrieben. Der Human Machine Interface Layer (Human Machine Interface Layer), auch mit Skin- oder GUI-Layer bezeichnet, steuert die graphische Ausgabe und die Anzeige des Human Machine Interface (HMI), das Design und die logisch Struktur.
Der darunterliegende Service-Layer ist der mittlere Teil des Systems. Jede physikalische Einheit im System ist durch eine oder mehrere Services (logische Einheiten) repräsentiert. Beispielsweise gibt es einen Phoneservice, einen CD- Player-Service usw. Diese Services bieten einen hardwareunabhängigen Funktionssatz von Befehlen, beispielsweise den Befehl „Telefonnummer 123
wählen" oder „CD-Player spiele Lied 3 ab". Die wichtigste Komponente im Service-Layer ist der Service-Controller, welcher die Services untereinander verwaltet und steuert und als eigentliche Headunit zentral die Services verwaltet. Auf den Service-Controller wird im Weiteren näher eingegangen werden.
Als dritte Schicht schließt sich der Protokoll-Layer an, welcher die Software- Komponenten, insbesondere beispielsweise die Protokolle für die fahrzeuginterne Kommunikation an einem Multimediabussystem, wie MOST oder Fire Wire aufweist und zugleich das Interface zwischen Soft- und Hardware darstellt.
Um den Funktionsumfang, den ein Service anbietet, zu nutzen, sendet das Human Machine Interface eine geeignete Nachricht zum Service-Controller. Das vorgegebene Protokoll, welches diese Nachricht definiert, wird als sog. Multimedia-Interprozesskommunications-Protokoll (MIC-Protokoll) bezeichnet. Es existiert ein Applikation Programming Interface zum Versenden und zum Empfangen von Nachrichten, welches SERAPI (SERvice API) genannt wird und im Weiteren näheren beschrieben wird. Das Human Machine Interface hat keinen direkten Zugriff auf den Services und die Hardware.
Die strenge Trennung zwischen Human Machine Interface Service und Protokoll-Layer hat diverse Vorteile. Einer dieser Vorteile ist die hohe Abstraktion des Systems. Das System bietet dem Human Machine Interface ein Interface, welches komplett hard- und softwareunabhängig und auch unabhängig von Protokollen ist. Dies bedeutet, dass das Human Machine Interface, welches beispielsweise auf einer MOST-Multimediaeinheit läuft, ebenso auf einem System, welches auf Fire Wire-Basis beruht, funktionsfähig ist, ohne irgendwelche Adaption. Auf der anderen Seite ist die logische Struktur des Userinterface komplett gekapselt und auf den Human Machine Interface Layer begrenzt. Dies ermöglicht es sehr einfach das komplette Design und das „Look and Feel" des Systems im Human Machine Interface zu verändern und
zu ersetzen, ohne die tieferliegenden Schichten hierbei anzutasten. Natürlich ist somit auch ermöglicht, die Entwicklung und die neue Implementierung von einzelnen Services und von einzelnen Layern systemabhängig zu gestalten.
Im Weiteren wird nunmehr auf den Service-Controller eingegangen. Unter anderem, hat ein Multimediasystem folgende Eigenschaften zu erfüllen:
- einen einfachen Weg zu realisieren, um an ein Interface adaptierbar zu sein, ohne aufwendige Anpassungsarbeiten;
- Teilentwicklungen zu unterstützen und einen Test von Softwarekomponenten zu ermöglichen;
- einen einfachen Weg aufzuzeigen, das System mit erweiterbaren Komponenten ausstattbar zu machen.
Wie bereits aufgezeigt, läuft das Human Machine Interface in einer separierten Schicht, dem Human Machine Interface-Layer. Es kann daher als separate Einheit getestet und entwickelt werden. Um das System jedoch einfach an die spezifischen Eigenschaften der Hardware anzupassen, ist es notwendig, die Software modular auszugestalten. Diese Modularität wird durch die Entwicklung und Einführung eines Services ermöglicht. Jeder Service hat die Möglichkeit Zugriff und Kontrolle über die physikalischen und tatsächlich am System vorhandenen Einheiten zu erhalten und ermöglicht ein hardwareunabhängiges Interface zum jeweiligen Upper Layer, beispielsweise dem Human Machine Interface. Einige dieser Services sind abhängig von anderen Services oder aber sie benötigen exklusiven Zugriff auf die Hardware. Dies bedeutet, dass eine Softwarekomponente notwendig ist, welche steuernd und synchronisierend den Service steuert und ein Interface zwischen dem Human Machine Interface- Layer und dem Service-Interface aufbaut. Diese Komponente ist der Service- Controller.
Andererseits ist es somit auch möglich, einen Eventgenerator an den Service- Controller anzuschließen, welcher es ermöglicht, sämtliche Testszenarien
automatisch auszuführen. Dies ermöglicht eine tiefere und extensivere und schnellere Testmöglichkeit, wie dies es bisher nicht möglich ist.
Wie bereits ausgeführt, besteht das System aus unzähligen aktuell laufenden Prozessen und Threads. Um eine Kommunikation untereinander zu ermöglichen, senden diese Nachrichten aus, welche durch das MIC-Protokoll definiert sind. Hervorgerufen durch die teilweise sehr langen Antwortzeiten von einigen Multimediakomponenten ist das MIC-Protokoll asynchron aufgebaut. Es gibt viele Situationen, beispielsweise während der Initialisierungsphase, bei welchen es notwendig ist, die einzelnen Komponenten zu synchronisieren. Es ist die Aufgabe des Service-Controllers diese Synchronisation durchzuführen und aufrecht zu erhalten.
Ein Multimediasystem besteht zumeist aus Hardwareeinheiten, welche ausschließlich exklusiven Zugriff erlauben. Wenn diverse Services Zugriff auf solch eine Hardware benötigen, ist es die Aufgabe des Service-Controllers diese Probleme und die hierbei auftretenden Konflikte zwischen den Services zu lösen. Dies gilt auch in Fällen, in welchen parallel Zugriff möglich, jedoch nicht unbedingt notwendig ist.
Eine Anzahl von möglichen Events initialisiert eine Sequenz von Aktionen, welche in unterschiedlichen Services auszuführen sind, wobei aber die Sequenz der Aktion sehr wichtig ist. Der Erfolg oder das Fehlschlagen von einer Aktion beeinflusst die folgenden Aktionen. Um es noch komplizierter darzustellen, mag es in gewissen Bereichen möglich und notwendig sein, dass eine zeitliche Ausführung eines Events vor einem anderen notwendig ist, ehe diese Aktion durchgeführt werden kann. Dies bedeutet, dass möglicherweise parallel zu agieren ist, außerdem muss gewährleistet sein, dass dieses parallele Arbeiten untereinander frei oder ggf. auch nicht frei von Einfluss bleiben. Der Service-Controller löst diese Aufgabe, indem er das Eventhandling koordiniert und ausführt in der Weise, dass die vorgegebenen Eigenschaften erfüllt sind.
Anhand von Figur 4 werden die Hauptkomponenten des Service-Controllers und dessen Struktur aufgezeigt. Der Service-Controller besteht aus drei Hauptkomponenten, die immer in Betrieb sind, und zwar im Parallelbetrieb. Der Down-Thread, der Up-Thread und der Main-Thread. Der Down-Thread und der Up-Thread haben die Aufgabe, Nachrichten vom Human Maschine Interface und von den Services zu empfangen und sie in einer zentralen Queue zu speichern. Unabhängig davon ist es möglich, eine Vorfilterung und ein Vorhandling der Nachrichten auszuführen, welche in einem Teil des Service- Controllers durchgeführt werden. Der Main-Thread nimmt die Nachrichten aus der Queue und führt diese aus und verwaltet sie.
Die Message Queue, wie oben aufgezeigt, ist eine komplizierte Struktur. Sie besteht aus verschiedenen Queues, welche unterschiedliche Größe haben können. Jede Queue ist mit einer eigenen Priorität ausgestattet. Der Receivingthread ermittelt die Priorität des Events und speichert diese in der Appropriate Queue.
Im weiteren wird anhand von Figur 5 der weitere Aufbau des Service- Controllers erläutert. Der Service-Controller weist einen Dispatcher auf. Dieser Dispatcher läuft im Main-Thread und verwaltet die Events und Ereignisse. Er überwacht und speichert den aktuellen Stand der einzelnen Systemkomponenten. Beispielsweise in einem System mit einem GSM-Modem überwacht er, ob der Phoneservice Zugriff auf das Modem hat oder ob ein Anruf ansteht oder ob der IP-Service das Modem aktuell nutzt, um eine Internetverbindung aufzubauen.
Es ist wichtig, dass der Dispatcher nicht alle Systemzustände überwacht, er überwacht lediglich diejenigen Zustände, welche Einfluss darauf haben, ob ein Event ausführbar ist oder nicht. Die Entscheidung, auf welche Art und wann ein Event ausgeführt ist und/oder ausführbar ist, ist an diverse Events gekoppelt.
Im Falle, dass ein Event eine Anzahl weiterer Aktionen veranlasst, erzeugt der Dispatcher einen neuen Job, der dieses Event verwaltet. Der Dispatcher speichert eine Liste der aktiven Jobs ab.
Im Weiteren wird auf die Funktionalität näher eingegangen. Der Service- Controller entscheidet zwischen zwei Zuständen bzw. Phasen, der Initalisierungsphase und der Betriebsphase. Während der Initialisierungsphase berichtet jeder Service und das Human Maschine Interface direkt dem Service- Controller. Anschließend initialisiert der Service-Controller die Kommunikation zu jedem einzelnen Prozess. Der Service-Controller liest aus dem Konfigurationsfile, wessen Services notwendig sind, um ein lauffähiges System zu erhalten. Wenn alle notwendigen Services und das Human Maschine Interface registriert sind, erhält jeder Prozess eine Nachricht vom Service Controller, dass das System sich nunmehr in Betrieb befindet. Haben nach einer definierten Zeit nicht alle Services geantwortet, dann entscheidet der Service-Controller von selbst, ob ein beschränkter Betrieb möglich ist oder ob das System nicht lauffähig ist.
Im Folgenden wird das Eventhandling näher beschrieben. Das System kennt eine große Anzahl von Events. Die Art und Weise, in welcher ein Event behandelt wird, hängt von verschiedenen Systemstadien ab. Nichts desto trotz werden diverse Events gleich behandelt. Um das Eventhandling zu vereinfachen und um für zukünftige Erweiterungen offen zu sein ist eine definierte Abstraktion eingeführt. Es sind einige Event-Attribute eingeführt und eine Anzahl Regeln, welche definieren, auf welche Art und Weise ein Event abzuhandeln ist, basierend auf den Attributen.
Der Service-Controller hat eine Tabelle, eine sogenannte Infotabelle, welche einige Informationen für jedes definierte Event aufweist. Diese Information besteht aus einer Priorität, mit welcher das Event auszuführen ist, und
Eventattributen, welche auch als Event-Flags bezeichnet werden. Es ist
möglich, dass ein Event diverse Kombinationen verschiedener Attribute aufweist.
Die folgenden Events bzw. Attribute sind definiert:
Loop Through, Audio Producer, Audio Stopper, GSM Phone User, GSM Releaser und Rule Exception.
Diese Attribute haben folgende Bedeutung:
Loop Through:
Ein Event mit diesem Flag wird vom Service-Controller zum zugehörigen
Service oder zum Human Maschine Interface durchgereicht.
Audio Producer:
Dieses Flag gibt dem Service-Controller die Mitteilung, dass dieses Event verschiedene Audioausgaben starten wird.
Audio Stopper: Dieses Flag teilt dem Service-Controller mit, dass das Event seine Audioausgaben beendet.
GSM Phone User:
Der Service-Controller erhält die Nachricht, dass ein derartiges Event nur korrekt ausführbar ist, wenn das GSM-Modem bereit ist für eine Verbindungseröffnung.
GSM Releaser:
Dieses Event-Attribut bedeutet, dass der Service seinen Zugriff auf das GSM- Modem aufgibt.
Ruie Exception:
Dieses Flag wird dann gesetzt, wenn ein Event nicht verwaltet oder ausgeführt werden kann, in Abhängigkeit der vorausgenannten Regeln. Für jede Ruie exception muss der Dispatcher eine Funktion aufweisen, welche dieses spezielle Event verwaltet.
Wenn der Up-Thread ein Event empfängt, so entnimmt er aus der Infotabelle für die Prioritäten dieses Events die zugehörige Priorität und speichert sie in der zugehörigen Queue. Die Events des Human Maschine Interface, welche vom Down-Thread empfangen werden, bekommen stets die höchste Priorität. Der Dispatcher wird aktiv, solange die Queues nicht leer sind. Er holt das nächste Event, wobei er natürlich zuerst in den Queues nachsieht und das Event entnimmt, welches die höchste Priorität hat. Wenn diese Queue leer ist, nimmt er das älteste Element aus der Queue mit der niedrigsten Priorität usw. Anschließend überprüft der Dispatcher, ob der Service, an welchen das Event adressiert ist, ein Teil des laufenden Systems ist. Wenn dies nicht der Fall ist, wird eine Fehlernachricht versendet. Dann geht der Dispatcher durch die Regelliste und überprüft, ob das Event eine Ruie condition hat. Wenn verschiedene Bedingungen zutreffen, alle zugehörigen Aktionen ausgeführt sind, ausgenommen, es handelt sich um ein Ruie Exception Event, wird lediglich der Exceptionhandler für dieses spezifische Event ausgeführt. Nachdem alle Ruie Conditions überprüft sind, geht der Dispatcher durch die Jobliste und setzt die aktiven Jobs fort. Anschließend holt der Dispatcher das nächste Event aus der Queue.
Wie bereits ausgeführt kann ein Event eine Sequenz von Aktionen nach sich ziehen, welche notwendigerweise auszuführen sind. Aufgrund des asynchronen Verhaltens des Systems ist es notwendig an einem definierten Punkt eine Sequenz auf eine Nachricht abzuwarten, bevor die Sequenz komplett beendet werden kann. Dies bedeutet, dass der Dispatcher in die Lage versetzt sein muss neue Events zu empfangen, noch ehe das erste Event komplett abgearbeitet und beendet ist. Diese Art von Events werden in einem Job
ausgeführt. Wenn der Dispatcher einen Job aufruft, so führt er diese Sequenz soweit als möglich aus. Bis der Dispatcher alle Jobs aufruft wird jedesmal ein neues Event empfangen, in diesem Fall kann der Job selbst überprüfen, ob die Bedingung, auf welche er wartet, eingetroffen ist - durch das neue eingegangene Event - und der Job selbst kann die Sequenz weiter durchführen. Wenn ein Job beendet ist, entfernt der Dispatcher diesen von der Jobliste.
Die Rules definieren, wie ein Event behandelt werden muss, in Abhängigkeit von den Attributen des Events und dem Systemstatus. Jede Ruie definiert eine Bedingung und eine Aktion, welche ausgeführt werden muss, sobald die Event Attribute und der Systemstatus die Bedingung treffen. Im Falle, dass in einer Aktion ein Job auszuführen ist, existieren diverse Subrules, welche festlegen, was der einzelne Job für Auswirkungen hat und welche Ausführen veranlasst sind. Die Art und Weise, was eine Sequenz bei Eintritt eines Verzweigungspunktes zu tun und auszuführen hat, ist abhängig vom Systemstatus, welcher zum Zeitpunkt des Verzweigungspunkte vorliegend ist. Folgende Rules sind beispielsweise definiert:
Exception: Die Bedingung ist: Das Event-Flag Ruie Exception gesetzt ist.
Die zugehörige Aktion ist: Ausführung des Exceptionhandlers, welcher für das spezielle Event definiert ist. Wenn der Dispatcher keine Exception Handler für dieses Event hat, wird eine Fehlermeldung an diejenige Komponente gesendet, die das Event ausgesendet hat.
Audio Producer:
Die Bedingung ist: Das Event-Flag Audio Producer ist gesetzt.
Die zugehörige Aktion ist: Ein Audio Producer Job ist gestartet.
Audio Stopper:
Die Bedingung ist: Das Event-Flag Audio Stopper ist gesetzt. Die zugehörige Aktion ist: Ein Audiostopperjob ist gestartet.
GSM Phone User Reject:
Die Bedingung ist: Das Event-Flag GSM Phone User ist gesetzt und das Modem ist aktuell in Datenverbindung.
Die zugehörige Aktion ist: Dem Aussender des Events wird eine Fehlermeldung gesendet, welche diesem mitteilt, dass das Modem momentan nicht in der Lage ist eine Sprachverbindung aufzubauen.
Loop Through:
Die Bedingung ist: Das Event-Flag Loop Through ist gesetzt. Die zugehörige Aktion ist: Wenn dieses Event vom Human Maschine Interface empfangen wurde, wird dieses zum zugehörigen Service durchgereicht. Wenn es von einem Service empfangen wurde, wird es zum Human Maschine Interface durchgereicht.
Wie bereits aufgezeigt, sind die Sequenzen auf Aktionen, welche von einem Job erzeugt werden, definiert durch die Subrules. Diese Subrules können durchaus sehr kompliziert sein, z. B. der Audio Producer Job hat die Aufgabe auf allen Audio Producer Services zu synchronisieren, er muss in diesem Fall die Verbindung zwischen den Audioquellen und den Audiosenken herstellen, bestehende Verbindungen kappen und diese Verbindungen verwalten. Außerdem muss er die diversen Fehlermeldungen auf unterschiedliche Weise verteilen.