]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - armsrc/iso14443b.c
CHG; travis CI and multi platform part..
[proxmark3-svn] / armsrc / iso14443b.c
index 355e4a2e90477cc4df3dfa23880cb075abb0b61a..68f0c366865142967db2f23beebd6ec20a5276c6 100644 (file)
@@ -40,7 +40,7 @@
 //#define SEND4STUFFBIT(x) ToSendStuffBit(x);
  // iceman, this threshold value,  what makes 8 a good amplituted for this IQ values? 
 #ifndef SUBCARRIER_DETECT_THRESHOLD
-# define SUBCARRIER_DETECT_THRESHOLD   6
+# define SUBCARRIER_DETECT_THRESHOLD   8
 #endif
 
 static void iso14b_set_timeout(uint32_t timeout);
@@ -237,7 +237,7 @@ static void CodeIso14443bAsTag(const uint8_t *cmd, int len) {
        *  Card data transmission
        *   - TR1
        *   - SOF
-       *   - data  (each bytes is:  1startbit,8bits, 1stopbit)
+       *   - data  (each bytes is:  1startbit, 8bits, 1stopbit)
        *   - CRC_B
        *   - EOF
        *
@@ -280,13 +280,14 @@ static void CodeIso14443bAsTag(const uint8_t *cmd, int len) {
                // Data bits
                b = cmd[i];
                for(j = 0; j < 8; ++j) {
-                       if(b & 1) { 
-                               SEND4STUFFBIT(1); 
-                               //ToSendStuffBit(1);
-                       } else {
-                               SEND4STUFFBIT(0);
-                               //ToSendStuffBit(0);
-                       }
+                       // if(b & 1) { 
+                               // SEND4STUFFBIT(1); 
+                               // //ToSendStuffBit(1);
+                       // } else {
+                               // SEND4STUFFBIT(0);
+                               // //ToSendStuffBit(0);
+                       // }
+                       SEND4STUFFBIT( b & 1 );
                        b >>= 1;
                }
 
@@ -452,7 +453,7 @@ static int GetIso14443bCommandFromReader(uint8_t *received, uint16_t *len) {
                
        StartCountSspClk();
        
-       volatile uint8_t b;
+       volatile uint8_t b = 0;
 
        // clear receiving shift register and holding register
        // What does this loop do? Is it TR1?
@@ -466,7 +467,6 @@ static int GetIso14443bCommandFromReader(uint8_t *received, uint16_t *len) {
        // Now run a `software UART' on the stream of incoming samples.
        UartInit(received);
 
-       b = 0;
        uint8_t mask;
        while( !BUTTON_PRESS() ) {
                WDT_HIT();
@@ -489,11 +489,11 @@ void ClearFpgaShiftingRegisters(void){
        volatile uint8_t b;
 
        // clear receiving shift register and holding register
-       while(!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY));
+       while(!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY)) {};
 
        b = AT91C_BASE_SSC->SSC_RHR; (void) b;
 
-       while(!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY));
+       while(!(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY)) {};
 
        b = AT91C_BASE_SSC->SSC_RHR; (void) b;
        
@@ -802,9 +802,9 @@ static RAMFUNC int Handle14443bTagSamplesDemod(int ci, int cq) {
                case DEMOD_UNSYNCD:
 
                        CHECK_FOR_SUBCARRIER();
-
+               
                        // subcarrier detected
-                       if(v > SUBCARRIER_DETECT_THRESHOLD) {
+                       if (v > SUBCARRIER_DETECT_THRESHOLD) {
                                Demod.state = DEMOD_PHASE_REF_TRAINING;
                                Demod.sumI = ci;
                                Demod.sumQ = cq;
@@ -813,7 +813,7 @@ static RAMFUNC int Handle14443bTagSamplesDemod(int ci, int cq) {
                        break;
 
                case DEMOD_PHASE_REF_TRAINING:
-                       if(Demod.posCount < 8) {
+                       if (Demod.posCount < 8) {
 
                                CHECK_FOR_SUBCARRIER();
                                
@@ -836,7 +836,7 @@ static RAMFUNC int Handle14443bTagSamplesDemod(int ci, int cq) {
                        
                        MAKE_SOFT_DECISION();
                        
-                       if(v < 0) {     // logic '0' detected
+                       if (v < 0) {    // logic '0' detected
                                Demod.state = DEMOD_GOT_FALLING_EDGE_OF_SOF;
                                Demod.posCount = 0;     // start of SOF sequence
                        } else {
@@ -851,13 +851,13 @@ static RAMFUNC int Handle14443bTagSamplesDemod(int ci, int cq) {
                        
                        MAKE_SOFT_DECISION();
                        
-                       if(v > 0) {
+                       if (v > 0) {
                                // low phase of SOF too short (< 9 etu). Note: spec is >= 10, but FPGA tends to "smear" edges
-                               if(Demod.posCount < 8*2) { 
+                               if (Demod.posCount < 8*2) { 
                                        Demod.state = DEMOD_UNSYNCD;
                                } else {
                                        LED_C_ON(); // Got SOF
-                                       Demod.startTime = GetCountSspClk();
+                                       //Demod.startTime = GetCountSspClk();
                                        Demod.state = DEMOD_AWAITING_START_BIT;
                                        Demod.posCount = 0;
                                        Demod.len = 0;
@@ -903,7 +903,7 @@ static RAMFUNC int Handle14443bTagSamplesDemod(int ci, int cq) {
                                Demod.thisBit += v;
                                Demod.shiftReg >>= 1;
 
-                               // logic '1'
+                               // OR in a logic '1'
                                if (Demod.thisBit > 0)  Demod.shiftReg |= 0x200;
 
                                ++Demod.bitCount;
@@ -922,7 +922,7 @@ static RAMFUNC int Handle14443bTagSamplesDemod(int ci, int cq) {
                                        } else {
                                                // this one is a bit hard,  either its a correc byte or its unsynced.
                                                Demod.state = DEMOD_UNSYNCD;
-                                               Demod.endTime = GetCountSspClk();
+                                               //Demod.endTime = GetCountSspClk();
                                                LED_C_OFF();
                                                
                                                // This is EOF (start, stop and all data bits == '0'
@@ -1017,7 +1017,7 @@ static void GetTagSamplesFor14443bDemod() {
                Dbhexdump(ISO14443B_DMA_BUFFER_SIZE, (uint8_t *)dmaBuf, FALSE); 
        
        if ( Demod.len > 0 )
-               LogTrace(Demod.output, Demod.len, Demod.startTime, Demod.endTime, NULL, FALSE);
+               LogTrace(Demod.output, Demod.len, time_0, time_stop, NULL, FALSE);
 }
 
 
@@ -1074,8 +1074,7 @@ static void TransmitFor14443b_AsReader(void) {
 // Code a layer 2 command (string of octets, including CRC) into ToSend[],
 // so that it is ready to transmit to the tag using TransmitFor14443b().
 //-----------------------------------------------------------------------------
-static void CodeIso14443bAsReader(const uint8_t *cmd, int len)
-{
+static void CodeIso14443bAsReader(const uint8_t *cmd, int len) {
        /*
        *  Reader data transmission:
        *   - no modulation ONES
@@ -1111,14 +1110,24 @@ static void CodeIso14443bAsReader(const uint8_t *cmd, int len)
                ToSendStuffBit(0);
                // Data bits
                b = cmd[i];             
-               if (  b & 1 )    ToSendStuffBit(1); else ToSendStuffBit(0);
-               if ( (b>>1) & 1) ToSendStuffBit(1); else ToSendStuffBit(0);
-               if ( (b>>2) & 1) ToSendStuffBit(1); else ToSendStuffBit(0);
-               if ( (b>>3) & 1) ToSendStuffBit(1); else ToSendStuffBit(0);
-               if ( (b>>4) & 1) ToSendStuffBit(1); else ToSendStuffBit(0);
-               if ( (b>>5) & 1) ToSendStuffBit(1); else ToSendStuffBit(0);
-               if ( (b>>6) & 1) ToSendStuffBit(1); else ToSendStuffBit(0);
-               if ( (b>>7) & 1) ToSendStuffBit(1); else ToSendStuffBit(0);             
+               // if (  b & 1 )    ToSendStuffBit(1); else ToSendStuffBit(0);
+               // if ( (b>>1) & 1) ToSendStuffBit(1); else ToSendStuffBit(0);
+               // if ( (b>>2) & 1) ToSendStuffBit(1); else ToSendStuffBit(0);
+               // if ( (b>>3) & 1) ToSendStuffBit(1); else ToSendStuffBit(0);
+               // if ( (b>>4) & 1) ToSendStuffBit(1); else ToSendStuffBit(0);
+               // if ( (b>>5) & 1) ToSendStuffBit(1); else ToSendStuffBit(0);
+               // if ( (b>>6) & 1) ToSendStuffBit(1); else ToSendStuffBit(0);
+               // if ( (b>>7) & 1) ToSendStuffBit(1); else ToSendStuffBit(0);  
+
+               ToSendStuffBit(  b & 1); 
+               ToSendStuffBit( (b>>1) & 1);            
+               ToSendStuffBit( (b>>2) & 1); 
+               ToSendStuffBit( (b>>3) & 1); 
+               ToSendStuffBit( (b>>4) & 1); 
+               ToSendStuffBit( (b>>5) & 1); 
+               ToSendStuffBit( (b>>6) & 1);            
+               ToSendStuffBit( (b>>7) & 1); 
+               
                // Stop bit
                ToSendStuffBit(1);
                // EGT extra guard time
@@ -1144,19 +1153,19 @@ static void CodeIso14443bAsReader(const uint8_t *cmd, int len)
 }
 
 
-/**
-  Convenience function to encode, transmit and trace iso 14443b comms
-  **/
+/*
+*  Convenience function to encode, transmit and trace iso 14443b comms
+*/
 static void CodeAndTransmit14443bAsReader(const uint8_t *cmd, int len) {
+
+       uint32_t time_start = GetCountSspClk();
        
        CodeIso14443bAsReader(cmd, len);
-       
-       uint32_t time_start = GetCountSspClk();
 
        TransmitFor14443b_AsReader();
-       
+
        if(trigger) LED_A_ON();
-       
+
        LogTrace(cmd, len, time_start, GetCountSspClk()-time_start, NULL, TRUE);
 }
 
@@ -1629,11 +1638,11 @@ void RAMFUNC SnoopIso14443b(void) {
                                if (triggered)
                                        LogTrace(Uart.output, Uart.byteCnt, time_start, time_stop, NULL, TRUE);
 
-                                       /* And ready to receive another command. */
-                                       UartReset();
-                                       /* And also reset the demod code, which might have been */
-                                       /* false-triggered by the commands from the reader. */
-                                       DemodReset();
+                               /* And ready to receive another command. */
+                               UartReset();
+                               /* And also reset the demod code, which might have been */
+                               /* false-triggered by the commands from the reader. */
+                               DemodReset();
                        } else {
                                time_start = GetCountSspClk() - time_0;
                        }
Impressum, Datenschutz