Notice: This forum has been recovered from an old backup, so some content, links, and dates may be outdated. The forum is currently read-only while we restore sign-in and registration functionality. Details

If you find this forum valuable and would like to help keep it online, donations to help cover hosting and domain costs are greatly appreciated, but never expected. You can support the forum through Buy Me a Coffee or Ko-fi. Thank you for helping preserve the EventGhost community.

HID PlugIn

Allgemeines zum Thema EventGhost
Bartman
Plugin Developer
Posts: 881
Joined: Sun Feb 12, 2006 9:03 am

Post by Bartman »

Als Notl├Âsung kann er ja auch ein Makro erstellen und das nur bei den entsprechenden Programmen aktivieren. Dort kann er dann die Tasten per Keyboard Plugin entsprechend verarbeiten.
Was macht denn eigentlich die Originalsoftware der Fernbedienung?
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

Ich schätze mal gar nichts. Die gehen halt davon aus, dass die Ziffern- und Cursor-Taste schon passen werden. Und für alles was nicht so eindeutig ist, haben sie dann halt nicht Keyboard-HID genommen. Bei der MCE-Remote ist es das gleiche (wenn man den original Treiber verwendet).
Bartman
Plugin Developer
Posts: 881
Joined: Sun Feb 12, 2006 9:03 am

Post by Bartman »

Wie bekomme ich denn halbwegs elegant das Ergebnis (also der buffer) meines Readfiles in eine ctypes Datenstruktur, so dass ich HidP_GetData einen Pointer darauf geben kann?
Gibt es irgendwas bei diesen enduring events zu beachten?
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

Wenn der Inhalt des Buffers nicht verändert wird, dann geht:
ctypes.c_char_p(str(buf))
bzw.
ctypes.c_void_p(str(buf))

Wenn du einen veränderbaren Buffer brauchst, dann geht:
ctypes.create_string_buffer("Hello", 10)
welches dann z.B. einen Buffer von 10 Bytes anlegt und mit der Zeichenfolge "Hello" initialisiert.
Bartman
Plugin Developer
Posts: 881
Joined: Sun Feb 12, 2006 9:03 am

Post by Bartman »

schon mal danke
ich bin jetzt soweit, dass ich die einzelnen Buttons und analogen Sticks unterscheiden kann.
Jetzt hab ich ein Union Feld, in dem entweder ein boolean (Button) oder ein ulong (Control Value) drinstehen soll. Wie kann ich denn jetzt unterscheiden, welcher Typ benutzt wurde? Zugreifen kann ich auf beide Felder, aber so kann ich nicht sicher unterscheiden, ob eine 1 ein analoger Wert oder ein gedr├╝ckter Knopf ist.
Ich sehe auch nirgends ein Flag.
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

Irgendwo muss sich doch enumerieren lassen, ob der Report ein Button oder ein ControlValue sein soll.
Bartman
Plugin Developer
Posts: 881
Joined: Sun Feb 12, 2006 9:03 am

Post by Bartman »

Ich habe es jetzt mit den Value/Button Caps hinbekommen.
So richtige Arrays im herrk├Âmmlichen Sinn gibt es in Python nicht, oder?
Ich habe jetzt einzelne Indexnummern und Bereiche mit Anfang und Ende und will das jetzt so aufbereiten, dass ich schnell herausfinden kann, ob Index x ein Button oder Value ist.
Ich hätte jetzt sonst ein Array vorbereit und an Stelle x eine entsprechende Zahl mit dem Typ hinterlegt.
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

Solche statischen Arrays kennt Python selber nicht. Aber ctypes kann es problemlos:

arrayType = c_int * 50
myArray = arrayType()

Und dann gibt es noch das "array" Modul der Python-StandardLib.
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

Bartman wrote: Ich hätte jetzt sonst ein Array vorbereit und an Stelle x eine entsprechende Zahl mit dem Typ hinterlegt.
Was mir gerade auffällt:
Was spricht in dem Fall dagegen eine normale List oder Tuple zu nehmen?
Bartman
Plugin Developer
Posts: 881
Joined: Sun Feb 12, 2006 9:03 am

Post by Bartman »

ich mach mir langsam Sorgen, dass das alles zu langsam wird.
Mit einem Joystick kann man schon deutliche CPU Auslastungen erreichen.
Wobei die paar Zyklen da wahrscheinlich auch nichts mehr ändern.
Wie sind die denn intern organisiert?
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

Bartman wrote: Wie sind die denn intern organisiert?
Ehrlich gesagt keine Ahnung. Aber sie werden mit großer Wahrscheinlichkeit beim Index-Zugriff schneller sein als ctypes oder das array Modul. Denn dort muss dann wieder zwischen verschiedenen Typen konvertiert werden, während List und Tuple-Zugriffe nur ein einzelner Bytecode-Befehl sind.
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

Bartman wrote:Gibt es irgendwas bei diesen enduring events zu beachten?
Hatte ich ganz vergessen darauf etwas zu sagen:
Nein, sollte eigentlich total einfach sein. Der einzige Unterschied ist, dass man im richtigen Moment self.EndLastEvent() aufrufen muss.
Bartman
Plugin Developer
Posts: 881
Joined: Sun Feb 12, 2006 9:03 am

Post by Bartman »

Ich habe da noch das Problem, dass die EnduringEvents von Geräten sich gegenseitig beenden.
Da geht wahrscheinlich nur einer pro Plugin?
W├╝rde das mit dem mehreren Instanzen gel├Âst?

Und dann hab ich noch den Fehler, dass das PlugIn nicht neugestartet werden, wenn ich den eventName ändere. Kann es sein, dass Änderungen an verschachtelten Dictionaries nicht erkannt werden?
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

Ja, jede Plugin-Instanz kann nur einen aktiven Event haben und somit k├Ânnen mehrere Instanzen jeweils ihren eigenen Event aktiv halten.

Dicts sollten eigentlich richtig laufen. Was da schief läuft müsste ich mal am eigentlichen Code sehen.
Bartman
Plugin Developer
Posts: 881
Joined: Sun Feb 12, 2006 9:03 am

Post by Bartman »

warum kann man RawReceiverPlugin.TriggerEvent eigentlich keinen Payload mitgeben?
Post Reply