This commit is contained in:
iceman1001 2019-04-07 16:21:27 +02:00
parent 7bf24a170f
commit ef610f373a

View file

@ -997,9 +997,8 @@ void CmdPSKsimTag(uint16_t arg1, uint16_t arg2, size_t size, uint8_t *bits, int
// loop to get raw HID waveform then FSK demodulate the TAG ID from it // loop to get raw HID waveform then FSK demodulate the TAG ID from it
void CmdHIDdemodFSK(int findone, uint32_t *high, uint32_t *low, int ledcontrol) { void CmdHIDdemodFSK(int findone, uint32_t *high, uint32_t *low, int ledcontrol) {
uint8_t *dest = BigBuf_get_addr(); uint8_t *dest = BigBuf_get_addr();
size_t size = 0; size_t size;
uint32_t hi2 = 0, hi = 0, lo = 0; uint32_t hi2 = 0, hi = 0, lo = 0;
int idx = 0;
int dummyIdx = 0; int dummyIdx = 0;
// Configure to go in 125Khz listen mode // Configure to go in 125Khz listen mode
LFSetupFPGAForADC(95, true); LFSetupFPGAForADC(95, true);
@ -1015,7 +1014,7 @@ void CmdHIDdemodFSK(int findone, uint32_t *high, uint32_t *low, int ledcontrol)
DoAcquisition_default(-1, true); DoAcquisition_default(-1, true);
// FSK demodulator // FSK demodulator
size = 50 * 128 * 2; //big enough to catch 2 sequences of largest format size = 50 * 128 * 2; //big enough to catch 2 sequences of largest format
idx = HIDdemodFSK(dest, &size, &hi2, &hi, &lo, &dummyIdx); int idx = HIDdemodFSK(dest, &size, &hi2, &hi, &lo, &dummyIdx);
if (idx < 0) continue; if (idx < 0) continue;
if (idx > 0 && lo > 0 && (size == 96 || size == 192)) { if (idx > 0 && lo > 0 && (size == 96 || size == 192)) {
@ -1029,7 +1028,7 @@ void CmdHIDdemodFSK(int findone, uint32_t *high, uint32_t *low, int ledcontrol)
); );
} else { //standard HID tags 44/96 bits } else { //standard HID tags 44/96 bits
uint8_t bitlen = 0; uint8_t bitlen = 0;
uint32_t fc = 0; uint32_t fac = 0;
uint32_t cardnum = 0; uint32_t cardnum = 0;
if (((hi >> 5) & 1) == 1) { //if bit 38 is set then < 37 bit format is used if (((hi >> 5) & 1) == 1) { //if bit 38 is set then < 37 bit format is used
@ -1041,35 +1040,35 @@ void CmdHIDdemodFSK(int findone, uint32_t *high, uint32_t *low, int ledcontrol)
idx3++; idx3++;
} }
bitlen = idx3 + 19; bitlen = idx3 + 19;
fc = 0; fac = 0;
cardnum = 0; cardnum = 0;
if (bitlen == 26) { if (bitlen == 26) {
cardnum = (lo >> 1) & 0xFFFF; cardnum = (lo >> 1) & 0xFFFF;
fc = (lo >> 17) & 0xFF; fac = (lo >> 17) & 0xFF;
} }
if (bitlen == 37) { if (bitlen == 37) {
cardnum = (lo >> 1) & 0x7FFFF; cardnum = (lo >> 1) & 0x7FFFF;
fc = ((hi & 0xF) << 12) | (lo >> 20); fac = ((hi & 0xF) << 12) | (lo >> 20);
} }
if (bitlen == 34) { if (bitlen == 34) {
cardnum = (lo >> 1) & 0xFFFF; cardnum = (lo >> 1) & 0xFFFF;
fc = ((hi & 1) << 15) | (lo >> 17); fac = ((hi & 1) << 15) | (lo >> 17);
} }
if (bitlen == 35) { if (bitlen == 35) {
cardnum = (lo >> 1) & 0xFFFFF; cardnum = (lo >> 1) & 0xFFFFF;
fc = ((hi & 1) << 11) | (lo >> 21); fac = ((hi & 1) << 11) | (lo >> 21);
} }
} else { //if bit 38 is not set then 37 bit format is used } else { //if bit 38 is not set then 37 bit format is used
bitlen = 37; bitlen = 37;
cardnum = (lo >> 1) & 0x7FFFF; cardnum = (lo >> 1) & 0x7FFFF;
fc = ((hi & 0xF) << 12) | (lo >> 20); fac = ((hi & 0xF) << 12) | (lo >> 20);
} }
Dbprintf("TAG ID: %x%08x (%d) - Format Len: %dbit - FC: %d - Card: %d", Dbprintf("TAG ID: %x%08x (%d) - Format Len: %dbit - FC: %d - Card: %d",
hi, hi,
lo, lo,
(lo >> 1) & 0xFFFF, (lo >> 1) & 0xFFFF,
bitlen, bitlen,
fc, fac,
cardnum cardnum
); );
} }
@ -1095,7 +1094,7 @@ void CmdAWIDdemodFSK(int findone, uint32_t *high, uint32_t *low, int ledcontrol)
//big enough to catch 2 sequences of largest format //big enough to catch 2 sequences of largest format
size_t size = 12800; //50 * 128 * 2; size_t size = 12800; //50 * 128 * 2;
int idx = 0, dummyIdx = 0; int dummyIdx = 0;
BigBuf_Clear_keep_EM(); BigBuf_Clear_keep_EM();
@ -1109,7 +1108,7 @@ void CmdAWIDdemodFSK(int findone, uint32_t *high, uint32_t *low, int ledcontrol)
DoAcquisition_default(-1, true); DoAcquisition_default(-1, true);
// FSK demodulator // FSK demodulator
idx = detectAWID(dest, &size, &dummyIdx); int idx = detectAWID(dest, &size, &dummyIdx);
if (idx <= 0 || size != 96) continue; if (idx <= 0 || size != 96) continue;
// Index map // Index map
@ -1147,16 +1146,16 @@ void CmdAWIDdemodFSK(int findone, uint32_t *high, uint32_t *low, int ledcontrol)
// w = wiegand parity // w = wiegand parity
// (26 bit format shown) // (26 bit format shown)
uint32_t fc = 0; uint32_t fac = 0;
uint32_t cardnum = 0; uint32_t cardnum = 0;
uint32_t code1 = 0; uint32_t code1 = 0;
uint32_t code2 = 0; uint32_t code2 = 0;
uint8_t fmtLen = bytebits_to_byte(dest, 8); uint8_t fmtLen = bytebits_to_byte(dest, 8);
if (fmtLen == 26) { if (fmtLen == 26) {
fc = bytebits_to_byte(dest + 9, 8); fac = bytebits_to_byte(dest + 9, 8);
cardnum = bytebits_to_byte(dest + 17, 16); cardnum = bytebits_to_byte(dest + 17, 16);
code1 = bytebits_to_byte(dest + 8, fmtLen); code1 = bytebits_to_byte(dest + 8, fmtLen);
Dbprintf("AWID Found - BitLength: %d, FC: %d, Card: %d - Wiegand: %x, Raw: %08x%08x%08x", fmtLen, fc, cardnum, code1, rawHi2, rawHi, rawLo); Dbprintf("AWID Found - BitLength: %d, FC: %d, Card: %d - Wiegand: %x, Raw: %08x%08x%08x", fmtLen, fac, cardnum, code1, rawHi2, rawHi, rawLo);
} else { } else {
cardnum = bytebits_to_byte(dest + 8 + (fmtLen - 17), 16); cardnum = bytebits_to_byte(dest + 8 + (fmtLen - 17), 16);
if (fmtLen > 32) { if (fmtLen > 32) {
@ -1174,8 +1173,6 @@ void CmdAWIDdemodFSK(int findone, uint32_t *high, uint32_t *low, int ledcontrol)
*low = rawLo; *low = rawLo;
break; break;
} }
// reset
idx = 0;
WDT_HIT(); WDT_HIT();
} }
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
@ -1186,8 +1183,8 @@ void CmdAWIDdemodFSK(int findone, uint32_t *high, uint32_t *low, int ledcontrol)
void CmdEM410xdemod(int findone, uint32_t *high, uint64_t *low, int ledcontrol) { void CmdEM410xdemod(int findone, uint32_t *high, uint64_t *low, int ledcontrol) {
uint8_t *dest = BigBuf_get_addr(); uint8_t *dest = BigBuf_get_addr();
size_t size = 0, idx = 0; size_t size, idx = 0;
int clk = 0, invert = 0, errCnt = 0, maxErr = 20; int clk = 0, invert = 0, errCnt, maxErr = 20;
uint32_t hi = 0; uint32_t hi = 0;
uint64_t lo = 0; uint64_t lo = 0;
@ -1238,7 +1235,7 @@ void CmdEM410xdemod(int findone, uint32_t *high, uint64_t *low, int ledcontrol)
} }
WDT_HIT(); WDT_HIT();
hi = lo = size = idx = 0; hi = lo = size = idx = 0;
clk = invert = errCnt = 0; clk = invert = 0;
} }
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
DbpString("Stopped"); DbpString("Stopped");
@ -1249,7 +1246,7 @@ void CmdIOdemodFSK(int findone, uint32_t *high, uint32_t *low, int ledcontrol) {
uint8_t *dest = BigBuf_get_addr(); uint8_t *dest = BigBuf_get_addr();
int dummyIdx = 0, idx = 0; int dummyIdx = 0;
uint32_t code = 0, code2 = 0; uint32_t code = 0, code2 = 0;
uint8_t version = 0, facilitycode = 0, crc = 0; uint8_t version = 0, facilitycode = 0, crc = 0;
uint16_t number = 0, calccrc = 0; uint16_t number = 0, calccrc = 0;
@ -1269,7 +1266,7 @@ void CmdIOdemodFSK(int findone, uint32_t *high, uint32_t *low, int ledcontrol) {
//fskdemod and get start index //fskdemod and get start index
WDT_HIT(); WDT_HIT();
idx = detectIOProx(dest, &size, &dummyIdx); int idx = detectIOProx(dest, &size, &dummyIdx);
if (idx < 0) continue; if (idx < 0) continue;
//valid tag found //valid tag found
@ -1325,8 +1322,6 @@ void CmdIOdemodFSK(int findone, uint32_t *high, uint32_t *low, int ledcontrol) {
code = code2 = 0; code = code2 = 0;
version = facilitycode = 0; version = facilitycode = 0;
number = 0; number = 0;
idx = 0;
WDT_HIT(); WDT_HIT();
} }
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
@ -1481,8 +1476,7 @@ void T55xxReadBlock(uint16_t arg0, uint8_t Block, uint32_t Pwd) {
bool PwdMode = arg0 & 0x1; bool PwdMode = arg0 & 0x1;
uint8_t Page = (arg0 & 0x2) >> 1; uint8_t Page = (arg0 & 0x2) >> 1;
bool brute_mem = arg0 & 0x4; bool brute_mem = arg0 & 0x4;
uint32_t i;
uint32_t i = 0;
// regular read mode // regular read mode
bool RegReadMode = (Block == 0xFF); bool RegReadMode = (Block == 0xFF);
@ -1771,7 +1765,7 @@ void CopyVikingtoT55xx(uint32_t block1, uint32_t block2, uint8_t Q5) {
#define EM410X_ID_LENGTH 40 #define EM410X_ID_LENGTH 40
void WriteEM410x(uint32_t card, uint32_t id_hi, uint32_t id_lo) { void WriteEM410x(uint32_t card, uint32_t id_hi, uint32_t id_lo) {
int i, id_bit; int i;
uint64_t id = EM410X_HEADER; uint64_t id = EM410X_HEADER;
uint64_t rev_id = 0; // reversed ID uint64_t rev_id = 0; // reversed ID
int c_parity[4]; // column parity int c_parity[4]; // column parity
@ -1790,7 +1784,7 @@ void WriteEM410x(uint32_t card, uint32_t id_hi, uint32_t id_lo) {
} }
for (i = 0; i < EM410X_ID_LENGTH; ++i) { for (i = 0; i < EM410X_ID_LENGTH; ++i) {
id_bit = rev_id & 1; int id_bit = rev_id & 1;
if (i % 4 == 0) { if (i % 4 == 0) {
// Don't write row parity bit at start of parsing // Don't write row parity bit at start of parsing
@ -1926,7 +1920,6 @@ uint8_t Prepare_Addr(uint8_t addr) {
//==================================================================== //====================================================================
uint8_t Prepare_Data(uint16_t data_low, uint16_t data_hi) { uint8_t Prepare_Data(uint16_t data_low, uint16_t data_hi) {
register uint8_t line_parity;
register uint8_t column_parity; register uint8_t column_parity;
register uint8_t i, j; register uint8_t i, j;
register uint16_t data; register uint16_t data;
@ -1935,7 +1928,7 @@ uint8_t Prepare_Data(uint16_t data_low, uint16_t data_hi) {
column_parity = 0; column_parity = 0;
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
line_parity = 0; register uint8_t line_parity = 0;
for (j = 0; j < 8; j++) { for (j = 0; j < 8; j++) {
line_parity ^= data; line_parity ^= data;
column_parity ^= (data & 1) << j; column_parity ^= (data & 1) << j;