Dennis Lee Bieber wrote:
> 
>> The really sad thing is that I get a perfectly constructed
>> packet from the reading variable, and that gets butchered when I
>> try to slice it up to pick out individual elements. Since
>> pyserial doesn’t do anything to rearrange the data, then the
>> CMUcam must do the heavy lifting of extracting a perfect packet
>> from the data stream. It’s a real shame I couldn’t use it
> 
>       More likely it is running fast enough to keep up with the serial
> port, and synchronizes on the "\rM". Your code seems to be reading in
> bursts and somehow losing parts during your processing (which is
> strange, I'd have expected pyserial to buffer some data between reads).
> 
>       Lacking that, I'd probably end up creating a thread to handle the
> serial port reading, which basically looks like:
> 
> while ser.read(1) != "\r": pass #synchronize
> while not Done:
>       bfr = []
>       while True:
>               c = ser.read(1)
>               bfr.append(c)
>               if c == "\r": break
>       queue.put("".join(bfr))
> 
> This should result in complete packets (from the "M" to a "\r") 

Oh well. readline(eol="\r") will do that much better.

while 1:
     data = ser.readline(eol="\r")
     args = data.split()
     if args[0] == "M":
        # command M; do something with args[1:]
     elif args[0] == "KK":
        # command KK; do something with args[1:]
     [.. process other commands ..]
     else:
        # Invalid command: might be an incomplete
        # packet. Just ignore it.
        pass
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to