2012-05-15 161 views
1

我需要發送指定數據包(5字節)到USB零端點。 我的設備安裝爲com端口。 我用樣品 How to Access a USB Device by Using WinUSB Functions發送數據包到USB端點

第一個問題: 我找不到我的設備,如果枚舉端口類的設備。 我的設備出於某種原因在原始數據類中。 這怎麼可能?

第二個問題:爲什麼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 
+0

我找到了答案[here](http://www.microchip.com/forums/tm.aspx?high=&m=653017&mpage=1)。 – user1025874

回答

1

您必須設置設備的供應商ID和產品ID。

你的代碼片段有信息。

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

這個碼具有供應商ID(vid_xxxx)和產品ID(pid_xxxx),其xxxx是十六進制數字。

如果您的設備有vid 3259和pid 1001,則會像下面那樣編寫DeviceIDToFind

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

你必須對USB規範有很多瞭解。 乾杯。

+0

歡迎!只是一個提示:代碼格式化在可讀性方面有很大的不同。反引號(通常在tab鍵之上)就像小代碼片段的引號。對於整行代碼,請選擇行並按下「{}」按鈕。 – FakeRainBrigand