2012-09-06 3 views
6

Je souhaite communiquer avec le téléphone via un port série. Après avoir écrit une commande au téléphone, j'ai utilisé ser.read(ser.inWaiting()) pour obtenir sa valeur de retour, mais j'ai toujours obtenu 1020 bytes de caractères, et en fait, les retours désirés sont censés être sur 50KB.Comment étendre la taille du tampon d'entrée de pyserial

J'ai essayé de définir ser.read(50000), mais l'interpréteur va se bloquer.

Comment est-ce que j'élargirais le tampon d'entrée pour obtenir tous les retours à la fois?

+0

Peut-être un [paramètre du système d'exploitation] (http://stackoverflow.com/a/10130825/673991)? –

Répondre

1

Je suppose que vous lisez 1020 octets parce que c'est tout ce qu'il y a dans le tampon, ce qui est retourné par ser.inWaiting(). Selon le débit en bauds, 50 Ko peuvent prendre un certain temps à être transférés, ou le téléphone s'attend à quelque chose de différent de vous. Handshaking?

Vérifiez la valeur de ser.inWaiting, puis le contenu de pour obtenir des conseils.

3

J'ai eu exactement le même problème, y compris la taille de la mémoire tampon de 1020 octets et n'ai pas trouvé un moyen de changer cela. Ma solution a été de mettre en œuvre une boucle comme:

in_buff='' 
while mbed.inWaiting(): 
    in_buff+=mbed.read(mbed.inWaiting()) #read the contents of the buffer 
    time.sleep(0.11)  #depending on your hardware, it can take time to refill the buffer 

Je serais très heureux si quelqu'un peut trouver une solution Redimensionner tampon!

0

pySerial utilise les pilotes d'OS natifs pour la réception en série. Dans le cas de Windows, la taille du pilote d'entrée est basée sur le pilote de périphérique.

Vous pouvez peut-être augmenter la taille dans vos paramètres du Gestionnaire de périphériques si c'est possible, mais finalement vous avez juste besoin de lire les données assez rapidement.