static inline int
fwi_to_fwt(struct rfid_layer2_handle *h, unsigned int *fwt, unsigned int fwi)
{
- unsigned int multiplier;
+ unsigned int multiplier, tmp;
/* 15 is RFU */
if (fwi > 14)
multiplier = 1 << fwi; /* 2 to the power of fwi */
- return (1000000 * 256 * 16 / h->rh->ah->asic->fc) * multiplier
+ tmp = (unsigned int) 1000000 * 256 * 16;
+
+ return (tmp / h->rh->ah->asic->fc) * multiplier;
}
static int
/* FIXME: speed capability */
- memcpy(h->priv.iso14443b.pupi, atqb->pupi,
- sizeof(h->priv.iso14443b.pupi));
+ memcpy(h->uid, atqb->pupi, sizeof(atqb->pupi));
+ h->uid_len = sizeof(atqb->pupi);
return 0;
}
num_slot_idx++) {
reqb[2] = num_slot_idx & 0x07;
if (is_wup)
- reqb[2] |= 0x80;
+ reqb[2] |= 0x08;
- ret = h->rh->reader->transcieve(h->rh, reqb, sizeof(reqb),
+ ret = h->rh->reader->transcieve(h->rh, RFID_14443B_FRAME_REGULAR,
+ reqb, sizeof(reqb),
(unsigned char *)&atqb,
&atqb_len, ATQB_TIMEOUT, 0);
h->priv.iso14443b.state = ISO14443B_STATE_REQB_SENT;
/* FIXME: send N-1 slot marker frames */
if (atqb_len != sizeof(atqb)) {
- DEBUGP("error: atqb_len = %u instead of %u\n",
+ DEBUGP("error: atqb_len = %u instead of %Zu\n",
atqb_len, sizeof(atqb));
continue;
}
memcpy((unsigned char *)attrib+sizeof(*attrib), inf, inf_len);
attrib->one_d = 0x1d;
- memcpy(attrib->identifier, h->priv.iso14443b.pupi, 4);
+ memcpy(attrib->identifier, h->uid, 4);
/* FIXME: do we want to change TR0/TR1 from its default ? */
/* FIXME: do we want to change SOF/EOF from its default ? */
attrib->param3.protocol_type = 0x1;
*rx_len = *rx_len + 1;
- ret = h->rh->reader->transcieve(h->rh, (unsigned char *) attrib,
+ ret = h->rh->reader->transcieve(h->rh, RFID_14443B_FRAME_REGULAR,
+ (unsigned char *) attrib,
sizeof(*attrib)+inf_len,
rx_buf, rx_len, h->priv.iso14443b.fwt,
0);
unsigned int hltb_len = 1;
hltb[0] = 0x50;
- memcpy(hltb+1, h->priv.iso14443b.pupi, 4);
+ memcpy(hltb+1, h->uid, 4);
- ret = h->rh->reader->transcieve(h->rh, hltb, 5,
+ ret = h->rh->reader->transcieve(h->rh, RFID_14443B_FRAME_REGULAR,
+ hltb, 5,
hltb_resp, &hltb_len,
h->priv.iso14443b.fwt, 0);
h->priv.iso14443b.state = ISO14443B_STATE_HLTB_SENT;
{
unsigned char afi = 0; /* FIXME */
int ret;
- char buf[255];
+ unsigned char buf[255];
unsigned int buf_len = sizeof(buf);
ret = send_reqb(handle, afi, 0, 0);
static int
iso14443b_transcieve(struct rfid_layer2_handle *handle,
+ enum rfid_frametype frametype,
const unsigned char *tx_buf, unsigned int tx_len,
unsigned char *rx_buf, unsigned int *rx_len,
- unsigned int timeout, unsigned int flags)
+ u_int64_t timeout, unsigned int flags)
{
- return handle->rh->reader->transcieve(handle->rh, tx_buf, tx_len,
+ DEBUGP("transcieving %u bytes, expecting max %u\n", tx_len, *rx_len);
+ return handle->rh->reader->transcieve(handle->rh, frametype,
+ tx_buf, tx_len,
rx_buf, rx_len, timeout, flags);
}
.fini = &iso14443b_fini,
},
};
-