USB请求可以在一个设备上运行但不能在其他设备上运行吗?

时间:2018-11-06 13:10:31

标签: android usb

我正在尝试在使用MCP2200的自定义设备与android设备之间建立USB通信。 对于我的应用程序需求,我必须使用异步通信。 自定义设备应该向Android平板电脑发送一个字节,而后者需要以5个字节进行响应。我将通信放在单独的线程中。这是run()函数:

public void run() {

        while (usb_connected && communicating_usb) {
                //reception request
                readbuffer.clear();
                readbuffer.rewind();

            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            req.initialize(connection, endpointin);
            req.queue(readbuffer, 1);
            connection.requestWait();



            toto=readbuffer.get(0);
            inbuffer="__"+Byte.toString(toto);
            req.close();

            if(toto==toe){//the correct value was received
                    received=1;//correct reception flag
                    tmpbuffer.clear();
                    tmpbuffer.rewind();
                    writebuffer.clear();
                    writebuffer.rewind();

                    int mocx;
                    int mocy;
                    if (perty.isOfset()) {
                        if (move_y > 128) mocx = move_x + 6;
                        else if (move_y < 127) mocx = move_x - 3;
                        else mocx = move_x;
                    } else {
                        mocx = move_x;
                    }
                    mocy = move_y;
                    if (mocx > 255) mocx = 255;
                    if (mocx < 0) mocx = 0;

                    int x1 = mocx % 16;
                    int x2 = (mocx - x1) / 16;
                    int y1 = mocy % 16;
                    int y2 = (mocy - y1) / 16;
                    int to_send=0;
                    if (perty.getSpeed_level() == 1) to_send= sendcount + 0x80;
                    else if (perty.getSpeed_level() == 2)
                        to_send = sendcount + 0x90;
                    else if (perty.getSpeed_level() == 3)
                        to_send = sendcount + 0xA0;
                    else if (perty.getSpeed_level() == 4)
                        to_send = sendcount + 0xB0;

                    tmpbuffer.putInt(to_send);
                    to_send = x1 + 0xC0;
                    tmpbuffer.putInt(to_send);
                    to_send = x2 + 0xD0;
                    tmpbuffer.putInt(to_send);
                    to_send = y1 + 0xE0;
                    tmpbuffer.putInt(to_send);
                    to_send = y2 + 0xF0;
                    tmpbuffer.putInt(to_send);

                    sendcount++;
                    if (sendcount == 16) sendcount = 0;
                    while(writebuffer.capacity()-writebuffer.remaining()!=0){
                        writebuffer.rewind();
                        writebuffer.clear();
                    }

                    for(int rectifier=0;rectifier<5;rectifier++){writebuffer.put(rectifier,tmpbuffer.get(3+rectifier*Integer.SIZE/Byte.SIZE));
                    }
                    reqout.initialize(connection, endpointout);
                    reqout.queue(writebuffer,5);
                    connection.requestWait();
                    reqout.close();
                    toto=0x00;
                }
        }
    }

此过程在Samsung Galaxy Tab(Android 5.1.1)上可以很好地工作,但在其他平板电脑上却表现得很奇怪:  -Sony Xperia Z2平板电脑(Android 6.0.1):读取的值始终为0。无论我从自定义设备发送什么。我也通过允许0作为正确值来解决了这个问题(不是真正的解决方案,但它使它运行了)。对于发送(从平板电脑到自定义设备),我总是收到带有正确值的奇怪值,直到我在循环中(通过睡眠功能)添加了10 ms的延迟。它像魅力一样运作。  -Sonny Xperia Z Ultra(Android 5.1.1):与Z2平板电脑相同的问题,但延迟功能似乎无法解决问题,我在随机接收时只能得到255。  -OnePlus 3(Android 8.0.0):即使启用了OTG存储,该应用程序甚至无法检测到OTG电缆。几周前,它确实做到了,但现在似乎无法检测到它。

请帮助!头痛已经超过了两个星期,而且我似乎还没有任何确切的理由说明这些东西不起作用。 谢谢。

0 个答案:

没有答案