作者jiannan1828 (我也不願意)
看板C_and_CPP
標題[問題] USB通訊問題
時間Sun Oct 16 20:17:50 2016
開發平台(Platform): (Ex: Win10, Linux, ...)
Windows 7 and Windows 10
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
GCC (CodeBlock)
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
Setupapi.dll, hid.dll, kernal32.dll
問題(Question):
請問各位前輩, 小弟目前需要與USB HID通訊,
看了幾本實作的書以及google的資料, 得到以下兩種實作方法:
1. call Setupapi.dll, hid.dll, kernal32.dll
2. 使用libusb-win32
1. 想請問各位有使用經驗的前輩是否有較推薦的方法?
2. 目前我呼叫SetupDiEnumDeviceInterfaces這個function, 第一關就直接沒有回應,
想請教各位前輩, 能否提點小弟錯誤發生的狀況
https://mega.nz/#!EhQl0ZrI!KUdcuqIVvGzi8ab1EQLRALTD-qwYQ03PFYMsn553QhA
https://mega.nz/#!hgRmxb7R!ZK_DHhQCgOdc8DprNuh2yLruojJBEBPALuVFJ9OpNZM
餵入的資料(Input):
預期的正確結果(Expected Output):
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版)
int main(int argc, char* argv[]) {
printf("Test Win32 StdAPI\r\n");
int index;
HDEVINFO deviceInfo;
GUID *GUID_CLASS_USB_HOST_CONTROLLER;
PSP_DEVICE_INTERFACE_DATA deviceInfoData;
PSP_DEVICE_INTERFACE_DETAIL_DATA deviceDetailData;
for( index=0;
pm_SetupDiEnumDeviceInterfaces( deviceInfo,
0,
GUID_CLASS_USB_HOST_CONTROLLER,
index,
deviceInfoData);
index++ )
{
//pm_GlobalFree(deviceDetailData);
}
return 0;
}
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.25.2.29
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1476620286.A.B11.html
1F:→ stupid0319: GetLastError看看 10/16 20:41
2F:推 petercoin: 去抓hidapi,裡面的enum那部分看一下 10/16 21:08
目前遇到的問題是CRC
https://mega.nz/#!JpJyQCQY!FjMvOEyuAyWMduv4fmDh0gxcFQeFgnh7JSbapQCPiIA
程式碼如下:
char fodata[8] = {0};
ULONG length = 8+1;
if(!HidD_GetFeature(hidINTERFACE, fodata, length)) {
printf(" XXX Could not write feature! Error Code = %d\n", GetLastError());
delete OutputReport;
return false;
}
請問各位前輩建議方向, 感謝
※ 編輯: jiannan1828 (220.128.199.139), 10/18/2016 15:58:55
3F:推 stupid0319: 你buffer有8個char,下一行怎麼會寫9個,這樣會溢位吧 10/18 16:39
長度改成九個, 仍然返回23, 無法送出,
看起來跟他無關
※ 編輯: jiannan1828 (220.128.199.139), 10/18/2016 18:58:00
解決了
感謝S大, 發現是傳入長度不符, 因此發送失敗
感謝
※ 編輯: jiannan1828 (220.128.199.139), 10/18/2016 19:23:14