title author date CreateTime categories
dot net core 使用 usb
lindexi
2018-09-21 19:53:34 +0800
2018-04-14 15:22:47 +0800
dotnetcore usb dotnet

本文告诉大家如何在 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.Ports

LGPL

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

更多参考请看 LibUsbDotNet LibUsbDotNet/LibUsbDotNet

2018-9-21-dot-net-core-使用-usb的更多相关文章

  1. dot net core 使用 usb

    原文:dot net core 使用 usb 本文告诉大家如何在 dot net core 使用 usb 目录 获得通知 读写 串口通信 LGPL 首先需要打开 Nuget 安装 CoreCompat ...

  2. 在ASP dot Net Core MVC中用Controllers调用你的Asp dotnet Core Web API 实现CRUD到远程数据库中,构建你的分布式应用(附Git地址)

    本文所有的东西都是在dot Net Core 1.1环境+VS2017保证测试通过. 本文接着上次文章接着写的,不了解上篇文章的可能看着有点吃力.我尽量让大家都能看懂.这是上篇文章的连接http:// ...

  3. Microsoft Artificial Intelligence Conference(2018.05.21)

    时间:2018.05.21地点:北京嘉丽大酒店

  4. China Intelligent Office Summit(2018.11.21)

    时间:2018.11.21地点:中关村软件园国际会议中心

  5. dot net core 使用 IPC 进程通信

    本文告诉大家如何使用dot net core 和其他进程进行通信 一般都是使用 WCF 或 remoting 做远程通信,但是 dot net core 不支持 WCF 所以暂时我就只能使用 管道通信 ...

  6. 2018/8/21 qbxt测试

    2018/8/21 qbxt测试 期望得分:0? 实际得分:0 思路:manacher   会写模板但是不会用 qwq 听了某人的鬼话,直接输出0,然后就gg了 #include <cstdio ...

  7. STM32 USB FS Core and USB OTG Core

    STM32 USB-FS-Device development kit Compatible with the STM32F102xx and STM32F103xx series, STM32 L1 ...

  8. 2018.10.21 codeforces1071B. Minimum path(dp+贪心+bfs)

    传送门 唉考试的时候写错了两个细节调了一个多小时根本没调出来. 下来又调了半个小时才过. 其实很简单. 我们先dpdpdp出最开始最多多少个连续的aaa. 然后对于没法继续连续下去的用贪心+bfsbf ...

  9. Dot Net Core中间件内部运行机制

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { ...

  10. 2018/1/21 Netty通过解码处理器和编码处理器来发送接收POJO,Zookeeper深入学习

    package com.demo.netty; import org.junit.Before;import org.junit.Test; import io.netty.bootstrap.Boo ...

随机推荐

  1. 【BZOJ4337】树的同构(树同构,哈希)

    题意: 树是一种很常见的数据结构. 我们把N个点,N-1条边的连通无向图称为树. 若将某个点作为根,从根开始遍历,则其它的点都有一个前驱,这个树就成为有根树. 对于两个树T1和T2,如果能够把树T1T ...

  2. (转载)《利用Python进行数据分析·第2版》电子书

    https://www.jianshu.com/p/04d180d90a3f https://www.jianshu.com/p/04d180d90a3f https://www.jianshu.co ...

  3. k8s上的基础概念和术语

    kubernetes基本概念和术语   kubeernetes中的大部分概念如Node,Pod,Replication Controller ,Serverce等都可以看作一种“资源对象”,几乎所有的 ...

  4. C++ Boost库的编译及使用

    https://www.jianshu.com/p/de1fda741beb https://www.cnblogs.com/weizhixiang/p/5804778.html Windows编译 ...

  5. 关于c++ error : passing " "as" " discards qualifiers

    http://www.cppblog.com/cppblogs/archive/2012/09/06/189749.html 今天写了一段小代码,本以为正确,但运行后,就somehow ”discar ...

  6. 在Ubuntu16.04下安装SourceInsight和WeChat

    1 使用Wine安装SourceInsight4 1.1 安装Wine $ sudo apt-get install wine 1.2 安装SourceInsight 下载SourceInsight软 ...

  7. linux 杀掉僵尸进程 (zombie process, defunct)

    本文说明为什么会出现僵尸进程 (zombie process, defunct),以及如何杀掉僵尸进程 1. 为什么有僵尸进程 僵尸进程出现在父进程没有回收子进程的 PCB 的时候,这个时候子进程已经 ...

  8. base64编解码的两个函数

    base64编解码的两个函数,声明,参考网络上的代码实现. unsigned char *base64_encode(unsigned char *str, long* lpBufLen) { lon ...

  9. 44 答疑(三)--join的写法/Simple nested loop join的性能问题/Distinct和group by的性能/备库自增主键问题

    44 答疑(三) Join的写法 35节介绍了join执行顺序,加了straight_join,两个问题: --1 如果用left join,左边的表一定是驱动表吗 --2 如果两个表的join包含多 ...

  10. 请正视抑郁症(附Zung氏抑郁自评量表(SDS))

    为什么要记录? 因为去年开始关注抑郁症这块,逐渐发现抑郁症原来不只是简单的情绪问题,它是情绪与实质性的生理相互作用并紧密关联的疾病,并不是单纯的劝解自己就可以疗愈的一种疾病,它的存在需要换着身边的人帮 ...