Skip to content. | Skip to navigation

Auto-Login
You are here: Home Car-PC Wiki Howto Event Handler


Einstellungen
Name:

Email:

Höhe Bearbeitungsfenster:


Full-Screen Modus | Standard Modus

Organisatorisches Hilfe  
Impressum / Kontakt  
Lizenzbestimmungen  
Danke  

Neu im Wiki

Partner
Car-PC Shop

 
Car-PC Wiki
Views

Spezielle Tipps

Howto Use the Event Handler

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: time
Hierbei 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.

* High-Speed

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:

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)

* Startup

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:

* Function : playsound_bekloppterfrosch.mp3

Jedoch muss sich dann die Audiodatei im Unterordner sounds befinden.

* Timer on/off

macht es möglich Timer im Eventhandler zu nutzen.

Dazu nötig sind die Funktionen:

* timerstart_X

- startet den Timer - erster Wert ist 1 uns wird pro Sekunde um 1 erhöht.

* timerstop_X

- 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+

    * Event(s):

    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:

* Function:

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

    * Event

    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

    * Signal : key_

    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




subject:
  ( 2 subscribers )