Merge r499-510 from trunk.
This commit is contained in:
commit
dfb82f8893
15 changed files with 94 additions and 86 deletions
|
@ -2,9 +2,9 @@
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "chips/pn53x.h"
|
#include <nfc/nfc.h>
|
||||||
|
|
||||||
extern const byte_t pncmd_initiator_exchange_data [265];
|
#include "chips/pn53x.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Execute a MIFARE Classic Command
|
* @brief Execute a MIFARE Classic Command
|
||||||
|
@ -24,15 +24,13 @@ bool nfc_initiator_mifare_cmd(nfc_device_t* pnd, const mifare_cmd mc, const uint
|
||||||
byte_t abtRx[MAX_FRAME_LEN];
|
byte_t abtRx[MAX_FRAME_LEN];
|
||||||
size_t szRxLen;
|
size_t szRxLen;
|
||||||
size_t szParamLen;
|
size_t szParamLen;
|
||||||
byte_t abtCmd[sizeof(pncmd_initiator_exchange_data)];
|
byte_t abtCmd[265];
|
||||||
memcpy(abtCmd,pncmd_initiator_exchange_data,sizeof(pncmd_initiator_exchange_data));
|
|
||||||
|
|
||||||
// Make sure we are dealing with a active device
|
// Make sure we are dealing with a active device
|
||||||
if (!pnd->bActive) return false;
|
if (!pnd->bActive) return false;
|
||||||
|
|
||||||
abtCmd[2] = 0x01; // Use first target/card
|
abtCmd[0] = mc; // The MIFARE Classic command
|
||||||
abtCmd[3] = mc; // The MIFARE Classic command
|
abtCmd[1] = ui8Block; // The block address (1K=0x00..0x39, 4K=0x00..0xff)
|
||||||
abtCmd[4] = ui8Block; // The block address (1K=0x00..0x39, 4K=0x00..0xff)
|
|
||||||
|
|
||||||
switch (mc)
|
switch (mc)
|
||||||
{
|
{
|
||||||
|
@ -67,10 +65,10 @@ bool nfc_initiator_mifare_cmd(nfc_device_t* pnd, const mifare_cmd mc, const uint
|
||||||
}
|
}
|
||||||
|
|
||||||
// When available, copy the parameter bytes
|
// When available, copy the parameter bytes
|
||||||
if (szParamLen) memcpy(abtCmd+5,(byte_t*)pmp,szParamLen);
|
if (szParamLen) memcpy(abtCmd+2,(byte_t*)pmp,szParamLen);
|
||||||
|
|
||||||
// Fire the mifare command
|
// Fire the mifare command
|
||||||
if (!pn53x_transceive(pnd,abtCmd,5+szParamLen,abtRx,&szRxLen)) return false;
|
if (!nfc_initiator_transceive_dep_bytes(pnd,abtCmd,2+szParamLen,abtRx,&szRxLen)) return false;
|
||||||
|
|
||||||
// When we have executed a read command, copy the received bytes into the param
|
// When we have executed a read command, copy the received bytes into the param
|
||||||
if (mc == MC_READ && szRxLen == 17) memcpy(pmp->mpd.abtData,abtRx+1,16);
|
if (mc == MC_READ && szRxLen == 17) memcpy(pmp->mpd.abtData,abtRx+1,16);
|
||||||
|
|
|
@ -56,12 +56,13 @@ int main(int argc, const char* argv[])
|
||||||
size_t szTargetFound;
|
size_t szTargetFound;
|
||||||
size_t i;
|
size_t i;
|
||||||
nfc_target_info_t nti;
|
nfc_target_info_t nti;
|
||||||
|
nfc_device_desc_t *pnddDevices;
|
||||||
|
|
||||||
// Display libnfc version
|
// Display libnfc version
|
||||||
acLibnfcVersion = nfc_version();
|
acLibnfcVersion = nfc_version();
|
||||||
printf("%s use libnfc %s\n", argv[0], acLibnfcVersion);
|
printf("%s use libnfc %s\n", argv[0], acLibnfcVersion);
|
||||||
|
|
||||||
nfc_device_desc_t *pnddDevices = parse_device_desc(argc, argv, &szDeviceFound);
|
pnddDevices = parse_device_desc(argc, argv, &szDeviceFound);
|
||||||
|
|
||||||
if (argc > 1 && szDeviceFound == 0) {
|
if (argc > 1 && szDeviceFound == 0) {
|
||||||
errx (1, "usage: %s [--device driver:port:speed]", argv[0]);
|
errx (1, "usage: %s [--device driver:port:speed]", argv[0]);
|
||||||
|
@ -106,6 +107,7 @@ int main(int argc, const char* argv[])
|
||||||
|
|
||||||
for (i = 0; i < szDeviceFound; i++)
|
for (i = 0; i < szDeviceFound; i++)
|
||||||
{
|
{
|
||||||
|
nfc_target_info_t anti[MAX_TARGET_COUNT];
|
||||||
pnd = nfc_connect(&(pnddDevices[i]));
|
pnd = nfc_connect(&(pnddDevices[i]));
|
||||||
|
|
||||||
|
|
||||||
|
@ -131,10 +133,10 @@ int main(int argc, const char* argv[])
|
||||||
|
|
||||||
printf("Connected to NFC reader: %s\n",pnd->acName);
|
printf("Connected to NFC reader: %s\n",pnd->acName);
|
||||||
|
|
||||||
nfc_target_info_t anti[MAX_TARGET_COUNT];
|
|
||||||
if (nfc_initiator_list_passive_targets(pnd, NM_ISO14443A_106, anti, MAX_TARGET_COUNT, &szTargetFound )) {
|
if (nfc_initiator_list_passive_targets(pnd, NM_ISO14443A_106, anti, MAX_TARGET_COUNT, &szTargetFound )) {
|
||||||
|
size_t n;
|
||||||
printf("%zu ISO14443A passive targets was found:\n", szTargetFound);
|
printf("%zu ISO14443A passive targets was found:\n", szTargetFound);
|
||||||
for(size_t n=0; n<szTargetFound; n++) {
|
for(n=0; n<szTargetFound; n++) {
|
||||||
print_nfc_iso14443a_info (anti[n].nai);
|
print_nfc_iso14443a_info (anti[n].nai);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,9 +94,11 @@ write_card (void)
|
||||||
uint32_t uiWritenPages = 0;
|
uint32_t uiWritenPages = 0;
|
||||||
|
|
||||||
char buffer[BUFSIZ];
|
char buffer[BUFSIZ];
|
||||||
|
bool write_otp;
|
||||||
|
|
||||||
printf ("Write OTP bytes ? [yN] ");
|
printf ("Write OTP bytes ? [yN] ");
|
||||||
fgets (buffer, BUFSIZ, stdin);
|
fgets (buffer, BUFSIZ, stdin);
|
||||||
bool write_otp = ((buffer[0] == 'y') || (buffer[0] == 'Y'));
|
write_otp = ((buffer[0] == 'y') || (buffer[0] == 'Y'));
|
||||||
|
|
||||||
/* We need to skip 3 first pages. */
|
/* We need to skip 3 first pages. */
|
||||||
printf ("Writing %d pages |", uiBlocks + 1);
|
printf ("Writing %d pages |", uiBlocks + 1);
|
||||||
|
|
|
@ -69,8 +69,17 @@ main (int argc, const char *argv[])
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < szFound; i++) {
|
for (i = 0; i < szFound; i++) {
|
||||||
pnd = nfc_connect (&(pnddDevices[i]));
|
|
||||||
|
|
||||||
|
const byte_t btPollNr = 20;
|
||||||
|
const byte_t btPeriod = 2;
|
||||||
|
const nfc_target_type_t nttMifare = NTT_MIFARE;
|
||||||
|
const size_t szTargetTypes = 1;
|
||||||
|
|
||||||
|
nfc_target_t antTargets[2];
|
||||||
|
size_t szTargetFound;
|
||||||
|
bool res;
|
||||||
|
|
||||||
|
pnd = nfc_connect (&(pnddDevices[i]));
|
||||||
|
|
||||||
if (pnd == NULL) {
|
if (pnd == NULL) {
|
||||||
ERR ("%s", "Unable to connect to NFC device.");
|
ERR ("%s", "Unable to connect to NFC device.");
|
||||||
|
@ -100,24 +109,17 @@ main (int argc, const char *argv[])
|
||||||
|
|
||||||
// bool (*transceive)(const nfc_device_spec_t nds, const byte_t* pbtTx, const size_t szTxLen, byte_t* pbtRx, size_t* pszRxLen);
|
// bool (*transceive)(const nfc_device_spec_t nds, const byte_t* pbtTx, const size_t szTxLen, byte_t* pbtRx, size_t* pszRxLen);
|
||||||
|
|
||||||
const byte_t btPollNr = 20;
|
|
||||||
const byte_t btPeriod = 2;
|
|
||||||
const nfc_target_type_t nttMifare = NTT_MIFARE;
|
|
||||||
const size_t szTargetTypes = 1;
|
|
||||||
|
|
||||||
nfc_target_t antTargets[2];
|
|
||||||
size_t szTargetFound;
|
|
||||||
|
|
||||||
if (pnd->nc == NC_PN531) {
|
if (pnd->nc == NC_PN531) {
|
||||||
// PN531 doesn't support hardware polling (InAutoPoll)
|
// PN531 doesn't support hardware polling (InAutoPoll)
|
||||||
WARN ("%s", "PN531 doesn't support hardware polling.");
|
WARN ("%s", "PN531 doesn't support hardware polling.");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
printf ("PN53x will poll during %ld ms\n", (unsigned long) btPollNr * szTargetTypes * btPeriod * 150);
|
printf ("PN53x will poll during %ld ms\n", (unsigned long) btPollNr * szTargetTypes * btPeriod * 150);
|
||||||
bool res = nfc_initiator_poll_targets (pnd, &nttMifare, 1, btPollNr, btPeriod, antTargets, &szTargetFound);
|
res = nfc_initiator_poll_targets (pnd, &nttMifare, 1, btPollNr, btPeriod, antTargets, &szTargetFound);
|
||||||
if (res) {
|
if (res) {
|
||||||
|
uint8_t n;
|
||||||
printf ("%ld target(s) have been found.\n", (unsigned long) szTargetFound);
|
printf ("%ld target(s) have been found.\n", (unsigned long) szTargetFound);
|
||||||
for (uint8_t n = 0; n < szTargetFound; n++) {
|
for (n = 0; n < szTargetFound; n++) {
|
||||||
printf ("T%d: targetType=%02x, ", n + 1, antTargets[n].ntt);
|
printf ("T%d: targetType=%02x, ", n + 1, antTargets[n].ntt);
|
||||||
printf ("targetData:\n");
|
printf ("targetData:\n");
|
||||||
print_nfc_iso14443a_info (antTargets[n].nti.nai);
|
print_nfc_iso14443a_info (antTargets[n].nti.nai);
|
||||||
|
|
|
@ -102,8 +102,8 @@ void print_nfc_iso14443a_info(const nfc_iso14443a_info_t nai)
|
||||||
nfc_device_desc_t* parse_device_desc(int argc, const char *argv[], size_t* szFound)
|
nfc_device_desc_t* parse_device_desc(int argc, const char *argv[], size_t* szFound)
|
||||||
{
|
{
|
||||||
nfc_device_desc_t* pndd = 0;
|
nfc_device_desc_t* pndd = 0;
|
||||||
*szFound = 0;
|
|
||||||
int arg;
|
int arg;
|
||||||
|
*szFound = 0;
|
||||||
|
|
||||||
// Get commandline options
|
// Get commandline options
|
||||||
for (arg=1;arg<argc;arg++) {
|
for (arg=1;arg<argc;arg++) {
|
||||||
|
@ -111,10 +111,10 @@ nfc_device_desc_t* parse_device_desc(int argc, const char *argv[], size_t* szFou
|
||||||
if (0 == strcmp(argv[arg], "--device")) {
|
if (0 == strcmp(argv[arg], "--device")) {
|
||||||
|
|
||||||
if (argc > arg+1) {
|
if (argc > arg+1) {
|
||||||
|
char buffer[256];
|
||||||
|
|
||||||
pndd = malloc(sizeof(nfc_device_desc_t));
|
pndd = malloc(sizeof(nfc_device_desc_t));
|
||||||
|
|
||||||
char buffer[256];
|
|
||||||
strncpy(buffer, argv[++arg], 256);
|
strncpy(buffer, argv[++arg], 256);
|
||||||
|
|
||||||
// Driver.
|
// Driver.
|
||||||
|
|
|
@ -43,8 +43,34 @@
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
|
||||||
|
// unistd.h is needed for usleep() fct.
|
||||||
|
#include <unistd.h>
|
||||||
|
#define delay_ms( X ) usleep( X * 1000 )
|
||||||
#else
|
#else
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
|
#define snprintf _snprintf
|
||||||
|
#define strdup _strdup
|
||||||
|
#define delay_ms( X ) Sleep( X )
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Path to the serial port is OS-dependant.
|
||||||
|
// Try to guess what we should use.
|
||||||
|
//
|
||||||
|
// XXX: Some review from users cross-compiling is welcome!
|
||||||
|
#if defined(_WIN32)
|
||||||
|
#define SERIAL_STRING "COM"
|
||||||
|
//#elif defined(__APPLE__)
|
||||||
|
// TODO: find UART connection string for PN53X device on Mac OS X
|
||||||
|
// #define SERIAL_STRING ""
|
||||||
|
#elif defined (__FreeBSD__) || defined (__OpenBSD__)
|
||||||
|
// XXX: Not tested
|
||||||
|
#define SERIAL_STRING "/dev/cuau"
|
||||||
|
#elif defined (__linux__)
|
||||||
|
#define SERIAL_STRING "/dev/ttyUSB"
|
||||||
|
#else
|
||||||
|
#error "Can't determine serial string for your system"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Define shortcut to types to make code more readable
|
// Define shortcut to types to make code more readable
|
||||||
|
|
|
@ -337,6 +337,7 @@ pn53x_InListPassiveTarget(nfc_device_t* pnd,
|
||||||
const byte_t* pbtInitiatorData, const size_t szInitiatorDataLen,
|
const byte_t* pbtInitiatorData, const size_t szInitiatorDataLen,
|
||||||
byte_t* pbtTargetsData, size_t* pszTargetsData)
|
byte_t* pbtTargetsData, size_t* pszTargetsData)
|
||||||
{
|
{
|
||||||
|
size_t szRxLen;
|
||||||
byte_t abtCmd[sizeof(pncmd_initiator_list_passive)];
|
byte_t abtCmd[sizeof(pncmd_initiator_list_passive)];
|
||||||
memcpy(abtCmd,pncmd_initiator_list_passive,sizeof(pncmd_initiator_list_passive));
|
memcpy(abtCmd,pncmd_initiator_list_passive,sizeof(pncmd_initiator_list_passive));
|
||||||
|
|
||||||
|
@ -348,7 +349,7 @@ pn53x_InListPassiveTarget(nfc_device_t* pnd,
|
||||||
if (pbtInitiatorData) memcpy(abtCmd+4,pbtInitiatorData,szInitiatorDataLen);
|
if (pbtInitiatorData) memcpy(abtCmd+4,pbtInitiatorData,szInitiatorDataLen);
|
||||||
|
|
||||||
// Try to find a tag, call the tranceive callback function of the current device
|
// Try to find a tag, call the tranceive callback function of the current device
|
||||||
size_t szRxLen = MAX_FRAME_LEN;
|
szRxLen = MAX_FRAME_LEN;
|
||||||
if(pn53x_transceive(pnd,abtCmd,4+szInitiatorDataLen,pbtTargetsData,&szRxLen)) {
|
if(pn53x_transceive(pnd,abtCmd,4+szInitiatorDataLen,pbtTargetsData,&szRxLen)) {
|
||||||
*pszTargetsData = szRxLen;
|
*pszTargetsData = szRxLen;
|
||||||
return true;
|
return true;
|
||||||
|
@ -367,6 +368,16 @@ pn53x_InDeselect(nfc_device_t* pnd, const uint8_t ui8Target)
|
||||||
return(pn53x_transceive(pnd,abtCmd,sizeof(abtCmd),NULL,NULL));
|
return(pn53x_transceive(pnd,abtCmd,sizeof(abtCmd),NULL,NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
pn53x_InRelease(nfc_device_t* pnd, const uint8_t ui8Target)
|
||||||
|
{
|
||||||
|
byte_t abtCmd[sizeof(pncmd_initiator_release)];
|
||||||
|
memcpy(abtCmd,pncmd_initiator_release,sizeof(pncmd_initiator_release));
|
||||||
|
abtCmd[2] = ui8Target;
|
||||||
|
|
||||||
|
return(pn53x_transceive(pnd,abtCmd,sizeof(abtCmd),NULL,NULL));
|
||||||
|
}
|
||||||
|
|
||||||
struct sErrorMessage {
|
struct sErrorMessage {
|
||||||
int iErrorCode;
|
int iErrorCode;
|
||||||
const char *pcErrorMsg;
|
const char *pcErrorMsg;
|
||||||
|
|
|
@ -81,6 +81,7 @@ bool pn53x_decode_target_data(const byte_t* pbtRawData, size_t szDataLen, nfc_ch
|
||||||
|
|
||||||
bool pn53x_InListPassiveTarget(nfc_device_t* pnd, const nfc_modulation_t nmInitModulation, const byte_t szMaxTargets, const byte_t* pbtInitiatorData, const size_t szInitiatorDataLen, byte_t* pbtTargetsData, size_t* pszTargetsData);
|
bool pn53x_InListPassiveTarget(nfc_device_t* pnd, const nfc_modulation_t nmInitModulation, const byte_t szMaxTargets, const byte_t* pbtInitiatorData, const size_t szInitiatorDataLen, byte_t* pbtTargetsData, size_t* pszTargetsData);
|
||||||
bool pn53x_InDeselect(nfc_device_t* pnd, const uint8_t ui8Target);
|
bool pn53x_InDeselect(nfc_device_t* pnd, const uint8_t ui8Target);
|
||||||
|
bool pn53x_InRelease(nfc_device_t* pnd, const uint8_t ui8Target);
|
||||||
|
|
||||||
const char *pn53x_strerror (const nfc_device_t *pnd);
|
const char *pn53x_strerror (const nfc_device_t *pnd);
|
||||||
|
|
||||||
|
|
|
@ -41,25 +41,6 @@
|
||||||
// Bus
|
// Bus
|
||||||
#include "uart.h"
|
#include "uart.h"
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
#define SERIAL_STRING "COM"
|
|
||||||
#define snprintf _snprintf
|
|
||||||
#define strdup _strdup
|
|
||||||
#define delay_ms( X ) Sleep( X )
|
|
||||||
#else
|
|
||||||
// unistd.h is needed for usleep() fct.
|
|
||||||
#include <unistd.h>
|
|
||||||
#define delay_ms( X ) usleep( X * 1000 )
|
|
||||||
|
|
||||||
#ifdef __APPLE__
|
|
||||||
// MacOS
|
|
||||||
#define SERIAL_STRING "/dev/tty.SLAB_USBtoUART"
|
|
||||||
#else
|
|
||||||
// *BSD, Linux and others POSIX systems
|
|
||||||
#define SERIAL_STRING "/dev/ttyUSB"
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define BUFFER_LENGTH 256
|
#define BUFFER_LENGTH 256
|
||||||
|
|
||||||
/** @def DEV_ARYGON_PROTOCOL_ARYGON_ASCII
|
/** @def DEV_ARYGON_PROTOCOL_ARYGON_ASCII
|
||||||
|
|
|
@ -38,33 +38,6 @@
|
||||||
// Bus
|
// Bus
|
||||||
#include "uart.h"
|
#include "uart.h"
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
#define SERIAL_STRING "COM"
|
|
||||||
#define snprintf _snprintf
|
|
||||||
#define strdup _strdup
|
|
||||||
#define delay_ms( X ) Sleep( X )
|
|
||||||
#else
|
|
||||||
// unistd.h is needed for usleep() fct.
|
|
||||||
#include <unistd.h>
|
|
||||||
#define delay_ms( X ) usleep( X * 1000 )
|
|
||||||
|
|
||||||
#ifdef __APPLE__
|
|
||||||
// MacOS
|
|
||||||
// TODO: find UART connection string for PN53X device on Mac OS X
|
|
||||||
#define SERIAL_STRING ""
|
|
||||||
#elif defined(__FreeBSD__)
|
|
||||||
// XXX: Not tested
|
|
||||||
#define SERIAL_STRING "/dev/cuau"
|
|
||||||
#else
|
|
||||||
// Linux and maybe some operating systems
|
|
||||||
// FIXME: We'd rather have an #elif defined(__linux__) or something like
|
|
||||||
// that and an #else that triggers an error at compile time instead
|
|
||||||
// of "falling-back" on a value that is likely to not be suitable
|
|
||||||
// for most operating systems.
|
|
||||||
#define SERIAL_STRING "/dev/ttyUSB"
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define BUFFER_LENGTH 256
|
#define BUFFER_LENGTH 256
|
||||||
|
|
||||||
#define SERIAL_DEFAULT_PORT_SPEED 115200
|
#define SERIAL_DEFAULT_PORT_SPEED 115200
|
||||||
|
|
|
@ -241,6 +241,7 @@ bool pn53x_usb_transceive(nfc_device_t* pnd, const byte_t* pbtTx, const size_t s
|
||||||
byte_t abtTx[BUFFER_LENGTH] = { 0x00, 0x00, 0xff }; // Every packet must start with "00 00 ff"
|
byte_t abtTx[BUFFER_LENGTH] = { 0x00, 0x00, 0xff }; // Every packet must start with "00 00 ff"
|
||||||
byte_t abtRx[BUFFER_LENGTH];
|
byte_t abtRx[BUFFER_LENGTH];
|
||||||
usb_spec_t* pus = (usb_spec_t*)pnd->nds;
|
usb_spec_t* pus = (usb_spec_t*)pnd->nds;
|
||||||
|
uint8_t ack_frame[] = { 0x00, 0x00, 0xff, 0x00, 0xff, 0x00 };
|
||||||
|
|
||||||
// Packet length = data length (len) + checksum (1) + end of stream marker (1)
|
// Packet length = data length (len) + checksum (1) + end of stream marker (1)
|
||||||
abtTx[3] = szTxLen;
|
abtTx[3] = szTxLen;
|
||||||
|
@ -281,7 +282,6 @@ bool pn53x_usb_transceive(nfc_device_t* pnd, const byte_t* pbtTx, const size_t s
|
||||||
PRINT_HEX("RX", abtRx,ret);
|
PRINT_HEX("RX", abtRx,ret);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uint8_t ack_frame[] = { 0x00, 0x00, 0xff, 0x00, 0xff, 0x00 };
|
|
||||||
if ((ret != 6) || (memcmp (abtRx, ack_frame, 6))) {
|
if ((ret != 6) || (memcmp (abtRx, ack_frame, 6))) {
|
||||||
DBG ("%s", "===> No ACK!!!!!!");
|
DBG ("%s", "===> No ACK!!!!!!");
|
||||||
return false;
|
return false;
|
||||||
|
|
21
libnfc/nfc.c
21
libnfc/nfc.c
|
@ -33,6 +33,13 @@
|
||||||
|
|
||||||
#include <nfc/nfc.h>
|
#include <nfc/nfc.h>
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
#define strdup _strdup
|
||||||
|
#define snprintf sprintf_s
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "chips.h"
|
#include "chips.h"
|
||||||
#include "drivers.h"
|
#include "drivers.h"
|
||||||
|
|
||||||
|
@ -176,6 +183,7 @@ nfc_device_t* nfc_connect(nfc_device_desc_t* pndd)
|
||||||
// Test if the connection was successful
|
// Test if the connection was successful
|
||||||
if (pnd != NULL)
|
if (pnd != NULL)
|
||||||
{
|
{
|
||||||
|
char* pcName;
|
||||||
DBG("[%s] has been claimed.", pnd->acName);
|
DBG("[%s] has been claimed.", pnd->acName);
|
||||||
// Great we have claimed a device
|
// Great we have claimed a device
|
||||||
pnd->pdc = &(drivers_callbacks_list[uiDriver]);
|
pnd->pdc = &(drivers_callbacks_list[uiDriver]);
|
||||||
|
@ -190,7 +198,7 @@ nfc_device_t* nfc_connect(nfc_device_desc_t* pndd)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the firmware revision to the device name, PN531 gives 2 bytes info, but PN532 and PN533 gives 4
|
// Add the firmware revision to the device name, PN531 gives 2 bytes info, but PN532 and PN533 gives 4
|
||||||
char* pcName = strdup(pnd->acName);
|
pcName = strdup(pnd->acName);
|
||||||
switch(pnd->nc) {
|
switch(pnd->nc) {
|
||||||
case NC_PN531: snprintf(pnd->acName,DEVICE_NAME_LENGTH - 1,"%s - PN531 v%d.%d",pcName,abtFw[0],abtFw[1]); break;
|
case NC_PN531: snprintf(pnd->acName,DEVICE_NAME_LENGTH - 1,"%s - PN531 v%d.%d",pcName,abtFw[0],abtFw[1]); break;
|
||||||
case NC_PN532: snprintf(pnd->acName,DEVICE_NAME_LENGTH - 1,"%s - PN532 v%d.%d (0x%02x)",pcName,abtFw[1],abtFw[2],abtFw[3]); break;
|
case NC_PN532: snprintf(pnd->acName,DEVICE_NAME_LENGTH - 1,"%s - PN532 v%d.%d (0x%02x)",pcName,abtFw[1],abtFw[2],abtFw[3]); break;
|
||||||
|
@ -420,6 +428,9 @@ nfc_initiator_select_passive_target(nfc_device_t* pnd,
|
||||||
byte_t abtInit[MAX_FRAME_LEN];
|
byte_t abtInit[MAX_FRAME_LEN];
|
||||||
size_t szInitLen;
|
size_t szInitLen;
|
||||||
|
|
||||||
|
size_t szTargetsData;
|
||||||
|
byte_t abtTargetsData[MAX_FRAME_LEN];
|
||||||
|
|
||||||
// Make sure we are dealing with a active device
|
// Make sure we are dealing with a active device
|
||||||
if (!pnd->bActive) return false;
|
if (!pnd->bActive) return false;
|
||||||
|
|
||||||
|
@ -456,9 +467,6 @@ nfc_initiator_select_passive_target(nfc_device_t* pnd,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t szTargetsData;
|
|
||||||
byte_t abtTargetsData[MAX_FRAME_LEN];
|
|
||||||
|
|
||||||
if(!pn53x_InListPassiveTarget(pnd, nmInitModulation, 1, abtInit, szInitLen, abtTargetsData, &szTargetsData)) return false;
|
if(!pn53x_InListPassiveTarget(pnd, nmInitModulation, 1, abtInit, szInitLen, abtTargetsData, &szTargetsData)) return false;
|
||||||
|
|
||||||
// Make sure one tag has been found, the PN53X returns 0x00 if none was available
|
// Make sure one tag has been found, the PN53X returns 0x00 if none was available
|
||||||
|
@ -536,14 +544,13 @@ nfc_initiator_select_passive_target(nfc_device_t* pnd,
|
||||||
|
|
||||||
bool nfc_initiator_list_passive_targets(nfc_device_t* pnd, const nfc_modulation_t nmInitModulation, nfc_target_info_t anti[], const size_t szTargets, size_t *pszTargetFound )
|
bool nfc_initiator_list_passive_targets(nfc_device_t* pnd, const nfc_modulation_t nmInitModulation, nfc_target_info_t anti[], const size_t szTargets, size_t *pszTargetFound )
|
||||||
{
|
{
|
||||||
// Let the reader only try once to find a target
|
|
||||||
nfc_configure (pnd, NDO_INFINITE_SELECT, false);
|
|
||||||
|
|
||||||
nfc_target_info_t nti;
|
nfc_target_info_t nti;
|
||||||
|
|
||||||
bool bCollisionDetected = false;
|
bool bCollisionDetected = false;
|
||||||
size_t szTargetFound = 0;
|
size_t szTargetFound = 0;
|
||||||
|
|
||||||
|
// Let the reader only try once to find a target
|
||||||
|
nfc_configure (pnd, NDO_INFINITE_SELECT, false);
|
||||||
|
|
||||||
while (nfc_initiator_select_passive_target (pnd, nmInitModulation, NULL, 0, &nti)) {
|
while (nfc_initiator_select_passive_target (pnd, nmInitModulation, NULL, 0, &nti)) {
|
||||||
nfc_initiator_deselect_target(pnd);
|
nfc_initiator_deselect_target(pnd);
|
||||||
|
|
|
@ -4,7 +4,7 @@ AC_DEFUN([LIBNFC_ARG_WITH_DRIVERS],
|
||||||
[
|
[
|
||||||
AC_MSG_CHECKING(which drivers to build)
|
AC_MSG_CHECKING(which drivers to build)
|
||||||
AC_ARG_WITH(drivers,
|
AC_ARG_WITH(drivers,
|
||||||
AC_HELP_STRING([[[--with-drivers=driver@<:@,driver...@:>@]]], [Only use specific drivers (default set)]),
|
AC_HELP_STRING([--with-drivers=driver@<:@[[[,]]]driver...@:>@], [Only use specific drivers (default set)]),
|
||||||
[ case "${withval}" in
|
[ case "${withval}" in
|
||||||
yes | no)
|
yes | no)
|
||||||
dnl ignore calls without any arguments
|
dnl ignore calls without any arguments
|
||||||
|
|
|
@ -70,9 +70,11 @@ NFCIP_TARGET_OBJ=obj\nfcip-target.obj \
|
||||||
obj\nfc-utils.obj
|
obj\nfc-utils.obj
|
||||||
|
|
||||||
NFC_MFCLASSIC_OBJ=obj\nfc-mfclassic.obj \
|
NFC_MFCLASSIC_OBJ=obj\nfc-mfclassic.obj \
|
||||||
|
obj\mifare.obj \
|
||||||
obj\nfc-utils.obj
|
obj\nfc-utils.obj
|
||||||
|
|
||||||
NFC_MFULTRALIGHT_OBJ=obj\nfc-mfultralight.obj \
|
NFC_MFULTRALIGHT_OBJ=obj\nfc-mfultralight.obj \
|
||||||
|
obj\mifare.obj \
|
||||||
obj\nfc-utils.obj
|
obj\nfc-utils.obj
|
||||||
|
|
||||||
all: obj bin $(LIBNFC_DLL) $(NFC_LIST) $(NFC_POLL) $(NFC_RELAY) $(NFCIP_INITIATOR) $(NFCIP_TARGET) $(NFC_ANTICOL) $(NFC_EMULATE) $(NFC_MFCLASSIC) $(NFC_MFULTRALIGHT)
|
all: obj bin $(LIBNFC_DLL) $(NFC_LIST) $(NFC_POLL) $(NFC_RELAY) $(NFCIP_INITIATOR) $(NFCIP_TARGET) $(NFC_ANTICOL) $(NFC_EMULATE) $(NFC_MFCLASSIC) $(NFC_MFULTRALIGHT)
|
||||||
|
@ -157,6 +159,9 @@ $(NFC_MFULTRALIGHT): $(NFC_MFULTRALIGHT_OBJ) $(LIBNFC_DLL) bin\$(DLLNAME).lib ob
|
||||||
if exist $@.manifest mt.exe -manifest $@.manifest -outputresource:$@;#1
|
if exist $@.manifest mt.exe -manifest $@.manifest -outputresource:$@;#1
|
||||||
if exist $@.manifest del $@.manifest
|
if exist $@.manifest del $@.manifest
|
||||||
|
|
||||||
|
obj\mifare.obj: ..\examples\mifare.c
|
||||||
|
$(CC) /c $(CC_OUT_OBJ)$@ $(CFLAGS) ..\examples\mifare.c
|
||||||
|
|
||||||
obj\nfc-relay.obj: ..\examples\nfc-relay.c
|
obj\nfc-relay.obj: ..\examples\nfc-relay.c
|
||||||
$(CC) /c $(CC_OUT_OBJ)$@ $(CFLAGS) ..\examples\nfc-relay.c
|
$(CC) /c $(CC_OUT_OBJ)$@ $(CFLAGS) ..\examples\nfc-relay.c
|
||||||
|
|
||||||
|
|
|
@ -7,14 +7,14 @@ EXPORTS
|
||||||
nfc_disconnect
|
nfc_disconnect
|
||||||
nfc_configure
|
nfc_configure
|
||||||
nfc_initiator_init
|
nfc_initiator_init
|
||||||
nfc_initiator_select_tag
|
nfc_initiator_select_passive_target
|
||||||
|
nfc_initiator_list_passive_targets
|
||||||
nfc_initiator_select_dep_target
|
nfc_initiator_select_dep_target
|
||||||
nfc_initiator_deselect_tag
|
nfc_initiator_deselect_target
|
||||||
nfc_initiator_poll_targets
|
nfc_initiator_poll_targets
|
||||||
nfc_initiator_transceive_bits
|
nfc_initiator_transceive_bits
|
||||||
nfc_initiator_transceive_bytes
|
nfc_initiator_transceive_bytes
|
||||||
nfc_initiator_transceive_dep_bytes
|
nfc_initiator_transceive_dep_bytes
|
||||||
nfc_initiator_mifare_cmd
|
|
||||||
nfc_target_init
|
nfc_target_init
|
||||||
nfc_target_receive_bits
|
nfc_target_receive_bits
|
||||||
nfc_target_receive_bytes
|
nfc_target_receive_bytes
|
||||||
|
|
Loading…
Add table
Reference in a new issue