?? part3.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 + -