?
之后在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 == myPiddev-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; i64; 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(recvCount0)
{
GetDlgItem(IDC_EDIT_USB_RECV_SHOW)-GetWindowText(receiveString);
for(int i = 0; irecvCount; i++)
{
receiveString.AppendChar(receiveBuffer[i]);
}
GetDlgItem(IDC_EDIT_USB_RECV_SHOW)-SetWindowText(receiveString);
每次发送和接手之前需要调用usb_claim_interface将函数库和操作系统关联起来
有了这些基本方法,通讯应该就不成问题了
详细代码见链接
使用LIBUSB实现和自定义通讯设备通讯--MFC代码在末尾的更多相关文章
IOT设备通讯,MQTT物联网协议,MQTTnet
一.IOT设备的特性 硬件能力差(存储能力基本只有几MB,CPU频率低连使用HTTP请求都很奢侈) 系统千差万别(Brillo,mbedOS,RIOT等) 如使用电池供电,电量消耗敏感 如果是小设备, ...
厂商自定义USB设备固件程序及特性
通过前面的学习,大家应该对USB固件程序结构有了比较深的认识,现在再来详细说说固件里决定设备识别成厂商自定义USB设备的地方有哪些,或者说厂商自定义USB设备的固件特性有哪些. 之前不止一次说过学习U ...
厂商自定义USB设备类概述
USB协会将常用具有相同/相似功能的设备归为一类,并制定了相关的设备类规范,这样就能保障只要依照同样的规范标准,即使不同的厂商开发的USB设备也可以使用同样的驱动程序,而且操作系统中无须为每种设备提供 ...
JAVA之旅(十四)——静态同步函数的锁是class对象 , 多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制
JAVA之旅(十四)--静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制 JAVA之旅,一路有你,加油! 一.静态同步函数的锁是clas ...
推荐阅读
- 华为移动路由器怎么关机,华为无线路由器怎么关机
- thinkphp常用库,thinkphp import
- 动态网站制作视频教程,动态网站制作视频教程免费
- 网红吧台直播,网红水吧装修图片大全
- 怎么看mysql是否配置 查看mysql配置
- 国际版华为怎样升级鸿蒙,国际版华为怎样升级鸿蒙手机
- 谁编译java源代码,java编译器什么用来将java源代码编译成字节码
- 爱心图片视频app安卓,爱心图片真实照片
- vb.net结构位对齐 vb 结构体