******Window下:
1. 下载地址:https://sourceforge.net/projects/libusb-win32/ 下载libusb-win32-bin-1.2.6.0
2. 选择bin目录中的inf-wizard.exe;点Next;然后根据vid,pid指定一个usb设备;点Next,保存Inf文件,点Install Now;成功后可以在设备管理器中看到多了一个libusb-win32 devices的设备节点及设备 (以UVC camera设备为例,原来的图像设备就没有该设备了)
3. 以visual studio2010为例,在项目属性中添加include目录和lib目录,分别为:libusb-win32-bin-1.2.6.0\include和libusb-win32-bin-1.2.6.0\lib\msvc
4. 包含头文件和库
#include "lusb0_usb.h"
#pragma comment(lib, "libusb")
5. 代码示例
struct usb_bus *busses, *bus;
struct usb_device *dev, *selectdev = NULL;
char data[8];
usb_init();
usb_find_busses();
usb_find_devices();
busses = usb_get_busses();
for (bus = busses; bus; bus = bus->next)
{
for (dev = bus->devices; dev; dev = dev->next)
{
if (dev->descriptor.idVendor==0x0edc && dev->descriptor.idProduct==0x3080)
{
selectdev = dev;
goto found;
}
}
}
found:
if (selectdev != NULL)
return;
devh = usb_open(selectdev);
usb_claim_interface(devh, 0);
// do something. for example, control transfer
usb_control_msg(devh, 0xa1, 0x85, 0x0a00, 0x0400, data, 2, 0);
memset(data, 0, sizeof(data));
data[1] = 0xd0;
data[4] = 0x08;
usb_control_msg(devh, 0x21, 0x01, 0x0a00, 0x0400, data, 8, 0);
usb_release_interface(devh, 0);
usb_close(devh);
******Ubuntu 下
1. 下载地址:https://sourceforge.net/projects/libusb/files/ 下载libusb-1.0.20.tar.bz2
2. 编译
# tar xjvf libusb-1.0.20.tar.bz2
# cd libusb-1.0.20
# ./configure --prefix=/home/pc/usb/sdk
# make
# make install
3. 代码示例:
#include <unistd.h>
#include <stdio.h>
#include <libusb-1.0/libusb.h>
#include <string.h>
void main(int argc, char *argv[])
{
libusb_device **devs;
libusb_device_handle *devh;
libusb_context *ctx;
char data[8];
libusb_init(&ctx);
devh = libusb_open_device_with_vid_pid(ctx, 0x0edc, 0x3080);
if (libusb_kernel_driver_active(devh, 0) == 1) {
printf("Kernel Driver Active\n");
if (libusb_detach_kernel_driver(devh, 0) == 0)
printf("Kernel Driver Detached\n");
}
libusb_claim_interface(devh, 0);
libusb_control_transfer(devh, 0xa1, 0x85, 0x0a00, 0x0400, data, 2, 0);
memset(data, 0, sizeof(data));
data[1] = 0xd0;
data[4] = 0x08;
libusb_control_transfer(devh, 0x21, 0x01, 0x0a00, 0x0400, data, 8, 0);
libusb_release_interface(devh, 0);
libusb_close(devh);
libusb_exit(ctx);
}
4. 编译
#gcc demo.c -o demo -I/home/pc/usb/sdk/include -L/home/pc/usb/sdk/lib -lusb-1.0
#./demo (运行)
******Android 下(针对UVCCamera-master摘录部分代码): JNI cpp文件中
1. 代码示例片段
#include "libUVCCamera.h"
unsigned charpdata[8];
libusb_device_handle *devh = mDeviceHandle->usb_devh; // mDeviceHandle由代码原有部分获取,代码略
libusb_control_transfer(devh, 0xa1, 0x85, 0x0a00, 0x0400, pdata, 2, 0);
memset(pdata, 0, sizeof(pdata));
pdata[1] = 0xd0;
pdata[4] = 0x08;
libusb_control_transfer(devh, 0x21, 0x01, 0x0a00, 0x0400, pdata, 8, 0);
备注:关于control_transfer的内容,需要根据实际的USB设备去定义,这边只是针对我的设备举例
****** libuvc 编译
参考网址: https://int80k.com/libuvc/doc/
# git clone https://github.com/ktossell/libuvc.git
# cd libuvc
# mkdir build
# cmake -DCMAKE_BUILD_TYPE=Release .. (注意后面的两个点)
# make && make install