HarmonyOS 鸿蒙Next bulkTransfer的out endpoint设置的buffer size是否有限制?限制多大?目前传输效率很低
HarmonyOS 鸿蒙Next bulkTransfer的out endpoint设置的buffer size是否有限制?限制多大?目前传输效率很低
目前的情况是 按100KB的大小设置buffer来读取的话,平均1s读取不到10MB的数据,如果数据大的话,就会很慢,比android和ios慢很多,如果将buf 大小设置超过200KB,就会直接超时出错
const dataChunkSize = 1024 * 100; //试过用200k直接超时出错
while (offset < totalLen) {
const bytesToRead = Math.min(dataChunkSize, totalLen - offset);
const readBytes = await usbManager.bulkTransfer(
this.devicePipe, this.inBulk, payload.subarray(payloadOffset, payloadOffset + bytesToRead), 15000);
offset += readBytes;
payloadOffset += readBytes;
}
所以问下各位老哥,
1.这个传入的buf size有什么限制吗?看接口也没特别说明
2.这个usb bulk传输速度提升还有其他方式吗?
3.这个超时具体怎么配置的?我尝试设置0,接口内部还是会打印超时堆栈然后出错,感觉timeout入参控制的等级不够
4.这些错误码具体是啥原因?哪里可以看得到,我找了下没找到
下面这个是用dataChunkSize = 1024 * 100时,接口内部打印的log,这个传输速度偏慢,100KB要10+ms传输
下面是将dataChunkSize设置为1024*200后,接口内部就直接出错,如下截图
</p
更多关于HarmonyOS 鸿蒙Next bulkTransfer的out endpoint设置的buffer size是否有限制?限制多大?目前传输效率很低的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
1、该接口是使用ipc通信,所以对传入的buf size有200k限制;该接口是走ipc通信,一次ipc通信 不止传buffer, 还有其它参数。 所以 buffer, 建议设置成190KB。
2、可以使用usbManager.getFileDescriptor,获取文件描述符,参考安卓使用libusb三方库进行通信,这样就不会有ipc通信的限制,该接口后续也在迭代,您也可以等待新接口上线!参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/js-apis-usbmanager-V13#usbmanagergetfiledescriptor
3、您的最后一张截图,ret=-7是超时报错,超时配置设置成0,是无限等待,不确认您最后一张截图是设置0后出现的吗?理论上设置了0,就不会有-7的超时报错!
另外 对usbManager使用有问题,可以进群沟通交流!
更多关于HarmonyOS 鸿蒙Next bulkTransfer的out endpoint设置的buffer size是否有限制?限制多大?目前传输效率很低的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
你好,感谢回复
第一点 我目前改成190KB,没问题,但是速度还是很慢,实测usb3.0+支持3.0的数据线,120MB的数据android 400多ms,鸿蒙8s多
第二点 获取这个文件描述符后 要怎么使用,有对应的文档介绍吗? 还有新接口上线是有解决这个传输速度问题吗?有预计时间吗? android我们也是用的sdk内的android.hardware.usb
第三点 我又重新看了下,当数据超过200KB时,是返回-3的,然后后续的发送命令返回-7了
同时我又同时试了下InterruptBulk来接收事件,我把timeout设置为0了,但是还是会出现-7,错误如下,看log是5s超时了,请问接口内部会有5s超时吗? 01-06 13:37:03.491 E SendRequest 168: failed, handle:24 error:-7 desc:*.IUsbSrv proxy:1642721344 time:728648042390367 01-06 13:37:03.491 E SendRequest is failed, error code: -7 01-06 13:37:03.491 E failed width ret = -7 ! 01-06 13:37:03.491 E ControlTransferExecute failed 01-06 13:37:03.492 E BulkTransfer failed 01-06 13:37:03.492 E read event data elapsedTime 5013
第一点,当前接口120MB传输配置190KB需要600+*2次ipc通信,这是由于内部实现使用ipc导致传输慢的原因; 第二点,获取这个文件描述符后 要怎么使用,创建NAPI,在NAPI中调用libusb进行实现,您进群了吗,可以在群里发言讨论usb相关问题,参考安卓的使用方式; 新接口可以解决传输速度慢的问题,使用的匿名空间的实现方式,长度就不受限制了,速度也会对应变快;当前正在开发中,具体时间请您关注官方文档; 第三点,您是否可以给出更详细的调用逻辑和全部的日志?
您好!
您的问题已收到,待对应责任田回复,请您耐心等待,谢谢!
HarmonyOS 鸿蒙Next的bulkTransfer
方法在out endpoint(输出端点)设置的buffer size确实存在限制,这一限制通常取决于硬件规格和驱动实现。具体而言,USB控制器和端点本身的物理特性会设定一个最大传输单元(MTU),这个MTU通常在端点描述符中定义,它决定了单次传输的最大数据量。
在HarmonyOS中,这个限制可能因设备而异,但通常不会超过硬件所允许的最大值。例如,对于某些USB 2.0设备,这个值可能是64KB或更大,但具体数值需要参考设备的硬件规格。
传输效率低的问题可能由多种因素引起,包括但不限于:
- 端点buffer size设置不当,导致频繁的中断传输。
- 驱动程序或固件中的性能瓶颈。
- 系统资源限制,如CPU或内存不足。
- USB总线的负载和干扰。
要解决这个问题,可以尝试优化buffer size设置,确保它符合硬件规格且能有效利用USB带宽。同时,检查驱动程序和固件的性能,以及系统资源的使用情况,也是必要的步骤。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html