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.
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?