finish eeprom read/write implementations for RC632
[librfid] / src / rfid_layer2_iso14443a.c
index 9bdd25a..f2b3d26 100644 (file)
@@ -237,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;
@@ -251,6 +248,10 @@ cascade:
                DEBUGP("UID %s\n", rfid_hexdump(handle->uid, handle->uid_len));
        }
 
+       h->level = ISO14443A_LEVEL_NONE;
+       h->state = ISO14443A_STATE_SELECTED;
+       h->sak = sak[0];
+
        if (sak[0] & 0x20) {
                DEBUGP("we have a T=CL compliant PICC\n");
                handle->proto_supported = 1 << RFID_PROTOCOL_TCL;
@@ -323,15 +324,22 @@ iso14443a_getopt(struct rfid_layer2_handle *handle, int optname,
        int ret = -EINVAL;
        struct iso14443a_handle *h = &handle->priv.iso14443a;
        struct iso14443a_atqa *atqa = optval;
+       u_int8_t *opt_u8 = optval;
        int *wupa = optval;
 
        switch (optname) {
+       case RFID_OPT_14443A_SAK:
+               *opt_u8 = h->sak;
+               *optlen = sizeof(*opt_u8);
+               break;
        case RFID_OPT_14443A_ATQA:
                *atqa = h->atqa;
+               *optlen = sizeof(*atqa);
                ret = 0;
                break;
        case RFID_OPT_14443A_WUPA:
                *wupa = ((handle->flags & RFID_OPT_LAYER2_WUP) != 0);
+               *optlen = sizeof(*wupa);
                ret = 0;
                break;
        };
@@ -361,7 +369,7 @@ iso14443a_init(struct rfid_reader_handle *rh)
        h->priv.iso14443a.state = ISO14443A_STATE_NONE;
        h->priv.iso14443a.level = ISO14443A_LEVEL_NONE;
 
-       ret = h->rh->reader->iso14443a.init(h->rh);
+       ret = h->rh->reader->init(h->rh, RFID_LAYER2_ISO14443A);
        if (ret < 0) {
                free_layer2_handle(h);
                return NULL;