]> git.zerfleddert.de Git - proxmark3-svn/commitdiff
CHG: finally, the ticks timer does what it is supposed to do. 32bits and working.
authoriceman1001 <iceman@iuse.se>
Thu, 29 Sep 2016 19:36:43 +0000 (21:36 +0200)
committericeman1001 <iceman@iuse.se>
Thu, 29 Sep 2016 19:36:43 +0000 (21:36 +0200)
armsrc/legicrf.c
armsrc/ticks.c
armsrc/ticks.h
client/cmdhflegic.c

index 7f8c05a6bd5c1b1dbd3478ccba2567ed22a08326..b1c6b1964103bd92666414bdcbf4c4703d44a1f9 100644 (file)
@@ -72,7 +72,7 @@ static void setup_timer(void) {
 #define        RWD_TIME_1 120          // READER_TIME_PAUSE 20us off, 80us on = 100us  80 * 1.5 == 120ticks
 #define RWD_TIME_0 60          // READER_TIME_PAUSE 20us off, 40us on = 60us   40 * 1.5 == 60ticks 
 #define RWD_TIME_PAUSE 30      // 20us == 20 * 1.5 == 30ticks */
-#define TAG_BIT_PERIOD 143     // 100us == 100 * 1.5 == 150ticks
+#define TAG_BIT_PERIOD 142     // 100us == 100 * 1.5 == 150ticks
 #define TAG_FRAME_WAIT 495  // 330us from READER frame end to TAG frame start. 330 * 1.5 == 495
 
 #define RWD_TIME_FUZZ 20   // rather generous 13us, since the peak detector + hysteresis fuzz quite a bit
@@ -264,7 +264,6 @@ static void frame_receiveAsReader(struct legic_frame * const f, uint8_t bits) {
        if ( bits > 32 ) return;
        
        uint8_t i = bits, edges = 0;    
-       uint16_t lsfr = 0;
        uint32_t the_bit = 1, next_bit_at = 0, data = 0;
        uint32_t old_level = 0;
        volatile uint32_t level = 0;
@@ -276,18 +275,19 @@ static void frame_receiveAsReader(struct legic_frame * const f, uint8_t bits) {
        
        // calibrate the prng.
        legic_prng_forward(2);
-       data = lsfr = legic_prng_get_bits(bits);
+       data = legic_prng_get_bits(bits);
        
        //FIXED time between sending frame and now listening frame. 330us
        uint32_t starttime = GET_TICKS;
-       if ( bits == 6) {
-               //WaitTicks( 495 - 9 - 9 );
-               WaitTicks( 475 );
-       } else {
-               WaitTicks( 450 );
-       }
+       //if ( bits == 6 || bits == 7) {
+               // its about 9+9 ticks delay from end-send to here.
+               //WaitTicks( 495 - 9 - 9 );             
+               WaitTicks( 477 );
+       //} else {
+//             WaitTicks( 477 );
+//     }
 
-       next_bit_at =  GET_TICKS + TAG_BIT_PERIOD;
+       next_bit_at = GET_TICKS + TAG_BIT_PERIOD;
 
        while ( i-- ){
                edges = 0;
@@ -400,14 +400,16 @@ int legic_read_byte( uint16_t index, uint8_t cmd_sz) {
        uint8_t byte, crc, calcCrc = 0;
        uint32_t cmd = (index << 1) | LEGIC_READ;
 
-       WaitTicks(366); 
+       //WaitTicks(366); 
+       WaitTicks(330); 
+       //WaitTicks(50);
        
        frame_sendAsReader(cmd, cmd_sz);
        frame_receiveAsReader(&current_frame, 12);
 
+       // CRC check. 
        byte = BYTEx(current_frame.data, 0);
        crc = BYTEx(current_frame.data, 1);
-       
        calcCrc = legic4Crc(LEGIC_READ, index, byte, cmd_sz);
 
        if( calcCrc != crc ) {
@@ -416,7 +418,6 @@ int legic_read_byte( uint16_t index, uint8_t cmd_sz) {
        }
 
        legic_prng_forward(4);
-       WaitTicks(50);
        return byte;
 }
 
@@ -738,7 +739,6 @@ int legic_select_card_iv(legic_card_select_t *p_card, uint8_t iv){
                        p_card->addrsize = 0;
                        p_card->cardsize = 0;
                        return 2;
-                       break;
        }
        return 0;
 }
@@ -752,7 +752,7 @@ void LegicRfInfo(void){
        legic_card_select_t *card = (legic_card_select_t*) buf;
        
        LegicCommonInit();
-       
+
        if ( legic_select_card(card) ) {
                cmd_send(CMD_ACK,0,0,0,0,0);
                goto OUT;
index 0117030eab5b54c04cf9fcbe7d3a19b76bea2c41..633e963a6b8e555b0332285051147d92f175d26d 100644 (file)
@@ -187,7 +187,7 @@ void StartTicks(void){
                                                                AT91C_TC_WAVE | AT91C_TC_WAVESEL_UP_AUTO | AT91C_TC_ACPA_CLEAR |
                                                                AT91C_TC_ACPC_SET | AT91C_TC_ASWTRG_SET;
        AT91C_BASE_TC0->TC_RA = 1;
-       AT91C_BASE_TC0->TC_RC = 0xBFFF + 1; // 0xC000
+       AT91C_BASE_TC0->TC_RC = 0
 
        AT91C_BASE_TC1->TC_CCR = AT91C_TC_CLKDIS;       // timer disable  
        AT91C_BASE_TC1->TC_CMR = AT91C_TC_CLKS_XC1; // from TC0
index 17a9ff1805693330379ab817ab25f66e39e4b3df..1b05289df90591fb2d098b0fbc4db45064602972 100644 (file)
@@ -19,7 +19,7 @@
 #include "proxmark3.h"
 
 #ifndef GET_TICKS
-# define GET_TICKS   ((AT91C_BASE_TC1->TC_CV << 16) | AT91C_BASE_TC0->TC_CV)
+# define GET_TICKS   (uint32_t)((AT91C_BASE_TC1->TC_CV << 16) | AT91C_BASE_TC0->TC_CV)
 #endif
 
 void SpinDelay(int ms);
index 7707c076b979e4fe2074b0ce49e32a5cf658b9e7..f0fb12be8b7973ed1d2db94eb7925e35a60ccc55 100644 (file)
@@ -425,12 +425,14 @@ int CmdLegicRFRead(const char *Cmd) {
                uint16_t len = resp.arg[1] & 0x3FF;
                 if ( isOK ) {
                        PrintAndLog("use 'hf legic decode'");
-                }
+
                        uint8_t *data = resp.d.asBytes;
                        PrintAndLog("\nData        |");
                        PrintAndLog("-----------------------------");
                        PrintAndLog(" %s|\n", sprint_hex(data, len));
-               // }
+                } else {
+                        PrintAndLog("failed reading tag");
+                }
        } else {
                PrintAndLog("command execution time out");
                return 1;
Impressum, Datenschutz