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. 超大文件上传方案(PHP)

    前段时间做视频上传业务,通过网页上传视频到服务器. 视频大小 小则几十M,大则 1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1,文件过大,超出服务端的请求大小限制:2,请求时间过长, ...

  2. POJ 2112 Optimal Milking ( 经典最大流 && Floyd && 二分 )

    题意 : 有 K 台挤奶机器,每台机器可以接受 M 头牛进行挤奶作业,总共有 C 头奶牛,机器编号为 1~K,奶牛编号为 K+1 ~ K+C ,然后给出奶牛和机器之间的距离矩阵,要求求出使得每头牛都能 ...

  3. Linux内核源码分析

    Linux源码下载: https://www.kernel.org/ https://git.kernel.org/ Linux内核源码阅读以及工具(转): https://blog.csdn.net ...

  4. 修改select的默认样式

    在我们用select的时候,通常因为他的默认样式比较丑而用自己样式,那首先要去掉他的默认样式 去掉select的边框和点击时的蓝色边框 select{border: none;outline: non ...

  5. jsoncpp 能做什么

    jsoncpp能做什么1)跨平台跨语言动态信息数据交换.2)作为格式化配置文件使用3)对应数据结构数据类型做序列化和反序列化4)value::toStyledString 格式化json串输出 一.w ...

  6. VMware 启动之后发现 eth0不存在

    启动虚拟机之后发现,eth0不存在. 问题现象: 解决办法(我): 1. 查看/etc/sysconfi/network-scripts/ifcfg-eth0的配置是否与外部网络配置一致. 例如NAT ...

  7. 滑动报 Unable to preventDefault inside passive event listener due to target being treated as passive 的解决方法

    google浏览器滑动出现以下问题: 解决办法如下:在html元素下添加样式 touch-action: none; html{ touch-action:none; }

  8. Oracle--利用监听器日志监控访问该数据库的客户端IP

    服务器10.10.10.168  数据库seineebs 客户端 10.10.10.14  用户guipeng.zhang 查看监听器状态: 在本机利用PL/SQL工具连接该数据库 查看监听器日志:一 ...

  9. 认识Dow(下)

    节点属性 在文档对象模型 (DOM) 中,每个节点都是一个对象.DOM 节点有三个重要的属性 : 1. nodeName : 节点的名称 2. nodeValue :节点的值 3. nodeType ...

  10. 【ABAP系列】SAP F4搜索帮助的高级版

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP F4搜索帮助的高级版   ...