00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef CHIPCARD_CLIENT_CLIENT_H
00015 #define CHIPCARD_CLIENT_CLIENT_H
00016
00017 #ifdef __cplusplus
00018 extern "C" {
00019 #endif
00020
00021 #include <gwenhywfar/inherit.h>
00022 #include <chipcard2/chipcard2.h>
00023 #include <chipcard2/sharedstuff/pininfo.h>
00024
00025
00097 typedef struct LC_CLIENT LC_CLIENT;
00098
00099 GWEN_INHERIT_FUNCTION_LIB_DEFS(LC_CLIENT, CHIPCARD_API)
00100
00101
00104 typedef enum {
00105 LC_Client_ResultOk=0,
00106 LC_Client_ResultWait,
00107 LC_Client_ResultIpcError,
00108 LC_Client_ResultCmdError,
00109 LC_Client_ResultDataError,
00110 LC_Client_ResultAborted,
00111 LC_Client_ResultInvalid,
00112 LC_Client_ResultInternal,
00113 LC_Client_ResultGeneric,
00114 LC_Client_ResultNoData,
00115 LC_Client_ResultCardRemoved,
00116 LC_Client_ResultNotSupported
00117 } LC_CLIENT_RESULT;
00118
00119
00123 typedef enum {
00124 LC_Client_CmdTargetCard=0,
00125 LC_Client_CmdTargetReader
00126 } LC_CLIENT_CMDTARGET;
00127
00128
00129 #include <gwenhywfar/db.h>
00130 #include <chipcard2-client/client/card.h>
00131 #include <chipcard2-client/client/notifications.h>
00132 #include <chipcard2-client/mon/monitor.h>
00133
00134
00141 #define LC_NOTIFY_FLAGS_DRIVER_MASK 0x0000000f
00142 #define LC_NOTIFY_FLAGS_DRIVER_START 0x00000001
00143 #define LC_NOTIFY_FLAGS_DRIVER_UP 0x00000002
00144 #define LC_NOTIFY_FLAGS_DRIVER_DOWN 0x00000004
00145 #define LC_NOTIFY_FLAGS_DRIVER_ERROR 0x00000008
00146
00147 #define LC_NOTIFY_FLAGS_READER_MASK 0x000000f0
00148 #define LC_NOTIFY_FLAGS_READER_START 0x00000010
00149 #define LC_NOTIFY_FLAGS_READER_UP 0x00000020
00150 #define LC_NOTIFY_FLAGS_READER_DOWN 0x00000040
00151 #define LC_NOTIFY_FLAGS_READER_ERROR 0x00000080
00152
00153 #define LC_NOTIFY_FLAGS_SERVICE_MASK 0x00000f00
00154 #define LC_NOTIFY_FLAGS_SERVICE_START 0x00000100
00155 #define LC_NOTIFY_FLAGS_SERVICE_UP 0x00000200
00156 #define LC_NOTIFY_FLAGS_SERVICE_DOWN 0x00000400
00157 #define LC_NOTIFY_FLAGS_SERVICE_ERROR 0x00000800
00158
00159 #define LC_NOTIFY_FLAGS_CARD_MASK 0x0000f000
00160 #define LC_NOTIFY_FLAGS_CARD_INSERTED 0x00001000
00161 #define LC_NOTIFY_FLAGS_CARD_REMOVED 0x00002000
00162 #define LC_NOTIFY_FLAGS_CARD_RFU1 0x00004000
00163 #define LC_NOTIFY_FLAGS_CARD_RFU2 0x00008000
00164
00165 #define LC_NOTIFY_FLAGS_CLIENT_MASK 0x0fff0000
00166 #define LC_NOTIFY_FLAGS_CLIENT_UP 0x00010000
00167 #define LC_NOTIFY_FLAGS_CLIENT_DOWN 0x00020000
00168 #define LC_NOTIFY_FLAGS_CLIENT_STARTWAIT 0x00040000
00169 #define LC_NOTIFY_FLAGS_CLIENT_STOPWAIT 0x00080000
00170 #define LC_NOTIFY_FLAGS_CLIENT_TAKECARD 0x00100000
00171 #define LC_NOTIFY_FLAGS_CLIENT_GOTCARD 0x00200000
00172
00173 #define LC_NOTIFY_FLAGS_CLIENT_CMDSEND 0x00400000
00174 #define LC_NOTIFY_FLAGS_CLIENT_CMDRECV 0x00800000
00175
00176 #define LC_NOTIFY_FLAGS_PRIVILEGED (\
00177 LC_NOTIFY_FLAGS_CLIENT_CMDSEND |\
00178 LC_NOTIFY_FLAGS_CLIENT_CMDRECV)
00179
00186 typedef int (*LC_CLIENT_HANDLE_INREQUEST_FN)(LC_CLIENT *cl,
00187 GWEN_TYPE_UINT32 rid,
00188 GWEN_DB_NODE *dbReq);
00189
00190 typedef void (*LC_CLIENT_SERVER_DOWN_FN)(LC_CLIENT *cl,
00191 GWEN_TYPE_UINT32 serverId);
00199
00210 LC_CLIENT *LC_Client_new(const char *programName,
00211 const char *programVersion,
00212 const char *dataDir);
00213 void LC_Client_free(LC_CLIENT *cl);
00214
00220 int LC_Client_ReadConfig(LC_CLIENT *cl, GWEN_DB_NODE *db);
00221
00229 int LC_Client_ReadConfigFile(LC_CLIENT *cl, const char *fname);
00230
00238 void LC_Client_SetHandleInRequestFn(LC_CLIENT *cl,
00239 LC_CLIENT_HANDLE_INREQUEST_FN fn);
00240 void LC_Client_SetServerDownFn(LC_CLIENT *cl,
00241 LC_CLIENT_SERVER_DOWN_FN fn);
00242
00243 int LC_Client_SendResponse(LC_CLIENT *cl,
00244 GWEN_TYPE_UINT32 rid,
00245 GWEN_DB_NODE *dbCommand);
00246
00247 void LC_Client_RemoveInRequest(LC_CLIENT *cl, GWEN_TYPE_UINT32 rid);
00256 int LC_Client_GetShortTimeout(const LC_CLIENT *cl);
00257 int LC_Client_GetLongTimeout(const LC_CLIENT *cl);
00265 LCM_MONITOR *LC_Client_GetMonitor(const LC_CLIENT *cl);
00266
00267 LC_CLIENT_RESULT LC_Client_SetNotify(LC_CLIENT *cl, GWEN_TYPE_UINT32 flags);
00268
00276 LC_CLIENT_RESULT LC_Client_CheckResponse(LC_CLIENT *cl, GWEN_TYPE_UINT32 rid);
00277 LC_CLIENT_RESULT LC_Client_CheckResponse_Wait(LC_CLIENT *cl,
00278 GWEN_TYPE_UINT32 rid,
00279 int timeout);
00280 int LC_Client_Work(LC_CLIENT *cl, int maxmsg);
00281 LC_CLIENT_RESULT LC_Client_Work_Wait(LC_CLIENT *cl, int timeout);
00282 int LC_Client_DeleteRequest(LC_CLIENT *cl, GWEN_TYPE_UINT32 rid);
00291
00292 LC_CLIENT_RESULT LC_Client_StartWait(LC_CLIENT *cl,
00293 GWEN_TYPE_UINT32 rflags,
00294 GWEN_TYPE_UINT32 rmask);
00295
00296 GWEN_TYPE_UINT32 LC_Client_SendStartWait(LC_CLIENT *cl,
00297 GWEN_TYPE_UINT32 rflags,
00298 GWEN_TYPE_UINT32 rmask);
00299 LC_CLIENT_RESULT LC_Client_CheckStartWait(LC_CLIENT *cl,
00300 GWEN_TYPE_UINT32 rid);
00301
00302
00303 LC_CLIENT_RESULT LC_Client_StopWait(LC_CLIENT *cl);
00304
00305 LC_CARD *LC_Client_GetNextCard(LC_CLIENT *cl);
00306 LC_CARD *LC_Client_PeekNextCard(LC_CLIENT *cl);
00307 LC_CARD *LC_Client_WaitForNextCard(LC_CLIENT *cl, int timeout);
00315 LC_CLIENT_RESULT LC_Client_OpenService(LC_CLIENT *cl,
00316 GWEN_TYPE_UINT32 serverId,
00317 GWEN_TYPE_UINT32 svid,
00318 GWEN_DB_NODE *dbData);
00319
00320 LC_CLIENT_RESULT LC_Client_CloseService(LC_CLIENT *cl,
00321 GWEN_TYPE_UINT32 serverId,
00322 GWEN_TYPE_UINT32 svid,
00323 GWEN_DB_NODE *dbData);
00324
00325 LC_CLIENT_RESULT LC_Client_ServiceCommand(LC_CLIENT *cl,
00326 GWEN_TYPE_UINT32 serverId,
00327 GWEN_TYPE_UINT32 svid,
00328 GWEN_DB_NODE *dbData,
00329 GWEN_DB_NODE *dbCmdResp);
00337
00338 LC_CLIENT_RESULT LC_Client_LockReader(LC_CLIENT *cl,
00339 GWEN_TYPE_UINT32 serverId,
00340 GWEN_TYPE_UINT32 readerId,
00341 GWEN_TYPE_UINT32 *lockId);
00342
00343 LC_CLIENT_RESULT LC_Client_UnlockReader(LC_CLIENT *cl,
00344 GWEN_TYPE_UINT32 serverId,
00345 GWEN_TYPE_UINT32 readerId,
00346 GWEN_TYPE_UINT32 lockId);
00347
00348 LC_CLIENT_RESULT LC_Client_ReaderCommand(LC_CLIENT *cl,
00349 GWEN_TYPE_UINT32 serverId,
00350 GWEN_TYPE_UINT32 readerId,
00351 GWEN_TYPE_UINT32 lockId,
00352 GWEN_DB_NODE *dbData,
00353 GWEN_DB_NODE *dbCmdResp);
00354
00355
00363
00367 void LC_Card_ShowError(LC_CARD *card, LC_CLIENT_RESULT res,
00368 const char *failedCommand);
00373
00374
00375
00376
00377 #ifdef __cplusplus
00378 }
00379 #endif
00380
00381 #endif
00382
00383
00384
00385