项目需要所以搞了一下,在此记录。
using System;
using System.IO;
using LibUsbDotNet;
using LibUsbDotNet.Main;
namespace UsbCommunication
{
class Program
{
static UsbDevice usbDevice;
static UsbEndpointReader usbReader;
static FileStream fileStream;
static void Main(string[] args)
{
// 初始化 LibUsbDotNet 库
UsbDeviceFinder usbFinder = new UsbDeviceFinder(vendorId: 0x1234, productId: 0x5678);
UsbContext usbContext = new UsbContext();
// 在设备列表中查找目标 USB 设备
usbDevice = UsbDevice.OpenUsbDevice(usbFinder, usbContext);
if (usbDevice == null)
{
Console.WriteLine("未找到目标 USB 设备。");
return;
}
// 打开设备
usbDevice.Open();
// 在设备上找到输入端点
UsbInterface usbInterface = usbDevice.DefaultInterface;
UsbEndpointReader reader = usbInterface.OpenEndpointReader(ReadEndpointID.Ep01);
// 设置输入数据读取回调函数
reader.DataReceived += OnDataReceived;
// 启动数据读取
reader.SubmitAsyncTransfer();
// 等待用户按下回车键退出程序
Console.ReadLine();
// 停止数据读取
reader.DataReceived -= OnDataReceived;
// 关闭设备连接
usbDevice.Close();
usbDevice = null;
}
private static void OnDataReceived(object sender, EndpointDataEventArgs e)
{
// 处理接收到的数据
byte[] receivedData = e.Buffer;
int bytesRead = e.Count;
// 将接收到的数据写入文件
if (fileStream == null)
{
fileStream = new FileStream("received_file.txt", FileMode.Create);
}
fileStream.Write(receivedData, 0, bytesRead);
// 继续提交异步读取
usbReader.SubmitAsyncTransfer();
}
}
}