]> cvs.zerfleddert.de Git - proxmark3-svn/blobdiff - armsrc/iso15693.c
alphabet ;)
[proxmark3-svn] / armsrc / iso15693.c
index 2592cbfe6c2416359ccbd7e85893eecc615cc5aa..4c9a7d607f28c2ca2d8bb6a254d0c21ae2eb5796 100644 (file)
 // to the FPGA, to transmit that command to the tag.\r
 //-----------------------------------------------------------------------------\r
 \r
-       \r
-\r
-\r
        // The sampling rate is 106.353 ksps/s, for T = 18.8 us\r
 \r
-       // SOF defined as \r
+       // SOF defined as\r
        // 1) Unmodulated time of 56.64us\r
        // 2) 24 pulses of 423.75khz\r
        // 3) logic '1' (unmodulated for 18.88us followed by 8 pulses of 423.75khz)\r
@@ -54,7 +51,7 @@
                 1,  1,  1,  1\r
        };\r
 \r
-       // EOF defined as \r
+       // EOF defined as\r
        // 1) logic '0' (8 pulses of 423.75khz followed by unmodulated for 18.88us)\r
        // 2) 24 pulses of 423.75khz\r
        // 3) Unmodulated time of 56.64us\r
@@ -70,9 +67,6 @@
                -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1\r
        };\r
 \r
-\r
-\r
-\r
 static void CodeIso15693AsReader(BYTE *cmd, int n)\r
 {\r
        int i, j;\r
@@ -173,9 +167,19 @@ static WORD Crc(BYTE *v, int n)
        return ~reg;\r
 }\r
 \r
-////////////////////////////////////////// code to do 'itoa'\r
+char *strcat(char *dest, const char *src)\r
+{\r
+       size_t dest_len = strlen(dest);\r
+       size_t i;\r
\r
+       for (i = 0 ; src[i] != '\0' ; i++)\r
+               dest[dest_len + i] = src[i];\r
+       dest[dest_len + i] = '\0';\r
  \r
+       return dest;\r
+}\r
 \r
+////////////////////////////////////////// code to do 'itoa'\r
 \r
 /* reverse:  reverse string s in place */\r
 void reverse(char s[])\r
@@ -204,11 +208,10 @@ void itoa(int n, char s[])
         s[i++] = '-';\r
     s[i] = '\0';\r
     reverse(s);\r
-} \r
+}\r
 \r
 //////////////////////////////////////// END 'itoa' CODE\r
 \r
-\r
 //-----------------------------------------------------------------------------\r
 // Encode (into the ToSend buffers) an identify request, which is the first\r
 // thing that you must send to a tag to get a response.\r
@@ -220,7 +223,7 @@ static void BuildIdentifyRequest(void)
        WORD crc;\r
        // one sub-carrier, inventory, 1 slot, fast rate\r
        // AFI is at bit 5 (1<<4) when doing an INVENTORY\r
-       cmd[0] = (1 << 2) | (1 << 5) | (1 << 1); \r
+       cmd[0] = (1 << 2) | (1 << 5) | (1 << 1);\r
        // inventory command code\r
        cmd[1] = 0x01;\r
        // no mask\r
@@ -233,7 +236,7 @@ static void BuildIdentifyRequest(void)
        CodeIso15693AsReader(cmd, sizeof(cmd));\r
 }\r
 \r
-static void BuildSysInfoRequest(BYTE *uid)\r
+static void __attribute__((unused)) BuildSysInfoRequest(BYTE *uid)\r
 {\r
        BYTE cmd[12];\r
 \r
@@ -252,10 +255,10 @@ static void BuildSysInfoRequest(BYTE *uid)
        cmd[5] = 0x01;\r
        cmd[6] = 0x00;\r
        cmd[7] = 0x10;\r
-       cmd[8] = 0x05; \r
-       cmd[9]= 0xe0; // always e0 (not exactly unique)         \r
+       cmd[8] = 0x05;\r
+       cmd[9]= 0xe0; // always e0 (not exactly unique)\r
        //Now the CRC\r
-       crc = Crc(cmd, 10); // the crc needs to be calculated over 2 bytes \r
+       crc = Crc(cmd, 10); // the crc needs to be calculated over 2 bytes\r
        cmd[10] = crc & 0xff;\r
        cmd[11] = crc >> 8;\r
 \r
@@ -264,7 +267,7 @@ static void BuildSysInfoRequest(BYTE *uid)
 \r
 static void BuildSelectRequest( BYTE uid[])\r
 {\r
-       \r
+\r
 //     uid[6]=0x31;  // this is getting ignored - the uid array is not happening...\r
        BYTE cmd[12];\r
 \r
@@ -281,27 +284,27 @@ static void BuildSelectRequest( BYTE uid[])
 //     cmd[5] = uid[3];//0x01;\r
 //     cmd[6] = uid[4];//0x00;\r
 //     cmd[7] = uid[5];//0x10;\r
-//     cmd[8] = uid[6];//0x05; \r
+//     cmd[8] = uid[6];//0x05;\r
        cmd[2] = 0x32;//\r
-       cmd[3]= 0x4b;\r
+       cmd[3] = 0x4b;\r
        cmd[4] = 0x03;\r
        cmd[5] = 0x01;\r
        cmd[6] = 0x00;\r
        cmd[7] = 0x10;\r
        cmd[8] = 0x05; // infineon?\r
 \r
-       cmd[9]= 0xe0; // always e0 (not exactly unique) \r
+       cmd[9]= 0xe0; // always e0 (not exactly unique)\r
 \r
 //     DbpIntegers(cmd[8],cmd[7],cmd[6]);\r
        // Now the CRC\r
-       crc = Crc(cmd, 10); // the crc needs to be calculated over 10 bytes \r
+       crc = Crc(cmd, 10); // the crc needs to be calculated over 10 bytes\r
        cmd[10] = crc & 0xff;\r
        cmd[11] = crc >> 8;\r
 \r
        CodeIso15693AsReader(cmd, sizeof(cmd));\r
 }\r
 \r
-static void BuildReadBlockRequest(BYTE *uid, BYTE blockNumber )\r
+static void __attribute__((unused)) BuildReadBlockRequest(BYTE *uid, BYTE blockNumber )\r
 {\r
        BYTE cmd[13];\r
 \r
@@ -320,20 +323,19 @@ static void BuildReadBlockRequest(BYTE *uid, BYTE blockNumber )
        cmd[5] = 0x01;\r
        cmd[6] = 0x00;\r
        cmd[7] = 0x10;\r
-       cmd[8] = 0x05; \r
-       cmd[9]= 0xe0; // always e0 (not exactly unique)         \r
+       cmd[8] = 0x05;\r
+       cmd[9]= 0xe0; // always e0 (not exactly unique)\r
        // Block number to read\r
        cmd[10] = blockNumber;//0x00;\r
        //Now the CRC\r
-       crc = Crc(cmd, 11); // the crc needs to be calculated over 2 bytes \r
+       crc = Crc(cmd, 11); // the crc needs to be calculated over 2 bytes\r
        cmd[11] = crc & 0xff;\r
        cmd[12] = crc >> 8;\r
 \r
        CodeIso15693AsReader(cmd, sizeof(cmd));\r
 }\r
 \r
-\r
-static void BuildReadMultiBlockRequest(BYTE *uid)\r
+static void __attribute__((unused)) BuildReadMultiBlockRequest(BYTE *uid)\r
 {\r
        BYTE cmd[14];\r
 \r
@@ -352,21 +354,21 @@ static void BuildReadMultiBlockRequest(BYTE *uid)
        cmd[5] = 0x01;\r
        cmd[6] = 0x00;\r
        cmd[7] = 0x10;\r
-       cmd[8] = 0x05; \r
-       cmd[9]= 0xe0; // always e0 (not exactly unique)         \r
+       cmd[8] = 0x05;\r
+       cmd[9]= 0xe0; // always e0 (not exactly unique)\r
        // First Block number to read\r
        cmd[10] = 0x00;\r
        // Number of Blocks to read\r
        cmd[11] = 0x2f; // read quite a few\r
        //Now the CRC\r
-       crc = Crc(cmd, 12); // the crc needs to be calculated over 2 bytes \r
+       crc = Crc(cmd, 12); // the crc needs to be calculated over 2 bytes\r
        cmd[12] = crc & 0xff;\r
        cmd[13] = crc >> 8;\r
 \r
        CodeIso15693AsReader(cmd, sizeof(cmd));\r
 }\r
 \r
-static void BuildArbitraryRequest(BYTE *uid,BYTE CmdCode)\r
+static void __attribute__((unused)) BuildArbitraryRequest(BYTE *uid,BYTE CmdCode)\r
 {\r
        BYTE cmd[14];\r
 \r
@@ -385,22 +387,22 @@ static void BuildArbitraryRequest(BYTE *uid,BYTE CmdCode)
        cmd[5] = 0x01;\r
        cmd[6] = 0x00;\r
        cmd[7] = 0x10;\r
-       cmd[8] = 0x05; \r
-       cmd[9]= 0xe0; // always e0 (not exactly unique)         \r
+       cmd[8] = 0x05;\r
+       cmd[9]= 0xe0; // always e0 (not exactly unique)\r
        // Parameter\r
        cmd[10] = 0x00;\r
        cmd[11] = 0x0a;\r
 \r
 //     cmd[12] = 0x00;\r
 //     cmd[13] = 0x00; //Now the CRC\r
-       crc = Crc(cmd, 12); // the crc needs to be calculated over 2 bytes \r
+       crc = Crc(cmd, 12); // the crc needs to be calculated over 2 bytes\r
        cmd[12] = crc & 0xff;\r
        cmd[13] = crc >> 8;\r
 \r
        CodeIso15693AsReader(cmd, sizeof(cmd));\r
 }\r
 \r
-static void BuildArbitraryCustomRequest(BYTE *uid,BYTE CmdCode)\r
+static void __attribute__((unused)) BuildArbitraryCustomRequest(BYTE uid[], BYTE CmdCode)\r
 {\r
        BYTE cmd[14];\r
 \r
@@ -419,15 +421,15 @@ static void BuildArbitraryCustomRequest(BYTE *uid,BYTE CmdCode)
        cmd[5] = 0x01;\r
        cmd[6] = 0x00;\r
        cmd[7] = 0x10;\r
-       cmd[8] = 0x05; \r
-       cmd[9]= 0xe0; // always e0 (not exactly unique)         \r
+       cmd[8] = 0x05;\r
+       cmd[9]= 0xe0; // always e0 (not exactly unique)\r
        // Parameter\r
        cmd[10] = 0x05; // for custom codes this must be manufcturer code\r
        cmd[11] = 0x00;\r
 \r
 //     cmd[12] = 0x00;\r
 //     cmd[13] = 0x00; //Now the CRC\r
-       crc = Crc(cmd, 12); // the crc needs to be calculated over 2 bytes \r
+       crc = Crc(cmd, 12); // the crc needs to be calculated over 2 bytes\r
        cmd[12] = crc & 0xff;\r
        cmd[13] = crc >> 8;\r
 \r
@@ -445,7 +447,7 @@ static void BuildArbitraryCustomRequest(BYTE *uid,BYTE CmdCode)
        WORD crc;\r
        // one sub-carrier, inventory, 1 slot, fast rate\r
        // AFI is at bit 5 (1<<4) when doing an INVENTORY\r
-       cmd[0] = 0; //(1 << 2) | (1 << 5) | (1 << 1); \r
+       cmd[0] = 0; //(1 << 2) | (1 << 5) | (1 << 1);\r
        cmd[1] = 0;\r
        // 64-bit UID\r
        cmd[2] = 0x32;\r
@@ -454,7 +456,7 @@ static void BuildArbitraryCustomRequest(BYTE *uid,BYTE CmdCode)
        cmd[5] = 0x01;\r
        cmd[6] = 0x00;\r
        cmd[7] = 0x10;\r
-       cmd[8] = 0x05; \r
+       cmd[8] = 0x05;\r
        cmd[9]= 0xe0;\r
        //Now the CRC\r
        crc = Crc(cmd, 10);\r
@@ -464,7 +466,6 @@ static void BuildArbitraryCustomRequest(BYTE *uid,BYTE CmdCode)
        CodeIso15693AsReader(cmd, sizeof(cmd));\r
 }\r
 \r
-\r
 //-----------------------------------------------------------------------------\r
 // Transmit the command (to the tag) that was placed in ToSend[].\r
 //-----------------------------------------------------------------------------\r
@@ -477,12 +478,12 @@ static void TransmitTo15693Tag(const BYTE *cmd, int len, int *samples, int *wait
        if(*wait < 10) { *wait = 10; }\r
 \r
 //    for(c = 0; c < *wait;) {\r
-//        if(SSC_STATUS & (SSC_STATUS_TX_READY)) {\r
-//            SSC_TRANSMIT_HOLDING = 0x00;             // For exact timing!\r
+//        if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) {\r
+//            AT91C_BASE_SSC->SSC_THR = 0x00;          // For exact timing!\r
 //            c++;\r
 //        }\r
-//        if(SSC_STATUS & (SSC_STATUS_RX_READY)) {\r
-//            volatile DWORD r = SSC_RECEIVE_HOLDING;\r
+//        if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) {\r
+//            volatile DWORD r = AT91C_BASE_SSC->SSC_RHR;\r
 //            (void)r;\r
 //        }\r
 //        WDT_HIT();\r
@@ -490,15 +491,15 @@ static void TransmitTo15693Tag(const BYTE *cmd, int len, int *samples, int *wait
 \r
     c = 0;\r
     for(;;) {\r
-        if(SSC_STATUS & (SSC_STATUS_TX_READY)) {\r
-            SSC_TRANSMIT_HOLDING = cmd[c];\r
+        if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) {\r
+            AT91C_BASE_SSC->SSC_THR = cmd[c];\r
             c++;\r
             if(c >= len) {\r
                 break;\r
             }\r
         }\r
-        if(SSC_STATUS & (SSC_STATUS_RX_READY)) {\r
-            volatile DWORD r = SSC_RECEIVE_HOLDING;\r
+        if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) {\r
+            volatile DWORD r = AT91C_BASE_SSC->SSC_RHR;\r
             (void)r;\r
         }\r
         WDT_HIT();\r
@@ -506,7 +507,6 @@ static void TransmitTo15693Tag(const BYTE *cmd, int len, int *samples, int *wait
        *samples = (c + *wait) << 3;\r
 }\r
 \r
-\r
 //-----------------------------------------------------------------------------\r
 // Transmit the command (to the reader) that was placed in ToSend[].\r
 //-----------------------------------------------------------------------------\r
@@ -520,15 +520,15 @@ static void TransmitTo15693Reader(const BYTE *cmd, int len, int *samples, int *w
 \r
     c = 0;\r
     for(;;) {\r
-        if(SSC_STATUS & (SSC_STATUS_TX_READY)) {\r
-            SSC_TRANSMIT_HOLDING = cmd[c];\r
+        if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) {\r
+            AT91C_BASE_SSC->SSC_THR = cmd[c];\r
             c++;\r
             if(c >= len) {\r
                 break;\r
             }\r
         }\r
-        if(SSC_STATUS & (SSC_STATUS_RX_READY)) {\r
-            volatile DWORD r = SSC_RECEIVE_HOLDING;\r
+        if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) {\r
+            volatile DWORD r = AT91C_BASE_SSC->SSC_RHR;\r
             (void)r;\r
         }\r
         WDT_HIT();\r
@@ -536,18 +536,12 @@ static void TransmitTo15693Reader(const BYTE *cmd, int len, int *samples, int *w
        *samples = (c + *wait) << 3;\r
 }\r
 \r
-\r
-\r
-\r
-\r
-\r
-static int GetIso15693AnswerFromTag(BYTE *receivedResponse, int maxLen, int *samples, int *elapsed) \r
+static int GetIso15693AnswerFromTag(BYTE *receivedResponse, int maxLen, int *samples, int *elapsed)\r
 {\r
        int c = 0;\r
        BYTE *dest = (BYTE *)BigBuf;\r
        int getNext = 0;\r
 \r
-\r
        SBYTE prev = 0;\r
 \r
 // NOW READ RESPONSE\r
@@ -556,12 +550,12 @@ static int GetIso15693AnswerFromTag(BYTE *receivedResponse, int maxLen, int *sam
        c = 0;\r
        getNext = FALSE;\r
        for(;;) {\r
-               if(SSC_STATUS & (SSC_STATUS_TX_READY)) {\r
-                       SSC_TRANSMIT_HOLDING = 0x43;\r
+               if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) {\r
+                       AT91C_BASE_SSC->SSC_THR = 0x43;\r
                }\r
-               if(SSC_STATUS & (SSC_STATUS_RX_READY)) {\r
+               if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) {\r
                        SBYTE b;\r
-                       b = (SBYTE)SSC_RECEIVE_HOLDING;\r
+                       b = (SBYTE)AT91C_BASE_SSC->SSC_RHR;\r
 \r
                        // The samples are correlations against I and Q versions of the\r
                        // tone that the tag AM-modulates, so every other sample is I,\r
@@ -599,11 +593,10 @@ static int GetIso15693AnswerFromTag(BYTE *receivedResponse, int maxLen, int *sam
 //////////////////////////////////////////\r
 \r
        int i, j;\r
-       int max = 0, maxPos;\r
+       int max = 0, maxPos=0;\r
 \r
        int skip = 4;\r
 \r
-\r
 //     if(GraphTraceLen < 1000) return;        // THIS CHECKS FOR A BUFFER TO SMALL\r
 \r
        // First, correlate for SOF\r
@@ -622,11 +615,11 @@ static int GetIso15693AnswerFromTag(BYTE *receivedResponse, int maxLen, int *sam
        int k = 0; // this will be our return value\r
 \r
        // greg - If correlation is less than 1 then there's little point in continuing\r
-       if ((max/(arraylen(FrameSOF)/skip)) >= 1) \r
+       if ((max/(arraylen(FrameSOF)/skip)) >= 1)\r
        {\r
 \r
        i = maxPos + arraylen(FrameSOF)/skip;\r
-       \r
+\r
        BYTE outBuf[20];\r
        memset(outBuf, 0, sizeof(outBuf));\r
        BYTE mask = 0x01;\r
@@ -681,23 +674,21 @@ static int GetIso15693AnswerFromTag(BYTE *receivedResponse, int maxLen, int *sam
 \r
        for(i = 0; i < k; i++) {\r
                receivedResponse[i] = outBuf[i];\r
-       }       \r
+       }\r
        } // "end if correlation > 0"   (max/(arraylen(FrameSOF)/skip))\r
        return k; // return the number of bytes demodulated\r
 \r
 ///    DbpString("CRC=%04x", Iso15693Crc(outBuf, k-2));\r
 \r
-\r
 }\r
 \r
 // Now the GetISO15693 message from sniffing command\r
-static int GetIso15693AnswerFromSniff(BYTE *receivedResponse, int maxLen, int *samples, int *elapsed) \r
+static int GetIso15693AnswerFromSniff(BYTE *receivedResponse, int maxLen, int *samples, int *elapsed)\r
 {\r
        int c = 0;\r
        BYTE *dest = (BYTE *)BigBuf;\r
        int getNext = 0;\r
 \r
-\r
        SBYTE prev = 0;\r
 \r
 // NOW READ RESPONSE\r
@@ -706,12 +697,12 @@ static int GetIso15693AnswerFromSniff(BYTE *receivedResponse, int maxLen, int *s
        c = 0;\r
        getNext = FALSE;\r
        for(;;) {\r
-               if(SSC_STATUS & (SSC_STATUS_TX_READY)) {\r
-                       SSC_TRANSMIT_HOLDING = 0x43;\r
+               if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) {\r
+                       AT91C_BASE_SSC->SSC_THR = 0x43;\r
                }\r
-               if(SSC_STATUS & (SSC_STATUS_RX_READY)) {\r
+               if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) {\r
                        SBYTE b;\r
-                       b = (SBYTE)SSC_RECEIVE_HOLDING;\r
+                       b = (SBYTE)AT91C_BASE_SSC->SSC_RHR;\r
 \r
                        // The samples are correlations against I and Q versions of the\r
                        // tone that the tag AM-modulates, so every other sample is I,\r
@@ -749,11 +740,10 @@ static int GetIso15693AnswerFromSniff(BYTE *receivedResponse, int maxLen, int *s
 //////////////////////////////////////////\r
 \r
        int i, j;\r
-       int max = 0, maxPos;\r
+       int max = 0, maxPos=0;\r
 \r
        int skip = 4;\r
 \r
-\r
 //     if(GraphTraceLen < 1000) return;        // THIS CHECKS FOR A BUFFER TO SMALL\r
 \r
        // First, correlate for SOF\r
@@ -772,11 +762,11 @@ static int GetIso15693AnswerFromSniff(BYTE *receivedResponse, int maxLen, int *s
        int k = 0; // this will be our return value\r
 \r
        // greg - If correlation is less than 1 then there's little point in continuing\r
-       if ((max/(arraylen(FrameSOF)/skip)) >= 1)       // THIS SHOULD BE 1 \r
+       if ((max/(arraylen(FrameSOF)/skip)) >= 1)       // THIS SHOULD BE 1\r
        {\r
 \r
        i = maxPos + arraylen(FrameSOF)/skip;\r
-       \r
+\r
        BYTE outBuf[20];\r
        memset(outBuf, 0, sizeof(outBuf));\r
        BYTE mask = 0x01;\r
@@ -831,17 +821,13 @@ static int GetIso15693AnswerFromSniff(BYTE *receivedResponse, int maxLen, int *s
 \r
        for(i = 0; i < k; i++) {\r
                receivedResponse[i] = outBuf[i];\r
-       }       \r
+       }\r
        } // "end if correlation > 0"   (max/(arraylen(FrameSOF)/skip))\r
        return k; // return the number of bytes demodulated\r
 \r
 ///    DbpString("CRC=%04x", Iso15693Crc(outBuf, k-2));\r
-\r
-\r
 }\r
 \r
-\r
-\r
 //-----------------------------------------------------------------------------\r
 // Start to read an ISO 15693 tag. We send an identify request, then wait\r
 // for the response. The response is not demodulated, just left in the buffer\r
@@ -869,15 +855,15 @@ void AcquireRawAdcSamplesIso15693(void)
 \r
        c = 0;\r
        for(;;) {\r
-               if(SSC_STATUS & (SSC_STATUS_TX_READY)) {\r
-                       SSC_TRANSMIT_HOLDING = ToSend[c];\r
+               if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) {\r
+                       AT91C_BASE_SSC->SSC_THR = ToSend[c];\r
                        c++;\r
                        if(c == ToSendMax+3) {\r
                                break;\r
                        }\r
                }\r
-               if(SSC_STATUS & (SSC_STATUS_RX_READY)) {\r
-                       volatile DWORD r = SSC_RECEIVE_HOLDING;\r
+               if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) {\r
+                       volatile DWORD r = AT91C_BASE_SSC->SSC_RHR;\r
                        (void)r;\r
                }\r
                WDT_HIT();\r
@@ -888,12 +874,12 @@ void AcquireRawAdcSamplesIso15693(void)
        c = 0;\r
        getNext = FALSE;\r
        for(;;) {\r
-               if(SSC_STATUS & (SSC_STATUS_TX_READY)) {\r
-                       SSC_TRANSMIT_HOLDING = 0x43;\r
+               if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_TXRDY)) {\r
+                       AT91C_BASE_SSC->SSC_THR = 0x43;\r
                }\r
-               if(SSC_STATUS & (SSC_STATUS_RX_READY)) {\r
+               if(AT91C_BASE_SSC->SSC_SR & (AT91C_SSC_RXRDY)) {\r
                        SBYTE b;\r
-                       b = (SBYTE)SSC_RECEIVE_HOLDING;\r
+                       b = (SBYTE)AT91C_BASE_SSC->SSC_RHR;\r
 \r
                        // The samples are correlations against I and Q versions of the\r
                        // tone that the tag AM-modulates, so every other sample is I,\r
@@ -927,8 +913,6 @@ void AcquireRawAdcSamplesIso15693(void)
        }\r
 }\r
 \r
-\r
-\r
 //-----------------------------------------------------------------------------\r
 // Simulate an ISO15693 reader, perform anti-collision and then attempt to read a sector\r
 // all demodulation performed in arm rather than host. - greg\r
@@ -940,27 +924,20 @@ void ReaderIso15693(DWORD parameter)
        LED_C_OFF();\r
        LED_D_OFF();\r
 \r
-\r
 //DbpString(parameter);\r
 \r
-       BYTE *receivedAnswer0 = (((BYTE *)BigBuf) + 3560); // allow 100 bytes per reponse (way too much)\r
-       BYTE *receivedAnswer1 = (((BYTE *)BigBuf) + 3660); // \r
-       BYTE *receivedAnswer2 = (((BYTE *)BigBuf) + 3760);\r
-       BYTE *receivedAnswer3 = (((BYTE *)BigBuf) + 3860);\r
-       //BYTE *TagUID= (((BYTE *)BigBuf) + 3960);              // where we hold the uid for hi15reader \r
-       int responseLen0 = 0;\r
-       int responseLen1 = 0;\r
-       int responseLen2 = 0;\r
-       int responseLen3 = 0;\r
+       //BYTE *answer0 = (((BYTE *)BigBuf) + 3560); // allow 100 bytes per reponse (way too much)\r
+       BYTE *answer1 = (((BYTE *)BigBuf) + 3660); //\r
+       BYTE *answer2 = (((BYTE *)BigBuf) + 3760);\r
+       BYTE *answer3 = (((BYTE *)BigBuf) + 3860);\r
+       //BYTE *TagUID= (((BYTE *)BigBuf) + 3960);              // where we hold the uid for hi15reader\r
+//     int answerLen0 = 0;\r
+       int answerLen1 = 0;\r
+       int answerLen2 = 0;\r
+       int answerLen3 = 0;\r
 \r
        // Blank arrays\r
-       int j;\r
-       for(j = 0; j < 100; j++) {\r
-               receivedAnswer3[j] = 0;\r
-               receivedAnswer2[j] =0;\r
-               receivedAnswer1[j] = 0;\r
-               receivedAnswer0[j] = 0;\r
-       }\r
+       memset(BigBuf + 3660, 0, 300);\r
 \r
        // Setup SSC\r
        FpgaSetupSsc();\r
@@ -988,14 +965,13 @@ void ReaderIso15693(DWORD parameter)
 \r
        // FIRST WE RUN AN INVENTORY TO GET THE TAG UID\r
        // THIS MEANS WE CAN PRE-BUILD REQUESTS TO SAVE CPU TIME\r
- BYTE TagUID[7];               // where we hold the uid for hi15reader \r
-\r
+ BYTE TagUID[7];               // where we hold the uid for hi15reader\r
 \r
 //     BuildIdentifyRequest();\r
-//     //TransmitTo15693Tag(ToSend,ToSendMax+3,&tsamples, &wait);      \r
+//     //TransmitTo15693Tag(ToSend,ToSendMax+3,&tsamples, &wait);\r
 //     TransmitTo15693Tag(ToSend,ToSendMax,&tsamples, &wait);  // No longer ToSendMax+3\r
 //     // Now wait for a response\r
-//     responseLen0 = GetIso15693AnswerFromTag(receivedAnswer0, 100, &samples, &elapsed) ;     \r
+//     responseLen0 = GetIso15693AnswerFromTag(receivedAnswer0, 100, &samples, &elapsed) ;\r
 //     if (responseLen0 >=12) // we should do a better check than this\r
 //     {\r
 //             // really we should check it is a valid mesg\r
@@ -1007,90 +983,74 @@ void ReaderIso15693(DWORD parameter)
 //             TagUID[4] = receivedAnswer0[6];\r
 //             TagUID[5] = receivedAnswer0[7];\r
 //             TagUID[6] = receivedAnswer0[8]; // IC Manufacturer code\r
-//     DbpIntegers(TagUID[6],TagUID[5],TagUID[4]);     \r
+//     DbpIntegers(TagUID[6],TagUID[5],TagUID[4]);\r
 //}\r
 \r
        // Now send the IDENTIFY command\r
        BuildIdentifyRequest();\r
-       //TransmitTo15693Tag(ToSend,ToSendMax+3,&tsamples, &wait);      \r
+       //TransmitTo15693Tag(ToSend,ToSendMax+3,&tsamples, &wait);\r
        TransmitTo15693Tag(ToSend,ToSendMax,&tsamples, &wait);  // No longer ToSendMax+3\r
        // Now wait for a response\r
-       responseLen1 = GetIso15693AnswerFromTag(receivedAnswer1, 100, &samples, &elapsed) ;\r
-       \r
-       if (responseLen1 >=12) // we should do a better check than this\r
+       answerLen1 = GetIso15693AnswerFromTag(answer1, 100, &samples, &elapsed) ;\r
+\r
+       if (answerLen1 >=12) // we should do a better check than this\r
        {\r
-               \r
-               TagUID[0] = receivedAnswer1[2];\r
-               TagUID[1] = receivedAnswer1[3];\r
-               TagUID[2] = receivedAnswer1[4];\r
-               TagUID[3] = receivedAnswer1[5];\r
-               TagUID[4] = receivedAnswer1[6];\r
-               TagUID[5] = receivedAnswer1[7];\r
-               TagUID[6] = receivedAnswer1[8]; // IC Manufacturer code\r
-               \r
+\r
+               TagUID[0] = answer1[2];\r
+               TagUID[1] = answer1[3];\r
+               TagUID[2] = answer1[4];\r
+               TagUID[3] = answer1[5];\r
+               TagUID[4] = answer1[6];\r
+               TagUID[5] = answer1[7];\r
+               TagUID[6] = answer1[8]; // IC Manufacturer code\r
+\r
                // Now send the SELECT command\r
-               BuildSelectRequest(*TagUID);\r
+               BuildSelectRequest(TagUID);\r
                TransmitTo15693Tag(ToSend,ToSendMax,&tsamples, &wait);  // No longer ToSendMax+3\r
                // Now wait for a response\r
-               responseLen2 = GetIso15693AnswerFromTag(receivedAnswer2, 100, &samples, &elapsed); \r
+               answerLen2 = GetIso15693AnswerFromTag(answer2, 100, &samples, &elapsed);\r
 \r
                // Now send the MULTI READ command\r
 //             BuildArbitraryRequest(*TagUID,parameter);\r
-               BuildArbitraryCustomRequest(*TagUID,parameter);\r
+               BuildArbitraryCustomRequest(TagUID,parameter);\r
 //             BuildReadBlockRequest(*TagUID,parameter);\r
 //             BuildSysInfoRequest(*TagUID);\r
-               //TransmitTo15693Tag(ToSend,ToSendMax+3,&tsamples, &wait);      \r
-               TransmitTo15693Tag(ToSend,ToSendMax,&tsamples, &wait);  // No longer ToSendMax+3        \r
+               //TransmitTo15693Tag(ToSend,ToSendMax+3,&tsamples, &wait);\r
+               TransmitTo15693Tag(ToSend,ToSendMax,&tsamples, &wait);  // No longer ToSendMax+3\r
                // Now wait for a response\r
-               responseLen3 = GetIso15693AnswerFromTag(receivedAnswer3, 100, &samples, &elapsed) ;\r
+               answerLen3 = GetIso15693AnswerFromTag(answer3, 100, &samples, &elapsed) ;\r
 \r
        }\r
 \r
+       Dbprintf("%d octets read from IDENTIFY request: %x %x %x %x %x %x %x %x %x", answerLen1,\r
+               answer1[0], answer1[1], answer1[2],\r
+               answer1[3], answer1[4], answer1[5],\r
+               answer1[6], answer1[7], answer1[8]);\r
 \r
+       Dbprintf("%d octets read from SELECT request: %x %x %x %x %x %x %x %x %x", answerLen2,\r
+               answer2[0], answer2[1], answer2[2],\r
+               answer2[3], answer2[4], answer2[5],\r
+               answer2[6], answer2[7], answer2[8]);\r
 \r
-       BYTE str1 [4];\r
-       //char str2 [200];\r
-       int i;\r
-\r
-       itoa(responseLen1,str1);\r
-       strcat(str1," octets read from IDENTIFY request");\r
-       DbpString(str1);\r
-       for(i = 0; i < responseLen1; i+=3) {\r
-               DbpIntegers(receivedAnswer1[i],receivedAnswer1[i+1],receivedAnswer1[i+2]);\r
-       }\r
-\r
-       itoa(responseLen2,str1);\r
-       strcat(str1," octets read from SELECT request");\r
-       DbpString(str1);\r
-       for(i = 0; i < responseLen2; i+=3) {\r
-               DbpIntegers(receivedAnswer2[i],receivedAnswer2[i+1],receivedAnswer2[i+2]);\r
-       }\r
+       Dbprintf("%d octets read from XXX request: %x %x %x %x %x %x %x %x %x", answerLen3,\r
+               answer3[0], answer3[1], answer3[2],\r
+               answer3[3], answer3[4], answer3[5],\r
+               answer3[6], answer3[7], answer3[8]);\r
 \r
-       itoa(responseLen3,str1);\r
-       strcat(str1," octets read from XXX request");\r
-       DbpString(str1);\r
-       for(i = 0; i < responseLen3; i+=3) {\r
-               DbpIntegers(receivedAnswer3[i],receivedAnswer3[i+1],receivedAnswer3[i+2]);\r
-       }\r
-       \r
 \r
 //     str2[0]=0;\r
 //     for(i = 0; i < responseLen3; i++) {\r
 //             itoa(str1,receivedAnswer3[i]);\r
 //             strcat(str2,str1);\r
 //     }\r
-//     DbpString(str2);        \r
+//     DbpString(str2);\r
 \r
        LED_A_OFF();\r
        LED_B_OFF();\r
        LED_C_OFF();\r
        LED_D_OFF();\r
-\r
-\r
 }\r
 \r
-\r
-\r
 //-----------------------------------------------------------------------------\r
 // Simulate an ISO15693 TAG, perform anti-collision and then print any reader commands\r
 // all demodulation performed in arm rather than host. - greg\r
@@ -1102,27 +1062,11 @@ void SimTagIso15693(DWORD parameter)
        LED_C_OFF();\r
        LED_D_OFF();\r
 \r
-\r
-//DbpString(parameter);\r
-\r
-       BYTE *receivedAnswer0 = (((BYTE *)BigBuf) + 3560); // allow 100 bytes per reponse (way too much)\r
-       BYTE *receivedAnswer1 = (((BYTE *)BigBuf) + 3660); // \r
-       BYTE *receivedAnswer2 = (((BYTE *)BigBuf) + 3760);\r
-       BYTE *receivedAnswer3 = (((BYTE *)BigBuf) + 3860);\r
-       //BYTE *TagUID= (((BYTE *)BigBuf) + 3960);              // where we hold the uid for hi15reader \r
-       int responseLen0 = 0;\r
-       int responseLen1 = 0;\r
-       int responseLen2 = 0;\r
-       int responseLen3 = 0;\r
+       BYTE *answer1 = (((BYTE *)BigBuf) + 3660); //\r
+       int answerLen1 = 0;\r
 \r
        // Blank arrays\r
-       int j;\r
-       for(j = 0; j < 100; j++) {\r
-               receivedAnswer3[j] = 0;\r
-               receivedAnswer2[j] =0;\r
-               receivedAnswer1[j] = 0;\r
-               receivedAnswer0[j] = 0;\r
-       }\r
+       memset(answer1, 0, 100);\r
 \r
        // Setup SSC\r
        FpgaSetupSsc();\r
@@ -1148,79 +1092,22 @@ void SimTagIso15693(DWORD parameter)
        int wait = 0;\r
        int elapsed = 0;\r
 \r
-       // FIRST WE RUN AN INVENTORY TO GET THE TAG UID\r
-       // THIS MEANS WE CAN PRE-BUILD REQUESTS TO SAVE CPU TIME\r
- BYTE TagUID[7];               // where we hold the uid for hi15reader \r
-\r
-\r
-\r
-       // Now send the IDENTIFY command\r
-//     BuildIdentifyRequest();\r
-//     TransmitTo15693Tag(ToSend,ToSendMax,&tsamples, &wait);  // No longer ToSendMax+3\r
+       answerLen1 = GetIso15693AnswerFromSniff(answer1, 100, &samples, &elapsed) ;\r
 \r
-\r
-       // Now wait for a command from the reader\r
-       responseLen1=0;\r
-//     while(responseLen1=0) {\r
-//             if(BUTTON_PRESS()) break;\r
-               responseLen1 = GetIso15693AnswerFromSniff(receivedAnswer1, 100, &samples, &elapsed) ;\r
-//             }\r
-\r
-       \r
-       if (responseLen1 >=1) // we should do a better check than this\r
+       if (answerLen1 >=1) // we should do a better check than this\r
        {\r
                // Build a suitable reponse to the reader INVENTORY cocmmand\r
-               BuildInventoryResponse;\r
-               TransmitTo15693Reader(ToSend,ToSendMax,&tsamples, &wait);\r
-\r
-               // Now wait for a command from the reader\r
-//             responseLen2 = GetIso15693AnswerFromTag(receivedAnswer2, 100, &samples, &elapsed); \r
-\r
-       \r
-               // Now wait for a command from the reader\r
-//             responseLen3 = GetIso15693AnswerFromTag(receivedAnswer3, 100, &samples, &elapsed) ;\r
-\r
+               BuildInventoryResponse();\r
+               TransmitTo15693Reader(ToSend,ToSendMax, &tsamples, &wait);\r
        }\r
 \r
-\r
-\r
-       BYTE str1 [4];\r
-       //char str2 [200];\r
-       int i;\r
-\r
-       itoa(responseLen1,str1);\r
-       strcat(str1," octets read from reader command");\r
-       DbpString(str1);\r
-       for(i = 0; i < responseLen1; i+=3) {\r
-               DbpIntegers(receivedAnswer1[i],receivedAnswer1[i+1],receivedAnswer1[i+2]);\r
-       }\r
-\r
-//     itoa(responseLen2,str1);\r
-//     strcat(str1," octets read from SELECT request");\r
-//     DbpString(str1);\r
-//     for(i = 0; i < responseLen2; i+=3) {\r
-//             DbpIntegers(receivedAnswer2[i],receivedAnswer2[i+1],receivedAnswer2[i+2]);\r
-//     }\r
-//\r
-//     itoa(responseLen3,str1);\r
-//     strcat(str1," octets read from XXX request");\r
-//     DbpString(str1);\r
-//     for(i = 0; i < responseLen3; i+=3) {\r
-//             DbpIntegers(receivedAnswer3[i],receivedAnswer3[i+1],receivedAnswer3[i+2]);\r
-//     }\r
-       \r
-\r
-//     str2[0]=0;\r
-//     for(i = 0; i < responseLen3; i++) {\r
-//             itoa(str1,receivedAnswer3[i]);\r
-//             strcat(str2,str1);\r
-//     }\r
-//     DbpString(str2);        \r
+       Dbprintf("%d octets read from reader command: %x %x %x %x %x %x %x %x %x", answerLen1,\r
+               answer1[0], answer1[1], answer1[2],\r
+               answer1[3], answer1[4], answer1[5],\r
+               answer1[6], answer1[7], answer1[8]);\r
 \r
        LED_A_OFF();\r
        LED_B_OFF();\r
        LED_C_OFF();\r
        LED_D_OFF();\r
-\r
-\r
-}
\ No newline at end of file
+}\r
Impressum, Datenschutz