LIBUSB是一款简单好用的USB通讯开发库,一般HID设备用该库通讯能大大降低开发周期,使用如下,首先需要为设备安装驱动

在libusb的bin目录下有一个inf_wirzed.exe的文件,该文件是生成驱动所用,具体步骤可以网上百度,很是傻瓜式操作,安装好驱动之后就可以使用其通讯函数了,

安装好驱动之后的情况如下

使用visual studio开发,将lib_msvc目录下的libusb.lib文件添加到工程目录并将lusb0_usb.h文件加入工程,如下

之后在MFC工程中如下操作

OnInitDialog方法中调用usb_init函数,这是初始化函数库的,每个工程需要而且仅仅需要初始化一次.

查找系统中全部USB的方法如下

usb_find_busses();

usb_find_devices();//重新寻找设备

for (bus = usb_get_busses(); bus; bus = bus->next)

{

for (dev = bus->devices; dev; dev = dev->next)

{

usbCount++;

deviceName.Empty();

handle = usb_open(dev);

usb_get_string_simple(handle,dev->descriptor.iProduct,nameBuffer,128);

usb_close(handle);

pidBuffer[usbCount-1] = dev->descriptor.idProduct;//枚举所有设备

vidBuffer[usbCount-1] = dev->descriptor.idVendor;

pvnBuffer[usbCount-1] = dev->descriptor.bcdDevice;

deviceName.AppendFormat("%s",nameBuffer);

((CComboBox*)GetDlgItem(IDC_COMBO_USB_DEVICE_ENMU))->AddString(deviceName);

}

}

 

打开usb设备的方法如下

//现在遍历全部设备,找到对应PID vid的设备打开

usb_find_busses();

usb_find_devices();//重新寻找设备

for (bus = usb_get_busses(); bus; bus = bus->next)

{

for (dev = bus->devices; dev; dev = dev->next)

{

if(dev->descriptor.idProduct == myPid && dev->descriptor.idVendor)

{

//PID VID相同

usb_handle = usb_open(dev);

}

}

}

 

发送数据的方法

char sendBuffer[64] = {0};

CString sendString;

GetDlgItem(IDC_EDIT_USB_SEND_MESSAGE)->GetWindowText(sendString);

for(int i = 0; i < 64; i++)

{

if(i >= sendString.GetLength())sendBuffer[i] = 0;

else

{

sendBuffer[i] = sendString.GetAt(i);

}

}

usb_claim_interface(usb_handle, 0);//默认设备

usb_interrupt_write(usb_handle,0x01,sendBuffer,64,100);

usb_release_interface(usb_handle, 0);

 

接收数据的方法

char receiveBuffer[64] = {0};

CString receiveString;

int recvCount = 0;

usb_claim_interface(usb_handle, 0);//默认设备

recvCount = usb_interrupt_read(usb_handle,0x81,receiveBuffer,64,100);

usb_release_interface(usb_handle, 0);

if(recvCount > 0)

{

GetDlgItem(IDC_EDIT_USB_RECV_SHOW)->GetWindowText(receiveString);

for(int i = 0; i < recvCount; i++)

{

receiveString.AppendChar(receiveBuffer[i]);

}

GetDlgItem(IDC_EDIT_USB_RECV_SHOW)->SetWindowText(receiveString);

 

每次发送和接手之前需要调用usb_claim_interface将函数库和操作系统关联起来

有了这些基本方法,通讯应该就不成问题了

详细代码见链接

http://download.csdn.net/detail/dengrengong/8523587

使用LIBUSB实现和自定义通讯设备通讯--MFC代码在末尾的更多相关文章

  1. IOT设备通讯,MQTT物联网协议,MQTTnet

    一.IOT设备的特性 硬件能力差(存储能力基本只有几MB,CPU频率低连使用HTTP请求都很奢侈) 系统千差万别(Brillo,mbedOS,RIOT等) 如使用电池供电,电量消耗敏感 如果是小设备, ...

  2. 厂商自定义USB设备固件程序及特性

    通过前面的学习,大家应该对USB固件程序结构有了比较深的认识,现在再来详细说说固件里决定设备识别成厂商自定义USB设备的地方有哪些,或者说厂商自定义USB设备的固件特性有哪些. 之前不止一次说过学习U ...

  3. 厂商自定义USB设备类概述

    USB协会将常用具有相同/相似功能的设备归为一类,并制定了相关的设备类规范,这样就能保障只要依照同样的规范标准,即使不同的厂商开发的USB设备也可以使用同样的驱动程序,而且操作系统中无须为每种设备提供 ...

  4. JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制

    JAVA之旅(十四)--静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制 JAVA之旅,一路有你,加油! 一.静态同步函数的锁是clas ...

  5. Windows Phone:自定义字体在xaml和代码中使用

    最近,我的小应用<认字>更新了一个能发声的版本,朋友对Speech做读音没有兴趣,反而对其中使用的楷体文字表示了兴趣,也许Speech的文章比较多,这次我对这个自定义字体在xaml和代码中 ...

  6. C#自定义FTP访问类的代码

    如下资料是关于C#自定义FTP访问类的代码,应该对各朋友有帮助. using System; using System.Collections.Generic; using System.Text; ...

  7. springboot扫描自定义的servlet和filter代码详解_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 这几天使用spring boot编写公司一个应用,在编写了一个filter,用于指定编码的filter,如下: /** ...

  8. 设备通讯——RS232

    RS232的接口有两种--一种公头.一种母头,两种头的引脚是有区别的 MAX232电路图: 注意:串口通讯需要交叉接线.

  9. 安卓MonkeyRunner源码分析之与Android设备通讯方式

    如前文<谁动了我的截图?--Monkeyrunner takeSnapshot方法源码跟踪分析>所述,本文主要会尝试描述android的自动化测试框架MonkeyRunner究竟是如何和目 ...

随机推荐

  1. Struts2实现国际化

    public class I18nAction extends ActionSupport { private static final long serialVersionUID = -693330 ...

  2. java 创建一个File文件对象

    Example10_1.java import java.io.*; public class Example10_1 { public static void main(String args[]) ...

  3. ffmpeg合并多个视频

    实例1: 把4个视频(1.f4v, 2.f4v, 3.f4v, 4.f4v)合并成一个文件(out.mp4) 基本无损,而且速度飞快! #-vcodec copy -acodec copy   == ...

  4. Linux学习 -- 启动管理

    1 CentOS 6.x启动管理 系统运行级别 运行级别命令 #runlevel   查看级别 #init 运行级别  改变级别 系统默认运行级别 配置文件 /etc/inittab id:3:ini ...

  5. 利用未文档化API:RtlAdjustPrivilege 提权实现自动关机

    这里主要是利用NTDLL.dll中未文档化的API: RtlAdjustPrivilege 来实现提权.自动关机的功能. RtlAdjustPrivilege定义如下: NTSTATUS RtlAdj ...

  6. java导读

    导读:      我们学习Java大概有3个方向,第一,桌面系统,包括C/S结构:第二,J2ME,面向无限领域,很有潜力的家伙,看看中国的手机用户就知道了.第三,面向企业应用.计算的平台,J2EE. ...

  7. SQL Server 索引维护sql语句

    使用以下脚本查看数据库索引碎片的大小情况: 复制代码代码如下: DBCC SHOWCONTIG WITH FAST, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS  以 ...

  8. 帝国cms文章内容tags关键词设置调用方法以及tags静态化

    说实话帝国cms用起来真的不好找一些功能,就比如说帝国cms的tag标签调用.需要注意的是帝国CMS文章的关键词和tags标签并非一码事,关键词标签是设置文章的关键词的,是用来给搜索引擎说明本篇文章的 ...

  9. 硬盘安装Win7、CentOS7双系统

    待补充 0.软件 Acronis Disk Director:用来对硬盘分区,将磁盘的一部分格式化成Linux可以识别的ext3格式 Ext2Fsd:因为Windows不能识别ext3格式的文件系统, ...

  10. Dubbo阿里Alibaba开源的分布式服务框架

    [获奖公布]"我的2016"主题征文活动    程序猿全指南,让[移动开发]更简单!      [观点]移动原生App开发和HTML 5开发,你更看好哪个?   博客的神秘功能 D ...