博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bulkTransfer通讯必须注意的问题:bulk buffer size(16K)
阅读量:6408 次
发布时间:2019-06-23

本文共 951 字,大约阅读时间需要 3 分钟。

hot3.png

原文出自:

    接:

    

    

   Android USB host与HID使用bulkTransfer通讯接收和发送的数据长度不会超过16384,这个问题困扰了我很长一段时间,终于发现问题所在,不是出在我的程序设计,也不是硬件的发送/接收有误,而是bulk transfer buffer size limited to 16K (16384)。

    只要你传送的数据不大于16384 bytes,传送不会出问题,一旦数据大于16384 bytes,也可以传送,只是大于16384后面的数据就会丢失,获取到的数据永远都是前面的16384 bytes,所以,android USB Host 模式与HID使用bulkTransfer(endpoint,buffer,length,timeout)通讯时,buffer的长度不能超过16384。

    出现这个问题的原因,看看下面的代码就知道了。。

#define MAX_USBFS_BUFFER_SIZE   16384

...
int usb_device_bulk_transfer(struct usb_device *device,
                            int endpoint,
                            void* buffer,
                            int length,
                            unsigned int timeout)
{
    struct usbdevfs_bulktransfer  ctrl;
    // need to limit request size to avoid EINVAL
    if (length > MAX_USBFS_BUFFER_SIZE)
            length = MAX_USBFS_BUFFER_SIZE
    memset(&ctrl, 0, sizeof(ctrl));
    ctrl.ep = endpoint;
    ctrl.len = length;
    ctrl.data = buffer;
    ctrl.timeout = timeout;
    return ioctl(device->fd, USBDEVFS_BULK, &ctrl);
}

    如果发送/接收的数据量很大,必须注意数据长度问题,希望能对进行HID开发的同胞有帮助。。

转载于:https://my.oschina.net/han21912/blog/138988

你可能感兴趣的文章
解决oracle和plsql乱码问题
查看>>
struts2结合poi-3.7实现数据导出为excel
查看>>
hdu4708 Rotation Lock Puzzle
查看>>
PROPAGATION_REQUIRED
查看>>
Mac上搭建ELK
查看>>
443 Chapter7.Planning for High Availability in the Enterprise
查看>>
HttpHandler初探 - 页面上输出图像
查看>>
框架和语言的作用
查看>>
unidac连接ORACLE免装客户端驱动
查看>>
Cygwin + OpenSSH FOR Windows的安装配置
查看>>
咏南中间件支持手机客户端
查看>>
fastscript增加三方控件之二
查看>>
Windows Vista RTM 你准备好了么?
查看>>
Tensorflow Serving 模型部署和服务
查看>>
Java Web开发详解——XML+DTD+XML Schema+XSLT+Servlet 3.0+JSP 2.2深入剖析与实例应用
查看>>
topcoder srm 680 div1 -3
查看>>
topcoder srm 430 div1
查看>>
具体数学第二版第四章习题(1)
查看>>
高效前端优化工具--Fiddler入门教程
查看>>
【翻译】我钟爱的HTML5和CSS3在线工具
查看>>