Attempt to provide target listing function (WARNING: this function is actually incomplete)

New issue
Summary: Provide a target listing function
Labels: Milestone-1.4.x
Libnfc lacks of target listing function. Actually, applications or libraries based on libnfc have to wrote their own listing function which can provide side effect if two or more of theses libraries are used together in the same application. Plus, some kind of problem could appears during listing multiples targets (i.e. collisions) and this problem should be solved in libnfc (i.e. using NFC chip capabilities), not in applications based on libnfc.
This commit is contained in:
Romuald Conty 2010-07-30 13:27:03 +00:00
parent 7113d1418b
commit 0afaf656fa
3 changed files with 103 additions and 21 deletions

View file

@ -1,7 +1,7 @@
/*-
* Public platform independent Near Field Communication (NFC) library
*
* Copyright (C) 2009, Roel Verdult
* Copyright (C) 2009, 2O1O, Roel Verdult, Romuald Conty
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by the
@ -44,26 +44,29 @@
#include "nfc-utils.h"
#define MAX_DEVICE_COUNT 16
#define MAX_TARGET_COUNT 16
static nfc_device_t* pnd;
static byte_t abtFelica[5] = { 0x00, 0xff, 0xff, 0x00, 0x00 };
int main(int argc, const char* argv[])
{
size_t szFound;
const char* acLibnfcVersion;
size_t szDeviceFound;
size_t szTargetFound;
size_t i;
nfc_target_info_t nti;
nfc_device_desc_t *pnddDevices = parse_device_desc(argc, argv, &szFound);
const char* acLibnfcVersion;
if (argc > 1 && szFound == 0) {
errx (1, "usage: %s [--device driver:port:speed]", argv[0]);
}
// Display libnfc version
acLibnfcVersion = nfc_version();
printf("%s use libnfc %s\n", argv[0], acLibnfcVersion);
nfc_device_desc_t *pnddDevices = parse_device_desc(argc, argv, &szDeviceFound);
if (argc > 1 && szDeviceFound == 0) {
errx (1, "usage: %s [--device driver:port:speed]", argv[0]);
}
#ifdef HAVE_LIBUSB
#ifdef DEBUG
usb_set_debug(4);
@ -85,7 +88,7 @@ int main(int argc, const char* argv[])
pnd = nfc_connect(&ndd);
#endif
if (szFound == 0)
if (szDeviceFound == 0)
{
if (!(pnddDevices = malloc (MAX_DEVICE_COUNT * sizeof (*pnddDevices))))
{
@ -93,15 +96,15 @@ int main(int argc, const char* argv[])
return EXIT_FAILURE;
}
nfc_list_devices (pnddDevices, MAX_DEVICE_COUNT, &szFound);
nfc_list_devices (pnddDevices, MAX_DEVICE_COUNT, &szDeviceFound);
}
if (szFound == 0)
if (szDeviceFound == 0)
{
INFO("%s", "No device found.");
}
for (i = 0; i < szFound; i++)
for (i = 0; i < szDeviceFound; i++)
{
pnd = nfc_connect(&(pnddDevices[i]));
@ -126,15 +129,18 @@ int main(int argc, const char* argv[])
// Enable field so more power consuming cards can power themselves up
nfc_configure(pnd,NDO_ACTIVATE_FIELD,true);
printf("\nConnected to NFC reader: %s\n\n",pnd->acName);
printf("Connected to NFC reader: %s\n",pnd->acName);
// Poll for a ISO14443A (MIFARE) tag
if (nfc_initiator_select_passive_target(pnd,NM_ISO14443A_106,NULL,0,&nti))
{
printf("The following (NFC) ISO14443A tag was found:\n\n");
print_nfc_iso14443a_info (nti.nai);
nfc_target_info_t anti[MAX_TARGET_COUNT];
if (nfc_initiator_list_passive_targets(pnd, NM_ISO14443A_106, anti, MAX_TARGET_COUNT, &szTargetFound )) {
printf("%zu ISO14443A passive targets was found:\n", szTargetFound);
for(size_t n=0; n<szTargetFound; n++) {
print_nfc_iso14443a_info (anti[n].nai);
printf("\n");
}
}
printf("-------------------\n");
// Poll for a Felica tag
if (nfc_initiator_select_passive_target(pnd,NM_FELICA_212,abtFelica,5,&nti) || nfc_initiator_select_passive_target(pnd,NM_FELICA_424,abtFelica,5,&nti))
{