iso14443a_code_nvb_bits(&acf.nvb, 16);
ret = iso14443a_transceive_acf(handle, &acf, &bit_of_col);
+ DEBUGP("tran_acf->%d boc: %d\n",ret,bit_of_col);
if (ret < 0)
return ret;
switch (acf.sel_code) {
case ISO14443A_AC_SEL_CODE_CL1:
/* cascading from CL1 to CL2 */
+ DEBUGP("cascading from CL1 to CL2\n");
if (acf.uid_bits[0] != 0x88) {
DEBUGP("Cascade bit set, but UID0 != 0x88\n");
return -1;
break;
case ISO14443A_AC_SEL_CODE_CL2:
/* cascading from CL2 to CL3 */
+ DEBUGP("cascading from CL2 to CL3\n");
memcpy(&handle->uid[3], &acf.uid_bits[1], 3);
acf.sel_code = ISO14443A_AC_SEL_CODE_CL3;
h->level = ISO14443A_LEVEL_CL3;
}
}
- 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;
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;
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;
};
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;