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

最新文章

  1. 多栏多列布局(display:flex)
  2. 学习Maven之Properties Maven Plugin
  3. 数据库基础和JDBC
  4. 编写高质量JS代码的68个有效方法(七)
  5. asp.net中如何绑定combox下拉框数据(调用存储过程)
  6. Unicode和汉字编码小知识
  7. AutoCAD.NET二次开发错误集锦
  8. Spring JTA应用JOTM &amp; Atomikos II JOTM
  9. jquery的全选/全不选/反选以及attr添加checked属性失败的解决办法
  10. C#- 将秒数转化成任意时间格式
  11. java Servlet导出数据到Excel文件
  12. 【BZOJ2120】【块状链表】数颜色
  13. 高效的DDoS攻击探测与分析工具——FastNetMon
  14. ASP.NET页面同时发起多个ajax请求,出现阻塞情况
  15. 【IACV】边缘检测技术传统的方法与理论
  16. C++ 动态库导出函数名“乱码”及解决
  17. MYSQL中 ENUM 类型的详细解释
  18. 小巧玲珑:机器学习届快刀XGBoost的介绍和使用
  19. 2600 Phrases for Effective Performance Reviews
  20. Android hook神器frida(二)

热门文章

  1. linux系统tomcat项目部署和tomcat访问日志
  2. IDAPython: importing “site” failed
  3. hdu 2612(Find a way)(简单广搜)
  4. UVALive 2522 Chocolate(概率DP)
  5. 转:浅谈手机app测试注意点
  6. 吾爱破解脱壳练习第五期------upx壳
  7. Linux 监控文件事件
  8. itext操作PDF文件添加水印
  9. httpwebrequest 模拟登录 获取cookies 以前的代码,记录备忘!
  10. javascript之定义函数时 this 和prototype区别