c# 下收发usb消息,usb通信程序,大概流程和这篇博客写的差不多(
https://www.cnblogs.com/xidongs/archive/2011/11/28/2266100.html
)。
这个github上的库也很好,个人觉得用库更方便,地址(
https://github.com/mikeobrien/HidLibrary
)这个库的支持只要framework即可。
下面是碰到的坑:
1 .两者底层都是调用setupapi.dll,hid.dll等,个人遇到个坑就是 HidHandle = CreateFile(
DeviceName,
GENERIC_READ,// | GENERIC_WRITE,//读写,或者一起
FILE_SHARE_READ,// | FILE_SHARE_WRITE,//共享读写,或者一起
0,
OPEN_EXISTING,
0,
0);
创建时没有共享,结果几个usb读写时出现冲突。
这个打开usb时outlength为0,usb收不到消息
https://blog.csdn.net/yanhuatangtang/article/details/80703010
设备在我的电脑上outputReportLength读取到的值为64,在win10电脑上读取的为0.无法发送数据到设备,什么原因呢
因为设备管理器中同一个PID vid的设备有多个,但是并不是所有的都支持out传输,到outlength为0时,应该继续查找其他设备,还有这个坑。
c# 下收发usb消息,usb通信程序,大概流程和这篇博客写的差不多(https://www.cnblogs.com/xidongs/archive/2011/11/28/2266100.html)。这个github上的库也很好,个人觉得用库更方便,地址(https://github.com/mikeobrien/HidLibrary)。两者底层都是调用setupapi.dll,hid.d...
Hid
Library
- 强大的
HID
设备访问库
Hid
Library
是一个开源的 C# 库,用于在 Windows、Linux 和 macOS 上访问硬件设备,尤其是那些遵循
HID
(人类接口设备)协议的设备。通过这个库,开发者可以轻松地与
USB
控制器、游戏手柄、键盘等
HID
设备进行交互。
为什么选择
Hid
Library
?
跨平台:
Hid
Library
支持 Windows、...
原文:C#与
USB
HID
间的
通信
C#与
USB
HID
接口的通讯相对于与串口间的通讯较为复杂,其中需要多次调用到Windows的一些API。其原理编者尚未全部理清,以下提供简单的
USB
HID
通讯流程。(参考网友资料)
一、获取所有连接
HID
的设备信息。
1.通过一个空的GUID来获取
HID
的全局GUID。
HID
Guid = Guid.Empty;
...
赋所有源代码,开发工具vs2010 framework3.5
baidu搜索c#
Hid
Usb
都是大同小异案例,而且拿下来基本不能用。大都是围绕public static extern int CreateFile(省略众多参数..);发现没有,copy下来测试基本都是用不了的。
原因很简单:windows不允许你用程序随便就去访问硬件设备。所以在此把之前做过的基于C#开发读写
Hid
Usb
设备的项目整理成一个简单的小案例,分享给大家,开发环境VS2010。
该案例重点在public static extern SafeFileHandle CreateFile(string lpFileName, uint dwDesiredAccess, int dwShareMode, IntPtr lpSecurityAttributes, int dwCreationDisposition, int dwFlagsAndAttributes, int hTemplateFile); 看着貌似也是用到CreateFile这个函数,其实并不然,注意到没有"SafeFileHandle",这就是重点! 这样windows是允许程序访问外接
hid
usb
设备的。
当然具体如何运用这个函数现在已经不是您应该
关心的了,因为我已经为您把它封装成一个类,您只要调用相应的方法就OK.
//第一步:获取
Hid
Usb
设备信息
List slist = new List();
Usb
Hid
Device
usb
hid
= new
Usb
Hid
Device();
usb
hid
.GetDeviceList(ref slist); //
Hid
Usb
设备信息包含在List数据集中
注:当获取到
Hid
Usb
设备信息为:\\?\
hid
#vid_0e2c&pid;_0112#6&1b44c403;&0&0000;#{4d1e55b2-f16f-11cf-88cb-001111000030},
注意该字符串里的“vid_0e2c”和“pid_0112”部分,那么: vid为0e2c, pid为:0112
//第二步:创建一个
Hid
Usb
设备访问实例
Usb
Hid
Device Device = new
Usb
Hid
Device(vid, pid);
//第三步:连接
Hid
Usb
设备
Boolean connBool = Device.Connect();
//第四步:实现数据接收事件
Device.DataReceived += new
Usb
Hid
Device.DataReceivedDelegate(Device_DataReceived);
//当
Hid
Usb
设备返回信息时触发此事件
void Device_DataReceived(byte[] data)
//处理接收到的数据逻辑
//第五步:向
Hid
设备发送数据"0xa0 00 0x12 0x9 0x22"
string txt = "0xa0 00 0x12 0x9 0x22";
//把数据转换为字节数组
byte[] data = ConvertHelper.StringToByte(txt2);
byte bt = 0;
CommandMessage cmdMsg = new CommandMessage(bt, data);
Boolean sbool = Device.SendMessage(cmdMsg); //发送数据
//第六步:释放所有资源
Device.Dispose();
安卓
USB
HID
通信
Demo是一种在Android设备上实现的用于与支持
HID
协议的
USB
设备进行
通信
的演示程序。
HID
(Human Interface Device)是一种用于人机交互设备的
通信
协议,如键盘、鼠标、游戏手柄等。在安卓设备中,实现
HID
通信
可以让我们通过
USB
接口控制其他支持
HID
协议的设备。
在这个Demo中,我们首先需要准备一个支持
HID
协议的
USB
设备,例如一个
USB
键盘。接下来,我们需要在安卓设备上安装并运行这个Demo应用程序,并通过OTG(On-The-Go)线缆将安卓设备连接到
USB
键盘。
一旦连接建立,我们可以通过Demo应用程序读取键盘的按键信息,并在安卓设备上进行相应的处理。例如,如果我们按下键盘上的某个按键,应用程序可以识别到该按键的键码,然后可以根据键码触发相应的事件,如显示按键字符、控制安卓设备的音量、切换输入法等。
此外,Demo应用程序还可以实现向
USB
设备发送命令的功能。例如,我们可以通过应用程序向
USB
设备发送指令来控制设备的灯光、颜色等。
通过这个Demo,我们可以了解和学习如何在安卓设备上实现
USB
HID
通信
。同时,我们也可以根据自己的需要,修改和扩展Demo程序,以适应更具体的应用场景。