1

指定したパケット (5 バイト) を USB ゼロ エンドポイントに送信する必要があります。私のデバイスはcomポートとしてインストールされています。WinUSB関数を使用してUSBデバイスにアクセスする方法のサンプルを使用 します

最初の質問: Ports クラスのデバイスを列挙すると、デバイスが見つかりません。私のデバイスは何らかの理由で Raw データ クラスにあります。どうすればいいの?

2 番目の質問: WinUsb_Initialize() がエラー 87(INVALID PARAMETER) を返すのはなぜですか。

//GUID InterfaceClassGuid = {0x4D36E978, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18}; //Ports class
GUID InterfaceClassGuid = {0xA5DCBF10, 0x6530, 0x11D2, 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED}; //Raw data

BOOL GetDeviceHandle (GUID guidDeviceInterface, PHANDLE hDeviceHandle){
...
//my code
WCHAR DeviceIDToFind[] = L"vid_xxxx&pid_xxxx";
// lpDevicePath is "\\?\usb#vid_xxxx&pid_xxxx#833435204e3334355f302083a5ada5e0a0e2aee0208faee1e2a0a2aaa0#{a5dcbf10-6530-11d2-901f-00c04fb951ed}"
WCHAR* res = wcsstr(lpDevicePath, DeviceIDToFind);
if (res!=NULL)
    break; //find our device
...
*hDeviceHandle = CreateFile (
    lpDevicePath,
    GENERIC_READ | GENERIC_WRITE,
    FILE_SHARE_READ | FILE_SHARE_WRITE,
    NULL,
    OPEN_EXISTING,
    FILE_FLAG_OVERLAPPED,
    NULL);
    err = GetLastError();// err is 0
...
}
...
WINUSB_INTERFACE_HANDLE h = INVALID_HANDLE_VALUE;
BOOL bResult = WinUsb_Initialize(hDeviceHandle, &h);
err = GetLastError(); // err is 87 INVALID PARAMETER
4

1 に答える 1

1

デバイスのベンダー ID と製品 ID を設定する必要があります。

コード スニペットに情報が含まれています。

WCHAR DeviceIDToFind[] = L"vid_xxxx&pid_xxxx";

このコードには、16 進数であるベンダー ID ( vid_xxxx) と製品 ID ( pid_xxxx) がありxxxxます。

デバイスに vid 3259 と pid 1001 がある場合、次DeviceIDToFindのように記述します。

WCHAR DeviceIDToFind[] = L"vid_3259&pid_1001";

USBの仕様をよく理解しておく必要があります。乾杯。

于 2013-01-26T00:40:02.410 に答える