传输大量数据USB

时间:2012-06-07 12:13:03

标签: android usb

嘿,我一直试图在这方面工作一段时间,但我只是没有在哪里

我正在尝试从USB设备中获取字节数,这适用于一两行进入,但是当它变得相当多时它就不起作用。

我正在使用这行代码来引入数据:

conn.bulkTransfer(epIN, buffer, 57600, 500);

有没有办法一遍又一遍地进行USB传输,直到没有更多数据进入?因为进入的数据量可以是8个字节到几个MB


回复user387184

这样的事情会传输大量数据吗?

while ( conn.bulkTransfer(epIN, buffer, 57600, 500) > 0 ){
    \\do some stuff
}

2 个答案:

答案 0 :(得分:2)

当您尝试与转换器下游的(最终)串行设备通信时,如果协议设计为发送和接收的消息具有终止字符,则非常有用。这可以防止你不得不猜测是否会有更多的数据在几毫秒内到来。换行是一种非常常见的选择。例如:

主持人:你的名字是什么?\ n

设备:卡米洛特的加拉哈德爵士。\ n

主持人:你最喜欢的颜色是什么?\ n

设备:蓝色\ nNo,黄色\ n

鉴于设备已在“蓝色”之后用\ n终止响应,主机将不会期望看到第二个澄清答案。通常情况下,如果设备以这种方式“违反规则”,主机将不会读取“否,黄色”,直到它寻找下一个要求的答案,此时它可能会拒绝它作为一个难以置信的响应,并向设备发出重置命令。 (有些协议有“预先安排响应并重复提问”方案以防止此类混淆)

除了使用终止字符之外,当然还有其他两个众所周知的可能性:一个是非常简短的代码 - 单个字符或可能是不可打印的二进制代码 - 具有预期的长度响应(可能根据代码的开头而不同)。另一种是在数据包结构方面有一些东西 - 一个可识别的标题,一个长度字段,然后是数据。

主要观点是“等待并查看是否还有其他”协议主要用于两个人之间或人与自动系统之间。当自动化系统相互通信时,他们倾向于使用一种协议,该协议定义了如何知道是否会有更多。 如果您的终极下游端点设备的固件的创建者知道他们的业务,那么您应该并且不应该期望更多数据的明确规则。

答案 1 :(得分:1)

如果您的USB连接确实在没有更多数据的情况下停止接收数据,那么您需要做的就是在您的语句周围放置一段时间的receiveBufferIsNotEmpty:

lenOfReceivedBuffer = conn.bulkTransfer(epIN, buffer, 57600, 500);
如果在500ms超时时无法在端口上找到更多数据,则

获取0 in lenOfReceivedBuffer

如果您的发送方太慢,您也可能会稍微增加超时。