]>
cvs.zerfleddert.de Git - proxmark3-svn/blob - client/cmdlfparadox.c
1 //-----------------------------------------------------------------------------
3 // This code is licensed to you under the terms of the GNU GPL, version 2 or,
4 // at your option, any later version. See the LICENSE.txt file for the text of
6 //-----------------------------------------------------------------------------
7 // Low frequency Paradox tag commands
8 //-----------------------------------------------------------------------------
12 #include "cmdlfparadox.h"
13 #include "proxmark3.h"
17 #include "cmdparser.h"
21 static int CmdHelp(const char *Cmd
);
24 //Paradox Prox demod - FSK RF/50 with preamble of 00001111 (then manchester encoded)
25 //print full Paradox Prox ID and some bit format details if found
26 int CmdFSKdemodParadox(const char *Cmd
)
28 //raw fsk demod no manchester decoding no start bit finding just get binary from wave
29 uint32_t hi2
=0, hi
=0, lo
=0;
31 uint8_t BitStream
[MAX_GRAPH_TRACE_LEN
]={0};
32 size_t BitLen
= getFromGraphBuf(BitStream
);
33 if (BitLen
==0) return 0;
34 //get binary from fsk wave
35 int idx
= ParadoxdemodFSK(BitStream
,&BitLen
,&hi2
,&hi
,&lo
);
39 PrintAndLog("DEBUG: Just Noise Detected");
40 } else if (idx
== -2) {
41 PrintAndLog("DEBUG: Error demoding fsk");
42 } else if (idx
== -3) {
43 PrintAndLog("DEBUG: Preamble not found");
44 } else if (idx
== -4) {
45 PrintAndLog("DEBUG: Error in Manchester data");
47 PrintAndLog("DEBUG: Error demoding fsk %d", idx
);
52 if (hi2
==0 && hi
==0 && lo
==0){
53 if (g_debugMode
) PrintAndLog("DEBUG: Error - no value found");
56 uint32_t fc
= ((hi
& 0x3)<<6) | (lo
>>26);
57 uint32_t cardnum
= (lo
>>10)&0xFFFF;
58 uint32_t rawLo
= bytebits_to_byte(BitStream
+idx
+64,32);
59 uint32_t rawHi
= bytebits_to_byte(BitStream
+idx
+32,32);
60 uint32_t rawHi2
= bytebits_to_byte(BitStream
+idx
,32);
62 PrintAndLog("Paradox TAG ID: %x%08x - FC: %d - Card: %d - Checksum: %02x - RAW: %08x%08x%08x",
63 hi
>>10, (hi
& 0x3)<<26 | (lo
>>10), fc
, cardnum
, (lo
>>2) & 0xFF, rawHi2
, rawHi
, rawLo
);
64 setDemodBuf(BitStream
,BitLen
,idx
);
66 PrintAndLog("DEBUG: idx: %d, len: %d, Printing Demod Buffer:", idx
, BitLen
);
72 //see ASKDemod for what args are accepted
73 int CmdParadoxRead(const char *Cmd
) {
76 // get samples silently
77 getSamples("10000",false);
78 // demod and output viking ID
79 return CmdFSKdemodParadox(Cmd
);
82 static command_t CommandTable
[] = {
83 {"help", CmdHelp
, 1, "This help"},
84 {"demod", CmdFSKdemodParadox
, 1, "Demodulate a Paradox FSK tag from the GraphBuffer"},
85 {"read", CmdParadoxRead
, 0, "Attempt to read and Extract tag data from the antenna"},
89 int CmdLFParadox(const char *Cmd
) {
90 CmdsParse(CommandTable
, Cmd
);
94 int CmdHelp(const char *Cmd
) {
95 CmdsHelp(CommandTable
);