Je suis en train de recevoir des données à partir d'un périphérique personnalisé basé sur un FTDI 2232H puce.
Je suis à l'aide d'un simple Asynchrone en mode FIFO, et les données entrantes taux est de 3,2 MO/sec.
Tout fonctionne parfaitement avec des tests de code sur mon PC, mais je vais avoir des problèmes de réception de données sur mon Toshiba Thrive.
TDI Android pilote échoue, donc je suis de codage à l'aide de Java.
Je peux recevoir 95%+ de données parfaitement, mais à chaque fois dans un certain temps les données "crache" et je reçois des portions du même 4-5K de données deux fois, trois fois, puis retour à de bonnes données.
Je ne suis pas aller trop vite pour le développer ou Android, parce que j'ai déjà eu les données en double (6.4 MO/sec) et il a obtenu environ 95% de ce que bien. (Donc il ne devrait avoir aucun problème à la moitié du taux.)
Il semble qu'il y est une sorte de bug dans la mise en mémoire tampon (ou double-buffering) qui se passe à l'intérieur d'Android. (Il n'est pas le tampon à l'intérieur de la FTDI 2232H parce que la répétition de données est plus grand que la puce 4K de mémoire tampon interne.)
Le code d'installation est simple, et c'est encore de travail ~près~ parfaitement.
La boucle où les données à saisir se produit est très simple:
while(!fStop)
if(totalLen < BIG_BUFF_LEN-IN_BUFF_LEN)
{
len=conn.bulkTransfer(epIN, inBuff, IN_BUFF_LEN, 0);
System.arraycopy(inBuff, 0, bigBuff, totalLen, len);
totalLen+=len;
}
Dans le cas où vous pensez que c'est le temps de retard pour la arraycopy - je encore perdre les données, même si je commente cette ligne.
Le IN_BUFF_LEN 16384 (bulkTransfer ne reviendra pas plus que ça, même si je augmenter la taille de la inBuff).
Le bigBuff est de plusieurs méga-octets.
Comme une question secondaire - ce que quelqu'un sait comment passer un pointeur vers bulkTransfer qui remplira bigBuff directement --- à un décalage (pas de départ à la position '0'?