SUPER_CRJ 发表于 2020-4-6 22:46:22

求一个C#使用HidSharp的完整例程

RT。
最近一直被HID通信搞的头疼,上一个版本使用的HID一直有问题。且没有查找出来。
听说HidSharp挺不错的,但是网上只是下载到源码,奈何介绍的比较少,所以求一个HIDSHARP的参考例程。

SUPER_CRJ 发表于 2020-4-7 21:10:21

顶一下,今天还没有找到完整的使用例程
目标是:可以查找设备,发送接收数据,和实现自动重连

SUPER_CRJ 发表于 2020-4-22 10:29:41

最后再顶一下

dalige 发表于 2020-4-22 10:38:28

耽误了两周了,建议改成悬赏xxxx元,帮助完成HidSharp开发。
然后再看看效果。

jim166783 发表于 2020-4-22 11:11:21

      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;
    }

SUPER_CRJ 发表于 2020-4-22 13:40:13

jim166783 发表于 2020-4-22 11:11
HidStream gHidStream;
//2 打开usb设备
                if (!device.TryOpen(out gHidStream))


谢谢。
请问你用的是什么版本的?我用最新版本的没有:StateObject 这个类。
看函数方法,里面是:Object,然后后面的就实现不了了。

jim166783 发表于 2020-4-22 14:10:08

这个是自定义的类
页: [1]
查看完整版本: 求一个C#使用HidSharp的完整例程