00001 
00002 
00003 
00004 
00005 
00006 #ifndef _CCID_H
00007 #define _CCID_H
00008 
00009 #if HAVE_CONFIG_H
00010 #include "config.h"
00011 #endif
00012 
00013 #include <stdint.h>
00014 #include <stdlib.h>
00015 #include <string.h>
00016 #include <stdio.h>
00017 #include <assert.h>
00018 
00019 #include "compiler.h"
00020 #include "bytesex.h"
00021 
00055 typedef struct _cci *cci_t;
00056 
00060 typedef struct _chipcard *chipcard_t;
00061 
00065 typedef struct _xfr *xfr_t;
00066 
00072 typedef struct libusb_device *ccidev_t;
00073 
00074 _public ccidev_t *ccid_get_device_list(size_t *nmemb);
00075 _public void ccid_free_device_list(ccidev_t *list);
00076 _public ccidev_t ccid_device(uint8_t bus, uint8_t addr);
00077 _public uint8_t ccid_device_bus(ccidev_t dev);
00078 _public uint8_t ccid_device_addr(ccidev_t dev);
00079 
00080 _public cci_t cci_probe(ccidev_t dev, const char *tracefile);
00081 _public unsigned int cci_slots(cci_t cci);
00082 _public chipcard_t cci_get_slot(cci_t cci, unsigned int i);
00083 _public void cci_close(cci_t cci);
00084 _public void cci_log(cci_t cci, const char *fmt, ...) _printf(2, 3);
00085 
00086 _public xfr_t  xfr_alloc(size_t txbuf, size_t rxbuf);
00087 _public void xfr_reset(xfr_t xfr);
00088 _public int xfr_tx_byte(xfr_t xfr, uint8_t byte);
00089 _public int xfr_tx_buf(xfr_t xfr, const uint8_t *ptr, size_t len);
00090 
00091 _public uint8_t xfr_rx_sw1(xfr_t xfr);
00092 _public uint8_t xfr_rx_sw2(xfr_t xfr);
00093 _public const uint8_t *xfr_rx_data(xfr_t xfr, size_t *len);
00094 
00095 _public void xfr_free(xfr_t xfr);
00096 
00097 _public cci_t chipcard_cci(chipcard_t cc);
00098 _public int chipcard_wait_for_card(chipcard_t cc);
00099 
00103 #define CHIPCARD_ACTIVE         0x0
00104 
00107 #define CHIPCARD_PRESENT        0x1
00108 
00111 #define CHIPCARD_NOT_PRESENT    0x2
00112 _public unsigned int chipcard_status(chipcard_t cc);
00113 
00117 #define CHIPCARD_CLOCK_ERR      0x0
00118 
00121 #define CHIPCARD_CLOCK_START    0x1
00122 
00125 #define CHIPCARD_CLOCK_STOP_L   0x2
00126 
00129 #define CHIPCARD_CLOCK_STOP_H   0x3
00130 
00133 #define CHIPCARD_CLOCK_STOP     0x4
00134 _public unsigned int chipcard_slot_status(chipcard_t cc);
00135 
00139 #define CHIPCARD_AUTO_VOLTAGE   0x0
00140 
00143 #define CHIPCARD_5V             0x1
00144 
00147 #define CHIPCARD_3V             0x2
00148 
00151 #define CHIPCARD_1_8V           0x3
00152 _public const uint8_t *chipcard_slot_on(chipcard_t cc, unsigned int voltage,
00153                                 size_t *atr_len);
00154 _public int chipcard_slot_off(chipcard_t cc);
00155 
00156 _public int chipcard_transact(chipcard_t cc, xfr_t xfr);
00157 
00158 
00159 _public void hex_dump(const uint8_t *ptr, size_t len, size_t llen);
00160 _public void hex_dumpf(FILE *f, const uint8_t *ptr, size_t len, size_t llen);
00161 _public void ber_dump(const uint8_t *ptr, size_t len, unsigned int depth);
00162 
00163 #endif