New API function freefare_get_tag_uid().

- Deprecates mifare_classic_get_uid() and mifare_ultralight_get_uid().
This commit is contained in:
Romain Tartiere 2010-03-30 16:18:58 +00:00
parent 85e7174a02
commit 574b068b3f
8 changed files with 45 additions and 3 deletions

View file

@ -21,6 +21,7 @@ man_MANS = freefare.3 \
linkedman = \
freefare.3 freefare_get_tags.3 \
freefare.3 freefare_get_tag_type.3 \
freefare.3 freefare_get_tag_uid.3 \
freefare.3 freefare_get_tag_friendly_name.3 \
freefare.3 freefare_free_tags.3 \
mifare_ultralight.3 mifare_ultralight_connect.3 \

View file

@ -28,6 +28,7 @@
.Nm freefare_get_tags ,
.Nm freefare_get_tag_type ,
.Nm freefare_get_tag_friendly_name ,
.Nm freefare_get_tag_uid ,
.Nm freefare_free_tags
.Nd Generic target manipulation functions
.\" _ _ _
@ -52,6 +53,8 @@ Mifare card manipulation library (libfreefare, \-lfreefare)
.Fn freefare_get_tag_type "MifareTag tag"
.Ft "const char *"
.Fn freefare_get_tag_friendly_name "MifareTag tag"
.Ft "char *"
.Fn freefare_get_tag_uid "MifareTag tag"
.Ft void
.Fn freefare_free_tags "MifareTag *tags"
.\" ____ _ _ _
@ -78,7 +81,8 @@ This list has to be freed after usage using
Information about a given
.Vt MifareTag
can be gathered using the
.Fn freefare_get_tag_type
.Fn freefare_get_tag_type ,
.Fn freefare_get_tag_uid
and
.Fn freefare_get_tag_friendly_name
functions.

View file

@ -148,6 +148,18 @@ freefare_get_tag_friendly_name (MifareTag tag)
return tag->tag_info->friendly_name;
}
/*
* Returns the UID of the provided tag.
*/
char *
freefare_get_tag_uid (MifareTag tag)
{
char *res = malloc (2 * tag->info.szUidLen + 1);
for (int i =0; i < tag->info.szUidLen; i++)
snprintf (res + 2*i, 3, "%02x", tag->info.abtUid[i]);
return res;
}
/*
* Free the provided tag list.
*/

View file

@ -54,6 +54,7 @@ typedef unsigned char MifareUltralightPage[4];
MifareTag *freefare_get_tags (nfc_device_t *device);
enum mifare_tag_type freefare_get_tag_type (MifareTag tag);
const char *freefare_get_tag_friendly_name (MifareTag tag);
char *freefare_get_tag_uid (MifareTag tag);
void freefare_free_tags (MifareTag *tags);
int mifare_ultralight_connect (MifareTag tag);

View file

@ -173,7 +173,7 @@ mifare_classic_connect (MifareTag tag)
ASSERT_MIFARE_CLASSIC (tag);
nfc_target_info_t pnti;
if (nfc_initiator_select_tag (tag->device, NM_ISO14443A_106, tag->info.abtUid, 4, &pnti)) {
if (nfc_initiator_select_tag (tag->device, NM_ISO14443A_106, tag->info.abtUid, tag->info.szUidLen, &pnti)) {
tag->active = 1;
} else {
errno = EIO;

View file

@ -84,7 +84,7 @@ mifare_ultralight_connect (MifareTag tag)
ASSERT_MIFARE_ULTRALIGHT (tag);
nfc_target_info_t pnti;
if (nfc_initiator_select_tag (tag->device, NM_ISO14443A_106, tag->info.abtUid, 7, &pnti)) {
if (nfc_initiator_select_tag (tag->device, NM_ISO14443A_106, tag->info.abtUid, tag->info.szUidLen, &pnti)) {
tag->active = 1;
for (int i = 0; i < MIFARE_ULTRALIGHT_PAGE_COUNT; i++)
MIFARE_ULTRALIGHT(tag)->cached_pages[i] = 0;

View file

@ -357,3 +357,15 @@ test_mifare_classic_sector_boundaries (void)
}
}
}
void
test_mifare_classic_get_uid_freefare_get_tag_uid (void)
{
char *s1 = mifare_classic_get_uid (tag);
char *s2 = freefare_get_tag_uid (tag);
cut_assert_equal_string (s1, s2, cut_message ("UID don't match"));
free (s1);
free (s2);
}

View file

@ -153,3 +153,15 @@ test_mifare_ultralight_get_uid (void)
free (uid);
}
void
test_mifare_ultralight_get_uid_freefare_get_tag_uid (void)
{
char *s1 = mifare_ultralight_get_uid (tag);
char *s2 = freefare_get_tag_uid (tag);
cut_assert_equal_string (s1, s2, cut_message ("UID don't match"));
free (s1);
free (s2);
}