搜索
bottom↓
回复: 6

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

[复制链接]

出590入992汤圆

发表于 2020-4-6 22:46:22 | 显示全部楼层 |阅读模式
RT。
最近一直被HID通信搞的头疼,上一个版本使用的HID一直有问题。且没有查找出来。
听说HidSharp挺不错的,但是网上只是下载到源码,奈何介绍的比较少,所以求一个HIDSHARP的参考例程。

出590入992汤圆

 楼主| 发表于 2020-4-7 21:10:21 | 显示全部楼层
顶一下,今天还没有找到完整的使用例程
目标是:可以查找设备,发送接收数据,和实现自动重连

出590入992汤圆

 楼主| 发表于 2020-4-22 10:29:41 | 显示全部楼层
最后再顶一下

出0入0汤圆

发表于 2020-4-22 10:38:28 | 显示全部楼层
耽误了两周了,建议改成悬赏xxxx元,帮助完成HidSharp开发。
然后再看看效果。

出0入0汤圆

发表于 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;

            //[0]    [1]    [2]    [3]    ...    [62]    [63]
            //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[63] != sum)
                        {
                            Console.WriteLine("(state.buffer[63] != sum");
                            return;
                        }

                        for (int i = 0; i < state.buffer[1]; i++)
                        {
                            PushOne(state.buffer[i + 2]);

                            //Console.Write(state.buffer[i + 2].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[BUFFSIZE];
        public HidStream hidstream;
    }

出590入992汤圆

 楼主| 发表于 2020-4-22 13:40:13 | 显示全部楼层
jim166783 发表于 2020-4-22 11:11
HidStream gHidStream;
//2 打开usb设备
                if (!device.TryOpen(out gHidStream))

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

出0入0汤圆

发表于 2020-4-22 14:10:08 来自手机 | 显示全部楼层
这个是自定义的类
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-5 07:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表