El 27/03/16 a las 17:42, Dan Smith via chirp_devel escribió:
+def _clean_buffer(radio):
- """Cleaning the read serial buffer"""
- radio.pipe.setTimeout(0.1)
- try:
dump = radio.pipe.read(100)
- except Exception:
raise errors.RadioError("Unknown error cleaning the serial buffer")
This won't really flush the inbound reliably. You need to loop until you read at least once with nothing returned (i.e. hit the timeout). If there are 101 bytes in the pipe, this will not read them all out. Similarly, if there are ten bytes and the first read returns five of those, you won't clear the rest. Remember that read() does not have to return all the bytes you asked for.
You mean something like this:
===========================================
def _clean_buffer(radio): # I omitted the non essential code radio.pipe.setTimeout(0.1) # more or less 100 bytes on a call out = "1"
while len(out) > 0: out = radio.pipe.read(100)
===========================================
I have tested it and it will work as you mention, but the script testbed will hang testing it, with the experience we had reading we found just a few bytes on the serial queue never reaching 100, so this seems to be a good number for our case.
Can you mod the testbed to allow for a code like that to pass it?
Thinking bigger: can be useful to have a call like this at the radio.pipe level? I mean to code it at the radio class to simply call from any driver like this
radio.pipe.flushInput() or .cleanBuffer() or anything alike.
73