14 #include <sys/types.h>
15 #include <openct/openct.h>
16 #include <openct/apdu.h>
18 typedef struct ifd_device ifd_device_t;
22 IFD_PROTOCOL_DEFAULT = -1,
25 IFD_PROTOCOL_2WIRE = 16,
27 IFD_PROTOCOL_I2C_SHORT,
28 IFD_PROTOCOL_I2C_LONG,
31 IFD_PROTOCOL_EUROCHIP,
34 IFD_PROTOCOL_TRANSPARENT = 128
37 typedef struct ifd_protocol ifd_protocol_t;
44 #define IFD_MAX_ATR_LEN 64
53 unsigned char atr[IFD_MAX_ATR_LEN];
55 ifd_protocol_t * proto;
69 ifd_device_t * device;
76 #define IFD_READER_ACTIVE 0x0001
77 #define IFD_READER_HOTPLUG 0x0002
78 #define IFD_READER_DISPLAY 0x0100
79 #define IFD_READER_KEYPAD 0x0200
82 IFD_PROTOCOL_RECV_TIMEOUT = 0x0000,
83 IFD_PROTOCOL_BLOCK_ORIENTED,
86 __IFD_PROTOCOL_T0_PARAM_BASE = IFD_PROTOCOL_T0 << 16,
89 __IFD_PROTOCOL_T1_PARAM_BASE = IFD_PROTOCOL_T1 << 16,
90 IFD_PROTOCOL_T1_BLOCKSIZE,
91 IFD_PROTOCOL_T1_CHECKSUM_CRC,
92 IFD_PROTOCOL_T1_CHECKSUM_LRC,
95 IFD_PROTOCOL_T1_STATE,
107 extern int ifd_init(
void);
110 const char *device_name);
112 extern int ifd_reader_count(
void);
115 extern ifd_reader_t * ifd_reader_by_handle(
unsigned int handle);
116 extern ifd_reader_t * ifd_reader_by_index(
unsigned int index);
118 extern int ifd_spawn_handler(
const char *,
const char *,
int);
119 extern int ifd_scan_usb(
void);
125 extern int ifd_atr_complete(
const unsigned char *,
size_t);
132 const void *sbuf,
size_t slen,
133 void *rbuf,
size_t rlen);
150 const char *message);
151 extern int ifd_card_perform_verify(
ifd_reader_t *reader,
155 const unsigned char *data,
size_t data_len,
156 unsigned char *resp,
size_t resp_len);
158 unsigned int,
unsigned short,
159 unsigned char *,
size_t);
161 unsigned int,
unsigned short,
162 const unsigned char *,
size_t);
164 extern ifd_protocol_t * ifd_protocol_new(
int id,
167 extern int ifd_protocol_set_parameter(ifd_protocol_t *p,
170 extern int ifd_protocol_get_parameter(ifd_protocol_t *p,
173 extern int ifd_protocol_read_memory(ifd_protocol_t *,
175 unsigned char *,
size_t);
176 extern int ifd_protocol_write_memory(ifd_protocol_t *,
178 const unsigned char *,
size_t);
179 extern void ifd_protocol_free(ifd_protocol_t *);
188 #define ifd_debug(level, fmt, args...) \
190 if ((level) <= ct_config.debug) \
191 ct_debug("%s: " fmt, __FUNCTION__ , ##args); \
194 extern void ifd_debug(
int level,
const char *fmt, ...);