yoloserv/modules/fjpalmvein/3rdParty/C/BioAPI_sample_C_Verify.c
2023-08-23 09:08:42 -03:00

600 lines
20 KiB
C

/* =========================================================================
* Sample Source for C Language Professional Edition
* =========================================================================
*
* All Rights Reserved, Copyright(c) FUJITSU FRONTECH LIMITED 2021
*
* ---------------------------------------------------------------------- */
#include <stdio.h>
#include <string.h>
#include "bioapi_type.h"
#include "bioapi_api.h"
#include "bioapi_err.h"
#include "pvapi_type.h"
#include "pvapi_api.h"
#include "pvapi_err.h"
#define MAX_ENROLLDATA_SIZE (1024*16)
#define MAX_CAPTUREDATA_SIZE (1024*80)
#define APPLICATION_KEY "your application key"
#define ENROLL_FILENAME "BIRData.dat"
#define CAPTURE_FILENAME "BIRCapData.dat"
#define SILHOUETTE_FILENAME "silhouette.bmp"
void disp_ErrorInfo(PvAPI_ErrorInfo *ErrInfo);
BioAPI_RETURN BioAPI GuiState_for_BioAPICallBack( void * GuiStateCallbackCtx,
BioAPI_GUI_STATE GuiState,
BioAPI_GUI_RESPONSE Response,
BioAPI_GUI_MESSAGE Message,
BioAPI_GUI_PROGRESS Progress,
BioAPI_GUI_BITMAP_PTR SampleBuffer );
/* -------------------------------------------------------------------------
* main
* ---------------------------------------------------------------------- */
int main(int argc, char **argv)
{
FILE *fp;
size_t datasize;
BioAPI_RETURN ret;
BioAPI_HANDLE mModuleHandle = 0; // BioAPI_ModuleAttach handle
BioAPI_BIR_HANDLE NewBIRHandle = 0; // BioAPI_Enroll/BioAPI_Capture
PvAPI_BIR_PTR pBIR = NULL; // BioAPI_GetBIRFromHandle
BioAPI_GUI_MESSAGE mPreMessage = 0; // BioAPI_SetGUICallbacks
PvAPI_ErrorInfo ErrorInfo; // PvAPI_GetErrorInfo
unsigned char ucEnrolledBIR[MAX_ENROLLDATA_SIZE];
unsigned char ucCapturedBIR[MAX_CAPTUREDATA_SIZE];
const BioAPI_UUID uuid[16] = {0xE1, 0x9A, 0x69, 0x01, 0xB8, 0xC2, 0x49, 0x80, 0x87, 0x7E, 0x11, 0xD4, 0xD8, 0xF1, 0xBE, 0x79};
memset(ucEnrolledBIR, 0, sizeof(ucEnrolledBIR));
memset(ucCapturedBIR, 0, sizeof(ucCapturedBIR));
/* -------------------------------------------------------------------------
* Phase: Initialize
* ---------------------------------------------------------------------- */
printf("--\n");
printf("PvAPI_ApAuthenticate\n");
ret = PvAPI_ApAuthenticate((uint8*)APPLICATION_KEY);
if ( ret != BioAPI_OK ) {
PvAPI_GetErrorInfo(&ErrorInfo);
if ( ErrorInfo.ErrorDetail == 0x02030003 ) {
if ( ErrorInfo.ErrorInfo3[0] == 0x4c430000 ) {
printf("\nError: License Error\n");
} else {
printf("\nError: APPLICATION_KEY Error(maybe)\n");
}
} else {
disp_ErrorInfo(&ErrorInfo);
}
return 1;
}
// -----------------------------------------------------------------
printf("--\n");
printf("BioAPI_ModuleLoad\n");
ret = BioAPI_ModuleLoad(uuid, /* const BioAPI_UUID * */
0, /* uint32 */
NULL, /* BioAPI_ModuleEventHandler(unuse) */
NULL /* void*(unuse) */
);
if ( ret != BioAPI_OK ) {
PvAPI_GetErrorInfo(&ErrorInfo);
disp_ErrorInfo(&ErrorInfo);
return 1;
}
// -----------------------------------------------------------------
printf("--\n");
printf("BioAPI_ModuleAttach\n");
ret = BioAPI_ModuleAttach(uuid, /* const BioAPI_UUID * */
NULL, /* const BioAPI_VERSION(unuse) */
NULL, /* const BioAPI_MEMORY_FUNCS(unuse) */
0, /* BioAPI_DEVICE_ID(unuse) */
0, /* uint32(unuse) */
0, /* uint32(unuse) */
0, /* uint32(unuse) */
NULL, /* BioAPI_FUNC_NAME_ADDR(unuse) */
0, /* uint32(unuse) */
NULL, /* const void * (unuse) */
&mModuleHandle /* BioAPI_HANDLE_PTR */
);
if ( ret != BioAPI_OK ) {
goto error;
}
// -----------------------------------------------------------------
printf("--\n");
printf("BioAPI_SetGUICallbacks\n");
ret = BioAPI_SetGUICallbacks(mModuleHandle, /* BioAPI_HANDLE */
NULL, /* BioAPI_GUI_STREAMING_CALLBACK(unuse) */
NULL, /* void *(unuse) */
(BioAPI_GUI_STATE_CALLBACK)GuiState_for_BioAPICallBack, /* BioAPI_GUI_STATE_CALLBACK */
&mPreMessage /* void * */
);
if ( ret != BioAPI_OK ) {
goto error;
}
/* -------------------------------------------------------------------------
* Phase: Enroll
* ---------------------------------------------------------------------- */
if ( (fp = fopen(ENROLL_FILENAME, "rb")) != NULL ) {
fread(ucEnrolledBIR, sizeof(unsigned char), sizeof(ucEnrolledBIR), fp);
fclose(fp);
} else {
printf("--\n");
printf("BioAPI_Enroll\n");
mPreMessage = 0;
ret = BioAPI_Enroll(mModuleHandle, /* BioAPI_HANDLE */
BioAPI_PURPOSE_VERIFY, /* BioAPI_BIR_PURPOSE */
NULL, /* BioAPI_INPUT_BIR *(unuse) */
&NewBIRHandle, /* BioAPI_BIR_HANDLE_PTR */
NULL, /* BioAPI_DATA *(unuse) */
0, /* sint32 */
NULL /* BioAPI_BIR_HANDLE_PTR(unuse) */
);
if ( ret != BioAPI_OK ) {
goto error;
}
printf(" BioAPI_Enroll done.\n");
// -----------------------------------------------------------------
printf("--\n");
printf("BioAPI_GetBIRFromHandle\n");
ret = BioAPI_GetBIRFromHandle(mModuleHandle, /* BioAPI_HANDLE */
NewBIRHandle, /* BioAPI_BIR_HANDLE */
(BioAPI_BIR_PTR*)&pBIR /* BioAPI_BIR_PTR * */
);
if ( ret != BioAPI_OK ) {
goto error;
}
datasize = (size_t)pBIR->Header.Length + 8;
if ( datasize > MAX_ENROLLDATA_SIZE ) {
printf("Error: Enroll data size error.\n");
goto error;
}
memcpy(ucEnrolledBIR, (unsigned char*)pBIR, datasize);
((PvAPI_BIR_PTR)ucEnrolledBIR)->BiometricData = 0;
// -----------------------------------------------------------------
printf("--\n");
printf("BioAPI_FreeBIRHandle\n");
ret = BioAPI_FreeBIRHandle(mModuleHandle, /* BioAPI_HANDLE */
NewBIRHandle /* BioAPI_BIR_HANDLE */
);
if ( ret != BioAPI_OK ) {
goto error;
}
// -----------------------------------------------------------------
printf("--\n");
fp = fopen(ENROLL_FILENAME, "wb");
if ( fp != NULL ) {
fwrite(ucEnrolledBIR, sizeof(unsigned char), datasize, fp);
fclose(fp);
printf(" FILE: %s (DataSize=%d)\n", ENROLL_FILENAME, datasize);
}
}
/* -------------------------------------------------------------------------
* Phase: Verify(Standalone)
* ---------------------------------------------------------------------- */
{
BioAPI_FRR MaxFRRRequested = PvAPI_MATCHING_LEVEL_NORMAL;
BioAPI_BOOL Result = BioAPI_FALSE;
BioAPI_BOOL FARPrecedence = BioAPI_FALSE;
BioAPI_FAR FARAchieved = 0;
BioAPI_INPUT_BIR enrollInputBIR;
printf("--\n");
printf("BioAPI_Verify\n");
((PvAPI_BIR_PTR)ucEnrolledBIR)->BiometricData = 0;
enrollInputBIR.Form = BioAPI_FULLBIR_INPUT;
enrollInputBIR.InputBIR.BIR = (BioAPI_BIR_PTR)ucEnrolledBIR;
mPreMessage = 0;
ret = BioAPI_Verify(mModuleHandle, /* BioAPI_HANDLE */
NULL, /* const BioAPI_FAR(unuse) */
&MaxFRRRequested, /* const BioAPI_FRR */
&FARPrecedence, /* const BioAPI_BOOL */
&enrollInputBIR, /* const BioAPI_INPUT_BIR* */
NULL, /* BioAPI_BIR_HANDLE_PTR(unuse) */
&Result, /* BioAPI_BOOL */
&FARAchieved, /* BioAPI_FAR_PTR */
NULL, /* BioAPI_FRR_PTR(unuse) */
NULL, /* BioAPI_DATA_PTR(unuse) */
0, /* sint32 */
NULL /* BioAPI_BIR_HANDLE_PTR(unuse) */
);
if ( ret != BioAPI_OK ) {
goto error;
}
printf("--\nBioAPI_Verify Result: %s\n",
(Result==BioAPI_FALSE) ? "Auth-NG" : "Auth-OK");
}
/* -------------------------------------------------------------------------
* Phase: Capture+VerifyMatch(CL/SV)
* ---------------------------------------------------------------------- */
printf("--\n");
printf("BioAPI_Capture\n");
mPreMessage = 0;
ret = BioAPI_Capture(mModuleHandle, /* BioAPI_HANDLE */
BioAPI_PURPOSE_VERIFY, /* BioAPI_BIR_PURPOSE */
&NewBIRHandle, /* BioAPI_BIR_HANDLE_PTR */
0, /* sint32 */
NULL /* BioAPI_BIR_HANDLE_PTR(unuse) */
);
if ( ret != BioAPI_OK ) {
goto error;
}
printf(" Capture done.\n");
// -----------------------------------------------------------------
printf("--\n");
printf("BioAPI_GetBIRFromHandle\n");
ret = BioAPI_GetBIRFromHandle(mModuleHandle, /* BioAPI_HANDLE */
NewBIRHandle, /* BioAPI_BIR_HANDLE */
(BioAPI_BIR_PTR*)&pBIR /* BioAPI_BIR_PTR * */
);
if ( ret != BioAPI_OK ) {
goto error;
}
datasize = (size_t)pBIR->Header.Length + 8;
if ( datasize > MAX_CAPTUREDATA_SIZE ) {
printf("Error: Capture data size error.\n");
goto error;
}
memcpy(ucCapturedBIR, (unsigned char*)pBIR, datasize);
((PvAPI_BIR_PTR)ucCapturedBIR)->BiometricData = 0;
// -----------------------------------------------------------------
printf("--\n");
printf("BioAPI_FreeBIRHandle\n");
ret = BioAPI_FreeBIRHandle(mModuleHandle, /* BioAPI_HANDLE */
NewBIRHandle /* BioAPI_BIR_HANDLE */
);
if ( ret != BioAPI_OK ) {
goto error;
}
// -----------------------------------------------------------------
printf("--\n");
fp = fopen(CAPTURE_FILENAME, "wb");
if ( fp != NULL ) {
fwrite(ucCapturedBIR, sizeof(unsigned char), datasize, fp);
fclose(fp);
printf(" FILE: %s (DataSize=%d)\n", CAPTURE_FILENAME, datasize);
}
// -----------------------------------------------------------------
{
BioAPI_FRR MaxFRRRequested = PvAPI_MATCHING_LEVEL_NORMAL;
BioAPI_BOOL Result = BioAPI_FALSE;
BioAPI_BOOL FARPrecedence = BioAPI_FALSE;
BioAPI_FAR FARAchieved = 0;
BioAPI_INPUT_BIR enrollInputBIR;
BioAPI_INPUT_BIR captureInputBIR;
printf("--\n");
printf("BioAPI_VerifyMatch\n");
((PvAPI_BIR_PTR)ucEnrolledBIR)->BiometricData = 0;
enrollInputBIR.Form = BioAPI_FULLBIR_INPUT;
enrollInputBIR.InputBIR.BIR = (BioAPI_BIR_PTR)ucEnrolledBIR;
((PvAPI_BIR_PTR)ucCapturedBIR)->BiometricData = 0;
captureInputBIR.Form = BioAPI_FULLBIR_INPUT;
captureInputBIR.InputBIR.BIR = (BioAPI_BIR_PTR)ucCapturedBIR;
mPreMessage = 0;
ret = BioAPI_VerifyMatch(mModuleHandle, /* BioAPI_HANDLE */
NULL, /* const BioAPI_FAR *(unuse) */
&MaxFRRRequested, /* const BioAPI_FRR * */
&FARPrecedence, /* const BioAPI_BOOL * */
&captureInputBIR, /* const BioAPI_INPUT_BIR * */
&enrollInputBIR, /* const BioAPI_INPUT_BIR * */
NULL, /* BioAPI_BIR_HANDLE *(unuse) */
&Result, /* BioAPI_BOOL * */
&FARAchieved, /* BioAPI_FAR_PTR */
NULL, /* BioAPI_FRR_PTR(unuse) */
NULL /* BioAPI_DATA_PTR *(unuse) */
);
if ( ret != BioAPI_OK ) {
goto error;
}
printf("--\nBioAPI_VerifyMatch Result: %s\n",
(Result==BioAPI_FALSE) ? "Auth-NG" : "Auth-OK");
}
/* -------------------------------------------------------------------------
* Phase: Terminate
* ---------------------------------------------------------------------- */
printf("--\n");
printf("BioAPI_ModuleDetach\n");
ret = BioAPI_ModuleDetach(mModuleHandle); /* BioAPI_HANDLE */
// -----------------------------------------------------------------
printf("--\n");
printf("BioAPI_ModuleUnload\n");
ret = BioAPI_ModuleUnload(uuid, /* const BioAPI_UUID * */
NULL, /* BioAPI_ModuleEvevtHandler */
NULL /* void * */
);
// -----------------------------------------------------------------
return 0;
error:;
PvAPI_GetErrorInfo(&ErrorInfo);
disp_ErrorInfo(&ErrorInfo);
if ( mModuleHandle != 0 ) {
ret = BioAPI_ModuleDetach(mModuleHandle);
}
ret = BioAPI_ModuleUnload(uuid, NULL, NULL);
return 1;
}
/* -------------------------------------------------------------------------
* Callback Message
* ---------------------------------------------------------------------- */
void disp_message( BioAPI_GUI_MESSAGE Message )
{
switch(Message){
case PvAPI_NOTIFY_CAP_GUID_BADIMAGE: // 0x02030200
printf("-MessageCB: PvAPI_NOTIFY_CAP_GUID_BADIMAGE\n");
printf(" Move your hand away from the sensor.\n");
break;
case PvAPI_NOTIFY_CAP_GUID_NO_HANDS: // 0x02030201
printf("-MessageCB: PvAPI_NOTIFY_CAP_GUID_NO_HANDS\n");
printf(" Place your hand.\n");
break;
case PvAPI_NOTIFY_CAP_GUID_MOVING: // 0x02030203
printf("-MessageCB: PvAPI_NOTIFY_CAP_GUID_MOVING\n");
printf(" Stop moving your hand.\n");
break;
case PvAPI_NOTIFY_CAP_GUID_LESSINFO: // 0x02030204
printf("-MessageCB: PvAPI_NOTIFY_CAP_GUID_LESSINFO\n");
printf(" Unclench your hand and place correctly.\n");
break;
case PvAPI_NOTIFY_CAP_GUID_RIGHT: // 0x02030205
printf("-MessageCB: PvAPI_NOTIFY_CAP_GUID_RIGHT\n");
printf(" Move your hand to the left.\n");
break;
case PvAPI_NOTIFY_CAP_GUID_LEFT: // 0x02030206
printf("-MessageCB: PvAPI_NOTIFY_CAP_GUID_LEFT\n");
printf(" Move your hand to the right.\n");
break;
case PvAPI_NOTIFY_CAP_GUID_DOWN: // 0x02030207
printf("-MessageCB: PvAPI_NOTIFY_CAP_GUID_DOWN\n");
printf(" Move your hand away from you.\n");
break;
case PvAPI_NOTIFY_CAP_GUID_UP: // 0x02030208
printf("-MessageCB: PvAPI_NOTIFY_CAP_GUID_UP\n");
printf(" Move your hand towards you.\n");
break;
case PvAPI_NOTIFY_CAP_GUID_FAR: // 0x02030209
printf("-MessageCB: PvAPI_NOTIFY_CAP_GUID_FAR\n");
printf(" Bring your hand closer.\n");
break;
case PvAPI_NOTIFY_CAP_GUID_NEAR: // 0x0203020A
printf("-MessageCB: PvAPI_NOTIFY_CAP_GUID_NEAR\n");
printf(" Move your hand higher.\n");
break;
case PvAPI_NOTIFY_CAP_GUID_CAPTURING: // 0x0203020B
printf("-MessageCB: PvAPI_NOTIFY_CAP_GUID_CAPTURING\n");
printf(" Now capturing.\n");
break;
case PvAPI_NOTIFY_CAP_GUID_PITCH_DOWN: // 0x02030210
printf("-MessageCB: PvAPI_NOTIFY_CAP_GUID_PITCH_DOWN\n");
printf(" Lay your hand flat.\n");
break;
case PvAPI_NOTIFY_CAP_GUID_PITCH_UP: // 0x02030211
printf("-MessageCB: PvAPI_NOTIFY_CAP_GUID_PITCH_UP\n");
printf(" Lay your hand flat.\n");
break;
case PvAPI_NOTIFY_CAP_GUID_ROLL_RIGHT: // 0x02030212
printf("-MessageCB: PvAPI_NOTIFY_CAP_GUID_ROLL_RIGHT\n");
printf(" Lay your hand flat.\n");
break;
case PvAPI_NOTIFY_CAP_GUID_ROLL_LEFT: // 0x02030213
printf("-MessageCB: PvAPI_NOTIFY_CAP_GUID_ROLL_LEFT\n");
printf(" Lay your hand flat.\n");
break;
case PvAPI_NOTIFY_CAP_GUID_YAW_RIGHT: // 0x02030214
printf("-MessageCB: PvAPI_NOTIFY_CAP_GUID_YAW_RIGHT\n");
printf(" Place your hand parallel to the sensor.\n");
break;
case PvAPI_NOTIFY_CAP_GUID_YAW_LEFT: // 0x02030215
printf("-MessageCB: PvAPI_NOTIFY_CAP_GUID_YAW_LEFT\n");
printf(" Place your hand parallel to the sensor.\n");
break;
case PvAPI_NOTIFY_CAP_GUID_CLOSE_FINGER: // 0x02030216 (V24)
printf("-MessageCB: PvAPI_NOTIFY_CAP_GUID_CLOSE_FINGER\n");
printf(" Unclench your hand and place correctly.\n");
break;
case PvAPI_NOTIFY_CAP_GUID_ROUND: // 0x02030217
printf("-MessageCB: PvAPI_NOTIFY_CAP_GUID_ROUND\n");
printf(" Lay your hand flat.\n");
break;
case PvAPI_NOTIFY_CAP_GUID_ADJUST_LIGHT: // 0x02030220
printf("-MessageCB: PvAPI_NOTIFY_CAP_GUID_ADJUST_LIGHT\n");
break;
case PvAPI_NOTIFY_CAP_GUID_ADJUST_NG: // 0x02030221
printf("-MessageCB: PvAPI_NOTIFY_CAP_GUID_ADJUST_NG\n");
break;
case PvAPI_NOTIFY_CAP_GUID_PHASE_END: // 0x02030300
printf("-MessageCB: PvAPI_NOTIFY_CAP_GUID_PHASE_END\n");
printf(" Now authenticating.\n");
break;
// -------------------------------------------------------------------------
case (PvAPI_NOTIFY_API_KIND + PvAPI_NOTIFY_API_KIND_CAPTURE): // 0x03000101
printf("-MessageCB(GUI): [optional] PvAPI_NOTIFY_API_KIND_CAPTURE\n");
break;
case (PvAPI_NOTIFY_API_KIND + PvAPI_NOTIFY_API_KIND_VERIFYMATCH): // 0x03000102
printf("-MessageCB(GUI): [optional] PvAPI_NOTIFY_API_KIND_VERIFYMATCH\n");
break;
case (PvAPI_NOTIFY_API_KIND + PvAPI_NOTIFY_API_KIND_IDENTIFYMATCH): // 0x03000103
printf("-MessageCB(GUI): [optional] PvAPI_NOTIFY_API_KIND_IDENTIFYMATCH\n");
break;
case (PvAPI_NOTIFY_API_KIND + PvAPI_NOTIFY_API_KIND_ENROLL): // 0x03000104
printf("-MessageCB(GUI): [optional] PvAPI_NOTIFY_API_KIND_ENROLL\n");
break;
case (PvAPI_NOTIFY_API_KIND + PvAPI_NOTIFY_API_KIND_VERIFY): // 0x03000105
printf("-MessageCB(GUI): [optional] PvAPI_NOTIFY_API_KIND_VERIFY\n");
break;
case (PvAPI_NOTIFY_API_KIND + PvAPI_NOTIFY_API_KIND_IDENTIFY): // 0x03000106
printf("-MessageCB(GUI): [optional] PvAPI_NOTIFY_API_KIND_IDENTIFY\n");
break;
case (PvAPI_NOTIFY_API_END + PvAPI_NOTIFY_API_END_NORMAL): // 0x03000200
printf("-MessageCB(GUI): [optional] PvAPI_NOTIFY_API_END_NORMAL\n");
break;
case (PvAPI_NOTIFY_API_END + PvAPI_NOTIFY_API_END_CANCEL): // 0x03000210
printf("-MessageCB(GUI): [optional] PvAPI_NOTIFY_API_END_CANCEL\n");
break;
case (PvAPI_NOTIFY_API_END + PvAPI_NOTIFY_API_END_ERROR): // 0x03000220
printf("-MessageCB(GUI): [optional] PvAPI_NOTIFY_API_END_ERROR\n");
break;
case (PvAPI_NOTIFY_CAP_GUID_CAPTURE_IMAGE): // 0x02030222
printf("-MessageCB(GUI): [optional] PvAPI_NOTIFY_CAP_GUID_CAPTURE_IMAGE\n");
break;
case PvAPI_NOTIFY_WAIT_FOR_TRIGGER: // 0x02040000
printf("-MessageCB: [optional] PvAPI_NOTIFY_WAIT_FOR_TRIGGER\n");
break;
case (PvAPI_NOTIFY_REGIST_SCORE + PvAPI_REGIST_SCORE_QUALITY_1): // 0x05000001
printf("-MessageCB: [optional] PvAPI_REGIST_SCORE_QUALITY_1(Good)\n");
break;
case (PvAPI_NOTIFY_REGIST_SCORE + PvAPI_REGIST_SCORE_QUALITY_2): // 0x05000002
printf("-MessageCB: [optional] PvAPI_REGIST_SCORE_QUALITY_2\n");
break;
case (PvAPI_NOTIFY_REGIST_SCORE + PvAPI_REGIST_SCORE_QUALITY_3): // 0x05000003
printf("-MessageCB: [optional] PvAPI_REGIST_SCORE_QUALITY_3\n");
break;
default:
if ( (0xFF000000 & Message) == PvAPI_NOTIFY_MATCH_RESULT ) { // 0x04XXXXXX
int iResult;
iResult = 0x00FFFFFF & Message;
printf("-MessageCB(GUI): [optional] PvAPI_NOTIFY_MATCH_RESULT");
if ( iResult == 0 ) {
printf("(Auth-NG)\n");
} else {
printf("(Auth-OK[%d])\n", iResult);
}
break;
}
if ( (0xFFFFFF00 & Message) == PvAPI_NOTIFY_CAP_GUID_START ) { // 0x020300MN
printf("-MessageCB: PvAPI_NOTIFY_CAP_GUID_START[0x%08X]\n", Message);
printf(" Capturing Start. (%d/%d)\n", (Message & 0x000F), ((Message >> 4) & 0x000F));
break;
}
printf("-Unknown message [0x%08X]\n", Message);
break;
}
return;
}
/* -------------------------------------------------------------------------
* Callback Function
* ---------------------------------------------------------------------- */
BioAPI_RETURN BioAPI GuiState_for_BioAPICallBack( void * GuiStateCallbackCtx,
BioAPI_GUI_STATE GuiState,
BioAPI_GUI_RESPONSE Response,
BioAPI_GUI_MESSAGE Message,
BioAPI_GUI_PROGRESS Progress,
BioAPI_GUI_BITMAP_PTR SampleBuffer )
{
BioAPI_GUI_MESSAGE *PreMessage;
PreMessage = (BioAPI_GUI_MESSAGE*)GuiStateCallbackCtx;
if ( GuiState & BioAPI_SAMPLE_AVAILABLE ) {
printf("-MessageCB: State: Silhouette\n");
{
BioAPI_DATA_PTR pbmp;
FILE *fp;
pbmp = SampleBuffer->Bitmap;
fp = fopen(SILHOUETTE_FILENAME, "wb");
if ( fp != NULL ) {
fwrite((unsigned char*)pbmp->Data, sizeof(unsigned char), (size_t)pbmp->Length, fp);
fclose(fp);
}
}
}
if ( GuiState & BioAPI_MESSAGE_PROVIDED ) {
if ( *PreMessage != Message ) {
disp_message(Message);
}
*PreMessage = Message;
}
return BioAPI_OK; // only "BioAPI_OK"
}
/* -------------------------------------------------------------------------
* Error Function
* ---------------------------------------------------------------------- */
void disp_ErrorInfo(PvAPI_ErrorInfo *ErrInfo)
{
if ( (ErrInfo->ErrorLevel == PvAPI_ERROR_LEVEL_NORMAL) ||
(ErrInfo->ErrorLevel == PvAPI_ERROR_LEVEL_CANCEL) )
{
return;
}
printf(" ErrorLevel = 0x%02X\n", ErrInfo->ErrorLevel);
printf(" ErrorCode = 0x%02X\n", ErrInfo->ErrorCode);
printf(" ErrorDetail = 0x%08X\n", ErrInfo->ErrorDetail);
printf(" ErrorInfo1 = 0x%08X\n", ErrInfo->ErrorInfo1);
printf(" ErrorInfo2 = 0x%08X\n", ErrInfo->ErrorInfo2);
printf(" ErrorInfo3[0] = 0x%08X\n", ErrInfo->ErrorInfo3[0]);
printf(" ErrorInfo3[1] = 0x%08X\n", ErrInfo->ErrorInfo3[1]);
printf(" ErrorInfo3[2] = 0x%08X\n", ErrInfo->ErrorInfo3[2]);
printf(" ErrorInfo3[3] = 0x%08X\n", ErrInfo->ErrorInfo3[3]);
return;
}