API do host USB para Android: tamanho do buffer de transferência em massa

Eu estou escrevendo software paracomunicar entre tablet (Motorola Xoom com Android versão 4.0.3 e Kernel versão 2.6.39.4)e um dispositivo periférico usando a API do host USB fornecido pelo Android. Eu uso apenas dois tipos de comunicação:

ao controle: controlTransfer(int requestType, int request, int value, int index, byte[] buffer, int length, int timeout)massa: bulkTransfer(UsbEndpoint endpoint, byte[] buffer, int length, int timeout)

Transferência de controle funciona bem, mas eu tenhoum problema com a transferência em massa. Eu posso usar apenas 32768 como um tamanho do buffer para a função bulkTransfer. Não é possível usar menos ou mais. Eu sei que não posso usar mais por causa do limite do buffer pipe (tamanho: 32769 bytes).

Este dispositivo periférico transmite dados que não são lidos corretamente pela função bulkTranfer. Suponho que alguns dados sejam perdidos.

Eu acho isso:No Linux Se um processo tentar ler de um tubo vazio (buffer), a leitura (2) irá bloquear até que os dados estejam disponíveis. Se um processo tentar gravar em um canal completo, escreva (2) blocos até que dados suficientes tenham sido lidos do canal para permitir que a gravação seja concluída.

E com base nisso, minha explicação do problema é que alguns dados não são gravados no pipe (buffer) por causa do bloqueio de sinalização feito pela função write (2). Estou correcto? Se isso for verdade, eu poderia mudar o buffer de tubulação.

Minha primeira solução para esse problema é maior buffer.Para o kernel> = 2.6.35, você pode alterar o tamanho de um pipe comfcntl(fd, F_SETPIPE_SZ, size) mas como posso encontrarfd (descritor de arquivo) para tubos USB?Segunda opção é usarulimit -p SIZE mas parametrop para o meu kernel não é para pipe, mas processo.

Alguém já enfrentou o mesmo problema, alguma solução?

questionAnswers(5)

yourAnswerToTheQuestion