summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorploetz <ploetz@e0336214-984f-0b4b-a45f-81c69e1f0ede>2007-03-20 00:47:12 +0000
committerploetz <ploetz@e0336214-984f-0b4b-a45f-81c69e1f0ede>2007-03-20 00:47:12 +0000
commit93ffaaefecb5b83a39e30d4126dbbbd78f901aa2 (patch)
treea91a15f44236ae433329b6a13c5784da2399011f
parent9a8dbae5c77a0277a8c52610ebb113bf3a151a1d (diff)
Add RFID_OPT_14443A_WUPA to request WUPA instead of REQA (Rainer Keller <mail@rainerkeller.de>)
git-svn-id: https://svn.gnumonks.org/trunk/librfid@1985 e0336214-984f-0b4b-a45f-81c69e1f0ede
-rw-r--r--include/librfid/rfid_layer2_iso14443a.h1
-rw-r--r--src/rfid_layer2_iso14443a.c14
-rw-r--r--src/rfid_layer2_iso14443b.c2
-rw-r--r--src/rfid_proto_mifare_ul.c4
4 files changed, 17 insertions, 4 deletions
diff --git a/include/librfid/rfid_layer2_iso14443a.h b/include/librfid/rfid_layer2_iso14443a.h
index b9ef954..9a795c2 100644
--- a/include/librfid/rfid_layer2_iso14443a.h
+++ b/include/librfid/rfid_layer2_iso14443a.h
@@ -5,6 +5,7 @@ enum rfid_14443a_opt {
RFID_OPT_14443A_SPEED_RX = 0x00010001,
RFID_OPT_14443A_SPEED_TX = 0x00010002,
RFID_OPT_14443A_ATQA = 0x00010003,
+ RFID_OPT_14443A_WUPA = 0x00010004,
};
enum rfid_14443_opt_speed {
diff --git a/src/rfid_layer2_iso14443a.c b/src/rfid_layer2_iso14443a.c
index 429577c..4716018 100644
--- a/src/rfid_layer2_iso14443a.c
+++ b/src/rfid_layer2_iso14443a.c
@@ -280,6 +280,13 @@ iso14443a_setopt(struct rfid_layer2_handle *handle, int optname,
speed = *(unsigned int *)optval;
ret = rdr->iso14443a.set_speed(handle->rh, 1, speed);
break;
+ case RFID_OPT_14443A_WUPA:
+ if((unsigned int*)optval)
+ handle->flags |= RFID_OPT_LAYER2_WUP;
+ else
+ handle->flags &= ~RFID_OPT_LAYER2_WUP;
+ ret = 0;
+ break;
};
return ret;
@@ -287,17 +294,22 @@ iso14443a_setopt(struct rfid_layer2_handle *handle, int optname,
static int
iso14443a_getopt(struct rfid_layer2_handle *handle, int optname,
- void *optval, unsigned int optlen)
+ void *optval, unsigned int *optlen)
{
int ret = -EINVAL;
struct iso14443a_handle *h = &handle->priv.iso14443a;
struct iso14443a_atqa *atqa = optval;
+ int *wupa = optval;
switch (optname) {
case RFID_OPT_14443A_ATQA:
*atqa = h->atqa;
ret = 0;
break;
+ case RFID_OPT_14443A_WUPA:
+ *wupa = ((handle->flags & RFID_OPT_LAYER2_WUP) != 0);
+ ret = 0;
+ break;
};
return ret;
diff --git a/src/rfid_layer2_iso14443b.c b/src/rfid_layer2_iso14443b.c
index 34575c5..e5fb151 100644
--- a/src/rfid_layer2_iso14443b.c
+++ b/src/rfid_layer2_iso14443b.c
@@ -337,7 +337,7 @@ iso14443b_transceive(struct rfid_layer2_handle *handle,
static int
iso14443b_getopt(struct rfid_layer2_handle *handle,
- int optname, void *optval, unsigned int optlen)
+ int optname, void *optval, unsigned int *optlen)
{
unsigned int *opt_ui = optval;
diff --git a/src/rfid_proto_mifare_ul.c b/src/rfid_proto_mifare_ul.c
index 65347b1..7243c89 100644
--- a/src/rfid_proto_mifare_ul.c
+++ b/src/rfid_proto_mifare_ul.c
@@ -110,7 +110,7 @@ mful_transceive(struct rfid_protocol_handle *ph,
static int
mful_getopt(struct rfid_protocol_handle *ph, int optname, void *optval,
- unsigned int optlen)
+ unsigned int *optlen)
{
int ret = -EINVAL;
u_int16_t atqa;
@@ -139,7 +139,7 @@ mful_init(struct rfid_layer2_handle *l2h)
/* According to "Type Identification Procedure Rev. 1.3" */
rfid_layer2_getopt(l2h, RFID_OPT_14443A_ATQA,
- &atqa, atqa_len);
+ &atqa, &atqa_len);
if (atqa != 0x0044)
return NULL;
personal git repositories of Harald Welte. Your mileage may vary