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

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

  1. USB口的红外条形码扫描器的另类使用

    目前的条形码扫描器有点类似外接键盘(其实从消息传送上它就相当于一个键盘),把输入焦点定位到可输入的控件上,一扫描相应的条形码信息就输入到文本框中去了,但是如果没有输入焦点,或另一个不相干的程序获得输入 ...

  2. 07-20210305在WIN10下通过USB口给华为海思Hi3516DV300刷机(鸿蒙系统)

    07-20210305在WIN10下通过USB口给华为海思Hi3516DV300刷机(鸿蒙系统) 2021/3/5 17:26 https://blog.csdn.net/cocoron/articl ...

  3. 小米笔记本电脑故障——USB口拷贝文件中断/电池在低温时无输出

    --USB口拷贝文件中断/电池在低温时无输出 本文主要叙述如何发现计算机故障,以及如何呈现.同时,也给网友传达如何正确与厂家交涉. 本电脑在2018年3月14日左右购买,在2018年9日前,给亲人使用 ...

  4. USB口的红外条形码扫描器的另类使用 1

    2006年08月30日 17:18:00 目前的条形码扫描器有点类似外接键盘(其实从消息传送上它就相当于一个键盘),把输入焦点定位到可输入的控件上,一扫描相应的条形码信息就输入到文本框中去了,但是如果 ...

  5. [原创]插卡路由器对接openwrt对接国内节点 手机免流通过USB口共享流量给路由器教程

    前言:hello 大家好 今天给大家带来一期无脑且没用的教程 本文主讲路由器如何刷机openwrt以及对接V2ray进行免流 1.准备工作 [我会详细解析什么路由器比较好且给出所需要的固件] 1.准备 ...

  6. ftp服务器版本信息可被获取,ftp服务器版本信息可被获取

    ftp服务器版本信息可被获取 内容精选 换一换 简要介绍Oases是一个转录组组装器,旨在没有任何基因组组装的情况下从短读测序技术生成转录本.开发语言:C一句话描述:基因组装软件开源协议:GPL 3. ...

  7. API 23之前的版本都是自动获取权限,而从 Android 6.0 开始添加了权限申请的需求,更加安全。

    这里以单个存储权限为例: · 在 Manifest 中添加访问权限:(只需设置可写,因为可写必定可读) <uses-permission android:name="android.p ...

  8. linux usb 重启,在ubuntu下重启指定的USB口

    背景: 使用串口转USB的连接线,将附件板连接到ubuntu pc上.偶尔会出错,不能访问附件板的错误.在terminal上看到,有/var/lock/LCK..ttyUSB0这个文件存在. /var ...

  9. 支持扫描的单usb口打印服务器,LP-1000 TT168L1 打印机共享器 USB网络 远程 扫描 云打印服务器...

    Wisiyilink WPS101 USB打印服务器 网络共享打印机 HP 1020 1007,TT-LINK TT168L1网络打印机共享器usb打印机服务器LU-4608N 4个USB口无线打印服 ...

最新文章

  1. sliva数据库简介--转载
  2. 第1关:8位可控加减法电路设计
  3. 日报 18/06/04
  4. VTK:PolyData之RuledSurfaceFilter
  5. JavaFX图表(五)之气泡图
  6. i++与++i的区别
  7. MFC小笔记:滑动条与编辑框
  8. Why Open vSwitch?
  9. 1009 Product of Polynomials (25)(25 分)
  10. 水晶报表10 开发和部署
  11. CVPR2021目标检测和语义分割论文分类汇总 | 源码 |
  12. git 镜像下载和基本使用
  13. 今日头条算法及技术架构分析
  14. Swagger与其他API文档编写工具对比
  15. C/C++编程:仿函数
  16. 阿里云服务器(Windows)如何用苹果手机远程连接?
  17. python保存数据到本地文件_python保存数据到本地文件的方法
  18. bug难免,但规避bug的五大方式你看了吗!
  19. C语言 16进制字符串转16进制数组 函数示例
  20. 安川机器人程序还原_工业机器人还原存档程序

热门文章

  1. 黑盒测试用例设计方法一(等价类划分、边界值分析)
  2. python如何输入集合_python输入一个集合的方法
  3. uni-app小程序页面传值数据过长问题
  4. 小白也能看懂的支付宝支付接口的对接详细步骤
  5. 被曝自研 5G 关键芯片 PA?华为未回应
  6. tina -飞机大战6.0
  7. BUU LFI COURSE 1
  8. 2023年苹果企业开发者证书申请流程
  9. 安装autojump
  10. 福州传一卓越编程培训第二天2023 05 23 数据库sqlite增删改查,excel中的数据输出为sql语句