2017-08-03 1 views
0

Ich versuche, mit einem CDC-Gerät mit libusb kommunizieren. Der Code, den ich testen möchte, ist unten aufgeführt.libusb kann nicht CDC-Gerät unter Windows öffnen, aber es kann unter Linux

/* Initialize libusb 
*/ 
rc = libusb_init(NULL); 
if (rc < 0) { 
    fprintf(stderr, "Error initializing libusb: %s\n", libusb_error_name(rc)); 
    exit(1); 
} 

/* Set debugging output to max level. 
*/ 
libusb_set_debug(NULL, 3); 

/* Look for a specific device and open it. 
*/ 
devh = libusb_open_device_with_vid_pid(NULL, VENDOR_ID, PRODUCT_ID); 
if (!devh) { 
    fprintf(stderr, "Error finding USB device\n"); 
    goto out; 
} 

nicht: Ich nehme den Code aus https://github.com/tytouf/libusb-cdc-example/blob/master/cdc_example.c

ich das Projekt für Windows und Linux gebaut. In Linux funktionierte das Programm wie erwartet. Gerät wurde erfolgreich geöffnet. Aber in Windows kann Libusb das Gerät nicht öffnen. Immer Fehler "UNKNOWN_ERROR" zurückgeben (Fehlercode ist 0xFFFFFFFb)

Was könnte ein Fehler sein?

+0

haben Sie [eine Art Treiber] (http://www.libusb.org/wiki/windows_backend#DriverInstallation) auf Windows installiert? – BNT

+0

Vielen Dank für Ihre Antwort. Ja, ich installiere den Treiber, aber das Problem besteht immer noch. Außerdem kann ich von jedem Terminalprogramm aus auf das CDC-Gerät zugreifen. Windows enumarete das Gerät erfolgreich. – yrgat

+0

In welcher Windows-Version befindest du dich, welchen Compiler verwendest du und was ist die genaue Ausgabe deines Programms? und können Sie versuchen, es als Administrator auszuführen? – BNT

Antwort

0

Ich stieß heute auf das gleiche Problem (nur Windows).

Es stellt sich heraus, dass libusb nur mit den winUSB-Treibern funktioniert. Sie müssen sie explizit auf Ihrem Gerät installieren. Am einfachsten war es für mich, das zadig Installationsprogramm zu verwenden (siehe Link im Link in den obigen Kommentaren), um den USB Treiber zu entfernen und ihn durch den WinUSB zu ersetzen (für dieses eine Gerät). Nun wird das Gerät nicht als COM-Gerät aufgelistet, sondern als libusb32-Device/libusbKDevice oder nur USB-Device registriert.

Aber ich kann es in meiner Host-Anwendung öffnen.

Verwandte Themen