+ if self.transaction_state == 'TOKEN RECEIVED':
+ transaction_timeout = self.transaction_es
+ # Token length is 35 bits, timeout is 16..18 bit times
+ # (USB 2.0 7.1.19.1).
+ transaction_timeout += int((self.transaction_es - self.transaction_ss) / 2)
+ if ss > transaction_timeout:
+ self.transaction_es = transaction_timeout
+ self.handshake = 'timeout'
+ self.handle_transfer()
+ self.transaction_state = 'IDLE'
+