AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte 'ne kleine HID-Komponente
Thema durchsuchen
Ansicht
Themen-Optionen

'ne kleine HID-Komponente

Ein Thema von himitsu · begonnen am 16. Nov 2010 · letzter Beitrag vom 18. Nov 2010
Antwort Antwort
Benutzerbild von himitsu
himitsu
Registriert seit: 11. Okt 2003
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.
Angehängte Dateien
Dateityp: 7z HIDCtrl 18.11.2010c.7z (603,5 KB, 241x aufgerufen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (18. Nov 2010 um 16:21 Uhr)
 
Benutzerbild von mschaefer
mschaefer

 
Delphi XE3 Enterprise
 
#2
  Alt 16. Nov 2010, 16:39
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
Angehängte Dateien
Dateityp: txt HIDTest_2010.txt (32,9 KB, 70x aufgerufen)
Martin Schaefer

Geändert von mschaefer (18. Nov 2010 um 18:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#3
  Alt 18. Nov 2010, 12:18
die werden wie im BMP im Anhang erkannt.
Welches Bild denn?

PS: Es gibt nun auch eine Textausgabe (siehe die 3 versteckten gleichen Buttons)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#4
  Alt 18. Nov 2010, 15:27
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).

Geändert von himitsu (18. Nov 2010 um 16:24 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:08 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