Cameron Patrick
and a collective of hungry alpacas.
+The MIFARE card reader bought to you by:
+David Adam
+Bug Hunting and hardware maintenance by:
+Mitchell Pomery
For a good time call +61 8 6488 3901
FileIdler(v, '/usr/share/common-licenses/GPL-2',affinity=2),
#
PipeIdler(v, "/usr/bin/getent", "passwd"),
- FortuneIdler(v),
+ FortuneIdler(v,affinity=20),
]
disabled = [
]
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!-")
+_last_card_id = -1
+
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(
vstatus.state_table[(STATE_DOOR_CLOSING,MIFARE,1)] = do_nothing
vstatus.state_table[(STATE_GETTING_UID,TICK,1)] = handle_getting_uid_idle
- vstatus.state_table[(STATE_GETTING_UID,DOOR,1)] = do_nothing
+ vstatus.state_table[(STATE_GETTING_UID,DOOR,1)] = handle_door_event
vstatus.state_table[(STATE_GETTING_UID,KEY,1)] = handle_getting_uid_key
vstatus.state_table[(STATE_GETTING_UID,MIFARE,1)] = handle_mifare_event
vstatus.state_table[(STATE_GETTING_PIN,TICK,1)] = handle_getting_pin_idle
- vstatus.state_table[(STATE_GETTING_PIN,DOOR,1)] = do_nothing
+ vstatus.state_table[(STATE_GETTING_PIN,DOOR,1)] = handle_door_event
vstatus.state_table[(STATE_GETTING_PIN,KEY,1)] = handle_getting_pin_key
vstatus.state_table[(STATE_GETTING_PIN,MIFARE,1)] = handle_mifare_event
vstatus.state_table[(STATE_GET_SELECTION,TICK,1)] = handle_get_selection_idle
- vstatus.state_table[(STATE_GET_SELECTION,DOOR,1)] = do_nothing
+ vstatus.state_table[(STATE_GET_SELECTION,DOOR,1)] = handle_door_event
vstatus.state_table[(STATE_GET_SELECTION,KEY,1)] = handle_get_selection_key
vstatus.state_table[(STATE_GET_SELECTION,MIFARE,1)] = handle_mifare_add_user_event
vstatus.state_table[(STATE_GRANDFATHER_CLOCK,TICK,1)] = handle_idle_grandfather_tick
vstatus.state_table[(STATE_GRANDFATHER_CLOCK,TICK,2)] = handle_grandfather_tick
- vstatus.state_table[(STATE_GRANDFATHER_CLOCK,DOOR,1)] = do_nothing
- vstatus.state_table[(STATE_GRANDFATHER_CLOCK,DOOR,2)] = do_nothing
+ vstatus.state_table[(STATE_GRANDFATHER_CLOCK,DOOR,1)] = handle_door_event
+ vstatus.state_table[(STATE_GRANDFATHER_CLOCK,DOOR,2)] = handle_door_event
vstatus.state_table[(STATE_GRANDFATHER_CLOCK,KEY,1)] = do_nothing
vstatus.state_table[(STATE_GRANDFATHER_CLOCK,KEY,2)] = do_nothing
vstatus.state_table[(STATE_GRANDFATHER_CLOCK,MIFARE,1)] = handle_mifare_event