Android usb host: передача асинхронного прерывания

Я пытаюсь подключить USB-устройство (строить самостоятельно) для связи с моей доской разработки (ODROID-X) К сожалению, примеров очень мало, что касается асинхронной связи. У меня возникли проблемы с обменом данными с прерываниями - как построить соединение, используя режим асинхронного прерывания? В одном направлении передача возможна... но в обоих она не работает. Есть ли такой пример:

  • отправить ByteBuffer с endpoint_OUT
  • получить сообщение от devic на endpoint_IN

в режиме прерывания.

Большое спасибо за вашу поддержку.

Харди

Ответ 1

Возможно, я не понимаю этот вопрос. Пример приложения ракеты lanucher, входящего в пакет API от уровня 12, использует методы queue() и requestWait() для обработки конечных точек типа прерываний. Запросы - это вход или выход и зависят от направления EndPoint.

Код для симпатичного noddy request- > reply выглядит примерно так. Вы бы хотели структурировать реальный код по-разному, но это дает вам суть того, что должно произойти (надеюсь)

public void run() {
    int bufferMaxLength=mEndpointOut.getMaxPacketSize();
    ByteBuffer buffer = ByteBuffer.allocate(bufferMaxLength);
    UsbRequest request = new UsbRequest(); // create an URB
    request.initialize(mConnection, mEndpointOut);
    buffer.put(/* your payload here */;

    // queue the outbound request
    boolean retval = request.queue(buffer, 1); 
        if (mConnection.requestWait() == request) { 
             // wait for confirmation (request was sent)
             UsbRequest inRequest = new UsbRequest(); 
             // URB for the incoming data
             inRequest.initialize(mConnection, mEndpointIn); 
             // the direction is dictated by this initialisation to the incoming endpoint.
             if(inRequest.queue(buffer, bufferMaxLength) == true){
                  mConnection.requestWait(); 
                  // wait for this request to be completed
                  // at this point buffer contains the data received
             }
        }
}

Если вы действительно ищете способ запустить этот IO в асинхронном режиме, не привязывая к нему нить, я думаю, вам нужно рассмотреть метод DeviceConnection.getFilehandle() для возврата стандартного дескриптора файла, который теоретически может затем используйте, как если бы это был другой ресурс типа файла. Однако я хотел бы отметить, что я этого не пробовал.

Если ни один из этих адресов не затрагивает проблему, пожалуйста, перейдите к вопросу, чтобы уточнить, к чему вы пытаетесь найти примеры. Надеюсь, это поможет.