00001 #ifndef FPSAPI_INCL
00002 #define FPSAPI_INCL
00003
00004
00005
00006
00007 #ifdef GX_DOTNET
00008 #using "gxdotnet7.dll"
00009 #endif
00010 #include "gxsd.h"
00011 #include "fpstypes.h"
00012 #include "gximage.h"
00013
00014 #if defined(WIN32) && !defined(GX_DOTNET)
00015 #include <windows.h>
00016 #endif
00017
00018 #ifdef _MSC_VER
00019 #pragma warning(push)
00020 #pragma warning(disable : 4786)
00021 #endif
00022 #ifdef __BORLANDC__
00023 #pragma warn -rch
00024 #endif
00025
00026 #ifdef GX_NAMESPACES
00027 namespace fps {
00028 using namespace gx;
00029 #endif
00030
00112 #ifndef GX_MANUAL
00113
00114 #ifdef GX_DOTNET
00115 #pragma unmanaged
00116 #define _GX_ENOENT 2
00117 #define _FPS_UMODE_DISCONNECT 0
00118 #define gxPG4 _gxPG4
00119 #ifdef WIN32
00120 #define HWND void*
00121 #define UINT unsigned int
00122 #endif
00123 #define GXVF GX_VARIANT_FLAGS::
00124 #define GXEC GX_ERROR_CODES::
00125 #else
00126 #define _GX_ENOENT GX_ENOENT
00127 #define _FPS_UMODE_DISCONNECT FPS_UMODE_DISCONNECT
00128 #define GXVF
00129 #define GXEC
00130 #endif
00131 #endif
00132
00133 #if !defined(GX_SWIGIF) && !defined(GX_MANUAL)
00134
00135
00136
00137
00138
00139
00140 enum {
00141 FPS_CALL_GROUP_FPSAPI = 0x20080000,
00142 FPSAPI_CALL_USEDEVICE = FPS_CALL_GROUP_FPSAPI+2,
00143 FPSAPI_CALL_USEDEVICEA = FPS_CALL_GROUP_FPSAPI+3,
00144 FPSAPI_CALL_CALIBRATE = FPS_CALL_GROUP_FPSAPI+60,
00145 FPSAPI_CALL_ISCALIBRATED = FPS_CALL_GROUP_FPSAPI+61,
00146 FPSAPI_CALL_SETEVENTFUNCTION = FPS_CALL_GROUP_FPSAPI+11,
00147 FPSAPI_CALL_TEST_PRESENCE = FPS_CALL_GROUP_FPSAPI+63,
00148 FPSAPI_CALL_CAPTURE_GETSTATUS = FPS_CALL_GROUP_FPSAPI+15,
00149 FPSAPI_CALL_CAPTURE_WAIT = FPS_CALL_GROUP_FPSAPI+16,
00150 FPSAPI_CALL_CAPTURE_PREVIEW = FPS_CALL_GROUP_FPSAPI+64,
00151 FPSAPI_CALL_SAVEIMAGE = FPS_CALL_GROUP_FPSAPI+19,
00152 FPSAPI_CALL_SAVEIMAGEA = FPS_CALL_GROUP_FPSAPI+20,
00153 FPSAPI_CALL_DRAWIMAGE = FPS_CALL_GROUP_FPSAPI+21,
00154 FPSAPI_CALL_SET_STATUS_LED = FPS_CALL_GROUP_FPSAPI+68,
00155 FPSAPI_CALL_TEST_POWER = FPS_CALL_GROUP_FPSAPI+69,
00156 FPSAPI_CALL_TEST_BUTTON = FPS_CALL_GROUP_FPSAPI+70,
00157 FPSAPI_CALL_BEGIN_WINDOW_MESSAGING = FPS_CALL_GROUP_FPSAPI+82,
00158 FPSAPI_CALL_END_WINDOW_MESSAGING = FPS_CALL_GROUP_FPSAPI+83,
00159 FPSAPI_CALL_GET_BUTTON_EVENT = FPS_CALL_GROUP_FPSAPI+84,
00160 FPSAPI_CALL_SUSPEND = FPS_CALL_GROUP_FPSAPI+85,
00161 FPSAPI_CALL_WAKEUP = FPS_CALL_GROUP_FPSAPI+86,
00162 FPSAPI_CALL_GET_UDINFO = FPS_CALL_GROUP_FPSAPI+94,
00163 FPSAPI_CALL_READ_UD = FPS_CALL_GROUP_FPSAPI+95,
00164 FPSAPI_CALL_WRITE_UD = FPS_CALL_GROUP_FPSAPI+96,
00165 FPSAPI_CALL_GETIMAGE_V = FPS_CALL_GROUP_FPSAPI+130,
00166 FPSAPI_CALL_GETDEVICEINFO = FPS_CALL_GROUP_FPSAPI+131,
00167 FPSAPI_CALL_CAPTURE = FPS_CALL_GROUP_FPSAPI+136,
00168 FPSAPI_CALL_CAPTURE_START = FPS_CALL_GROUP_FPSAPI+137,
00169 FPSAPI_CALL_RESETFINGERLIST = FPS_CALL_GROUP_FPSAPI+138,
00170 FPSAPI_CALL_FINGERSTONIST = FPS_CALL_GROUP_FPSAPI+139,
00171 FPSAPI_CALL_FINGERSTONISTA = FPS_CALL_GROUP_FPSAPI+140,
00172 FPSAPI_CALL_FINGERSTONISTMEM = FPS_CALL_GROUP_FPSAPI+141,
00173 FPSAPI_CALL_GETDEVICELIST = FPS_CALL_GROUP_FPSAPI+147,
00174 FPSAPI_CALL_GETDEVICELISTA = FPS_CALL_GROUP_FPSAPI+148,
00175 FPSAPI_CALL_CAPTURE_STOP = FPS_CALL_GROUP_FPSAPI+149,
00176 FPSAPI_CALL_NISTFINGERQUALITY = FPS_CALL_GROUP_FPSAPI+150,
00177 FPSAPI_CALL_BLINK_STATUS = FPS_CALL_GROUP_FPSAPI+151,
00178 };
00179
00180
00181
00182
00183
00184
00185
00186
00187 struct FPSAPI_PARM_GETSTATUS {
00188 int reqid;
00189 int status;
00190
00191 };
00192
00193
00194
00195
00196 struct FPSAPI_PARM_GETDEVICELIST {
00197 wchar_t **devices;
00198 bool *calibrated;
00199 int ndevices;
00200 };
00201
00202
00203
00204
00205 struct FPSAPI_PARM_GETDEVICELISTA {
00206 char **devices;
00207 bool *calibrated;
00208 int ndevices;
00209 };
00210
00211
00212
00213
00214 struct FPSAPI_PARM_USEDEVICE {
00215 const wchar_t *device;
00216 int mode;
00217
00218 };
00219
00220
00221
00222
00223 struct FPSAPI_PARM_USEDEVICEA {
00224 const char *device;
00225 int mode;
00226
00227 };
00228
00229
00230
00231
00232 struct FPSAPI_PARM_CALIBRATE {
00233 int windowid;
00234
00235 };
00236
00237
00238
00239
00240 struct FPSAPI_PARM_ISCALIBRATED {
00241 int windowid;
00242
00243 };
00244
00245 #endif
00246 #if !defined(GX_SWIGIF) && !(defined(GX_MANUAL) && defined(GX_DOTNET))
00247
00261 typedef void GXAPI FPS_EVFUNC(int event,int param1,int param2,void* uparam);
00262
00265 #endif
00266 #if !defined(GX_SWIGIF) && !defined(GX_MANUAL)
00267
00268
00269
00270
00271 struct FPSAPI_PARM_SETEVENTFUNCTION {
00272 FPS_EVFUNC *func;
00273 void *param;
00274 };
00275
00276
00277
00278
00279 struct FPSAPI_PARM_TEST_PRESENCE {
00280 int state;
00281 int windowid;
00282
00283 };
00284
00285
00286
00287
00288 struct FPSAPI_PARM_CAPTURE_WAIT {
00289 int reqid;
00290 };
00291
00292
00293
00294
00295 struct FPSAPI_PARM_CAPTURE_PREVIEW {
00296 int windowid;
00297 };
00298
00299
00300
00301
00302 struct FPSAPI_PARM_GETIMAGE_V {
00303 int smode;
00304
00305 int position;
00306
00307 int type;
00308
00309 gxVARIANT img;
00310 };
00311
00312
00313
00314
00315 struct FPSAPI_PARM_SAVEIMAGE {
00316 int smode;
00317
00318 int position;
00319
00320 int type;
00321
00322 const wchar_t *filename;
00323 int filetype;
00324 };
00325
00326
00327
00328
00329 struct FPSAPI_PARM_SAVEIMAGEA {
00330 int smode;
00331
00332 int position;
00333
00334 int type;
00335
00336 const char *filename;
00337 int filetype;
00338 };
00339
00340 #if defined(WIN32) && !defined(GX_DOTNET)
00341
00342
00343
00344
00345 struct FPSAPI_PARM_DRAWIMAGE {
00346 int smode;
00347
00348 int position;
00349
00350 int type;
00351
00352 HDC hdc;
00353 int x;
00354 int y;
00355 int xsize;
00356 int ysize;
00357 gxRCT *frame;
00358 };
00359
00360 #endif
00361
00362
00363
00364
00365 struct FPSAPI_PARM_NISTFINGERQUALITY {
00366 int position;
00367 int quality;
00368 };
00369
00370
00371
00372
00373 struct FPSAPI_PARM_SET_STATUS_LED {
00374 int ledmask;
00375 int color;
00376
00377
00378 };
00379
00380
00381
00382
00383 struct FPSAPI_PARM_BLINK_STATUS {
00384 int coding;
00385
00386
00387
00388 int iteration;
00389 int mask;
00390 int type;
00391
00392 unsigned int datalength;
00393 unsigned int *data;
00394 };
00395
00396
00397
00398 struct FPSAPI_PARM_TEST_POWER {
00399 int state;
00400 int level;
00401 };
00402
00403
00404
00405
00406 struct FPSAPI_PARM_TEST_BUTTON {
00407 int code;
00408 int state;
00409 };
00410
00411
00412
00413
00414 struct FPSAPI_PARM_GET_BUTTON_EVENT {
00415 int code;
00416 int state;
00417 };
00418
00419
00420
00421
00422 struct FPSAPI_PARM_BEGIN_WINDOW_MESSAGING {
00423 #if defined(WIN32)
00424 HWND hwnd;
00425 UINT base_msg;
00426 #else
00427 int rfu1;
00428 #endif
00429 };
00430
00431
00432
00433
00434 struct FPSAPI_PARM_GET_UDINFO {
00435 int nblocks;
00436 int sblock;
00437 };
00438
00439
00440
00441
00442 struct FPSAPI_PARM_READ_UD {
00443 int fblock;
00444 int nblocks;
00445 void *data;
00446 };
00447
00448
00449
00450
00451 struct FPSAPI_PARM_WRITE_UD {
00452 int fblock;
00453 int nblocks;
00454 const void *data;
00455 };
00456
00457
00458
00459
00460 struct FPSAPI_PARM_GETDEVICEINFO {
00461 gxVARIANT devinfo;
00462 };
00463
00464
00465
00466
00467 struct FPSAPI_PARM_CAPTURE {
00468 int timeout;
00469 int quality;
00470 int mode;
00471 int fingerlist;
00472 };
00473
00474
00475
00476
00477 struct FPSAPI_PARM_CAPTURE_START {
00478 int timeout;
00479 int quality;
00480 int mode;
00481 int fingerlist;
00482 int reqid;
00483
00484 };
00485
00486
00487
00488
00489 struct FPSAPI_PARM_FINGERSTONIST {
00490 const wchar_t *filename;
00491 gxVARIANT fields;
00492 };
00493
00494
00495
00496
00497 struct FPSAPI_PARM_FINGERSTONISTA {
00498 const char *filename;
00499 gxVARIANT fields;
00500 };
00501
00502
00503
00504
00505 struct FPSAPI_PARM_FINGERSTONISTMEM {
00506 void **buffer;
00507 gxi32 *buflen;
00508 gxVARIANT fields;
00509 };
00510
00511 #endif
00512
00513
00514
00515
00516
00517 #if !defined(NO_GX_FUNCTIONS) && !defined(GX_SWIGIF)
00518
00533 inline int fps_getdevicelist(gxHANDLE handle,wchar_t ***devices,int *ndevices) {
00534 struct FPSAPI_PARM_GETDEVICELIST gdl;
00535 int ret;
00536 assert(devices && ndevices);
00537 ret = gx_call(handle, FPSAPI_CALL_GETDEVICELIST, &gdl);
00538 *devices = gdl.devices;
00539 *ndevices = gdl.ndevices;
00540 return ret;
00541 }
00542
00553 inline int fps_getdevicelista(gxHANDLE handle,char ***devices,int *ndevices) {
00554 struct FPSAPI_PARM_GETDEVICELISTA gdl;
00555 int ret;
00556 assert(devices && ndevices);
00557 ret = gx_call(handle, FPSAPI_CALL_GETDEVICELISTA, &gdl);
00558 *devices = gdl.devices;
00559 *ndevices = gdl.ndevices;
00560 return ret;
00561 }
00562
00563 #ifdef __cplusplus
00564
00574 inline int fps_getdevicelist(gxHANDLE handle,char ***devices,int *ndevices) {
00575 return fps_getdevicelista(handle,devices,ndevices);
00576 }
00577 #endif
00578
00588 inline int fps_usedevice(gxHANDLE handle,const wchar_t *device,int mode) {
00589 struct FPSAPI_PARM_USEDEVICE ud;
00590 assert(device);
00591 ud.device = device;
00592 ud.mode = mode;
00593 return gx_call(handle, FPSAPI_CALL_USEDEVICE, &ud);
00594 }
00595
00605 inline int fps_usedevicea(gxHANDLE handle,const char *device,int mode) {
00606 struct FPSAPI_PARM_USEDEVICEA ud;
00607 assert(device);
00608 ud.device = device;
00609 ud.mode = mode;
00610 return gx_call(handle, FPSAPI_CALL_USEDEVICEA, &ud);
00611 }
00612
00621 inline int fps_usedevicen(gxHANDLE handle,int devno,int mode) {
00622 char **devlist;
00623 int ndev,ret;
00624 assert(devno>=0);
00625
00626 if(!fps_getdevicelista(handle,&devlist,&ndev))return 0;
00627 if(ndev<=devno){
00628 if(ndev)gx_globalfree(devlist);
00629 gx_seterror(_GX_ENOENT,L"No device found");
00630 return false;
00631 }
00632
00633 ret=fps_usedevicea(handle,devlist[devno],mode);
00634 gx_globalfree(devlist);
00635 return ret;
00636 }
00637
00638 #ifdef __cplusplus
00639
00649 inline int fps_usedevice(gxHANDLE handle,const char *device,int mode) {
00650 return fps_usedevicea(handle,device,mode);
00651 }
00652
00661 inline int fps_usedevice(gxHANDLE handle,int devno,int mode) {
00662 return fps_usedevicen(handle,devno,mode);
00663 }
00664 #endif
00665
00671 inline int fps_closedevice(gxHANDLE handle) {
00672 struct FPSAPI_PARM_USEDEVICEA ud;
00673 ud.device = 0;
00674 ud.mode=_FPS_UMODE_DISCONNECT;
00675 return gx_call(handle, FPSAPI_CALL_USEDEVICEA, &ud);
00676 }
00677 #if 0
00678
00689 inline int fps_calibrate(gxHANDLE handle,int windowid GX_DEFARG(0)) {
00690 struct FPSAPI_PARM_CALIBRATE cal;
00691 cal.windowid = windowid;
00692 return gx_call(handle, FPSAPI_CALL_CALIBRATE, &cal);
00693 }
00694
00703 inline int fps_iscalibrated(gxHANDLE handle,int windowid GX_DEFARG(0)) {
00704 struct FPSAPI_PARM_ISCALIBRATED cal;
00705 cal.windowid = windowid;
00706 return gx_call(handle, FPSAPI_CALL_ISCALIBRATED, &cal);
00707 }
00708 #endif
00709
00720 inline int fps_testpresence(gxHANDLE handle,int *state,int windowid GX_DEFARG(0)) {
00721 struct FPSAPI_PARM_TEST_PRESENCE td;
00722 int ret;
00723 assert(state);
00724 td.windowid = windowid;
00725 ret = gx_call(handle, FPSAPI_CALL_TEST_PRESENCE, &td);
00726 if(state)*state = td.state;
00727 return ret;
00728 }
00729
00739 inline int fps_setstatusled(gxHANDLE handle, int ledmask, int color) {
00740 struct FPSAPI_PARM_SET_STATUS_LED led;
00741 led.ledmask = ledmask;
00742 led.color = color;
00743 return gx_call(handle, FPSAPI_CALL_SET_STATUS_LED, &led);
00744 }
00745
00760 inline int fps_blinkstatus(gxHANDLE handle, int coding, int mask, int type, int iteration, unsigned int *data, unsigned int datalength) {
00761
00762 struct FPSAPI_PARM_BLINK_STATUS out_data;
00763
00764 out_data.coding = coding;
00765 out_data.mask = mask;
00766 out_data.type = type;
00767 out_data.iteration = iteration;
00768 out_data.data = data;
00769 out_data.datalength = datalength;
00770
00771 return gx_call(handle, FPSAPI_CALL_BLINK_STATUS, &out_data);
00772 }
00781 inline int fps_testpower(gxHANDLE handle, int *state, int *level) {
00782 struct FPSAPI_PARM_TEST_POWER tp;
00783 int ret;
00784 assert(state);
00785 ret = gx_call(handle, FPSAPI_CALL_TEST_POWER, &tp);
00786 if(state)*state = tp.state;
00787 if(level)*level = tp.level;
00788 return ret;
00789 }
00790
00798 inline int fps_testbutton(gxHANDLE handle, int keycode, int *state) {
00799 struct FPSAPI_PARM_TEST_BUTTON bt;
00800 int ret;
00801 assert(state);
00802 bt.code = keycode;
00803 ret = gx_call(handle, FPSAPI_CALL_TEST_BUTTON, &bt);
00804 if(state)*state = bt.state;
00805 return ret;
00806 }
00807
00815 inline int fps_getbuttonevent(gxHANDLE handle, int *keycode, int *state) {
00816 struct FPSAPI_PARM_GET_BUTTON_EVENT bt;
00817 int ret;
00818 assert(state);
00819 assert(keycode);
00820 ret = gx_call(handle, FPSAPI_CALL_GET_BUTTON_EVENT, &bt);
00821 if(state)*state = bt.state;
00822 if(keycode)*keycode = bt.code;
00823 return ret;
00824 }
00825
00836 inline int fps_suspend(gxHANDLE handle) {
00837 return gx_call(handle,FPSAPI_CALL_SUSPEND,0);
00838 }
00839
00846 inline int fps_wakeup(gxHANDLE handle) {
00847 return gx_call(handle,FPSAPI_CALL_WAKEUP,0);
00848 }
00849
00858 inline int fps_getudinfo(gxHANDLE handle, int *nblocks, int *sblock) {
00859 struct FPSAPI_PARM_GET_UDINFO gi;
00860 int ret;
00861 assert(nblocks);
00862 assert(sblock);
00863 ret = gx_call(handle, FPSAPI_CALL_GET_UDINFO, &gi);
00864 if(nblocks)*nblocks = gi.nblocks;
00865 if(sblock)*sblock = gi.sblock;
00866 return ret;
00867 }
00868
00881 inline int fps_readudata(gxHANDLE handle, int fblock, int nblocks, void **data) {
00882 struct FPSAPI_PARM_READ_UD ru;
00883 int ret;
00884 assert(data);
00885 ru.fblock = fblock;
00886 ru.nblocks = nblocks;
00887 ret = gx_call(handle, FPSAPI_CALL_READ_UD, &ru);
00888 if(data)*data = ru.data;
00889 return ret;
00890 }
00891
00901 inline int fps_writeudata(gxHANDLE handle, int fblock, int nblocks, const void *data) {
00902 struct FPSAPI_PARM_WRITE_UD wu;
00903 wu.fblock = fblock;
00904 wu.nblocks = nblocks;
00905 wu.data = data;
00906 return gx_call(handle, FPSAPI_CALL_WRITE_UD, &wu);
00907 }
00908
00916 inline int fps_getdeviceinfo(gxHANDLE handle, gxVARIANT *devinfo) {
00917 struct FPSAPI_PARM_GETDEVICEINFO gdi;
00918 int ret;
00919 assert(devinfo);
00920 ret = gx_call(handle, FPSAPI_CALL_GETDEVICEINFO, &gdi);
00921 if(ret && devinfo)*devinfo = gdi.devinfo;
00922 return ret;
00923 }
00924
00937 inline int fps_seteventfunction(gxHANDLE handle, FPS_EVFUNC *eventhandler, void *param) {
00938 struct FPSAPI_PARM_SETEVENTFUNCTION sef;
00939 sef.func = eventhandler;
00940 sef.param = param;
00941 return gx_call(handle, FPSAPI_CALL_SETEVENTFUNCTION, &sef);
00942 }
00943
00944 #if (defined(WIN32) || defined(GX_MANUAL)) && !defined(GX_SWIG)
00945
00963 inline int fps_beginwindowmessaging(gxHANDLE handle, HWND hwnd, UINT base_msg GX_DEFARG(WM_USER)) {
00964 struct FPSAPI_PARM_BEGIN_WINDOW_MESSAGING bwm;
00965 bwm.hwnd = hwnd;
00966 bwm.base_msg = base_msg;
00967 return gx_call(handle,FPSAPI_CALL_BEGIN_WINDOW_MESSAGING,&bwm);
00968 }
00969
00979 inline int fps_endwindowmessaging(gxHANDLE handle) {
00980 return gx_call(handle,FPSAPI_CALL_END_WINDOW_MESSAGING,0);
00981 }
00982
00983 #endif
00984
00985 #if (defined(LINUX) || defined(GX_MANUAL)) && !defined(GX_SWIG)
00986
00997 inline int fps_startbgprocesses(gxHANDLE handle) {
00998 struct FPSAPI_PARM_BEGIN_WINDOW_MESSAGING bwm;
00999 return gx_call(handle,FPSAPI_CALL_BEGIN_WINDOW_MESSAGING,&bwm);
01000 }
01001
01010 inline int fps_stopbgprocesses(gxHANDLE handle) {
01011 return gx_call(handle,FPSAPI_CALL_END_WINDOW_MESSAGING,0);
01012 }
01013
01014 #endif
01015
01042 inline int fps_capture(gxHANDLE handle, int timeout, int quality, int mode, int fingerlist) {
01043 struct FPSAPI_PARM_CAPTURE param;
01044 param.timeout = timeout;
01045 param.quality = quality;
01046 param.mode = mode;
01047 param.fingerlist = fingerlist;
01048 return gx_call(handle, FPSAPI_CALL_CAPTURE, ¶m);
01049 }
01050
01073 inline int fps_capture_start(gxHANDLE handle, int timeout, int quality, int mode,
01074 int fingerlist, int *reqid) {
01075 struct FPSAPI_PARM_CAPTURE_START param;
01076 int ret;
01077 param.timeout = timeout;
01078 param.quality = quality;
01079 param.mode = mode;
01080 param.fingerlist = fingerlist;
01081 ret = gx_call(handle, FPSAPI_CALL_CAPTURE_START, ¶m);
01082 if(reqid) *reqid = param.reqid;
01083 return ret;
01084 }
01085
01096 inline int fps_capture_getstatus(gxHANDLE handle,int reqid,int *status) {
01097 struct FPSAPI_PARM_GETSTATUS stat;
01098 int ret;
01099 assert(status);
01100 stat.reqid = reqid;
01101 ret = gx_call(handle, FPSAPI_CALL_CAPTURE_GETSTATUS, &stat);
01102 if(status) *status = stat.status;
01103 return ret;
01104 }
01105
01113 inline int fps_capture_stop(gxHANDLE handle) {
01114 return gx_call(handle, FPSAPI_CALL_CAPTURE_STOP, 0);
01115 }
01116
01125 inline int fps_capture_wait(gxHANDLE handle,int reqid) {
01126 struct FPSAPI_PARM_CAPTURE_WAIT cap;
01127 cap.reqid = reqid;
01128 return gx_call(handle, FPSAPI_CALL_CAPTURE_WAIT, &cap);
01129 }
01130
01139 inline int fps_capture_preview(gxHANDLE handle,int windowid GX_DEFARG(0)) {
01140 struct FPSAPI_PARM_CAPTURE_PREVIEW cap;
01141 cap.windowid = windowid;
01142 return gx_call(handle, FPSAPI_CALL_CAPTURE_PREVIEW, &cap);
01143 }
01144
01164 inline int fps_getimage(gxHANDLE handle,int smode,int position,int type,gxVARIANT *img) {
01165 struct FPSAPI_PARM_GETIMAGE_V gi;
01166 int ret;
01167 assert(img);
01168 gi.smode = smode;
01169 gi.position = position;
01170 gi.type = type;
01171 ret = gx_call(handle, FPSAPI_CALL_GETIMAGE_V, &gi);
01172 *img = gi.img;
01173 return ret;
01174 }
01175
01190 inline int fps_saveimage(gxHANDLE handle,int smode,int position,int type,const wchar_t *filename,int filetype) {
01191 struct FPSAPI_PARM_SAVEIMAGE si;
01192 si.smode = smode;
01193 si.position = position;
01194 si.type = type;
01195 si.filename = filename;
01196 si.filetype = filetype;
01197 return gx_call(handle, FPSAPI_CALL_SAVEIMAGE, &si);
01198 }
01199
01215 inline int fps_saveimagea(gxHANDLE handle,int smode,int position,int type,const char *filename,int filetype) {
01216 struct FPSAPI_PARM_SAVEIMAGEA si;
01217 si.smode = smode;
01218 si.position = position;
01219 si.type = type;
01220 si.filename = filename;
01221 si.filetype = filetype;
01222 return gx_call(handle, FPSAPI_CALL_SAVEIMAGEA, &si);
01223 }
01224
01225 #ifdef __cplusplus
01226
01241 inline int fps_saveimage(gxHANDLE handle,int smode,int position,int type,const char *filename,int filetype) {
01242 return fps_saveimagea(handle,smode,position,type,filename,filetype);
01243 }
01244 #endif
01245
01246 #if (defined(WIN32) || defined(GX_MANUAL)) && !defined(GX_DOTNET)
01247
01265 inline int fps_drawimage(gxHANDLE handle,int smode,int position,int type,HDC hdc,int x,int y,int xsize,int ysize,gxRCT *frame) {
01266 struct FPSAPI_PARM_DRAWIMAGE di;
01267 di.smode = smode;
01268 di.position = position;
01269 di.type = type;
01270 di.hdc = hdc;
01271 di.x = x;
01272 di.y = y;
01273 di.xsize = xsize;
01274 di.ysize = ysize;
01275 di.frame = frame;
01276 return gx_call(handle, FPSAPI_CALL_DRAWIMAGE, &di);
01277 }
01278 #endif
01279
01293 inline int fps_fingertonist(gxHANDLE handle,const wchar_t *filename,gxVARIANT fields) {
01294 struct FPSAPI_PARM_FINGERSTONIST fn;
01295 fn.filename = filename;
01296 fn.fields = fields;
01297 return gx_call(handle, FPSAPI_CALL_FINGERSTONIST, &fn);
01298 }
01299
01307 inline int fps_fingertonista(gxHANDLE handle,const char *filename,gxVARIANT fields) {
01308 struct FPSAPI_PARM_FINGERSTONISTA fn;
01309 fn.filename = filename;
01310 fn.fields = fields;
01311 return gx_call(handle, FPSAPI_CALL_FINGERSTONISTA, &fn);
01312 }
01313
01314 #ifdef __cplusplus
01315
01322 inline int fps_fingertonist(gxHANDLE handle,const char *filename,gxVARIANT fields) {
01323 return fps_fingertonista(handle,filename,fields);
01324 }
01325 #endif
01326
01335 inline int fps_fingertonistmem(gxHANDLE handle,void **buffer, int *buflen,gxVARIANT fields) {
01336 struct FPSAPI_PARM_FINGERSTONISTMEM fn;
01337 fn.buffer = buffer;
01338 fn.buflen = buflen;
01339 fn.fields = fields;
01340 return gx_call(handle, FPSAPI_CALL_FINGERSTONISTMEM, &fn);
01341 }
01342
01351 inline int fps_nistfingerquality(gxHANDLE handle, int *quality, int position) {
01352 struct FPSAPI_PARM_NISTFINGERQUALITY nistqualityparam;
01353 int ret;
01354 nistqualityparam.position = position;
01355 ret = gx_call(handle, FPSAPI_CALL_NISTFINGERQUALITY, &nistqualityparam);
01356 if(ret && quality) *quality = nistqualityparam.quality;
01357 return ret;
01358 }
01359
01371 inline int fps_resetfingerlist(gxHANDLE handle) {
01372 return gx_call(handle, FPSAPI_CALL_RESETFINGERLIST, (void*)0);
01373 }
01374
01375 #endif
01376
01377 #ifdef GX_DOTNET
01378 #pragma managed
01379 #undef gxPG4
01380 #endif
01381
01382
01383 #if !defined(NO_GX_CLASSES)
01384
01385 #if !defined(GX_MANUAL) && defined(GX_DOTNET)
01386
01387 private __value struct fps_dotnetfix { gxVARIANT dat; };
01388 #endif
01389
01394 GX_CLASS FingerPrintScanner : public gxHandle
01395 #ifdef GX_DOTNET
01396 ,public System::IDisposable
01397 #endif
01398 {
01399
01400 public:
01401
01403 inline FingerPrintScanner() throw(gxError) {
01404 #ifndef GX_DOTNET
01405 if(!gx_openmodule(this, L"prapi", L"default")) gxthrow;
01406 #else
01407 GX_GETHANDLE(h);
01408 if(!gx_openmodule(&h, L"prapi", L"default")) gxthrow;
01409 _set_handle(h.handle);
01410 #endif
01411 }
01412
01414 inline void Dispose(void) {
01415 #ifdef GX_DOTNET
01416 System::GC::SuppressFinalize(this);
01417 #endif
01418 gxHandle::Dispose();
01419 }
01420
01421 #if !defined(GX_SWIG) && !defined(GX_DOTNET)
01422
01432 inline bool GetDeviceList(wchar_t ***devices,int *ndevices) throw(gxError) {
01433 bool st = fps_getdevicelist(*this,devices,ndevices)!=0;
01434 gxcondthrow(!st);
01435 return st;
01436 }
01437
01448 inline bool GetDeviceList(char ***devices,int *ndevices) throw(gxError) {
01449 bool st = fps_getdevicelist(*this,devices,ndevices)!=0;
01450 gxcondthrow(!st);
01451 return st;
01452 }
01453 #endif
01454
01455 #ifdef GX_UNICODE
01456
01460 inline gxOutStrArray GetDeviceList(void) throw(gxError) {
01461 wchar_t **devices;
01462 int ndevices = 0;
01463 GX_GETHANDLE(h);
01464 if(!fps_getdevicelist(h,&devices,&ndevices)) {
01465 gxthrow;
01466 return GX_PUTGSTRINGARRAY_NONE;
01467 }
01468 return GX_PUTGSTRINGARRAY(devices, ndevices, true);
01469 }
01470 #endif
01471
01472 #ifdef GX_ASCII
01473
01477 inline gxOutAStrArray GetDeviceListA(void) throw(gxError) {
01478 char **devices;
01479 int ndevices = 0;
01480 if(!fps_getdevicelist(*this,&devices,&ndevices)) {
01481 gxthrow;
01482 return GX_PUTGASTRINGARRAY_NONE;
01483 }
01484 return GX_PUTGASTRINGARRAY(devices, ndevices, true);
01485 }
01486 #endif
01487
01488 #if !defined(GX_SWIG) && !defined(GX_DOTNET)
01489
01500 inline bool UseDevice(const wchar_t *device,int mode) throw(gxError) {
01501 bool st = fps_usedevice(*this,device,mode)!=0;
01502 gxcondthrow(!st);
01503 return st;
01504 }
01505
01517 inline bool UseDevice(const char *device,int mode) throw(gxError) {
01518 bool st = fps_usedevice(*this,device,mode)!=0;
01519 gxcondthrow(!st);
01520 return st;
01521 }
01522 #endif
01523
01524 #ifdef GX_UNICODE
01525
01536 inline bool UseDevice(gxInStr device,int mode) throw(gxError) {
01537 GX_GETSTRING(_device, device);
01538 GX_GETHANDLE(h);
01539 bool st = fps_usedevice(h, _device,mode)!=0;
01540 gxcondthrow(!st);
01541 return st;
01542 }
01543 #endif
01544
01545 #ifdef GX_ASCII
01546
01557 inline bool UseDevice(gxInAStr device,int mode) throw(gxError) {
01558 GX_GETASTRING(_device, device);
01559 GX_GETHANDLE(h);
01560 bool st = fps_usedevice(h, _device,mode)!=0;
01561 gxcondthrow(!st);
01562 return st;
01563 }
01564 #endif
01565
01575 inline bool UseDevice(int devno,int mode) throw(gxError) {
01576 GX_GETHANDLE(h);
01577 bool st = fps_usedevice(h,devno,mode)!=0;
01578 gxcondthrow(!st);
01579 return st;
01580 }
01581
01587 inline bool CloseDevice(void) throw(gxError) {
01588 GX_GETHANDLE(h);
01589 bool st = fps_closedevice(h)!=0;
01590 gxcondthrow(!st);
01591 return st;
01592 }
01593 #if 0
01594
01605 inline bool Calibrate(int windowid GX_DEFARG(0)) throw(gxError) {
01606 GX_GETHANDLE(h);
01607 bool st = fps_calibrate(h,windowid)!=0;
01608 gxcondthrow(!st);
01609 return st;
01610 }
01611
01620 inline bool IsCalibrated(int windowid GX_DEFARG(0)) {
01621 GX_GETHANDLE(h);
01622 return fps_iscalibrated(h,windowid)!=0;
01623 }
01624 #endif
01625
01635 inline int TestPresence(int windowid GX_DEFARG(0)) {
01636 int state;
01637 GX_GETHANDLE(h);
01638 return fps_testpresence(h,&state,windowid) ? state : -1;
01639 }
01640
01649 inline bool SetStatusLed(int ledmask, int color) throw(gxError) {
01650 GX_GETHANDLE(h);
01651 bool st = fps_setstatusled(h, ledmask, color)!=0;
01652 gxcondthrow(!st);
01653 return st;
01654 }
01655
01656 #if !defined(GX_SWIG) && !defined(GX_DOTNET)
01657
01670 inline bool BlinkStatus(int coding, int mask, int type, int iteration, unsigned int *data, unsigned int datalength) throw(gxError) {
01671 GX_GETHANDLE(h);
01672 bool st = fps_blinkstatus(h, coding, mask, type, iteration, data, datalength)!=0;
01673 gxcondthrow(!st);
01674 return st;
01675 }
01676 #endif
01677
01678 #ifndef NO_GX_STL
01679
01692 inline bool BlinkStatus(int coding, int mask, int type, int iteration, gxInIntArray data) {
01693 GX_GETHANDLE(h);
01694 GX_GETININTARRAY(data);
01695 bool st = fps_blinkstatus(h, coding, mask, type, iteration,(unsigned int *)GX_GETININTARRAY_PTR(data), GX_GETININTARRAY_LEN(data))!=0;
01696 GX_FREEININTARRAY(data);
01697 gxcondthrow(!st);
01698 return st;
01699 }
01700 #endif
01701
01705 inline int TestPowerState(void) {
01706 int state;
01707 GX_GETHANDLE(h);
01708 return fps_testpower(h,&state,0) ? state : -1;
01709 }
01710
01717 inline int TestPowerLevel(void) {
01718 int state,level;
01719 GX_GETHANDLE(h);
01720 return fps_testpower(h,&state,&level) ? level : -1;
01721 }
01722
01728 inline int TestButton(int keycode) {
01729 int state;
01730 GX_GETHANDLE(h);
01731 return fps_testbutton(h,keycode,&state) ? state : -1;
01732 }
01733
01743 inline bool Suspend() {
01744 GX_GETHANDLE(h);
01745 bool st = fps_suspend(h)!=0;
01746 gxcondthrow(!st);
01747 return st;
01748 }
01749
01755 inline bool WakeUp() {
01756 GX_GETHANDLE(h);
01757 bool st = fps_wakeup(h)!=0;
01758 gxcondthrow(!st);
01759 return st;
01760 }
01761
01762 #if !defined(GX_SWIG) && !defined(GX_DOTNET)
01763
01770 inline bool GetUDInfo(int *nblocks, int *sblock) throw(gxError) {
01771 GX_GETHANDLE(h);
01772 bool st = fps_getudinfo(h, nblocks, sblock) != 0;
01773 gxcondthrow(!st);
01774 return st;
01775 }
01776
01788 inline bool ReadUData(int fblock, int nblocks, void **data) throw(gxError) {
01789 GX_GETHANDLE(h);
01790 bool st = fps_readudata(h, fblock, nblocks, data) != 0;
01791 gxcondthrow(!st);
01792 return st;
01793 }
01794
01803 inline bool WriteUData(int fblock, int nblocks, const void *data) throw(gxError) {
01804 GX_GETHANDLE(h);
01805 bool st = fps_writeudata(h, fblock, nblocks, data) != 0;
01806 gxcondthrow(!st);
01807 return st;
01808 }
01809 #else
01810
01818 inline gxOutData ReadUData(int fblock, int nblocks) throw(gxError) {
01819 GX_GETHANDLE(h);
01820 void *data;
01821 if (fps_readudata(h, fblock, nblocks, &data) == 0) {
01822 gxthrow;
01823 return GX_PUTDATA_NONE;
01824 }
01825 int i,sblock;
01826 if (fps_getudinfo(h, &i, &sblock) == 0) {
01827 gxthrow;
01828 return GX_PUTDATA_NONE;
01829 }
01830 i=nblocks*sblock;
01831 gxOutData od = GX_PUTDATA(data, i);
01832 if(data) gx_globalfree(data);
01833 return od;
01834 }
01835
01844 inline bool WriteUData(int fblock, int nblocks, gxInData data) throw(gxError) {
01845 GX_GETHANDLE(h);
01846 GX_GETDATA(data);
01847 bool st = fps_writeudata(h, fblock, nblocks, GX_DATAPTR(data)) != 0;
01848 gxcondthrow(!st);
01849 return st;
01850 }
01851 #endif
01852
01858 inline int GetUDNumberOfBlocks(void) throw(gxError) {
01859 GX_GETHANDLE(h);
01860 int nblocks;
01861 int sblock;
01862 bool st = fps_getudinfo(h, &nblocks, &sblock) != 0;
01863 gxcondthrow(!st);
01864 return st ? nblocks : -1;
01865 }
01866
01872 inline int GetUDBlockSize(void) throw(gxError) {
01873 GX_GETHANDLE(h);
01874 int nblocks;
01875 int sblock;
01876 bool st = fps_getudinfo(h, &nblocks, &sblock) != 0;
01877 gxcondthrow(!st);
01878 return st ? sblock : -1;
01879 }
01880
01885 inline gxVariant * GetDeviceInfo() throw(gxError) {
01886 GX_GETHANDLE(h);
01887 gxVARIANT d;
01888 bool st = fps_getdeviceinfo(h,&d) != 0;
01889 gxcondthrow(!st);
01890 if(st) gxSystem::ClearError();
01891 if(!d) return 0;
01892 #ifndef GX_DOTNET
01893 gxVariant * vr = new gxVariant(d);
01894 gx_unrefvariant(d);
01895 #else
01896 gxVariant * vr = new gxVariant();
01897 vr->_set_variant(d);
01898 #endif
01899 if(!vr){gxSystem::SetError(GXEC GX_ENOMEM);gxthrow;}
01900 return vr;
01901 }
01902
01903 #if !defined(GX_SWIGIF) && !defined(GX_DOTNET)
01904
01915 inline bool SetEventFunction(FPS_EVFUNC *eventhandler,void *param) {
01916 return fps_seteventfunction(*this,eventhandler,param)!=0;
01917 }
01918 #endif
01919
01920 #if (defined(WIN32) || defined(GX_MANUAL)) && !defined(GX_SWIG)
01921
01938 #ifndef GX_DOTNET
01939 inline bool BeginWindowMessaging(HWND hwnd, UINT base_msg GX_DEFARG(WM_USER)) {
01940 bool st = fps_beginwindowmessaging(*this,hwnd, base_msg)!=0;
01941 gxcondthrow(!st);
01942 return st;
01943 }
01944 #else
01945 inline bool BeginWindowMessaging(gxInPtr hwnd, UINT base_msg GX_DEFARG(WM_USER)) {
01946 GX_GETHANDLE(h);
01947 bool st = fps_beginwindowmessaging(h,hwnd.ToPointer(), base_msg)!=0;
01948 gxcondthrow(!st);
01949 return st;
01950 }
01951 #endif
01952
01961 inline bool EndWindowMessaging() {
01962 GX_GETHANDLE(h);
01963 bool st = fps_endwindowmessaging(h)!=0;
01964 gxcondthrow(!st);
01965 return st;
01966 }
01967
01968 #endif
01969
01970 #if (defined(LINUX) || defined(GX_MANUAL)) && !defined(GX_SWIG)
01971
01981 inline int StartBGProcesses() throw(gxError) {
01982 bool st = fps_startbgprocesses(*this);
01983 gxcondthrow(!st);
01984 return st;
01985 }
01986
01994 inline int StopBGProcesses() {
01995 return fps_stopbgprocesses(*this);
01996 }
01997
01998 #endif
01999
02020 inline bool Capture(int timeout, int quality, int mode, int fingerlist) throw(gxError) {
02021 GX_GETHANDLE(h);
02022 bool st = fps_capture(h, timeout, quality, mode, fingerlist)!=0;
02023 gxcondthrow(!st);
02024 return st;
02025 }
02026
02049 inline int CaptureStart(int timeout, int quality, int mode, int fingerlist) throw(gxError) {
02050 GX_GETHANDLE(h);
02051 int reqid;
02052 bool st = fps_capture_start(h, timeout, quality, mode, fingerlist, &reqid)!=0;
02053 gxcondthrow(!st);
02054 return st ? reqid : -1;
02055 }
02056
02067 inline int CaptureStatus(int reqid) throw(gxError) {
02068 GX_GETHANDLE(h);
02069 int status;
02070 bool st = fps_capture_getstatus(h,reqid,&status)!=0;
02071 gxcondthrow(!st);
02072 return st ? status : -1;
02073 }
02074
02083 inline bool CaptureStop() throw(gxError) {
02084 GX_GETHANDLE(h);
02085 bool st = fps_capture_stop(h)!=0;
02086 gxcondthrow(!st);
02087 return st;
02088 }
02089
02098 inline bool CaptureWait(int reqid) throw(gxError) {
02099 GX_GETHANDLE(h);
02100 bool st = fps_capture_wait(h,reqid)!=0;
02101 gxcondthrow(!st);
02102 return st;
02103 }
02104
02115 inline bool CapturePreview(int windowid GX_DEFARG(0)) throw(gxError) {
02116 GX_GETHANDLE(h);
02117 bool st = fps_capture_preview(h,windowid)!=0;
02118 gxcondthrow(!st);
02119 return st;
02120 }
02121
02138 inline gxVariant * GetImage(int smode,int position,int type) throw(gxError) {
02139 gxVARIANT img = 0;
02140 gxVariant *vimg = 0;
02141 GX_GETHANDLE(h);
02142 if(!fps_getimage(h,smode,position,type,&img)) {
02143 gxthrow;
02144 return vimg;
02145 }
02146
02147 #if !defined(GX_DOTNET) && !defined(GX_SWIG)
02148 if(img)
02149 #endif
02150 #ifndef GX_DOTNET
02151 {
02152 vimg = new gxVariant(img);
02153 if(img)gx_unrefvariant(img);
02154 }
02155 #else
02156 {
02157 vimg = new gxVariant();
02158 vimg->_set_variant(img);
02159 }
02160 #endif
02161 #if !defined(GX_DOTNET) && !defined(GX_SWIG)
02162 if(img)
02163 #endif
02164 if(!vimg){gxSystem::SetError(GX_ENOMEM);gxthrow;}
02165 if(!img) gxSystem::ClearError();
02166 return vimg;
02167 }
02168
02169 #if !defined(GX_SWIG) && !defined(GX_DOTNET)
02170
02184 inline bool SaveImage(int smode,int position,int type,const wchar_t *filename,int filetype) throw(gxError) {
02185 bool st = fps_saveimage(*this,smode,position,type,filename,filetype)!=0;
02186 gxcondthrow(!st);
02187 return st;
02188 }
02189
02205 inline bool SaveImage(int smode,int position,int type,const char *filename,int filetype) throw(gxError) {
02206 bool st = fps_saveimage(*this,smode,position,type,filename,filetype)!=0;
02207 gxcondthrow(!st);
02208 return st;
02209 }
02210 #endif
02211
02212 #ifdef GX_UNICODE
02213
02228 inline bool SaveImage(int smode,int position,int type,gxInStr filename,int filetype) throw(gxError) {
02229 GX_GETHANDLE(h);
02230 GX_GETSTRING(_filename, filename);
02231 bool st = fps_saveimage(h,smode,position,type,_filename,filetype)!=0;
02232 gxcondthrow(!st);
02233 return st;
02234 }
02235 #endif
02236
02237 #ifdef GX_ASCII
02238
02253 inline bool SaveImage(int smode,int position,int type,gxInAStr filename,int filetype) throw(gxError) {
02254 GX_GETHANDLE(h);
02255 GX_GETASTRING(_filename, filename);
02256 bool st = fps_saveimage(h,smode,position,type,_filename,filetype)!=0;
02257 gxcondthrow(!st);
02258 return st;
02259 }
02260 #endif
02261
02262 #if (defined(WIN32) || defined(GX_MANUAL)) && !defined(GX_DOTNET) && !defined(GX_SWIG)
02263
02281 inline bool DisplayImage(int smode,int position,int type,HDC hdc,int x,int y,int xsize,int ysize,gxRCT *frame) throw(gxError) {
02282 bool st = fps_drawimage(*this,smode,position,type,hdc,x,y,xsize,ysize,frame)!=0;
02283 gxcondthrow(!st);
02284 return st;
02285 }
02286 #endif
02287
02288 #if !defined(GX_SWIG) && !defined(GX_DOTNET)
02289
02295 inline bool FingerToNist(const wchar_t *filename,gxVariant *fields) throw(gxError) {
02296 bool st = fps_fingertonist(*this,filename,(fields)?fields->_variant:0)!=0;
02297 gxcondthrow(!st);
02298 return st;
02299 }
02300
02307 inline bool FingerToNist(const char *filename,gxVariant *fields) throw(gxError) {
02308 bool st = fps_fingertonist(*this,filename,(fields)?fields->_variant:0)!=0;
02309 gxcondthrow(!st);
02310 return st;
02311 }
02312
02320 inline bool FingerToNistMem(void **buffer, int *buflen,gxVariant *fields) throw(gxError) {
02321 bool st = fps_fingertonistmem(*this,buffer,buflen,fields?fields->_variant:0)!=0;
02322 gxcondthrow(!st);
02323 return st;
02324 }
02325 #endif
02326
02327 #ifdef GX_UNICODE
02328
02334 inline bool FingerToNist(gxInStr filename,gxVariant *fields) throw(gxError) {
02335 GX_GETHANDLE(h);
02336 #ifdef GX_DOTNET
02337 gxVARIANT var = fields?(gxVARIANT)GX_GETPTR(fields->_get_variant()):0;
02338 #else
02339 gxVARIANT var = fields?fields->_variant:0;
02340 #endif
02341 GX_GETSTRING(_filename, filename);
02342 bool st = fps_fingertonist(h,_filename,var)!=0;
02343 gxcondthrow(!st);
02344 return st;
02345 }
02346 #endif
02347
02348 #ifdef GX_ASCII
02349
02355 inline bool FingerToNist(gxInAStr filename,gxVariant *fields) throw(gxError) {
02356 GX_GETHANDLE(h);
02357 GX_GETASTRING(_filename, filename);
02358 bool st = fps_fingertonist(h,_filename,(fields)?fields->_variant:0)!=0;
02359 gxcondthrow(!st);
02360 return st;
02361 }
02362 #endif
02363
02364 #if defined(GX_SWIG) || defined(GX_DOTNET)
02365
02369 inline gxOutData FingerToNistMem(gxVariant *fields) throw(gxError) {
02370 void *buffer = (void *)0;
02371 gxi32 buflen = 0;
02372 GX_GETHANDLE(h);
02373 #ifdef GX_DOTNET
02374 gxVARIANT var = fields?(gxVARIANT)GX_GETPTR(fields->_get_variant()):0;
02375 #else
02376 gxVARIANT var = fields?fields->_variant:0;
02377 #endif
02378 if(!fps_fingertonistmem(h,&buffer,&buflen,var)) {
02379 gxthrow;
02380 return GX_PUTDATA_NONE;
02381 }
02382 gxOutData ret = GX_PUTDATA(buffer, buflen);
02383 if(buffer) gx_globalfree(buffer);
02384 return ret;
02385 }
02386 #endif
02387
02396 inline int NistFingerQuality(int position) throw(gxError) {
02397 int quality;
02398 GX_GETHANDLE(h);
02399 if(!fps_nistfingerquality(h, &quality, position)) quality = -1;
02400 gxcondthrow(quality<0);
02401 return quality;
02402 }
02403
02413 inline bool ResetFingerList(void) throw(gxError) {
02414 GX_GETHANDLE(h);
02415 bool st = fps_resetfingerlist(h)!=0;
02416 gxcondthrow(!st);
02417 return st;
02418 }
02419 };
02420
02421
02422 #endif
02423
02424 #ifdef GX_NAMESPACES
02425 }
02426 #endif
02427
02428 #ifdef __BORLANDC__
02429 #pragma warn .rch
02430 #endif
02431 #ifdef _MSC_VER
02432 #pragma warning(pop)
02433 #endif
02434
02435 #endif