import socket
from posix import geteuid
from LDAPConnector import get_uid,get_uname, set_card_id
+from OpenDispense import OpenDispense as Dispense
CREDITS="""
This vending machine software brought to you by:
TEXT_SPEED = 0.8
IDLE_SPEED = 0.05
+_pin_uid = 0
+_pin_uname = 'root'
+_pin_pin = '----'
+
+_last_card_id = -1
+
+idlers = []
+idler = None
+
+
class DispenseDatabaseException(Exception): pass
class DispenseDatabase:
self.process_requests()
notify = self.db.getnotify()
+class VendState:
+ def __init__(self,v):
+ self.state_table = {}
+ self.state = STATE_IDLE
+ self.counter = 0
+
+ self.mk = MessageKeeper(v)
+ self.cur_user = ''
+ self.cur_pin = ''
+ self.username = ''
+ self.cur_selection = ''
+ self.time_to_autologout = None
+
+ self.last_timeout_refresh = None
+
+ def change_state(self,newstate,newcounter=None):
+ if self.state != newstate:
+ #print "Changing state from: ",
+ #print self.state,
+ #print " to ",
+ #print newstate
+ self.state = newstate
+
+ if newcounter is not None and self.counter != newcounter:
+ #print "Changing counter from: ",
+ #print self.counter,
+ #print " to ",
+ #print newcounter
+ self.counter = newcounter
+
+
+
def scroll_options(username, mk, welcome = False):
if welcome:
# Balance checking
msg.append((choices, False, None))
mk.set_messages(msg)
-_pin_uid = 0
-_pin_uname = 'root'
-_pin_pin = '----'
-
def _check_pin(uid, pin):
global _pin_uid
global _pin_uname
LEN = 10
return ' '*((LEN-len(str))/2)+str
-
-
-idlers = []
-idler = None
-
def setup_idlers(v):
global idlers, idler
idlers = [
nextidle = IDLE_SPEED
vstatus.time_of_next_idlestep = time()+nextidle
-class VendState:
- def __init__(self,v):
- self.state_table = {}
- self.state = STATE_IDLE
- self.counter = 0
-
- self.mk = MessageKeeper(v)
- self.cur_user = ''
- self.cur_pin = ''
- self.username = ''
- self.cur_selection = ''
- self.time_to_autologout = None
-
- self.last_timeout_refresh = None
-
- def change_state(self,newstate,newcounter=None):
- if self.state != newstate:
- #print "Changing state from: ",
- #print self.state,
- #print " to ",
- #print newstate
- self.state = newstate
-
- if newcounter is not None and self.counter != newcounter:
- #print "Changing counter from: ",
- #print self.counter,
- #print " to ",
- #print newcounter
- self.counter = newcounter
-
def handle_tick_event(event, params, v, vstatus):
pass
def handle_get_selection_idle(state, event, params, v, vstatus):
+ global _last_card_id
# don't care right now.
###
### State logging out ..
vstatus.cur_user = ''
vstatus.cur_pin = ''
vstatus.cur_selection = ''
-
+ _last_card_id = -1
reset_idler(v, vstatus)
### State fully logged out ... reset variables
def handle_get_selection_key(state, event, params, v, vstatus):
+ global _last_card_id
key = params
if len(vstatus.cur_selection) == 0:
if key == 11:
vstatus.cur_pin = ''
vstatus.cur_user = ''
vstatus.cur_selection = ''
-
+ _last_card_id = -1
vstatus.mk.set_messages([(center('BYE!'), False, 1.5)])
reset_idler(v, vstatus, 2)
return
logging.warning('Leaving open door mode')
v.display("-YUM YUM!-")
+
def handle_mifare_event(state, event, params, v, vstatus):
+ global _last_card_id
card_id = params
# Translate card_id into uid.
- if card_id == None:
+ if card_id == None or card_id == _last_card_id:
return
+ _last_card_id = card_id
+
try:
vstatus.cur_user = get_uid(card_id)
logging.info('Mapped card id to uid %s'%vstatus.cur_user)
(center('SORRY'), False, 0.5)])
vstatus.cur_user = ''
vstatus.cur_pin = ''
+ _last_card_id = -1
reset_idler(v, vstatus, 2)
return
def handle_mifare_add_user_event(state, event, params, v, vstatus):
- card_id = params
+ global _last_card_id
+ card_id = params
# Translate card_id into uid.
- if card_id == None:
+ if card_id == None or card_id == _last_card_id:
return
+ _last_card_id = card_id
+
try:
if get_uid(card_id) != None:
vstatus.mk.set_messages(
logging.info("Trying again in 5 seconds.")
sleep(5)
-if __name__ == '__main__':
+
+def main(argv=None):
options, config_opts = set_stuff_up()
while True:
try:
sleep(10)
logging.warning("Trying again anyway (might not help, but hey...)")
+if __name__ == '__main__':
+ sys.exit(main())