00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef CHIPCARD_DRIVER_DRIVER_L_H
00015 #define CHIPCARD_DRIVER_DRIVER_L_H
00016
00017
00018 typedef struct LCD_DRIVER LCD_DRIVER;
00019
00020 #include <gwenhywfar/ipc.h>
00021 #include <gwenhywfar/inherit.h>
00022 #include <gwenhywfar/types.h>
00023
00024 #include "reader_l.h"
00025 #include <chipcard2/sharedstuff/pininfo.h>
00026
00027
00028 #define LCD_DRIVER_IPC_MAXWORK 256
00029
00030 #define LCD_DRIVER_ERROR_OFFSET 0x80000000
00031
00032
00033 typedef enum {
00034 LCD_DriverCheckArgsResultOk=0,
00035 LCD_DriverCheckArgsResultError,
00036 LCD_DriverCheckArgsResultVersion,
00037 LCD_DriverCheckArgsResultHelp
00038 } LCD_DRIVER_CHECKARGS_RESULT;
00039
00040
00041 GWEN_INHERIT_FUNCTION_DEFS(LCD_DRIVER);
00042
00043
00044 typedef GWEN_TYPE_UINT32 (*LCD_DRIVER_SENDAPDU_FN)(LCD_DRIVER *d,
00045 int toReader,
00046 LCD_READER *r,
00047 LCD_SLOT *slot,
00048 const unsigned char *apdu,
00049 unsigned int apdulen,
00050 unsigned char *buffer,
00051 int *bufferlen);
00052 typedef GWEN_TYPE_UINT32 (*LCD_DRIVER_CONNECTSLOT_FN)(LCD_DRIVER *d,
00053 LCD_SLOT *sl);
00054 typedef GWEN_TYPE_UINT32 (*LCD_DRIVER_CONNECTREADER_FN)(LCD_DRIVER *d,
00055 LCD_READER *r);
00056 typedef GWEN_TYPE_UINT32 (*LCD_DRIVER_DISCONNECTSLOT_FN)(LCD_DRIVER *d,
00057 LCD_SLOT *sl);
00058 typedef GWEN_TYPE_UINT32 (*LCD_DRIVER_DISCONNECTREADER_FN)(LCD_DRIVER *d,
00059 LCD_READER *r);
00060 typedef GWEN_TYPE_UINT32 (*LCD_DRIVER_RESETSLOT_FN)(LCD_DRIVER *d,
00061 LCD_SLOT *sl);
00062 typedef GWEN_TYPE_UINT32 (*LCD_DRIVER_READERSTATUS_FN)(LCD_DRIVER *d,
00063 LCD_READER *r);
00064
00065 typedef GWEN_TYPE_UINT32 (*LCD_DRIVER_READERINFO_FN)(LCD_DRIVER *d,
00066 LCD_READER *r,
00067 GWEN_BUFFER *buf);
00068
00069 typedef LCD_READER* (*LCD_DRIVER_CREATEREADER_FN)(LCD_DRIVER *d,
00070 GWEN_TYPE_UINT32 readerId,
00071 const char *name,
00072 int port,
00073 unsigned int slots,
00074 GWEN_TYPE_UINT32 flags);
00075
00076 typedef const char* (*LCD_DRIVER_GETERRORTEXT_FN)(LCD_DRIVER *d,
00077 GWEN_TYPE_UINT32 err);
00078
00079
00080 typedef int (*LCD_DRIVER_HANDLEREQUEST_FN)(LCD_DRIVER *d,
00081 GWEN_TYPE_UINT32 rid,
00082 const char *name,
00083 GWEN_DB_NODE *dbReq);
00084
00085 typedef GWEN_TYPE_UINT32
00086 (*LCD_DRIVER_PERFORMVERIFICATION_FN)(LCD_DRIVER *d,
00087 LCD_READER *r,
00088 LCD_SLOT *slot,
00089 const LC_PININFO *pi,
00090 int *triesLeft);
00091
00092 typedef GWEN_TYPE_UINT32
00093 (*LCD_DRIVER_PERFORMMODIFICATION_FN)(LCD_DRIVER *d,
00094 LCD_READER *r,
00095 LCD_SLOT *slot,
00096 const LC_PININFO *pi,
00097 int *triesLeft);
00098
00099
00100 void LCD_Driver_Usage(const char *prgName);
00101
00102 LCD_DRIVER *LCD_Driver_new();
00103 void LCD_Driver_free(LCD_DRIVER *d);
00104
00105 int LCD_Driver_Init(LCD_DRIVER *d, int argc, char **argv);
00106
00107 const char *LCD_Driver_GetDriverDataDir(const LCD_DRIVER *d);
00108 const char *LCD_Driver_GetLibraryFile(const LCD_DRIVER *d);
00109 const char *LCD_Driver_GetDriverId(const LCD_DRIVER *d);
00110
00111 int LCD_Driver_Test(LCD_DRIVER *d);
00112 int LCD_Driver_IsTestMode(const LCD_DRIVER *d);
00113
00114 GWEN_TYPE_UINT32 LCD_Driver_SendCommand(LCD_DRIVER *d,
00115 GWEN_DB_NODE *dbCommand);
00116 int LCD_Driver_SendResponse(LCD_DRIVER *d,
00117 GWEN_TYPE_UINT32 rid,
00118 GWEN_DB_NODE *dbCommand);
00119
00120 int LCD_Driver_SendResult(LCD_DRIVER *d,
00121 GWEN_TYPE_UINT32 rid,
00122 const char *name,
00123 const char *code,
00124 const char *text);
00125
00126 int LCD_Driver_RemoveCommand(LCD_DRIVER *d,
00127 GWEN_TYPE_UINT32 rid,
00128 int outbound);
00129
00130 GWEN_TYPE_UINT32 LCD_Driver_GetNextInRequest(LCD_DRIVER *d);
00131 GWEN_DB_NODE *LCD_Driver_GetInRequestData(LCD_DRIVER *d,
00132 GWEN_TYPE_UINT32 rid);
00133
00134 int LCD_Driver_Work(LCD_DRIVER *d);
00135
00136
00137 LCD_READER_LIST *LCD_Driver_GetReaders(const LCD_DRIVER *d);
00138 LCD_READER *LCD_Driver_FindReader(const LCD_DRIVER *d);
00139 LCD_READER *LCD_Driver_FindReaderByName(const LCD_DRIVER *d, const char *name);
00140 LCD_READER *LCD_Driver_FindReaderByPort(const LCD_DRIVER *d, int port);
00141 LCD_READER *LCD_Driver_FindReaderById(const LCD_DRIVER *d, GWEN_TYPE_UINT32 id);
00142 LCD_READER *LCD_Driver_FindReaderByDriversId(const LCD_DRIVER *d,
00143 GWEN_TYPE_UINT32 id);
00144
00145 void LCD_Driver_AddReader(LCD_DRIVER *d, LCD_READER *r);
00146 void LCD_Driver_DelReader(LCD_DRIVER *d, LCD_READER *r);
00147
00148 int LCD_Driver_Connect(LCD_DRIVER *d,
00149 const char *code, const char *text,
00150 GWEN_TYPE_UINT32 dflagsValue,
00151 GWEN_TYPE_UINT32 dflagsMask);
00152 void LCD_Driver_Disconnect(LCD_DRIVER *d);
00153 int LCD_Driver_SendStatusChangeNotification(LCD_DRIVER *d,
00154 LCD_SLOT *sl);
00155
00156 int LCD_Driver_SendReaderErrorNotification(LCD_DRIVER *d,
00157 LCD_READER *r,
00158 const char *text);
00159
00160
00161
00162 GWEN_TYPE_UINT32 LCD_Driver_SendAPDU(LCD_DRIVER *d,
00163 int toReader,
00164 LCD_READER *r,
00165 LCD_SLOT *slot,
00166 const unsigned char *apdu,
00167 unsigned int apdulen,
00168 unsigned char *buffer,
00169 int *bufferlen);
00170 GWEN_TYPE_UINT32 LCD_Driver_ConnectSlot(LCD_DRIVER *d, LCD_SLOT *sl);
00171 GWEN_TYPE_UINT32 LCD_Driver_ConnectReader(LCD_DRIVER *d, LCD_READER *r);
00172
00173 GWEN_TYPE_UINT32 LCD_Driver_DisconnectSlot(LCD_DRIVER *d, LCD_SLOT *sl);
00174 GWEN_TYPE_UINT32 LCD_Driver_DisconnectReader(LCD_DRIVER *d, LCD_READER *r);
00175
00176 GWEN_TYPE_UINT32 LCD_Driver_ResetSlot(LCD_DRIVER *d, LCD_SLOT *sl);
00177
00178
00179 GWEN_TYPE_UINT32 LCD_Driver_ReaderStatus(LCD_DRIVER *d, LCD_READER *r);
00180
00181 const char *LCD_Driver_GetErrorText(LCD_DRIVER *d, GWEN_TYPE_UINT32 err);
00182
00183 GWEN_TYPE_UINT32 LCD_Driver_ReaderInfo(LCD_DRIVER *d,
00184 LCD_READER *r,
00185 GWEN_BUFFER *buf);
00186
00187 LCD_READER *LCD_Driver_CreateReader(LCD_DRIVER *d,
00188 GWEN_TYPE_UINT32 readerId,
00189 const char *name,
00190 int port,
00191 unsigned int slots,
00192 GWEN_TYPE_UINT32 flags);
00193
00194 GWEN_TYPE_UINT32 LCD_Driver_PerformVerification(LCD_DRIVER *d,
00195 LCD_READER *r,
00196 LCD_SLOT *slot,
00197 const LC_PININFO *pi,
00198 int *triesLeft);
00199
00200 GWEN_TYPE_UINT32 LCD_Driver_PerformModification(LCD_DRIVER *d,
00201 LCD_READER *r,
00202 LCD_SLOT *slot,
00203 const LC_PININFO *pi,
00204 int *triesLeft);
00205
00206
00207 void LCD_Driver_SetSendApduFn(LCD_DRIVER *d, LCD_DRIVER_SENDAPDU_FN fn);
00208 void LCD_Driver_SetConnectSlotFn(LCD_DRIVER *d, LCD_DRIVER_CONNECTSLOT_FN fn);
00209 void LCD_Driver_SetDisconnectSlotFn(LCD_DRIVER *d,
00210 LCD_DRIVER_DISCONNECTSLOT_FN fn);
00211 void LCD_Driver_SetConnectReaderFn(LCD_DRIVER *d,
00212 LCD_DRIVER_CONNECTREADER_FN fn);
00213 void LCD_Driver_SetDisconnectReaderFn(LCD_DRIVER *d,
00214 LCD_DRIVER_DISCONNECTREADER_FN fn);
00215 void LCD_Driver_SetResetSlotFn(LCD_DRIVER *d, LCD_DRIVER_RESETSLOT_FN fn);
00216 void LCD_Driver_SetReaderStatusFn(LCD_DRIVER *d,
00217 LCD_DRIVER_READERSTATUS_FN fn);
00218 void LCD_Driver_SetReaderInfoFn(LCD_DRIVER *d,
00219 LCD_DRIVER_READERINFO_FN fn);
00220 void LCD_Driver_SetCreateReaderFn(LCD_DRIVER *d,
00221 LCD_DRIVER_CREATEREADER_FN fn);
00222 void LCD_Driver_SetGetErrorTextFn(LCD_DRIVER *d,
00223 LCD_DRIVER_GETERRORTEXT_FN fn);
00224 void LCD_Driver_SetPerformVerificationFn(LCD_DRIVER *d,
00225 LCD_DRIVER_PERFORMVERIFICATION_FN f);
00226 void LCD_Driver_SetPerformModificationFn(LCD_DRIVER *d,
00227 LCD_DRIVER_PERFORMMODIFICATION_FN f);
00228 void LCD_Driver_SetHandleRequestFn(LCD_DRIVER *d,
00229 LCD_DRIVER_HANDLEREQUEST_FN fn);
00230
00231
00232
00233
00234
00235
00236 #endif
00237
00238
00239
00240