⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fingerprintdlg.cpp

📁 ce下的指纹识别模块。使用的是瀚兴科技M620V-S指纹模块
💻 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 + -