00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef CHIPCARD_DRIVER_DRIVER_H
00015 #define CHIPCARD_DRIVER_DRIVER_H
00016
00017 #include <gwenhywfar/ipc.h>
00018 #include <gwenhywfar/inherit.h>
00019 #include <gwenhywfar/types.h>
00020
00021 #include <chipcard/chipcard.h>
00022
00023 typedef struct LCD_DRIVER LCD_DRIVER;
00024 GWEN_INHERIT_FUNCTION_LIB_DEFS(LCD_DRIVER, CHIPCARD_API);
00025
00026 #include <chipcard/server/driver/reader.h>
00027 #include <chipcard/sharedstuff/pininfo.h>
00028
00029
00030 #define LCD_DRIVER_IPC_MAXWORK 256
00031
00032 #define LCD_DRIVER_ERROR_OFFSET 0x80000000
00033
00034
00039 typedef uint32_t (*LCD_DRIVER_SENDAPDU_FN)(LCD_DRIVER *d,
00040 int toReader,
00041 LCD_READER *r,
00042 LCD_SLOT *slot,
00043 const unsigned char *apdu,
00044 unsigned int apdulen,
00045 unsigned char *buffer,
00046 int *bufferlen);
00047 typedef uint32_t (*LCD_DRIVER_CONNECTSLOT_FN)(LCD_DRIVER *d,
00048 LCD_SLOT *sl);
00049 typedef uint32_t (*LCD_DRIVER_CONNECTREADER_FN)(LCD_DRIVER *d,
00050 LCD_READER *r);
00051 typedef uint32_t (*LCD_DRIVER_DISCONNECTSLOT_FN)(LCD_DRIVER *d,
00052 LCD_SLOT *sl);
00053 typedef uint32_t (*LCD_DRIVER_DISCONNECTREADER_FN)(LCD_DRIVER *d,
00054 LCD_READER *r);
00055 typedef uint32_t (*LCD_DRIVER_RESETSLOT_FN)(LCD_DRIVER *d,
00056 LCD_SLOT *sl);
00057 typedef uint32_t (*LCD_DRIVER_READERSTATUS_FN)(LCD_DRIVER *d,
00058 LCD_READER *r);
00059
00060 typedef uint32_t (*LCD_DRIVER_READERINFO_FN)(LCD_DRIVER *d,
00061 LCD_READER *r,
00062 GWEN_BUFFER *buf);
00063
00064 typedef int (*LCD_DRIVER_EXTENDREADER_FN)(LCD_DRIVER *d, LCD_READER *r);
00065
00066
00067 typedef const char* (*LCD_DRIVER_GETERRORTEXT_FN)(LCD_DRIVER *d,
00068 uint32_t err);
00069
00070
00071 typedef int (*LCD_DRIVER_HANDLEREQUEST_FN)(LCD_DRIVER *d,
00072 uint32_t rid,
00073 const char *name,
00074 GWEN_DB_NODE *dbReq);
00075
00076 typedef uint32_t
00077 (*LCD_DRIVER_PERFORMVERIFICATION_FN)(LCD_DRIVER *d,
00078 LCD_READER *r,
00079 LCD_SLOT *slot,
00080 const LC_PININFO *pi,
00081 int *triesLeft);
00082
00083 typedef uint32_t
00084 (*LCD_DRIVER_PERFORMMODIFICATION_FN)(LCD_DRIVER *d,
00085 LCD_READER *r,
00086 LCD_SLOT *slot,
00087 const LC_PININFO *pi,
00088 int *triesLeft);
00097 CHIPCARD_API
00098 void LCD_Driver_SetSendApduFn(LCD_DRIVER *d, LCD_DRIVER_SENDAPDU_FN fn);
00099
00100 CHIPCARD_API
00101 void LCD_Driver_SetConnectSlotFn(LCD_DRIVER *d, LCD_DRIVER_CONNECTSLOT_FN fn);
00102
00103 CHIPCARD_API
00104 void LCD_Driver_SetDisconnectSlotFn(LCD_DRIVER *d,
00105 LCD_DRIVER_DISCONNECTSLOT_FN fn);
00106
00107 CHIPCARD_API
00108 void LCD_Driver_SetConnectReaderFn(LCD_DRIVER *d,
00109 LCD_DRIVER_CONNECTREADER_FN fn);
00110
00111 CHIPCARD_API
00112 void LCD_Driver_SetDisconnectReaderFn(LCD_DRIVER *d,
00113 LCD_DRIVER_DISCONNECTREADER_FN fn);
00114
00115 CHIPCARD_API
00116 void LCD_Driver_SetResetSlotFn(LCD_DRIVER *d, LCD_DRIVER_RESETSLOT_FN fn);
00117
00118 CHIPCARD_API
00119 void LCD_Driver_SetReaderStatusFn(LCD_DRIVER *d,
00120 LCD_DRIVER_READERSTATUS_FN fn);
00121
00122 CHIPCARD_API
00123 void LCD_Driver_SetReaderInfoFn(LCD_DRIVER *d,
00124 LCD_DRIVER_READERINFO_FN fn);
00125
00126 CHIPCARD_API
00127 void LCD_Driver_SetExtendReaderFn(LCD_DRIVER *d,
00128 LCD_DRIVER_EXTENDREADER_FN fn);
00129
00130 CHIPCARD_API
00131 void LCD_Driver_SetGetErrorTextFn(LCD_DRIVER *d,
00132 LCD_DRIVER_GETERRORTEXT_FN fn);
00133
00134 CHIPCARD_API
00135 void LCD_Driver_SetPerformVerificationFn(LCD_DRIVER *d,
00136 LCD_DRIVER_PERFORMVERIFICATION_FN f);
00137
00138 CHIPCARD_API
00139 void LCD_Driver_SetPerformModificationFn(LCD_DRIVER *d,
00140 LCD_DRIVER_PERFORMMODIFICATION_FN f);
00141
00142 CHIPCARD_API
00143 void LCD_Driver_SetHandleRequestFn(LCD_DRIVER *d,
00144 LCD_DRIVER_HANDLEREQUEST_FN fn);
00153
00154 CHIPCARD_API
00155 LCD_DRIVER *LCD_Driver_new();
00156
00157 CHIPCARD_API
00158 void LCD_Driver_free(LCD_DRIVER *d);
00159
00160 CHIPCARD_API
00161 int LCD_Driver_Init(LCD_DRIVER *d, int argc, char **argv);
00162
00163 CHIPCARD_API
00164 int LCD_Driver_Connect(LCD_DRIVER *d,
00165 int code, const char *text,
00166 uint32_t dflagsValue,
00167 uint32_t dflagsMask);
00168
00169 CHIPCARD_API
00170 void LCD_Driver_Disconnect(LCD_DRIVER *d);
00171
00181 CHIPCARD_API
00182 int LCD_Driver_Test(LCD_DRIVER *d);
00183
00184 CHIPCARD_API
00185 int LCD_Driver_IsTestMode(const LCD_DRIVER *d);
00194
00195 CHIPCARD_API
00196 const char *LCD_Driver_GetDriverDataDir(const LCD_DRIVER *d);
00197
00198 CHIPCARD_API
00199 const char *LCD_Driver_GetLibraryFile(const LCD_DRIVER *d);
00200
00201 CHIPCARD_API
00202 const char *LCD_Driver_GetDriverId(const LCD_DRIVER *d);
00210
00211 CHIPCARD_API
00212 LCD_READER_LIST *LCD_Driver_GetReaders(const LCD_DRIVER *d);
00213
00214 CHIPCARD_API
00215 LCD_READER *LCD_Driver_FindReader(const LCD_DRIVER *d);
00216
00217 CHIPCARD_API
00218 LCD_READER *LCD_Driver_FindReaderByName(const LCD_DRIVER *d, const char *name);
00219
00220 CHIPCARD_API
00221 LCD_READER *LCD_Driver_FindReaderByPort(const LCD_DRIVER *d, int port);
00222
00223 CHIPCARD_API
00224 LCD_READER *LCD_Driver_FindReaderById(const LCD_DRIVER *d, uint32_t id);
00225
00226 CHIPCARD_API
00227 LCD_READER *LCD_Driver_FindReaderByDriversId(const LCD_DRIVER *d,
00228 uint32_t id);
00229
00230 CHIPCARD_API
00231 void LCD_Driver_AddReader(LCD_DRIVER *d, LCD_READER *r);
00232
00233 CHIPCARD_API
00234 void LCD_Driver_DelReader(LCD_DRIVER *d, LCD_READER *r);
00242
00243 CHIPCARD_API
00244 int LCD_Driver_Work(LCD_DRIVER *d);
00245
00246 CHIPCARD_API
00247 int LCD_Driver_SendStatusChangeNotification(LCD_DRIVER *d,
00248 LCD_SLOT *sl);
00249
00250 CHIPCARD_API
00251 int LCD_Driver_SendReaderErrorNotification(LCD_DRIVER *d,
00252 LCD_READER *r,
00253 const char *text);
00258 CHIPCARD_API
00259 uint32_t LCD_Driver_SendAPDU(LCD_DRIVER *d,
00260 int toReader,
00261 LCD_READER *r,
00262 LCD_SLOT *slot,
00263 const unsigned char *apdu,
00264 unsigned int apdulen,
00265 unsigned char *buffer,
00266 int *bufferlen);
00267
00268 CHIPCARD_API
00269 uint32_t LCD_Driver_ConnectSlot(LCD_DRIVER *d, LCD_SLOT *sl);
00270
00271 CHIPCARD_API
00272 uint32_t LCD_Driver_ConnectReader(LCD_DRIVER *d, LCD_READER *r);
00273
00274 CHIPCARD_API
00275 uint32_t LCD_Driver_DisconnectSlot(LCD_DRIVER *d, LCD_SLOT *sl);
00276
00277 CHIPCARD_API
00278 uint32_t LCD_Driver_DisconnectReader(LCD_DRIVER *d, LCD_READER *r);
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288 #endif
00289
00290
00291
00292