| nfc-types.h | | nfc-types.h | |
| | | | |
| skipping to change at line 25 | | skipping to change at line 25 | |
| * | | * | |
| * You should have received a copy of the GNU Lesser General Public License | | * You should have received a copy of the GNU Lesser General Public License | |
| * along with this program. If not, see <http://www.gnu.org/licenses/> | | * along with this program. If not, see <http://www.gnu.org/licenses/> | |
| * | | * | |
| * | | * | |
| * @file nfc-types.h | | * @file nfc-types.h | |
| * @brief Define NFC types | | * @brief Define NFC types | |
| */ | | */ | |
| | | | |
| #ifndef __NFC_TYPES_H__ | | #ifndef __NFC_TYPES_H__ | |
|
| #define __NFC_TYPES_H__ | | # define __NFC_TYPES_H__ | |
| | | | |
| /** | | /** | |
| * @file types.h | | * @file types.h | |
| * @brief libnfc-defined types | | * @brief libnfc-defined types | |
| * | | * | |
| * Define libnfc specific types: typedef, enum, struct, etc. | | * Define libnfc specific types: typedef, enum, struct, etc. | |
| */ | | */ | |
|
| #include <stddef.h> | | # include <stddef.h> | |
| #include <stdint.h> | | # include <stdint.h> | |
| #include <stdbool.h> | | # include <stdbool.h> | |
| #include <stdio.h> | | # include <stdio.h> | |
| | | | |
| typedef uint8_t byte_t; | | typedef uint8_t byte_t; | |
| | | | |
| typedef enum { | | typedef enum { | |
|
| NC_PN531 = 0x10, | | NC_PN531 = 0x10, | |
| NC_PN532 = 0x20, | | NC_PN532 = 0x20, | |
| NC_PN533 = 0x30, | | NC_PN533 = 0x30, | |
| } nfc_chip_t; | | } nfc_chip_t; | |
| | | | |
|
| struct driver_callbacks; // Prototype the callback struct | | struct driver_callbacks; // Prototype the callback struct | |
| | | | |
|
| typedef void* nfc_device_spec_t; // Device connection specifi
cation | | typedef void *nfc_device_spec_t; // Device connection specification | |
| | | | |
|
| #define DEVICE_NAME_LENGTH 256 | | # define DEVICE_NAME_LENGTH 256 | |
| /** | | /** | |
| * @struct nfc_device_t | | * @struct nfc_device_t | |
| * @brief NFC device information | | * @brief NFC device information | |
| */ | | */ | |
| typedef struct { | | typedef struct { | |
| /** Callback functions for handling device specific wrapping */ | | /** Callback functions for handling device specific wrapping */ | |
|
| const struct driver_callbacks* pdc; | | const struct driver_callbacks *pdc; | |
| /** Device name string, including device wrapper firmware */ | | /** Device name string, including device wrapper firmware */ | |
|
| char acName[DEVICE_NAME_LENGTH]; | | char acName[DEVICE_NAME_LENGTH]; | |
| /** PN53X chip type, this is useful for some "bug" work-arounds */ | | /** PN53X chip type, this is useful for some "bug" work-arounds */ | |
| nfc_chip_t nc; | | nfc_chip_t nc; | |
| /** Pointer to the device connection specification */ | | /** Pointer to the device connection specification */ | |
|
| nfc_device_spec_t nds; | | nfc_device_spec_t nds; | |
| /** This represents if the PN53X device was initialized succesful */ | | /** This represents if the PN53X device was initialized succesful */ | |
|
| bool bActive; | | bool bActive; | |
| /** Is the crc automaticly added, checked and removed from the frames */ | | /** Is the crc automaticly added, checked and removed from the frames */ | |
|
| bool bCrc; | | bool bCrc; | |
| /** Does the PN53x chip handles parity bits, all parities are handled as da
ta */ | | /** Does the PN53x chip handles parity bits, all parities are handled as da
ta */ | |
|
| bool bPar; | | bool bPar; | |
| | | /** Should the PN53x chip handle frames encapsulation and chaining */ | |
| | | bool bEasyFraming; | |
| /** The last tx bits setting, we need to reset this if it does not apply an
ymore */ | | /** The last tx bits setting, we need to reset this if it does not apply an
ymore */ | |
| uint8_t ui8TxBits; | | uint8_t ui8TxBits; | |
|
| | | /** Last error reported by the PCD / encountered by the PCD driver | |
| | | * MSB LSB | |
| | | * | 00 | 00 | | |
| | | * || || | |
| | | * || ++----- Chip-level error (as reported by the PCD) | |
| | | * |+---------- Driver-level specific error | |
| | | * +----------- Driver-level general error (common to all drivers) | |
| | | */ | |
| | | int iLastError; | |
| } nfc_device_t; | | } nfc_device_t; | |
| | | | |
| /** | | /** | |
| * @struct nfc_device_desc_t | | * @struct nfc_device_desc_t | |
| * @brief NFC device description | | * @brief NFC device description | |
| * | | * | |
| * This struct is used to try to connect to a specified nfc device when nfc
_connect(...) | | * This struct is used to try to connect to a specified nfc device when nfc
_connect(...) | |
| */ | | */ | |
| typedef struct { | | typedef struct { | |
| /** Device name (e.g. "ACS ACR 38U-CCID 00 00") */ | | /** Device name (e.g. "ACS ACR 38U-CCID 00 00") */ | |
|
| char acDevice[DEVICE_NAME_LENGTH]; | | char acDevice[DEVICE_NAME_LENGTH]; | |
| /** Driver name (e.g. "PN532_UART")*/ | | /** Driver name (e.g. "PN532_UART")*/ | |
|
| char* pcDriver; | | char *pcDriver; | |
| /** Port (e.g. "/dev/ttyUSB0") */ | | /** Port (e.g. "/dev/ttyUSB0") */ | |
|
| char* pcPort; | | char *pcPort; | |
| /** Port speed (e.g. "115200") */ | | /** Port speed (e.g. "115200") */ | |
| uint32_t uiSpeed; | | uint32_t uiSpeed; | |
| /** Device index for backward compatibility (used to choose one specific
device in USB or PSCS devices list) */ | | /** Device index for backward compatibility (used to choose one specific
device in USB or PSCS devices list) */ | |
| uint32_t uiBusIndex; | | uint32_t uiBusIndex; | |
| } nfc_device_desc_t; | | } nfc_device_desc_t; | |
| | | | |
| /** | | /** | |
|
| | | * @struct chip_callbacks | |
| | | * @brief Functions for chip specific functions. | |
| | | */ | |
| | | struct chip_callbacks { | |
| | | /** Error lookup */ | |
| | | const char *(*strerror) (const nfc_device_t * pnd); | |
| | | }; | |
| | | | |
| | | /** | |
| * @struct driver_callbacks | | * @struct driver_callbacks | |
| * @brief Generic structure to handle NFC device functions. | | * @brief Generic structure to handle NFC device functions. | |
| */ | | */ | |
| struct driver_callbacks { | | struct driver_callbacks { | |
| /** Driver name */ | | /** Driver name */ | |
|
| const char* acDriver; | | const char *acDriver; | |
| | | /** Chip specific callback functions */ | |
| | | const struct chip_callbacks *pcc; | |
| /** Pick devices callback */ | | /** Pick devices callback */ | |
|
| nfc_device_desc_t *(*pick_device)(void); | | nfc_device_desc_t *(*pick_device) (void); | |
| /** List devices callback */ | | /** List devices callback */ | |
|
| bool (*list_devices)(nfc_device_desc_t pnddDevices[], size_t szDevices, s
ize_t *pszDeviceFound); | | bool (*list_devices) (nfc_device_desc_t pnddDevices[], size_t szD
evices, size_t * pszDeviceFound); | |
| /** Connect callback */ | | /** Connect callback */ | |
|
| nfc_device_t* (*connect)(const nfc_device_desc_t* pndd); | | nfc_device_t *(*connect) (const nfc_device_desc_t * pndd); | |
| /** Transceive callback */ | | /** Transceive callback */ | |
|
| bool (*transceive)(const nfc_device_spec_t nds, const byte_t* pbtTx, cons | | | |
| t size_t szTxLen, byte_t* pbtRx, size_t* pszRxLen); | | bool (*transceive) (nfc_device_t * pnd, const byte_t * pbtTx, const siz | |
| | | e_t szTxLen, byte_t * pbtRx, | |
| | | size_t * pszRxLen); | |
| /** Disconnect callback */ | | /** Disconnect callback */ | |
|
| void (*disconnect)(nfc_device_t* pnd); | | void (*disconnect) (nfc_device_t * pnd); | |
| }; | | }; | |
| | | | |
| // Compiler directive, set struct alignment to 1 byte_t for compatibility | | // Compiler directive, set struct alignment to 1 byte_t for compatibility | |
|
| #pragma pack(1) | | # pragma pack(1) | |
| | | | |
| /** | | /** | |
| * @enum nfc_device_option_t | | * @enum nfc_device_option_t | |
| * @brief NFC device option | | * @brief NFC device option | |
| */ | | */ | |
| typedef enum { | | typedef enum { | |
| /** Let the PN53X chip handle the CRC bytes. This means that the chip appen
ds the CRC bytes to the frames that are transmitted. It will parse the last
bytes from received frames as incoming CRC bytes. They will be verified ag
ainst the used modulation and protocol. If an frame is expected with incorr
ect CRC bytes this option should be disabled. Example frames where this is
useful are the ATQA and UID+BCC that are transmitted without CRC bytes duri
ng the anti-collision phase of the ISO14443-A protocol. */ | | /** Let the PN53X chip handle the CRC bytes. This means that the chip appen
ds the CRC bytes to the frames that are transmitted. It will parse the last
bytes from received frames as incoming CRC bytes. They will be verified ag
ainst the used modulation and protocol. If an frame is expected with incorr
ect CRC bytes this option should be disabled. Example frames where this is
useful are the ATQA and UID+BCC that are transmitted without CRC bytes duri
ng the anti-collision phase of the ISO14443-A protocol. */ | |
|
| NDO_HANDLE_CRC = 0x00, | | NDO_HANDLE_CRC = 0x00, | |
| /** Parity bits in the network layer of ISO14443-A are by default generated
and validated in the PN53X chip. This is a very convenient feature. On cer
tain times though it is useful to get full control of the transmitted data.
The proprietary MIFARE Classic protocol uses for example custom (encrypted
) parity bits. For interoperability it is required to be completely compati
ble, including the arbitrary parity bits. When this option is disabled, the
functions to communicating bits should be used. */ | | /** Parity bits in the network layer of ISO14443-A are by default generated
and validated in the PN53X chip. This is a very convenient feature. On cer
tain times though it is useful to get full control of the transmitted data.
The proprietary MIFARE Classic protocol uses for example custom (encrypted
) parity bits. For interoperability it is required to be completely compati
ble, including the arbitrary parity bits. When this option is disabled, the
functions to communicating bits should be used. */ | |
|
| NDO_HANDLE_PARITY = 0x01, | | NDO_HANDLE_PARITY = 0x01, | |
| /** This option can be used to enable or disable the electronic field of th
e NFC device. */ | | /** This option can be used to enable or disable the electronic field of th
e NFC device. */ | |
|
| NDO_ACTIVATE_FIELD = 0x10, | | NDO_ACTIVATE_FIELD = 0x10, | |
| /** The internal CRYPTO1 co-processor can be used to transmit messages encr
ypted. This option is automatically activated after a successful MIFARE Cla
ssic authentication. */ | | /** The internal CRYPTO1 co-processor can be used to transmit messages encr
ypted. This option is automatically activated after a successful MIFARE Cla
ssic authentication. */ | |
|
| NDO_ACTIVATE_CRYPTO1 = 0x11, | | NDO_ACTIVATE_CRYPTO1 = 0x11, | |
| /** The default configuration defines that the PN53X chip will try indefini
tely to invite a tag in the field to respond. This could be desired when it
is certain a tag will enter the field. On the other hand, when this is unc
ertain, it will block the application. This option could best be compared t
o the (NON)BLOCKING option used by (socket)network programming. */ | | /** The default configuration defines that the PN53X chip will try indefini
tely to invite a tag in the field to respond. This could be desired when it
is certain a tag will enter the field. On the other hand, when this is unc
ertain, it will block the application. This option could best be compared t
o the (NON)BLOCKING option used by (socket)network programming. */ | |
|
| NDO_INFINITE_SELECT = 0x20, | | NDO_INFINITE_SELECT = 0x20, | |
| /** If this option is enabled, frames that carry less than 4 bits are allow
ed. According to the standards these frames should normally be handles as i
nvalid frames. */ | | /** If this option is enabled, frames that carry less than 4 bits are allow
ed. According to the standards these frames should normally be handles as i
nvalid frames. */ | |
|
| NDO_ACCEPT_INVALID_FRAMES = 0x30, | | NDO_ACCEPT_INVALID_FRAMES = 0x30, | |
| /** If the NFC device should only listen to frames, it could be useful to l
et it gather multiple frames in a sequence. They will be stored in the inte
rnal FIFO of the PN53X chip. This could be retrieved by using the receive d
ata functions. Note that if the chip runs out of bytes (FIFO = 64 bytes lon
g), it will overwrite the first received frames, so quick retrieving of the
received data is desirable. */ | | /** If the NFC device should only listen to frames, it could be useful to l
et it gather multiple frames in a sequence. They will be stored in the inte
rnal FIFO of the PN53X chip. This could be retrieved by using the receive d
ata functions. Note that if the chip runs out of bytes (FIFO = 64 bytes lon
g), it will overwrite the first received frames, so quick retrieving of the
received data is desirable. */ | |
|
| NDO_ACCEPT_MULTIPLE_FRAMES = 0x31 | | NDO_ACCEPT_MULTIPLE_FRAMES = 0x31, | |
| | | /** This option can be used to enable or disable the auto-switching mode to | |
| | | ISO14443-4 is device is compliant */ | |
| | | NDO_AUTO_ISO14443_4 = 0x40, | |
| | | /** Use automatic frames encapsulation and chaining. */ | |
| | | NDO_EASY_FRAMING = 0x41, | |
| } nfc_device_option_t; | | } nfc_device_option_t; | |
| | | | |
| //////////////////////////////////////////////////////////////////// | | //////////////////////////////////////////////////////////////////// | |
| // nfc_reader_list_passive - using InListPassiveTarget | | // nfc_reader_list_passive - using InListPassiveTarget | |
| | | | |
| /** | | /** | |
| * @enum nfc_modulation_t | | * @enum nfc_modulation_t | |
| * @brief NFC modulation | | * @brief NFC modulation | |
| */ | | */ | |
| typedef enum { | | typedef enum { | |
| /** ISO14443-A (NXP MIFARE) http://en.wikipedia.org/wiki/MIFARE */ | | /** ISO14443-A (NXP MIFARE) http://en.wikipedia.org/wiki/MIFARE */ | |
|
| NM_ISO14443A_106 = 0x00, | | NM_ISO14443A_106 = 0x00, | |
| /** JIS X 6319-4 (Sony Felica) http://en.wikipedia.org/wiki/FeliCa */ | | /** JIS X 6319-4 (Sony Felica) http://en.wikipedia.org/wiki/FeliCa */ | |
|
| NM_FELICA_212 = 0x01, | | NM_FELICA_212 = 0x01, | |
| /** JIS X 6319-4 (Sony Felica) http://en.wikipedia.org/wiki/FeliCa */ | | /** JIS X 6319-4 (Sony Felica) http://en.wikipedia.org/wiki/FeliCa */ | |
|
| NM_FELICA_424 = 0x02, | | NM_FELICA_424 = 0x02, | |
| /** ISO14443-B http://en.wikipedia.org/wiki/ISO/IEC_14443 */ | | /** ISO14443-B http://en.wikipedia.org/wiki/ISO/IEC_14443 */ | |
|
| NM_ISO14443B_106 = 0x03, | | NM_ISO14443B_106 = 0x03, | |
| /** Jewel Topaz (Innovision Research & Development) */ | | /** Jewel Topaz (Innovision Research & Development) */ | |
|
| NM_JEWEL_106 = 0x04, | | NM_JEWEL_106 = 0x04, | |
| /** Active DEP */ | | /** Active DEP */ | |
| NM_ACTIVE_DEP = 0x05, | | NM_ACTIVE_DEP = 0x05, | |
| /** Passive DEP */ | | /** Passive DEP */ | |
| NM_PASSIVE_DEP = 0x06 | | NM_PASSIVE_DEP = 0x06 | |
| } nfc_modulation_t; | | } nfc_modulation_t; | |
| | | | |
| /** | | /** | |
| * @struct nfc_dep_info_t | | * @struct nfc_dep_info_t | |
| * @brief NFC tag information in Data Exchange Protocol | | * @brief NFC tag information in Data Exchange Protocol | |
| */ | | */ | |
| typedef struct { | | typedef struct { | |
|
| byte_t NFCID3i[10]; | | byte_t NFCID3i[10]; | |
| byte_t btDID; | | byte_t btDID; | |
| byte_t btBSt; | | byte_t btBSt; | |
| byte_t btBRt; | | byte_t btBRt; | |
| } nfc_dep_info_t; | | } nfc_dep_info_t; | |
| | | | |
| /** | | /** | |
| * @struct nfc_iso14443a_info_t | | * @struct nfc_iso14443a_info_t | |
| * @brief NFC ISO14443A tag (MIFARE) information | | * @brief NFC ISO14443A tag (MIFARE) information | |
| */ | | */ | |
| typedef struct { | | typedef struct { | |
|
| byte_t abtAtqa[2]; | | byte_t abtAtqa[2]; | |
| byte_t btSak; | | byte_t btSak; | |
| size_t szUidLen; | | size_t szUidLen; | |
| byte_t abtUid[10]; | | byte_t abtUid[10]; | |
| size_t szAtsLen; | | size_t szAtsLen; | |
| byte_t abtAts[36]; | | byte_t abtAts[36]; | |
| } nfc_iso14443a_info_t; | | } nfc_iso14443a_info_t; | |
| | | | |
| /** | | /** | |
| * @struct nfc_felica_info_t | | * @struct nfc_felica_info_t | |
| * @brief NFC FeLiCa tag information | | * @brief NFC FeLiCa tag information | |
| */ | | */ | |
| typedef struct { | | typedef struct { | |
|
| size_t szLen; | | size_t szLen; | |
| byte_t btResCode; | | byte_t btResCode; | |
| byte_t abtId[8]; | | byte_t abtId[8]; | |
| byte_t abtPad[8]; | | byte_t abtPad[8]; | |
| byte_t abtSysCode[2]; | | byte_t abtSysCode[2]; | |
| } nfc_felica_info_t; | | } nfc_felica_info_t; | |
| | | | |
| /** | | /** | |
| * @struct nfc_iso14443b_info_t | | * @struct nfc_iso14443b_info_t | |
| * @brief NFC ISO14443B tag information | | * @brief NFC ISO14443B tag information | |
| */ | | */ | |
| typedef struct { | | typedef struct { | |
|
| byte_t abtAtqb[12]; | | byte_t abtAtqb[12]; | |
| byte_t abtId[4]; | | byte_t abtId[4]; | |
| byte_t btParam1; | | byte_t btParam1; | |
| byte_t btParam2; | | byte_t btParam2; | |
| byte_t btParam3; | | byte_t btParam3; | |
| byte_t btParam4; | | byte_t btParam4; | |
| byte_t btCid; | | byte_t btCid; | |
| size_t szInfLen; | | size_t szInfLen; | |
| byte_t abtInf[64]; | | byte_t abtInf[64]; | |
| } nfc_iso14443b_info_t; | | } nfc_iso14443b_info_t; | |
| | | | |
| /** | | /** | |
| * @struct nfc_jewel_info_t | | * @struct nfc_jewel_info_t | |
| * @brief NFC Jewel tag information | | * @brief NFC Jewel tag information | |
| */ | | */ | |
| typedef struct { | | typedef struct { | |
|
| byte_t btSensRes[2]; | | byte_t btSensRes[2]; | |
| byte_t btId[4]; | | byte_t btId[4]; | |
| } nfc_jewel_info_t; | | } nfc_jewel_info_t; | |
| | | | |
| /** | | /** | |
| * @union nfc_target_info_t | | * @union nfc_target_info_t | |
| * @brief Union between all kind of tags information structures. | | * @brief Union between all kind of tags information structures. | |
| */ | | */ | |
| typedef union { | | typedef union { | |
| nfc_iso14443a_info_t nai; | | nfc_iso14443a_info_t nai; | |
| nfc_felica_info_t nfi; | | nfc_felica_info_t nfi; | |
| nfc_iso14443b_info_t nbi; | | nfc_iso14443b_info_t nbi; | |
| nfc_jewel_info_t nji; | | nfc_jewel_info_t nji; | |
| nfc_dep_info_t ndi; | | nfc_dep_info_t ndi; | |
| } nfc_target_info_t; | | } nfc_target_info_t; | |
| | | | |
|
| //////////////////////////////////////////////////////////////////// | | /** | |
| // InDataExchange, MIFARE Classic card | | * @enum nfc_target_type_t | |
| | | * @brief NFC target type enumeration | |
| | | */ | |
| typedef enum { | | typedef enum { | |
|
| MC_AUTH_A = 0x60, | | /** Generic passive 106 kbps (ISO/IEC14443-4A, mifare, DEP) */ | |
| MC_AUTH_B = 0x61, | | NTT_GENERIC_PASSIVE_106 = 0x00, | |
| MC_READ = 0x30, | | /** Generic passive 212 kbps (FeliCa, DEP) */ | |
| MC_WRITE = 0xA0, | | NTT_GENERIC_PASSIVE_212 = 0x01, | |
| MC_TRANSFER = 0xB0, | | /** Generic passive 424 kbps (FeliCa, DEP) */ | |
| MC_DECREMENT = 0xC0, | | NTT_GENERIC_PASSIVE_424 = 0x02, | |
| MC_INCREMENT = 0xC1, | | /** Passive 106 kbps ISO/IEC14443-4B */ | |
| MC_STORE = 0xC2 | | NTT_ISO14443B_106 = 0x03, | |
| }mifare_cmd; | | /** Innovision Jewel tag */ | |
| | | NTT_JEWEL_106 = 0x04, | |
| // MIFARE Classic command params | | /** mifare card */ | |
| typedef struct { | | NTT_MIFARE = 0x10, | |
| byte_t abtKey[6]; | | /** FeliCa 212 kbps card */ | |
| byte_t abtUid[4]; | | NTT_FELICA_212 = 0x11, | |
| }mifare_param_auth; | | /** FeliCa 424 kbps card */ | |
| | | NTT_FELICA_424 = 0x12, | |
| typedef struct { | | /** Passive 106 kbps ISO/IEC14443-4A */ | |
| byte_t abtData[16]; | | NTT_ISO14443A_106 = 0x20, | |
| }mifare_param_data; | | /** Passive 106 kbps ISO/IEC14443-4B with TCL flag */ | |
| | | NTT_ISO14443B_TCL_106 = 0x23, | |
| | | /** DEP passive 106 kbps */ | |
| | | NTT_DEP_PASSIVE_106 = 0x40, | |
| | | /** DEP passive 212 kbps */ | |
| | | NTT_DEP_PASSIVE_212 = 0x41, | |
| | | /** DEP passive 424 kbps */ | |
| | | NTT_DEP_PASSIVE_424 = 0x42, | |
| | | /** DEP active 106 kbps */ | |
| | | NTT_DEP_ACTIVE_106 = 0x80, | |
| | | /** DEP active 212 kbps */ | |
| | | NTT_DEP_ACTIVE_212 = 0x81, | |
| | | /** DEP active 424 kbps */ | |
| | | NTT_DEP_ACTIVE_424 = 0x82, | |
| | | } nfc_target_type_t; | |
| | | | |
|
| | | /** | |
| | | * @struct nfc_target_t | |
| | | * @brief NFC target structure | |
| | | */ | |
| typedef struct { | | typedef struct { | |
|
| byte_t abtValue[4]; | | nfc_target_info_t nti; | |
| }mifare_param_value; | | nfc_target_type_t ntt; | |
| | | } nfc_target_t; | |
| typedef union { | | | |
| mifare_param_auth mpa; | | | |
| mifare_param_data mpd; | | | |
| mifare_param_value mpv; | | | |
| }mifare_param; | | | |
| | | | |
| // Reset struct alignment to default | | // Reset struct alignment to default | |
|
| #pragma pack() | | # pragma pack() | |
| | | | |
| #endif // _LIBNFC_TYPES_H_ | | #endif // _LIBNFC_TYPES_H_ | |
| | | | |
End of changes. 46 change blocks. |
| 97 lines changed or deleted | | 140 lines changed or added | |
|
| nfc.h | | nfc.h | |
| | | | |
| skipping to change at line 28 | | skipping to change at line 28 | |
| */ | | */ | |
| | | | |
| /** | | /** | |
| * @file nfc.h | | * @file nfc.h | |
| * @brief libnfc interface | | * @brief libnfc interface | |
| * | | * | |
| * Provide all usefull functions (API) to handle NFC devices. | | * Provide all usefull functions (API) to handle NFC devices. | |
| */ | | */ | |
| | | | |
| #ifndef _LIBNFC_H_ | | #ifndef _LIBNFC_H_ | |
|
| #define _LIBNFC_H_ | | # define _LIBNFC_H_ | |
| | | | |
|
| #include <stdint.h> | | # include <stdint.h> | |
| #include <stdbool.h> | | # include <stdbool.h> | |
| | | | |
|
| #ifdef _WIN32 | | # ifdef _WIN32 | |
| /* Windows platform */ | | /* Windows platform */ | |
|
| #ifndef _WINDLL | | # ifndef _WINDLL | |
| /* CMake compilation */ | | /* CMake compilation */ | |
|
| #ifdef nfc_EXPORTS | | # ifdef nfc_EXPORTS | |
| #define NFC_EXPORT __declspec(dllexport) | | # define NFC_EXPORT __declspec(dllexport) | |
| #else /* nfc_EXPORTS */ | | # else | |
| #define NFC_EXPORT __declspec(dllimport) | | /* nfc_EXPORTS */ | |
| #endif /* nfc_EXPORTS */ | | # define NFC_EXPORT __declspec(dllimport) | |
| #else /* _WINDLL */ | | # endif | |
| | | /* nfc_EXPORTS */ | |
| | | # else | |
| | | /* _WINDLL */ | |
| /* Manual makefile */ | | /* Manual makefile */ | |
|
| #define NFC_EXPORT | | # define NFC_EXPORT | |
| #endif /* _WINDLL */ | | # endif | |
| #else /* _WIN32 */ | | /* _WINDLL */ | |
| #define NFC_EXPORT | | # else | |
| #endif /* _WIN32 */ | | /* _WIN32 */ | |
| | | # define NFC_EXPORT | |
| | | # endif | |
| | | /* _WIN32 */ | |
| | | | |
|
| #include <nfc/nfc-types.h> | | # include <nfc/nfc-types.h> | |
| | | | |
|
| #ifdef __cplusplus | | # ifdef __cplusplus | |
| extern "C" { | | extern "C" { | |
| #endif // __cplusplus | | # endif // __cplusplus | |
| | | | |
| /* NFC Device/Hardware manipulation */ | | /* NFC Device/Hardware manipulation */ | |
|
| NFC_EXPORT void nfc_list_devices(nfc_device_desc_t pnddDevices[], size_t sz | | NFC_EXPORT void nfc_list_devices (nfc_device_desc_t pnddDevices[], size_t | |
| Devices, size_t *pszDeviceFound); | | szDevices, size_t * pszDeviceFound); | |
| NFC_EXPORT nfc_device_t* nfc_connect(nfc_device_desc_t* pndd); | | NFC_EXPORT nfc_device_t *nfc_connect (nfc_device_desc_t * pndd); | |
| NFC_EXPORT void nfc_disconnect(nfc_device_t* pnd); | | NFC_EXPORT void nfc_disconnect (nfc_device_t * pnd); | |
| NFC_EXPORT bool nfc_configure(nfc_device_t* pnd, const nfc_device_option_t | | NFC_EXPORT bool nfc_configure (nfc_device_t * pnd, const nfc_device_optio | |
| ndo, const bool bEnable); | | n_t ndo, const bool bEnable); | |
| | | | |
| /* NFC initiator: act as "reader" */ | | /* NFC initiator: act as "reader" */ | |
|
| NFC_EXPORT bool nfc_initiator_init(const nfc_device_t* pnd); | | NFC_EXPORT bool nfc_initiator_init (nfc_device_t * pnd); | |
| NFC_EXPORT bool nfc_initiator_select_tag(const nfc_device_t* pnd, const nfc | | NFC_EXPORT bool nfc_initiator_select_passive_target (nfc_device_t * pnd, | |
| _modulation_t nmInitModulation, const byte_t* pbtInitData, const size_t szI | | const nfc_modulation_t nmInitModulation, | |
| nitDataLen, nfc_target_info_t* pti); | | const byte_t * pbtIn | |
| NFC_EXPORT bool nfc_initiator_select_dep_target(const nfc_device_t* pnd, co | | itData, const size_t szInitDataLen, | |
| nst nfc_modulation_t nmInitModulation, const byte_t* pbtPidData, const size | | nfc_target_info_t * | |
| _t szPidDataLen, const byte_t* pbtNFCID3i, const size_t szNFCID3iDataLen, c | | pti); | |
| onst byte_t *pbtGbData, const size_t szGbDataLen, nfc_target_info_t* pti); | | NFC_EXPORT bool nfc_initiator_list_passive_targets (nfc_device_t * pnd, c | |
| NFC_EXPORT bool nfc_initiator_deselect_tag(const nfc_device_t* pnd); | | onst nfc_modulation_t nmInitModulation, | |
| NFC_EXPORT bool nfc_initiator_transceive_bits(const nfc_device_t* pnd, cons | | nfc_target_info_t ant | |
| t byte_t* pbtTx, const size_t szTxBits, const byte_t* pbtTxPar, byte_t* pbt | | i[], const size_t szTargets, | |
| Rx, size_t* pszRxBits, byte_t* pbtRxPar); | | size_t * pszTargetFou | |
| NFC_EXPORT bool nfc_initiator_transceive_bytes(const nfc_device_t* pnd, con | | nd); | |
| st byte_t* pbtTx, const size_t szTxLen, byte_t* pbtRx, size_t* pszRxLen); | | NFC_EXPORT bool nfc_initiator_poll_targets (nfc_device_t * pnd, const nfc | |
| NFC_EXPORT bool nfc_initiator_transceive_dep_bytes(const nfc_device_t* pnd, | | _target_type_t * pnttTargetTypes, | |
| const byte_t* pbtTx, const size_t szTxLen, byte_t* pbtRx, size_t* pszRxLen | | const size_t szTargetTypes, c | |
| ); | | onst byte_t btPollNr, const byte_t btPeriod, | |
| NFC_EXPORT bool nfc_initiator_mifare_cmd(const nfc_device_t* pnd, const mif | | nfc_target_t * pntTargets, si | |
| are_cmd mc, const uint8_t ui8Block, mifare_param* pmp); | | ze_t * pszTargetFound); | |
| | | NFC_EXPORT bool nfc_initiator_select_dep_target (nfc_device_t * pnd, cons | |
| | | t nfc_modulation_t nmInitModulation, | |
| | | const byte_t * pbtPidDat | |
| | | a, const size_t szPidDataLen, | |
| | | const byte_t * pbtNFCID3 | |
| | | i, const size_t szNFCID3iDataLen, | |
| | | const byte_t * pbtGbData | |
| | | , const size_t szGbDataLen, | |
| | | nfc_target_info_t * pti) | |
| | | ; | |
| | | NFC_EXPORT bool nfc_initiator_deselect_target (nfc_device_t * pnd); | |
| | | NFC_EXPORT bool nfc_initiator_transceive_bits (nfc_device_t * pnd, const | |
| | | byte_t * pbtTx, const size_t szTxBits, | |
| | | const byte_t * pbtTxPar, b | |
| | | yte_t * pbtRx, size_t * pszRxBits, | |
| | | byte_t * pbtRxPar); | |
| | | NFC_EXPORT bool nfc_initiator_transceive_bytes (nfc_device_t * pnd, const | |
| | | byte_t * pbtTx, const size_t szTxLen, | |
| | | byte_t * pbtRx, size_t * | |
| | | pszRxLen); | |
| | | | |
| /* NFC target: act as tag (i.e. MIFARE Classic) or NFC target device. */ | | /* NFC target: act as tag (i.e. MIFARE Classic) or NFC target device. */ | |
|
| NFC_EXPORT bool nfc_target_init(const nfc_device_t* pnd, byte_t* pbtRx, siz | | NFC_EXPORT bool nfc_target_init (nfc_device_t * pnd, byte_t * pbtRx, size | |
| e_t* pszRxBits); | | _t * pszRxBits); | |
| NFC_EXPORT bool nfc_target_receive_bits(const nfc_device_t* pnd, byte_t* pb | | NFC_EXPORT bool nfc_target_receive_bits (nfc_device_t * pnd, byte_t * pbt | |
| tRx, size_t* pszRxBits, byte_t* pbtRxPar); | | Rx, size_t * pszRxBits, byte_t * pbtRxPar); | |
| NFC_EXPORT bool nfc_target_receive_bytes(const nfc_device_t* pnd, byte_t* p | | NFC_EXPORT bool nfc_target_receive_bytes (nfc_device_t * pnd, byte_t * pb | |
| btRx, size_t* pszRxLen); | | tRx, size_t * pszRxLen); | |
| NFC_EXPORT bool nfc_target_receive_dep_bytes(const nfc_device_t* pnd, byte_ | | NFC_EXPORT bool nfc_target_send_bits (nfc_device_t * pnd, const byte_t * | |
| t* pbtRx, size_t* pszRxLen); | | pbtTx, const size_t szTxBits, | |
| NFC_EXPORT bool nfc_target_send_bits(const nfc_device_t* pnd, const byte_t* | | const byte_t * pbtTxPar); | |
| pbtTx, const size_t szTxBits, const byte_t* pbtTxPar); | | NFC_EXPORT bool nfc_target_send_bytes (nfc_device_t * pnd, const byte_t * | |
| NFC_EXPORT bool nfc_target_send_bytes(const nfc_device_t* pnd, const byte_t | | pbtTx, const size_t szTxLen); | |
| * pbtTx, const size_t szTxLen); | | | |
| NFC_EXPORT bool nfc_target_send_dep_bytes(const nfc_device_t* pnd, const by | | /* Error reporting */ | |
| te_t* pbtTx, const size_t szTxLen); | | NFC_EXPORT const char *nfc_strerror (const nfc_device_t * pnd); | |
| | | NFC_EXPORT int nfc_strerror_r (const nfc_device_t * pnd, char *pcStrErrBu | |
| | | f, size_t szBufLen); | |
| | | NFC_EXPORT void nfc_perror (const nfc_device_t * pnd, const char *pcStrin | |
| | | g); | |
| | | | |
| /* Special data accessors */ | | /* Special data accessors */ | |
|
| NFC_EXPORT const char* nfc_device_name(nfc_device_t* pnd); | | NFC_EXPORT const char *nfc_device_name (nfc_device_t * pnd); | |
| | | | |
| /* Misc. functions */ | | /* Misc. functions */ | |
|
| NFC_EXPORT void iso14443a_crc(byte_t* pbtData, size_t szLen, byte_t* pbtCrc | | NFC_EXPORT void iso14443a_crc (byte_t * pbtData, size_t szLen, byte_t * p | |
| ); | | btCrc); | |
| NFC_EXPORT const char* nfc_version(void); | | NFC_EXPORT void append_iso14443a_crc (byte_t * pbtData, size_t szLen); | |
| | | NFC_EXPORT const char *nfc_version (void); | |
| | | | |
|
| #ifdef __cplusplus | | /* Common device-level errors */ | |
| } | | # define DEIO 0x1000/* Input/output error */ | |
| #endif // __cplusplus | | # define DEINVAL 0x2000/* Invalid argument */ | |
| | | # define DETIMEOUT 0x3000/* Operation timeout */ | |
| | | | |
|
| #endif // _LIBNFC_H_ | | # ifdef __cplusplus | |
| | | } | |
| | | # endif // __cplusplus | |
| | | #endif // _LIBNFC_H_ | |
| | | | |
End of changes. 15 change blocks. |
| 66 lines changed or deleted | | 98 lines changed or added | |
|