2012-09-06 10 views
6

Desidero comunicare con il telefono tramite la porta seriale. Dopo aver scritto un comando al telefono, ho utilizzato ser.read(ser.inWaiting()) per ottenere il valore restituito, ma ho sempre ottenuto il totale 1020 bytes di caratteri e, in realtà, i resi desiderati dovrebbero essere superiori a 50KB.Come espandere la dimensione del buffer di input di pyserial

Ho provato a impostare ser.read(50000), ma l'interprete si bloccherà.

Come si espanderebbe il buffer di input per ottenere tutti i ritorni in una volta?

+0

Possibilmente una [impostazione del sistema operativo] (http://stackoverflow.com/a/10130825/673991)? –

risposta

1

Sto indovinando che stai leggendo 1020 byte perché quello è tutto ciò che c'è nel buffer, che è ciò che sta ritornando ser.inWaiting(). A seconda della velocità di trasmissione, potrebbe essere necessario un po 'di tempo per il trasferimento di 50 KB, oppure il telefono si aspetta qualcosa di diverso da te. Stretta di mano?

Ispezionare il valore di ser.inWaiting, quindi il contenuto di ciò che si è riceve il per suggerimenti.

3

Ho avuto esattamente lo stesso problema, inclusa la dimensione del buffer di 1020 byte e non ho trovato un modo per cambiarlo. La mia soluzione è stata quella di implementare un ciclo come:

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 

Sarei molto contento se qualcuno può trovare una soluzione tampone ridimensionamento!

0

pySerial utilizza i driver OS nativi per la ricezione seriale. Nel caso di Windows, la dimensione del driver di input è basata sul driver del dispositivo.

Potrebbe essere possibile aumentare le dimensioni nelle impostazioni di Gestione dispositivi se è possibile, ma in definitiva è sufficiente leggere i dati in modo sufficientemente veloce.

Problemi correlati