int usage_legic_calccrc8(void){
PrintAndLog("Calculates the legic crc8/crc16 on the input hexbytes.");
PrintAndLog("There must be an even number of hexsymbols as input.");
- PrintAndLog("Usage: hf legic crc8 [h] b <hexbytes> u <uidcrc>");
- PrintAndLog("Options :");
+ PrintAndLog("Usage: hf legic crc8 [h] b <hexbytes> u <uidcrc> c <crc type>");
+ PrintAndLog("Options:");
PrintAndLog(" b <hexbytes> : hex bytes");
PrintAndLog(" u <uidcrc> : MCC hexbyte");
+ PrintAndLog(" c <crc type> : 8|16 bit crc size");
PrintAndLog("");
- PrintAndLog("Samples :");
+ PrintAndLog("Samples:");
PrintAndLog(" hf legic crc8 b deadbeef1122");
- PrintAndLog(" hf legic crc8 b deadbeef1122 u 9A");
+ PrintAndLog(" hf legic crc8 b deadbeef1122 u 9A c 16");
return 0;
}
int usage_legic_load(void){
PrintAndLog("It loads datasamples from the file `filename` to device memory");
PrintAndLog("Usage: hf legic load <file name>");
- PrintAndLog(" sample: hf legic load filename");
+ PrintAndLog("");
+ PrintAndLog("Samples:");
+ PrintAndLog(" hf legic load filename");
return 0;
}
int usage_legic_read(void){
PrintAndLog("Read data from a legic tag.");
PrintAndLog("Usage: hf legic read <offset> <num of bytes>");
- PrintAndLog("Options :");
+ PrintAndLog("Options:");
PrintAndLog(" <offset> : offset in data array to start download from");
PrintAndLog(" <num of bytes> : number of bytes to download");
PrintAndLog("");
- PrintAndLog(" sample: hf legic read");
+ PrintAndLog("Samples:");
+ PrintAndLog(" hf legic read");
return 0;
}
break;
}
- free(data);
+ if (data != NULL) free(data);
return 0;
}
PrintAndLog(" <card ID> : jablotron card ID");
PrintAndLog(" <Q5> : specify write to Q5 (t5555 instead of t55x7)");
PrintAndLog("");
- PrintAndLog("Sample: lf jablotron clone d 112233");
+ PrintAndLog("Sample: lf jablotron clone 112233");
return 0;
}
PrintAndLog(" h : This help");
PrintAndLog(" <card ID> : jablotron card ID");
PrintAndLog("");
- PrintAndLog("Sample: lf jablotron sim d 112233");
+ PrintAndLog("Sample: lf jablotron sim 112233");
return 0;
}
uint32_t CRC16Legic(uint8_t *buff, size_t size, uint8_t uidcrc) {
#define CRC16_POLY_LEGIC 0xB400
- //uint8_t initial = reflect(uidcrc, 8);
- uint16_t initial = uidcrc;
+ uint16_t initial = reflect(uidcrc, 8);
+ //uint16_t initial = uidcrc;
initial |= initial << 8;
crc_t crc;
crc_init_ref(&crc, 16, CRC16_POLY_LEGIC, initial, 0, TRUE, TRUE);