00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
#ifndef CTCARDBASE_H
00030
#define CTCARDBASE_H
00031
00032
#include <chipcard/ctpointer.h>
00033
#include <chipcard/ctreadercontext.h>
00034
#include <chipcard/ctreadertrader.h>
00035
00036
#include <string>
00037
using namespace std;
00038
00039
00043 class CTCardBase {
00044
public:
00045 typedef enum {
00046
CallBackContinue=0,
00047
CallBackAbort
00048 } CallBackResult;
00049
00050
protected:
00051
00052
private:
00053
int _openCount;
00054
int _timeout;
00055
CTReaderContext _reader;
00056 string _atr;
00057
00058
int _responseLoop(
int reqid,
int maxloop);
00059
CTError _abortConnect(
int prevreq,
int timeout);
00060
00061
CTError allocate();
00062
CTError release();
00063
CTError connect(string &atr);
00064
CTError disconnect();
00065
CTError command(
const string &apdu, string &response);
00066
00067
public:
00068
CTCardBase(
const CTReaderContext &ctx);
00069
00073
CTCardBase(
const CTCardBase &c);
00074
00075
virtual ~CTCardBase();
00076
00077
virtual CallBackResult callback(
bool first);
00078
00079
CTError open();
00080
CTError close(
bool force=
false);
00081 bool isOpen()
const {
return _openCount>0;};
00082
00092 const string
atr()
const {
return _atr;};
00093
00103
unsigned int readerFlags() const;
00104
00105
unsigned int readerStatus() const;
00106
00110 const CHIPCARD_READERDESCR &readerDescription() const;
00111
00117 void setTimeout(
int t) { _timeout=t;};
00118
00123 int timeout()
const {
return _timeout;};
00124
00128
CTError sendAPDU(
const string &apdu, string &response);
00129
00130 };
00131
00132
00133
00134
00135
#endif
00136
00137