Forum: PC-Programmierung LibUsbDotNet


von Andreas S. (andi-dt)


Lesenswert?

Hallo Zusammen,

ich kämpfe gerade mit der LibUsbDotNet v. 2.2.8 und habe einige Fragen 
zu den Grundlagen.

Das Ziel des Projektes ist die Integration eines PS2 BuzzControllers in 
ein eigenes Programm. Ich möchte möglichst viel selbst machen um mal 
wieder ins Programmieren zu kommen. Nutzen möchte ich hierzu C# mit der 
LibUsbDotNET. Ich habe zwar einige Beispielprojekte gefunden, würde es 
aber lieber einmal selbst versuchen. Außerdem möchte ich wirklich 
verstehen wie der Verbindungsaufbau durch die LibUsb funktioniert.

Unklar ist mir aktuell, wie ich einen Gerätetreiber durch den LibUsb 
-Treiber ersetzen kann. Der Windows (10) Gerätemanager lässt dies nicht 
zu. Den Treiber habe ich mit dem durch LibUSB mitgelieferten InfWizzard 
erstellt. Die Einbindung wollte ich dann über den Gerätemanager 
durchführen. "Rechtsklick" auf das Gerät und Treiber aktualisieren. 
Allerdings haut das überhaupt nicht hin. Ist das Vorgehen, den 
Systemtreiber durch den von LibUSB zu ersetzen, denn an dieser Stelle 
überhaupt korrekt?

Die Erstellung des Treibers lief problemlos ab. Nach dem Start des 
InfWizzard habe ich den Haken bei "Driverless" entfernt und schon wurden 
sämtliche USB-Geräte, die verbunden sind, gefunden. Ich denke das zeigt 
das die Lib unter Win10 funktioniert.

Die Einbindung der Lib (DLL) in VisualStudio  hat ebenfalls gut 
funktioniert. Allerdings liefert mir die Funktion

"UsbDeviceFinder MyUsbFound = new UsbDeviceFinder(vid, pid);"

kein einziges Gerät zurück. Kann dies ggf. an vid und pid liegen? Oder 
liegt hier das Problem, dass die Geräte noch den Windows-Treiber und 
nicht den der LibUSB nutzen? Der Methoden Aufruf der Lib benötigt int 
Werte, der Gerätemanager liefert mir Hex-Werte. Die Hex-Werte habe ich 
mit folgendem Aufruf in int-Werte konvertiert.

 int vid =
Int32.Parse(vid_hex, System.Globalization.NumberStyles.HexNumber);
 int pid =
Int32.Parse(pid_hex, System.Globalization.NumberStyles.HexNumber);

Das müsste ja passen. Die Werte vid_hex und pid_hex sind vom Typ String. 
Die Werte lauten: vid="557" pid="2213" (in HEX). Als Dezimalwerte 
erhalte ich vid=1367 und pid=8723. Das müsste ja auch passen. Trotzdem 
findet die Funktion das Gerät leider nicht.

Habt Ihr einen Tip wie ich den Windows-Treiber durch den LibUsb-Treiber 
ersetzen kann?

Viele Grüße,
Andreas

P.S. In dem Beitrag: 
http://stackoverflow.com/questions/25714930/libusbdotnet-no-devices-found-when-calling-usbdevice-alldevices 
tritt ein ähnliches Problem auf. Allerdings ist mir nicht ganz klar wie 
es nun gelöst wurde.

: Bearbeitet durch User
von Jim M. (turboj)


Lesenswert?

Andreas S. schrieb:
> kein einziges Gerät zurück. Kann dies ggf. an vid und pid liegen?

Möglich. Mal im Gerätemanager nachgeschaut?

> Oder
> liegt hier das Problem, dass die Geräte noch den Windows-Treiber und
> nicht den der LibUSB nutzen

Auch möglich. Für HID Geräte würde ich unter Windoof niemals LibUSB 
einsetzen wollen, da das nur unnötiges Treiberchaos verursacht. An HID 
Geräte kann man auch ohne Treiber Daten senden (genauer: Mit dem Windows 
Treiber selbst). Dafür gibts auch Beispielcode zu finden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.