#ifndef SGFPLIB_H
#define SGFPLIB_H
#if (defined(WIN32) || defined(_WIN32_WCE))
#include <windows.h>
#ifdef SGFPLIB_EXPORTS
#define SGFPM_DLL_DECL __declspec(dllexport)
#else
#define SGFPM_DLL_DECL
#endif
#else
#define SGFPM_DLL_DECL
#define WINAPI
#define FAR
#ifndef NULL
#define NULL 0
#endif
typedef void* HWND;
typedef void* HDC;
typedef unsigned long DWORD;
typedef int BOOL;
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned char* LPTSTR;
typedef struct
{
int left, top, right, bottom;
} RECT;
typedef RECT* LPRECT;
#endif
#ifndef __cplusplus
typedef BOOL bool;
#endif
#ifdef __cplusplus
extern "C" {
#endif
#define FDU03_MSG 1001
#define FDU04_MSG 4001
#define FDU05_MSG 5001
#define FDU06_MSG 6001
#define FDU07_MSG FDU05_MSG
#define FDU08_MSG FDU05_MSG
#define AUTO_ON_MSG FDU05_MSG
#define MAX_SEND_SIZE 80
struct sgmsgbuf {
long mtype;
char mtext[MAX_SEND_SIZE];
};
enum SGFDxDeviceName
{
SG_DEV_UNKNOWN = 0,
SG_DEV_FDP02 = 0x01,
SG_DEV_FDU02 = 0x03,
SG_DEV_FDU03 = 0x04, SG_DEV_FDU04 = 0x05, SG_DEV_FDU05 = 0x06, SG_DEV_FDU06 = 0x07, SG_DEV_FDU07 = 0x08, SG_DEV_FDU07A = 0x09, SG_DEV_FDU08 = 0x0A, SG_DEV_FDU08P =0x0B, SG_DEV_FDU06P = 0x0C, SG_DEV_FDUSDA = 0x0D, SG_DEV_FDUSDA_BLE = 0x0E, SG_DEV_FDU08X = 0x0F, SG_DEV_FDU09 = 0x10, SG_DEV_FDU08A = 0x11, SG_DEV_FDU09A = 0x12, SG_DEV_FDU10A = 0x13, SG_DEV_AUTO = 0xFF,
};
enum SGPPPortAddr {
AUTO_DETECT = 0,
LPT1 = 0x378,
LPT2 = 0x278,
LPT3 = 0x3BC,
USB_AUTO_DETECT = 0x3BC+1,
};
enum SGFDxSecurityLevel
{
SL_NONE = 0,
SL_LOWEST = 1,
SL_LOWER = 2,
SL_LOW = 3,
SL_BELOW_NORMAL = 4,
SL_NORMAL = 5,
SL_ABOVE_NORMAL = 6,
SL_HIGH = 7,
SL_HIGHER = 8,
SL_HIGHEST = 9,
};
enum SGFDxTemplateFormat
{
TEMPLATE_FORMAT_ANSI378 = 0x0100,
TEMPLATE_FORMAT_SG400 = 0x0200,
TEMPLATE_FORMAT_ISO19794 = 0x0300,
TEMPLATE_FORMAT_ISO19794_COMPACT = 0x0400,
TEMPLATE_FORMAT_ISO19794_COMPACT_NO_HEADER = 0x0500,
};
enum SGCallBackFuntion {
CALLBACK_LIVE_CAPTURE = 1,
CALLBACK_AUTO_ON_EVENT = 2,
};
enum SGFDxErrorCode {
SGFDX_ERROR_NONE = 0,
SGFDX_ERROR_CREATION_FAILED = 1,
SGFDX_ERROR_FUNCTION_FAILED = 2,
SGFDX_ERROR_INVALID_PARAM = 3,
SGFDX_ERROR_NOT_USED = 4,
SGFDX_ERROR_DLLLOAD_FAILED = 5,
SGFDX_ERROR_DLLLOAD_FAILED_DRV = 6,
SGFDX_ERROR_DLLLOAD_FAILED_ALGO = 7,
SGFDX_ERROR_NO_LONGER_SUPPORTED = 8,
SGFDX_ERROR_DLLLOAD_FAILED_WSQ = 9,
SGFDX_ERROR_SYSLOAD_FAILED = 51, SGFDX_ERROR_INITIALIZE_FAILED = 52, SGFDX_ERROR_LINE_DROPPED = 53, SGFDX_ERROR_TIME_OUT = 54, SGFDX_ERROR_DEVICE_NOT_FOUND = 55, SGFDX_ERROR_DRVLOAD_FAILED = 56, SGFDX_ERROR_WRONG_IMAGE = 57, SGFDX_ERROR_LACK_OF_BANDWIDTH = 58, SGFDX_ERROR_DEV_ALREADY_OPEN = 59, SGFDX_ERROR_GETSN_FAILED = 60, SGFDX_ERROR_UNSUPPORTED_DEV = 61, SGFDX_ERROR_FAKE_FINGER = 62, SGFDX_ERROR_FAKE_INITIALIZE_FAILED = 63,
SGFDX_ERROR_FEAT_NUMBER = 101, SGFDX_ERROR_INVALID_TEMPLATE_TYPE = 102, SGFDX_ERROR_INVALID_TEMPLATE1 = 103, SGFDX_ERROR_INVALID_TEMPLATE2 = 104, SGFDX_ERROR_EXTRACT_FAIL = 105,
SGFDX_ERROR_MATCH_FAIL = 106,
SGFDX_ERROR_LICENSE_LOAD = 501,
SGFDX_ERROR_LICENSE_KEY = 502,
SGFDX_ERROR_LICENSE_EXPIRED = 503,
SGFDX_ERROR_LICENSE_WRITE = 504,
SGFDX_ERROR_NO_IMAGE = 600,
};
enum SGImpressionType
{
SG_IMPTYPE_LP = 0x00, SG_IMPTYPE_LR = 0x01, SG_IMPTYPE_NP = 0x02, SG_IMPTYPE_NR = 0x03, };
enum SGFingerPosition
{
SG_FINGPOS_UK = 0x00, SG_FINGPOS_RT = 0x01, SG_FINGPOS_RI = 0x02, SG_FINGPOS_RM = 0x03, SG_FINGPOS_RR = 0x04, SG_FINGPOS_RL = 0x05, SG_FINGPOS_LT = 0x06, SG_FINGPOS_LI = 0x07, SG_FINGPOS_LM = 0x08, SG_FINGPOS_LR = 0x09, SG_FINGPOS_LL = 0x0A, };
#define SGDEV_SN_LEN 15
#ifndef WM_APP_SGAUTOONEVENT
#define WM_APP_SGAUTOONEVENT 0x8100
#define SGDEVEVNET_FINGER_OFF 0
#define SGDEVEVNET_FINGER_ON 1
#endif
#ifndef WSQ_BITRATE_5_TO_1
#define WSQ_BITRATE_5_TO_1 2.25
#endif
#ifndef WSQ_BITRATE_15_TO_1
#define WSQ_BITRATE_15_TO_1 0.75
#endif
typedef struct tagSGDeviceList
{
DWORD DevName;
DWORD DevID;
WORD DevType;
BYTE DevSN[SGDEV_SN_LEN+1];
} SGDeviceList;
typedef SGDeviceList *LPDeviceList;
#define SGDEV_NAME_LEN 15
#define SGDEV_ID_LEN 63
typedef struct tagSGDeviceInfo
{
wchar_t Name[SGDEV_NAME_LEN + 1]; wchar_t ID[SGDEV_ID_LEN + 1]; } SGDeviceInfo, *LPSGDeviceInfo;
typedef struct tagSGDeviceInfoParam
{
DWORD DeviceID; BYTE DeviceSN[SGDEV_SN_LEN+1]; DWORD ComPort; DWORD ComSpeed; DWORD ImageWidth; DWORD ImageHeight; DWORD Contrast; DWORD Brightness; DWORD Gain; DWORD ImageDPI; DWORD FWVersion; } SGDeviceInfoParam;
typedef SGDeviceInfoParam* LPSGDeviceInfoParam;
typedef struct tagSGFingerInfo {
WORD FingerNumber; WORD ViewNumber; WORD ImpressionType; WORD ImageQuality; } SGFingerInfo;
typedef struct tagSGANSITemplateInfo {
DWORD TotalSamples;
SGFingerInfo SampleInfo[225]; } SGANSITemplateInfo, SGISOTemplateInfo;
typedef struct tagSGCBLiveCaptureParam {
DWORD ImageWidth;
DWORD ImageHeight;
DWORD Quality;
DWORD ErrorCode;
} SGCBLiveCaptureParam;
typedef struct tagSGFPImageInfo {
WORD CaptureEquip; WORD ImageSizeInX; WORD ImageSizeInY; WORD XResolution; WORD YResolution; WORD FingerNumber; WORD ViewNumber; WORD ImpressionType; WORD ImageQuality; } SGFPImageInfo;
typedef struct tagSGANSITemplateInfoEx {
DWORD TotalSamples;
SGFPImageInfo SampleInfo[225]; } SGANSITemplateInfoEx, SGISOTemplateInfoEx;
#ifdef __cplusplus
struct SGFPM
{
virtual ~SGFPM(){};
virtual DWORD WINAPI GetLastError() = 0;
virtual DWORD WINAPI Init(DWORD devName) = 0;
virtual DWORD WINAPI InitEx(DWORD width, DWORD height, DWORD dpi) = 0;
virtual DWORD WINAPI SetTemplateFormat(WORD format) = 0;
virtual DWORD WINAPI EnumerateDevice(DWORD* ndevs, SGDeviceList** devList) = 0;
virtual DWORD WINAPI OpenDevice(DWORD devId) = 0;
virtual DWORD WINAPI CloseDevice() = 0;
virtual DWORD WINAPI GetDeviceInfo(SGDeviceInfoParam* pInfo)= 0;
virtual DWORD WINAPI Configure(HWND hwnd) = 0;
virtual DWORD WINAPI SetBrightness(DWORD brightness) = 0;
virtual DWORD WINAPI SetLedOn(bool on) = 0;
virtual DWORD WINAPI GetImage(BYTE* buffer)= 0;
virtual DWORD WINAPI GetImageEx(BYTE* buffer, DWORD timeout, HWND dispWnd, DWORD quality)= 0;
virtual DWORD WINAPI GetImageEx2(BYTE* buffer, DWORD timeout, HDC dispDC, LPRECT dispRect, DWORD quality)= 0;
virtual DWORD WINAPI GetImageQuality(DWORD width, DWORD height, BYTE* imgBuf, DWORD* quality)= 0;
virtual DWORD WINAPI SetCallBackFunction(DWORD selector, DWORD (WINAPI*)(void* pUserData, void* pCallBackData), void* pUserData) = 0;
virtual DWORD WINAPI EnableAutoOnEvent(BOOL enable, HWND hwnd, void* reserved)= 0;
virtual DWORD WINAPI GetMaxTemplateSize(DWORD* size) = 0;
virtual DWORD WINAPI CreateTemplate(SGFingerInfo* fpInfo, BYTE *rawImage, BYTE* minTemplate)= 0;
virtual DWORD WINAPI GetTemplateSize(BYTE* buf, DWORD* size) = 0;
virtual DWORD WINAPI MatchTemplate(BYTE *minTemplate1, BYTE *minTemplate2, DWORD secuLevel, BOOL* matched) = 0;
virtual DWORD WINAPI GetMatchingScore(BYTE* minTemplate1, BYTE* minTemplate2, DWORD* score) = 0;
virtual DWORD WINAPI GetTemplateSizeAfterMerge(BYTE* ansiTemplate1, BYTE* ansiTemplate2, DWORD* size) = 0;
virtual DWORD WINAPI MergeAnsiTemplate(BYTE* ansiTemplate1, BYTE* ansiTemplate2, BYTE* outTemplate) = 0;
virtual DWORD WINAPI MergeMultipleAnsiTemplate(BYTE* inTemplates, DWORD nTemplates, BYTE* outTemplate) = 0;
virtual DWORD WINAPI GetAnsiTemplateInfo(BYTE* ansiTemplate, SGANSITemplateInfo* templateInfo) = 0;
virtual DWORD WINAPI MatchAnsiTemplate(BYTE* ansiTemplate1, DWORD sampleNum1, BYTE* ansiTemplate2, DWORD sampleNum2, DWORD secuLevel, BOOL* matched) = 0;
virtual DWORD WINAPI GetAnsiMatchingScore(BYTE* ansiTemplate1, DWORD sampleNum1, BYTE* ansiTemplate2, DWORD sampleNum2, DWORD* score) = 0;
virtual DWORD WINAPI GetIsoTemplateSizeAfterMerge(BYTE* isoTemplate1, BYTE* isoTemplate2, DWORD* size) = 0;
virtual DWORD WINAPI MergeIsoTemplate(BYTE* isoTemplate1, BYTE* isoTemplate2, BYTE* outTemplate) = 0;
virtual DWORD WINAPI MergeMultipleIsoTemplate(BYTE* inTemplates, DWORD nTemplates, BYTE* outTemplate) = 0;
virtual DWORD WINAPI GetIsoTemplateInfo(BYTE* isoTemplate, SGISOTemplateInfo* templateInfo) = 0;
virtual DWORD WINAPI MatchIsoTemplate(BYTE* isoTemplate1, DWORD sampleNum1, BYTE* isoTemplate2, DWORD sampleNum2, DWORD secuLevel, BOOL* matched) = 0;
virtual DWORD WINAPI GetIsoMatchingScore(BYTE* isoTemplate1, DWORD sampleNum1, BYTE* isoTemplate2, DWORD sampleNum2, DWORD* score) = 0;
virtual DWORD WINAPI GetIsoCompactTemplateSizeAfterMerge(BYTE* isoTemplate1, BYTE* isoTemplate2, DWORD* size) = 0;
virtual DWORD WINAPI MergeIsoCompactTemplate(BYTE* isoTemplate1, BYTE* isoTemplate2, BYTE* outTemplate) = 0;
virtual DWORD WINAPI MergeMultipleIsoCompactTemplate(BYTE* inTemplates, DWORD nTemplates, BYTE* outTemplate) = 0;
virtual DWORD WINAPI GetIsoCompactTemplateInfo(BYTE* isoTemplate, SGISOTemplateInfo* templateInfo) = 0;
virtual DWORD WINAPI MatchIsoCompactTemplate(BYTE* isoTemplate1, DWORD sampleNum1, BYTE* isoTemplate2, DWORD sampleNum2, DWORD secuLevel, BOOL* matched) = 0;
virtual DWORD WINAPI GetIsoCompactMatchingScore(BYTE* isoTemplate1, DWORD sampleNum1, BYTE* isoTemplate2, DWORD sampleNum2, DWORD* score) = 0;
virtual DWORD WINAPI MatchIsoCompactTemplateNoHeader(BYTE* isoCompactTemplateNoHeader1, BYTE* isoCompactTemplateNoHeader2, DWORD secuLevel, BOOL* matched) = 0;
virtual DWORD WINAPI GetIsoCompactNoHeaderMatchingScore(BYTE* isoCompactTemplateNoHeader1, BYTE* isoCompactTemplateNoHeader2, DWORD* score) = 0;
virtual DWORD WINAPI CreateIsoCompactTemplateNoHeader(SGFPImageInfo* fpImageInfo, BYTE* rawImage, BYTE* minTemplate, DWORD maxMinutiae, DWORD* templateSize) = 0;
virtual DWORD WINAPI MatchTemplateEx(BYTE* minTemplate1, WORD tempateType1, DWORD sampleNum1, BYTE* minTemplate2, WORD tempateType2, DWORD sampleNum2, DWORD secuLevel, BOOL* matched) = 0;
virtual DWORD WINAPI GetMatchingScoreEx(BYTE* minTemplate1, WORD tempateType1, DWORD sampleNum1, BYTE* minTemplate2, WORD tempateType2, DWORD sampleNum2, DWORD* score) = 0;
virtual DWORD WINAPI SetAutoOnIRLedTouchOn(BOOL iRLed, BOOL touchOn) = 0;
virtual DWORD WINAPI GetMinexVersion(DWORD *extractor, DWORD* matcher) = 0;
virtual DWORD WINAPI CreateTemplateEx(SGFPImageInfo* fpImageInfo, BYTE *rawImage, BYTE* minTemplate)= 0;
virtual DWORD WINAPI GetAnsiTemplateInfoEx(BYTE* ansiTemplate, SGANSITemplateInfoEx* templateInfo) = 0;
virtual DWORD WINAPI EnableCheckOfFingerLiveness(bool enable) = 0;
virtual DWORD WINAPI SetFakeDetectionLevel(int level) = 0;
virtual DWORD WINAPI GetFakeDetectionLevel(int *level) = 0;
virtual DWORD WINAPI WriteData(unsigned char index, unsigned char data) = 0;
virtual DWORD WINAPI SetGetData(DWORD flag, void* data) = 0;
virtual DWORD WINAPI InitEx2(DWORD width, DWORD height, DWORD dpi, char* licenseFilePath) = 0;
virtual DWORD WINAPI GetNumOfMinutiae(WORD templateType, BYTE* minTemplate, DWORD *numOfMinutiae) = 0;
virtual DWORD WINAPI EncodeWSQ(BYTE ** wsqImageOut, DWORD *wsqImageOutSize, float wsqBitRate, BYTE * rawImage, DWORD width, DWORD height, DWORD pixelDepth, DWORD ppi, char *commentText) = 0;
virtual DWORD WINAPI DecodeWSQ(BYTE **rawImageOut, DWORD *width, DWORD *height, DWORD *pixelDepth, DWORD *ppi, DWORD *lossyFlag, BYTE *wsqImage, DWORD wsqImageLength) = 0;
virtual DWORD WINAPI FreeWSQ(BYTE *imgBuffer) = 0;
virtual DWORD WINAPI ByteToText(BYTE *data, DWORD dwdatasize, LPTSTR textData) = 0;
virtual DWORD WINAPI TextToByte(LPTSTR textData, BYTE *destdata, DWORD *pdatasize) = 0;
virtual DWORD WINAPI FindDevices(DWORD* ndevs, SGDeviceInfo** devList, DWORD timeout) = 0;
virtual DWORD WINAPI CancelFind() = 0;
virtual DWORD WINAPI OpenDevice2(wchar_t *devId) = 0;
virtual DWORD WINAPI CreateTemplateDev(DWORD *size) = 0;
virtual DWORD WINAPI GetTemplateDev(BYTE* min) = 0;
virtual DWORD WINAPI GetTemplateFormatDev(WORD *format) = 0;
virtual DWORD WINAPI SetTemplateFormatDev(WORD format) = 0;
virtual DWORD WINAPI BeginGetImage() = 0;
virtual DWORD WINAPI EndGetImage() = 0;
virtual DWORD WINAPI GetLastImageQuality(DWORD* quality) = 0;
virtual DWORD WINAPI EnableSmartCapture(bool enable) = 0;
virtual DWORD WINAPI ComputeNFIQ(BYTE* imgBuf, DWORD width, DWORD height) = 0;
virtual DWORD WINAPI ComputeNFIQEx(BYTE* imgBuf, DWORD width, DWORD height, DWORD ppi) = 0;
virtual DWORD WINAPI WSQDecode(
BYTE **fingerImageOut,
DWORD *width,
DWORD *height,
DWORD *pixelDepth,
DWORD *ppi,
DWORD *lossyFlag,
BYTE *wsqImage,
DWORD wsqImageLength) = 0;
virtual DWORD WINAPI WSQEncode(
BYTE ** wsqImageOut,
DWORD *wsqImageOutSize,
float wsqBitRate,
BYTE * fingerImage,
DWORD width,
DWORD height,
DWORD pixelDepth,
DWORD ppi,
char *commentText) = 0;
};
typedef SGFPM FAR* LPSGFPM;
typedef DWORD (WINAPI* SGFPM_CreateFunc)(LPSGFPM* ppFPM);
typedef DWORD (WINAPI* SGFPM_DestroyFunc)(SGFPM* pFPM);
SGFPM_DLL_DECL DWORD WINAPI CreateSGFPMObject(LPSGFPM* ppFPM = NULL);
SGFPM_DLL_DECL DWORD WINAPI DestroySGFPMObject(SGFPM* pFPM = NULL);
#endif typedef void* HSGFPM;
SGFPM_DLL_DECL DWORD WINAPI SGFPM_Create(HSGFPM* phFPM);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_Terminate(HSGFPM hFpm);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_Init(HSGFPM hFpm, DWORD devName);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_InitEx(HSGFPM hFpm, DWORD width, DWORD height, DWORD dpi);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_SetTemplateFormat(HSGFPM hFpm, WORD format); SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetLastError(HSGFPM hFpm);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_EnumerateDevice(HSGFPM hFpm, DWORD* ndevs, SGDeviceList** devList);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_OpenDevice(HSGFPM hFpm, DWORD devId);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_CloseDevice(HSGFPM hFpm);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetDeviceInfo(HSGFPM hFpm, SGDeviceInfoParam* pInfo);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_Configure(HSGFPM hFpm, HWND hwnd);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_SetBrightness(HSGFPM hFpm, DWORD brightness);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_SetLedOn(HSGFPM hFpm, bool on);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetImage(HSGFPM hFpm, BYTE* buffer);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetImageEx(HSGFPM hFpm, BYTE* buffer, DWORD time, HWND dispWnd, DWORD quality);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetImageEx2(HSGFPM hFpm, BYTE* buffer, DWORD time, HDC dispDC, LPRECT dispRect, DWORD quality);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetImageQuality(HSGFPM hFpm, DWORD width, DWORD height, BYTE* imgBuf, DWORD* quality);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_SetCallBackFunction(HSGFPM hFpm, DWORD selector, DWORD (WINAPI*)(void* pUserData, void* pCallBackData), void* pUserData);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_EnableAutoOnEvent(HSGFPM hFpm, BOOL enable, HWND hwnd, void* reserved);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetMaxTemplateSize(HSGFPM hFpm, DWORD* size);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_CreateTemplate(HSGFPM hFpm, SGFingerInfo* fpInfo, BYTE *rawImage, BYTE* minTemplate);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetTemplateSize(HSGFPM hFpm, BYTE* minTemplate, DWORD* size);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_MatchTemplate(HSGFPM hFpm, BYTE *minTemplate1, BYTE *minTemplate2, DWORD secuLevel, BOOL* matched);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetMatchingScore(HSGFPM hFpm, BYTE* minTemplate1, BYTE* minTemplate2, DWORD* score);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetTemplateSizeAfterMerge(HSGFPM hFpm, BYTE* ansiTemplate1, BYTE* ansiTemplate2, DWORD* size);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_MergeAnsiTemplate(HSGFPM hFpm, BYTE* ansiTemplate1, BYTE* ansiTemplate2, BYTE* outTemplate);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_MergeMultipleAnsiTemplate(HSGFPM hFpm, BYTE* inTemplates, DWORD nTemplates, BYTE* outTemplate);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetAnsiTemplateInfo(HSGFPM hFpm, BYTE* ansiTemplate, SGANSITemplateInfo* templateInfo);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_MatchAnsiTemplate(HSGFPM hFpm, BYTE* ansiTemplate1, DWORD sampleNum1, BYTE* ansiTemplate2, DWORD sampleNum2, DWORD secuLevel, BOOL* matched);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetAnsiMatchingScore(HSGFPM hFpm, BYTE* ansiTemplate1, DWORD sampleNum1, BYTE* ansiTemplate2, DWORD sampleNum2, DWORD* score);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_MatchTemplateEx(HSGFPM hFpm, BYTE* minTemplate1, WORD tempateType1, DWORD sampleNum1, BYTE* minTemplate2, WORD tempateType2, DWORD sampleNum2, DWORD secuLevel, BOOL* matched);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetMatchingScoreEx(HSGFPM hFpm, BYTE* minTemplate1, WORD tempateType1, DWORD sampleNum1, BYTE* minTemplate2, WORD tempateType2, DWORD sampleNum2, DWORD* score);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_SetAutoOnIRLedTouchOn(HSGFPM hFpm, BOOL iRLed, BOOL touchOn);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetMinexVersion(HSGFPM hFpm, DWORD *extractor, DWORD* matcher);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_CreateTemplateEx(HSGFPM hFpm, SGFPImageInfo* fpImageInfo, BYTE *rawImage, BYTE* minTemplate);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetAnsiTemplateInfoEx(HSGFPM hFpm, BYTE* ansiTemplate, SGANSITemplateInfoEx* templateInfo);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetIsoTemplateSizeAfterMerge(HSGFPM hFpm, BYTE* isoTemplate1, BYTE* isoTemplate2, DWORD* size);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_MergeIsoTemplate(HSGFPM hFpm, BYTE* isoTemplate1, BYTE* isoTemplate2, BYTE* outTemplate);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_MergeMultipleIsoTemplate(HSGFPM hFpm, BYTE* inTemplates, DWORD nTemplates, BYTE* outTemplate);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetIsoTemplateInfo(HSGFPM hFpm, BYTE* isoTemplate, SGISOTemplateInfo* templateInfo);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_MatchIsoTemplate(HSGFPM hFpm, BYTE* isoTemplate1, DWORD sampleNum1, BYTE* isoTemplate2, DWORD sampleNum2, DWORD secuLevel, BOOL* matched);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetIsoMatchingScore(HSGFPM hFpm, BYTE* isoTemplate1, DWORD sampleNum1, BYTE* isoTemplate2, DWORD sampleNum2, DWORD* score);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetIsoCompactTemplateSizeAfterMerge(HSGFPM hFpm, BYTE* isoTemplate1, BYTE* isoTemplate2, DWORD* size);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_MergeIsoCompactTemplate(HSGFPM hFpm, BYTE* isoTemplate1, BYTE* isoTemplate2, BYTE* outTemplate);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_MergeMultipleIsoCompactTemplate(HSGFPM hFpm, BYTE* inTemplates, DWORD nTemplates, BYTE* outTemplate);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetIsoCompactTemplateInfo(HSGFPM hFpm, BYTE* isoTemplate, SGISOTemplateInfo* templateInfo);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_MatchIsoCompactTemplate(HSGFPM hFpm, BYTE* isoTemplate1, DWORD sampleNum1, BYTE* isoTemplate2, DWORD sampleNum2, DWORD secuLevel, BOOL* matched);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetIsoCompactMatchingScore(HSGFPM hFpm, BYTE* isoTemplate1, DWORD sampleNum1, BYTE* isoTemplate2, DWORD sampleNum2, DWORD* score);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_MatchIsoCompactTemplateNoHeader(HSGFPM hFpm, BYTE* isoCompactTemplateNoHeader1, BYTE* isoCompactTemplateNoHeader2, DWORD secuLevel, BOOL* matched);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetIsoCompactNoHeaderMatchingScore(HSGFPM hFpm, BYTE* isoCompactTemplateNoHeader1, BYTE* isoCompactTemplateNoHeader2, DWORD* score);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_CreateIsoCompactTemplateNoHeader(HSGFPM hFpm, SGFPImageInfo* fpImageInfo, BYTE* rawImage, BYTE* minTemplate, DWORD maxMinutiae, DWORD* templateSize);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_EnableCheckOfFingerLiveness(HSGFPM hFpm, BOOL enable);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_SetFakeDetectionLevel(HSGFPM hFpm, int level);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetFakeDetectionLevel(HSGFPM hFpm, int *level);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_WriteData(HSGFPM hFpm, unsigned char index, unsigned char data);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_SetGetData(HSGFPM hFpm, DWORD flag, void* data);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_InitEx2(HSGFPM hFpm, DWORD width, DWORD height, DWORD dpi, char* licenseFilePath);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetNumOfMinutiae(HSGFPM hFpm, WORD templateType, BYTE* minTemplate, DWORD *numOfMinutiae);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_EncodeWSQ(HSGFPM hFpm, BYTE ** wsqImageOut, DWORD *wsqImageOutSize, float wsqBitRate, BYTE * rawImage, DWORD width, DWORD height, DWORD pixelDepth, DWORD ppi, char *commentText);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_DecodeWSQ(HSGFPM hFpm, BYTE **rawImageOut, DWORD *width, DWORD *height, DWORD *pixelDepth, DWORD *ppi, DWORD *lossyFlag, BYTE *wsqImage, DWORD wsqImageLength);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_FreeWSQ(HSGFPM hFpm, BYTE *imgBuffer);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_ByteToText(HSGFPM hFpm, BYTE *data, DWORD dwdatasize, LPTSTR textData);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_TextToByte(HSGFPM hFpm, LPTSTR textData, BYTE *destdata, DWORD *pdatasize);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_FindDevices(HSGFPM hFpm, DWORD* ndevs, SGDeviceInfo** devList, DWORD timeout);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_CancelFind(HSGFPM hFpm);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_OpenDevice2(HSGFPM hFpm, wchar_t *devId);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_CreateTemplateDev(HSGFPM hFpm, DWORD* size);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetTemplateDev(HSGFPM hFpm, BYTE* min);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetTemplateFormatDev(HSGFPM hFpm, WORD *format);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_SetTemplateFormatDev(HSGFPM hFpm, WORD format);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_BeginGetImage(HSGFPM hFpm);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_EndGetImage(HSGFPM hFpm);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_GetLastImageQuality(HSGFPM hFpm, DWORD* quality);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_EnableSmartCapture(HSGFPM hFpm, bool enable);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_ComputeNFIQ(HSGFPM hFpm, BYTE* imgBuf, DWORD width, DWORD height);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_ComputeNFIQEx(HSGFPM hFpm, BYTE* imgBuf, DWORD width, DWORD height, DWORD ppi);
SGFPM_DLL_DECL DWORD WINAPI ComputeNFIQ(HSGFPM hFpm, BYTE* imgBuf, DWORD width, DWORD height);
SGFPM_DLL_DECL DWORD WINAPI ComputeNFIQEx(HSGFPM hFpm, BYTE* imgBuf, DWORD width, DWORD height, DWORD ppi);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_WSQDecode(
HSGFPM hFpm,
BYTE **fingerImageOut,
DWORD *width,
DWORD *height,
DWORD *pixelDepth,
DWORD *ppi,
DWORD *lossyFlag,
BYTE *wsqImage,
DWORD wsqImageLength);
SGFPM_DLL_DECL DWORD WINAPI SGFPM_WSQEncode(
HSGFPM hFpm,
BYTE ** wsqImageOut,
DWORD *wsqImageOutSize,
float wsqBitRate,
BYTE * fingerImage,
DWORD width,
DWORD height,
DWORD pixelDepth,
DWORD ppi,
char *commentText);
#ifdef __cplusplus
};
#endif
#endif