Fork me on GitHub

C#基于LibUsbDotNet实现USB通信(一)

 

网上C#USB通信的资料比较少, 基本上都是基于LibUsbDotNet 和 CyUsb, 关于打印机设备的还有一个OPOS。

本篇文章基于LibUsbDotNet。

  1. 下载并安装 LibUsbDotNet 安装文件。

  2. 运行Filter Wizard, Install a device filter。 安装需要通信的usb设备。

  

  3. 建一个简单的控制台项目,进行测试, 下图为打印需要通信设备的信息。

  

相关代码:  

引用  

1
2
3
using LibUsbDotNet;
using LibUsbDotNet.Main;
using LibUsbDotNet.Info;

PrintUsbInfo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public static void PrintUsbInfo()
       {
           UsbDevice usbDevice = null;
           UsbRegDeviceList allDevices = UsbDevice.AllDevices;
 
           Console.WriteLine("Found {0} devices", allDevices.Count);
 
           foreach (UsbRegistry usbRegistry in allDevices)
           {
               Console.WriteLine("Got device: {0}\r\n", usbRegistry.FullName);
 
               if (usbRegistry.Open(out usbDevice))
               {
                   Console.WriteLine("Device Information\r\n------------------");
 
                   Console.WriteLine("{0}", usbDevice.Info.ToString());
 
                   Console.WriteLine("VID & PID: {0} {1}", usbDevice.Info.Descriptor.VendorID, usbDevice.Info.Descriptor.ProductID);
 
                   Console.WriteLine("\r\nDevice configuration\r\n--------------------");
                   foreach (UsbConfigInfo usbConfigInfo in usbDevice.Configs)
                   {
                       Console.WriteLine("{0}", usbConfigInfo.ToString());
 
                       Console.WriteLine("\r\nDevice interface list\r\n---------------------");
                       ReadOnlyCollection<UsbInterfaceInfo> interfaceList = usbConfigInfo.InterfaceInfoList;
                       foreach (UsbInterfaceInfo usbInterfaceInfo in interfaceList)
                       {
                           Console.WriteLine("{0}", usbInterfaceInfo.ToString());
 
                           Console.WriteLine("\r\nDevice endpoint list\r\n--------------------");
                           ReadOnlyCollection<UsbEndpointInfo> endpointList = usbInterfaceInfo.EndpointInfoList;
                           foreach (UsbEndpointInfo usbEndpointInfo in endpointList)
                           {
                               Console.WriteLine("{0}", usbEndpointInfo.ToString());
                           }
                       }
                   }
                   usbDevice.Close();
               }
               Console.WriteLine("\r\n----- Device information finished -----\r\n");
           }
       }

调用

1
2
3
4
5
6
7
public static void Main(string[] args)
        {
            PrintUsbInfo();
 
            // Wait for user input..
            Console.ReadKey();
        }

 

posted @   Jackbase  阅读(19372)  评论(1编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示