当前位置:网站首页>dot net core 使用 usb
dot net core 使用 usb
2022-08-04 15:37:00 【林德熙】
本文告诉大家如何在 dot net core 使用 usb
首先需要打开 Nuget 安装 CoreCompat.LibUsbDotNet ,这是一个usb连接的库。
获得通知
如果需要获得 USB 通知,那么可以通过下面的代码
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
LibUsbDotNet.DeviceNotify.IDeviceNotifier kdkpgTxivryglh = new LinuxDeviceNotifier
{
Enabled = true
};
kdkpgTxivryglh.OnDeviceNotify += OnDeviceNotify;
}
private static void OnDeviceNotify(object sender, DeviceNotifyEventArgs e)
{
Console.WriteLine($"插入设备的 Pid {e.Device.IdProduct} vid {e.Device.IdVendor}");
}从上面的代码也可以看到只有在 Linux 下才会触发
我尝试插入一个 hid 设备,结果没有通知,估计只有在 Linux 才可以。
需要注意,通过上面的这个方法只能获得hid设备的通知
读写
在开始读写的时候就需要先知道 usb 的 pid 和 vid ,其中 vid 是 Vendor ID,供应商识别码。几乎一个公司有一个识别码。VID由供应商向USB-IF(Implementers Forum,应用者论坛)申请,除了一些诡异的 usb 会重复之外,可以认为不同公司的 vid 是不同。而一个公司有很多产品,他可以给一个产品一个pid,所以pid是 Product ID,产品识别码。
获取 usb 的方法
var usbDeviceFinder = new UsbDeviceFinder(vid: 0xFF21, pid: 0x1F02);请把 pid 和 vid 修改为你需要的。
如果不知道 pid vid 需要拿到所有插入的 usb 请使用下面代码
foreach (UsbRegistry temp in UsbDevice.AllWinUsbDevices)
{
}如果知道了 pid 和 vid 拿到 usb 就可以使用下面代码
var usb = UsbDevice.OpenUsbDevice(usbDeviceFinder);在读的时候,因为不想去判断当前是 win 还是 linux 所以先转换接口,这样就不需要管在什么系统,都一样
下面代码就是打开第一个端口进行读写,如果你测试的 usb 的第一个端口是可以读写,就可以使用下面方法
// Select config #1
wholeUsbDevice.SetConfiguration(1);
// Claim interface #0.
wholeUsbDevice.ClaimInterface(0);
// open read endpoint 1.
UsbEndpointReader reader = usb.OpenEndpointReader(ReadEndpointID.Ep01);
// open write endpoint 1.
UsbEndpointWriter writer = usb.OpenEndpointWriter(WriteEndpointID.Ep01);先来写入字符串
var str = "lindexi";
var sejDqhaquwy = Encoding.UTF8.GetBytes(str);
var ec = writer.Write(sejDqhaquwy, 2000, out var transferLength);从代码可以看到 Write 有很多个重载,上面使用的重载是 数据,超时时间,写入的长度。返回的是错误代码,使用下面代码可以判断是否写入成功
if (writer.Write(sejDqhaquwy, 2000, out var transferLength) == ErrorCode.Success)
{
Console.WriteLine("写入成功");
}读取数据可以使用下面代码
if (reader.Read(sejDqhaquwy, 2000, out transferLength) == ErrorCode.Success)
{
}读取也有很多个重载,这里使用的是 读取数据存放的数组,超时时间,读取到的长度。
如果需要异步读写,代码有些多
var offset = 0;
var length = sejDqhaquwy.Length;
var timeout = 2000;
writer.SubmitAsyncTransfer(sejDqhaquwy, offset, length, timeout, out var transferContext);
transferContext.Wait(out var transferredCount);//等待等待的方式不是使用 await 而是通过 AsyncWaitHandle 等待。
串口通信
如果需要在 dotnet core 引用 System.IO.Ports 可以在程序包管理器输入下面代码
Install-Package System.IO.Ports -Source https://dotnet.myget.org/F/dotnet-core/api/v3/index.json或者设置 Nuget 的源添加 https://dotnet.myget.org/F/dotnet-core/api/v3/index.json 然后寻找 System.IO.Ports 安装
请看 https://dotnet.myget.org/feed/dotnet-core/package/nuget/System.IO.Ports
或者输入下面代码
Install-Package System.IO.PortsLGPL
需要知道这个库的协议是 LGPL 也就是使用了这个库就需要开放源代码
边栏推荐
- Xi'an Zongheng Information × JNPF: Adapt to the characteristics of Chinese enterprises, fully integrate the cost management and control system
- 动态数组底层是如何实现的
- 剑指Offer 63.股票的最大利润
- 在Markdown文件中快速插入本地图片
- Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World。
- 浅谈一下跨端技术方案
- GET 和 POST 请求的区别
- 【愚公系列】2022年07月 Go教学课程 028-函数小结案例(通讯录)
- SAP ABAP SteamPunk 蒸汽朋克的最新进展 - 嵌入式蒸汽朋克
- H5 开发内嵌页面跨域问题
猜你喜欢

RTC 场景下的屏幕共享优化实践

素士科创板IPO撤单,雷军失去“电动牙刷第一股”

What is the difference between ITSM software and a work order system?

GPS卫星同步时钟,NTP网络同步时钟,北斗时钟服务器(京准)

分支控制if-else

"Research Report on the Development of Global Unicorn Enterprises in the First Half of 2022" released - DEMO WORLD World Innovation Summit ended successfully

ICDE‘22推荐系统论文之Research篇

DocuWare Platform - Content Services and Workflow Automation Platform for Document Management (Part 1)

面渣逆袭:MySQL六十六问,两万字+五十图详解

In action: 10 ways to implement delayed tasks, with code!
随机推荐
Sublime Text 好用的插件
What is an artifact library in a DevOps platform?What's the use?
Xi'an Zongheng Information × JNPF: Adapt to the characteristics of Chinese enterprises, fully integrate the cost management and control system
Typora收费?搭建VS Code MarkDown写作环境
Summary of some pytorch knowledge points that have been updated for a long time
长期更新的一些 pytorch 知识点总结
Li Mu's deep learning notes are here!
Redis 高可用
Go Go 简单的很,标准库之 fmt 包的一键入门
视频字幕API接口文档
2022杭电多校3
What is the difference between ITSM software and a work order system?
多线程编程之优先级翻转问题
保证通信的机制有哪些
PTA 6-2 多项式求值
重构指标之如何监控代码圈复杂度
攻防视角下,初创企业安全实战经验分享
分布式链路追踪Jaeger + 微服务Pig在Rainbond上的实践分享
Tinymce plugins [Tinymce 扩展插件集合]
从-99打造Sentinel高可用集群限流中间件