mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-19 21:03:48 -07:00
REM: 'hf 15 debug' removed command, unified with mf_debuglevel instead. The idea is to have ONE debug flag on deviceside.
This commit is contained in:
parent
095b3af43b
commit
b39332e938
8 changed files with 32 additions and 65 deletions
|
@ -725,9 +725,6 @@ void UsbPacketReceived(uint8_t *packet, int len) {
|
||||||
case CMD_ISO_15693_FIND_AFI:
|
case CMD_ISO_15693_FIND_AFI:
|
||||||
BruteforceIso15693Afi(c->arg[0]);
|
BruteforceIso15693Afi(c->arg[0]);
|
||||||
break;
|
break;
|
||||||
case CMD_ISO_15693_DEBUG:
|
|
||||||
SetDebugIso15693(c->arg[0]);
|
|
||||||
break;
|
|
||||||
case CMD_READER_ISO_15693:
|
case CMD_READER_ISO_15693:
|
||||||
ReaderIso15693(c->arg[0]);
|
ReaderIso15693(c->arg[0]);
|
||||||
break;
|
break;
|
||||||
|
@ -862,7 +859,7 @@ void UsbPacketReceived(uint8_t *packet, int len) {
|
||||||
|
|
||||||
// emulator
|
// emulator
|
||||||
case CMD_MIFARE_SET_DBGMODE:
|
case CMD_MIFARE_SET_DBGMODE:
|
||||||
MifareSetDbgLvl(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
|
MifareSetDbgLvl(c->arg[0]);
|
||||||
break;
|
break;
|
||||||
case CMD_MIFARE_EML_MEMCLR:
|
case CMD_MIFARE_EML_MEMCLR:
|
||||||
MifareEMemClr(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
|
MifareEMemClr(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
|
||||||
|
|
|
@ -147,7 +147,7 @@ void MifareAcquireNonces(uint32_t arg0, uint32_t arg1, uint32_t flags, uint8_t *
|
||||||
void MifareChkKeys(uint16_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain);
|
void MifareChkKeys(uint16_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain);
|
||||||
void MifareChkKeys_fast(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain);
|
void MifareChkKeys_fast(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain);
|
||||||
void Mifare1ksim(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain);
|
void Mifare1ksim(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain);
|
||||||
void MifareSetDbgLvl(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain);
|
void MifareSetDbgLvl(uint16_t arg0);
|
||||||
void MifareEMemClr(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain);
|
void MifareEMemClr(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain);
|
||||||
void MifareEMemSet(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain);
|
void MifareEMemSet(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain);
|
||||||
void MifareEMemGet(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain);
|
void MifareEMemGet(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain);
|
||||||
|
@ -198,7 +198,6 @@ void ReaderIso15693(uint32_t parameter); // Simulate an ISO15693 reader - greg
|
||||||
void SimTagIso15693(uint32_t parameter, uint8_t *uid); // simulate an ISO15693 tag - greg
|
void SimTagIso15693(uint32_t parameter, uint8_t *uid); // simulate an ISO15693 tag - greg
|
||||||
void BruteforceIso15693Afi(uint32_t speed); // find an AFI of a tag - atrox
|
void BruteforceIso15693Afi(uint32_t speed); // find an AFI of a tag - atrox
|
||||||
void DirectTag15693Command(uint32_t datalen,uint32_t speed, uint32_t recv, uint8_t *data); // send arbitrary commands from CLI - atrox
|
void DirectTag15693Command(uint32_t datalen,uint32_t speed, uint32_t recv, uint8_t *data); // send arbitrary commands from CLI - atrox
|
||||||
void SetDebugIso15693(uint32_t flag);
|
|
||||||
void Iso15693InitReader(void);
|
void Iso15693InitReader(void);
|
||||||
|
|
||||||
// iclass.h
|
// iclass.h
|
||||||
|
|
|
@ -71,22 +71,20 @@
|
||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// 32 + 2 crc + 1
|
// 32 + 2 crc + 1
|
||||||
#define ISO15_MAX_FRAME 35
|
#define ISO15_MAX_FRAME 35
|
||||||
#define CMD_ID_RESP 5
|
#define CMD_ID_RESP 5
|
||||||
#define CMD_READ_RESP 13
|
#define CMD_READ_RESP 13
|
||||||
#define CMD_INV_RESP 12
|
#define CMD_INV_RESP 12
|
||||||
|
|
||||||
#define FrameSOF Iso15693FrameSOF
|
#define FrameSOF Iso15693FrameSOF
|
||||||
#define Logic0 Iso15693Logic0
|
#define Logic0 Iso15693Logic0
|
||||||
#define Logic1 Iso15693Logic1
|
#define Logic1 Iso15693Logic1
|
||||||
#define FrameEOF Iso15693FrameEOF
|
#define FrameEOF Iso15693FrameEOF
|
||||||
|
|
||||||
#define Crc(data,datalen) Iso15693Crc(data, datalen)
|
#define Crc(data,datalen) Iso15693Crc((data), (datalen))
|
||||||
#define AddCrc(data,datalen) Iso15693AddCrc(data, datalen)
|
#define AddCrc(data,datalen) Iso15693AddCrc((data), (datalen))
|
||||||
#define CheckCrc(data,datalen) Iso15693CheckCrc(data,datalen)
|
#define CheckCrc(data,datalen) Iso15693CheckCrc((data), (datalen))
|
||||||
#define sprintUID(target,uid) Iso15693sprintUID(target, uid)
|
#define sprintUID(target,uid) Iso15693sprintUID((target), (uid))
|
||||||
|
|
||||||
int DEBUG = 0;
|
|
||||||
|
|
||||||
static void BuildIdentifyRequest(uint8_t *cmdout);
|
static void BuildIdentifyRequest(uint8_t *cmdout);
|
||||||
//static void BuildReadBlockRequest(uint8_t *cmdout, uint8_t *uid, uint8_t blockNumber );
|
//static void BuildReadBlockRequest(uint8_t *cmdout, uint8_t *uid, uint8_t blockNumber );
|
||||||
|
@ -345,7 +343,7 @@ static int DemodAnswer(uint8_t *received, uint8_t *dest, uint16_t samplecount) {
|
||||||
// Even things out by the length of the target waveform.
|
// Even things out by the length of the target waveform.
|
||||||
corr0 *= 4;
|
corr0 *= 4;
|
||||||
corr1 *= 4;
|
corr1 *= 4;
|
||||||
// if (DEBUG)
|
// if (MF_DBGLEVEL >= MF_DBG_EXTENDED)
|
||||||
// Dbprintf("Corr1 %d, Corr0 %d, CorrEOF %d", corr1, corr0, corrEOF);
|
// Dbprintf("Corr1 %d, Corr0 %d, CorrEOF %d", corr1, corr0, corrEOF);
|
||||||
|
|
||||||
if (corrEOF > corr1 && corrEOF > corr0)
|
if (corrEOF > corr1 && corrEOF > corr0)
|
||||||
|
@ -366,17 +364,17 @@ static int DemodAnswer(uint8_t *received, uint8_t *dest, uint16_t samplecount) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ( i + (int)ARRAYLEN(FrameEOF)) >= samplecount-1) {
|
if ( ( i + (int)ARRAYLEN(FrameEOF)) >= samplecount-1) {
|
||||||
//Dbprintf("ran off end! %d | %d",( i + (int)ARRAYLEN(FrameEOF)), samplecount-1);
|
//Dbprintf("[!] ran off end! %d | %d",( i + (int)ARRAYLEN(FrameEOF)), samplecount-1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DEBUG) Dbprintf("ice: demod bytes %u", k);
|
if (MF_DBGLEVEL >= MF_DBG_EXTENDED) Dbprintf("ice: demod bytes %u", k);
|
||||||
|
|
||||||
if (mask != 0x01) { // this happens, when we miss the EOF
|
if (mask != 0x01) { // this happens, when we miss the EOF
|
||||||
|
|
||||||
// TODO: for some reason this happens quite often
|
// TODO: for some reason this happens quite often
|
||||||
if (DEBUG) Dbprintf("error, uneven octet! (extra bits!) mask %02x", mask);
|
if (MF_DBGLEVEL >= MF_DBG_ERROR) Dbprintf("[!] error, uneven octet! (extra bits!) mask %02x", mask);
|
||||||
//if (mask < 0x08) k--; // discard the last uneven octet;
|
//if (mask < 0x08) k--; // discard the last uneven octet;
|
||||||
// 0x08 is an assumption - but works quite often
|
// 0x08 is an assumption - but works quite often
|
||||||
}
|
}
|
||||||
|
@ -671,7 +669,7 @@ void Iso15693InitReader(void) {
|
||||||
// Start the timer
|
// Start the timer
|
||||||
StartCountSspClk();
|
StartCountSspClk();
|
||||||
|
|
||||||
if (DEBUG) DbpString("Iso15693InitReader Exit");
|
if (MF_DBGLEVEL >= MF_DBG_EXTENDED ) DbpString("[+] Iso15693InitReader Exit");
|
||||||
|
|
||||||
LED_A_ON();
|
LED_A_ON();
|
||||||
}
|
}
|
||||||
|
@ -846,7 +844,7 @@ void DbdecodeIso15693Answer(int len, uint8_t *d) {
|
||||||
else
|
else
|
||||||
strncat(status, "[!] crc fail", DBD15STATLEN);
|
strncat(status, "[!] crc fail", DBD15STATLEN);
|
||||||
|
|
||||||
if ( DEBUG ) Dbprintf("%s", status);
|
if ( MF_DBGLEVEL >= MF_DBG_ERROR) Dbprintf("%s", status);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -854,12 +852,6 @@ void DbdecodeIso15693Answer(int len, uint8_t *d) {
|
||||||
// Functions called via USB/Client
|
// Functions called via USB/Client
|
||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void SetDebugIso15693(uint32_t debug) {
|
|
||||||
DEBUG = debug;
|
|
||||||
Dbprintf("[!] Iso15693 debug is %s", DEBUG ? "on" : "off");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Act as ISO15693 reader, perform anti-collision and then attempt to read a sector
|
// Act as ISO15693 reader, perform anti-collision and then attempt to read a sector
|
||||||
// all demodulation performed in arm rather than host. - greg
|
// all demodulation performed in arm rather than host. - greg
|
||||||
|
@ -908,8 +900,8 @@ void ReaderIso15693(uint32_t parameter) {
|
||||||
uid[6] = answer1[3];
|
uid[6] = answer1[3];
|
||||||
uid[7] = answer1[2];
|
uid[7] = answer1[2];
|
||||||
|
|
||||||
if ( DEBUG ) {
|
if ( MF_DBGLEVEL >= MF_DBG_EXTENDED) {
|
||||||
Dbprintf("UID = %02X%02X%02X%02X%02X%02X%02X%02X",
|
Dbprintf("[+] UID = %02X%02X%02X%02X%02X%02X%02X%02X",
|
||||||
uid[0], uid[1], uid[2], uid[3],
|
uid[0], uid[1], uid[2], uid[3],
|
||||||
uid[4], uid[5], uid[5], uid[6]
|
uid[4], uid[5], uid[5], uid[6]
|
||||||
);
|
);
|
||||||
|
@ -922,15 +914,15 @@ void ReaderIso15693(uint32_t parameter) {
|
||||||
cmd_send(CMD_ACK, 1, sizeof(uid), 0, uid, sizeof(uid));
|
cmd_send(CMD_ACK, 1, sizeof(uid), 0, uid, sizeof(uid));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( DEBUG ) {
|
if ( MF_DBGLEVEL >= MF_DBG_EXTENDED) {
|
||||||
Dbprintf("%d octets read from IDENTIFY request:", answerLen1);
|
Dbprintf("[+] %d octets read from IDENTIFY request:", answerLen1);
|
||||||
DbdecodeIso15693Answer(answerLen1, answer1);
|
DbdecodeIso15693Answer(answerLen1, answer1);
|
||||||
Dbhexdump(answerLen1, answer1, true);
|
Dbhexdump(answerLen1, answer1, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// DEBUG read all pages
|
// DEBUG read all pages
|
||||||
/*
|
/*
|
||||||
if (answerLen1 >= 12 && DEBUG) {
|
if (answerLen1 >= 12 && MF_DBGLEVEL >= MF_DBG_EXTENDED) {
|
||||||
i = 0;
|
i = 0;
|
||||||
while ( i < 32 ) { // sanity check, assume max 32 pages
|
while ( i < 32 ) { // sanity check, assume max 32 pages
|
||||||
|
|
||||||
|
@ -995,8 +987,8 @@ void SimTagIso15693(uint32_t parameter, uint8_t *uid) {
|
||||||
TransmitTo15693Reader(ToSend, ToSendMax, &tsamples, &wait);
|
TransmitTo15693Reader(ToSend, ToSendMax, &tsamples, &wait);
|
||||||
LogTrace(cmd, CMD_INV_RESP, time_start << 4, (GetCountSspClk() - time_start) << 4, NULL, true);
|
LogTrace(cmd, CMD_INV_RESP, time_start << 4, (GetCountSspClk() - time_start) << 4, NULL, true);
|
||||||
|
|
||||||
if (DEBUG) {
|
if (MF_DBGLEVEL >= MF_DBG_EXTENDED) {
|
||||||
Dbprintf("%d octets read from reader command: %x %x %x %x %x %x %x %x", ans,
|
Dbprintf("[+] %d octets read from reader command: %x %x %x %x %x %x %x %x", ans,
|
||||||
buf[0], buf[1], buf[2], buf[3],
|
buf[0], buf[1], buf[2], buf[3],
|
||||||
buf[4], buf[5], buf[6], buf[7]
|
buf[4], buf[5], buf[6], buf[7]
|
||||||
);
|
);
|
||||||
|
@ -1067,8 +1059,8 @@ void DirectTag15693Command(uint32_t datalen, uint32_t speed, uint32_t recv, uint
|
||||||
uint8_t buf[ISO15_MAX_FRAME];
|
uint8_t buf[ISO15_MAX_FRAME];
|
||||||
memset(buf, 0x00, sizeof(buf));
|
memset(buf, 0x00, sizeof(buf));
|
||||||
|
|
||||||
if (DEBUG) {
|
if (MF_DBGLEVEL >= MF_DBG_EXTENDED) {
|
||||||
DbpString("SEND");
|
DbpString("[+] SEND");
|
||||||
Dbhexdump(datalen, data, true);
|
Dbhexdump(datalen, data, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1081,8 +1073,8 @@ void DirectTag15693Command(uint32_t datalen, uint32_t speed, uint32_t recv, uint
|
||||||
cmd_send(CMD_ACK, buflen, 0, 0, buf, buflen);
|
cmd_send(CMD_ACK, buflen, 0, 0, buf, buflen);
|
||||||
LED_B_OFF();
|
LED_B_OFF();
|
||||||
|
|
||||||
if (DEBUG) {
|
if (MF_DBGLEVEL >= MF_DBG_EXTENDED) {
|
||||||
DbpString("RECV");
|
DbpString("[+] RECV");
|
||||||
DbdecodeIso15693Answer(buflen, buf);
|
DbdecodeIso15693Answer(buflen, buf);
|
||||||
Dbhexdump(buflen, buf, true);
|
Dbhexdump(buflen, buf, true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1502,7 +1502,7 @@ void MifareChkKeys(uint16_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain) {
|
||||||
// MIFARE commands set debug level
|
// MIFARE commands set debug level
|
||||||
//
|
//
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
void MifareSetDbgLvl(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain){
|
void MifareSetDbgLvl(uint16_t arg0){
|
||||||
MF_DBGLEVEL = arg0;
|
MF_DBGLEVEL = arg0;
|
||||||
Dbprintf("Debug level: %d", MF_DBGLEVEL);
|
Dbprintf("Debug level: %d", MF_DBGLEVEL);
|
||||||
}
|
}
|
||||||
|
|
|
@ -355,8 +355,7 @@ int CmdAnalyseCRC(const char *Cmd) {
|
||||||
uint16_t crcCC = b1 << 8 | b2;
|
uint16_t crcCC = b1 << 8 | b2;
|
||||||
printf("ICLASS crc | %04x == %04x \n", crcCC, iclass_new);
|
printf("ICLASS crc | %04x == %04x \n", crcCC, iclass_new);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
free(data);
|
free(data);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -468,6 +467,9 @@ int CmdAnalyseTEASelfTest(const char *Cmd){
|
||||||
|
|
||||||
int CmdAnalyseA(const char *Cmd){
|
int CmdAnalyseA(const char *Cmd){
|
||||||
|
|
||||||
|
|
||||||
|
PrintAndLog("ISO 15693 - x25 - Residue %04x ( %0xF0B8 expected) ", ISO15_CRC_CHECK);
|
||||||
|
|
||||||
uint8_t b1, b2;
|
uint8_t b1, b2;
|
||||||
|
|
||||||
// 14 a
|
// 14 a
|
||||||
|
|
|
@ -333,12 +333,6 @@ int usage_15_restore(void){
|
||||||
PrintAndLog("'hf 15 restore' - to be implemented...");
|
PrintAndLog("'hf 15 restore' - to be implemented...");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int usage_15_debug(void){
|
|
||||||
PrintAndLog("Usage: hf 15 debug <0|1>");
|
|
||||||
PrintAndLog(" 0 no debugging");
|
|
||||||
PrintAndLog(" 1 turn debugging on");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
int usage_15_raw(void){
|
int usage_15_raw(void){
|
||||||
PrintAndLog("Usage: hf 15 raw [-r] [-2] [-c] <0A 0B 0C ... hex>");
|
PrintAndLog("Usage: hf 15 raw [-r] [-2] [-c] <0A 0B 0C ... hex>");
|
||||||
PrintAndLog(" -r do not read response");
|
PrintAndLog(" -r do not read response");
|
||||||
|
@ -778,19 +772,6 @@ int CmdHF15List(const char *Cmd) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Turns debugging on(1)/off(0)
|
|
||||||
int CmdHF15Debug( const char *Cmd) {
|
|
||||||
|
|
||||||
char cmdp = param_getchar(Cmd, 0);
|
|
||||||
if (strlen(Cmd)<1 || cmdp == 'h' || cmdp == 'H') return usage_15_debug();
|
|
||||||
|
|
||||||
int debug = atoi(Cmd);
|
|
||||||
UsbCommand c = {CMD_ISO_15693_DEBUG, {debug, 0, 0}};
|
|
||||||
clearCommandBuffer();
|
|
||||||
SendCommand(&c);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int CmdHF15Raw(const char *Cmd) {
|
int CmdHF15Raw(const char *Cmd) {
|
||||||
|
|
||||||
char cmdp = param_getchar(Cmd, 0);
|
char cmdp = param_getchar(Cmd, 0);
|
||||||
|
@ -1231,7 +1212,6 @@ int CmdHF15Select(const char *Cmd) {
|
||||||
|
|
||||||
static command_t CommandTable15[] = {
|
static command_t CommandTable15[] = {
|
||||||
{"help", CmdHF15Help, 1, "This help"},
|
{"help", CmdHF15Help, 1, "This help"},
|
||||||
{"debug", CmdHF15Debug, 0, "Turn debugging on/off"},
|
|
||||||
{"demod", CmdHF15Demod, 1, "Demodulate ISO15693 from tag"},
|
{"demod", CmdHF15Demod, 1, "Demodulate ISO15693 from tag"},
|
||||||
{"dump", CmdHF15Dump, 0, "Read all memory pages of an ISO15693 tag, save to file"},
|
{"dump", CmdHF15Dump, 0, "Read all memory pages of an ISO15693 tag, save to file"},
|
||||||
{"findafi", CmdHF15Afi, 0, "Brute force AFI of an ISO15693 tag"},
|
{"findafi", CmdHF15Afi, 0, "Brute force AFI of an ISO15693 tag"},
|
||||||
|
|
|
@ -39,7 +39,6 @@ extern int CmdHF15Reader(const char *Cmd);
|
||||||
extern int CmdHF15Sim(const char *Cmd);
|
extern int CmdHF15Sim(const char *Cmd);
|
||||||
extern int CmdHF15Afi(const char *Cmd);
|
extern int CmdHF15Afi(const char *Cmd);
|
||||||
extern int CmdHF15Dump(const char*Cmd);
|
extern int CmdHF15Dump(const char*Cmd);
|
||||||
extern int CmdHF15Debug( const char *Cmd);
|
|
||||||
extern int CmdHF15Raw(const char *cmd);
|
extern int CmdHF15Raw(const char *cmd);
|
||||||
extern int CmdHF15Readmulti(const char *Cmd);
|
extern int CmdHF15Readmulti(const char *Cmd);
|
||||||
extern int CmdHF15Read(const char *Cmd);
|
extern int CmdHF15Read(const char *Cmd);
|
||||||
|
@ -57,7 +56,6 @@ extern int usage_15_sim(void);
|
||||||
extern int usage_15_findafi(void);
|
extern int usage_15_findafi(void);
|
||||||
extern int usage_15_dump(void);
|
extern int usage_15_dump(void);
|
||||||
extern int usage_15_restore(void);
|
extern int usage_15_restore(void);
|
||||||
extern int usage_15_debug(void);
|
|
||||||
extern int usage_15_raw(void);
|
extern int usage_15_raw(void);
|
||||||
|
|
||||||
extern int usage_15_read(void);
|
extern int usage_15_read(void);
|
||||||
|
|
|
@ -110,7 +110,6 @@ typedef struct {
|
||||||
#define CMD_ISO_15693_COMMAND 0x0313
|
#define CMD_ISO_15693_COMMAND 0x0313
|
||||||
#define CMD_ISO_15693_COMMAND_DONE 0x0314
|
#define CMD_ISO_15693_COMMAND_DONE 0x0314
|
||||||
#define CMD_ISO_15693_FIND_AFI 0x0315
|
#define CMD_ISO_15693_FIND_AFI 0x0315
|
||||||
#define CMD_ISO_15693_DEBUG 0x0316
|
|
||||||
#define CMD_LF_SNOOP_RAW_ADC_SAMPLES 0x0317
|
#define CMD_LF_SNOOP_RAW_ADC_SAMPLES 0x0317
|
||||||
|
|
||||||
// For Hitag2 transponders
|
// For Hitag2 transponders
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue