libusb_bulk_transfer 说明
2024-09-05 03:02:30
libusb_bulk_transfer函数说明
- API_EXPORTED int libusb_bulk_transfer(struct libusb_device_handle *dev_handle,
- unsigned char endpoint, unsigned char *data, int length, int *transferred,
- unsigned int timeout)
- {
- // 调用do_sync_bulk_transfer
- return do_sync_bulk_transfer(dev_handle, endpoint, data, length,
- transferred, timeout, LIBUSB_TRANSFER_TYPE_BULK);
- }
代码:
- static int do_sync_bulk_transfer(struct libusb_device_handle *dev_handle,
- unsigned char endpoint, unsigned char *buffer, int length,
- int *transferred, unsigned int timeout, unsigned char type)
- {
- struct libusb_transfer *transfer = libusb_alloc_transfer(0);
- int completed = 0;
- int r;
- if (!transfer)
- return LIBUSB_ERROR_NO_MEM;
- //传输结构 想必其核心就是传输的数据以及一些状态 其实就是货车
- libusb_fill_bulk_transfer(transfer, dev_handle, endpoint, buffer, length,
- bulk_transfer_cb, &completed, timeout);
- transfer->type = type;
- //在货车装完货物就可以出发了, 申请传输
- r = libusb_submit_transfer(transfer);
- if (r < 0) {
- libusb_free_transfer(transfer);
- return r;
- }
- //complete就是一个装载完毕的标准
- while (!completed) {
- r = libusb_handle_events(HANDLE_CTX(dev_handle));
- if (r < 0) {
- if (r == LIBUSB_ERROR_INTERRUPTED)
- continue;
- libusb_cancel_transfer(transfer);
- while (!completed)
- if (libusb_handle_events(HANDLE_CTX(dev_handle)) < 0)
- break;
- libusb_free_transfer(transfer);
- return r;
- }
- }
- *transferred = transfer->actual_length;
- switch (transfer->status) {
- case LIBUSB_TRANSFER_COMPLETED:
- r = 0;
- break;
- case LIBUSB_TRANSFER_TIMED_OUT:
- r = LIBUSB_ERROR_TIMEOUT;
- break;
- case LIBUSB_TRANSFER_STALL:
- r = LIBUSB_ERROR_PIPE;
- break;
- case LIBUSB_TRANSFER_OVERFLOW:
- r = LIBUSB_ERROR_OVERFLOW;
- break;
- case LIBUSB_TRANSFER_NO_DEVICE:
- r = LIBUSB_ERROR_NO_DEVICE;
- break;
- default:
- usbi_warn(HANDLE_CTX(dev_handle),
- "unrecognised status code %d", transfer->status);
- r = LIBUSB_ERROR_OTHER;
- }
- libusb_free_transfer(transfer);
- return r;
- }https://blog.csdn.net/zdyueguanyun/article/details/51192885
最新文章
- 使用PM2将Node.js的集群变得更加容易
- IOS开发基础知识--碎片1
- mysql 命令(二)
- Java虚拟机9:Java类加载机制
- ";Hello World!"; for the NetBeans IDE
- jQuery als.js 跑马灯
- 安装pods 遇到的坑
- JavaScript设计模式——前奏
- 分页sql存储过程算法
- javascript与DOM的渊源
- ANDROID_MARS学习笔记_S01原始版_022_MP3PLAYER002_本地及remote标签
- OC——多态
- flask-session组件
- 在Linux上要安装SSH协议
- Git以一个远程分支为基础新建一个远程分支(转载)
- 【转】Python的神奇方法指南
- 安装 VMWare ESXi 6.7:VMB: 548: Unsupported CPU:6.7版本的ESXi 不支持 某些cpu了
- Chap4:探究操作系统[The Linux Command Line]
- NAT地址转换
- vmware的硬件选项里有关于虚拟化引擎的选项(虚拟机支持硬件虚拟化)
热门文章
- android#boardcast#广播实现强制下线功能
- 【并行计算-CUDA开发】CUDA存储器模型
- 零零散散的python笔记 2
- SQL Server 下载与安装
- Zookeeper 配置和原理探究
- Coloring Edges(有向图环染色)-- Educational Codeforces Round 72 (Rated for Div. 2)
- python 类(3) property
- Vue用递归实现一个消除输入框表情符的自定义directive
- 快速上手小程序的mpvue框架
- 【原创】大数据基础之Kudu(4)spark读写kudu