2011-12-15 3 views
1

Pour lire les données d'une connexion USB ouverte, on utilise la méthode UsbDeviceConnection bulkTransfer.meilleure façon de lire UsbDeviceConnexion en mode hôte USB

J'ai la situation que, après l'envoi d'une demande, la routine devrait lire toutes les données entrantes, qui peuvent être juste 8 octets ou même 300 + octets.

Le problème est que bulkTransfer ne lit pas tous les octets pour une raison quelconque - il revient juste avec quelques octets alors qu'il pourrait y en avoir d'autres à venir.

Vaut-il mieux écrire une boucle autour de bulkTransfer jusqu'à ce qu'il n'y ait plus de données, ou augmenter le timeout, ou éventuellement il y a une autre approche.

Quelle serait la meilleure façon de gérer cela?

J'ai essayé l'approche en boucle et je suis surpris qu'il ne lise que 10-20 octets à chaque fois avec un délai d'attente de 1 seconde. Je suis sûr qu'il y a plus de données déjà disponibles, je ne sais pas pourquoi il ne lit pas plus à la fois.

La taille de tampon utilisée est-elle importante - de nombreux exemples ont 4096 mais comment cela peut-il influencer la lecture des données?

Un grand merci

Répondre

1

Si l'appareil envoie 10 octets à la fois et le fait à plusieurs reprises pour terminer les octets 300+, vous obtenez toujours que ces morceaux de 10 octets chaque fois que vous lisez avec transfert en vrac. En d'autres termes, la méthode n'attend pas de remplir votre mémoire tampon. Il revient dès qu'il y a quelque chose. Donc, si vous voulez vraiment collecter toute la réponse de plus de 300 octets, vous devez faire une boucle.

Questions connexes