diff --git a/wpa_supplicant/examples/wps-nfc.py b/wpa_supplicant/examples/wps-nfc.py index f1b29accc..4d00a3a4e 100755 --- a/wpa_supplicant/examples/wps-nfc.py +++ b/wpa_supplicant/examples/wps-nfc.py @@ -54,6 +54,13 @@ def wpas_tag_read(message): print wpas.request("WPS_NFC_TAG_READ " + message.encode("hex")) +def wpas_get_password_token(): + wpas = wpas_connect() + if (wpas == None): + return None + return wpas.request("WPS_NFC_TOKEN NDEF").rstrip().decode("hex") + + def wpas_get_handover_req(): wpas = wpas_connect() if (wpas == None): @@ -162,6 +169,28 @@ def wps_tag_read(tag): time.sleep(0.1) +def wps_write_password_tag(clf): + print "Write WPS password token" + data = wpas_get_password_token() + if (data == None): + print "Could not get WPS password token from wpa_supplicant" + return + + print "Touch an NFC tag" + while True: + tag = clf.poll() + if tag == None: + time.sleep(0.1) + continue + break + + print "Tag found - writing" + tag.ndef.message = data + print "Done - remove tag" + while tag.is_present: + time.sleep(0.1) + + def find_peer(clf): while True: if nfc.llcp.connected(): @@ -194,6 +223,10 @@ def main(): clf = nfc.ContactlessFrontend() try: + if len(sys.argv) > 1 and sys.argv[1] == "write-password": + wps_write_password_tag(clf) + raise SystemExit + while True: print "Waiting for a tag or peer to be touched"