順便說一下,讀者在放好上面幾個檔案並操作完下面前三個步驟後再編譯一次,如果編譯正常通過並沒有報錯閃退,那就恭喜你,可以略過這一部分繼續測試後面的操作。由於我自己在做的時候始終會出現程式異常結束的提示,最後發現系統缺少乙個庫msvcr100d.dll,到網上找了乙個放到系統下就正常了,如果讀者在測試的時候也出現程式異常結束的提示,可以按照如下操作判斷自己是否也缺少庫(當然也有可能和我缺少的不一樣):
標頭檔案新增。
#include "hidapi.h"
在.pro檔案最後新增庫,pro_file_pwd
表示.pro所在路徑hidapi就是庫名。
libs+=-
l$$_pro_file_pwd_/
-lhidapi
初始化呼叫,hidapi.h中說得比較清楚,這一步不是必要的,因為在hid_enumerate() 和hid_open() 這些函式裡面也會呼叫。
int res;
res =
hid_init()
;
開啟指定hid裝置,第乙個引數是裝置的vid,第二個引數是裝置的pid,第三個是裝置的序列號,一般就指定前兩個引數第三個引數填0就可以。返回的類似檔案操作的控制代碼,通過它來讀寫。hid_device *handle;
handle =
hid_open
(0x1345
,0x4004
,null
);
裝置的vid和pid可以從裝置管理器裡面查詢,注意的是這裡看到的是16進製制:
讀資料,hid_read()返回值為實際讀取到的資料長度,handle是通過hid_open() 得到的。讀取到的資料就放在buf裡面,這幾行可以放到執行緒中,根據長度判斷是否有獲取到資料再來處理。
int res=0;
unsigned char buf[
128]
;res =
hid_read
(handle, buf,
128)
;
寫資料,這裡需要注意的是陣列的第乙個位元組必須是裝置的report id,如果只支援乙個那麼就填0,比如需要傳送3個位元組,0x01,0x02,0x03,那麼就需要按照如下操作:int res;
// 如果返回-1表示傳送失敗
unsigned char buf[4]
; buf[0]
=0x00
;// 這就是report id
buf[1]
=0x01
; buf[2]
=0x02
; buf[3]
=0x03
; res =
hid_write
(handle, buf,4)
;
VC 識別USB HID裝置
遇到問題 和論壇中一樣,不過前輩是2007年遇到的。有乙個usb裝置,在裝置管理器中顯示為乙個磁碟驅動器,但是它是沒有碟符的,在ondevicechange中,當這個裝置插入或者拔插的時候產生多個dbt devnodes changed,而dbt devicearrival,dbt devicere...
C 訪問USB HID 裝置方法二
依次使用一下函式 1 static public extern void hidd gethidguid ref system.guid hidguid 獲取hid的全域性guid 2 static public extern intptr setupdigetclassdevs ref syste...
STM32 USB HID裝置驅動分析
stm32 usb hid裝置驅動分析 daniellee 2014 9 29 一 usb hid的裝置描述符分析 usb hid的裝置描述符用以下結構定義 device property device prop device property 這是裝載了多個函式指標的結構體,用於統一管理usb的多...