原文出自:
接:
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开发的同胞有帮助。。