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
= infoHF14B(false);
66 PrintAndLog("\nValid ISO14443B Tag Found - Quiting Search\n");
69 ans
= CmdLegicRFRead("");
71 PrintAndLog("\nValid Legic Tag Found - Quiting Search\n");
74 PrintAndLog("\nno known/supported 13.56 MHz tags found\n");
78 int CmdHFSnoop(const char *Cmd
)
81 UsbCommand c
= {CMD_HF_SNIFFER
, {strtol(Cmd
, &pEnd
,0),strtol(pEnd
, &pEnd
,0),0}};
87 // static void InterpolateShannon(int *source, size_t source_len, int *dest, size_t dest_len)
89 // int *buf = (int*)malloc(source_len * sizeof(int));
90 // memcpy(buf, source, source_len * sizeof(int));
91 // for (int i = 0; i < source_len; i++) {
94 // for (int i = 0; i < dest_len; i++) {
96 // for (int j = 0; j < source_len; j++) {
97 // if (i * source_len == j * dest_len) { // sin(0) / 0 = 1
98 // value += (float)buf[j];
100 // value += (float)buf[j] * sin(((float)i*source_len/dest_len-j)*3.1415) / (((float)i*source_len/dest_len-j)*3.1415);
103 // dest[i] = value - 128;
109 static int CmdHFPlot(const char *Cmd
)
111 CLIParserInit("hf plot",
112 "Plots HF signal after RF signal path and A/D conversion.",
113 "This can be used after any hf command and will show the last few milliseconds of the HF signal.\n"
114 "Note: If the last hf command terminated because of a timeout you will most probably see nothing.\n");
119 CLIExecWithReturn(Cmd
, argtable
, true);
121 uint8_t buf
[FPGA_TRACE_SIZE
];
123 if (GetFromFpgaRAM(buf
, FPGA_TRACE_SIZE
)) {
124 for (size_t i
= 0; i
< FPGA_TRACE_SIZE
; i
++) {
125 GraphBuffer
[i
] = (int)buf
[i
] - 128;
127 GraphTraceLen
= FPGA_TRACE_SIZE
;
128 // InterpolateShannon(GraphBuffer, FPGA_TRACE_SIZE, GraphBuffer, FPGA_TRACE_SIZE*8/7);
129 // GraphTraceLen = FPGA_TRACE_SIZE*8/7;
131 RepaintGraphWindow();
137 static command_t CommandTable
[] =
139 {"help", CmdHelp
, 1, "This help"},
140 {"14a", CmdHF14A
, 0, "{ ISO14443A RFIDs... }"},
141 {"14b", CmdHF14B
, 0, "{ ISO14443B RFIDs... }"},
142 {"15", CmdHF15
, 1, "{ ISO15693 RFIDs... }"},
143 {"epa", CmdHFEPA
, 0, "{ German Identification Card... }"},
144 {"legic", CmdHFLegic
, 0, "{ LEGIC RFIDs... }"},
145 {"iclass", CmdHFiClass
, 1, "{ ICLASS RFIDs... }"},
146 {"mf", CmdHFMF
, 1, "{ MIFARE RFIDs... }"},
147 {"mfu", CmdHFMFUltra
, 1, "{ MIFARE Ultralight RFIDs... }"},
148 {"mfp", CmdHFMFP
, 0, "{ MIFARE Plus RFIDs... }"},
149 {"topaz", CmdHFTopaz
, 0, "{ TOPAZ (NFC Type 1) RFIDs... }"},
150 {"fido", CmdHFFido
, 0, "{ FIDO and FIDO2 authenticators... }"},
151 {"tune", CmdHFTune
, 0, "Continuously measure HF antenna tuning"},
152 {"list", CmdHFList
, 1, "List protocol data in trace buffer"},
153 {"plot", CmdHFPlot
, 0, "Plot signal"},
154 {"search", CmdHFSearch
, 0, "Search for known HF tags [preliminary]"},
155 {"snoop", CmdHFSnoop
, 0, "<samples to skip (10000)> <triggers to skip (1)> Generic HF Snoop"},
156 {NULL
, NULL
, 0, NULL
}
159 int CmdHF(const char *Cmd
)
161 CmdsParse(CommandTable
, Cmd
);
165 int CmdHelp(const char *Cmd
)
167 CmdsHelp(CommandTable
);