32 #ifndef __NFC_INTERNAL_H__
33 #define __NFC_INTERNAL_H__
37 # include <sys/time.h>
47 #define HAL( FUNCTION, ... ) pnd->last_error = 0; \
48 if (pnd->driver->FUNCTION) { \
49 return pnd->driver->FUNCTION( __VA_ARGS__ ); \
51 pnd->last_error = NFC_EDEVNOTSUPP; \
56 #define MIN(a,b) (((a) < (b)) ? (a) : (b))
59 #define MAX(a,b) (((a) > (b)) ? (a) : (b))
82 #define BUFFER_INIT(buffer_name, size) \
83 uint8_t buffer_name[size]; \
84 size_t __##buffer_name##_n = 0
90 #define BUFFER_ALIAS(buffer_name, origin) \
91 uint8_t *buffer_name = (void *)origin; \
92 size_t __##buffer_name##_n = 0;
94 #define BUFFER_SIZE(buffer_name) (__##buffer_name##_n)
96 #define BUFFER_CLEAR(buffer_name) (__##buffer_name##_n = 0)
100 #define BUFFER_APPEND(buffer_name, data) \
102 buffer_name[__##buffer_name##_n++] = data; \
108 #define BUFFER_APPEND_BYTES(buffer_name, data, size) \
111 while (__n < size) { \
112 buffer_name[__##buffer_name##_n++] = ((uint8_t *)data)[__n++]; \
124 const scan_type_enum scan_type;
128 const char *(*strerror)(
const struct nfc_device *pnd);
130 int (*initiator_init)(
struct nfc_device *pnd);
131 int (*initiator_init_secure_element)(
struct nfc_device *pnd);
133 int (*initiator_poll_target)(
struct nfc_device *pnd,
const nfc_modulation *pnmModulations,
const size_t szModulations,
const uint8_t uiPollNr,
const uint8_t btPeriod,
nfc_target *pnt);
135 int (*initiator_deselect_target)(
struct nfc_device *pnd);
136 int (*initiator_transceive_bytes)(
struct nfc_device *pnd,
const uint8_t *pbtTx,
const size_t szTx, uint8_t *pbtRx,
const size_t szRx,
int timeout);
137 int (*initiator_transceive_bits)(
struct nfc_device *pnd,
const uint8_t *pbtTx,
const size_t szTxBits,
const uint8_t *pbtTxPar, uint8_t *pbtRx, uint8_t *pbtRxPar);
138 int (*initiator_transceive_bytes_timed)(
struct nfc_device *pnd,
const uint8_t *pbtTx,
const size_t szTx, uint8_t *pbtRx,
const size_t szRx, uint32_t *cycles);
139 int (*initiator_transceive_bits_timed)(
struct nfc_device *pnd,
const uint8_t *pbtTx,
const size_t szTxBits,
const uint8_t *pbtTxPar, uint8_t *pbtRx, uint8_t *pbtRxPar, uint32_t *cycles);
142 int (*target_init)(
struct nfc_device *pnd,
nfc_target *pnt, uint8_t *pbtRx,
const size_t szRx,
int timeout);
143 int (*target_send_bytes)(
struct nfc_device *pnd,
const uint8_t *pbtTx,
const size_t szTx,
int timeout);
144 int (*target_receive_bytes)(
struct nfc_device *pnd, uint8_t *pbtRx,
const size_t szRxLen,
int timeout);
145 int (*target_send_bits)(
struct nfc_device *pnd,
const uint8_t *pbtTx,
const size_t szTxBits,
const uint8_t *pbtTxPar);
146 int (*target_receive_bits)(
struct nfc_device *pnd, uint8_t *pbtRx,
const size_t szRxLen, uint8_t *pbtRxPar);
152 int (*device_get_information_about)(
struct nfc_device *pnd,
char **buf);
159 # define DEVICE_NAME_LENGTH 256
160 # define DEVICE_PORT_LENGTH 64
162 #define MAX_USER_DEFINED_DEVICES 4
164 struct nfc_user_defined_device {
165 char name[DEVICE_NAME_LENGTH];
177 bool allow_intrusive_scan;
179 struct nfc_user_defined_device user_defined_devices[MAX_USER_DEFINED_DEVICES];
180 unsigned int user_defined_device_count;
220 void string_as_boolean(
const char *s,
bool *value);
222 void iso14443_cascade_uid(
const uint8_t abtUID[],
const size_t szUID, uint8_t *pbtCascadedUID,
size_t *pszCascadedUID);
224 void prepare_initiator_data(
const nfc_modulation nm, uint8_t **ppbtInitiatorData,
size_t *pszInitiatorData);
226 int connstring_decode(
const nfc_connstring connstring,
const char *driver_name,
const char *bus_name,
char **pparam1,
char **pparam2);
nfc_mode
NFC mode type enumeration.
struct nfc_driver nfc_driver
char nfc_connstring[NFC_BUFSIZE_CONNSTRING]
nfc_dep_mode
NFC D.E.P. (Data Exchange Protocol) active/passive mode.
nfc_modulation_type
NFC modulation type enumeration.
nfc_baud_rate
NFC baud rate enumeration.
NFC library context Struct which contains internal options, references, pointers, etc....
NFC target information in D.E.P. (Data Exchange Protocol) see ISO/IEC 18092 (NFCIP-1)
char name[DEVICE_NAME_LENGTH]
nfc_connstring connstring
NFC modulation structure.