]> git.zerfleddert.de Git - proxmark3-svn/blob - client/scripts/test_t55x7_psk.lua
Merge pull request #46 from holiman/master
[proxmark3-svn] / client / scripts / test_t55x7_psk.lua
1 local cmds = require('commands')
2 local getopt = require('getopt')
3 local bin = require('bin')
4 local utils = require('utils')
5 local dumplib = require('html_dumplib')
6
7 example =[[
8 1. script run tracetest
9 2. script run tracetest -o
10
11 ]]
12 author = "Iceman"
13 usage = "script run test_t55x7_psk -o <filename>"
14 desc =[[
15 This script will program a T55x7 TAG with the configuration: block 0x00 data 0x00088040
16 The outlined procedure is as following:
17
18 "lf t55xx write 0 00088040"
19 "lf read"
20 "data samples"
21 "data pskdet"
22 "data psknrz"
23 "data pskindala"
24 "data psknrzraw"
25
26 Loop OUTER:
27 change the configuretion block 0 with:
28 -xxxx8xxx = PSK RF/2 with Manchester modulation
29 -xxxx1xxx = PSK RF/2 with PSK1 modulation (phase change when input changes)
30 -xxxx2xxx = PSK RF/2 with PSk2 modulation (phase change on bitclk if input high)
31 -xxxx3xxx = PSK RF/2 with PSk3 modulation (phase change on rising edge of input)
32 Loop INNER
33 for each outer configuration, also do
34 XXXXX0XX = PSK RF/2
35 XXXXX4XX = PSK RF/4
36 XXXXX8XX = PSK RF/8
37
38 In all 12 individual test for the PSK demod
39
40 Arguments:
41 -h : this help
42 -o : logfile name
43 ]]
44
45 local TIMEOUT = 2000 -- Shouldn't take longer than 2 seconds
46 local DEBUG = true -- the debug flag
47
48 --BLOCK 0 = 00088040
49 local config1 = '0008'
50 local config2 = '40'
51
52 local procedurecmds = {
53 [1] = '%s%s%s%s',
54 [2] = 'lf read',
55 --[3] = '',
56 [3] = 'data samples',
57 [4] = 'data pskdetectclock',
58 [5] = 'data psknrzrawdemod',
59 [6] = 'data pskindalademod',
60 }
61
62 ---
63 -- A debug printout-function
64 function dbg(args)
65 if not DEBUG then
66 return
67 end
68
69 if type(args) == "table" then
70 local i = 1
71 while args[i] do
72 dbg(args[i])
73 i = i+1
74 end
75 else
76 print("###", args)
77 end
78 end
79 ---
80 -- This is only meant to be used when errors occur
81 function oops(err)
82 print("ERROR: ",err)
83 end
84 ---
85 -- Usage help
86 function help()
87 print(desc)
88 print("Example usage")
89 print(example)
90 end
91 --
92 -- Exit message
93 function ExitMsg(msg)
94 print( string.rep('--',20) )
95 print( string.rep('--',20) )
96 print(msg)
97 print()
98 end
99
100 function pskTest(modulation)
101 local y
102 for y = 0, 8, 4 do
103 for _ = 1, #procedurecmds do
104 local cmd = procedurecmds[_]
105
106 if #cmd == 0 then
107
108 elseif _ == 1 then
109
110 dbg("Writing to T55x7 TAG")
111
112 local configdata = cmd:format( config1, modulation , y, config2)
113
114 dbg( configdata)
115
116 local writecommand = Command:new{cmd = cmds.CMD_T55XX_WRITE_BLOCK, arg1 = configdata ,arg2 = 0, arg3 = 0}
117 local err = core.SendCommand(writecommand:getBytes())
118 if err then return oops(err) end
119 local response = core.WaitForResponseTimeout(cmds.CMD_ACK,TIMEOUT)
120
121 if response then
122 local count,cmd,arg0 = bin.unpack('LL',response)
123 if(arg0==1) then
124 dbg("Writing success")
125 else
126 return nil, "Couldn't read block.."
127 end
128 end
129
130 else
131 dbg(cmd)
132 core.console( cmd )
133 end
134 end
135 core.clearCommandBuffer()
136 end
137 print( string.rep('--',20) )
138
139 end
140
141 local function main(args)
142
143 print( string.rep('--',20) )
144 print( string.rep('--',20) )
145
146 local outputTemplate = os.date("testpsk_%Y-%m-%d_%H%M%S")
147
148 -- Arguments for the script
149 for o, arg in getopt.getopt(args, 'ho:') do
150 if o == "h" then return help() end
151 if o == "o" then outputTemplate = arg end
152 end
153
154 core.clearCommandBuffer()
155
156 pskTest(1)
157 pskTest(2)
158 pskTest(3)
159 pskTest(8)
160
161 print( string.rep('--',20) )
162 end
163 main(args)
164
165 -- Where it iterates over
166 -- xxxx8xxx = PSK RF/2 with Manchester modulation
167 -- xxxx1xxx = PSK RF/2 with PSK1 modulation (phase change when input changes)
168 -- xxxx2xxx = PSK RF/2 with PSk2 modulation (phase change on bitclk if input high)
169 -- xxxx3xxx = PSK RF/2 with PSk3 modulation (phase change on rising edge of input)
170
171 -- XXXXX0XX = PSK RF/2
172 -- XXXXX4XX = PSK RF/4
173 -- XXXXX8XX = PSK RF/8
Impressum, Datenschutz