概述
环境:Ubuntu 16,libusb1.0.22
测试对象:U盘
程序源代码:
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include "libusb.h"
static struct libusb_device_handle *devh = NULL;
static unsigned char imgbuf[4] = {'a','b','c','d'};
unsigned char imgbuf_rx[4]={'e','e','e','e'};
static int find_print_device(void)
{
devh = libusb_open_device_with_vid_pid(NULL,0xffff,0x1201);//luo ji webcam id;(NULL,0x046d,0x0825);//
fprintf(stderr, "open_devh %dn", devh?0:EIO);
return devh ? 0 : -EIO;
}
int main(void)
{
int r;
int count = 0;
int count_rx = 0;
r = libusb_init(NULL);
if (r < 0) {
fprintf(stderr, "failed to initialise libusbn");
exit(1);
}
r = find_print_device();
if (r < 0) {
fprintf(stderr, "Could not find/open devicen");
goto out;
}
r = libusb_claim_interface(devh, 0);
{
if(r<0)
{
r = libusb_detach_kernel_driver(devh,0);
if (r < 0)
{
fprintf(stderr, "libusb_detach_kernel_deriver failed! %dn", r);
goto out;
}
r = libusb_claim_interface(devh, 0);
if (r < 0) {
fprintf(stderr, "usb_claim_interface error %dn", r);
goto out;
}
}
}
printf("claimed interface successed!n");
r = libusb_bulk_transfer(devh,0x01,imgbuf,sizeof(imgbuf),&count,0);
if (r < 0)
{
fprintf(stderr, "Could not bulk transfer!n");
goto out0;
}
else
{
fprintf(stderr, "bulk transfer successed!,count = %dn",count);
}
for(int i = 0;i<4;i++)
{
fprintf(stderr, "imgbuf is %cn", imgbuf[i]);
}
r = libusb_bulk_transfer(devh,0x82,imgbuf_rx,sizeof(imgbuf_rx),&count_rx,2); //test usb read in and printf the test result 20200907
if (r < 0)
{
fprintf(stderr, "Could not bulk transfer_rx! %dn",r);
goto out0;
}
else
{
fprintf(stderr, "bulk transfer_rx successed!,count_rx = %dn",count_rx);
}
for(int i = 0;i<4;i++)
{
fprintf(stderr, "imgbuf_rx is %cn", imgbuf_rx[i]);
}
out0:
libusb_release_interface(devh, 0);
libusb_detach_kernel_driver(devh,0);
out:
libusb_close(devh);
libusb_exit(NULL);
return r >= 0 ? r : -r;
}
测试结果:
1、成功将数据写入U盘。
2、再将数据读出失败,返回值 -9.
疑问是不是U盘坏掉了?明明端点都是正确的。
发现U盘虽然有端点(如0x81)显示bulk类型支持,实际操作时返回 -9的原因时不支持这种类型的数据传输。于是暂停测试,有机会再更新。
最后
以上就是义气金毛为你收集整理的Ubuntu下调试USB通信的全部内容,希望文章能够帮你解决Ubuntu下调试USB通信所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复