From fd0efd4a62060373e01f28681a8e4bcc4ea7fba5 Mon Sep 17 00:00:00 2001 From: Romain Tartiere Date: Tue, 10 Aug 2010 19:50:29 +0000 Subject: [PATCH] Fix build on Microsoft Windows. Windows users: I hate you in secret. --- examples/nfc-list.c | 8 +++++--- examples/nfc-mfultralight.c | 4 +++- examples/nfc-poll.c | 24 +++++++++++++----------- examples/nfc-utils.c | 4 ++-- libnfc/chips/pn53x.c | 3 ++- libnfc/drivers/pn53x_usb.c | 2 +- libnfc/nfc.c | 21 ++++++++++++++------- windows/Makefile | 7 ++++++- windows/win32/nfc.def | 9 ++++++--- 9 files changed, 52 insertions(+), 30 deletions(-) diff --git a/examples/nfc-list.c b/examples/nfc-list.c index e8e5171..3e00620 100644 --- a/examples/nfc-list.c +++ b/examples/nfc-list.c @@ -56,12 +56,13 @@ int main(int argc, const char* argv[]) size_t szTargetFound; size_t i; nfc_target_info_t nti; + nfc_device_desc_t *pnddDevices; // 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); + pnddDevices = parse_device_desc(argc, argv, &szDeviceFound); if (argc > 1 && szDeviceFound == 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++) { + nfc_target_info_t anti[MAX_TARGET_COUNT]; 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); - nfc_target_info_t anti[MAX_TARGET_COUNT]; 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); - for(size_t n=0; nnc == NC_PN531) { // PN531 doesn't support hardware polling (InAutoPoll) WARN ("%s", "PN531 doesn't support hardware polling."); continue; } 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) { + uint8_t n; 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 ("targetData:\n"); print_nfc_iso14443a_info (antTargets[n].nti.nai); diff --git a/examples/nfc-utils.c b/examples/nfc-utils.c index 7664e7c..95b01e1 100644 --- a/examples/nfc-utils.c +++ b/examples/nfc-utils.c @@ -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* pndd = 0; - *szFound = 0; int arg; + *szFound = 0; // Get commandline options for (arg=1;arg arg+1) { + char buffer[256]; pndd = malloc(sizeof(nfc_device_desc_t)); - char buffer[256]; strncpy(buffer, argv[++arg], 256); // Driver. diff --git a/libnfc/chips/pn53x.c b/libnfc/chips/pn53x.c index 2431ea7..373adec 100644 --- a/libnfc/chips/pn53x.c +++ b/libnfc/chips/pn53x.c @@ -295,6 +295,7 @@ pn53x_InListPassiveTarget(const nfc_device_t* pnd, const byte_t* pbtInitiatorData, const size_t szInitiatorDataLen, byte_t* pbtTargetsData, size_t* pszTargetsData) { + size_t szRxLen; byte_t abtCmd[sizeof(pncmd_initiator_list_passive)]; memcpy(abtCmd,pncmd_initiator_list_passive,sizeof(pncmd_initiator_list_passive)); @@ -306,7 +307,7 @@ pn53x_InListPassiveTarget(const nfc_device_t* pnd, if (pbtInitiatorData) memcpy(abtCmd+4,pbtInitiatorData,szInitiatorDataLen); // Try to find a tag, call the tranceive callback function of the current device - size_t szRxLen = MAX_FRAME_LEN; + szRxLen = MAX_FRAME_LEN; // We can not use pn53x_transceive() because abtRx[0] gives no status info if(pnd->pdc->transceive(pnd->nds,abtCmd,4+szInitiatorDataLen,pbtTargetsData,&szRxLen)) { *pszTargetsData = szRxLen; diff --git a/libnfc/drivers/pn53x_usb.c b/libnfc/drivers/pn53x_usb.c index 7603c96..f33d060 100644 --- a/libnfc/drivers/pn53x_usb.c +++ b/libnfc/drivers/pn53x_usb.c @@ -240,6 +240,7 @@ bool pn53x_usb_transceive(const nfc_device_spec_t nds, const byte_t* pbtTx, cons byte_t abtTx[BUFFER_LENGTH] = { 0x00, 0x00, 0xff }; // Every packet must start with "00 00 ff" byte_t abtRx[BUFFER_LENGTH]; usb_spec_t* pus = (usb_spec_t*)nds; + uint8_t ack_frame[] = { 0x00, 0x00, 0xff, 0x00, 0xff, 0x00 }; // Packet length = data length (len) + checksum (1) + end of stream marker (1) abtTx[3] = szTxLen; @@ -280,7 +281,6 @@ bool pn53x_usb_transceive(const nfc_device_spec_t nds, const byte_t* pbtTx, cons PRINT_HEX("RX", abtRx,ret); #endif - uint8_t ack_frame[] = { 0x00, 0x00, 0xff, 0x00, 0xff, 0x00 }; if ((ret != 6) || (memcmp (abtRx, ack_frame, 6))) { DBG ("%s", "===> No ACK!!!!!!"); return false; diff --git a/libnfc/nfc.c b/libnfc/nfc.c index 5770953..ecc0dca 100644 --- a/libnfc/nfc.c +++ b/libnfc/nfc.c @@ -33,6 +33,13 @@ #include +#ifdef _WIN32 + #include + + #define strdup _strdup + #define snprintf sprintf_s +#endif + #include "chips.h" #include "drivers.h" @@ -176,6 +183,7 @@ nfc_device_t* nfc_connect(nfc_device_desc_t* pndd) // Test if the connection was successful if (pnd != NULL) { + char* pcName; DBG("[%s] has been claimed.", pnd->acName); // Great we have claimed a device pnd->pdc = &(drivers_callbacks_list[uiDriver]); @@ -191,7 +199,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 - char* pcName = strdup(pnd->acName); + pcName = strdup(pnd->acName); 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_PN532: snprintf(pnd->acName,DEVICE_NAME_LENGTH - 1,"%s - PN532 v%d.%d (0x%02x)",pcName,abtFw[1],abtFw[2],abtFw[3]); break; @@ -423,6 +431,9 @@ nfc_initiator_select_passive_target(const nfc_device_t* pnd, byte_t abtInit[MAX_FRAME_LEN]; size_t szInitLen; + size_t szTargetsData; + byte_t abtTargetsData[MAX_FRAME_LEN]; + // Make sure we are dealing with a active device if (!pnd->bActive) return false; @@ -458,9 +469,6 @@ nfc_initiator_select_passive_target(const nfc_device_t* pnd, szInitLen = szInitDataLen; break; } - - size_t szTargetsData; - byte_t abtTargetsData[MAX_FRAME_LEN]; if(!pn53x_InListPassiveTarget(pnd, nmInitModulation, 1, abtInit, szInitLen, abtTargetsData, &szTargetsData)) return false; @@ -539,14 +547,13 @@ nfc_initiator_select_passive_target(const 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 ) { - // Let the reader only try once to find a target - nfc_configure (pnd, NDO_INFINITE_SELECT, false); - nfc_target_info_t nti; bool bCollisionDetected = false; 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)) { nfc_initiator_deselect_target(pnd); diff --git a/windows/Makefile b/windows/Makefile index cd1ad7b..5b7788c 100644 --- a/windows/Makefile +++ b/windows/Makefile @@ -70,9 +70,11 @@ NFCIP_TARGET_OBJ=obj\nfcip-target.obj \ obj\nfc-utils.obj NFC_MFCLASSIC_OBJ=obj\nfc-mfclassic.obj \ + obj\mifare.obj \ obj\nfc-utils.obj NFC_MFULTRALIGHT_OBJ=obj\nfc-mfultralight.obj \ + obj\mifare.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) @@ -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 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 $(CC) /c $(CC_OUT_OBJ)$@ $(CFLAGS) ..\examples\nfc-relay.c @@ -259,4 +264,4 @@ install: all cd .. - \ No newline at end of file + diff --git a/windows/win32/nfc.def b/windows/win32/nfc.def index 7688af4..a71ac40 100644 --- a/windows/win32/nfc.def +++ b/windows/win32/nfc.def @@ -7,14 +7,14 @@ EXPORTS nfc_disconnect nfc_configure nfc_initiator_init - nfc_initiator_select_tag + nfc_initiator_select_passive_target + nfc_initiator_list_passive_targets nfc_initiator_select_dep_target - nfc_initiator_deselect_tag + nfc_initiator_deselect_target nfc_initiator_poll_targets nfc_initiator_transceive_bits nfc_initiator_transceive_bytes nfc_initiator_transceive_dep_bytes - nfc_initiator_mifare_cmd nfc_target_init nfc_target_receive_bits nfc_target_receive_bytes @@ -26,3 +26,6 @@ EXPORTS iso14443a_crc append_iso14443a_crc nfc_version +; FIXME: Lines bellow SUCKS! + pn53x_transceive + pncmd_initiator_exchange_data