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. IMP指针

    可能大家一直看到有许多朋友在Runtime相关文章中介绍IMP指针的概念,那么IMP究竟有什么实际作用呢?让我们先从一个函数看起来. Method Swizzling 如果对Runtime有一定了解的 ...

  2. 视频 -> 帧 浅析

    原创:转载请注明出处 关于帧率 首先以下几个概念必须弄清楚 1.一个帧就是一个画面 2.视频有无数个帧组成 3.表达时间的量  CMTime 的定义: typedef struct { CMTimeV ...

  3. 如何给grldr.mbr和grldr改名

    grldr修改方法: 比如要把grldr 改成gzldr :1.先把文件名改成gzldr:2.用ultraedit或winhex打开gzldr:3.虽然文本框全都是乱码,别管它,把光标定位在右边文本框 ...

  4. android 5.0

    google 2014开发大会发布了全新的设计语言Material Design,并计划将其应用到Android.Chrome OS和网页等平台上,而最新发布的Android L系统就采用了这种设计语 ...

  5. 最简单的epoll的使用范例 : 监听 标准输入 ,并将数据回显到终端

    #include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<sys/epoll.h> # ...

  6. VIJOS P1081 野生动物园 SBT、划分树模板

    [描述] cjBBteam拥有一个很大的野生动物园.这个动物园坐落在一个狭长的山谷内,这个区域从南到北被划分成N个区域,每个区域都饲养着一头狮子.这些狮子从北到南编号为1,2,3,…,N.每头狮子都有 ...

  7. BootStrap详解之(二)

    六.内容 Bootstrap 将全局 font-size 设置为 14px,line-height 设置为 1.428 中心内容 .lead 将字体大小.加粗.行高修改 (无卵高深用) 标记 mark ...

  8. Struts+Spring+Hibernate的Web应用执行过程

    struts1和spring有两种整合的方法  一种是action和spring bean映射:一种是将action交给spring初始化 第一种方式:访问.do的URL->tomcat接收到r ...

  9. automaticallyAdjustsScrollViewInsets 标签栏不正常显示

    想做的效果如下: 结果那个首页.手办模型神马的就是不显示啊... 这个标签栏是用scrollView做的,解决办法: viewController.automaticallyAdjustsScroll ...

  10. 文件夹添加 IIS 应用程序池用户权限

    http://serverfault.com/questions/81165/how-to-assign-permissions-to-applicationpoolidentity-account ...