diff --git a/include/nfc/Makefile.am b/include/nfc/Makefile.am index a0afe24..9e5dc78 100644 --- a/include/nfc/Makefile.am +++ b/include/nfc/Makefile.am @@ -1,5 +1,5 @@ -nfcinclude_HEADERS = nfc.h nfc-types.h nfc-messages.h +nfcinclude_HEADERS = nfc.h nfc-types.h nfcincludedir = $(includedir)/nfc EXTRA_DIST = CMakeLists.txt diff --git a/include/nfc/nfc-messages.h b/include/nfc/nfc-messages.h deleted file mode 100644 index 7ef7904..0000000 --- a/include/nfc/nfc-messages.h +++ /dev/null @@ -1,45 +0,0 @@ -/** - * Public platform independent Near Field Communication (NFC) library - * - * Copyright (C) 2009, Roel Verdult - * - * 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 - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - * - * @file nfc-messages.h - * @brief Printing macros - */ -// TODO remove this file from installed headers. -#ifndef _LIBNFC_MESSAGES_H_ -# define _LIBNFC_MESSAGES_H_ - -# include - -// #define DEBUG /* DEBUG flag can also be enabled using ./configure --enable-debug */ - -// Useful macros -# ifdef DEBUG -// #define DBG(x, args...) printf("DBG %s:%d: " x "\n", __FILE__, __LINE__,## args ) -# define DBG(...) do { \ - warnx ("DBG %s:%d", __FILE__, __LINE__); \ - warnx (" " __VA_ARGS__ ); \ - } while (0) -# else -# define DBG(...) {} -# endif - -# define WARN(...) warnx ("WARNING: " __VA_ARGS__ ) -# define ERR(...) warnx ("ERROR: " __VA_ARGS__ ) - -#endif // _LIBNFC_MESSAGES_H_ diff --git a/libnfc/Makefile.am b/libnfc/Makefile.am index d6602ed..f271671 100644 --- a/libnfc/Makefile.am +++ b/libnfc/Makefile.am @@ -3,7 +3,7 @@ SUBDIRS = chips buses drivers . # set the include path found by configure INCLUDES = $(all_includes) $(LIBNFC_CFLAGS) -noinst_HEADERS = chips.h buses.h drivers.h mirror-subr.h nfc-internal.h +noinst_HEADERS = drivers.h mirror-subr.h nfc-internal.h lib_LTLIBRARIES = libnfc.la libnfc_la_SOURCES = nfc.c iso14443-subr.c mirror-subr.c libnfc_la_LDFLAGS = -no-undefined -version-info 1:0:0 diff --git a/libnfc/buses.h b/libnfc/buses.h deleted file mode 100644 index 74be74c..0000000 --- a/libnfc/buses.h +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Public platform independent Near Field Communication (NFC) library - * - * Copyright (C) 2009, Roel Verdult - * - * 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 - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - * - * @file buses.h - * @brief - */ - -#include diff --git a/libnfc/buses/uart.c b/libnfc/buses/uart.c index 3770ccf..718291f 100644 --- a/libnfc/buses/uart.c +++ b/libnfc/buses/uart.c @@ -30,7 +30,7 @@ #include "uart.h" #include -#include +#include "libnfc/nfc-internal.h" // Test if we are dealing with unix operating systems #ifndef _WIN32 diff --git a/libnfc/chips.h b/libnfc/chips.h deleted file mode 100644 index c80980b..0000000 --- a/libnfc/chips.h +++ /dev/null @@ -1,32 +0,0 @@ -/*- - * Public platform independent Near Field Communication (NFC) library - * - * Copyright (C) 2009, 2010, 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 - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - */ - -/** - * @file chips.h - * @brief NFC chips header - */ - -#ifndef __NFC_CHIPS_H__ -# define __NFC_CHIPS_H__ - -# include - -# include "chips/pn53x.h" - -#endif // __NFC_CHIPS_H__ diff --git a/libnfc/chips/pn53x.c b/libnfc/chips/pn53x.c index 88096b1..2a75b0a 100644 --- a/libnfc/chips/pn53x.c +++ b/libnfc/chips/pn53x.c @@ -20,10 +20,12 @@ */ /** - * @file pn53x.h + * @file pn53x.c * @brief PN531, PN532 and PN533 common functions */ +/* vim:set ts=2 sw=2 et: */ + #ifdef HAVE_CONFIG_H # include "config.h" #endif // HAVE_CONFIG_H @@ -34,7 +36,6 @@ #include #include -#include #include "pn53x.h" #include "pn53x-internal.h" @@ -47,6 +48,8 @@ #include +// TODO: reorder functions according to header + // TODO: Count max bytes for InJumpForDEP reply const byte_t pncmd_initiator_jump_for_dep[68] = { 0xD4, 0x56 }; @@ -134,9 +137,9 @@ pn53x_transceive (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTx, b } // Call the send/receice callback functions of the current driver - if (!pnd->driver->send (pnd, pbtTx, szTx)) + if (!((struct pn53x_data*)(pnd->chip_data))->io->send (pnd, pbtTx, szTx)) return false; - int res = pnd->driver->receive (pnd, pbtRx, *pszRx); + int res = ((struct pn53x_data*)(pnd->chip_data))->io->receive (pnd, pbtRx, *pszRx); if (res < 0) { return false; } @@ -490,6 +493,19 @@ pn53x_decode_target_data (const byte_t * pbtRawData, size_t szRawData, pn53x_typ return true; } +bool +pn53x_initiator_init (nfc_device_t * pnd) +{ + // Set the PN53X to force 100% ASK Modified miller decoding (default for 14443A cards) + if (!pn53x_write_register (pnd, REG_CIU_TX_AUTO, SYMBOL_FORCE_100_ASK, 0x40)) + return false; + + // Configure the PN53X to be an Initiator or Reader/Writer + if (!pn53x_write_register (pnd, REG_CIU_CONTROL, SYMBOL_INITIATOR, 0x10)) + return false; + return true; +} + bool pn53x_initiator_select_passive_target (nfc_device_t * pnd, const nfc_modulation_t nm, @@ -548,6 +564,11 @@ pn53x_initiator_poll_targets (nfc_device_t * pnd, return pn53x_InAutoPoll (pnd, apttTargetTypes, szTargetTypes, btPollNr, btPeriod, pntTargets, pszTargetFound); } +bool +pn53x_initiator_deselect_target (nfc_device_t * pnd) +{ + return (pn53x_InDeselect (pnd, 0)); // 0 mean deselect all selected targets +} /** * @brief C wrapper to InListPassiveTarget command diff --git a/libnfc/chips/pn53x.h b/libnfc/chips/pn53x.h index 7cd8f0d..8095ed3 100644 --- a/libnfc/chips/pn53x.h +++ b/libnfc/chips/pn53x.h @@ -93,7 +93,6 @@ # define DENACK 0x0100/* NACK */ # define DEACKMISMATCH 0x0200/* Unexpected data */ # define DEISERRFRAME 0x0300/* Error frame */ -# define DENOTSUP 0x0400/* Not supported */ typedef enum { PN531 = 0x01, @@ -107,12 +106,17 @@ typedef enum { EXECUTE = 0x02, // Need to cancel the running command to process new one } pn53x_state; +struct pn53x_io { + bool (*send)(nfc_device_t * pnd, const byte_t * pbtData, const size_t szData); + int (*receive)(nfc_device_t * pnd, byte_t * pbtData, const size_t szDataLen); +}; + struct pn53x_data { pn53x_type type; pn53x_state state; + const struct pn53x_io * io; }; - /* PN53x specific types */ /** * @enum pn53x_modulation_t @@ -197,8 +201,7 @@ typedef enum { bool pn53x_init(nfc_device_t * pnd); bool pn53x_transceive (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTx, byte_t * pbtRx, size_t *pszRx); -bool pn53x_read_register (nfc_device_t * pnd, uint16_t ui16Reg, uint8_t * ui8Value); -bool pn53x_write_register (nfc_device_t * pnd, uint16_t ui16Reg, uint8_t ui8SymbolMask, uint8_t ui8Value); + bool pn53x_set_parameters (nfc_device_t * pnd, const uint8_t ui8Value, const bool bEnable); bool pn53x_set_tx_bits (nfc_device_t * pnd, const uint8_t ui8Bits); bool pn53x_wrap_frame (const byte_t * pbtTx, const size_t szTxBits, const byte_t * pbtTxPar, byte_t * pbtFrame, @@ -208,11 +211,14 @@ bool pn53x_unwrap_frame (const byte_t * pbtFrame, const size_t szFrameBits, b bool pn53x_decode_target_data (const byte_t * pbtRawData, size_t szRawData, pn53x_type chip_type, nfc_modulation_type_t nmt, nfc_target_info_t * pnti); +bool pn53x_read_register (nfc_device_t * pnd, uint16_t ui16Reg, uint8_t * ui8Value); +bool pn53x_write_register (nfc_device_t * pnd, uint16_t ui16Reg, uint8_t ui8SymbolMask, uint8_t ui8Value); bool pn53x_get_firmware_version (nfc_device_t * pnd, char abtFirmwareText[18]); bool pn53x_configure (nfc_device_t * pnd, const nfc_device_option_t ndo, const bool bEnable); bool pn53x_check_communication (nfc_device_t *pnd); // NFC device as Initiator functions +bool pn53x_initiator_init (nfc_device_t * pnd); bool pn53x_initiator_select_passive_target (nfc_device_t * pnd, const nfc_modulation_t nm, const byte_t * pbtInitData, const size_t szInitData, @@ -230,6 +236,8 @@ bool pn53x_initiator_transceive_bits (nfc_device_t * pnd, const byte_t * pbtT byte_t * pbtRxPar); bool pn53x_initiator_transceive_bytes (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTx, byte_t * pbtRx, size_t * pszRx); +bool pn53x_initiator_deselect_target (nfc_device_t * pnd); + // NFC device as Target functions bool pn53x_target_init (nfc_device_t * pnd, nfc_target_t * pnt, byte_t * pbtRx, size_t * pszRx); bool pn53x_target_receive_bits (nfc_device_t * pnd, byte_t * pbtRx, size_t * pszRxBits, byte_t * pbtRxPar); diff --git a/libnfc/drivers/acr122.c b/libnfc/drivers/acr122.c index 82d19e8..6114d9a 100644 --- a/libnfc/drivers/acr122.c +++ b/libnfc/drivers/acr122.c @@ -32,7 +32,7 @@ #include #include "acr122.h" -#include "../drivers.h" +#include "libnfc/drivers.h" // Bus #include @@ -54,7 +54,6 @@ #endif #include -#include #define SCARD_OPERATION_SUCCESS 0x61 #define SCARD_OPERATION_ERROR 0x63 diff --git a/libnfc/drivers/arygon.c b/libnfc/drivers/arygon.c index b149cb4..201d22b 100644 --- a/libnfc/drivers/arygon.c +++ b/libnfc/drivers/arygon.c @@ -38,7 +38,6 @@ #include #include -#include #include "libnfc/drivers.h" #include "libnfc/nfc-internal.h" @@ -174,6 +173,7 @@ arygon_connect (const nfc_device_desc_t * pndd) // The PN53x chip connected to ARYGON MCU doesn't seems to be in SLEEP mode ((struct pn53x_data*)(pnd->chip_data))->state = NORMAL; + ((struct pn53x_data*)(pnd->chip_data))->io = &arygon_tama_io; pnd->driver = &arygon_driver; // Check communication using "Reset TAMA" command @@ -449,14 +449,32 @@ arygon_ack (const nfc_device_spec_t nds) } */ +const struct pn53x_io arygon_tama_io = { + .send = arygon_tama_send, + .receive = arygon_tama_receive, +}; const struct nfc_driver_t arygon_driver = { .name = ARYGON_DRIVER_NAME, .probe = arygon_probe, .connect = arygon_connect, - .send = arygon_tama_send, - .receive = arygon_tama_receive, .disconnect = arygon_disconnect, .strerror = pn53x_strerror, + + .initiator_init = pn53x_initiator_init, + .initiator_select_passive_target = pn53x_initiator_select_passive_target, + .initiator_poll_targets = pn53x_initiator_poll_targets, + .initiator_select_dep_target = pn53x_initiator_select_dep_target, + .initiator_deselect_target = pn53x_initiator_deselect_target, + .initiator_transceive_bytes = pn53x_initiator_transceive_bytes, + .initiator_transceive_bits = pn53x_initiator_transceive_bits, + + .target_init = pn53x_target_init, + .target_send_bytes = pn53x_target_send_bytes, + .target_receive_bytes = pn53x_target_receive_bytes, + .target_send_bits = pn53x_target_send_bits, + .target_receive_bits = pn53x_target_receive_bits, + + .configure = pn53x_configure, }; diff --git a/libnfc/drivers/arygon.h b/libnfc/drivers/arygon.h index dd68106..f187c96 100644 --- a/libnfc/drivers/arygon.h +++ b/libnfc/drivers/arygon.h @@ -38,5 +38,6 @@ bool arygon_tama_send (nfc_device_t * pnd, const byte_t * pbtData, const size int arygon_tama_receive (nfc_device_t * pnd, byte_t * pbtData, const size_t szData); extern const struct nfc_driver_t arygon_driver; +extern const struct pn53x_io arygon_tama_io; #endif // ! __NFC_DRIVER_ARYGON_H__ diff --git a/libnfc/drivers/pn531_usb.c b/libnfc/drivers/pn531_usb.c index 05851e7..a15725a 100644 --- a/libnfc/drivers/pn531_usb.c +++ b/libnfc/drivers/pn531_usb.c @@ -32,8 +32,7 @@ Thanks to d18c7db and Okko for example code #include -#include "../drivers.h" -#include +#include "libnfc/drivers.h" nfc_device_desc_t * pn531_usb_pick_device (void) diff --git a/libnfc/drivers/pn532_uart.c b/libnfc/drivers/pn532_uart.c index f6479e1..7588b5a 100644 --- a/libnfc/drivers/pn532_uart.c +++ b/libnfc/drivers/pn532_uart.c @@ -35,7 +35,6 @@ #include #include -#include #include "libnfc/drivers.h" #include "libnfc/nfc-internal.h" diff --git a/libnfc/drivers/pn533_usb.c b/libnfc/drivers/pn533_usb.c index 22e079e..9f66292 100644 --- a/libnfc/drivers/pn533_usb.c +++ b/libnfc/drivers/pn533_usb.c @@ -32,8 +32,7 @@ Thanks to d18c7db and Okko for example code #include -#include "../drivers.h" -#include +#include "libnfc/drivers.h" nfc_device_desc_t * pn533_usb_pick_device (void) diff --git a/libnfc/drivers/pn53x_usb.c b/libnfc/drivers/pn53x_usb.c index 532ade4..f16052c 100644 --- a/libnfc/drivers/pn53x_usb.c +++ b/libnfc/drivers/pn53x_usb.c @@ -36,11 +36,10 @@ Thanks to d18c7db and Okko for example code #include #include -#include "../drivers.h" -#include "../chips/pn53x.h" +#include "libnfc/drivers.h" +#include "libnfc/chips/pn53x.h" #include -#include #define BUFFER_LENGTH 256 #define USB_TIMEOUT 0 diff --git a/libnfc/nfc-internal.h b/libnfc/nfc-internal.h index d0c08ac..d730a48 100644 --- a/libnfc/nfc-internal.h +++ b/libnfc/nfc-internal.h @@ -25,8 +25,16 @@ #ifndef __NFC_INTERNAL_H__ # define __NFC_INTERNAL_H__ +# include + +// TODO: Put generic errors here +# define DENOTSUP 0x0400/* Not supported */ + +/** + * @macro PRINT_HEX + * @brief Print a byte-array in hexadecimal format (only in DEBUG mode) + */ # ifdef DEBUG -//# if 1 # define PRINT_HEX(pcTag, pbtData, szBytes) do { \ size_t __szPos; \ printf(" %s: ", pcTag); \ @@ -43,14 +51,75 @@ } while (0); # endif +/** + * @macro DBG + * @brief Print a message of standard output only in DEBUG mode + */ +#ifdef DEBUG +# define DBG(...) do { \ + warnx ("DBG %s:%d", __FILE__, __LINE__); \ + warnx (" " __VA_ARGS__ ); \ + } while (0) +#else +# define DBG(...) {} +#endif + +/** + * @macro WARN + * @brief Print a warn message + */ +#ifdef DEBUG +# define WARN(...) do { \ + warnx ("WARNING %s:%d", __FILE__, __LINE__); \ + warnx (" " __VA_ARGS__ ); \ + } while (0) +#else +# define WARN(...) warnx ("WARNING: " __VA_ARGS__ ) +#endif + +/** + * @macro ERR + * @brief Print a error message + */ +#ifdef DEBUG +# define ERR(...) do { \ + warnx ("ERROR %s:%d", __FILE__, __LINE__); \ + warnx (" " __VA_ARGS__ ); \ + } while (0) +#else +# define ERR(...) warnx ("ERROR: " __VA_ARGS__ ) +#endif + +#define HAL( FUNCTION, ... ) pnd->iLastError = 0; \ + if (pnd->driver->FUNCTION) { \ + return pnd->driver->FUNCTION( __VA_ARGS__ ); \ + } else { \ + pnd->iLastError = DENOTSUP; \ + return false; \ + } + struct nfc_driver_t { const char *name; bool (*probe)(nfc_device_desc_t pnddDevices[], size_t szDevices, size_t * pszDeviceFound); nfc_device_t * (*connect)(const nfc_device_desc_t * pndd); - bool (*send)(nfc_device_t * pnd, const byte_t * pbtData, const size_t szData); - int (*receive)(nfc_device_t * pnd, byte_t * pbtData, const size_t szDataLen); void (*disconnect)(nfc_device_t * pnd); const char *(*strerror)(const nfc_device_t * pnd); + + bool (*initiator_init) (nfc_device_t * pnd); + bool (*initiator_select_passive_target) (nfc_device_t * pnd, const nfc_modulation_t nm, const byte_t * pbtInitData, const size_t szInitData, nfc_target_t * pnt); + bool (*initiator_poll_targets) (nfc_device_t * pnd, const nfc_modulation_t * pnmModulations, const size_t szModulations, const byte_t btPollNr, const byte_t btPeriod, nfc_target_t * pntTargets, size_t * pszTargetFound); + bool (*initiator_select_dep_target) (nfc_device_t * pnd, const nfc_dep_mode_t ndm, const nfc_baud_rate_t nbr, const nfc_dep_info_t * pndiInitiator, nfc_target_t * pnt); + bool (*initiator_deselect_target) (nfc_device_t * pnd); + bool (*initiator_transceive_bytes) (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTx, byte_t * pbtRx, size_t * pszRx); + bool (*initiator_transceive_bits) (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTxBits, const byte_t * pbtTxPar, byte_t * pbtRx, size_t * pszRxBits, byte_t * pbtRxPar); + + bool (*target_init) (nfc_device_t * pnd, nfc_target_t * pnt, byte_t * pbtRx, size_t * pszRx); + bool (*target_send_bytes) (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTx); + bool (*target_receive_bytes) (nfc_device_t * pnd, byte_t * pbtRx, size_t * pszRx); + bool (*target_send_bits) (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTxBits, const byte_t * pbtTxPar); + bool (*target_receive_bits) (nfc_device_t * pnd, byte_t * pbtRx, size_t * pszRxBits, byte_t * pbtRxPar); + + bool (*configure) (nfc_device_t * pnd, const nfc_device_option_t ndo, const bool bEnable); }; #endif // __NFC_INTERNAL_H__ diff --git a/libnfc/nfc.c b/libnfc/nfc.c index e22c83f..c44cd12 100644 --- a/libnfc/nfc.c +++ b/libnfc/nfc.c @@ -40,14 +40,12 @@ #include #ifdef _WIN32 -# include "../contrib/windows.h" +# include "contrib/windows.h" #endif -#include "chips.h" #include "drivers.h" #include "nfc-internal.h" -#include #include nfc_device_desc_t *nfc_pick_device (void); @@ -246,9 +244,7 @@ nfc_list_devices (nfc_device_desc_t pnddDevices[], size_t szDevices, size_t * ps bool nfc_configure (nfc_device_t * pnd, const nfc_device_option_t ndo, const bool bEnable) { - pnd->iLastError = 0; - - return pn53x_configure (pnd, ndo, bEnable); + HAL (configure, pnd, ndo, bEnable); } /** @@ -263,17 +259,7 @@ nfc_configure (nfc_device_t * pnd, const nfc_device_option_t ndo, const bool bEn bool nfc_initiator_init (nfc_device_t * pnd) { - pnd->iLastError = 0; - - // Set the PN53X to force 100% ASK Modified miller decoding (default for 14443A cards) - if (!pn53x_write_register (pnd, REG_CIU_TX_AUTO, SYMBOL_FORCE_100_ASK, 0x40)) - return false; - - // Configure the PN53X to be an Initiator or Reader/Writer - if (!pn53x_write_register (pnd, REG_CIU_CONTROL, SYMBOL_INITIATOR, 0x10)) - return false; - - return true; + HAL (initiator_init, pnd); } /** @@ -305,8 +291,6 @@ nfc_initiator_select_passive_target (nfc_device_t * pnd, byte_t abtInit[MAX(12, szInitData)]; size_t szInit; - pnd->iLastError = 0; - // TODO Put this in a function: this part is defined by ISO14443-3 (UID and Cascade levels) switch (nm.nmt) { case NMT_ISO14443A: @@ -339,7 +323,7 @@ nfc_initiator_select_passive_target (nfc_device_t * pnd, break; } - return pn53x_initiator_select_passive_target (pnd, nm, abtInit, szInit, pnt); + HAL (initiator_select_passive_target, pnd, nm, abtInit, szInit, pnt); } /** @@ -440,9 +424,7 @@ nfc_initiator_poll_targets (nfc_device_t * pnd, const byte_t btPollNr, const byte_t btPeriod, nfc_target_t * pntTargets, size_t * pszTargetFound) { - pnd->iLastError = 0; - - return pn53x_initiator_poll_targets (pnd, pnmModulations, szModulations, btPollNr, btPeriod, pntTargets, pszTargetFound); + HAL (initiator_poll_targets, pnd, pnmModulations, szModulations, btPollNr, btPeriod, pntTargets, pszTargetFound); } @@ -466,9 +448,7 @@ nfc_initiator_select_dep_target (nfc_device_t * pnd, const nfc_dep_mode_t ndm, const nfc_baud_rate_t nbr, const nfc_dep_info_t * pndiInitiator, nfc_target_t * pnt) { - pnd->iLastError = 0; - - return pn53x_initiator_select_dep_target (pnd, ndm, nbr, pndiInitiator, pnt); + HAL (initiator_select_dep_target, pnd, ndm, nbr, pndiInitiator, pnt); } /** @@ -486,9 +466,7 @@ nfc_initiator_select_dep_target (nfc_device_t * pnd, bool nfc_initiator_deselect_target (nfc_device_t * pnd) { - pnd->iLastError = 0; - - return (pn53x_InDeselect (pnd, 0)); // 0 mean deselect all selected targets + HAL (initiator_deselect_target, pnd); } /** @@ -511,9 +489,7 @@ bool nfc_initiator_transceive_bytes (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTx, byte_t * pbtRx, size_t * pszRx) { - pnd->iLastError = 0; - - return pn53x_initiator_transceive_bytes (pnd, pbtTx, szTx, pbtRx, pszRx); + HAL (initiator_transceive_bytes, pnd, pbtTx, szTx, pbtRx, pszRx) } /** @@ -555,9 +531,7 @@ bool nfc_initiator_transceive_bits (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTxBits, const byte_t * pbtTxPar, byte_t * pbtRx, size_t * pszRxBits, byte_t * pbtRxPar) { - pnd->iLastError = 0; - - return pn53x_initiator_transceive_bits (pnd, pbtTx, szTxBits, pbtTxPar, pbtRx, pszRxBits, pbtRxPar); + HAL (initiator_transceive_bits, pnd, pbtTx, szTxBits, pbtTxPar, pbtRx, pszRxBits, pbtRxPar); } /** @@ -585,9 +559,7 @@ nfc_initiator_transceive_bits (nfc_device_t * pnd, const byte_t * pbtTx, const s bool nfc_target_init (nfc_device_t * pnd, nfc_target_t * pnt, byte_t * pbtRx, size_t * pszRx) { - pnd->iLastError = 0; - - return pn53x_target_init (pnd, pnt, pbtRx, pszRx); + HAL (target_init, pnd, pnt, pbtRx, pszRx); } void @@ -613,9 +585,7 @@ nfc_abort_command (nfc_device_t * pnd) bool nfc_target_send_bytes (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTx) { - pnd->iLastError = 0; - - return pn53x_target_send_bytes (pnd, pbtTx, szTx); + HAL (target_send_bytes, pnd, pbtTx, szTx); } /** @@ -630,9 +600,7 @@ nfc_target_send_bytes (nfc_device_t * pnd, const byte_t * pbtTx, const size_t sz bool nfc_target_receive_bytes (nfc_device_t * pnd, byte_t * pbtRx, size_t * pszRx) { - pnd->iLastError = 0; - - return pn53x_target_receive_bytes (pnd, pbtRx, pszRx); + HAL (target_receive_bytes, pnd, pbtRx, pszRx); } /** @@ -645,9 +613,7 @@ nfc_target_receive_bytes (nfc_device_t * pnd, byte_t * pbtRx, size_t * pszRx) bool nfc_target_send_bits (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTxBits, const byte_t * pbtTxPar) { - pnd->iLastError = 0; - - return pn53x_target_send_bits (pnd, pbtTx, szTxBits, pbtTxPar); + HAL (target_send_bits, pnd, pbtTx, szTxBits, pbtTxPar); } /** @@ -664,9 +630,7 @@ nfc_target_send_bits (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szT bool nfc_target_receive_bits (nfc_device_t * pnd, byte_t * pbtRx, size_t * pszRxBits, byte_t * pbtRxPar) { - pnd->iLastError = 0; - - return pn53x_target_receive_bits (pnd, pbtRx, pszRxBits, pbtRxPar); + HAL (target_receive_bits, pnd, pbtRx, pszRxBits, pbtRxPar); } /**