2018-9-21-dot-net-core-使用-usb
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的更多相关文章
- dot net core 使用 usb
原文:dot net core 使用 usb 本文告诉大家如何在 dot net core 使用 usb 目录 获得通知 读写 串口通信 LGPL 首先需要打开 Nuget 安装 CoreCompat ...
- 在ASP dot Net Core MVC中用Controllers调用你的Asp dotnet Core Web API 实现CRUD到远程数据库中,构建你的分布式应用(附Git地址)
本文所有的东西都是在dot Net Core 1.1环境+VS2017保证测试通过. 本文接着上次文章接着写的,不了解上篇文章的可能看着有点吃力.我尽量让大家都能看懂.这是上篇文章的连接http:// ...
- Microsoft Artificial Intelligence Conference(2018.05.21)
时间:2018.05.21地点:北京嘉丽大酒店
- China Intelligent Office Summit(2018.11.21)
时间:2018.11.21地点:中关村软件园国际会议中心
- dot net core 使用 IPC 进程通信
本文告诉大家如何使用dot net core 和其他进程进行通信 一般都是使用 WCF 或 remoting 做远程通信,但是 dot net core 不支持 WCF 所以暂时我就只能使用 管道通信 ...
- 2018/8/21 qbxt测试
2018/8/21 qbxt测试 期望得分:0? 实际得分:0 思路:manacher 会写模板但是不会用 qwq 听了某人的鬼话,直接输出0,然后就gg了 #include <cstdio ...
- STM32 USB FS Core and USB OTG Core
STM32 USB-FS-Device development kit Compatible with the STM32F102xx and STM32F103xx series, STM32 L1 ...
- 2018.10.21 codeforces1071B. Minimum path(dp+贪心+bfs)
传送门 唉考试的时候写错了两个细节调了一个多小时根本没调出来. 下来又调了半个小时才过. 其实很简单. 我们先dpdpdp出最开始最多多少个连续的aaa. 然后对于没法继续连续下去的用贪心+bfsbf ...
- Dot Net Core中间件内部运行机制
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { ...
- 2018/1/21 Netty通过解码处理器和编码处理器来发送接收POJO,Zookeeper深入学习
package com.demo.netty; import org.junit.Before;import org.junit.Test; import io.netty.bootstrap.Boo ...
随机推荐
- Java——面向对象编程
在面向对象的编程中,不能再有第一步.第二步怎么做的概念. [对象和类]
- PHP导出excel文件名中文IE乱码解决
<?php $ua = strtolower($_SERVER['HTTP_USER_AGENT']); if(preg_match('/msie/', $ua) || preg_match(' ...
- php 抽象类适配器设计模式
以Kohana Cache设计为例 1.抽象类:E:\html\tproject\framework\modules\cache\classes\Cache.php <?php defined( ...
- All-one Matrices
All-one Matrices 单调栈 最大全一矩阵计数 #include<bits/stdc++.h> #define maxn 3005 using namespace std; # ...
- COUNT 和 IFNULL函数
用COUNT函数: mysql> SELECT count(one) FROM tb_test;+------------+| count(http://www.amjmh.com/v/BIBR ...
- ThinkPHP框架实现rewrite路由配置
rewrite路由形式: //网址/分组/控制器/方法 配置实现rewrite路由的配置: 1. 修改apache的配置 先修改httpd.conf配置文件中的AllowOverrideAll,全 ...
- 用vuex实现购物车功能
效果图 展示目录结构 product组件(纯静态代码) cart组件(纯静态代码) info组件(纯静态代码) 完成以上的三个组件,现在要开始调用这些组件,在App.vue中调用 如果你的姿势正确的话 ...
- flex 数字上标
以A的3次方为例,我们输入以下代码: /** * 部分代码参考Adobe文档: * http://help.adobe.com/zh_CN/AS3LCR/Flash_10.0/flash/text/e ...
- Delphi XE2 之 FireMonkey 入门(4) - 控件天生可做容器
1.新建 FM(HD) 工程, 先添加 TLine(默认名称是 Line1);2.在 Line1 选择状态下添加 Button1;3.取消选择后添加 Button2 此时, Button1.Paren ...
- 阶段1 语言基础+高级_1-3-Java语言高级_03-常用API第二部分_第6节 基本类型包装类_1_包装类的概念
只有这两个比较特殊