00001
00008 #ifndef OPENCT_DRIVER_H
00009 #define OPENCT_DRIVER_H
00010
00011 #ifdef __cplusplus
00012 extern "C" {
00013 #endif
00014
00015 #include <openct/device.h>
00016
00020 struct ifd_driver_ops {
00021 int default_protocol;
00022
00034 int (*open)(ifd_reader_t *reader, const char *name);
00049 int (*close)(ifd_reader_t * reader);
00076 int (*change_parity)(ifd_reader_t *reader, int parity);
00087 int (*change_speed)(ifd_reader_t *reader, unsigned int speed);
00102 int (*activate)(ifd_reader_t *reader);
00113 int (*deactivate)(ifd_reader_t *reader);
00138 int (*card_status)(ifd_reader_t *reader, int slot, int *status);
00154 int (*card_reset)(ifd_reader_t *reader, int slot, void *atr, size_t atr_len);
00169 int (*card_request)(ifd_reader_t *reader, int slot,
00170 time_t timeout, const char *message,
00171 void *atr, size_t atr_len);
00185 int (*card_eject)(ifd_reader_t *reader, int slot,
00186 time_t timeout, const char *message);
00193 int (*output)(ifd_reader_t *reader, const char *message);
00209 int (*perform_verify)(ifd_reader_t *reader,
00210 int slot, unsigned int timeout, const char *prompt,
00211 const unsigned char *data, size_t data_len,
00212 unsigned char *resp, size_t resp_len);
00230 int (*send)(ifd_reader_t *reader,
00231 unsigned int dad,
00232 const unsigned char *buffer,
00233 size_t len);
00247 int (*recv)(ifd_reader_t *reader,
00248 unsigned int dad,
00249 unsigned char *buffer,
00250 size_t len,
00251 long timeout);
00274 int (*set_protocol)(ifd_reader_t *reader, int slot, int protocol);
00290 int (*transparent)(ifd_reader_t *reader, int slot,
00291 const void *sbuf, size_t slen,
00292 void *rbuf, size_t rlen);
00304 int (*sync_read)(ifd_reader_t *reader, int slot, int proto,
00305 unsigned short addr,
00306 unsigned char *rbuf, size_t rlen);
00318 int (*sync_write)(ifd_reader_t *reader, int slot, int proto,
00319 unsigned short addr,
00320 const unsigned char *sbuf, size_t slen);
00321
00322
00323 int (*escape)(ifd_reader_t *reader, int slot,
00324 const void *sbuf, const size_t slen,
00325 void *rbuf, size_t rlen);
00326
00334 int (*before_command) (ifd_reader_t *);
00335
00343 int (*after_command) (ifd_reader_t *);
00344
00353 int (*get_eventfd) (ifd_reader_t *, short *events);
00354
00363 int (*event) (ifd_reader_t *, int *status, size_t status_size);
00364
00374 int (*error) (ifd_reader_t *);
00375 };
00376
00377 extern void ifd_driver_register(const char *,
00378 struct ifd_driver_ops *);
00379 extern const ifd_driver_t *ifd_driver_get(const char *);
00380 extern int ifd_driver_add_id(const char *, const char *);
00381 extern const char * ifd_driver_for_id(ifd_devid_t *);
00382
00383
00384
00385
00386 extern ifd_protocol_t * ifd_protocol_select(ifd_reader_t *, int, int);
00387 extern int ifd_protocol_transceive(ifd_protocol_t *proto,
00388 int dad,
00389 const void *, size_t,
00390 void *, size_t);
00391 extern int ifd_protocol_resynchronize(ifd_protocol_t *, int);
00392
00393 #ifdef __cplusplus
00394 }
00395 #endif
00396
00397 #endif