libusb_bulk_transfer函数说明

  1.  
    API_EXPORTED int libusb_bulk_transfer(struct libusb_device_handle *dev_handle,
  2.  
    unsigned char endpoint, unsigned char *data, int length, int *transferred,
  3.  
    unsigned int timeout)
  4.  
    {
  5.  
    // 调用do_sync_bulk_transfer
  6.  
    return do_sync_bulk_transfer(dev_handle, endpoint, data, length,
  7.  
    transferred, timeout, LIBUSB_TRANSFER_TYPE_BULK);
  8.  
    }

代码:

    1.  
      static int do_sync_bulk_transfer(struct libusb_device_handle *dev_handle,
    2.  
      unsigned char endpoint, unsigned char *buffer, int length,
    3.  
      int *transferred, unsigned int timeout, unsigned char type)
    4.  
      {
    5.  
      struct libusb_transfer *transfer = libusb_alloc_transfer(0);
    6.  
      int completed = 0;
    7.  
      int r;
    8.  
       
    9.  
      if (!transfer)
    10.  
      return LIBUSB_ERROR_NO_MEM;
    11.  
       
    12.  
      //传输结构 想必其核心就是传输的数据以及一些状态 其实就是货车
    13.  
      libusb_fill_bulk_transfer(transfer, dev_handle, endpoint, buffer, length,
    14.  
      bulk_transfer_cb, &completed, timeout);
    15.  
      transfer->type = type;
    16.  
       
    17.  
      //在货车装完货物就可以出发了, 申请传输
    18.  
      r = libusb_submit_transfer(transfer);
    19.  
      if (r < 0) {
    20.  
      libusb_free_transfer(transfer);
    21.  
      return r;
    22.  
      }
    23.  
       
    24.  
       
    25.  
       
    26.  
      //complete就是一个装载完毕的标准
    27.  
       
    28.  
      while (!completed) {
    29.  
      r = libusb_handle_events(HANDLE_CTX(dev_handle));
    30.  
      if (r < 0) {
    31.  
      if (r == LIBUSB_ERROR_INTERRUPTED)
    32.  
      continue;
    33.  
      libusb_cancel_transfer(transfer);
    34.  
      while (!completed)
    35.  
      if (libusb_handle_events(HANDLE_CTX(dev_handle)) < 0)
    36.  
      break;
    37.  
      libusb_free_transfer(transfer);
    38.  
      return r;
    39.  
      }
    40.  
      }
    41.  
       
    42.  
      *transferred = transfer->actual_length;
    43.  
      switch (transfer->status) {
    44.  
      case LIBUSB_TRANSFER_COMPLETED:
    45.  
      r = 0;
    46.  
      break;
    47.  
      case LIBUSB_TRANSFER_TIMED_OUT:
    48.  
      r = LIBUSB_ERROR_TIMEOUT;
    49.  
      break;
    50.  
      case LIBUSB_TRANSFER_STALL:
    51.  
      r = LIBUSB_ERROR_PIPE;
    52.  
      break;
    53.  
      case LIBUSB_TRANSFER_OVERFLOW:
    54.  
      r = LIBUSB_ERROR_OVERFLOW;
    55.  
      break;
    56.  
      case LIBUSB_TRANSFER_NO_DEVICE:
    57.  
      r = LIBUSB_ERROR_NO_DEVICE;
    58.  
      break;
    59.  
      default:
    60.  
      usbi_warn(HANDLE_CTX(dev_handle),
    61.  
      "unrecognised status code %d", transfer->status);
    62.  
      r = LIBUSB_ERROR_OTHER;
    63.  
      }
    64.  
      libusb_free_transfer(transfer);
    65.  
      return r;
    66.  
      }
       
      https://blog.csdn.net/zdyueguanyun/article/details/51192885

libusb_bulk_transfer 说明的更多相关文章

  1. libusb_bulk_transfer 异步同步

    同步方式 libusb_bulk_transfer(devh, ep_bulk, buf, CAM_BUF_SZ, &len, timeout); 进入libusb研究,发现libusb是采用 ...

  2. libusb_bulk_transfer返回值不是0

    libusb_bulk_transfer返回值不是0 libusb_bulk_transfer返回值不是0libusb_bulk_transfer返回值不是0 ?????

  3. how to learn device driver

    making a linux usb driver http://www.kroah.com/linux/ http://matthias.vallentin.net/blog/2007/04/wri ...

  4. libusb示例

    #include <stdio.h> #include <libusb-1.0/libusb.h> #include <stdint.h> #include < ...

  5. ubuntu14 16使用libusb过程中遇到的问题及解决方法

    从ubuntu16换到ubuntu14后安装libusb运行一直在libusb_bulk_transfer语句出现运行出现段错误,分别换了libusb1.0.0,1.0.9及1.0.21. 通过查阅链 ...

  6. libusb 源码阅读

    libusb_init(NULL), 如果传入一个NULL, 则libusb 内部会有一个 usbi_default_context 变量在内部保存上下文. 这样以后调用 libusb 函数时可以不指 ...

  7. libusb 3.0

    1)usb3.0 在windows使用winusb时,出现ReadFile的input buffer 太大时,读不到数据问题? 2)linux下,usb 3.0 libusb_claim_interf ...

  8. LIBUSB_TRANSFER_ERROR

    首先, 我的设备是一个KNX无线接受模块, 利用UART与主机相连, 看到的设备就是ttyUSBx 利用libusb写了一个程序, 调用同步I/O 的API, 即libusb_bulk_transfe ...

  9. libusb-test

    /******************************************************************************** * * File Name : li ...

随机推荐

  1. 【VS开发】uafxcwd.lib(afxmem.obj) : error LNK2005: 已经在 LIBCMTD.lib(new.obj) 中定义错误解决方案

    如果在编译MFC程序的时候出现下列及类似的错误: 1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator ...

  2. windows 3种方式运行exe文件

    1.双击文件运行 2.打开cmd,cd 到要运行的文件目录下,输入文件名或者文件名.exe 3.将文件目录配置到系统环境变量,按windws+R输入文件名或者文件名.exe

  3. Android Service 入门

    说明 Service 工作在主进程上.生命周期图 两种状态 Started 比如Activity通过调用startService 方法.一旦被启动(Started),服务就永久在后台运行,即使创建他的 ...

  4. [转帖]图解SSL/TLS协议

    图解SSL/TLS协议   作者: 阮一峰 日期: 2014年9月20日 感谢 腾讯课堂NEXT学院 赞助本站,腾讯官方的前端课程 免费试学. http://www.ruanyifeng.com/bl ...

  5. Elastic Search的聚合搜索

    就是使用ES提供的aggs语法结果,使用DSL搜索的语法,实现聚合数据的统计,查询.ES中,如果新增document数据的时候,对应的index和type不存在,则自动创建. 1 准备源数据 PUT ...

  6. java如何防止反编译(转)

    出处: java如何防止反编译 一些防止java代码被反编译的方法 综述(写在前面的废话) Java从诞生以来,其基因就是开放精神,也正因此,其可以得到广泛爱好者的支持和奉献,最终很快发展壮大,以至于 ...

  7. vue技术分享之你可能不知道的7个秘密

    本文是vue源码贡献值Chris Fritz在公共场合的一场分享,觉得分享里面有不少东西值得借鉴,虽然有些内容我在工作中也是这么做的,还是把大神的ppt在这里翻译一下,希望给朋友带来一些帮助. 一.善 ...

  8. JavaScript - 过滤敏感字符

    目录 before 源码示例 before 本篇博客展示了如何是在前端对铭感字符及一些特殊的命令做过滤. 好处是,少发一次请求,减少服器校验压力. 源码示例 <!DOCTYPE html> ...

  9. 杭电2019多校第一场,Problem I,String 2019

    题目描述 Tom has a string containing only lowercase letters. He wants to choose a subsequence of the str ...

  10. 记_JavaEE框架应用开发期末设计(一)

    日志 工作者:Black_YeJing 工作目标:实现卖家dao层的商品的增删改查(只能对自己发布的进行增删改查). 工作进程追踪: ①创建了Shop类(卖家类) ②创建了ShopDao的接口里面编写 ...