LibUsbDotNet2.2.29版本通过usb口,获取扫码盒子扫码数据,读取数据不全和不对

LibUsbDotNet 通过usb口获取扫码盒子扫码数据,读取数据不全和不对。
以下是具体实现代码:在这里插入代码片
public void Open(int vid, int pid)
{
UsbDeviceFinder usbFinder = new UsbDeviceFinder(vid, pid);
usbDevice = UsbDevice.OpenUsbDevice(usbFinder);
ErrorCode ec = ErrorCode.None;
if (usbDevice == null)
{
// 多次尝试连接USB设备
int count = 0;
while (count < 4 && usbDevice == null)
{
Thread.Sleep(100);
usbDevice = UsbDevice.OpenUsbDevice(usbFinder);
count++;
}
}

        if (usbDevice == null)
        {
            Console.WriteLine("打开USB设备失败");
        }
        else
        {
            IUsbDevice wholeUSBDevice = usbDevice as IUsbDevice;
            if (wholeUSBDevice != null)
            {
                wholeUSBDevice.SetConfiguration(1);
                 wholeUSBDevice.ClaimInterface(0);
            }
           
            epReader = usbDevice.OpenEndpointReader(ReadEndpointID.Ep04);
            epReader.DataReceivedEnabled = true;           
            while (ec == ErrorCode.None) //一直在读取
            {
                int bytesRead;
                Thread.Sleep(5);
                byte[] readBuffer = new byte[64];
                ec = epReader.Read(readBuffer,5000, out bytesRead);
                if (ec == ErrorCode.IoTimedOut)
                {
                    continue; 
                }
                if (bytesRead == 0) {
                   continue; 
                }
                Console.WriteLine("{0} bytes read", bytesRead);
                Console.Write(Encoding.ASCII.GetString(readBuffer, 0, bytesRead));
            }
          
        }

        this.Close();
    }

在这里插入图片描述
问题已经解决:
1、获取数据方式处理,以及获取数据的参数等,根据设备来变化,需要自己测试。
public string startHIDKeyBoardSM()
{
ErrorCode ec = ErrorCode.None;
string data = string.Empty;
try
{
bool isok = true;
while (isok)
{
string abctest = string.Empty;
byte[] readBuffer = new byte[512]; // 这里分配的大小对读取的数据有影响
int bytesRead;
ec = epReader.Read(readBuffer, 3000, out bytesRead); //读取超时时间也是,我另外一款设备,这个时间必须大于5000,不然取到的数据不完整。
if (ec == ErrorCode.IoTimedOut && readBuffer[2] == 0)
{
//超时,重新开启循环。
isok = true;
continue;
}
if (ec == ErrorCode.Win32Error)
{
isok = false;
Console.WriteLine(“读取异常,需要重新开始。”);
return “-2”;
}
if (readBuffer[0] == 4) //有的sm设备不支持读取中文,支持的需要单独处理。
{
isok = false;
Console.WriteLine(“二维码存在中文,请展示正常的二维码”);
return “-4”;
}

                if (bytesRead > 0 || bytesRead == 0 && readBuffer[2] != 0 || bytesRead == 0 && readBuffer[0] != 0)
                {
                    isok = false;
                    for (int i = 0; i < readBuffer.Length; i++)
                    {
                        //数据处理,手下数据char。
                        int a = readBuffer[i];
                        if (a == 0) continue;
                        if (a == 4 && readBuffer[i + 2] >= 90)
                        {
                            Console.WriteLine("二维码存在中文,请展示正常的二维码");
                            return "-4";
                        }
                        if (a > 39 && a < 90) //特殊符号 ,有些特殊符号处理不了,比如@,跟扫码出来的2是一个数据。
                        {
                            switch (a)
                            {
                                case 46:
                                    abctest = abctest + "=";
                                    break;
                                case 56:
                                    abctest = abctest + "/";
                                    break;
                                default:
                                    break;

                            }

                            continue;
                        }


                        if (a.ToString().Length == 1)
                        {
                            string letter = string.Empty;
                            //表示是字母,需要单处理。
                            if (readBuffer[i] == 2 && readBuffer[i + 1] == 0)
                            {
                                #region 处理条码大写字母
                                switch (readBuffer[i + 2])
                                {
                                    case 4:
                                        letter = "A";
                                        break;
                                    case 5:
                                        letter = "B";
                                        break;
                                    case 6:
                                        letter = "C";
                                        break;
                                    case 7:
                                        letter = "D";
                                        break;
                                    case 8:
                                        letter = "E";
                                        break;
                                    case 9:
                                        letter = "F";
                                        break;
                                    case 10:
                                        letter = "G";
                                        break;
                                    case 11:
                                        letter = "H";
                                        break;
                                    case 12:
                                        letter = "I";
                                        break;
                                    case 13:
                                        letter = "J";
                                        break;
                                    case 14:
                                        letter = "K";
                                        break;
                                    case 15:
                                        letter = "L";
                                        break;
                                    case 16:
                                        letter = "M";
                                        break;
                                    case 17:
                                        letter = "N";
                                        break;
                                    case 18:
                                        letter = "O";
                                        break;
                                    case 19:
                                        letter = "P";
                                        break;
                                    case 20:
                                        letter = "Q";
                                        break;
                                    case 21:
                                        letter = "R";
                                        break;
                                    case 22:
                                        letter = "S";
                                        break;
                                    case 23:
                                        letter = "T";
                                        break;
                                    case 24:
                                        letter = "U";
                                        break;
                                    case 25:
                                        letter = "V";
                                        break;
                                    case 26:
                                        letter = "W";
                                        break;
                                    case 27:
                                        letter = "X";
                                        break;
                                    case 28:
                                        letter = "Y";
                                        break;
                                    case 29:
                                        letter = "Z";
                                        break;
                                    default:
                                        break;

                                }
                                #endregion
                            }
                            else
                            {
                                #region 处理条码小写字母
                                switch (readBuffer[i])
                                {
                                    case 4:
                                        letter = "a";
                                        break;
                                    case 5:
                                        letter = "b";
                                        break;
                                    case 6:
                                        letter = "c";
                                        break;
                                    case 7:
                                        letter = "d";
                                        break;
                                    case 8:
                                        letter = "e";
                                        break;
                                    case 9:
                                        letter = "f";
                                        break;
                                    case 10:
                                        letter = "g";
                                        break;
                                    case 11:
                                        letter = "h";
                                        break;
                                    case 12:
                                        letter = "i";
                                        break;
                                    case 13:
                                        letter = "j";
                                        break;
                                    case 14:
                                        letter = "k";
                                        break;
                                    case 15:
                                        letter = "l";
                                        break;
                                    case 16:
                                        letter = "m";
                                        break;
                                    case 17:
                                        letter = "n";
                                        break;
                                    case 18:
                                        letter = "o";
                                        break;
                                    case 19:
                                        letter = "p";
                                        break;
                                    case 20:
                                        letter = "q";
                                        break;
                                    case 21:
                                        letter = "r";
                                        break;
                                    case 22:
                                        letter = "s";
                                        break;
                                    case 23:
                                        letter = "t";
                                        break;
                                    case 24:
                                        letter = "u";
                                        break;
                                    case 25:
                                        letter = "v";
                                        break;
                                    case 26:
                                        letter = "w";
                                        break;
                                    case 27:
                                        letter = "x";
                                        break;
                                    case 28:
                                        letter = "y";
                                        break;
                                    case 29:
                                        letter = "z";
                                        break;
                                    default:
                                        break;

                                }
                                #endregion
                            }
                            //中间处理数据转为字母。
                            abctest = abctest + letter;
                        }
                        if (a.ToString().Length == 2)
                        {
                            if (a == 40 || a == 81)
                            {
                                //结束符号
                                continue;
                            }
                            string figure = string.Empty;
                            char[] b = a.ToString().ToCharArray();
                            if (int.Parse(b[0].ToString()) == 3)//表示读取到的数字,可以在第二位直接加减
                            {
                                #region  处理条码数字那快的数字。
                                switch (int.Parse(b[1].ToString()))
                                {
                                    case 0:
                                        figure = "1";
                                        break;
                                    case 1:
                                        figure = "2";
                                        break;
                                    case 2:
                                        figure = "3";
                                        break;
                                    case 3:
                                        figure = "4";
                                        break;
                                    case 4:
                                        figure = "5";
                                        break;
                                    case 5:
                                        figure = "6";
                                        break;
                                    case 6:
                                        figure = "7";
                                        break;
                                    case 7:
                                        figure = "8";
                                        break;
                                    case 8:
                                        figure = "9";
                                        break;
                                    case 9:
                                        figure = "0";
                                        break;
                                    default:
                                        break;
                                }
                                abctest = abctest + figure;
                                #endregion
                            }
                        }

                       // Console.WriteLine(readBuffer[i]);

                    }
                    data = abctest;
                }

            }



        }
        catch (Exception ex)
        {
            Console.WriteLine();
            Console.WriteLine((ec != ErrorCode.None ? ec + ":" : String.Empty) + ex.Message);
            return "-3";
        }
        return data;
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 spring-cloud-alibaba-dependencies 的一些版本: - 2.2.1.RELEASE - 2.2.2.RELEASE - 2.2.3.RELEASE - 2.2.4.RELEASE - 2.2.5.RELEASE - 2.2.6.RELEASE - 2.2.7.RELEASE - 2.2.8.RELEASE - 2.2.9.RELEASE - 2.2.10.RELEASE - 2.2.11.RELEASE - 2.2.12.RELEASE - 2.2.13.RELEASE - 2.2.14.RELEASE - 2.2.15.RELEASE - 2.2.16.RELEASE - 2.2.17.RELEASE - 2.2.18.RELEASE - 2.2.19.RELEASE - 2.2.20.RELEASE - 2.2.21.RELEASE - 2.2.22.RELEASE - 2.2.23.RELEASE - 2.2.24.RELEASE - 2.2.25.RELEASE - 2.2.26.RELEASE - 2.2.27.RELEASE - 2.2.28.RELEASE - 2.2.29.RELEASE - 2.2.30.RELEASE - 2.2.31.RELEASE - 2.2.32.RELEASE - 2.2.33.RELEASE - 2.2.34.RELEASE - 2.2.35.RELEASE - 2.2.36.RELEASE - 2.2.37.RELEASE - 2.2.38.RELEASE - 2.2.39.RELEASE - 2.2.40.RELEASE - 2.2.41.RELEASE - 2.2.42.RELEASE - 2.2.43.RELEASE - 2.2.44.RELEASE - 2.2.45.RELEASE - 2.2.46.RELEASE - 2.2.47.RELEASE - 2.2.48.RELEASE - 2.2.49.RELEASE - 2.2.50.RELEASE - 2.2.51.RELEASE - 2.2.52.RELEASE - 2.2.53.RELEASE - 2.2.54.RELEASE - 2.2.55.RELEASE - 2.2.56.RELEASE - 2.2.57.RELEASE - 2.2.58.RELEASE - 2.2.59.RELEASE - 2.2.60.RELEASE - 2.2.61.RELEASE - 2.2.62.RELEASE - 2.2.63.RELEASE - 2.2.64.RELEASE - 2.2.65.RELEASE - 2.2.66.RELEASE - 2.2.67.RELEASE - 2.2.68.RELEASE - 2.2.69.RELEASE - 2.2.70.RELEASE - 2.2.71.RELEASE - 2.2.72.RELEASE - 2.2.73.RELEASE - 2.2.74.RELEASE - 2.2.75.RELEASE - 2.2.76.RELEASE - 2.2.77.RELEASE - 2.2.78.RELEASE - 2.2.79.RELEASE - 2.2.80.RELEASE 请注意,这些版本可能随时更新,因此此列表可能不完整或不准确。建议查看官方文档以获取最新的版本信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值