#include <errno.h>
#include <pthread.h>
#include <signal.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <libusb.h>
int main(){
libusb_device **devs;
libusb_device_handle *dev_handle;
libusb_context *ctx=NULL;
int r;
ssize_t cnt;
r=libusb_init(&ctx);//初始化bus总线
if(r<0)
{
printf("Init Error =%d\n",r);
return 1;
}
libusb_set_debug(ctx,3);
cnt=libusb_get_device_list(ctx,&devs); //搜索设备列表
if(cnt<0){
printf("Get Device Error\n");
return 1;
}
printf("%d Devices in list\n",cnt);
dev_handle= libusb_open_device_with_vid_pid(ctx,1111,1111);//vid,pid根据设备的 打开
if(dev_handle==NULL)
{
printf("Cannot open device\n");
}
else
{
printf("Device Opened\n");
}
libusb_free_device_list(devs,1); //释放列表
unsigned char *data=new unsigned char[4];
data[0]='a';
data[1]='b';
data[2]='c';
data[3]='d';
int actual;//用于计算多少BYTE写成功;
if(libusb_kernel_driver_active(dev_handle,0)==1)
{
printf("Kernel Driver Active\n");
if(libusb_detach_kernel_driver(dev_handle,0)==0)
{
printf("Kernel Driver Detached!\n");
}
r=libusb_claim_interface(dev_handle,0);
if(r<0)
{
printf("Cannot Claim Interface\n");
return 1;
}
printf("Claimed Interface\n");
printf("Data->%s<-\n",data);
printf("Writing Data...\n");
r=libusb_bulk_transfer(dev_handle,(2|LIBUSB_ENDPOINT_OUT),data,4,&actual,0);
if(r==0&&actual==4)
{
printf("Writing Successful!\n");
}
else
{
printf("Write Error\n");
}
r=libusb_release_interface(dev_handle,0);
if(r!=0)
{
printf("Cannot Release Interface\n");
return 1;
}
printf("Releaseed Interface\n");
libusb_close(dev_handle);
libusb_exit(ctx);
delete [] data;
return 0;
}
}