📄 fingerprintdlg.cpp
字号:
// FingerprintDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Fingerprint.h"
#include "FingerprintDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define WM_NEW_DATA_ARRIVE WM_USER+1 //数据到达时发送此消息
/////////////////////////////////////////////////////////////////////////////
// CFingerprintDlg dialog
CFingerprintDlg::CFingerprintDlg(CWnd* pParent /*=NULL*/)
: CDialog(CFingerprintDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CFingerprintDlg)
m_state = _T("");
m_num = 0;
m_show = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CFingerprintDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CFingerprintDlg)
DDX_Text(pDX, IDC_STATE, m_state);
DDX_Text(pDX, IDC_INDEX, m_num);
DDX_Text(pDX, IDC_show, m_show);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CFingerprintDlg, CDialog)
//{{AFX_MSG_MAP(CFingerprintDlg)
ON_BN_CLICKED(IDC_ENROLL, OnEnroll)
ON_BN_CLICKED(IDC_VERIFY, OnVerify)
ON_MESSAGE(WM_NEW_DATA_ARRIVE,OnDataArrivedMsg)
ON_BN_CLICKED(IDC_test, Ontest)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFingerprintDlg message handlers
BOOL CFingerprintDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
CenterWindow(GetDesktopWindow()); // center to the hpc screen
// TODO: Add extra initialization here
memset( Send_Cmd, 0, 5);
memset( Receive_Cmd, 0, 5);
Send_Cmd[0] = 0x02;
ProCounts = 0;
m_pSerial=new CPSerialPort();
BOOL SSS;
SSS= m_pSerial->OpenPort(_T("COM1:"),9600,8,ONESTOPBIT,NOPARITY,OnDataArrive,(DWORD)this);
if (!SSS)
{
m_state = _T("不能打开串口");
UpdateData( FALSE );
}
{
m_state = _T("串口打开成功");
UpdateData( FALSE );
}
m_pSerial->Activate();
return TRUE; // return TRUE unless you set the focus to a control
}
void CFingerprintDlg::OnDataArrive(BYTE *data,int length,DWORD userdata)
{
CFingerprintDlg *pWnd=(CFingerprintDlg *)userdata;
//数据过来发送消息,W参数为数据缓冲地址,L参数为长度
::SendMessage(pWnd->m_hWnd,WM_NEW_DATA_ARRIVE,(WPARAM)data,LPARAM(length));
}
void CFingerprintDlg::OnDataArrivedMsg(WPARAM wParam,LPARAM lParam) //
{
//处理收到的数据
int i;
int length=(int)lParam;
BYTE *data=(BYTE*)wParam;
CString THex(_T("")); //用于显示接收到的数据
if (length)
{
/*
case 结构:
case 0x10010080: //当前操作指令
OnEnroll(); //当前操作函数
pro_step = 0x100100A3; //按照通信协议下一步操作指令
*/
switch(data[2])
{
case API_FAILURE: //操作失败
m_state = _T("操作失败");
UpdateData( FALSE );
pro_step = 0;
break;
case API_SUCCESS: //操作成功
{
//ProCounts++;
//m_num = ProCounts;
//UpdateData( FALSE );
switch(pro_step)
{
case 0x10010080: //初次采集指纹模板到RAM中
EnRoll();
pro_step = 0x100100A3;
break;
case 0x100100A3: //初次保存模板到FLASH中
m_state = _T("初次采样成功,即将保存模板到FLASH中");
UpdateData( FALSE );
SaveRamToFlash();
pro_step = 0x10020080;
break;
case 0x10020080: //第二次采集模板到RAM中
m_state = _T("初次保存成功,即将进行第二次采样,请放上您的手指");
UpdateData( FALSE );
EnRoll();
pro_step = 0x100100A7;
break;
case 0x100100A7: //初次合并模板到RAM中
m_state = _T("第二次采样成功,即将合并模板");
UpdateData( FALSE );
Merge();
pro_step = 0x10030080;
break;
case 0x10030080: //第三次采集模板到RAM中
m_state = _T("初次合并成功,即将进行第三次采样,请放上您的手指");
UpdateData( FALSE );
EnRoll();
pro_step = 0x100200A7;
break;
case 0x100200A7: //第二次合并模板RAM中
m_state = _T("第三次采样成功,即将进行第二次合并");
UpdateData( FALSE );
Merge();
pro_step = 0x100200A3;
break;
case 0x100200A3: //第二次保存模板到FLASH中
m_state = _T("第二次合并成功,即将保存模板到FLASH中");
UpdateData( FALSE );
SaveRamToFlash();
pro_step = 0x11111111;
break;
case 0x11111111:
m_state = _T("指纹模板保存成功!");
UpdateData( FALSE );
break;
case 0x20010080:
m_state = ("指纹采集成功,马上进行对比");
UpdateData( FALSE );
Verify();
pro_step = 0x20010082;
case 0x20010082:
m_state = _T("指纹比对成功");
UpdateData( FALSE );
pro_step = 0;
case 0x300000B2:
m_num = data[1];
UpdateData(FALSE);
case 0x300000A4: //上传指纹模板列表信息
{
for(i=0;i<length;i++)
THex.Format(_T("0%X "),data[i]);
m_show +=THex;
UpdateData(FALSE);
}
break;
case 0:
default:
break;
}
}
break;
case API_NO_TEMPLATE_PRESENT: //Flash中没有该索引号的有效指纹模板
m_state = _T("Flash中没有该索引号的有效指纹模板");
UpdateData( FALSE );
pro_step = 0;
break;
case API_CANCEL_SUCCESS: //取消上次执行指令成功
m_state = _T("取消上次执行指令成功");
UpdateData( FALSE );
pro_step = 0;
break;
case API_UNKNOWN_COMMAND: //未知指令
m_state = _T("未知指令");
UpdateData( FALSE );
pro_step = 0;
break;
default:
break;
}
}
}
void CFingerprintDlg::OnEnroll()
{
// TODO: Add your control notification handler code here
EnRoll();
pro_step = 0x100100A3; //下一步操作指令
m_state = _T("请放上您的手指");
UpdateData( FALSE );
}
void CFingerprintDlg::OnVerify()
{
// TODO: Add your control notification handler code here
m_state = _T("进行指纹对比,请放上您的手指");
UpdateData( FALSE );
EnRoll();
pro_step = 0x20010080;
}
void CFingerprintDlg::EnRoll()
{
// TODO: Add your control notification handler code here
Send_Cmd[2] = API_ENROLL_RAM;
DWORD WriteNum;
WriteNum = m_pSerial->WritePort( Send_Cmd, 5);
m_num = WriteNum;
UpdateData(FALSE);
}
void CFingerprintDlg::SaveRamToFlash()
{
// TODO: Add your control notification handler code here
Send_Cmd[2] = API_SAVE_TEMPLATE_RAMTOFLASH;
m_pSerial->WritePort( Send_Cmd, 5);
}
void CFingerprintDlg::Merge()
{
// TODO: Add your control notification handler code here
Send_Cmd[2] = API_MERGE_TEMPLATE_FLASHTORAM;
m_pSerial->WritePort( Send_Cmd, 5);
}
void CFingerprintDlg::Verify()
{
// TODO: Add your control notification handler code here
Send_Cmd[2] = API_IDENTIFY_FLASH_ALL;
m_pSerial->WritePort( Send_Cmd, 5);
}
void CFingerprintDlg::Ontest()
{
// TODO: Add your control notification handler code here
BYTE test[5];
test[0] = 0x02;
test[1] = 0;
test[2] = 0xA4;
test[3] = 0;
test[4] = 0;
m_pSerial->WritePort( test, 5);
pro_step = 0x300000A4;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -