From: iceman1001 <iceman@iuse.se>
Date: Sat, 10 Jan 2015 18:48:29 +0000 (+0100)
Subject: ADD: test_t55x7_psk.lua,  a script which writes to block 0 (configation) of a T55x7... 
X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/commitdiff_plain/f004ba08d4e1bb3472f931924234c901a41d1ae1?ds=sidebyside;hp=--cc

ADD: test_t55x7_psk.lua,  a script which writes to block 0 (configation) of a T55x7 tag and tries do verify the psk demods.  12 different test configuration blocks is used.
---

f004ba08d4e1bb3472f931924234c901a41d1ae1
diff --git a/client/scripts/test_t55x7_psk.lua b/client/scripts/test_t55x7_psk.lua
new file mode 100644
index 00000000..1b964094
--- /dev/null
+++ b/client/scripts/test_t55x7_psk.lua
@@ -0,0 +1,173 @@
+local cmds = require('commands')
+local getopt = require('getopt')
+local bin = require('bin')
+local utils = require('utils')
+local dumplib = require('html_dumplib')
+
+example =[[
+	1. script run tracetest
+	2. script run tracetest -o 
+
+]]
+author = "Iceman"
+usage = "script run test_t55x7_psk -o <filename>"
+desc =[[
+This script will program a T55x7 TAG with the configuration: block 0x00 data 0x00088040
+The outlined procedure is as following:
+
+"lf t55xx write 0 00088040"
+"lf read"
+"data samples"
+"data pskdet"
+"data psknrz"
+"data pskindala"
+"data psknrzraw"
+
+Loop OUTER:
+	change the configuretion block 0 with:
+    -xxxx8xxx = PSK RF/2 with Manchester modulation
+    -xxxx1xxx = PSK RF/2 with PSK1 modulation (phase change when input changes)
+    -xxxx2xxx = PSK RF/2 with PSk2 modulation (phase change on bitclk if input high)
+    -xxxx3xxx = PSK RF/2 with PSk3 modulation (phase change on rising edge of input)
+	Loop INNER
+	    for each outer configuration, also do 
+			XXXXX0XX = PSK RF/2
+			XXXXX4XX = PSK RF/4
+			XXXXX8XX = PSK RF/8
+
+In all 12 individual test for the PSK demod
+
+Arguments:
+	-h             : this help
+	-o             : logfile name
+]]
+
+local TIMEOUT = 2000 -- Shouldn't take longer than 2 seconds
+local DEBUG = true -- the debug flag
+
+--BLOCK 0 = 00088040
+local config1 = '0008'
+local config2 = '40'
+	
+local procedurecmds = {
+	[1] = '%s%s%s%s',
+	[2] = 'lf read',
+	--[3] = '',
+	[3] = 'data samples',
+	[4] = 'data pskdetectclock',
+	[5] = 'data psknrzrawdemod',
+	[6] = 'data pskindalademod',
+}
+
+--- 
+-- A debug printout-function
+function dbg(args)
+	if not DEBUG then
+		return
+	end
+	
+    if type(args) == "table" then
+		local i = 1
+		while args[i] do
+			dbg(args[i])
+			i = i+1
+		end
+	else
+		print("###", args)
+	end	
+end	
+--- 
+-- This is only meant to be used when errors occur
+function oops(err)
+	print("ERROR: ",err)
+end
+--- 
+-- Usage help
+function help()
+	print(desc)
+	print("Example usage")
+	print(example)
+end
+--
+-- Exit message
+function ExitMsg(msg)
+	print( string.rep('--',20) )
+	print( string.rep('--',20) )
+	print(msg)
+	print()
+end
+
+function pskTest(modulation)
+	local y
+	for y = 0, 8, 4 do
+		for _ = 1, #procedurecmds do
+			local cmd = procedurecmds[_]
+			
+			if #cmd == 0 then  
+			
+			elseif _ == 1 then
+
+				dbg("Writing to T55x7 TAG")
+		
+				local configdata = cmd:format( config1, modulation , y, config2)
+				
+				dbg( configdata)
+				
+				local writecommand = Command:new{cmd = cmds.CMD_T55XX_WRITE_BLOCK, arg1 = configdata ,arg2 = 0, arg3 = 0}
+				local err = core.SendCommand(writecommand:getBytes())
+				if err then return oops(err) end
+				local response = core.WaitForResponseTimeout(cmds.CMD_ACK,TIMEOUT)
+
+				if response then
+					local count,cmd,arg0 = bin.unpack('LL',response)
+					if(arg0==1) then
+						dbg("Writing success")
+					else
+						return nil, "Couldn't read block.." 
+					end
+				end
+
+			else
+				dbg(cmd)
+				core.console( cmd )
+			end
+		end
+		core.clearCommandBuffer()	
+	end
+	print( string.rep('--',20) )
+
+end
+
+local function main(args)
+
+	print( string.rep('--',20) )
+	print( string.rep('--',20) )
+
+	local outputTemplate = os.date("testpsk_%Y-%m-%d_%H%M%S")
+
+	-- Arguments for the script
+	for o, arg in getopt.getopt(args, 'ho:') do
+		if o == "h" then return help() end
+		if o == "o" then outputTemplate = arg end		
+	end
+
+	core.clearCommandBuffer()
+
+	pskTest(1)
+	pskTest(2)
+	pskTest(3)
+	pskTest(8)
+	
+	print( string.rep('--',20) )
+end
+main(args)
+
+-- Where it iterates over 
+  -- xxxx8xxx = PSK RF/2 with Manchester modulation
+  -- xxxx1xxx = PSK RF/2 with PSK1 modulation (phase change when input changes)
+  -- xxxx2xxx = PSK RF/2 with PSk2 modulation (phase change on bitclk if input high)
+  -- xxxx3xxx = PSK RF/2 with PSk3 modulation (phase change on rising edge of input)
+
+    -- XXXXX0XX = PSK RF/2
+    -- XXXXX4XX = PSK RF/4
+    -- XXXXX8XX = PSK RF/8
\ No newline at end of file