static int CmdHelp(const char *Cmd);
+
+
+int CmdEMdemodASK(const char *Cmd)
+{
+ int findone=0;
+ UsbCommand c={CMD_EM410X_DEMOD};
+ if(Cmd[0]=='1') findone=1;
+ c.arg[0]=findone;
+ SendCommand(&c);
+ return 0;
+}
+
+
+
/* Read the ID of an EM410x tag.
* Format:
* 1111 1111 1 <-- standard non-repeatable header
int i, j, clock, header, rows, bit, hithigh, hitlow, first, bit2idx, high, low;
int parity[4];
char id[11];
+ char id2[11];
int retested = 0;
uint8_t BitStream[MAX_GRAPH_TRACE_LEN];
high = low = 0;
{
/* Read another byte! */
sprintf(id+rows, "%x", (8 * BitStream[i]) + (4 * BitStream[i+1]) + (2 * BitStream[i+2]) + (1 * BitStream[i+3]));
+ sprintf(id2+rows, "%x", (8 * BitStream[i+3]) + (4 * BitStream[i+2]) + (2 * BitStream[i+1]) + (1 * BitStream[i]));
rows++;
/* Keep parity info */
{
/* Sweet! */
PrintAndLog("EM410x Tag ID: %s", id);
+ PrintAndLog("Unique Tag ID: %s", id2);
/* Stop any loops */
return 1;
++i;
while ((GraphBuffer[i] > low) && (i<GraphTraceLen))
++i;
- if (j>(MAX_GRAPH_TRACE_LEN/64)) {
+ if (j>=(MAX_GRAPH_TRACE_LEN/64)) {
break;
}
tmpbuff[j++]= i - start;
int CmdEM410xWrite(const char *Cmd)
{
uint64_t id = 0xFFFFFFFFFFFFFFFF; // invalid id value
- unsigned int card = 0xFF; // invalid card value
+ int card = 0xFF; // invalid card value
unsigned int clock = 0; // invalid clock value
sscanf(Cmd, "%" PRIx64 " %d %d", &id, &card, &clock);
static command_t CommandTable[] =
{
{"help", CmdHelp, 1, "This help"},
+ {"em410xdemod", CmdEMdemodASK, 0, "[clock rate] -- Extract ID from EM410x tag"},
{"em410xread", CmdEM410xRead, 1, "[clock rate] -- Extract ID from EM410x tag"},
{"em410xsim", CmdEM410xSim, 0, "<UID> -- Simulate EM410x tag"},
{"em410xwatch", CmdEM410xWatch, 0, "['h'] -- Watches for EM410x 125/134 kHz tags (option 'h' for 134)"},