libusb 使用说明


******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










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值