#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <windows.h>
#include <time.h>
//#include <thread>
#include "ZKFPCap.h"
#include "futil.h"
static HMODULE ZKFPCapLib = NULL;
static HANDLE ZKFPCapHandle = NULL;
HWND hwnd;
static BYTE *g_FPBuffer ;//= NULL
static int g_bIsTimeToDie = 0;
static int g_FPBufferSize = 0;
static int g_nWidth = 0;
static int g_nHeight = 0;
using namespace std;
DWORD WINAPI GetImage(LPVOID pParam)
{
while(!g_bIsTimeToDie)
{
memset(g_FPBuffer
, 0, g_FPBufferSize
);
//sensorCapture(ZKFPCapHandle, g_FPBuffer, g_FPBufferSize);
//cout<<"capture size: " <<sensorCapture(ZKFPCapHandle, g_FPBuffer, g_FPBufferSize)<<endl;
if(sensorCapture(ZKFPCapHandle, g_FPBuffer, g_FPBufferSize) > 0)
{
//SendMessage(hwnd, MESSAGE_FP_RECEIVED, 0, 0);
}
//g_bIsTimeToDie=1;
//return 0;
}
return 0;
}
int loadZKFPCapLib() //Load ZKFPCap.dll and Read sensor function
{
ZKFPCapLib = LoadLibrary("ZKFPCap.dll");
if(ZKFPCapLib)
{
sensorInit = (T_sensorInit)GetProcAddress(ZKFPCapLib, "sensorInit");
sensorFree = (T_sensorFree)GetProcAddress(ZKFPCapLib, "sensorFree");
sensorOpen = (T_sensorOpen)GetProcAddress(ZKFPCapLib, "sensorOpen");
sensorClose = (T_sensorClose)GetProcAddress(ZKFPCapLib, "sensorClose");
sensorGetCount = (T_sensorGetCount)GetProcAddress(ZKFPCapLib, "sensorGetCount");
sensorGetVersion = (T_sensorGetVersion)GetProcAddress(ZKFPCapLib, "sensorGetVersion");
sensorCapture = (T_sensorCapture)GetProcAddress(ZKFPCapLib, "sensorCapture");
sensorGetParameter = (T_sensorGetParameter)GetProcAddress(ZKFPCapLib, "sensorGetParameter");
sensorSetParameter = (T_sensorSetParameter)GetProcAddress(ZKFPCapLib, "sensorSetParameter");
sensorGetParameterEx = (T_sensorGetParameterEx)GetProcAddress(ZKFPCapLib, "sensorGetParameterEx");
sensorSetParameterEx = (T_sensorSetParameterEx)GetProcAddress(ZKFPCapLib, "sensorSetParameterEx");
if(NULL == sensorInit)
{
return 0;
}
return 1;
}
return 0;
}
int main()
{
char paramValue[64] = {0};
int ret = 0;
loadZKFPCapLib();
cout << sensorInit() << endl;
ZKFPCapHandle = sensorOpen(0);
cout <<"sensor open (0:success) : " << ZKFPCapHandle << endl;
ret = sizeof(paramValue);
sensorGetParameterEx(ZKFPCapHandle, 1, paramValue, &ret);
g_nWidth = *((int *)paramValue);
ret = sizeof(paramValue);
sensorGetParameterEx(ZKFPCapHandle, 2, paramValue, &ret);
g_nHeight = *((int *)paramValue);
cout << "(width, height) : "<< "("<<g_nWidth<<", "<<g_nHeight<<")" << endl;
ret = sizeof(paramValue);
cout<<"Get ParameterEX : "<<sensorGetParameterEx(ZKFPCapHandle, 106, paramValue, &ret)<<endl;
g_FPBufferSize = *((int *)paramValue);
cout<<"buffer size : "<<g_FPBufferSize<<endl;
g_FPBuffer
= (BYTE
*)malloc(g_FPBufferSize
*sizeof(BYTE
));
cout<<"sensor counter : "<<sensorGetCount()<<endl;
sensorGetVersion(paramValue, sizeof(paramValue));
cout<<"Version : "<<paramValue<<endl;
memset(g_FPBuffer
, 0, g_FPBufferSize
);
g_bIsTimeToDie=0;
cout<<"handle : "<<ZKFPCapHandle<<endl;
cout<<"capture size: " <<sensorCapture(ZKFPCapHandle, g_FPBuffer, g_FPBufferSize)<<endl;
/*
while(1)
{
cout<<"capture size: " <<sensorCapture(ZKFPCapHandle, g_FPBuffer, g_FPBufferSize)<<endl;
Sleep(2500);
}
*/
//cout<<"capture size: " <<sensorCapture(ZKFPCapHandle, g_FPBuffer, g_FPBufferSize)<<endl;
//g_bIsTimeToDie=0;
//GetImage(NULL);
for(int i=0; i<g_FPBufferSize; i++)
{
//if(g_FPBuffer[i]!=0)
{
}
}
/**/
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8d2luZG93cy5oPgojaW5jbHVkZSA8dGltZS5oPgovLyNpbmNsdWRlIDx0aHJlYWQ+CgojaW5jbHVkZSAiWktGUENhcC5oIgojaW5jbHVkZSAiZnV0aWwuaCIKCgpzdGF0aWMgSE1PRFVMRSBaS0ZQQ2FwTGliICAgPSBOVUxMOwpzdGF0aWMgSEFORExFIFpLRlBDYXBIYW5kbGUgPSBOVUxMOwpIV05EIGh3bmQ7CgpzdGF0aWMgQllURSAqZ19GUEJ1ZmZlciA7Ly89IE5VTEwKc3RhdGljIGludCBnX2JJc1RpbWVUb0RpZSA9IDA7CnN0YXRpYyBpbnQgZ19GUEJ1ZmZlclNpemUgPSAwOwpzdGF0aWMgaW50IGdfbldpZHRoID0gMDsKc3RhdGljIGludCBnX25IZWlnaHQgPSAwOwoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCgoKRFdPUkQgV0lOQVBJIEdldEltYWdlKExQVk9JRCBwUGFyYW0pCnsKCgoJd2hpbGUoIWdfYklzVGltZVRvRGllKQoJewoJCW1lbXNldChnX0ZQQnVmZmVyLCAwLCBnX0ZQQnVmZmVyU2l6ZSk7CgoJCS8vc2Vuc29yQ2FwdHVyZShaS0ZQQ2FwSGFuZGxlLCBnX0ZQQnVmZmVyLCBnX0ZQQnVmZmVyU2l6ZSk7CgoJCS8vY291dDw8ImNhcHR1cmUgc2l6ZTogIiA8PHNlbnNvckNhcHR1cmUoWktGUENhcEhhbmRsZSwgZ19GUEJ1ZmZlciwgZ19GUEJ1ZmZlclNpemUpPDxlbmRsOwoKCQlpZihzZW5zb3JDYXB0dXJlKFpLRlBDYXBIYW5kbGUsIGdfRlBCdWZmZXIsIGdfRlBCdWZmZXJTaXplKSA+IDApCgkJewoJCSAgIHN5c3RlbSgicGF1c2UiKTsKCQkJLy9TZW5kTWVzc2FnZShod25kLCBNRVNTQUdFX0ZQX1JFQ0VJVkVELCAwLCAwKTsKCQl9CgkJLy9nX2JJc1RpbWVUb0RpZT0xOwoJCS8vcmV0dXJuIDA7Cgl9CiAgICByZXR1cm4gMDsKfQoKaW50IGxvYWRaS0ZQQ2FwTGliKCkgICAvL0xvYWQgWktGUENhcC5kbGwgYW5kIFJlYWQgc2Vuc29yIGZ1bmN0aW9uCnsKCVpLRlBDYXBMaWIgPSBMb2FkTGlicmFyeSgiWktGUENhcC5kbGwiKTsKCglpZihaS0ZQQ2FwTGliKQoJewoJCXNlbnNvckluaXQgPSAoVF9zZW5zb3JJbml0KUdldFByb2NBZGRyZXNzKFpLRlBDYXBMaWIsICJzZW5zb3JJbml0Iik7CgkJc2Vuc29yRnJlZSA9IChUX3NlbnNvckZyZWUpR2V0UHJvY0FkZHJlc3MoWktGUENhcExpYiwgInNlbnNvckZyZWUiKTsKCQlzZW5zb3JPcGVuID0gKFRfc2Vuc29yT3BlbilHZXRQcm9jQWRkcmVzcyhaS0ZQQ2FwTGliLCAic2Vuc29yT3BlbiIpOwoJCXNlbnNvckNsb3NlID0gKFRfc2Vuc29yQ2xvc2UpR2V0UHJvY0FkZHJlc3MoWktGUENhcExpYiwgInNlbnNvckNsb3NlIik7CgkJc2Vuc29yR2V0Q291bnQgPSAoVF9zZW5zb3JHZXRDb3VudClHZXRQcm9jQWRkcmVzcyhaS0ZQQ2FwTGliLCAic2Vuc29yR2V0Q291bnQiKTsKCQlzZW5zb3JHZXRWZXJzaW9uID0gKFRfc2Vuc29yR2V0VmVyc2lvbilHZXRQcm9jQWRkcmVzcyhaS0ZQQ2FwTGliLCAic2Vuc29yR2V0VmVyc2lvbiIpOwoJCXNlbnNvckNhcHR1cmUgPSAoVF9zZW5zb3JDYXB0dXJlKUdldFByb2NBZGRyZXNzKFpLRlBDYXBMaWIsICJzZW5zb3JDYXB0dXJlIik7CgkJc2Vuc29yR2V0UGFyYW1ldGVyID0gKFRfc2Vuc29yR2V0UGFyYW1ldGVyKUdldFByb2NBZGRyZXNzKFpLRlBDYXBMaWIsICJzZW5zb3JHZXRQYXJhbWV0ZXIiKTsKCQlzZW5zb3JTZXRQYXJhbWV0ZXIgPSAoVF9zZW5zb3JTZXRQYXJhbWV0ZXIpR2V0UHJvY0FkZHJlc3MoWktGUENhcExpYiwgInNlbnNvclNldFBhcmFtZXRlciIpOwoJCXNlbnNvckdldFBhcmFtZXRlckV4ID0gKFRfc2Vuc29yR2V0UGFyYW1ldGVyRXgpR2V0UHJvY0FkZHJlc3MoWktGUENhcExpYiwgInNlbnNvckdldFBhcmFtZXRlckV4Iik7CgkJc2Vuc29yU2V0UGFyYW1ldGVyRXggPSAoVF9zZW5zb3JTZXRQYXJhbWV0ZXJFeClHZXRQcm9jQWRkcmVzcyhaS0ZQQ2FwTGliLCAic2Vuc29yU2V0UGFyYW1ldGVyRXgiKTsKCgkJaWYoTlVMTCA9PSBzZW5zb3JJbml0KQoJCXsKCQkJcmV0dXJuIDA7CgkJfQoJCXJldHVybiAxOwoJfQoKCXJldHVybiAwOwp9CgppbnQgbWFpbigpCnsKY2hhciBwYXJhbVZhbHVlWzY0XSA9IHswfTsKaW50IHJldCA9IDA7CgogICBsb2FkWktGUENhcExpYigpOwoKICAgY291dCA8PCBzZW5zb3JJbml0KCkgPDwgZW5kbDsKCiAgIFpLRlBDYXBIYW5kbGUgPSBzZW5zb3JPcGVuKDApOwoKICAgY291dCA8PCJzZW5zb3Igb3BlbiAoMDpzdWNjZXNzKSA6ICIgPDwgWktGUENhcEhhbmRsZSA8PCBlbmRsOwoKCiAgIG1lbXNldChwYXJhbVZhbHVlLCAwLCA2NCk7CiAgIHJldCA9IHNpemVvZihwYXJhbVZhbHVlKTsKICAgc2Vuc29yR2V0UGFyYW1ldGVyRXgoWktGUENhcEhhbmRsZSwgMSwgcGFyYW1WYWx1ZSwgJnJldCk7CiAgIGdfbldpZHRoID0gKigoaW50ICopcGFyYW1WYWx1ZSk7CgogICBtZW1zZXQocGFyYW1WYWx1ZSwgMCwgNjQpOwogICByZXQgPSBzaXplb2YocGFyYW1WYWx1ZSk7CiAgIHNlbnNvckdldFBhcmFtZXRlckV4KFpLRlBDYXBIYW5kbGUsIDIsIHBhcmFtVmFsdWUsICZyZXQpOwogICBnX25IZWlnaHQgPSAqKChpbnQgKilwYXJhbVZhbHVlKTsKCgogICBjb3V0IDw8ICIod2lkdGgsIGhlaWdodCkgOiAiPDwgIigiPDxnX25XaWR0aDw8IiwgIjw8Z19uSGVpZ2h0PDwiKSIgPDwgZW5kbDsKCiAgIG1lbXNldChwYXJhbVZhbHVlLCAwLCA2NCk7CiAgIHJldCA9IHNpemVvZihwYXJhbVZhbHVlKTsKICAgY291dDw8IkdldCBQYXJhbWV0ZXJFWCA6ICI8PHNlbnNvckdldFBhcmFtZXRlckV4KFpLRlBDYXBIYW5kbGUsIDEwNiwgcGFyYW1WYWx1ZSwgJnJldCk8PGVuZGw7CiAgIGdfRlBCdWZmZXJTaXplID0gKigoaW50ICopcGFyYW1WYWx1ZSk7CgogICBjb3V0PDwiYnVmZmVyIHNpemUgOiAiPDxnX0ZQQnVmZmVyU2l6ZTw8ZW5kbDsKCiAgIGdfRlBCdWZmZXIgPSAoQllURSAqKW1hbGxvYyhnX0ZQQnVmZmVyU2l6ZSpzaXplb2YoQllURSkpOwoKICAgY291dDw8InNlbnNvciBjb3VudGVyIDogIjw8c2Vuc29yR2V0Q291bnQoKTw8ZW5kbDsKCiAgIG1lbXNldChwYXJhbVZhbHVlLCAwLCA2NCk7CiAgIHNlbnNvckdldFZlcnNpb24ocGFyYW1WYWx1ZSwgc2l6ZW9mKHBhcmFtVmFsdWUpKTsKICAgY291dDw8IlZlcnNpb24gOiAiPDxwYXJhbVZhbHVlPDxlbmRsOwoKCiAgIG1lbXNldChnX0ZQQnVmZmVyLCAwLCBnX0ZQQnVmZmVyU2l6ZSk7CgogICBnX2JJc1RpbWVUb0RpZT0wOwoKICAgY291dDw8ImhhbmRsZSA6ICI8PFpLRlBDYXBIYW5kbGU8PGVuZGw7CgogICBjb3V0PDwiY2FwdHVyZSBzaXplOiAiIDw8c2Vuc29yQ2FwdHVyZShaS0ZQQ2FwSGFuZGxlLCBnX0ZQQnVmZmVyLCBnX0ZQQnVmZmVyU2l6ZSk8PGVuZGw7CiAgIAovKiAgIAogICB3aGlsZSgxKQogICB7CiAgICAgIGNvdXQ8PCJjYXB0dXJlIHNpemU6ICIgPDxzZW5zb3JDYXB0dXJlKFpLRlBDYXBIYW5kbGUsIGdfRlBCdWZmZXIsIGdfRlBCdWZmZXJTaXplKTw8ZW5kbDsKCiAgICAgIFNsZWVwKDI1MDApOwogICB9CiovCgoKICAgLy9jb3V0PDwiY2FwdHVyZSBzaXplOiAiIDw8c2Vuc29yQ2FwdHVyZShaS0ZQQ2FwSGFuZGxlLCBnX0ZQQnVmZmVyLCBnX0ZQQnVmZmVyU2l6ZSk8PGVuZGw7CgogICAvL2dfYklzVGltZVRvRGllPTA7CgogICAvL0dldEltYWdlKE5VTEwpOwoKICAgZm9yKGludCBpPTA7IGk8Z19GUEJ1ZmZlclNpemU7IGkrKykKICAgewoKCiAgICAgIC8vaWYoZ19GUEJ1ZmZlcltpXSE9MCkKICAgICAgewogICAgICAgICBwcmludGYoIiVkXG4iLGdfRlBCdWZmZXJbaV0pOwogICAgICAgICBzeXN0ZW0oInBhdXNlIik7CiAgICAgIH0KCiAgIH0KLyoqLwoKCgogICByZXR1cm4gMDsKfQo=