while write_wait_remove and tag.is_present:
time.sleep(0.1)
-def wps_write_config_tag(clf):
+def wps_write_config_tag(clf, wait_remove=True):
print "Write WPS config token"
global write_data, write_wait_remove
- write_wait_remove = True
+ write_wait_remove = wait_remove
write_data = wpas_get_config_token()
if write_data == None:
print "Could not get WPS config token from hostapd"
clf.connect(rdwr={'on-connect': rdwr_connected_write})
-def wps_write_password_tag(clf):
+def wps_write_password_tag(clf, wait_remove=True):
print "Write WPS password token"
global write_data, write_wait_remove
- write_wait_remove = True
+ write_wait_remove = wait_remove
write_data = wpas_get_password_token()
if write_data == None:
print "Could not get WPS password token from hostapd"
def rdwr_connected(tag):
- global only_one
+ global only_one, no_wait
print "Tag connected: " + str(tag)
if tag.ndef:
continue_loop = False
else:
print "Not an NDEF tag - remove tag"
- while tag.is_present:
- time.sleep(0.1)
return not no_wait
parser = argparse.ArgumentParser(description='nfcpy to hostapd integration for WPS NFC operations')
parser.add_argument('--only-one', '-1', action='store_true',
help='run only one operation and exit')
+ parser.add_argument('--no-wait', action='store_true',
+ help='do not wait for tag to be removed before exiting')
parser.add_argument('command', choices=['write-config',
'write-password'],
nargs='?')
global only_one
only_one = args.only_one
+ global no_wait
+ no_wait = args.no_wait
+
try:
if not clf.open("usb"):
print "Could not open connection with an NFC device"
raise SystemExit
if args.command == "write-config":
- wps_write_config_tag(clf)
+ wps_write_config_tag(clf, wait_remove=not args.no_wait)
raise SystemExit
if args.command == "write-password":
- wps_write_password_tag(clf)
+ wps_write_password_tag(clf, wait_remove=not args.no_wait)
raise SystemExit
global continue_loop
wpas_ctrl = '/var/run/wpa_supplicant'
srv = None
continue_loop = True
+terminate_now = False
def wpas_connect():
ifaces = []
global continue_loop
continue_loop = False
+ global no_wait
+ if no_wait:
+ print "Trying to exit.."
+ global terminate_now
+ terminate_now = True
def wps_tag_read(tag, wait_remove=True):
success = False
def rdwr_connected(tag):
- global only_one
+ global only_one, no_wait
print "Tag connected: " + str(tag)
if tag.ndef:
continue_loop = False
else:
print "Not an NDEF tag - remove tag"
- while tag.is_present:
- time.sleep(0.1)
- return True
+
+ return not no_wait
def llcp_worker(llc):
global arg_uuid
if arg_uuid is None:
wps_handover_init(llc)
+ print "Exiting llcp_worker thread"
return
global srv
srv.start()
else:
threading.Thread(target=llcp_worker, args=(llc,)).start()
+ print "llcp_connected returning"
return True
+def terminate_loop():
+ global terminate_now
+ return terminate_now
+
def main():
clf = nfc.ContactlessFrontend()
global only_one
only_one = args.only_one
+ global no_wait
+ no_wait = args.no_wait
+
try:
if not clf.open("usb"):
print "Could not open connection with an NFC device"
try:
if not clf.connect(rdwr={'on-connect': rdwr_connected},
llcp={'on-startup': llcp_startup,
- 'on-connect': llcp_connected}):
+ 'on-connect': llcp_connected},
+ terminate=terminate_loop):
break
except Exception, e:
print "clf.connect failed"