使用乙個guidguidhid_1查詢並開啟乙個usb裝置
extern
"c"int pascal searchusbdevice()
// 取得乙個該guid相關的裝置資訊集控制代碼
hdevinfoset =
::setupdigetclassdevs
((lpguid)
&guidhid_1,
//guid_class_usb_device, // class guid
null
,// 無關鍵字
null
,// 不指定父視窗控制代碼
digcf_present | digcf_deviceinte***ce)
;// 目前存在的裝置
// 失敗...
if(hdevinfoset == invalid_handle_value)
// 申請裝置介面資料空間
ncount =0;
bresult = true;
for(i=
0; i<
34; i++
) sp_device_inte***ce_data ifdata;
// 裝置序號=0,1,2... 逐一測試裝置介面,到失敗為止
while
(bresult)
pdetail =
(psp_inte***ce_device_detail_data)
::globalalloc
(lmem_zeroinit, predictedlength)
; pdetail-
>cbsize =
sizeof
(sp_device_inte***ce_detail_data)
; bresult =
setupdigetinte***cedevicedetail
( hdevinfoset,
// 裝置資訊集控制代碼
&ifdata,
// 裝置介面資訊
pdetail,
// 裝置介面細節(裝置路徑)
predictedlength,
// 輸出緩衝區大小
&requiredlength,
// 不需計算輸出緩衝區大小(直接用設定值)
null);
// 不需額外的裝置描述
if(bresult)
ch[17]
='\0';if
(strcmp
(ch,
"vid_0471&pid_0666")==
0)//比較版本號,防止意外出錯
write_os.hevent =
createevent
(null
,// no security
true,
// explicit reset req
false,
// initial event reset
null);
// no nameif(
null
== write_os.hevent)
husb=
createfile
(pdetail-
>devicepath,
//&guidhid_1,//
generic_read|generic_write,
file_share_read|file_share_write,
null
, open_existing,
file_attribute_normal/*|
,null);
if(husb !=
null
)while
(id[i-1]
!='#');
id[i-1]
='\0'
;for
(j=0
; j<
34; j++)}
closehandle
(husb)
; ncount++
;// break;}}
// 比較驅動版本
}// 比較作業系統版本
else
write_os.hevent =
createevent
(null
,// no security
true,
// explicit reset req
false,
// initial event reset
null);
// no nameif(
null
== write_os.hevent)
husb=
createfile
(pdetail-
>devicepath,
//&guidhid_1,//
generic_read|generic_write,
file_share_read|file_share_write,
null
,open_existing,
file_attribute_normal/*|
,null);
if(husb !=
null
)closehandle
(husb)
;ncount++
;// break;}}
}}}// 釋放裝置介面資料空間
::globalfree
(pdetail)
;// 關閉裝置資訊集控制代碼
::setupdidestroydeviceinfolist
(hdevinfoset)
;idevicecount = ncount;
return ncount;
}// 寫
bool writestr
(char
*buf,
int buflen,
int index)
div_result =
div(buflen,58)
;if(div_result.rem ==0)
else
for(i=
0; i)else
}else
sendpacket[0]
=0x13
;sendpacket[1]
=3+len;
sendpacket[2]
=0x01
;sendpacket[3]
= packet*
16+i+1;
memcpy
(sendpacket+
4, buf+
(i*58
), len)
;for
(j=0
;j3;j++
)sendpacket[len+4]
=(char
)xorcode;
sendpacket[len+5]
=0x23
;purgecomm
(m_gphdcom[index]
,purge_rxclear|purge_txclear)
;// sleep(10);
fwritestat =
writefile
(m_gphdcom[index]
, sendpacket, len+6,
&ret,
null);
if(!fwritestat)
}else
return false;}}
if(i != packet-1)
}}return true;
}// 讀
intreadstr
(char
*buf,
int nmaxlength,
int index)
// only try to read number of bytes in queue
clearcommerror
(m_gphdcom[index]
,&dwerrorflags,
&comstat)
;//dwlength = min( (dword) nmaxlength, comstat.cbinque ) ;
dwlength=nmaxlength;
if(dwlength >0)
}}else
// end-----if (getlasterror() == error_io_pending)}}
// end-----if (!freadstat)
}// end-----if (olap==true)
else
}purgecomm
(m_gphdcom[index]
,purge_rxclear|purge_txclear);}
}return dwlength;
}
用VC 實現USB介面讀寫資料的程式
用vc 實現usb介面讀寫資料的程式 收藏 用vc 實現usb介面讀寫資料的程式 使用乙個guidguidhid 1查詢並開啟乙個usb裝置 extern c int pascal searchusbdevice 取得乙個該guid相關的裝置資訊集控制代碼 hdevinfoset setupdige...
用VC對USB口的開啟讀寫操作
usb口的開啟讀寫操作 程式的通用性是很好的,不同的usb只需修改不同的guid 至於除錯,你怎麼除錯串列埠程式就怎麼除錯usb程式,大小方面一次性傳送和接受資料不大於64個位元組.這個可能和usb裝置有關 使用乙個guidguidhid 1查詢並開啟乙個usb裝置 extern c int pas...
VC HIDAPI實現USB資料讀寫
目錄 引入hidapi 主要函式 初始化和退出 hid enumerate hid open 讀資料寫資料 hidapi是乙個開源的c語言實現的usb通訊庫,支援linux,mac,windows系統,但是也有一段時間沒有更新了。在windows系統上的實現是依賴winusb實現的 github 位...