hidkomponente使用读写hid设备(转)-pg电子平台

大家好!今天让小编来大家介绍下关于hidkomponente使用读写hid设备(转)的问题,以下是酷知号的小编对此问题的归纳整理,让我们一起来看看吧。

源:hidkomponente使用读写hid设备一瞥

hidkomponente 是delphi中使用的第三方hid控件库,可以检测、控制连接到电脑的hid设备。一般情况下多为u设备。 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 = u_vid) and hiddev.attributes.productid = u_pid) then
    begin
        addlogformat'设备已安装.【%s ; %s】', [hiddev.productname, hiddev.serialnumber]));
    end;

        在ondevicechange事件中checkout设备。

    if hiddevs.checkoutbyidfhiddev, u_vid, u_pid) then
    begin
        fhiddev.numinputbuffers := sizeoftreport);
        fhiddev.numoverlappedbuffers := sizeoftreport);
    end;

       什么是checkout?checkout有7个重载方法,可以查看jvhidcontrollerclass源码或帮助文件。此方法的功能是让你的应用程序控制设备。在checkout后,     tjvhiddevice示例中的fhiddev)将开启读取线程tjvhiddevicereadthread。tjvhiddevicereadthread线程用来读取tjvhiddevice中的report。可以看出     tjvhiddevice是异步操作的。既然使用了异步方式读取数据,那么查看tjvhiddevicereadthread的execute方法,可以看过,如果读取到数据,那么会调用     dodata方法,而此方法调用device的ondata属性事件。而ondata是被赋值为dataevent参看:procedure tjvhiddevicecontroller.setdevdataconst dataevent: tjvhiddataevent)),所以对于数据的接收读取),我们直接使用ondevicedata事件。          onremoval事件在hid设备被拔掉之后触发。这里我们要释放对设备的控件,checkin。

if hiddev.attributes.vendorid = u_vid) and hiddev.attributes.productid = u_pid) then
    begin
        if assignedfhiddev)) and not fhiddev.ispluggedin) then
        begin
            hiddevs.checkinfhiddev);
        end;
        fhiddev := nil;
        deviceenabled;
        addlog'设备已移除', lterror);
    end;

    基本上差不多了。再来说下写入数据。写入数据使用tjvhiddevice的writefile方法,当然,还有其它的方法。     writefilevar 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

以上就是小编对于hidkomponente使用读写hid设备(转)问题和相关问题的解答了,hidkomponente使用读写hid设备(转)的问题希望对你有用!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文链接:https://www.andon8.com/469544.html

网站地图