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