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

最新文章

  1. 使用PM2将Node.js的集群变得更加容易
  2. IOS开发基础知识--碎片1
  3. mysql 命令(二)
  4. Java虚拟机9:Java类加载机制
  5. &quot;Hello World!&quot; for the NetBeans IDE
  6. jQuery als.js 跑马灯
  7. 安装pods 遇到的坑
  8. JavaScript设计模式——前奏
  9. 分页sql存储过程算法
  10. javascript与DOM的渊源
  11. ANDROID_MARS学习笔记_S01原始版_022_MP3PLAYER002_本地及remote标签
  12. OC——多态
  13. flask-session组件
  14. 在Linux上要安装SSH协议
  15. Git以一个远程分支为基础新建一个远程分支(转载)
  16. 【转】Python的神奇方法指南
  17. 安装 VMWare ESXi 6.7:VMB: 548: Unsupported CPU:6.7版本的ESXi 不支持 某些cpu了
  18. Chap4:探究操作系统[The Linux Command Line]
  19. NAT地址转换
  20. vmware的硬件选项里有关于虚拟化引擎的选项(虚拟机支持硬件虚拟化)

热门文章

  1. android#boardcast#广播实现强制下线功能
  2. 【并行计算-CUDA开发】CUDA存储器模型
  3. 零零散散的python笔记 2
  4. SQL Server 下载与安装
  5. Zookeeper 配置和原理探究
  6. Coloring Edges(有向图环染色)-- Educational Codeforces Round 72 (Rated for Div. 2)
  7. python 类(3) property
  8. Vue用递归实现一个消除输入框表情符的自定义directive
  9. 快速上手小程序的mpvue框架
  10. 【原创】大数据基础之Kudu(4)spark读写kudu