X-Git-Url: https://git.ucc.asn.au/?p=uccvend-vendserver.git;a=blobdiff_plain;f=sql-edition%2Fservers%2FVendingMachine.py;h=edc593c7844e40738d5fc547aba43bef2eb0765f;hp=18f3067d6b80c8d1823218f1b56205b69795b5f6;hb=9d0ded5f23bc018667005ac79a86ec916cd9fc1d;hpb=5deb2f51e435bc0e10a0e8c55ff61d63e56681e0 diff --git a/sql-edition/servers/VendingMachine.py b/sql-edition/servers/VendingMachine.py index 18f3067..edc593c 100644 --- a/sql-edition/servers/VendingMachine.py +++ b/sql-edition/servers/VendingMachine.py @@ -1,4 +1,5 @@ -import re, pg +# vim:ts=4 +import re from CRC import do_crc from select import select @@ -83,7 +84,7 @@ class VendingMachine: elif code == '401': self.events.append((DOOR, 1)) elif code == '610': - self.events_append((SWITCH, None)) + self.events.append((SWITCH, None)) self.interpret_switches(text) elif code[0] == '2': self.events.append((KEY, int(code[1:3]))) @@ -130,8 +131,7 @@ class VendingMachine: msg += '%02x'%duration self.wfh.write(msg+'\n') (code, string) = self.get_response() - # FIXME: workaround a bug in rom W. should be just: return (code == '500', code, string) - return (code == '500' or code == '501', code, string) + return (code == '501', code, string) def display(self, string): if len(string) > 10: @@ -140,19 +140,18 @@ class VendingMachine: (code, string) = self.get_response() return (code == '300', code, string) - def next_event(self): - if len(self.events) > 0: - ret = self.events[0] - del self.events[0] - return ret - return None - - def wait_for_events(self, timeout = None): - if self.events: return True - (r, _, _) = select([self.rfh], [], [], timeout) - if not r: return False - event_added = False + def next_event(self, timeout = None): + # we don't want to buffer in the serial port, so we get all the events + # we can ASAP. + if len(self.events) > 0: timeout = 0 while True: - self.get_response(async = True) - (r, _, _) = select([self.rfh], [], [], 0) - if not r: return event_added + (r, _, _) = select([self.rfh], [], [], timeout) + if r: + self.get_response(async = True) + timeout = 0 + else: + break + if len(self.events) == 0: return None + ret = self.events[0] + del self.events[0] + return ret