]> cvs.zerfleddert.de Git - proxmark3-svn/blame - client/cmdlfparadox.c
align clock grid with demods on graph
[proxmark3-svn] / client / cmdlfparadox.c
CommitLineData
5bce72d5 1//-----------------------------------------------------------------------------
2//
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
5// the license.
6//-----------------------------------------------------------------------------
7// Low frequency Paradox tag commands
b9957414 8// FSK2a, rf/50, 96 bits (completely known)
5bce72d5 9//-----------------------------------------------------------------------------
10#include <stdio.h>
11#include <string.h>
12#include <inttypes.h>
13#include "cmdlfparadox.h"
14#include "proxmark3.h"
15#include "ui.h"
16#include "util.h"
17#include "graph.h"
18#include "cmdparser.h"
19#include "cmddata.h"
20#include "cmdlf.h"
21#include "lfdemod.h"
22static int CmdHelp(const char *Cmd);
23
24//by marshmellow
25//Paradox Prox demod - FSK RF/50 with preamble of 00001111 (then manchester encoded)
26//print full Paradox Prox ID and some bit format details if found
27int CmdFSKdemodParadox(const char *Cmd)
28{
29 //raw fsk demod no manchester decoding no start bit finding just get binary from wave
30 uint32_t hi2=0, hi=0, lo=0;
31
32 uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
33 size_t BitLen = getFromGraphBuf(BitStream);
34 if (BitLen==0) return 0;
35 //get binary from fsk wave
36 int idx = ParadoxdemodFSK(BitStream,&BitLen,&hi2,&hi,&lo);
37 if (idx<0){
38 if (g_debugMode){
39 if (idx==-1){
40 PrintAndLog("DEBUG: Just Noise Detected");
41 } else if (idx == -2) {
42 PrintAndLog("DEBUG: Error demoding fsk");
43 } else if (idx == -3) {
44 PrintAndLog("DEBUG: Preamble not found");
45 } else if (idx == -4) {
46 PrintAndLog("DEBUG: Error in Manchester data");
47 } else {
48 PrintAndLog("DEBUG: Error demoding fsk %d", idx);
49 }
50 }
51 return 0;
52 }
53 if (hi2==0 && hi==0 && lo==0){
54 if (g_debugMode) PrintAndLog("DEBUG: Error - no value found");
55 return 0;
56 }
57 uint32_t fc = ((hi & 0x3)<<6) | (lo>>26);
58 uint32_t cardnum = (lo>>10)&0xFFFF;
59 uint32_t rawLo = bytebits_to_byte(BitStream+idx+64,32);
60 uint32_t rawHi = bytebits_to_byte(BitStream+idx+32,32);
61 uint32_t rawHi2 = bytebits_to_byte(BitStream+idx,32);
62
63 PrintAndLog("Paradox TAG ID: %x%08x - FC: %d - Card: %d - Checksum: %02x - RAW: %08x%08x%08x",
64 hi>>10, (hi & 0x3)<<26 | (lo>>10), fc, cardnum, (lo>>2) & 0xFF, rawHi2, rawHi, rawLo);
65 setDemodBuf(BitStream,BitLen,idx);
66 if (g_debugMode){
67 PrintAndLog("DEBUG: idx: %d, len: %d, Printing Demod Buffer:", idx, BitLen);
68 printDemodBuff();
69 }
70 return 1;
71}
72//by marshmellow
73//see ASKDemod for what args are accepted
74int CmdParadoxRead(const char *Cmd) {
75 // read lf silently
b9957414 76 lf_read(true, 10000);
5bce72d5 77 // demod and output viking ID
78 return CmdFSKdemodParadox(Cmd);
79}
80
81static command_t CommandTable[] = {
82 {"help", CmdHelp, 1, "This help"},
83 {"demod", CmdFSKdemodParadox, 1, "Demodulate a Paradox FSK tag from the GraphBuffer"},
84 {"read", CmdParadoxRead, 0, "Attempt to read and Extract tag data from the antenna"},
85 {NULL, NULL, 0, NULL}
86};
87
88int CmdLFParadox(const char *Cmd) {
89 CmdsParse(CommandTable, Cmd);
90 return 0;
91}
92
93int CmdHelp(const char *Cmd) {
94 CmdsHelp(CommandTable);
95 return 0;
96}
Impressum, Datenschutz