Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   HID-Komponente - Status der Buttons abfragen (https://www.delphipraxis.net/169611-hid-komponente-status-der-buttons-abfragen.html)

Breager 31. Jul 2012 21:32

HID-Komponente - Status der Buttons abfragen
 
Hallo,

ich schlage mich jetzt schon seit ein paar Tagen mit der HID-Komponente herum, die der JVCL beiliegt. Habe hier auch ein paar Threads zum Thema gefunden. Ich möchte lediglich bei einem Joystick/Gamepad den Status der Buttons und der Achsen ermitteln.

Kennt jemand dafür eine einfache Methode? Ich habe gelesen, dass das Abfragen des Button-Status mit HidP_GetUsages möglich sein soll und das Abfragen der Achsen mit HidP_GetUsageValue. Allerdings habe ich keine Ahnung wie.

Viele Grüße

hathor 31. Jul 2012 23:01

AW: HID-Komponente - Status der Buttons abfragen
 
Dafür reicht eine Joystick-Unit.
Erscheint das Device tatsächlich als HID-Device?

Bummi 31. Jul 2012 23:09

AW: HID-Komponente - Status der Buttons abfragen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wenn es nicht die Jedi's sein müssen ... im Anhang ist der Teil mit TGamepad das was ich meine dass Du es suchen müsstest.
Beruht auf TJoyInfoEx aus MMSystem.

Breager 1. Aug 2012 00:06

AW: HID-Komponente - Status der Buttons abfragen
 
Danke für Eure Antworten.

Zitat:

Zitat von hathor
Erscheint das Device tatsächlich als HID-Device?

Funktioniert mit beiden USB-Gamepads, die ich besitze.

Danke Bummi für den Anhang. Nein, es müssen nicht unbedingt die Jedi's sein. Mein Delphi2005 PE kennt leider noch keine Generics. Allerdings habe ich bereits ein Beispiel, das hier im Forum gepostet wurde und auf TJoyInfoEx basiert, ausprobiert. Leider wird eines meiner beiden Gamepads nicht erkannt (vielleicht weil es keinen Analog-Stick hat?). Und das war auch der Grund für mich, nach einer anderen Lösung zu suchen.

Wie schon geschrieben, habe ich schon einiges zur HID-Komponente gefunden, leider jedoch nicht, wie man den Status der Buttons und der Achsen ermittelt (Ich erhalte nur die Rohdaten).

Hier mal ein Link, wo erklärt wird, wie es funktionieren sollte:
http://www.codeproject.com/Articles/...Joystick-Input

Leider komme ich damit nicht zurecht, da ich nicht genau weiss, wie ich die Parameter in Delphi nutzen muss.

Breager 1. Aug 2012 22:31

AW: HID-Komponente - Status der Buttons abfragen
 
Zitat:

Zitat von breager
Leider wird eines meiner beiden Gamepads nicht erkannt

Ich habe mich geirrt. Dass Gamepad wird erkannt. Allerdings werden die Tasten nicht eingelesen. Vielleicht liegt es wirklich daran, dass kein Analogstick vorhanden ist.

Bei der HID-Komponente interpretiere ich nun die Rohdaten selbst. Ich kann mir ehrlichgesagt nicht vorstellen, dass die Werte bei verschiedenen Joysticks/Gamepads abweichen, testen kann ich das jedoch leider nicht in großem Ausmaß, da ich, wie schon erwähnt, nur zwei Gamepads besitze. Eigentlich wollte ich die Dataindices benutzen, allerdings sind diese für die Input Values in umgekehrter Reihenfolge. Die X-Achse hat somit den Index 1 und die Y-Achse den Index 0. Wenn ich die Bytes von links nach rechts lese, müsste es eigentlich umgekehrt sein.

Ich gehe davon aus, dass die ersten Bytes genutzt werden, um die Achsen in folgender Reihenfolge einzulesen: X-Achse, Y-Achse, und eventuell weitere Achsen (Z-Achse, relative Z-Achse). Danach wird der Hat-Switch eingelesen, falls vorhanden (4 Bits) und anschließend die Buttons (Gedrückter Button bei gesetztem Bit). Sollte Interesse bestehen, kann ich mein Demo-Programm hochladen.

Viele Grüße

hathor 2. Aug 2012 08:16

AW: HID-Komponente - Status der Buttons abfragen
 
Zitat:

Zitat von Breager (Beitrag 1176635)
...Sollte Interesse bestehen, kann ich mein Demo-Programm hochladen.

Viele Grüße


Ja, bitte! :-D

Breager 2. Aug 2012 17:23

AW: HID-Komponente - Status der Buttons abfragen
 
O.k. hier mal mein Demo-Programm mit Quelltext und Exe. Das Programm ist jedoch noch nicht optimiert, ich werde daran noch einige Änderungen vornehmen. Im Moment wird davon ausgegangen, dass die Werte für Achsen (8 Bit), Hat-Switch (4 Bit) und die Buttons (jeweils 1 Bit) immer gleich lang sind. Ich bin mir nicht sicher, ob das auf jeden Joystick/Gamepad zutrifft. Eine Überprüfung diesbezüglich fehlt im Moment, werde ich aber noch einbauen. Eigentlich wollte ich den Dataindex zu Lokalisation der Werte nutzen. Ich denke, das werde ich noch dementsprechend ändern. Merkwürdig finde ich, dass die Werte für die Input Values in umgekehrter Reihenfolge angezeigt werden. Würde mich interssieren, ob das bei anderen Joysticks auch der Fall ist.

Unterstützt wird folgendes:
Achsen: X,Y,Z,Rel. Z; Hat-Switch, Nummern-Buttons
Zusätzliche Buttons, wie z.B. MODE oder VIBRATION, werden nicht unterstützt.

Getestet habe ich das Programm mit dem Rumblepad 2 und dem Precision Gamepad (beide von Logitech).

Viele Grüße

Breager 3. Aug 2012 23:43

AW: HID-Komponente - Status der Buttons abfragen
 
Hallo,

habe das Problem nach langem Ausprobieren endlich gelöst. Bitte nutzt den Download im vorherigen Post nicht mehr. Ich würde den Download entfernen, kann jedoch meine alten Beiträge nicht mehr editieren. Ist vermutlich ein Fehler in meinem Browser?

Viele Grüße

Sir Rufo 4. Aug 2012 07:05

AW: HID-Komponente - Status der Buttons abfragen
 
Zitat:

Zitat von Breager (Beitrag 1176845)
Hallo,

habe das Problem nach langem Ausprobieren endlich gelöst. Bitte nutzt den Download im vorherigen Post nicht mehr. Ich würde den Download entfernen, kann jedoch meine alten Beiträge nicht mehr editieren. Ist vermutlich ein Fehler in meinem Browser?

Viele Grüße

nein, jeder eigene Beitrag kann innerhalb von 24h geändert werden, aber danach halt nur noch von einem Mod

Breager 4. Aug 2012 23:10

AW: HID-Komponente - Status der Buttons abfragen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Sir Rufo
nein, jeder eigene Beitrag kann innerhalb von 24h geändert werden

Danke Sir Rufo, dann muss ich mich diesbezüglich ans Team wenden.

Da ich immer wieder froh bin, wenn mir hier geholfen wird und ich im Internet keine entsprechende Beispiele für Delphi finden konnte, möchte ich Euch meine Lösung nicht vorenthalten. Letztendlich ist es doch recht einfach (wenn man weiss, wie es funktioniert ;-) ).

Das Programm im Anhang demonstriert, wie man mit der HID-Komponente der JVCL die Werte der Achsen eines Joysticks/Gamepads einlesen und überprüfen kann, welche Buttons gedrückt sind. Das Programm sollte mit jedem USB-Joystick/Gamepad funktionieren. Über Feedback diesbezüglich und Verbesserungsvorschläge würde ich mich natürlich freuen.

Im Moment ist das Programm auf 6 Achsen und 255 Buttons begrenzt (Ich habe keine Ahnung, wo die Limits bei einem Joystick liegen).

Vielleicht kann es jemand von Euch gebrauchen.

Viele Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:18 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz