mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-19 13:00:42 -07:00
add: 'hf 14b raw' - added -t timeout option. see https://github.com/RfidResearchGroup/proxmark3/issues/125
This commit is contained in:
parent
35bc4a975e
commit
1d63258388
3 changed files with 30 additions and 5 deletions
|
@ -1570,6 +1570,7 @@ void iso14b_set_trigger(bool enable) {
|
|||
void SendRawCommand14443B_Ex(UsbCommand *c) {
|
||||
iso14b_command_t param = c->arg[0];
|
||||
size_t len = c->arg[1] & 0xffff;
|
||||
uint32_t timeout = c->arg[2];
|
||||
uint8_t *cmd = c->d.asBytes;
|
||||
uint8_t status = 0;
|
||||
uint32_t sendlen = sizeof(iso14b_card_select_t);
|
||||
|
@ -1586,6 +1587,9 @@ void SendRawCommand14443B_Ex(UsbCommand *c) {
|
|||
clear_trace();
|
||||
}
|
||||
|
||||
if ((param & ISO14B_SET_TIMEOUT))
|
||||
iso14b_set_timeout(timeout);
|
||||
|
||||
set_tracing(true);
|
||||
|
||||
if ((param & ISO14B_SELECT_STD) == ISO14B_SELECT_STD) {
|
||||
|
|
|
@ -33,7 +33,7 @@ int usage_hf_14b_reader(void) {
|
|||
return 0;
|
||||
}
|
||||
int usage_hf_14b_raw(void) {
|
||||
PrintAndLogEx(NORMAL, "Usage: hf 14b raw [-h] [-r] [-c] [-p] [-s || -ss] <0A 0B 0C ... hex>");
|
||||
PrintAndLogEx(NORMAL, "Usage: hf 14b raw [-h] [-r] [-c] [-p] [-s / -ss] [-t] <0A 0B 0C ... hex>");
|
||||
PrintAndLogEx(NORMAL, "Options:");
|
||||
PrintAndLogEx(NORMAL, " -h this help");
|
||||
PrintAndLogEx(NORMAL, " -r do not read response");
|
||||
|
@ -41,6 +41,7 @@ int usage_hf_14b_raw(void) {
|
|||
PrintAndLogEx(NORMAL, " -p leave the field on after receive");
|
||||
PrintAndLogEx(NORMAL, " -s active signal field ON with select");
|
||||
PrintAndLogEx(NORMAL, " -ss active signal field ON with select for SRx ST Microelectronics tags");
|
||||
PrintAndLogEx(NORMAL, " -t timeout in ms");
|
||||
PrintAndLogEx(NORMAL, "Example:");
|
||||
PrintAndLogEx(NORMAL, " hf 14b raw -s -c -p 0200a40400");
|
||||
return 0;
|
||||
|
@ -152,13 +153,14 @@ int CmdHF14BSniff(const char *Cmd) {
|
|||
}
|
||||
|
||||
int CmdHF14BCmdRaw(const char *Cmd) {
|
||||
bool reply = true, power = false, select = false;
|
||||
bool reply = true, power = false, select = false, timeout = false;
|
||||
char buf[5] = "";
|
||||
int i = 0;
|
||||
uint8_t data[USB_CMD_DATA_SIZE] = {0x00};
|
||||
uint16_t datalen = 0;
|
||||
uint32_t flags = ISO14B_CONNECT;
|
||||
uint32_t temp = 0;
|
||||
uint32_t time_wait = 0;
|
||||
|
||||
if (strlen(Cmd) < 3) return usage_hf_14b_raw();
|
||||
|
||||
|
@ -189,6 +191,14 @@ int CmdHF14BCmdRaw(const char *Cmd) {
|
|||
flags |= ISO14B_SELECT_STD;
|
||||
}
|
||||
break;
|
||||
case 't':
|
||||
timeout = true;
|
||||
sscanf(Cmd + i + 2, "%d", &temp);
|
||||
timeout = temp;
|
||||
i += 3;
|
||||
while (Cmd[i] != ' ' && Cmd[i] != '\0') { i++; }
|
||||
i -= 2;
|
||||
break;
|
||||
default:
|
||||
return usage_hf_14b_raw();
|
||||
}
|
||||
|
@ -214,7 +224,17 @@ int CmdHF14BCmdRaw(const char *Cmd) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (!power)
|
||||
if (timeout) {
|
||||
#define MAX_TIMEOUT 40542464 // = (2^32-1) * (8*16) / 13560000Hz * 1000ms/s
|
||||
flags |= ISO14B_SET_TIMEOUT;
|
||||
if (timeout > MAX_TIMEOUT) {
|
||||
timeout = MAX_TIMEOUT;
|
||||
PrintAndLogEx(NORMAL, "Set timeout to 40542 seconds (11.26 hours). The max we can wait for response");
|
||||
}
|
||||
time_wait = 13560000 / 1000 / (8 * 16) * timeout; // timeout in ETUs (time to transfer 1 bit, approx. 9.4 us)
|
||||
}
|
||||
|
||||
if (power == 0)
|
||||
flags |= ISO14B_DISCONNECT;
|
||||
|
||||
if (datalen > 0)
|
||||
|
@ -223,7 +243,7 @@ int CmdHF14BCmdRaw(const char *Cmd) {
|
|||
// Max buffer is USB_CMD_DATA_SIZE
|
||||
datalen = (datalen > USB_CMD_DATA_SIZE) ? USB_CMD_DATA_SIZE : datalen;
|
||||
|
||||
UsbCommand c = {CMD_ISO_14443B_COMMAND, {flags, datalen, 0}};
|
||||
UsbCommand c = {CMD_ISO_14443B_COMMAND, {flags, datalen, time_wait}};
|
||||
memcpy(c.d.asBytes, data, datalen);
|
||||
clearCommandBuffer();
|
||||
SendCommand(&c);
|
||||
|
|
|
@ -71,7 +71,8 @@ typedef enum ISO14B_COMMAND {
|
|||
ISO14B_REQUEST_TRIGGER = (1 << 4),
|
||||
ISO14B_APPEND_CRC = (1 << 5),
|
||||
ISO14B_SELECT_STD = (1 << 6),
|
||||
ISO14B_SELECT_SR = (1 << 7)
|
||||
ISO14B_SELECT_SR = (1 << 7),
|
||||
ISO14B_SET_TIMEOUT = (1 << 8),
|
||||
} iso14b_command_t;
|
||||
|
||||
typedef enum ISO15_COMMAND {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue