Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   'ne kleine HID-Komponente (https://www.delphipraxis.net/156006-ne-kleine-hid-komponente.html)

himitsu 16. Nov 2010 14:34


'ne kleine HID-Komponente
 
Liste der Anhänge anzeigen (Anzahl: 1)
Seit 'ner Weile erstelle ich mir ja 'ne kleine HID-Komponente. (Human Interface Devices / Hardware Interface Device)

Ja, es gibt z.B. eine nette Komponente in den JEDI (damals noch von Robert Marquard),
aber ich bastel gern und abgesehn davon nutze ich z.B. einen anderen Input-Kanal.

Die Komponente sollte aktuell unter dem Windows Bluetooth-Stacks und auch mit denen von z.B. BlueSoleil funktionieren.
(leider unterstützen Beide jeweils nur eine der möglichen Schnittstellen WriteFile/HidD_SetOutputReport, obwohl angeblich Beides gehn soll :? )

Der Input wird synchron über WM_INPUT (RawInputDevices) geholt.
Dagegen bei den JEDIs über Threads und asynchronen ReadFile, je Device.
Wobei manuelle ReadFile/HidD_GetInputReport auch unterstützt werden.

Gerade hab ich die HID-Komponente auch aufgeteils, da alles in einem langsam zuviel wurde, vorallem da demnächst noch 'ne Bluetooth-Verwaltung mit rein soll.

Es gibt also:
(die Controller sind als Programmglobale[EXE] Singleton ausgelegt)

* den TMessageController, welcher die Windows Messages verwaltet

* den TRawInputController, welcher für WM_INPUT und Co. verantwortlich ist,

* demnächst noch (hoffentlich) den TBluetoothController,

* den THIDController, über wo alles zusammenläuft und wo die HID-Devices verwalter werden,

* man kann sich einige THIDDevice vom Controller besorgen, welche jeweils ein HID-Device kapseln,

* und das THIDDeviceEx, welches auch als VCL-Komponente nutzbar ist.
Bei diesem bestellt man quasi ein THIDDevice (wird intern verwalter), hat schonmal die selbe Schnittstelle und wenn ein passendes Device verfügbar ist, dann wird es intern verbunden und eine Weiterleitung zum THIDDeviceEx eingerichtet.

Ein THIDDevice ist halt nur gültig, mit einem existierenden/registrierten Gerät dahinter.







Das Ganze ist noch nicht ganz fertig, da ich die Conroler nun aufgeteilt hab, muß so Einiges nochmal geprüft und vorallem die Callbacks neu verbunden werden.

Vorallem die Callbacks des HIDControllers, der HIDDevices und der Demoanwendung sind davon betroffen. (den Rest hab ich jetzt hoffentlich fertig)



Warum ich das jetzt aber nun doch schon veröffentliche:
- erstmal hab ich das Ganze komplett vom Wiimote-Projekt abgetrennt und kann es nun als Einzelprojekt fortführen
- dann wollte ich mal fragen, ob die Schnittstellen so OK sind
- und vorallem brauch ich ein bissl Hilfe (aktuell beim Bluetooth)

Könnte mal bitte jemand prüfen,
> ob alle HID-Devices erkannt werden, wie z.B. der WiiController, normale USB-Game-Controller, einige Mäuse/Tastaturen mit Sonderfunktionen usw.
> ob die Infos zu den Devices halbwegs korrekt sind
- die IndexedString (HIDInfo > Strings/Languages) wurden deaktiviert, da sie gerne mal zu einem BlueScreen führen, vorallem unter BlueSoleil
> Eventuell auch mal in "TopLevelCollection (Feature) / In- && Output" schauen, ob da was reinkommt.
> und ganz Wichtig, werden alle BlueToothgeräte in dem rosa Memo aufgelistet und wenn ja wo?
- leider gibt es kaum Informationen und vorallem Codes/Erfahrungsberichte zu den Bluetooth-APIs, aber ich hoffe mal, daß unter "BluetoothFindFirstDevice 15" alle auftauchen,
so daß ich diese Einstellung nutzen kann und dann "nur" noch rausbekommen muß, wie ich eine Verbindung zum zugehörigen HID-Device.

[add] ja, das Controler wird demnächst in Controller umbenannt. :oops:

mschaefer 16. Nov 2010 16:39

AW: 'ne kleine HID-Komponente
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Himitsu,

habe hier eine Laptec Tastatur und Maus, die werden wie im BMP im Anhang erkannt.
Das die Mause optical ist, hat Dein Programm auch richtig erkannt. Ansonsten findet er kein Blauzahn, was eben am Fehlen dieses liegt.


PS: Das Du nur als Hobbyprogrammierer unterwegs bist, kann doch nur daran liegen, dass Du einen bessren Job hast...

PPS: Uhps Ich habe "Bildschwund" , deshalb kommt jetzt der Textmode im Anhang.

Grüße

himitsu 18. Nov 2010 12:18

AW: 'ne kleine HID-Komponente
 
Zitat:

Zitat von mschaefer (Beitrag 1061974)
die werden wie im BMP im Anhang erkannt.

Welches Bild denn? :lol:

PS: Es gibt nun auch eine Textausgabe (siehe die 3 versteckten gleichen Buttons)

himitsu 18. Nov 2010 15:27

AW: 'ne kleine HID-Komponente
 
Da es vor Kurzem noch eine Anfrage bezüglich D7 gab,
hab ich mir die Sache mit der Abwärtskompatibilität nochmal angeguckt.
So wie es aussieht, läßt es sich nun auch unter D7 kompilieren und mit etwas Glück auch den Zwischenversionen.

[add]
So. das RawInput läuft nun auch unter ANSI.
(siehe Dateianhang "C" Post 1)

http://msdn.microsoft.com/en-us/library/ms645597.aspx
Vonwegen "RIDI_DEVICENAME: For this uiCommand only, the value in pcbSize is the character count (not the byte count).".
Unter Ansi ist das der ByteCount des Unicodestring und unter Unicode ist es der CharCount (bzw. der ByteCount des Ansistring). :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:55 Uhr.

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