libusb是一个可以跨平台使用的usb设备驱动,能够发现连接上位机上所插入的usb设备。按道理说应该是可以驱动所有usb设备的。
2、安装步骤1、在官网http://libusb.info/可以下载
2、下载好压缩包后导入到linux系统下,这里我使用的是ubuntu18.04版系统,libusb版本是用的libusb-1.0.22,解压后使用一下指令安装
./configure make make install
3、如果安装有错误,configure: error: udev support requested but libudev header not installed。则使用
./configure--build=x86_64-linux --disable-udev
然后再自行make等步骤
4、安装完成之后查看libusb的库和头文件所在的位置分别为
/usr/local/lib /usr/local/include/libusb-1.03、调用过程
1、首先确保插入usb设备并连接上虚拟机,在虚拟机->可移动设备中查看是否连接上了usb设备。
2、查看usb设备的详细信息,使用以下指令查看设备的pid和vid,如果不知道自己插入的设备是哪一个,就先拔了usb使用以下指令,再插上后调用以下指令,看哪个是多出来的就知道了所使用的的设备是哪一个。
lsusb lsusb -v
3、示例
主要分为初始化、找设备、连接设备、读空、读写测试等
static libusb_device_handle *dev_handle = NULL;unsigned char find_dev()
{
//初始化
int ret;
ret = libusb_init(NULL);
if(ret < 0) {
fprintf(stderr, "failed to initialise libusbn");
return 1;
}
//打开指定pid和vid的设备
dev_handle = libusb_open_device_with_vid_pid(NULL, 0x1992, 0x0668);
if(dev_handle == NULL){
perror("Cannot open devicen");
}else{
printf("Device Openedn");
}
//内核驱动激活与分离(这一句我没怎么搞懂为啥需要,懂的朋友欢迎留言告诉我)
if(libusb_kernel_driver_active(dev_handle, 0) == 1) {
printf("Kernel Driver Activen");
if(libusb_detach_kernel_driver(dev_handle, 0) == 0){
printf("Kernel Driver Detached!n");
}
}
//声明接口并读空
ret = libusb_claim_interface(dev_handle, 0);
if(ret < 0) {
printf("Cannot Claim Interfacen");
return 1;
}else{
qDebug()<<"claim interface success!";
int size = SIZE_USB_BUF_CLEAN;//这是一个宏定义 #define SIZE_USB_BUF_CLEAN (1024*2)
char data[SIZE_USB_BUF_CLEAN] = "";
int val = 0;
while (val == 0) // 这里会一直读空,引起超时;
{
size = SIZE_USB_BUF_CLEAN;
val = USBRead(data, size);
}
qDebug()<<"after clean";
val = USBReadConfigureData();
isUSBConnect = val == AIMOOE_OK;
return val;
}
}
USBRead(char *recdata, int maxlen)
{
int transferred;
if (!dev_handle)
{
qDebug()<<"USB not open";
return 1;
}
unsigned char *urecdata=(unsigned char*)recdata;
int ret;
ret=libusb_bulk_transfer(dev_handle,EP_IN,urecdata,maxlen,&transferred,500);
if(ret<0){
qDebug()<<"bulk read error,and ret="<
参考博客:https://www.cnblogs.com/sankye/p/13914909.html



