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