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

📄 paypass_ttal1_comm.c

📁 读RF卡的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
						g_abATQBResponse[9],
						g_abATQBResponse[10],
						g_abATQBResponse[11]);
		}
	}
	else
	{
		sprintf(g_sLog.buffer + strlen(g_sLog.buffer),"No type B card\n");
 	}

	v_fnSendToHostEcho(g_sLog.buffer);
	v_fnSendToHostDone();
}

//-----------------------------------------------------------------------------
// Function name : v_fnReceivedFromHostHLTA
//-----------------------------------------------------------------------------
// Description :   This function executes a HALT_A
//
// IN       :   - none -
// OUT      :   - none -
// RETURN   :   - none -
// Notes    :   - none -
//-----------------------------------------------------------------------------
void v_fnReceivedFromHostHLTA()
{
	unsigned char l_abDataForPrintf[2];
	StructReader	myReaderStruct;

	v_fnSendToHostEcho("->HLTA");
	
	// LOAD ISO14443-A PROTOCOL
   	v_fnProtocolChange(ISOA_PROTOCOL,&g_abP6Config14443A_PayPass[0],g_bRFReceiveEOFA,&myReaderStruct);   	

	// Host Mode active 
	g_sLog.enable = TRUE;
	
	// Option for Host mode
	if(g_sLog.enable)
	{
		// HALT_A COMMAND
		l_abDataForPrintf[0] = _ISOA_HALT_0;
    	l_abDataForPrintf[1] = _ISOA_HALT_1;
		sprintf(g_sLog.buffer,"HALT A Command:	%02x%02x\n",l_abDataForPrintf[0],l_abDataForPrintf[1]);
	}    
	
	// SEND HALT_A COMMAND
	v_fnSendHALTA(&myReaderStruct);
	
	// DISPLAY HALT_A CMD
	v_fnSendToHostEcho(g_sLog.buffer);

	// no response waiting from the PICC

	v_fnSendToHostDone();
}

//-----------------------------------------------------------------------------
// Function name : v_fnReceivedFromHostHLTB
//-----------------------------------------------------------------------------
// Description :  This function executes a HALTB
//
// IN       :   - none -
// OUT      :   - none -
// RETURN   :   - none -
// Notes    :   - none -
//-----------------------------------------------------------------------------
void v_fnReceivedFromHostHLTB()
{
	StructReader  myReaderStruct;

	unsigned char l_bStatus;
	unsigned long l_bFWT;

	v_fnSendToHostEcho("->HLTB");

	// LOAD ISO14443-B PROTOCOL
	v_fnProtocolChange(ISOB_PROTOCOL,&g_abP6Config14443B_PayPass[0],g_bRFReceiveEOFB,&myReaderStruct);   

	// EXTRACT FWI FROM THE ATQB TO CALCULATE THE FWT FOR HALT_B CMD
	l_bFWT = b_fnFWT_SFGTCalculate(_FWT,g_abATQBResponse[11],1);
	l_bFWT += _PICOREAD_TIMEOUT_OFFSET_B;

	// Host Mode active 
	g_sLog.enable = TRUE;
	
	// Option for Host mode
	if(g_sLog.enable)
	{
		sprintf(g_sLog.buffer,"HALT B Command:	%02x%02x%02x%02x%02x\n",_ISOB_HALT,g_abATQBResponse[1],g_abATQBResponse[2],g_abATQBResponse[3],g_abATQBResponse[4]);
	}

	// TIMEOUT = "l_bFWT" CALCULATED WITH THE FWI OF ATQB
	myReaderStruct.s_bRTimeoutUsed = l_bFWT;   		
	// SEND HALT_B AND RECEIVE RESPONSE
	l_bStatus = b_fnSendReceiveHALTB(&g_abATQBResponse[0],&myReaderStruct);

	// CHECK ERROR
	l_bStatus = b_fnPayPassAnticollisionErrorHandling(_ISOB_HALT, l_bStatus,&g_abATQBResponse[0],g_lDataBytesReceived);
	
	// DISPLAY HALT_B CMD & RESPONSE			
	if (l_bStatus == ERR_NO_ERROR) 
	{		
		// HALT_B RESPONSE
		sprintf(g_sLog.buffer + strlen(g_sLog.buffer),"HALT B Response:	%02x  --> Card B halted\n",g_abATQBResponse[0]);
	}
	else
	{
		sprintf(g_sLog.buffer,"Card B no halted\n");
 	}

	v_fnSendToHostEcho(g_sLog.buffer);
	v_fnSendToHostDone();
}

//-----------------------------------------------------------------------------
// Function name : v_fnReceivedFromHostRATS
//-----------------------------------------------------------------------------
// Description :   This function executes the ACTIVATE_A
//
// IN       :   - none -
// OUT      :   - none -
// RETURN   :   - none -
// Notes    :   - none -
//-----------------------------------------------------------------------------
void v_fnReceivedFromHostRATS()
{
	StructReader  myReaderStruct;
	
	unsigned char l_bStatus;

	v_fnSendToHostEcho("->WUPA->RATS");

	// LOAD ISO144443-A PROTOCOL
	v_fnProtocolChange(ISOA_PROTOCOL,&g_abP6Config14443A_PayPass[0],g_bRFReceiveEOFA,&myReaderStruct);   	

	// Host Mode active  
	g_sLog.enable = TRUE;

	// ACTIVATE CARD A WITH THE MEMORIZED UID
	l_bStatus = b_fnActivateA(&g_abATQAResponse[0],&g_abUID[0],&myReaderStruct);

	// DISPLAY ERROR IF ACTIVATE_A NOT COMPLETED
	if (l_bStatus != END_ACTIVATE_A) 
	{
		sprintf(g_sLog.buffer,"Activate A failed\n");
 	}

	v_fnSendToHostEcho(g_sLog.buffer);
	v_fnSendToHostDone();
}

//-----------------------------------------------------------------------------
// Function name : v_fnReceivedFromHostATTRIB
//-----------------------------------------------------------------------------
// Description :   This function executes the ACTIVATE_B
//
// IN       :   - none -
// OUT      :   - none -
// RETURN   :   - none -
// Notes    :   - none -
//-----------------------------------------------------------------------------
void v_fnReceivedFromHostATTRIB()
{
	StructReader  myReaderStruct;
	
	unsigned char l_bStatus;

	v_fnSendToHostEcho("->WUPB->ATTRIB");

	// LOAD ISO14443-B PROTOCOL
	v_fnProtocolChange(ISOB_PROTOCOL,&g_abP6Config14443B_PayPass[0],g_bRFReceiveEOFB,&myReaderStruct);   
	
	// Host Mode active
	g_sLog.enable = TRUE;

	l_bStatus = b_fnActivateB(&g_abATQBResponse[0],&myReaderStruct); 

	// DISPLAY ERROR IF ACTIVATE_B NOT COMPLETED
	if (l_bStatus != END_ACTIVATE_B) 
	{
		sprintf(g_sLog.buffer,"Activate B failed\n");
 	}

	v_fnSendToHostEcho(g_sLog.buffer);
	v_fnSendToHostDone();
}


//-----------------------------------------------------------------------------
// Function name : v_fnReceivedFromHostSendAPDU
//-----------------------------------------------------------------------------
// Description : Capture the APDU to send
// IN       :   - none -
// OUT      :   - none -
// RETURN   :   - none -
// Notes    :   - none -
//-----------------------------------------------------------------------------
void v_fnReceivedFromHostSendAPDU()
{
	unsigned short 	i;
	char			l_cCMD;		// Command from Host
	char			l_cCMD2;	// Command from Host

	i = 0;
	g_bAPDULength = 0;
	v_fnSendToHostEcho("\nCapture the C-APDU to send and push 'x' button to stop the capture,\n for example : '00a404000e325041592e5359532e444446303100x'");

	// PREPARE THE C-APDU TO SEND
	while(1)
	{
		// CAPTURE THE FIRST PART OF BYTE(MSB)
		l_cCMD = getchar();
		
		// STOP THE CAPTURE, END OF THE APDU
		if (l_cCMD == 'x')
		{
			break;
		}
		
		// CAPTURE THE SECOND PART OF BYTE(LSB)	
		l_cCMD2 = getchar();

		// TEST IF THE SECOND PART OF BYTE IS A NUMBER
		if ((l_cCMD2 <= '9') && (l_cCMD2 >= '0'))
		{	
			g_abAPDU_Data[i] = l_cCMD2 - 0x30;
		}
		else
		{
			// TEST IF THE SECOND PART IS LETTER(a->f)
			if ((l_cCMD2 <= 'f') && (l_cCMD2 >= 'a'))
			{
				g_abAPDU_Data[i] = l_cCMD2 - 0x57;
			}
			else
			{
				// TEST IF THE SECOND PART IS LETTER(A->F)
				if ((l_cCMD2 <= 'F') && (l_cCMD2 >= 'A'))
				{
					g_abAPDU_Data[i] = (l_cCMD2 - 0x37);
				}
				else
				{
					v_fnSendToHostEcho("Error, Retry Full Anticollision");
					g_bAPDULength = 0;
					v_fnSendToHostDone();
					return;
				}
			}
		}
		// SAME TESTS WITH FIRST PART OF BYTE
		if ((l_cCMD <= '9') && (l_cCMD >= '0'))
		{	
			g_abAPDU_Data[i] |= (l_cCMD - 0x30) <<4;
		}
		else
		{
			if ((l_cCMD <= 'f') && (l_cCMD >= 'a'))
			{
				g_abAPDU_Data[i] |= (l_cCMD - 0x57) <<4;
			}
			else
			{
				if ((l_cCMD <= 'F') && (l_cCMD >= 'A'))
				{
					g_abAPDU_Data[i] |= (l_cCMD - 0x37) <<4;
				}
				else
				{
					v_fnSendToHostEcho("Error, Retry Full Anticollision");
					g_bAPDULength = 0;
					v_fnSendToHostDone();
					return;
				}
			}
		}
		i++;
	}
	g_bAPDULength = i;

	v_fnSendToHostDone();
}
 

//-----------------------------------------------------------------------------
// Function name : v_fnReceivedFromHostLoopBack
//-----------------------------------------------------------------------------
// Description : Execute the Loop-Back function: the full PayPass anticollision
//
// IN       :   - none -
// OUT      :   - none -
// RETURN   :   - none -
// Notes    :   - none -
//-----------------------------------------------------------------------------
void v_fnReceivedFromHostLoopBack()	
{
	StructReader	myReaderStruct;
	
	unsigned char 	l_bStatus;
	
	// LOOP-BACK SELECTION
	g_Anticollision_choice = 0;
	
	// Option No-Host mode --> full anticollision
	g_sLog.enable = FALSE;

	// RESET FIELD
	v_fnCS_reset();
	v_fnSPI_SendByte(0x40);
	v_fnCS_reset();
	v_fnSPI_SendByte(0x42); 

	// ANTICOLLISION PayPass (with Loop-Back Function)			 
	do
	{
		l_bStatus = b_fnPayPassAnticollision(&myReaderStruct);
		 	if (l_bStatus == END_RESET) 
			{
				sprintf(g_sLog.buffer,"Error in PayPass Anticollision\n");
				sprintf(g_sLog.buffer,"------------------------------\n");
				v_fnSendToHostEcho(g_sLog.buffer);
		 	}
	}
	while(l_bStatus == END_RESET); // RESET LOOP
	
	v_fnSendToHostDone();
}


//-----------------------------------------------------------------------------
// Function name : v_fnReceivedFromHostFullAnticollision
//-----------------------------------------------------------------------------
// Description : Execute the full anticollision PayPass and send different APDU
//				 captured by the host
// IN       :   - none -
// OUT      :   - none -
// RETURN   :   - none -
// Notes    :   - none -
//-----------------------------------------------------------------------------
void v_fnReceivedFromHostFullAnticollision()
{
	StructReader	myReaderStruct;
	
	unsigned char l_bStatus;
	
	// FULL ANTICOLLISION SELECTION
	g_Anticollision_choice = 1;   	

	// Option No-Host mode --> full anticollision
	g_sLog.enable = FALSE;

	// RESET FIELD
	v_fnCS_reset();
	v_fnSPI_SendByte(0x40);
	v_fnCS_reset();
	v_fnSPI_SendByte(0x42); 

	// FULL ANTICOLLISION PayPass 			 
	do
	{
		l_bStatus = b_fnPayPassAnticollision(&myReaderStruct);
		if (l_bStatus == END_RESET) 
		{
			g_sLog.enable = TRUE;
			sprintf(g_sLog.buffer,"Error in PayPass Anticollision\n");
			sprintf(g_sLog.buffer,"------------------------------\n");
			v_fnSendToHostEcho(g_sLog.buffer);
			g_sLog.enable = FALSE;
	 	}
	}
	while(l_bStatus == END_RESET); // RESET LOOP
	
	v_fnSendToHostDone();
}
 

//-----------------------------------------------------------------------------
// Function name : v_fnReceivedFromHostMX_Polling_Activate
//-----------------------------------------------------------------------------
// Description : Execute the Loop-Back function: the full PayPass anticollision
//
// IN       :   - none -
// OUT      :   - none -
// RETURN   :   - none -
// Notes    :   - none -
//-----------------------------------------------------------------------------
void v_fnReceivedFromHostMX_Polling_Activate()
{
	StructReader	myReaderStruct;
	
	unsigned char 			l_bStatus;
	unsigned char			l_cCMD1;	// INS
	unsigned char			l_cCMD2;	// P1
	unsigned char			l_cCMD3;	// P2
	unsigned char			l_cCMD4;	// P3


	l_cCMD1 = _getkey();
	l_cCMD2 = _getkey();
	l_cCMD3 = _getkey();
	l_cCMD4 = _getkey();

	// TO CONNECT THE 

⌨️ 快捷键说明

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