mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2024-09-20 15:26:13 +08:00
removed redundant function to compose reader short frame
This commit is contained in:
parent
28afbd2bee
commit
195af47289
|
@ -29,10 +29,6 @@ bool bAuthenticating;
|
||||||
bool bPwd;
|
bool bPwd;
|
||||||
bool bSuccessful;
|
bool bSuccessful;
|
||||||
|
|
||||||
size_t nbytes(size_t nbits) {
|
|
||||||
return (nbits/8)+((nbits%8)>0);
|
|
||||||
}
|
|
||||||
|
|
||||||
int LogTraceHitag(const uint8_t * btBytes, int iBits, int iSamples, uint32_t dwParity, int bReader)
|
int LogTraceHitag(const uint8_t * btBytes, int iBits, int iSamples, uint32_t dwParity, int bReader)
|
||||||
{
|
{
|
||||||
// Return when trace is full
|
// Return when trace is full
|
||||||
|
|
|
@ -1262,68 +1262,9 @@ static void TransmitFor14443a(const uint8_t *cmd, int len, int *samples, int *wa
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Code a 7-bit command without parity bit
|
// Prepare reader command (in bits, support short frames) to send to FPGA
|
||||||
// This is especially for 0x26 and 0x52 (REQA and WUPA)
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
void ShortFrameFromReader(const uint8_t bt)
|
void CodeIso14443aBitsAsReaderPar(const uint8_t * cmd, int bits, uint32_t dwParity)
|
||||||
{
|
|
||||||
int j;
|
|
||||||
int last;
|
|
||||||
uint8_t b;
|
|
||||||
|
|
||||||
ToSendReset();
|
|
||||||
|
|
||||||
// Start of Communication (Seq. Z)
|
|
||||||
ToSend[++ToSendMax] = SEC_Z;
|
|
||||||
last = 0;
|
|
||||||
|
|
||||||
b = bt;
|
|
||||||
for(j = 0; j < 7; j++) {
|
|
||||||
if(b & 1) {
|
|
||||||
// Sequence X
|
|
||||||
ToSend[++ToSendMax] = SEC_X;
|
|
||||||
last = 1;
|
|
||||||
} else {
|
|
||||||
if(last == 0) {
|
|
||||||
// Sequence Z
|
|
||||||
ToSend[++ToSendMax] = SEC_Z;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// Sequence Y
|
|
||||||
ToSend[++ToSendMax] = SEC_Y;
|
|
||||||
last = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
b >>= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// End of Communication
|
|
||||||
if(last == 0) {
|
|
||||||
// Sequence Z
|
|
||||||
ToSend[++ToSendMax] = SEC_Z;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// Sequence Y
|
|
||||||
ToSend[++ToSendMax] = SEC_Y;
|
|
||||||
last = 0;
|
|
||||||
}
|
|
||||||
// Sequence Y
|
|
||||||
ToSend[++ToSendMax] = SEC_Y;
|
|
||||||
|
|
||||||
// Just to be sure!
|
|
||||||
ToSend[++ToSendMax] = SEC_Y;
|
|
||||||
ToSend[++ToSendMax] = SEC_Y;
|
|
||||||
ToSend[++ToSendMax] = SEC_Y;
|
|
||||||
|
|
||||||
// Convert from last character reference to length
|
|
||||||
ToSendMax++;
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// Prepare reader command to send to FPGA
|
|
||||||
//
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
void CodeIso14443aAsReaderPar(const uint8_t * cmd, int len, uint32_t dwParity)
|
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
int last;
|
int last;
|
||||||
|
@ -1335,12 +1276,14 @@ void CodeIso14443aAsReaderPar(const uint8_t * cmd, int len, uint32_t dwParity)
|
||||||
ToSend[++ToSendMax] = SEC_Z;
|
ToSend[++ToSendMax] = SEC_Z;
|
||||||
last = 0;
|
last = 0;
|
||||||
|
|
||||||
|
size_t bytecount = nbytes(bits);
|
||||||
// Generate send structure for the data bits
|
// Generate send structure for the data bits
|
||||||
for (i = 0; i < len; i++) {
|
for (i = 0; i < bytecount; i++) {
|
||||||
// Get the current byte to send
|
// Get the current byte to send
|
||||||
b = cmd[i];
|
b = cmd[i];
|
||||||
|
size_t bitsleft = MIN((bits-(i*8)),8);
|
||||||
|
|
||||||
for (j = 0; j < 8; j++) {
|
for (j = 0; j < bitsleft; j++) {
|
||||||
if (b & 1) {
|
if (b & 1) {
|
||||||
// Sequence X
|
// Sequence X
|
||||||
ToSend[++ToSendMax] = SEC_X;
|
ToSend[++ToSendMax] = SEC_X;
|
||||||
|
@ -1358,19 +1301,22 @@ void CodeIso14443aAsReaderPar(const uint8_t * cmd, int len, uint32_t dwParity)
|
||||||
b >>= 1;
|
b >>= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the parity bit
|
// Only transmit (last) parity bit if we transmitted a complete byte
|
||||||
if ((dwParity >> i) & 0x01) {
|
if (j == 8) {
|
||||||
// Sequence X
|
// Get the parity bit
|
||||||
ToSend[++ToSendMax] = SEC_X;
|
if ((dwParity >> i) & 0x01) {
|
||||||
last = 1;
|
// Sequence X
|
||||||
} else {
|
ToSend[++ToSendMax] = SEC_X;
|
||||||
if (last == 0) {
|
last = 1;
|
||||||
// Sequence Z
|
|
||||||
ToSend[++ToSendMax] = SEC_Z;
|
|
||||||
} else {
|
} else {
|
||||||
// Sequence Y
|
if (last == 0) {
|
||||||
ToSend[++ToSendMax] = SEC_Y;
|
// Sequence Z
|
||||||
last = 0;
|
ToSend[++ToSendMax] = SEC_Z;
|
||||||
|
} else {
|
||||||
|
// Sequence Y
|
||||||
|
ToSend[++ToSendMax] = SEC_Y;
|
||||||
|
last = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1396,6 +1342,14 @@ void CodeIso14443aAsReaderPar(const uint8_t * cmd, int len, uint32_t dwParity)
|
||||||
ToSendMax++;
|
ToSendMax++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// Prepare reader command to send to FPGA
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
void CodeIso14443aAsReaderPar(const uint8_t * cmd, int len, uint32_t dwParity)
|
||||||
|
{
|
||||||
|
CodeIso14443aBitsAsReaderPar(cmd,len*8,dwParity);
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Wait for commands from reader
|
// Wait for commands from reader
|
||||||
// Stop when button is pressed (return 1) or field was gone (return 2)
|
// Stop when button is pressed (return 1) or field was gone (return 2)
|
||||||
|
@ -1598,7 +1552,8 @@ void ReaderTransmitShort(const uint8_t* bt)
|
||||||
int wait = 0;
|
int wait = 0;
|
||||||
int samples = 0;
|
int samples = 0;
|
||||||
|
|
||||||
ShortFrameFromReader(*bt);
|
// ShortFrameFromReader(*bt);
|
||||||
|
CodeIso14443aBitsAsReaderPar(bt,7,0);
|
||||||
|
|
||||||
// Select the card
|
// Select the card
|
||||||
TransmitFor14443a(ToSend, ToSendMax, &samples, &wait);
|
TransmitFor14443a(ToSend, ToSendMax, &samples, &wait);
|
||||||
|
|
|
@ -12,6 +12,10 @@
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
|
|
||||||
|
size_t nbytes(size_t nbits) {
|
||||||
|
return (nbits/8)+((nbits%8)>0);
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t SwapBits(uint32_t value, int nrbits) {
|
uint32_t SwapBits(uint32_t value, int nrbits) {
|
||||||
int i;
|
int i;
|
||||||
uint32_t newvalue = 0;
|
uint32_t newvalue = 0;
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#define BUTTON_DOUBLE_CLICK -2
|
#define BUTTON_DOUBLE_CLICK -2
|
||||||
#define BUTTON_ERROR -99
|
#define BUTTON_ERROR -99
|
||||||
|
|
||||||
|
size_t nbytes(size_t nbits);
|
||||||
uint32_t SwapBits(uint32_t value, int nrbits);
|
uint32_t SwapBits(uint32_t value, int nrbits);
|
||||||
void num_to_bytes(uint64_t n, size_t len, uint8_t* dest);
|
void num_to_bytes(uint64_t n, size_t len, uint8_t* dest);
|
||||||
uint64_t bytes_to_num(uint8_t* src, size_t len);
|
uint64_t bytes_to_num(uint8_t* src, size_t len);
|
||||||
|
|
Loading…
Reference in a new issue