繁体   English   中英

为什么我无法通过GetInputReport从隐藏的USB设备获取报告

[英]why can't i get report from hid usb device by GetInputReport

在我的delphi应用程序中,我使用TJvHidDevice从USB设备写入和读取报告。

设备信息波纹管

Bus Type:        USB
Device Type:     Human Interface Device
Power Drawn:     100 milliamps @ 5.0 volts
Endpoint 0:      Type=CTL  Class=03 SubClass=00 Protocol=00 MaxPacket=8
Endpoint 1 OUT:  Type=INT  Class=03 SubClass=00 Protocol=00 MaxPacket=40
Endpoint 2 IN:   Type=INT  Class=03 SubClass=00 Protocol=00 MaxPacket=40
Hardware ID:     USB\Vid_0483&Pid_5750&Rev_0200
Data Read:       572 bytes
Data Written:    384 bytes
Utilization:     100%

它具有三个端点,当我向其发送报告时,它将输出带有端点2的报告。 我的密码是

报告结构

TReport = packed record
    ReportID: byte;
    Data: array[0..64] of byte;
end;

检出设备

procedure TfrmMain.HidDevsDeviceChange(Sender: TObject);
begin
    if HidDevs.CheckOutByID(FHidDev, USB_VID, USB_PID) then
    begin
        FHidDev.NumInputBuffers := 65;
        FHidDev.NumOverlappedBuffers := 65;
        FUsbDevice.Device := FHidDev;
        FHidDev.OnData:=OnRead;
    end;
end;

OnRead Enent

procedure TfrmMain.OnRead(HidDev: TJvHidDevice; ReportID: Byte; const Data: Pointer; Size: Word);
var I: Integer;
    Str: string;
begin
    Str := Format('RD %.2x  ', [ReportID]);
    for I := 0 to Size - 1 do
        Str := Str + Format('%.2x ', [Cardinal(PChar(Data)[I])]);
    AddLog('Received: ');
    SetLogColor(clPurple);
    AddLog(Str, False);
end;

我可以写报告

if not FDevice.SetOutputReport(FBuffer, FDevice.Caps.OutputReportByteLength) then

但是,在SetOutputReport之后什么也没有发生。如果我使用GetInputReport而不是OnRead ,则会出现错误:31,如果使用readFile ,则应用程序将挂断。 为什么,我该怎么办?

这个问题已经解决。 正是由于,发送给Application的报告的大小不正确,小于65的InputReportByteLength ,因此该应用程序不会收到任何信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM