X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/b816886806bc301aad60573e9ba6c35c1bfe4ea5..59fc313d9907729397aa27d3b8f90455aa53d81e:/armsrc/legicrf.c diff --git a/armsrc/legicrf.c b/armsrc/legicrf.c index 6a1c3bae..a8cad9b7 100644 --- a/armsrc/legicrf.c +++ b/armsrc/legicrf.c @@ -217,7 +217,7 @@ void frame_sendAsReader(uint32_t data, uint8_t bits){ COIL_PULSE(0); // log - uint8_t cmdbytes[] = {cmd_sz, BYTEx(cmd, 0), BYTEx(cmd, 1), BYTEx(cmd, 2), BYTEx(send, 0), BYTEx(send, 1) }; + uint8_t cmdbytes[] = {bits, BYTEx(data,0), BYTEx(data,1), BYTEx(data,2) , BYTEx(send,0), BYTEx(send,1)}; LogTrace(cmdbytes, sizeof(cmdbytes), starttime, GET_TICKS, NULL, TRUE); } @@ -419,11 +419,10 @@ bool legic_write_byte(uint16_t index, uint8_t byte, uint8_t addr_sz) { crc = legic4Crc(LEGIC_WRITE, index, byte, addr_sz+1); // send write command - uint32_t cmd; - cmd = ((crc & 0xF ) << (addr_sz+1+8)); // CRC - cmd |= byte << (addr_sz+1); // Data - cmd |= ((index & 0xFF) << 1); // index - cmd |= LEGIC_WRITE; // CMD + uint32_t cmd = LEGIC_WRITE; + cmd |= index << 1; // index + cmd |= byte << (addr_sz+1); // Data + cmd |= (crc & 0xF ) << (addr_sz+1+8); // CRC /* Bitbang the response */ SHORT_COIL; @@ -470,7 +469,7 @@ bool legic_write_byte(uint16_t index, uint8_t byte, uint8_t addr_sz) { OUT: ; // log - uint8_t cmdbytes[] = {cmd_sz, isOK, BYTEx(steps, 0), BYTEx(steps, 1) }; + uint8_t cmdbytes[] = {1, isOK, BYTEx(steps, 0), BYTEx(steps, 1) }; LogTrace(cmdbytes, sizeof(cmdbytes), start, GET_TICKS, NULL, FALSE); return isOK; } @@ -538,13 +537,12 @@ void LegicRfWriter(uint16_t offset, uint16_t len, uint8_t iv, uint8_t *data) { LED_B_ON(); while( len > 0 ) { - - if ( !legic_write_byte( len + offset + LOWERLIMIT, data[len-1], card.addrsize) ) { - Dbprintf("operation failed @ 0x%03.3x", len-1); + --len; + if ( !legic_write_byte( len + offset, data[len], card.addrsize) ) { + Dbprintf("operation failed | %d | %d | %d", len + offset, len, data[len] ); isOK = 0; goto OUT; } - --len; WDT_HIT(); } OUT: