/[anoncvs]/projects/dispense2/sql-edition/servers/VendingMachine.py


UCC Code Repository

Diff of /projects/dispense2/sql-edition/servers/VendingMachine.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.3 by dagobah, Sat Jun 26 09:38:39 2004 UTC revision 1.6 by dagobah, Sun Jun 27 11:11:00 2004 UTC
# Line 1  Line 1 
1    # vim:ts=4
2  import re, pg  import re, pg
3  from CRC import do_crc  from CRC import do_crc
4  from select import select  from select import select
# Line 83  class VendingMachine: Line 84  class VendingMachine:
84                  elif code == '401':                  elif code == '401':
85                          self.events.append((DOOR, 1))                          self.events.append((DOOR, 1))
86                  elif code == '610':                  elif code == '610':
87                          self.events_append((SWITCH, None))                          self.events.append((SWITCH, None))
88                          self.interpret_switches(text)                          self.interpret_switches(text)
89                  elif code[0] == '2':                  elif code[0] == '2':
90                          self.events.append((KEY, int(code[1:3])))                          self.events.append((KEY, int(code[1:3])))
# Line 130  class VendingMachine: Line 131  class VendingMachine:
131                          msg += '%02x'%duration                          msg += '%02x'%duration
132                  self.wfh.write(msg+'\n')                  self.wfh.write(msg+'\n')
133                  (code, string) = self.get_response()                  (code, string) = self.get_response()
134                  # FIXME: workaround a bug in rom W. should be just: return (code == '500', code, string)                  return (code == '501', code, string)
                 return (code == '500' or code == '501', code, string)  
135    
136          def display(self, string):          def display(self, string):
137                  if len(string) > 10:                  if len(string) > 10:
# Line 140  class VendingMachine: Line 140  class VendingMachine:
140                  (code, string) = self.get_response()                  (code, string) = self.get_response()
141                  return (code == '300', code, string)                  return (code == '300', code, string)
142    
143          def next_event(self):          def next_event(self, timeout = None):
144                  if len(self.events) > 0:                  # we don't want to buffer in the serial port, so we get all the events
145                          ret = self.events[0]                  # we can ASAP.
146                          del self.events[0]                  if len(self.events) > 0: timeout = 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  
147                  while True:                  while True:
148                      self.get_response(async = True)                          (r, _, _) = select([self.rfh], [], [], timeout)
149                      (r, _, _) = select([self.rfh], [], [], 0)                          if r:
150                      if not r: return event_added                                  self.get_response(async = True)
151                                    timeout = 0
152                            else:
153                                    break
154                    if len(self.events) == 0: return None
155                    ret = self.events[0]
156                    del self.events[0]
157                    return ret

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.6

Managed by UCC Webmasters ViewVC Help
Powered by ViewVC 1.1.26