Странно, что USB-запрос может работать на одном устройстве, но не на других? - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь установить USB-соединение между пользовательским устройством, использующим MCP2200, и устройствами Android. Для своих приложений я должен использовать асинхронную связь. Пользовательское устройство должно отправлять один байт на планшет 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 мс в цикле (через функцию ожидания). Оно работало завораживающе. - Sonny Xperia Z Ultra (Android 5.1.1): та же проблема, что и у планшета Z2, но функция задержки, похоже, не решает проблему, и я получаю только 255 на приеме и в случайное время. - OnePlus 3 (Android 8.0.0): приложение даже не обнаруживает кабель OTG даже при включенном хранилище OTG. Пару недель назад это произошло, но сейчас, похоже, его не обнаруживают.

ПОЖАЛУЙСТА, помогите! головная боль длилась более двух недель, и у меня, похоже, нет какой-то конкретной причины, по которой все не работает. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...