driver.h

Go to the documentation of this file.
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         /*Support for transparent access to "escape" */
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  * Protocol handling for card terminal drivers
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 /* OPENCT_DRIVER_H */

libp11, Copyright (C) 2005 Olaf Kirch <okir@lst.de>OpenSC-Project.org Logo