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 extern void ifd_driver_register(const char *,
00324 struct ifd_driver_ops *);
00325 extern const ifd_driver_t *ifd_driver_get(const char *);
00326 extern int ifd_driver_add_id(const char *, const char *);
00327 extern const char * ifd_driver_for_id(ifd_devid_t *);
00328
00329
00330
00331
00332 extern ifd_protocol_t * ifd_protocol_select(ifd_reader_t *, int, int);
00333 extern int ifd_protocol_transceive(ifd_protocol_t *proto,
00334 int dad,
00335 const void *, size_t,
00336 void *, size_t);
00337 extern int ifd_protocol_resynchronize(ifd_protocol_t *, int);
00338
00339 #ifdef __cplusplus
00340 }
00341 #endif
00342
00343 #endif