bulkTransfer无法按预期工作。为什么以及如何解决它?

时间:2014-08-13 07:22:43

标签: java android usb android-service

我有一个服务打开一个设备,向它发送数据,然后从该设备接收答案,一切都很好,但测试显示一些奇怪的结果。如果重要的话,我正在发送命令并在不同的线程中获得答案。

这是处理接收的线程。

public void receiveThread() throws Exception{
    byte[] buffer = new byte[80];
    int i;
    while(true)
    {
        if((USBint != null) && (USBendIn != null))
        {
            i = USBcon.bulkTransfer(USBendIn, buffer, 2, 1);
            if(i > 0)
            {
                String s2 = new String(buffer);
                String s1 = bytesToHex(buffer);
                showToast("data received (" + i + ") :\n" + s1 + "\n" + s2);
            }
        }
        Thread.sleep(20);
    }
}

onStartCommand中,我设置了USBcon和USBendIn。一个是连接,另一个是IN方向的端点。

注意力集中在i = USBcon.bulkTransfer(USBendIn, buffer, 2, 1);行 我已经尝试了长度和超时参数的不同变化,它们都给出了完全相同的结果。 USBcon.bulkTransfer(USBendIn, buffer, 2, 3000); //这应该等待2个字节并等待它们约3秒钟。如果在这3秒之前接收到2个字节,则该函数应返回2并仅接收这2个字节。

USBcon.bulkTransfer(USBendIn, buffer, 100, 3000); //这应该等待100个字节并等待它们约3秒钟,如果3秒后收到一些字节(少于100个),它应该返回这个数字。

USBcon.bulkTransfer(USBendIn, buffer, 2, 1); //这应该等待2个字节并等待它们大约1毫秒。如果没有任何进入1ms,它应该返回0.

我甚至试过这个i = USBcon.bulkTransfer(USBendIn, buffer, 10, -20);猜测负面超时也是可以接受的

这4个例子都做了同样的事情。我以等间隔接收一些具有随机长度的字节。我应该收到的整个消息是24个字节,我有时会得到3个部分(例如:1个字节+ 8个字节+15个字节),有时候我会得到它们。即使我已经声明我只想接收2个字节,它们也被放入缓冲区。这显示了length参数中的错误。超时也不起作用。无论我写什么作为超时,函数都会在一段时间后返回(无法判断多少),无论接收的字节数是多少。即使是负面时期也是如此。即使长度为240的Integer.MAX_VALUE也是如此(它每3秒左右接收24个字节=>它应该等待将近半分钟,但事实并非如此)。

这个函数只有2次不同的作用是当我输入0作为长度时。服务启动后2-3秒,平板电脑重新启动。设置负长度没有任何结果,没有重启,也没有收到数据。

那么......发生了什么事?这对我的服务来说不是一个大问题,但是当我无法信任系统功能时我不喜欢。让我想知道还有什么不能正常工作。

0 个答案:

没有答案