Ответ 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()
для возврата стандартного дескриптора файла, который теоретически может затем используйте, как если бы это был другой ресурс типа файла. Однако я хотел бы отметить, что я этого не пробовал.
Если ни один из этих адресов не затрагивает проблему, пожалуйста, перейдите к вопросу, чтобы уточнить, к чему вы пытаетесь найти примеры. Надеюсь, это поможет.