From 0f7f9edc140b0b9fd3d9d2dd78015fe0acae6c2a Mon Sep 17 00:00:00 2001 From: "roel@libnfc.org" Date: Tue, 6 Sep 2011 10:28:22 +0000 Subject: [PATCH] fixed iso14443b snoop, plus compiling issue of redefined parameter, please take care about this next time before a commit --- armsrc/apps.h | 2 +- armsrc/iso14443.c | 33 +++++++++++++-------------------- client/cmdhfmf.c | 6 +++--- 3 files changed, 17 insertions(+), 24 deletions(-) diff --git a/armsrc/apps.h b/armsrc/apps.h index c458595e..1f0dd558 100644 --- a/armsrc/apps.h +++ b/armsrc/apps.h @@ -101,7 +101,7 @@ void AcquireRawAdcSamplesIso14443(uint32_t parameter); void ReadSRI512Iso14443(uint32_t parameter); void ReadSRIX4KIso14443(uint32_t parameter); void ReadSTMemoryIso14443(uint32_t parameter,uint32_t dwLast); -void SnoopIso14443(void); +void RAMFUNC SnoopIso14443(void); /// iso14443a.h void RAMFUNC SnoopIso14443a(void); diff --git a/armsrc/iso14443.c b/armsrc/iso14443.c index 1f722a6d..b8104d87 100644 --- a/armsrc/iso14443.c +++ b/armsrc/iso14443.c @@ -465,7 +465,7 @@ static struct { * 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; @@ -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 * 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; // a good trigger condition to get started is probably when we see a // response from the tag. - int triggered = FALSE; + int triggered = TRUE; // The command (reader -> tag) that we're working on receiving. 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(" 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 // Signal field is off with the appropriate LED @@ -1096,18 +1093,11 @@ void SnoopIso14443(void) upTo = dmaBuf; lastRxCounter = DMA_BUFFER_SIZE; FpgaSetupSscDma((uint8_t *)dmaBuf, DMA_BUFFER_SIZE); + + LED_A_ON(); + // And now we loop, receiving samples. 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) & (DMA_BUFFER_SIZE-1); if(behindBy > maxBehindBy) { @@ -1134,7 +1124,6 @@ void SnoopIso14443(void) #define HANDLE_BIT_IF_BODY \ if(triggered) { \ - ledFlashAt=30000; \ trace[traceLen++] = ((samples >> 0) & 0xff); \ trace[traceLen++] = ((samples >> 8) & 0xff); \ trace[traceLen++] = ((samples >> 16) & 0xff); \ @@ -1190,6 +1179,8 @@ void SnoopIso14443(void) } triggered = TRUE; + LED_A_OFF(); + LED_B_ON(); // And ready to receive another response. memset(&Demod, 0, sizeof(Demod)); @@ -1205,10 +1196,12 @@ void SnoopIso14443(void) } done: - LED_D_OFF(); - AT91C_BASE_PDC_SSC->PDC_PTCR = AT91C_PDC_RXTDIS; + LED_A_OFF(); + LED_B_OFF(); + LED_C_OFF(); + AT91C_BASE_PDC_SSC->PDC_PTCR = AT91C_PDC_RXTDIS; DbpString("Snoop statistics:"); - Dbprintf(" Max behind by: %i", maxBehindBy); + Dbprintf(" Max behind by: %i", maxBehindBy); Dbprintf(" Uart State: %x", Uart.state); Dbprintf(" Uart ByteCnt: %i", Uart.byteCnt); Dbprintf(" Uart ByteCntMax: %i", Uart.byteCntMax); diff --git a/client/cmdhfmf.c b/client/cmdhfmf.c index 051f414b..0c61542b 100644 --- a/client/cmdhfmf.c +++ b/client/cmdhfmf.c @@ -403,7 +403,7 @@ int CmdHF14AMfRestore1k(const char *Cmd) FILE *fdump; FILE *fkeys; - char c; + char ch; if ((fdump = fopen("dumpdata.bin","rb")) == NULL) { 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)); - scanf("%c",&c); - if ((c != 'y') || (c != 'Y')){ + scanf("%c",&ch); + if ((ch != 'y') || (ch != 'Y')){ PrintAndLog("Aborting !"); return 1; } -- 2.39.2