cPOS ist es möglich auf bestimmte Events innerhalb des Programms zu reagieren. Als Beispiel: cPOS stellt fest, dass es bereits 19:00 Uhr ist und schaltet automatisch das Nacht Skin ein. Es gibt aber auch weit komplexere Möglichkeiten den Event Handler zu nutzen.
In diesem Teil der cPOS Anleitung darf ich einen sehr mächtigen Vorteil von cPOS vorstellen – es ist sehr flexibel. Sprich – nichts ist unmöglich bzw. nicht erweiterungsfähig.
Der Event Handler dient allgemein als Mittel auf externe wie auch auf interne Ereignisse zu reagieren. Ein einfaches Beispiel – welches später auch genauer ausgeführt wird – ist ein Tastendruck der z.B. die Playfunktion simuliert.
Das ist natürlich noch nichts besonders großartiges, aber sicher auch wichtig. Wenn wir etwas abstrakter werden, wäre es über den Event Händler kurz EV auch möglich – die Wassereinlasssteuerung des Wirlpool zu steuern. ;) natürlich rein abstrakt gesehen… denn über die Funktionen gps_speed oder sensor_speed (z.B. bei OBD oder Sensorkarte) kann die aktuelle Geschwindigkeit abgefragt werden und diese könnte über eine Relaiskarte der Wasserpumpe nur dann Strom geben, wenn diese Funktion wahr ist.
Einige werden das Wort wahr sicher aus genau diesem Zusammenhang schon mal kennen gelernt haben – genau, aus der Logik. Im EV werden die meisten komplexen Funktionen aus mehreren Bedingungen zusammengestellt. Hierzu mein erstes richtiges Beispiel:
Für das Wechseln des Skins von Day auf Night möchte ich mir eine Funktion zusammenstellen. Meine Vorraussetzungen: (ich habe zweierlei Skins ;) – sonst macht das wenig Sinn)
Ab ca. 18:00 Uhr ist es sicher dunkel und ich möchte meinen Night-Skin in cPOS laden. Ab ca. 8:00 Uhr sollte es hell genug sein, damit wieder der Day-Skin verwendet werden kann.
Diese Vorraussetzungen werden nun wie folgt eingebunden:
Die Verbindung der Zeiten ist meist recht tricky, wenn Logik nicht auf den Speiseplan gehört, aber eigentlich verständlich… denn der Night-Skin soll nur nach 18 Uhr verwendet werden oder in der Zeit vor 8 Uhr morgens.
Oder auch als Intervall: ]18:00:00; 23:59:59[ ODER ]?00:00:00; 08:00:00[
Vorsicht – führende „0“ nicht vergessen!
Similär dazu ist die Funktion für das Wechseln in den Dayskin… außer bei der Verwendung der logischen Verknüpfung.
Function: skin_day Event(s): time > 08:00:00 & time < 18:00:00 Signal: timeHierbei muss das Intervall ]08:00:00; 18:00:00[ einschließen. Ähnlich hierzu ist die Vorgehensweise bei der Gamma-Funktion. (Für das Abdunkeln des Displays)
Function : gamma_night Event(s) : time > 18:00:00 | time < 08:00:00 Signal : time Function : gamma_day Event(s) : time > 08:00:00 & time < 18:00:00 Signal : time
Sicher wird sich der eine oder andere bereits gefragt haben, für was die Optionen High-Speed, Repeat und Startup notwendig sind.
Die Funktion wird sehr oft pro Sekunde abgefragt (z.B. Tastendruck), jedoch ist das meist nicht sinnvoll und eher eine
Geschwindigkeitsbremse. Also nur verwenden, wenn wirklich eine schnelle Reaktion gewünscht ist.
Repeat muss dann aktiviert werden, wenn eine Funktion mehrfach ausgeführt werden soll, wenn das jeweilige Ereignis länger oder öfters anliegt. (z.B. für die Lautstärkenregelung (siehe unten)
Ist nahezu selbsterklärend – sprich nur beim Starten von cPOS (z.B. Text-ansage „Guten Morgen“ – sicherlich auch amüsant, aber auf Dauer lästig wenn das Auto einen mehrfach begrüßt ;)
Wenn wir schon beim „Guten Morgen“ oder „Gute Fahrt“ sind, sollten wir das doch gleich mal erörtern…
Notwendig hierzu ist die Funktion <b>speak</b>. Sinnvoll ist diese sicherlich in Verbindung mit Informationen, welche mit unter auch wichtig sind ohne auf den TFT zu blicken.
Beispiele hierfür wären:
Function : speak_incoming call Event(s) : phone_ring = on Signal : phone_ring Function : speak_geh ran, du penner (zitat fuchs ;)) Event(s) : phone_ring = on Signal : phone_ring Function : speak_Willkommen zu Hause Event(s) : gps_latitude = [deine koordinate] & gps_longitude = [deine koordinate] Signal : gps_latitude & gps_longitude Function : speak_oh b d ist an Event(s) : obd_connected = on Signal : obd_connected Function : speak_schi pii es (die Sprachengine brauch etwas Nachhilfe) Event(s) : ... Signal : ...Bei Sensorkarten wäre dann auch eine Meldung bei unter 3 ° C oder ähnliches möglich. Oder auch eine Warnung bei einem OBD-Fehler (wird bisher jedoch noch nicht von cPOS unterstützt).
Wer auf die herrlichen Aussprache der Sprachengine von MS verzichten möchte, kann auch über die Funktion playsound eine beliebige Sounddatei abspielen:
Jedoch muss sich dann die Audiodatei im Unterordner sounds befinden.
macht es möglich Timer im Eventhandler zu nutzen.
Dazu nötig sind die Funktionen:
- startet den Timer - erster Wert ist 1 uns wird pro Sekunde um 1 erhöht.
- stoppt den Timer wieder, falls man ihn nicht mehr braucht oder aber er vorzeitig abgebrochen werden soll.
Sowie der Event <b>timer_X</b> worin der aktuelle Wert des Timers gespeichert ist.
X ist selbstverständlich durch den Index des Timers zu ersetzen.
Vielleicht merkt man schon, dass der Eventhandler einiges bietet, aber warum nicht noch ein richtiges Highlight? Jedes neue Auto oder Radio verfügt über eine geschwindigkeitsabhängigen Lautstärkenregelung und genau hierfür haben wir alle Mittel – ein Geschwindigkeitssignal und einen individuelle Lautstärkenreglung. Ebenfalls wäre eine Anpassung via Drehzahlen auch per OBD / Sensor möglich.
Function: vol+
gps_speed > 30 | > 50 | gps_speed > 70 | gps_speed > 90 | gps_speed > 110...
Signal: gps_speed
(für copy/paste: gps_speed > 30 | gps_speed > 50 | gps_speed > 70 | gps_speed > 90 | gps_speed > 110 | gps_speed > 120 | gps_speed > 130 | gps_speed > 140 | gps_speed > 150 | gps_speed > 160 | gps_speed > 170)
und natürlich auch:
vol- gps_speed < 30 | gps_speed < 50 | gps_speed < 70 | gps_speed < 90 | gps_speed < 110 | gps_speed < 120 | gps_speed < 130 | gps_speed < 140 | gps_speed < 150 | gps_speed < 160 | gps_speed < 170
Signal: gps_speed
Ebenfalls sind auch individuelle Schritte über volume_main möglich (z.B Function: volume_main+3
Da ich ein paar Startprobleme hatte, ein einfaches Beispiel zur Steuerung per Tastatur: (speak funktionierte bei mir nicht, daher evtl. für die ersten Versuche was unempfindliches wie Pause probieren)
Funktion: pause
key_{nun die gewünschte Taste drücken bis eine Zahl dort steht} nachher steht dort z.b. key_13 wenn Return gedrückt wurde
Highspeed Häckchen rein, da Tastendrücke schnelle Ereignisse sind
Und schon sollte CPOS Pause/Pausebeenden auf der gewählten Taste.
Nochmal die Bedeutung der Felder:
Funktion - Was soll passieren - Funktion
Event - durch welchen wert des Signals
Signal - Was soll durch Event gemonitored werden