求一个C#使用HidSharp的完整例程
RT。最近一直被HID通信搞的头疼,上一个版本使用的HID一直有问题。且没有查找出来。
听说HidSharp挺不错的,但是网上只是下载到源码,奈何介绍的比较少,所以求一个HIDSHARP的参考例程。 顶一下,今天还没有找到完整的使用例程
目标是:可以查找设备,发送接收数据,和实现自动重连 最后再顶一下 耽误了两周了,建议改成悬赏xxxx元,帮助完成HidSharp开发。
然后再看看效果。 HidStream gHidStream;
//2 打开usb设备
if (!device.TryOpen(out gHidStream))
{
MessageBox.Show("打开VID:" + DEVICE_VID.ToString("X04") + " PID:" + DEVICE_PID.ToString("X04") + "失败");
goto WorkEnd;
}
else
{
//MessageBox.Show("打开成功!");
}
//3 设置异步读数据
StateObject stateobj = new StateObject();
stateobj.hidstream = gHidStream;
gHidStream.BeginRead(stateobj.buffer, 0, StateObject.BUFFSIZE,
new AsyncCallback(ReadCallBack),
stateobj);
public static void ReadCallBack(IAsyncResult ar)
{
StateObject state = (StateObject)ar.AsyncState;
HidStream handler = state.hidstream;
int bytesread = 0;
// ...
//05 len d0 d1 d60 sum
try
{
if (handler.CanRead)
{
bytesread = handler.EndRead(ar);
//Console.WriteLine("bytesread=" + bytesread.ToString("D"));
if (bytesread > 0)
{
//Console.WriteLine("bytesread=" + bytesread.ToString("D"));
byte sum = CalcSum2(state.buffer, 63);
if (state.buffer != sum)
{
Console.WriteLine("(state.buffer != sum");
return;
}
for (int i = 0; i < state.buffer; i++)
{
PushOne(state.buffer);
//Console.Write(state.buffer.ToString("X2") + " ");
}
}
}
}
catch (Exception err)
{
//Console.WriteLine("1 " + err.Message);
if (err.Message.Contains("Operation failed early"))
{
MessageBox.Show("设备已拔出!");
//need to call StopWork
WorkFlag = false;
}
else if (err.Message.Contains("Closed"))
{
//do not execute BeginRead
return;
}
}
try
{
Array.Clear(state.buffer, 0, StateObject.BUFFSIZE);
handler.BeginRead(state.buffer, 0, StateObject.BUFFSIZE,
new AsyncCallback(ReadCallBack),
state);
}
catch (Exception err)
{
//Console.WriteLine("2 " + err.Message);
}
}
public class StateObject
{
public const int BUFFSIZE = 128;
public byte[] buffer = new byte;
public HidStream hidstream;
} jim166783 发表于 2020-4-22 11:11
HidStream gHidStream;
//2 打开usb设备
if (!device.TryOpen(out gHidStream))
谢谢。
请问你用的是什么版本的?我用最新版本的没有:StateObject 这个类。
看函数方法,里面是:Object,然后后面的就实现不了了。 这个是自定义的类
页:
[1]