if (verbose) PrintAndLog("timeout while waiting for reply.");
return 0;
}
- *datalen = resp.arg[0];
- if (verbose) PrintAndLog("received %u octets", *datalen);
- if (*datalen < 2) return 0;
+
+ int ret = resp.arg[0];
+ if (verbose) {
+ if (ret < 0) {
+ PrintAndLog("tag didn't respond");
+ } else if (ret == 0) {
+ PrintAndLog("received SOF only (maybe iCLASS/Picopass)");
+ } else {
+ PrintAndLog("received %u octets", ret);
+ }
+ }
+
+ *datalen = ret;
+
+ if (ret < 2) return 0;
memcpy(data, resp.d.asBytes, *datalen);
if (verbose) PrintAndLog("%s", sprint_hex(data, *datalen));
uint8_t datalen = 0;
unsigned int temp;
int i = 0;
- if (strlen(Cmd) < 3) {
+ if (strlen(Cmd) < 2) {
PrintAndLog("Usage: hf 14b raw [-r] [-c] [-p] [-s || -ss] <0A 0B 0C ... hex>");
PrintAndLog(" -r do not read response");
PrintAndLog(" -c calculate and append CRC");
if (HF14BCmdRaw(true, &crc2, true, cmd2, &cmdLen, false) == 0) return switch_off_field_14b();
- if (SRx && (cmdLen != 3 || !crc2) ) return switch_off_field_14b();
- else if (cmd2[0] != 0x50 || cmdLen != 14 || !crc2) return switch_off_field_14b();
+ if (SRx) {
+ if (cmdLen != 3 || !crc2) return switch_off_field_14b();
+ } else {
+ if (cmd2[0] != 0x50 || cmdLen != 14 || !crc2) return switch_off_field_14b();
+ }
uint8_t chipID = 0;
if (SRx) {
if (cmdLen != 3 || !crc2) return switch_off_field_14b();
if (SRx && cmd2[0] != chipID) return switch_off_field_14b();
}
+
return HF14BCmdRaw(reply, &crc, power, data, &datalen, true);
+
}
// test for other 14b type tags (mimic another reader - don't have tags to identify)
-static bool HF14B_Other_Reader(bool verbose) {
- uint8_t data[4];
+static bool HF14B_Other_Reader(uint8_t *data, bool verbose) {
uint8_t datalen;
-
bool crc = true;
- datalen = 4;
+
//std read cmd
data[0] = 0x00;
data[1] = 0x0b;
data[2] = 0x3f;
data[3] = 0x80;
+ datalen = 4;
if (HF14BCmdRaw(true, &crc, true, data, &datalen, false) != 0) {
if (datalen > 2 || !crc) {
PrintAndLog ("\n14443-3b tag found:");
- PrintAndLog ("Unknown tag type answered to a 0x000b3f80 command ans:");
+ PrintAndLog ("Unknown tag type answered to a 0x000b3f80 command:");
PrintAndLog ("%s", sprint_hex(data, datalen));
switch_off_field_14b();
return true;
if (HF14BCmdRaw(true, &crc, true, data, &datalen, false) != 0) {
if (datalen > 0) {
PrintAndLog ("\n14443-3b tag found:");
- PrintAndLog ("Unknown tag type answered to a 0x0A command ans:");
+ PrintAndLog ("Unknown tag type answered to a 0x0A command:");
PrintAndLog ("%s", sprint_hex(data, datalen));
switch_off_field_14b();
return true;
if (HF14BCmdRaw(true, &crc, true, data, &datalen, false) != 0) {
if (datalen > 0) {
PrintAndLog ("\n14443-3b tag found:");
- PrintAndLog ("Unknown tag type answered to a 0x0C command ans:");
+ PrintAndLog ("Unknown tag type answered to a 0x0C command:");
PrintAndLog ("%s", sprint_hex(data, datalen));
switch_off_field_14b();
return true;
// try unknown 14b read commands (to be identified later)
// could be read of calypso, CEPAS, moneo, or pico pass.
- if (HF14B_Other_Reader(verbose)) return 1;
+ if (HF14B_Other_Reader(data, verbose)) return 1;
if (verbose) PrintAndLog("no 14443B tag found");
return 0;
// try unknown 14b read commands (to be identified later)
// could be read of calypso, CEPAS, moneo, or pico pass.
- if (HF14B_Other_Reader(verbose)) return 1;
+ if (HF14B_Other_Reader(data, verbose)) return 1;
if (verbose) PrintAndLog("no 14443B tag found");
return 0;
uint8_t blockno = -1;
uint8_t data[4] = {0x00};
bool isSrix4k = true;
- char str[20];
if (strlen(Cmd) < 1 || cmdp == 'h' || cmdp == 'H') {
PrintAndLog("Usage: hf 14b write <1|2> <BLOCK> <DATA>");
else
PrintAndLog("[%s] Write block %02X [ %s ]", (isSrix4k)?"SRIX4K":"SRI512", blockno, sprint_hex(data, 4));
- sprintf(str, "-c 09 %02x %02x%02x%02x%02x", blockno, data[0], data[1], data[2], data[3]);
+ char str[22];
+ sprintf(str, "-ss -c 09 %02x %02x%02x%02x%02x", blockno, data[0], data[1], data[2], data[3]);
CmdHF14BCmdRaw(str);
return 0;