用VC 實現USB介面讀寫資料的程式

2021-10-05 15:33:47 字數 4428 閱讀 1328

使用乙個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 位...