fixed iso14443b snoop, plus compiling issue of redefined parameter, please take care about this next time before a commit

This commit is contained in:
roel@libnfc.org 2011-09-06 10:28:22 +00:00
commit 0f7f9edc14
3 changed files with 17 additions and 24 deletions

View file

@ -101,7 +101,7 @@ void AcquireRawAdcSamplesIso14443(uint32_t parameter);
void ReadSRI512Iso14443(uint32_t parameter); void ReadSRI512Iso14443(uint32_t parameter);
void ReadSRIX4KIso14443(uint32_t parameter); void ReadSRIX4KIso14443(uint32_t parameter);
void ReadSTMemoryIso14443(uint32_t parameter,uint32_t dwLast); void ReadSTMemoryIso14443(uint32_t parameter,uint32_t dwLast);
void SnoopIso14443(void); void RAMFUNC SnoopIso14443(void);
/// iso14443a.h /// iso14443a.h
void RAMFUNC SnoopIso14443a(void); void RAMFUNC SnoopIso14443a(void);

View file

@ -465,7 +465,7 @@ static struct {
* false if we are still waiting for some more * false if we are still waiting for some more
* *
*/ */
static int Handle14443SamplesDemod(int ci, int cq) static RAMFUNC int Handle14443SamplesDemod(int ci, int cq)
{ {
int v; int v;
@ -1030,12 +1030,12 @@ void ReadSTMemoryIso14443(uint32_t parameter,uint32_t dwLast)
* 6144-8191 : Last Received command, 2048 bytes(tag->reader) - TAG_READER_BUFFER_SIZE * 6144-8191 : Last Received command, 2048 bytes(tag->reader) - TAG_READER_BUFFER_SIZE
* 8192-9215 : DMA Buffer, 1024 bytes (samples) - DMA_BUFFER_SIZE * 8192-9215 : DMA Buffer, 1024 bytes (samples) - DMA_BUFFER_SIZE
*/ */
void SnoopIso14443(void) void RAMFUNC SnoopIso14443(void)
{ {
// We won't start recording the frames that we acquire until we trigger; // We won't start recording the frames that we acquire until we trigger;
// a good trigger condition to get started is probably when we see a // a good trigger condition to get started is probably when we see a
// response from the tag. // response from the tag.
int triggered = FALSE; int triggered = TRUE;
// The command (reader -> tag) that we're working on receiving. // The command (reader -> tag) that we're working on receiving.
uint8_t *receivedCmd = (uint8_t *)(BigBuf) + DEMOD_TRACE_SIZE; uint8_t *receivedCmd = (uint8_t *)(BigBuf) + DEMOD_TRACE_SIZE;
@ -1079,9 +1079,6 @@ void SnoopIso14443(void)
Dbprintf(" tag -> Reader: %i bytes", TAG_READER_BUFFER_SIZE); Dbprintf(" tag -> Reader: %i bytes", TAG_READER_BUFFER_SIZE);
Dbprintf(" DMA: %i bytes", DMA_BUFFER_SIZE); Dbprintf(" DMA: %i bytes", DMA_BUFFER_SIZE);
// Use a counter for blinking the LED
long ledCount=0;
long ledFlashAt=200000;
// And put the FPGA in the appropriate mode // And put the FPGA in the appropriate mode
// Signal field is off with the appropriate LED // Signal field is off with the appropriate LED
@ -1096,18 +1093,11 @@ void SnoopIso14443(void)
upTo = dmaBuf; upTo = dmaBuf;
lastRxCounter = DMA_BUFFER_SIZE; lastRxCounter = DMA_BUFFER_SIZE;
FpgaSetupSscDma((uint8_t *)dmaBuf, DMA_BUFFER_SIZE); FpgaSetupSscDma((uint8_t *)dmaBuf, DMA_BUFFER_SIZE);
LED_A_ON();
// And now we loop, receiving samples. // And now we loop, receiving samples.
for(;;) { for(;;) {
// Blink the LED while Snooping
ledCount++;
if (ledCount == ledFlashAt) {
LED_D_ON();
}
if (ledCount >= 2*ledFlashAt) {
LED_D_OFF();
ledCount=0;
}
int behindBy = (lastRxCounter - AT91C_BASE_PDC_SSC->PDC_RCR) & int behindBy = (lastRxCounter - AT91C_BASE_PDC_SSC->PDC_RCR) &
(DMA_BUFFER_SIZE-1); (DMA_BUFFER_SIZE-1);
if(behindBy > maxBehindBy) { if(behindBy > maxBehindBy) {
@ -1134,7 +1124,6 @@ void SnoopIso14443(void)
#define HANDLE_BIT_IF_BODY \ #define HANDLE_BIT_IF_BODY \
if(triggered) { \ if(triggered) { \
ledFlashAt=30000; \
trace[traceLen++] = ((samples >> 0) & 0xff); \ trace[traceLen++] = ((samples >> 0) & 0xff); \
trace[traceLen++] = ((samples >> 8) & 0xff); \ trace[traceLen++] = ((samples >> 8) & 0xff); \
trace[traceLen++] = ((samples >> 16) & 0xff); \ trace[traceLen++] = ((samples >> 16) & 0xff); \
@ -1190,6 +1179,8 @@ void SnoopIso14443(void)
} }
triggered = TRUE; triggered = TRUE;
LED_A_OFF();
LED_B_ON();
// And ready to receive another response. // And ready to receive another response.
memset(&Demod, 0, sizeof(Demod)); memset(&Demod, 0, sizeof(Demod));
@ -1205,10 +1196,12 @@ void SnoopIso14443(void)
} }
done: done:
LED_D_OFF(); LED_A_OFF();
AT91C_BASE_PDC_SSC->PDC_PTCR = AT91C_PDC_RXTDIS; LED_B_OFF();
LED_C_OFF();
AT91C_BASE_PDC_SSC->PDC_PTCR = AT91C_PDC_RXTDIS;
DbpString("Snoop statistics:"); DbpString("Snoop statistics:");
Dbprintf(" Max behind by: %i", maxBehindBy); Dbprintf(" Max behind by: %i", maxBehindBy);
Dbprintf(" Uart State: %x", Uart.state); Dbprintf(" Uart State: %x", Uart.state);
Dbprintf(" Uart ByteCnt: %i", Uart.byteCnt); Dbprintf(" Uart ByteCnt: %i", Uart.byteCnt);
Dbprintf(" Uart ByteCntMax: %i", Uart.byteCntMax); Dbprintf(" Uart ByteCntMax: %i", Uart.byteCntMax);

View file

@ -403,7 +403,7 @@ int CmdHF14AMfRestore1k(const char *Cmd)
FILE *fdump; FILE *fdump;
FILE *fkeys; FILE *fkeys;
char c; char ch;
if ((fdump = fopen("dumpdata.bin","rb")) == NULL) { if ((fdump = fopen("dumpdata.bin","rb")) == NULL) {
PrintAndLog("Could not find file dump.bin"); PrintAndLog("Could not find file dump.bin");
@ -447,8 +447,8 @@ int CmdHF14AMfRestore1k(const char *Cmd)
PrintAndLog("Writing to block %2d: %s Confirm? [Y,N]", i*4+j, sprint_hex(bldata, 16)); PrintAndLog("Writing to block %2d: %s Confirm? [Y,N]", i*4+j, sprint_hex(bldata, 16));
scanf("%c",&c); scanf("%c",&ch);
if ((c != 'y') || (c != 'Y')){ if ((ch != 'y') || (ch != 'Y')){
PrintAndLog("Aborting !"); PrintAndLog("Aborting !");
return 1; return 1;
} }