Updated pin code to work off dispense server's copies
[uccvend-vendserver.git] / sql-edition / servers / VendingMachine.py
index aca860e..e5a0251 100644 (file)
@@ -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]

UCC git Repository :: git.ucc.asn.au