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

📄 part3.cpp

📁 北京航空航天大学指纹识别系统源码
💻 CPP
字号:
// Part3.cpp: implementation of the CPart3 class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
//#include "cos.h"
#include "Part3.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

CStoByte(CString m_cstring);

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CPart3::CPart3()
{
	cardnumber=0;
	m_pAnticollisionThread = NULL;
}

CPart3::~CPart3()
{

}

CStoByte(CString m_cstring)
{
	CString m_hexstring = "0123456789abcdef";
	CString m_cstring1 = m_cstring.Mid(0,1);
	CString m_cstring2 = m_cstring.Mid(1,1);
	BYTE m_temp = m_hexstring.Find((LPCTSTR)m_cstring1,0)*16+
	m_hexstring.Find((LPCTSTR)m_cstring2,0);
	return m_temp;
}

void CPart3::StartAnticollision()
{
	HANDLE AntiThreadHandle;

	dahong = 1;
	m_pAnticollisionThread = AfxBeginThread(Anticollision,this,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);
    AntiThreadHandle = m_pAnticollisionThread->m_hThread;
	m_pAnticollisionThread->ResumeThread();
}

void CPart3::EndAnticollision()
{

	if(m_pAnticollisionThread)
		dahong = 0;
}

UINT Anticollision(LPVOID pParam)
{
	BYTE pATQB[12];
	BYTE pPUPI[4];
	BYTE* bPUPI;
	BYTE currentstate=SEND_REQB;
	BYTE* bATQB=pATQB;
	BYTE totalslot=1;
	BYTE cid=0;
	BYTE slotindex;
	BOOL collisionoccur=FALSE;
	BYTE numbercollision=0;
	BYTE numberslot;
	FWRC isnoATQB;
	FWRC isnoATTRIB;
	CPart3* pPart3;

/*	wr_cll_reg(0x01,0x60);
	wr_cll_reg(0x05,0x00);
	wr_cll_reg(0x03,0x00);
	wr_cll_reg(0x06,0x00);
	wr_cll_reg(0x02,0xC4);
	wr_cll_reg(0x11,0x01);

*/
	CString m_csAFI = AfxGetApp()->GetProfileString("ISO Type B","AFI","00");
	BYTE m_byteAfi = CStoByte(m_csAFI);
	BOOL tryanother=TRUE;
	pPart3 = (CPart3*)pParam;

	while(pPart3->dahong==1){
		switch(currentstate){
			case SEND_REQB:
				bATQB=pATQB;
				totalslot=1;
				if(collisionoccur&&numbercollision<4){
					numbercollision++;
				}
				totalslot=totalslot<<numbercollision;
				numberslot=totalslot-1;	
				isnoATQB=req_b_ll(m_byteAfi,numbercollision,bATQB);
				collisionoccur=FALSE;

				if(isnoATQB==COD_S_OK)
				{
					currentstate=RECEIVED_ATQB;
				}
				else if(isnoATQB==COD_E_COLLISION)
				{
					if(numberslot==0){
						currentstate=SEND_REQB;
					}
					else{
						currentstate=SEND_SLOTMARKER;
					}
					collisionoccur=TRUE;
				}
				else if(isnoATQB==COD_E_TIMEOUT)
				{
					if(numberslot!=0){
						currentstate=SEND_SLOTMARKER;
					}
				}
				break;
			case RECEIVED_ATQB:
				{
					int i;
					CString m_csDisplayATQBdata;
					for(i=0;i<12;i++)
					{
						char m_test[3];
						if(*bATQB<16)
						{
							m_csDisplayATQBdata+="0";
						}
						_itoa(*(bATQB++),m_test,16);
						m_csDisplayATQBdata+=m_test;
						m_csDisplayATQBdata+=" ";
					}
					m_csDisplayATQBdata+="\n";
						
					for(i=0;i<4;i++){
						pPUPI[i]=pATQB[i+1];
					}
					if(*pATQB==0x50){
						currentstate=SEND_ATTRIB;
					}
					else
					{
						if(numberslot==0){
							currentstate=SEND_REQB;
						}
						else{
							currentstate=SEND_SLOTMARKER;
						}
					}
				}
				break;
			case SEND_SLOTMARKER:
				bATQB=pATQB;
				slotindex=totalslot-numberslot+1;
				isnoATQB=slotmarker_b(slotindex,bATQB);
				numberslot--;
				if(isnoATQB==COD_S_OK)
				{
					currentstate=RECEIVED_ATQB;
				}
				else if(isnoATQB==COD_E_COLLISION){
					collisionoccur=TRUE;
					if(numberslot==0){
						currentstate=SEND_REQB;
					}
				}
				else if(isnoATQB==COD_E_TIMEOUT){
					if(numberslot==0){
						if(!collisionoccur){
							if(tryanother){
								tryanother=FALSE;
								currentstate=SEND_REQB;
							}
							else{
								currentstate=NO_ANTICOLLISION;
							}
						}
						else{
							currentstate=SEND_REQB;
						}
					}
				}
				
				break;
			case SEND_ATTRIB:
				bPUPI=pPUPI;
				cid++;
				isnoATTRIB=attrib_b(bPUPI,cid);
				
				if(isnoATTRIB==COD_S_OK){
					currentstate=RSV_ATTRIB_ANSWER;	
				}
				else{
					AfxMessageBox("attrib error");
					if(numberslot==0){
							currentstate=SEND_SLOTMARKER;
					}
			
					else{
						currentstate=SEND_REQB;
					}
				}
				break;
			case RSV_ATTRIB_ANSWER:
				int ii;
				for(ii=0;ii<4;ii++){
					pPart3->cid_pupi[pPart3->cardnumber].pupi[ii]=*(bPUPI+ii);
					pPart3->cid_pupi[pPart3->cardnumber].cid=cid;
				}
				pPart3->cardnumber++;

				if(numberslot==0){
					if( !collisionoccur){				
						currentstate=NO_ANTICOLLISION;
					}
					else{
						currentstate=SEND_SLOTMARKER;
					}
				}
				else{
					currentstate=SEND_REQB;
				}
				break;
			case NO_ANTICOLLISION:
                pPart3->dahong=0;
				Beep(3000,1000);
				
				//cardnumber is number of cards
				//cid_pupi store cid and pupi
				currentstate=SEND_REQB;
				numbercollision=0;
				break;
		}  //switch
	}  //while

	::SendMessage(pPart3->m_hExecuteWnd,WM_ANTIEND,0,0);
    AfxEndThread(1);
	return 1;

}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -