31 #ifndef __NFC_INTERNAL_H__
32 #define __NFC_INTERNAL_H__
36 # include <sys/time.h>
46 #define HAL( FUNCTION, ... ) pnd->last_error = 0; \
47 if (pnd->driver->FUNCTION) { \
48 return pnd->driver->FUNCTION( __VA_ARGS__ ); \
50 pnd->last_error = NFC_EDEVNOTSUPP; \
55 #define MIN(a,b) (((a) < (b)) ? (a) : (b))
58 #define MAX(a,b) (((a) > (b)) ? (a) : (b))
81 #define BUFFER_INIT(buffer_name, size) \
82 uint8_t buffer_name[size]; \
83 size_t __##buffer_name##_n = 0
89 #define BUFFER_ALIAS(buffer_name, origin) \
90 uint8_t *buffer_name = (void *)origin; \
91 size_t __##buffer_name##_n = 0;
93 #define BUFFER_SIZE(buffer_name) (__##buffer_name##_n)
95 #define BUFFER_CLEAR(buffer_name) (__##buffer_name##_n = 0)
99 #define BUFFER_APPEND(buffer_name, data) \
101 buffer_name[__##buffer_name##_n++] = data; \
107 #define BUFFER_APPEND_BYTES(buffer_name, data, size) \
110 while (__n < size) { \
111 buffer_name[__##buffer_name##_n++] = ((uint8_t *)data)[__n++]; \
123 const scan_type_enum scan_type;
127 const char *(*strerror)(
const struct nfc_device *pnd);
129 int (*initiator_init)(
struct nfc_device *pnd);
130 int (*initiator_init_secure_element)(
struct nfc_device *pnd);
132 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);
134 int (*initiator_deselect_target)(
struct nfc_device *pnd);
135 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);
136 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);
137 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);
138 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);
141 int (*target_init)(
struct nfc_device *pnd,
nfc_target *pnt, uint8_t *pbtRx,
const size_t szRx,
int timeout);
142 int (*target_send_bytes)(
struct nfc_device *pnd,
const uint8_t *pbtTx,
const size_t szTx,
int timeout);
143 int (*target_receive_bytes)(
struct nfc_device *pnd, uint8_t *pbtRx,
const size_t szRxLen,
int timeout);
144 int (*target_send_bits)(
struct nfc_device *pnd,
const uint8_t *pbtTx,
const size_t szTxBits,
const uint8_t *pbtTxPar);
145 int (*target_receive_bits)(
struct nfc_device *pnd, uint8_t *pbtRx,
const size_t szRxLen, uint8_t *pbtRxPar);
151 int (*device_get_information_about)(
struct nfc_device *pnd,
char **buf);
158 # define DEVICE_NAME_LENGTH 256
159 # define DEVICE_PORT_LENGTH 64
161 #define MAX_USER_DEFINED_DEVICES 4
163 struct nfc_user_defined_device {
164 char name[DEVICE_NAME_LENGTH];
176 bool allow_intrusive_scan;
178 struct nfc_user_defined_device user_defined_devices[MAX_USER_DEFINED_DEVICES];
179 unsigned int user_defined_device_count;
217 void string_as_boolean(
const char *s,
bool *value);
219 void iso14443_cascade_uid(
const uint8_t abtUID[],
const size_t szUID, uint8_t *pbtCascadedUID,
size_t *pszCascadedUID);
221 void prepare_initiator_data(
const nfc_modulation nm, uint8_t **ppbtInitiatorData,
size_t *pszInitiatorData);
223 int connstring_decode(
const nfc_connstring connstring,
const char *driver_name,
const char *bus_name,
char **pparam1,
char **pparam2);
225 #endif // __NFC_INTERNAL_H__