Qt 呼叫USB HID裝置讀寫

2021-09-01 12:31:12 字數 1684 閱讀 1490

順便說一下,讀者在放好上面幾個檔案並操作完下面前三個步驟後再編譯一次,如果編譯正常通過並沒有報錯閃退,那就恭喜你,可以略過這一部分繼續測試後面的操作。由於我自己在做的時候始終會出現程式異常結束的提示,最後發現系統缺少乙個庫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的多...