晓飛飛
发表于 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)