C# WPF上位机开发(usb设备访问)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        目前很多嵌入式设备都支持usb访问,特别是很多mcu都支持高速usb访问。和232、485下个比较,usb的访问速度和它们基本不在一个数量级上面。因此,使用usb进行上位机和嵌入式模块进行通信,一般会有比较好的交互体验。那么对于c# wpf来说,应该如何usb激进型输入访问呢?

1、usb设备插入到pc电脑

        一般嵌入式模块的usb接口插入之后,通过windows的设备管理器,可以看到一个陌生的usb设备被搜索到,但是当前这个设备还没有对应的驱动与之相匹配,所以大概是红色的状态。

2、用zadig安装驱动

        usb设备既然还没有驱动,那么这个时候一般用zadig软件给它匹配一个通用驱动。通常也就是libusbK这样的驱动。也正是因为这样的驱动,c# wpf才可以用LibsUsbDotNet接口对这个嵌入式设备进行usb访问。

3、安装LibUsbDotNet开源库

        目前可以用NuGet安装LibUsbDotNet开源库,这个其他库安装的方法是一样的。

4、引入开源库命名空间

        安装好开源库之后,通过using关键字就可以将相关关键字引入进来了。

using LibUsbDotNet;
using LibUsbDotNet.Main;

5、初始化设备

        usb设备的初始化其实比较简单,主要就是vendorId和productId,这两个数据不同的厂家一般是不一样的。

int vendorId = 0x1234; // modify it according to real device
int productId = 0xabcd;UsbDeviceFinder usbFinder = new UsbDeviceFinder(vendorId, productId); 
UsbDevice usbDevice = UsbDevice.OpenUsbDevice(usbFinder);

6、读取数据、写入数据

        发现了usb数据之后,剩下来的事情就好办了。一般就有两种操作,一种是读操作,一种是写操作。读操作的部分基本也是套路,

UsbEndpointReader reader = usbDevice.OpenEndpointReader(ReadEndpointID.Ep01);
byte[] readBuffer = new byte[1024];
int bytesRead;
ErrorCode ec1 = reader.Read(readBuffer, 1000, out bytesRead);

        写数据的操作是这样的,

UsbEndpointWriter writer = usbDevice.OpenEndpointWriter(WriteEndpointID.Ep02);
byte[] writeBuffer = Encoding.Default.GetBytes("Hello, USB!");
int bytesWritten;
ErrorCode ec2 = writer.Write(writeBuffer, 1000, out bytesWritten);

7、关闭usb设备

        如果usb停止操作了,一般直接调用对应的接口直接关闭usb就可以了。

usbDevice.Close();
UsbDevice.Exit();

8、usb协议

        一般来说,usb通信只是方式和手段,通信的内容是需要构建一套协议的。有什么cmd、什么参数、长度多少、crc校验是什么,一般都要说清楚。这个协议和232、485、网络的协议本质上是一回事,只不过usb物理上更快一点而已。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/285120.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软近日推出了Phi-2,这是一款小型语言模型,但其性能却十分强大

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

redis各种数据类型的应用场景

String应用场景 单值缓存 SET key value GET key 对象缓存 SET user:1 value(json格式数据)MSET user:1:name zhuge user:1:balance 1888 MGET user:1:name user:1:balance 分布式锁 SETNX product:10001 true //返回1代表获取锁成功 …

iPhone 17Pro/Max或升级4800万像素长焦镜头,配备自研Wi-Fi 7芯片。

iPhone 16未至,关于iPhone 17系列的相关消息就已经放出,到底是谁走漏了风声。 海通国际证券技术分析师Jeff Pu近日发布报告称,苹果将为2025年推出的iPhone 17ProMax配备4800万像素的长焦镜头。经调查,该分析师认为提升iPhone拍摄方…

【百度PARL】强化学习笔记

文章目录 强化学习基本知识一些框架Value-based的方法Q表格举个例子 强化的概念TD更新 Sarsa算法SampleSarsa Agent类 On_policy vs off_policy函数逼近与神经网络DQN算法DQN创新点DQN代码实现model.pyalgorithm.pyagent.py总结:举个例子 实战 视频:世界…

centos安装opencv并在springboot中使用

使用conda安装opencv,并在docker运行的容器中使用,这里以运行则springboot应用的容器为例 步骤一:安装 在conda中安装 # 安装依赖 conda install numpy matplotlib# 安装opencv conda install -c conda-forge opencv # 或者制定版本 conda…

AI创作系统ChatGPT网站源码,支持AI绘画,支持GPT语音对话+智能思维导图生成

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…

开发企业展示小程序的关键步骤和技巧

随着移动互联网的快速发展,小程序已经成为企业展示形象、推广产品和服务的重要工具。拥有一个优秀的小程序可以帮助企业提高品牌知名度,吸引更多潜在客户,提升用户体验。以下是拥有一个展示小程序的步骤: 确定需求和目标 首先&am…

linux修改用户uid和gid并且修改文件所有权(所属用户及所属用户组)(chown命令、chgrp命令)(批量修改查找并修改文件、目录uid和gid)

文章目录 修改Linux用户UID和GID以及文件所有权1. 修改用户的UID和GID1.1 用户UID和GID的概念1.2 修改用户UID1.3 修改用户GID 2. 修改文件所有权2.1 文件所有权的概念2.2 修改文件所有者(chown命令)2.3 修改文件所属用户组(chgrp命令&#x…

测试工具Jmeter:下载安装与环境配置

Jmeter是一款很出色的测试工具,这篇文章将介绍Jmeter的下载、安装和环境配置。 1. Jmeter下载 Jmeter官网:Apache JMeter - Download Apache JMeter 如图中所示,第一个下载项是运行在Linux中的,第二个是Windows运行的&#xff0…

Gitlab仓库推送到Gitee仓库的一种思路

文章目录 Gitlab仓库推送到Gitee仓库的一种思路1、创建Gitee的ssh公钥(默认已有Gitlab的ssh公钥)2、添加Gitlab远程仓库地址3、添加Gitee远程仓库地址4、拉取Gitlab远程仓库指定分支到本地仓库指定分支(以test分支为例)5、推送本地…

超详细整理,Java接口自动化测试实战-rest-assured

1、关于rest-assured rest-assured 是一个能够简化测试rest服务的Java DSL,像ruby或者python一样的动态语言去测试和验证http服务。 基于java并且兼容了groovy动态语言的特性,使我们像写脚本语言一样去测试http服务。 例如:你的http服务&a…

【玩转 TableAgent 数据智能分析】股票交易数据分析+预测

文章目录 一、什么是TableAgent二、TableAgent 的特点三、实践前言四、实践准备4.1 打开官网4.2 注册账号4.3 界面介绍4.4 数据准备 五、确认分析需求六、TableAgent体验七、分析结果解读八、总结&展望 一、什么是TableAgent TableAgent是一款面向企业用户的智能数据分析工…