HIDKomponente使用讀寫Hid裝置一瞥

2022-02-07 09:52:57 字數 2914 閱讀 6637

hidkomponente 是delphi中使用的第三方hid控制項庫,可以檢測、控制連線到電腦的hid裝置。一般情況下多為usb裝置。

hidkomponente的使用實際上很簡單,只是因為第一次使用,遇到些問題。它的demo很豐富,很實用。

要使用hidkomponente庫,只需要安裝hidcontroller.dpk,並且在單元中新增引用jvhidcontrollerclass。

使用示例:

在窗體上放置乙個tjvhidcontroller。我們要用到的事件有:

onarrival

ondevicechange

ondevicedata

onremoval

其它事件,這裡就不使用了。當然,這是有前提的:就是你要確保你傳輸的資料的正確性,也就是不能出現無效資料。

在hidkomponente庫中tjvhiddevice表示乙個device,即乙個hid裝置。通過此物件你可以獲得裝置的詳細資訊。比如,

hiddev.attributes.vendorid表示裝置的 vid,

hiddev.attributes.productid表示裝置的 pid等等

所以在onarrival事件中,可以指定我們需要的裝置

if (hiddev.attributes.vendorid = usb_vid) and (hiddev.attributes.productid = usb_pid) then

begin

addlog(format(

'裝置已安裝.【%s ; %s】

', [hiddev.productname, hiddev.serialnumber]));

end;

在ondevicechange事件中checkout裝置。

if hiddevs.checkoutbyid(fhiddev, usb_vid, usb_pid) then

begin

fhiddev.numinputbuffers :=sizeof(treport);

end;

什麼是checkout?checkout有7個過載方法,可以檢視jvhidcontrollerclass原始碼或幫助檔案。此方法的功能是讓你的應用程式控制裝置。在checkout後,

tjvhiddevice(示例中的fhiddev)將開啟讀取執行緒tjvhiddevicereadthread。tjvhiddevicereadthread執行緒用來讀取tjvhiddevice中的report。可以看出

tjvhiddevice是非同步操作的。既然使用了非同步方式讀取資料,那麼檢視tjvhiddevicereadthread的execute方法,可以看過,如果讀取到資料,那麼會呼叫

dodata方法,而此方法呼叫device的ondata屬性事件。而ondata是被賦值為dataevent(參看:procedure tjvhiddevicecontroller.setdevdata(const dataevent: tjvhiddataevent)),所以對於資料的接收(讀取),我們直接使用ondevicedata事件。

onremoval事件在hid裝置被拔掉之後觸發。這裡我們要釋放對裝置的控制項,checkin。

if (hiddev.attributes.vendorid = usb_vid) and (hiddev.attributes.productid = usb_pid) then

begin

if (assigned(fhiddev)) and (not fhiddev.ispluggedin) then

begin

hiddevs.checkin(fhiddev);

end;

fhiddev := nil

; deviceenabled;

addlog(

'裝置已移除

', lterror);

end;

基本上差不多了。再來說下寫入資料。寫入資料使用tjvhiddevice的writefile方法,當然,還有其它的方法。

writefile(var report; towrite: dword; var byteswritten: dword)

第乙個引數為位元組陣列,一般設定為65位元組。如:

treport = packed

record

reportid: byte;

data:

array[0..64] of

byte;

end;

reportid一般為0。

第二個引數towrite為需要寫入的資料長度。一般使用device.caps.outputreportbytelength

第三個引數byteswritten為實際寫入的位元組資料。一般忽略此值。

寫入之後就是讀取,使用tjvhiddevice的readfile(或其它方法)讀取與tjvhidcontroller的ondevicedata讀取的區別是,ondevicedata事件讀取到的資料忽略第乙個位元組,即reportid。

若同時使用readfile(或其它方法)與ondevicedata,那麼,首先是readfile然後是ondevicedata。readfile方法進行一次讀取,而ondevicedata會不斷的將資料讀取出來。如果

傳送乙個命令之後返回的report太大(大於設定的 inputreportbytelength),那麼最好是使用ondevicedata事件讀取資料。

注意事項:

在進行資料通迅時需要定義report的大小,此大小由裝置提供。定義之後在輸入或輸出資料時一定要使用此大小的資料報,不然,tjvhidcontroller或tjvhiddevice在讀取資料時就會出錯,無法讀取到有效資料。

hid裝置資料檢測工具bus hound

使用GraphEdit使用

1 註冊元件。其實乙個filter就是乙個com元件,所以使用之前需要註冊,可以有兩種方法對元件進行註冊。1.直接使用命令。命令列下輸入 regsvr32 hqtlystd.ax 編譯之後你會在工程目錄下的debug中找到hqtlystd.ax,這個就是要用的filter 即可註冊成功。2.vc6....

MySQL使用學習使用 mysql學習使用

1 mysql學習 1 安裝 ubuntu下直接安裝 apt get install mysql server 2 檢查伺服器是否啟動 sudo netstat tap grep mysql,如果啟動成功,出現以下資訊 tcp00localhost.localdomain mysql listen ...

學習使用CSDN markdown使用

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...