+ def next_event(self, timeout = None):
+ # we don't want to buffer in the serial port, so we get all the events
+ # we can ASAP.
+ if timeout < 0: timeout = 0
+ if len(self.events) > 0: timeout = 0
+ while True:
+ (r, _, _) = select([self.rfh], [], [], timeout)
+ if r:
+ self.get_response(async = True)
+ timeout = 0
+ else:
+ break
+ if len(self.events) == 0: return (TICK, time())
+ ret = self.events[0]
+ del self.events[0]
+ return ret