晓飛飛 发表于 2024-4-7 11:30:20

用Delphi的同学可以用JvHidController控件可以开发,相对比较简单

procedure TForm1.HIDctrl1DeviceData(HidDev: TJvHidDevice; ReportID: Byte;
const Data: Pointer; Size: Word);
var
rcv_data :array of Byte;
rcv_str:string;
begin
    SetLength(rcv_data,Size+2);
    SetLength(rcv_str,Size+2);
   if (HidDev.Attributes.VendorID = USB_VID) and (HidDev.Attributes.ProductID = USB_PID) then
    begin
      mmo1.Lines.Add(Format('收到数据.【%s ; %s】', ));
      move(Data^,pchar(@rcv_data)^,Size);
      move(Data^,pchar(@rcv_str)^,Size);
      mmo1.Lines.Add(StrToHexStr(rcv_str));
    end;
end;
procedure TForm1.btn1Click(Sender: TObject);
var
I: Integer;
Written: Cardinal;
ToWrite: Cardinal;
Str: string;
Err: DWORD;
Send:TReport;
begin
if Assigned(a) then
begin
    Send.ReportID := $00;
    Send.Data:= $00;
    Send.Data:= $CC;
    ToWrite := a.Caps.OutputReportByteLength;
    if not a.WriteFile(Send, ToWrite, ToWrite) then
    begin
      mmo1.Lines.Add('发送失败');
    end
end;
end;procedure TForm1.HIDctrl1Arrival(HidDev: TJvHidDevice);
begin
    if HidDev.ProductName='STC USB Device' then
    begin
      mmo1.Lines.Add(Format('设备连接成功.【%s ; %s】', ));
      mmo1.Lines.Add(Format('VID:%.4x/PID:%.4x', ));
      USB_VID:=HidDev.Attributes.VendorID;
      USB_PID:=HidDev.Attributes.ProductID;
      a := HidDev;
    end;
end;procedure TForm1.HIDctrl1Removal(HidDev: TJvHidDevice);
begin
    if (HidDev.Attributes.VendorID = USB_VID) and (HidDev.Attributes.ProductID = USB_PID) then
    begin
      if (Assigned(a)) and (not a.IsPluggedIn) then
      begin
            HIDctrl1.CheckIn(a);
      end;
      a := nil;
      //DeviceEnabled;
       mmo1.Lines.Add('设备已移除');
    end;
end;



xiangzichen 发表于 2024-4-7 11:49:04

晓飛飛 发表于 2024-4-7 11:30
用Delphi的同学可以用JvHidController控件可以开发,相对比较简单

Delphi可以凑合用一下,我试试看,我主要想把上位机这里封装成dll,这样方便提供给客户.即便不提供给客户,自己用也方便.

晓飛飛 发表于 2024-4-7 11:50:33

xiangzichen 发表于 2024-4-7 11:49
Delphi可以凑合用一下,我试试看,我主要想把上位机这里封装成dll,这样方便提供给客户.即便不提供给客户,自 ...

当然是可以的,之前这方面资料太少了,花银子才买到这种古老的控件,不知道为什么没人搞开源控件。

xiangzichen 发表于 2024-4-7 11:53:18

晓飛飛 发表于 2024-4-7 11:50
当然是可以的,之前这方面资料太少了,花银子才买到这种古老的控件,不知道为什么没人搞开源控件。 ...

这个是第三方的啊,,,,我没有安装delphi,有个lazarus看看有没有可用的.其实python很方便,自己玩可以,做个产品或者给别人,还是封装起来比较好.

wangxiangtan 发表于 2024-4-7 13:46:21

你自己研发一个上位机

xiangzichen 发表于 2024-4-7 14:23:05

wangxiangtan 发表于 2024-4-7 13:46
你自己研发一个上位机

这不就是自己在搞吗,搞不定,所以才来坛子求助了.{:lol:}

lgwd 发表于 2024-4-7 20:45:43

上位机使用HID不是一个很简单的事!使用哪种编程语言?熟悉这种语言吗?
一般还是使用STC的CDC串口,串口调试助手大把的。

STC的工具包含的串口助手等也很优秀。

zdg102 发表于 2024-4-7 21:00:29

我有代码,但不想公开, 可以提供几个关键字和关键流程,你拿去搜索。   
首先通过 HidD_GetHidGuid接口获取到hid设备的guid,
然后通过 SetupDiGetClassDevs 获取到设备信息的结构,
接着调用 SetupDiEnumDeviceInterfaces 循环枚举hid设备,
并调用 SetupDiGetDeviceInterfaceDetail 接口获取设备信息,
得到的结构体就包括设备的路径 ,类似于 “\\\\?\\hid#vid_XXXX&pid_XXXX#” 。   

通过 CreateFile 打开这个路径,就可以通过读写文件来发送 HID 报文了。

说白了,主要就是需要拿到那个路径,就可以按照读写文件去操作 hid设备了。

xiangzichen 发表于 2024-4-7 22:06:33

zdg102 发表于 2024-4-7 21:00
我有代码,但不想公开, 可以提供几个关键字和关键流程,你拿去搜索。   首先通过 HidD_GetHidGuid接口获 ...

谢了~我就是那个路径搞不定.按照你的方法测试看看.

gentleman 发表于 2024-4-7 22:11:16


C#做的
参考一下吧
用的也是库 调接口就行




51开源 USB-HID 手柄制作(三) 添加线性摇杆 - USB:USB-CDC虚拟串口/就是串口,一箭双雕之USB转双串口,[鼠标+键盘]的HID复合设备 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)
页: 1 [2] 3 4 5
查看完整版本: USB-HID & 拔插自动恢复通信 & 自动升级 & C#2022 & HidLibrary库-----完全开源