* fix length of mifare classic block
[librfid] / src / rfid_layer2_iso14443a.c
index 66914db..148960d 100644 (file)
@@ -43,7 +43,7 @@ iso14443a_transceive_sf(struct rfid_layer2_handle *handle,
                         unsigned char cmd,
                         struct iso14443a_atqa *atqa)
 {
-       struct rfid_reader *rdr = handle->rh->reader;
+       const struct rfid_reader *rdr = handle->rh->reader;
 
        return rdr->iso14443a.transceive_sf(handle->rh, cmd, atqa);
 }
@@ -54,7 +54,7 @@ iso14443a_transceive_acf(struct rfid_layer2_handle *handle,
                         struct iso14443a_anticol_cmd *acf,
                         unsigned int *bit_of_col)
 {
-       struct rfid_reader *rdr = handle->rh->reader;
+       const struct rfid_reader *rdr = handle->rh->reader;
 
        return rdr->iso14443a.transceive_acf(handle->rh, acf, bit_of_col);
 }
@@ -85,35 +85,34 @@ iso14443a_code_nvb_bits(unsigned char *nvb, unsigned int bits)
        return 0;
 }
 
-int random_bit(void)
+static int random_bit(void)
 {
-    unsigned long e;
+       unsigned long e;
 
-    e = randctx[0];    
-    randctx[0]=randctx[1];
-    randctx[1]=(randctx[2]<<19) + (randctx[2]>>13) + randctx[3];
-    randctx[2]=randctx[3] ^ randctx[0];
-    randctx[3]=e+randctx[1];
+       e = randctx[0];    
+       randctx[0] = randctx[1];
+       randctx[1] = (randctx[2]<<19) + (randctx[2]>>13) + randctx[3];
+       randctx[2] = randctx[3] ^ randctx[0];
+       randctx[3] = e+randctx[1];
     
-    return randctx[1]&1;
+       return randctx[1]&1;
 }
 
 /* first bit is '1', second bit '2' */
 static void
 rnd_toggle_bit_in_field(unsigned char *bitfield, unsigned int size, unsigned int bit)
 {
-    unsigned int byte,rnd;
+       unsigned int byte,rnd;
 
-    if(bit && (bit <= (size*8)) )
-    {
-       rnd=random_bit();
+       if (bit && (bit <= (size*8))) {
+               rnd = random_bit();
        
-        DEBUGP("xor'ing bit %u with %u\n",bit,rnd);
-        bit--;
-        byte=bit/8;
-        bit=rnd<<(bit%8);
-        bitfield[byte] ^= bit;
-    }
+               DEBUGP("xor'ing bit %u with %u\n",bit,rnd);
+               bit--;
+               byte = bit/8;
+               bit = rnd << (bit % 8);
+               bitfield[byte] ^= bit;
+       }
 }
 
 
@@ -238,13 +237,10 @@ cascade:
                }
        }
 
-       h->level = ISO14443A_LEVEL_NONE;
-       h->state = ISO14443A_STATE_SELECTED;
-
        {
-               if (uid_size == 1)
+               if (h->level == ISO14443A_LEVEL_CL1)
                        handle->uid_len = 4;
-               else if (uid_size == 2)
+               else if (h->level == ISO14443A_LEVEL_CL2)
                        handle->uid_len = 7;
                else 
                        handle->uid_len = 10;
@@ -252,6 +248,9 @@ cascade:
                DEBUGP("UID %s\n", rfid_hexdump(handle->uid, handle->uid_len));
        }
 
+       h->level = ISO14443A_LEVEL_NONE;
+       h->state = ISO14443A_STATE_SELECTED;
+
        if (sak[0] & 0x20) {
                DEBUGP("we have a T=CL compliant PICC\n");
                handle->proto_supported = 1 << RFID_PROTOCOL_TCL;
@@ -289,7 +288,7 @@ iso14443a_setopt(struct rfid_layer2_handle *handle, int optname,
                 const void *optval, unsigned int optlen)
 {
        int ret = -EINVAL;
-       struct rfid_reader *rdr = handle->rh->reader;
+       const struct rfid_reader *rdr = handle->rh->reader;
        unsigned int speed;
 
        switch (optname) {