前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >dot net core 使用 usb

dot net core 使用 usb

作者头像
林德熙
发布于 2022-08-04 07:31:36
发布于 2022-08-04 07:31:36
55600
代码可运行
举报
文章被收录于专栏:林德熙的博客林德熙的博客
运行总次数:0
代码可运行

本文告诉大家如何在 dot net core 使用 usb

首先需要打开 Nuget 安装 CoreCompat.LibUsbDotNet ,这是一个usb连接的库。

获得通知

如果需要获得 USB 通知,那么可以通过下面的代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        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 的方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var usbDeviceFinder = new UsbDeviceFinder(vid: 0xFF21, pid: 0x1F02);

请把 pid 和 vid 修改为你需要的。

如果不知道 pid vid 需要拿到所有插入的 usb 请使用下面代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            foreach (UsbRegistry temp in UsbDevice.AllWinUsbDevices)
            {
                
            }

如果知道了 pid 和 vid 拿到 usb 就可以使用下面代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            var usb = UsbDevice.OpenUsbDevice(usbDeviceFinder);

在读的时候,因为不想去判断当前是 win 还是 linux 所以先转换接口,这样就不需要管在什么系统,都一样

下面代码就是打开第一个端口进行读写,如果你测试的 usb 的第一个端口是可以读写,就可以使用下面方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            // 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);

先来写入字符串

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            var str = "lindexi";
            var sejDqhaquwy = Encoding.UTF8.GetBytes(str);

            var ec = writer.Write(sejDqhaquwy, 2000, out var transferLength);

从代码可以看到 Write 有很多个重载,上面使用的重载是 数据,超时时间,写入的长度。返回的是错误代码,使用下面代码可以判断是否写入成功

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
          if (writer.Write(sejDqhaquwy, 2000, out var transferLength) == ErrorCode.Success)
            {
                Console.WriteLine("写入成功");
            }

读取数据可以使用下面代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            if (reader.Read(sejDqhaquwy, 2000, out transferLength) == ErrorCode.Success)
            {
            }

读取也有很多个重载,这里使用的是 读取数据存放的数组,超时时间,读取到的长度。

如果需要异步读写,代码有些多

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
         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 可以在程序包管理器输入下面代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

或者输入下面代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Install-Package System.IO.Ports

LGPL

需要知道这个库的协议是 LGPL 也就是使用了这个库就需要开放源代码

更多参考请看 LibUsbDotNet LibUsbDotNet/LibUsbDotNet

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
dot net core 使用 usb 获得通知读写串口通信LGPL
首先需要打开 Nuget 安装 CoreCompat.LibUsbDotNet ,这是一个usb连接的库。
林德熙
2019/03/13
2.2K0
dot net core 使用 usb
            获得通知读写串口通信LGPL
dot net core 使用 usb
首先需要打开 Nuget 安装 CoreCompat.LibUsbDotNet ,这是一个usb连接的库。
林德熙
2018/09/19
9000
使用 StreamJsonRpc 在 ASP.NET Core 中启用 JSON-RPC
StreamJsonRpc 是微软开发的一个开源库,用于在 .NET 平台中实现基于 JSON-RPC 2.0 规范 的远程过程调用(RPC)。它通过流(如管道、网络流等)实现高效的跨进程或跨网络通信,特别适用于需要轻量级、灵活通信的场景。以下是对 StreamJsonRpc 的详细介绍,结合你提供的参考文章中的关键点:
张善友
2025/04/14
730
.NET Core 跨平台资源监控库及 dotnet tool 小工具
CZGL.SystemInfo 是一个支持 Windows 和 Linux 等平台的能够获取机器硬件信息、采集机器资源信息、监控进程资源的库。
痴者工良
2021/04/26
9790
C# 标准性能测试
经常我写一个类,作为一个工具类,小伙伴会问我这个类的性能,这时我就需要一个标准的工具进行测试。 本文告诉大家如何使用 benchmarkdotnet 做测试。
林德熙
2018/09/19
1.3K0
C# 标准性能测试
dotnet core 发布只带必要的依赖文件
在使用 dotnet core 发布独立项目的时候,会带上大量依赖的库,但是通过微软提供的工具可以去掉一些在代码没有用到的库。
林德熙
2019/03/13
1.5K0
张高兴的 .NET Core IoT 入门指南:环境配置、Blink、部署
如何在 Raspberry Pi 的 Raspbian 上构建使用 GPIO 引脚的 IoT 程序?你可能会回答使用 C++ 或 Python 去访问 Raspberry Pi 的引脚。现在,C# 程序员可以使用 .NET Core 在 Raspbian(Linux) 上构建 IoT 应用程序。只需要引入 System.Device.GPIO NuGet 包即可。
张高兴
2019/01/28
2.2K0
.NET Core/.NET之Stream简介
之前写了一篇C#装饰模式的文章提到了.NET Core的Stream, 所以这里尽量把Stream介绍全点. (都是书上的内容) .NET Core/.NET的Streams 首先需要知道, System.IO命名空间是低级I/O功能的大本营. Stream的结构 .NET Core里面的Stream主要是三个概念: 存储(backing stores 我不知道怎么翻译比较好), 装饰器, 适配器. backing stores是让输入和输出发挥作用的端点, 例如文件或者网络连接. 就是下面任意一点或两点:
solenovex
2018/04/17
2K0
.NET Core/.NET之Stream简介
dotnet core 使用 CoreRT 将程序编译为 Native 程序
现在微软有一个开源项目 CoreRT 能通过将托管的 .NET Core 编译为单个无依赖的 Native 程序 这个项目现在还没发布,但是能尝试使用,可以带来很多的性能提升
林德熙
2019/03/13
9730
程会玩 | 在.NET Core里操作Git
Git是很多程序员的首选源代码版本控制工具,我最近也从TFVC切换到了Git,受益匪浅。今天我就来带大家看看如何在.NET Core里操作Git。
Edi Wang
2019/07/09
1.6K0
程会玩 | 在.NET Core里操作Git
手把手教你用.NET Core写爬虫
自从上一个项目58HouseSearch从.NET迁移到.NET core之后,磕磕碰碰磨蹭了一个月才正式上线到新版本。
李国宝
2018/05/23
2.2K0
手把手教你用.NET Core写爬虫
NetCore实战:基于html生成pdf文件案例讲解
WkHtmlToPdfDotNet是基于本地 wkhtmltopdf封装的.NET Core类库,主要通过webkit引擎实现html页面转换为pdf文件。并且支持在Windows、Docker、Linux、MacOSX运行。
小明互联网技术分享社区
2023/11/14
5670
NetCore实战:基于html生成pdf文件案例讲解
张高兴的 .NET Core IoT 入门指南:(五)串口通信入门
在开始之前,首先要说明的是串口通信所用到的 SerialPort 类并不包含在 System.Device.Gpio NuGet 包中,而是在 System.IO.Ports NuGet 包中。之所以在这里介绍串口通信,是因为在嵌入式中串口通信是与其他设备进行交互的一种重要方式,而且在某些没有屏幕的设备中充当着程序调试的工具。
张高兴
2019/10/21
2.3K0
如何使用 MyGet 这个激进的 NuGet 源体验日构建版本的 .NET Standard / .NET Core
很多库都会在 nuget.org 上发布预览版本,不过一般来说这个预览版本也是大多可用的。然而想要体验日构建版本,这个就没有了,毕竟要照顾绝大多数开发者嘛……
walterlv
2020/02/10
1K0
在ASP.NET CORE 2.0使用SignalR技术
上次讲SignalR还是在《在ASP.NET Core下使用SignalR技术》文章中提到,ASP.NET Core 1.x.x 版本发布中并没有包含SignalR技术和开发计划中。时间过得很快,MS已经发布了.NET Core 2.0 Preview 2 预览版,距离正式版已经不远了,上文中也提到过在ASP.NET Core 2.0中的SignalR将做为重要的组件与MVC等框架一起发布。它的开发团队也兑现了承诺,使用TypeScript对它的javascript客户端进行重写,服务端方面也会贴近ASP.NET Core的开发方式,比如会集成到ASP.NET Core依赖注入框架中。
yoyofx
2018/09/05
1K0
在ASP.NET Core下使用SignalR技术
  上次我们讲到过如何在ASP.NET Core中使用WebSocket,没有阅读过的朋友请参考 WebSocket in ASP.NET Core 文章 。这次的主角是SignalR它为我们提供了简化操作WebSocket的框架。
yoyofx
2018/09/05
1.6K0
在ASP.NET Core下使用SignalR技术
【愚公系列】2022年11月 .NET CORE工具案例-.NET 7中的Quic通信
QUIC(Quick UDP Internet Connection)是谷歌制定的一种基于UDP的低时延的互联网传输层协议。我们知道,TCP/IP协议族是互联网的基础。其中传输层协议包括TCP和UDP协议。与TCP协议相比,UDP更为轻量,但是错误校验也要少得多。这意味着UDP往往效率更高(不经常跟服务器端通信查看数据包是否送达或者按序),但是可靠性比不上TCP。通常游戏、流媒体以及VoIP等应用均采用UDP,而网页、邮件、远程登录等大部分的应用均采用TCP。
愚公搬代码
2022/11/16
4830
【愚公系列】2022年11月 .NET CORE工具案例-.NET 7中的Quic通信
.net 温故知新:【10】.NET ORM框架EFCore使用入门之CodeFirs、DBFirst
前言:本系列是我自己学习.net相关知识,以便跟上.net跨平台的步伐,目前工作原因基本在.net Framework4.7以下,所以才有了这一系列的学习总结,但是并不是从基本的C#语法和基础知识开始的,而是围绕.net core以后平台的重要设计和差异进行温故知新。目的在于通过要点的梳理最后串联起整个跨平台框架。之前的几篇算是把框架重要设计和框架重要知识点复习了,当然什么系统都可能使用到ORM框架。所以这里为了整个过程的完整连续性加入一个EFCore的示例,ORM不算详细写了,毕竟ORM框架可以根据需求选择很多,如果再详细那又是另外一个系列了,这里只做简单介绍。从这篇ORM完成之后就将进入asp.net core的学习总结!
SpringSun
2022/12/22
3.1K0
.net 温故知新:【10】.NET ORM框架EFCore使用入门之CodeFirs、DBFirst
动手实现一个适用于.NET Core 的诊断工具
大家可能对诊断工具并不陌生,从大名鼎鼎的 dotTrace,到 .NET CLI 推出的一系列的高效诊断组件(dotnet trace,dotnet sos,dotnet dump)等, 这些工具提升了对程序Debug的能力和效率,可以让开发人员从更高层次的维度来发现程序中的问题。
全球技术精选
2021/05/18
5770
动手实现一个适用于.NET Core 的诊断工具
.NET Core部署中你不了解的框架依赖与独立部署
框架依赖的部署:顾名思义,依赖框架的部署 (FDD) 依赖目标系统上存在共享系统级版本的 .NET Core。 由于已存在 .NET Core,因此应用在 .NET Core 安装程序间也是可移植的。 应用仅包含其自己的代码和任何位于 .NET Core 库外的第三方依赖项。 FDD 包含可通过在命令行中使用 dotnet 实用程序启动的 .dll 文件。 例如,dotnet app.dll 就可以运行一个名为 app 的应用程序。 对于 FDD,仅部署应用程序和第三方依赖项。 不需要部署 .NET Core,因为应用将使用目标系统上存在的 .NET Core 版本。 这是定目标到 .NET Core 的 .NET Core 和 ASP.NET Core 应用程序的默认部署模型。
依乐祝
2018/10/10
2.1K0
推荐阅读
相关推荐
dot net core 使用 usb 获得通知读写串口通信LGPL
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验