1 //-----------------------------------------------------------------------------
2 // Copyright (C) 2010 iZsh <izsh at fail0verflow.com>
5 // This code is licensed to you under the terms of the GNU GPL, version 2 or,
6 // at your option, any later version. See the LICENSE.txt file for the text of
8 //-----------------------------------------------------------------------------
9 // High frequency commands
10 //-----------------------------------------------------------------------------
18 #include "cmdparser.h"
19 #include "cliparser/cliparser.h"
24 #include "cmdhflegic.h"
25 #include "cmdhficlass.h"
29 #include "cmdhftopaz.h"
30 #include "cmdhflist.h"
31 #include "cmdhffido.h"
36 static int CmdHelp(const char *Cmd
);
38 int CmdHFTune(const char *Cmd
)
40 UsbCommand c
={CMD_MEASURE_ANTENNA_TUNING_HF
};
45 int CmdHFSearch(const char *Cmd
){
48 ans
= CmdHF14AInfo("s");
50 PrintAndLog("\nValid ISO14443A Tag Found - Quiting Search\n");
53 ans
= HFiClassReader("", false, false);
55 PrintAndLog("\nValid iClass Tag (or PicoPass Tag) Found - Quiting Search\n");
58 ans
= HF15Reader("", false);
60 PrintAndLog("\nValid ISO15693 Tag Found - Quiting Search\n");
63 //14b is longest test currently (and rarest chip type) ... put last
64 ans
= HF14BInfo(false);
66 PrintAndLog("\nValid ISO14443B Tag Found - Quiting Search\n");
69 PrintAndLog("\nno known/supported 13.56 MHz tags found\n");
73 int CmdHFSnoop(const char *Cmd
)
76 UsbCommand c
= {CMD_HF_SNIFFER
, {strtol(Cmd
, &pEnd
,0),strtol(pEnd
, &pEnd
,0),0}};
82 // static void InterpolateShannon(int *source, size_t source_len, int *dest, size_t dest_len)
84 // int *buf = (int*)malloc(source_len * sizeof(int));
85 // memcpy(buf, source, source_len * sizeof(int));
86 // for (int i = 0; i < source_len; i++) {
89 // for (int i = 0; i < dest_len; i++) {
91 // for (int j = 0; j < source_len; j++) {
92 // if (i * source_len == j * dest_len) { // sin(0) / 0 = 1
93 // value += (float)buf[j];
95 // value += (float)buf[j] * sin(((float)i*source_len/dest_len-j)*3.1415) / (((float)i*source_len/dest_len-j)*3.1415);
98 // dest[i] = value - 128;
104 static int CmdHFPlot(const char *Cmd
)
106 CLIParserInit("hf plot",
107 "Plots HF signal after RF signal path and A/D conversion.",
108 "This can be used after any hf command and will show the last few milliseconds of the HF signal.\n"
109 "Note: If the last hf command terminated because of a timeout you will most probably see nothing.\n");
114 CLIExecWithReturn(Cmd
, argtable
, true);
116 uint8_t buf
[FPGA_TRACE_SIZE
];
118 if (GetFromFpgaRAM(buf
, FPGA_TRACE_SIZE
)) {
119 for (size_t i
= 0; i
< FPGA_TRACE_SIZE
; i
++) {
120 GraphBuffer
[i
] = (int)buf
[i
] - 128;
122 GraphTraceLen
= FPGA_TRACE_SIZE
;
123 // InterpolateShannon(GraphBuffer, FPGA_TRACE_SIZE, GraphBuffer, FPGA_TRACE_SIZE*8/7);
124 // GraphTraceLen = FPGA_TRACE_SIZE*8/7;
126 RepaintGraphWindow();
132 static command_t CommandTable
[] =
134 {"help", CmdHelp
, 1, "This help"},
135 {"14a", CmdHF14A
, 0, "{ ISO14443A RFIDs... }"},
136 {"14b", CmdHF14B
, 0, "{ ISO14443B RFIDs... }"},
137 {"15", CmdHF15
, 1, "{ ISO15693 RFIDs... }"},
138 {"epa", CmdHFEPA
, 0, "{ German Identification Card... }"},
139 {"legic", CmdHFLegic
, 0, "{ LEGIC RFIDs... }"},
140 {"iclass", CmdHFiClass
, 1, "{ ICLASS RFIDs... }"},
141 {"mf", CmdHFMF
, 1, "{ MIFARE RFIDs... }"},
142 {"mfu", CmdHFMFUltra
, 1, "{ MIFARE Ultralight RFIDs... }"},
143 {"mfp", CmdHFMFP
, 0, "{ MIFARE Plus RFIDs... }"},
144 {"topaz", CmdHFTopaz
, 0, "{ TOPAZ (NFC Type 1) RFIDs... }"},
145 {"fido", CmdHFFido
, 0, "{ FIDO and FIDO2 authenticators... }"},
146 {"tune", CmdHFTune
, 0, "Continuously measure HF antenna tuning"},
147 {"list", CmdHFList
, 1, "List protocol data in trace buffer"},
148 {"plot", CmdHFPlot
, 0, "Plot signal"},
149 {"search", CmdHFSearch
, 0, "Search for known HF tags [preliminary]"},
150 {"snoop", CmdHFSnoop
, 0, "<samples to skip (10000)> <triggers to skip (1)> Generic HF Snoop"},
151 {NULL
, NULL
, 0, NULL
}
154 int CmdHF(const char *Cmd
)
156 CmdsParse(CommandTable
, Cmd
);
160 int CmdHelp(const char *Cmd
)
162 CmdsHelp(CommandTable
);