X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/686f0a1794863adc1fe4cb27e920081e9b20e94e..bc37cfb3ebccc95c6e75565e2484f79be7e97c4f:/client/lualibs/read14a.lua

diff --git a/client/lualibs/read14a.lua b/client/lualibs/read14a.lua
index b2a797ea..943a1722 100644
--- a/client/lualibs/read14a.lua
+++ b/client/lualibs/read14a.lua
@@ -20,11 +20,14 @@ local ISO14A_COMMAND = {
 	ISO14A_RAW = 8,
 	ISO14A_REQUEST_TRIGGER = 0x10,
 	ISO14A_APPEND_CRC = 0x20,
-	ISO14A_SET_TIMEOUT = 0x40
+	ISO14A_SET_TIMEOUT = 0x40,
+	ISO14A_NO_SELECT = 0x80,
+	ISO14A_TOPAZMODE = 0x100
 }
 
 local ISO14443a_TYPES = {}		
 ISO14443a_TYPES[0x00] = "NXP MIFARE Ultralight | Ultralight C"
+ISO14443a_TYPES[0x01] = "NXP MIFARE TNP3xxx Activision Game Appliance"
 ISO14443a_TYPES[0x04] = "NXP MIFARE (various !DESFire !DESFire EV1)"
 ISO14443a_TYPES[0x08] = "NXP MIFARE CLASSIC 1k | Plus 2k"
 ISO14443a_TYPES[0x09] = "NXP MIFARE Mini 0.3k"
@@ -87,38 +90,55 @@ local function sendToDevice(command, ignoreresponse)
 	return response,nil
 end
 
-
-local library = {
-	-- This function does a connect. 
-	-- @param dont_disconnect - if true, does not disable the field
-	read1443a = function(dont_disconnect)
-
-		local command, result, info, err, data
-
-		command = Command:new{cmd = cmds.CMD_READER_ISO_14443a, 
-									arg1 = ISO14A_COMMAND.ISO14A_CONNECT}
-		if dont_disconnect then
-			command.arg1 = command.arg1 + ISO14A_COMMAND.ISO14A_NO_DISCONNECT
-		end
-		local result,err = sendToDevice(command)
-		if result then
-			local count,cmd,arg0,arg1,arg2 = bin.unpack('LLLL',result)
-			if arg0 == 0 then 
-				print("iso14443a card select failed");
-				return nil, "iso14443a card select failed"
-			end
-			data = string.sub(result,count)
-			info, err = parse1443a(data)
-		else
-			err ="No response from card"
+-- This function does a connect and retrieves som einfo
+-- @param dont_disconnect - if true, does not disable the field
+-- @return if successfull: an table containing card info
+-- @return if unsuccessfull : nil, error
+local function read14443a(dont_disconnect)
+	local command, result, info, err, data
+
+	command = Command:new{cmd = cmds.CMD_READER_ISO_14443a, 
+								arg1 = ISO14A_COMMAND.ISO14A_CONNECT}
+	if dont_disconnect then
+		command.arg1 = command.arg1 + ISO14A_COMMAND.ISO14A_NO_DISCONNECT
+	end
+	local result,err = sendToDevice(command)
+	if result then
+		local count,cmd,arg0,arg1,arg2 = bin.unpack('LLLL',result)
+		if arg0 == 0 then 
+			return nil, "iso14443a card select failed"
 		end
+		data = string.sub(result,count)
+		info, err = parse1443a(data)
+	else
+		err ="No response from card"
+	end
 
-		if err then 
-			print(err) 
-			return nil, err
-		end
-		return info
-	end,
+	if err then 
+		print(err) 
+		return nil, err
+	end
+	return info
+end
+
+---
+-- Waits for a mifare card to be placed within the vicinity of the reader. 
+-- @return if successfull: an table containing card info
+-- @return if unsuccessfull : nil, error
+local function waitFor14443a()
+	print("Waiting for card... press any key to quit")
+	while not core.ukbhit() do
+		res, err = read14443a()
+		if res then return res end
+		-- err means that there was no response from card
+	end
+	return nil, "Aborted by user"
+end
+local library = {
+	
+	read1443a = read14443a,
+	read 	= read14443a,
+	waitFor14443a = waitFor14443a,
 	parse1443a = parse1443a,
 	sendToDevice = sendToDevice,
 	ISO14A_COMMAND = ISO14A_COMMAND,