mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-21 13:53:55 -07:00
- changed CmdEM4x50StRread tp CmdEM4x50Reader
- changed return value
This commit is contained in:
parent
96cceab10a
commit
8215955ba8
1 changed files with 62 additions and 66 deletions
|
@ -525,8 +525,8 @@ int CmdEM4x50Chk(const char *Cmd) {
|
||||||
SendCommandNG(CMD_LF_EM4X50_CHK, (uint8_t *)&offset, sizeof(offset));
|
SendCommandNG(CMD_LF_EM4X50_CHK, (uint8_t *)&offset, sizeof(offset));
|
||||||
WaitForResponseTimeoutW(CMD_LF_EM4X50_CHK, &resp, -1, false);
|
WaitForResponseTimeoutW(CMD_LF_EM4X50_CHK, &resp, -1, false);
|
||||||
|
|
||||||
status = resp.status; // status = -1 -> BUTTON_SINGLE_CLICK
|
status = resp.status;
|
||||||
if ((status == PM3_SUCCESS) || (status == -1))
|
if ((status == PM3_SUCCESS) || (status == PM3_EOPABORTED))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -701,70 +701,6 @@ int CmdEM4x50Read(const char *Cmd) {
|
||||||
return em4x50_read(&etd, NULL);
|
return em4x50_read(&etd, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
int CmdEM4x50StdRead(const char *Cmd) {
|
|
||||||
|
|
||||||
int now = 0, status = PM3_EFAILED;
|
|
||||||
PacketResponseNG resp;
|
|
||||||
|
|
||||||
CLIParserContext *ctx;
|
|
||||||
CLIParserInit(&ctx, "lf em 4x50_stdread",
|
|
||||||
"Shows standard read data of EM4x50 tag.",
|
|
||||||
"lf em 4x50_stdread\n"
|
|
||||||
);
|
|
||||||
|
|
||||||
void *argtable[] = {
|
|
||||||
arg_param_begin,
|
|
||||||
arg_param_end
|
|
||||||
};
|
|
||||||
|
|
||||||
CLIExecWithReturn(ctx, Cmd, argtable, true);
|
|
||||||
CLIParserFree(ctx);
|
|
||||||
|
|
||||||
// start
|
|
||||||
clearCommandBuffer();
|
|
||||||
SendCommandNG(CMD_LF_EM4X50_STDREAD, 0, 0);
|
|
||||||
if (!WaitForResponseTimeout(CMD_LF_EM4X50_STDREAD, &resp, TIMEOUT)) {
|
|
||||||
PrintAndLogEx(WARNING, "Timeout while waiting for reply.");
|
|
||||||
return PM3_ETIMEOUT;
|
|
||||||
}
|
|
||||||
|
|
||||||
now = resp.status;
|
|
||||||
|
|
||||||
// print response
|
|
||||||
if (now > 0) {
|
|
||||||
|
|
||||||
em4x50_word_t words[EM4X50_NO_WORDS];
|
|
||||||
|
|
||||||
prepare_result(resp.data.asBytes, 0, now - 1, words);
|
|
||||||
|
|
||||||
PrintAndLogEx(NORMAL, "");
|
|
||||||
PrintAndLogEx(INFO, " # | word (msb) | word (lsb) ");
|
|
||||||
PrintAndLogEx(INFO, "----+-------------+-------------");
|
|
||||||
|
|
||||||
for (int i = 0; i < now; i++) {
|
|
||||||
|
|
||||||
char r[30] = {0};
|
|
||||||
for (int j = 3; j >= 0; j--)
|
|
||||||
sprintf(r + strlen(r), "%02x ", reflect8(words[i].byte[j]));
|
|
||||||
|
|
||||||
PrintAndLogEx(INFO, " %2i | " _GREEN_("%s") "| %s",
|
|
||||||
i,
|
|
||||||
sprint_hex(words[i].byte, 4),
|
|
||||||
r
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
status = PM3_SUCCESS;
|
|
||||||
PrintAndLogEx(INFO, "----+-------------+-------------");
|
|
||||||
PrintAndLogEx(SUCCESS, "Standard read " _GREEN_("ok"));
|
|
||||||
|
|
||||||
} else {
|
|
||||||
PrintAndLogEx(FAILED, "Standard read " _RED_("failed"));
|
|
||||||
}
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
int CmdEM4x50Info(const char *Cmd) {
|
int CmdEM4x50Info(const char *Cmd) {
|
||||||
|
|
||||||
// envoke reading of a EM4x50 tag which has to be on the antenna because
|
// envoke reading of a EM4x50 tag which has to be on the antenna because
|
||||||
|
@ -823,6 +759,66 @@ int CmdEM4x50Info(const char *Cmd) {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int CmdEM4x50Reader(const char *Cmd) {
|
||||||
|
|
||||||
|
int now = 0;
|
||||||
|
PacketResponseNG resp;
|
||||||
|
|
||||||
|
CLIParserContext *ctx;
|
||||||
|
CLIParserInit(&ctx, "lf em 4x50_reader",
|
||||||
|
"Shows standard read data of EM4x50 tag.",
|
||||||
|
"lf em 4x50_reader\n"
|
||||||
|
"lf em 4x50_reader -@ -> continuous reader mode"
|
||||||
|
);
|
||||||
|
|
||||||
|
void *argtable[] = {
|
||||||
|
arg_param_begin,
|
||||||
|
arg_lit0("@", NULL, "optional - continuous reader mode"),
|
||||||
|
arg_param_end
|
||||||
|
};
|
||||||
|
|
||||||
|
CLIExecWithReturn(ctx, Cmd, argtable, true);
|
||||||
|
bool cm = arg_get_lit(ctx, 1);
|
||||||
|
CLIParserFree(ctx);
|
||||||
|
|
||||||
|
// start
|
||||||
|
do {
|
||||||
|
|
||||||
|
clearCommandBuffer();
|
||||||
|
SendCommandNG(CMD_LF_EM4X50_READER, 0, 0);
|
||||||
|
WaitForResponse(CMD_LF_EM4X50_READER, &resp);
|
||||||
|
|
||||||
|
now = resp.status;
|
||||||
|
|
||||||
|
// print response
|
||||||
|
if (now > 0) {
|
||||||
|
|
||||||
|
em4x50_word_t words[EM4X50_NO_WORDS];
|
||||||
|
prepare_result(resp.data.asBytes, 0, now - 1, words);
|
||||||
|
|
||||||
|
PrintAndLogEx(NORMAL, "");
|
||||||
|
PrintAndLogEx(INFO, " word (msb) | word (lsb) ");
|
||||||
|
PrintAndLogEx(INFO, "-------------+-------------");
|
||||||
|
|
||||||
|
for (int i = 0; i < now; i++) {
|
||||||
|
|
||||||
|
char r[30] = {0};
|
||||||
|
for (int j = 3; j >= 0; j--)
|
||||||
|
sprintf(r + strlen(r), "%02x ", reflect8(words[i].byte[j]));
|
||||||
|
|
||||||
|
PrintAndLogEx(INFO, _GREEN_(" %s") "| %s",
|
||||||
|
sprint_hex(words[i].byte, 4),
|
||||||
|
r
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
PrintAndLogEx(INFO, "-------------+-------------");
|
||||||
|
}
|
||||||
|
} while (cm && !kbd_enter_pressed());
|
||||||
|
|
||||||
|
return PM3_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
int CmdEM4x50Watch(const char *Cmd) {
|
int CmdEM4x50Watch(const char *Cmd) {
|
||||||
|
|
||||||
// continously envoke reading of a EM4x50 tag
|
// continously envoke reading of a EM4x50 tag
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue