class VendingException(Exception): pass
class VendingMachine:
- def __init__(self, rfh, wfh):
+ def __init__(self, rfh, wfh, use_mifare):
self.events = []
# Secret
self.secret = 'SN4CKZ0RZZZZZZZZ'
while code != '000':
code = self.get_response()[0]
self.get_switches()
- self.mifare = MIFAREClient()
+ if use_mifare:
+ self.mifare = MIFAREClient()
+ self.mifare_timeout = 0
+ else:
+ self.mifare = None
def await_prompt(self):
self.wfh.flush()
if timeout == None: timeout = 60*60*24*365
# Make sure we go through the loop at least once.
- if timeout <= 0: timeout = 0.01
+ if timeout < 0: timeout = 0
- while timeout > 0:
+ while timeout >= 0:
this_timeout = min(timeout, 0.2)
timeout -= this_timeout
self.get_response(async = True)
timeout = 0
- try:
- mifare_uid = self.mifare.get_card_uid()
- except ValueError:
- mifare_uid = None
- if mifare_uid != None:
- logging.info('Got MIFARE uid %s'%(str(mifare_uid)))
- self.events.append((MIFARE, mifare_uid))
- timeout = 0
+ if self.mifare:
+ now = time()
+ if now > self.mifare_timeout:
+ self.mifare_timeout = now + 0.5
+ mifare_uid = self.mifare.get_card_id()
+ if mifare_uid != None:
+ logging.info('Got MIFARE card id %s'%(str(mifare_uid)))
+ self.events.append((MIFARE, mifare_uid))
+ timeout = 0
+ if timeout == 0:
+ break
if len(self.events) == 0: return (TICK, time())
ret = self.events[0]