📄 ctcomm.h
字号:
///*
// * Common defination and Virtual Reader Class
// *
// * writen by Alfred Meng 2000
// */
#ifndef __CTCOMM_H
#define __CTCOMM_H
#include <stdio.h> // for NULL
#include <string.h>
#ifndef _WINDEF_
typedef unsigned char BYTE;
typedef unsigned short WORD;
#define LOBYTE(w) ((BYTE)(w))
#define HIBYTE(w) ((BYTE)(((WORD)(w) >> 8) & 0xFF))
#endif
#define BUF_SIZE 2048
#define IC_ICC 0 // can't modified
#define IC_PLUG0 1 // can't modified
#define IC_PLUG1 2 // can't modified
#define IC_PLUG2 3 // can't modified
#define IC_PLUG3 4 // can't modified
#define IC_PLUG4 5 // can't modified
#define IC_PLUG5 6 // can't modified
/* command type */
#define CASE1 0x11 /* Not transmit and recieve data */
#define CASE2 0x12 /* Only recieve data */
#define CASE3 0x13 /* Only transmit data */
#define CASE4 0x14 /* transmit and recieve data */
typedef enum { CASE4_Disable = 0, CASE4_Enable } TCASE4OPT;
class TAPDU {
public:
unsigned char apdu[BUF_SIZE];
int len;
void * tag;
unsigned long gap;
TAPDU();
/* follow is the suggested method */
TAPDU(unsigned char ucCLA, unsigned char ucINS, unsigned char ucP1, unsigned char ucP2, unsigned char ucP3);
void CLA( unsigned char ucCLA );
void INS( unsigned char ucINS );
void P1( unsigned char ucP1 );
void P2( unsigned char ucP2 );
void P3( unsigned char ucP3 );
void DATA( unsigned char *data, unsigned char ucLc );
};
#define ISO7816_CLA 0x0
#define ISO7816_INS 0x1
#define ISO7816_P1 0x2
#define ISO7816_P2 0x3
#define ISO7816_P3 0x4
#define ISO7816_DATA 0x5
typedef struct {
unsigned char cla;
unsigned char ins;
unsigned char type;
} TICCMD;
#define VAILD_CMD 0
#define INVAILD_CMD -1
#define MAXICCMDNAME 32
typedef struct {
int id;
char * name;
TICCMD apdu;
} TCommand;
typedef struct {
char sid;
char fid[2];
int offset; // ,size;
char type,am;
} TFILE;
/* define file type */
#define FT_BINARY 0x01
#define FT_LINFIX 0x02
#define FT_CYCLIC 0x07
#define FT_COMPUTE 0x17
/* parameter for SELECT */
#define SELFID 0x00
#define SELSID 0x02
#define SELAID 0x04
typedef void (*TApduHookFun)(TAPDU *pApdu,char *pPC, short pUS );
class TVSCReader {
short count;
short lastc;
TCommand * cset;
TCASE4OPT _case4_op_;
friend class TPCSC;
TApduHookFun __fHook;
public:
TVSCReader();
virtual ~TVSCReader(){};
unsigned char SW1,SW2;
unsigned char Resp[BUF_SIZE];
unsigned char __iso_cla;
short RespLen,rc;
TAPDU __apdu;
virtual int openterm(short port) = 0;
virtual int closeterm() = 0;
virtual int opened() = 0;
virtual int opensam(int plug) = 0;
virtual int selectICC(int icc,bool reqATR = true) = 0;
virtual int hascard() = 0;
virtual int RequestATR() = 0;
virtual int ejectcard(bool beep = true) = 0;
virtual int sendapdu(TAPDU *) = 0;
virtual char TermType() const = 0;
virtual char *GetError() const = 0;
// command set utility
int assign(TCommand *,int total);
int findbyID(int id);
int findbyCI(unsigned char cla, unsigned char ins);
char *findName(int id);
void iso_case4( TCASE4OPT op ){ _case4_op_ = op; }
void iso_CLA( unsigned char cla) { __iso_cla = cla; }
// utility
int checkresp(unsigned char asw1=0x90, unsigned char asw2=0x00);
void set_apdu_hook(TApduHookFun);
/* file level */
TFILE *fopen_bin( char sid );
TFILE *fopen_rec( char sid );
int read_rec(TFILE *fp, char *buff,int recno );
int read_bin(TFILE *fp, char *buff,int size );
int seek(TFILE *fp, short offset_from_head ); // only for binary file
int write(TFILE *fp, char *buff,int size_recno );
void fclose(TFILE *fp);
// advance level
int select(char *fid);
int verify(char *pin,int pl,char kid=0x01);
int execute(int cmd,unsigned char p1,unsigned char p2, \
unsigned char lc=0,unsigned char *data=(unsigned char *)NULL,unsigned char le=0);
int magcommand(char *asccmd );
int batchprocess(char *fname, int &Lines ); // NOT Delete MF automaticly
int lastcmd() { return lastc; } /* return last command's order */
TAPDU *lastAPDU() { return &__apdu; };
void lastAPDU( TAPDU &p) { memcpy(&p,&__apdu,sizeof(TAPDU)); };
// GD Only
void deleteMF();
//void creatEnd(char *id="\x3F\x00");
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -