X-Git-Url: https://git.ucc.asn.au/?p=uccvend-vendserver.git;a=blobdiff_plain;f=sql-edition%2Fservers%2FVendingMachine.py;h=e5a0251f0210b1f66f28e4b26b144dff2f68fc10;hp=aca860e11152fda781953aabacb253bf2b1d1397;hb=9ac8ba25e1fabd0edd0c90850bf8fa7532048224;hpb=4b4e4c8deae85f1bb0c49c51fea49a3e33127b44 diff --git a/sql-edition/servers/VendingMachine.py b/sql-edition/servers/VendingMachine.py index aca860e..e5a0251 100644 --- a/sql-edition/servers/VendingMachine.py +++ b/sql-edition/servers/VendingMachine.py @@ -20,7 +20,7 @@ MIFARE = 5 class VendingException(Exception): pass class VendingMachine: - def __init__(self, rfh, wfh): + def __init__(self, rfh, wfh, use_mifare): self.events = [] # Secret self.secret = 'SN4CKZ0RZZZZZZZZ' @@ -37,7 +37,11 @@ class VendingMachine: 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() @@ -112,11 +116,13 @@ class VendingMachine: logging.warning('Unhandled event! (%s %s)\n'%(code,text)) def authed_message(self, message): + print 'self.challenge = %04x' % self.challenge if self.challenge == None: return message crc = do_crc('%c%c'%(self.challenge >> 8, self.challenge & 0xff)) crc = do_crc(self.secret, crc) crc = do_crc(message, crc) + print 'output = "%s|%04x"' % (message, crc) return message+'|'+('%04x'%crc) def ping(self): @@ -169,9 +175,9 @@ class VendingMachine: 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 @@ -180,14 +186,17 @@ class VendingMachine: 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'%(repr(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]