const productName uidmapping[] = {
+ { 0xE001000000000000LL, 16, "Motorola" },
+ { 0xE002000000000000LL, 16, "ST Microelectronics" },
+ { 0xE003000000000000LL, 16, "Hitachi" },
+ { 0xE004000000000000LL, 16, "Philips" },
+ { 0xE004010000000000LL, 24, "Philips; IC SL2 ICS20" },
+ { 0xE005000000000000LL, 16, "Infineon" },
+ { 0xE005400000000000LL, 24, "Infineon; 56x32bit" },
+ { 0xE006000000000000LL, 16, "Cylinc" },
{ 0xE007000000000000LL, 16, "Texas Instrument; " },
{ 0xE007000000000000LL, 20, "Texas Instrument; Tag-it HF-I Plus Inlay; 64x32bit" },
{ 0xE007100000000000LL, 20, "Texas Instrument; Tag-it HF-I Plus Chip; 64x32bit" },
{ 0xE007C00000000000LL, 23, "Texas Instrument; Tag-it HF-I Standard; 8x32bit" },
{ 0xE007C40000000000LL, 23, "Texas Instrument; Tag-it HF-I Pro; 8x23bit; password" },
- { 0xE005000000000000LL, 16, "Infineon" },
- { 0xE005400000000000LL, 24, "Infineon; 56x32bit" },
- { 0xE004000000000000LL, 16, "Philips" },
- { 0xE002000000000000LL, 16, "STMicroelectronics" },
+ { 0xE008000000000000LL, 16, "Fujitsu" },
+ { 0xE009000000000000LL, 16, "Matsushita" },
+ { 0xE00A000000000000LL, 16, "NEC" },
+ { 0xE00B000000000000LL, 16, "Oki Electric" },
+ { 0xE00C000000000000LL, 16, "Toshiba" },
+ { 0xE00D000000000000LL, 16, "Mitsubishi" },
+ { 0xE00E000000000000LL, 16, "Samsung" },
+ { 0xE00F000000000000LL, 16, "Hyundai" },
+ { 0xE010000000000000LL, 16, "LG-Semiconductors" },
+ { 0xE012000000000000LL, 16, "HID Corporation" },
{ 0xE016000000000000LL, 16, "EM-Marin SA (Skidata)" },
{ 0xE016040000000000LL, 24, "EM-Marin SA (Skidata Keycard-eco); no memory" },
{ 0xE016100000000000LL, 24, "EM-Marin SA (Skidata); EM4135; 36x64bit start page 13" },
};
-// fast method to just read the UID of an tag (collission detection not supported)
-// *buf shouls be large enough to fit the 64bit uid
+// fast method to just read the UID of a tag (collission detection not supported)
+// *buf should be large enough to fit the 64bit uid
// returns 1 if suceeded
int getUID(uint8_t *buf)
{
}
-// will return a clear-text message to an errorcode
+// return a clear-text message to an errorcode
static char* TagErrorStr(uint8_t error) {
- // TODO
- return NULL;
+ switch (error) {
+ case 0x01: return "The command is not supported";
+ case 0x02: return "The command is not recognised";
+ case 0x03: return "The option is not supported.";
+ case 0x0f: return "Unknown error.";
+ case 0x10: return "The specified block is not available (doesn’t exist).";
+ case 0x11: return "The specified block is already -locked and thus cannot be locked again";
+ case 0x12: return "The specified block is locked and its content cannot be changed.";
+ case 0x13: return "The specified block was not successfully programmed.";
+ case 0x14: return "The specified block was not successfully locked.";
+ default: return "Reserved for Future Use or Custom command error.";
+ }
}
blocknum++;
// PrintAndLog("bn=%i",blocknum);
} else {
- PrintAndLog("Tag returned Error %i: %s",recv[0],TagErrorStr(recv[0]));
+ PrintAndLog("Tag returned Error %i: %s",recv[1],TagErrorStr(recv[1]));
return 0;
}
} // else PrintAndLog("crc");
else if (r && ISO15_CRC_CHECK!=Crc(r->d.asBytes,r->arg[0]))
PrintAndLog("CRC Failed");
else
- PrintAndLog("Tag returned Error %i: %s",recv[0],TagErrorStr(recv[0]));
+ PrintAndLog("Tag returned Error %i: %s",recv[1],TagErrorStr(recv[1]));
return 0;
}
sprintf(output+strlen(output),"%02hX ",recv[i]);
}
strcat(output," ");
- for ( int i=2; i<r->arg[0]-2; i++) {
- sprintf(output+strlen(output),"%c",recv[i]>31 || recv[i]<127?recv[i]:'.');
+ for ( int i=1; i<r->arg[0]-2; i++) {
+ sprintf(output+strlen(output),"%c",recv[i]>31 && recv[i]<127?recv[i]:'.');
}
PrintAndLog("%s",output);
} else {
- PrintAndLog("Tag returned Error %i: %s",recv[0],TagErrorStr(recv[0]));
+ PrintAndLog("Tag returned Error %i: %s",recv[1],TagErrorStr(recv[1]));
}
} else {
PrintAndLog("CRC failed");
if (!(recv[0] & ISO15_RES_ERROR)) {
PrintAndLog("OK");
} else {
- PrintAndLog("Tag returned Error %i: %s",recv[0],TagErrorStr(recv[0]));
+ PrintAndLog("Tag returned Error %i: %s",recv[1],TagErrorStr(recv[1]));
}
} else {
PrintAndLog("CRC failed");