Ubuntu下调试USB通信

环境: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 %d\n", 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 libusb\n");
        exit(1);
    }

    r = find_print_device();
    if (r < 0) {
        fprintf(stderr, "Could not find/open device\n");
        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! %d\n", r);
            goto out;
        }
        r = libusb_claim_interface(devh, 0);

        if (r < 0) {
            fprintf(stderr, "usb_claim_interface error %d\n", 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 = %d\n",count);
    }

    for(int i = 0;i<4;i++)
    {
        fprintf(stderr, "imgbuf is  %c\n", 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! %d\n",r);
        goto out0;
    }
    else
    {
        fprintf(stderr, "bulk transfer_rx successed!,count_rx = %d\n",count_rx);
    }

    for(int i = 0;i<4;i++)
    {
        fprintf(stderr, "imgbuf_rx is  %c\n", 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的原因时不支持这种类型的数据传输。于是暂停测试,有机会再更新。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值