HIDKomponente使用读写Hid设备一瞥

HIDKomponente使用读写Hid设备一瞥

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);
        FHidDev.NumOverlappedBuffers := 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

时间: 2024-10-25 07:54:30

HIDKomponente使用读写Hid设备一瞥的相关文章

HIDKomponente使用读写Hid设备(转)

源:HIDKomponente使用读写Hid设备一瞥 HIDKomponente 是delphi中使用的第三方Hid控件库,可以检测.控制连接到电脑的Hid设备.一般情况下多为usb设备. HIDKomponente的使用实际上很简单,只是因为第一次使用,遇到些问题.它的demo很丰富,很实用. 要使用HIDKomponente库,只需要安装HidController.dpk,并且在单元中添加引用JvHidControllerClass. 使用示例:     在窗体上放置一个TJvHidCont

C# 访问USB(HID)设备

原文:C# 访问USB(HID)设备 二话不说,直接给代码,如果您真想做这方面的东西,还是稍微研究下,没有现成的好类用,就需要自己了解其原理 //引用空间 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using S

stm32 USB hid设备与PC进行双向数据传输时PC不识别USB设备

stm32 USB hid设备与PC进行双向数据传输时PC不识别USB设备,或者开始时识别,拔出后再插入就没有反应了,就连鼠标U盘也没有反应. 我的问题是,我安装了VMware虚拟机,并进行USB设备的分配,使得虚拟机系统也识别USB设备. 所以,解决问题的办法如下: 在<属性>中选择禁用. 然后把下面的VMware Workstation Server 也禁用了.重启电脑就OK了.

Windows与自定义USB HID设备通信说明.

1 .   所使用的典型 Windows API CreateFile ReadFile WriteFile 以下函数是 DDK 的内容: HidD_SetFeature HidD_GetFeature HidD_SetOutputReport HidD_GetInputReport 其中, CreateFile 用于打开设备: ReadFile . HidD_GetFeature . HidD_GetInputReport 用于设备到主机方向的数据通信: WriteFile . HidD_Se

Android应用程序无法读写USB设备的解决方法

如果android系统中的API或者apk无法读写usb设备,可能是没有添加读写usb的权限,需要按照如下方法进行设置: 1. 在android.hardware.usb.host.xml文件中添加如下内容 <permissions> <featurename="android.hardware.usb.host"/> </permissions> 2. 在tablet_core_hardware.xml文件中添加如下内容 <featurena

[BLE--HID]USB HID设备类定义

简述 HID设备,即人机交互设备,常见的有鼠标,键盘,游戏手柄,等等.一般有线方式都是通过USB连线连接到机器设备,作为用户输入设备.在蓝牙技术中,HID设备的接入就是无线的了.不过HID的相关定义当然还是一样的,不然设备驱动,兼容等问题都会有很多麻烦了.蓝牙中有HID, HOGP profile,但是只是在蓝牙数据通信上做的规范,HID具体含义相关,还是需要看USB相关的HID文档. USB设备类? USB设备可以在启动时,或者是在之后的连接状态下,都能够被主机进行配置.USB设备种类是非常多

[Android] hid设备按键流程简述

hexdump /dev/hidraw0就能看到usbhid设备传输过来的裸流 如:按下Input键 003ae60 0000 0096 8000 006b 0000 0000 0000 0000 * 003aea0 0000 0086 8000 0000 0000 0000 0000 0000 * 前面的估计是码流头(003ae60),还有按下(0096),松开(8000)等信息,识别按键有效信息是(006b) 006b其实是索引值,会在下表中寻找键值发送给Android,如:6b对应186

C# 访问USB(HID)设备方法 (转)

依次使用一下函数: 1.static public extern void HidD_GetHidGuid (ref System.Guid HidGuid); 获取HID的全局GUID 2.static public extern IntPtr SetupDiGetClassDevs(ref System.Guid ClassGuid, string Enumerator, int hwndParent, int Flags); 获取所有hid句柄 3.static public extern

HID 设备(鼠标) report descriptor解析

1.报表描述符是报表描述项目(Item)的集合: 2.项目有长项目与短项目,他们的数据格式不同:(HID class definition P36) 短项目数据格式: 3.bTag bType信息表: 4.例如: /*鼠标*/ 0x05, 0x01, 0x09, 0x02, 0xa1, 0x01, /*第一个字节数据*/ 0x85, HID_MOUSE_ID, // 4 /*第二个字节数据*/ 0x09, 0x01, 0xa1, 0x00, 0x05, 0x09, 0x19, 0x01, 0x2