📄 paypass_tcl.lst
字号:
unsigned short l_wStatus;
unsigned short l_iLength;
unsigned char l_ePCBType;
unsigned char l_ePCBTypeInitial;
unsigned char l_eTransmitStep;
unsigned char l_eTransmitStepToResend;
unsigned char l_bWTX;
ARM COMPILER V2.40e, Paypass_TCL 12/12/07 14:35:11 PAGE 12
unsigned short l_iRetryCount;
unsigned short l_iRetryCount2;
unsigned short l_iDataInPrologueEpilogue;
unsigned char l_aiDataInListLength[300]; // Table of all segment length of data to send
unsigned short l_iDataInBlockCount;
unsigned short l_iIndexDataIn;
unsigned short l_iCurrentOutIndex;
unsigned short l_iDataInIndex; // Current number of the packet to send
unsigned short l_iDataCursor;
unsigned char l_bRFReceiveEOF;
unsigned char l_ErrorType;
unsigned char l_AddARetry=1; // According to TA401.11
unsigned char i;
i=0;
// INITIALIZE STEP
l_eTransmitStep = CST_tcltsCommand; // First step is to send a command
// INITIALIZE RETRY COUNT TO TCL_RETRY_COUNT
l_iRetryCount = TCL_RETRY_COUNT; /* FP DEBUG TA401.14 (+1) */
l_iRetryCount2 = TCL_RETRY_COUNT;
// CREATE DATA IN LIST
l_iDataInIndex = 0; //Packet to send = number 0
// GET STRING
l_iDataCursor = 0;
l_iDataInBlockCount = 0; // number of packet to send
l_iCurrentOutIndex = 0; // number of packet received
/*------------------------------------------------------------------------------------------------*/
/*--------------------------PACKETS LENGTH STORAGE------------------------------------------------*/
/*------------------------------------------------------------------------------------------------*/
while (l_iDataCursor < p_iDataInLength)
{
// GET PROLOGUE EPILOGUE SIZE PCB(1) = 1 byte
l_iDataInPrologueEpilogue = 1;
// ADD COMMAND SIZE (5) IF FIRST PASS
if (l_iDataInBlockCount == 0)
{
l_iDataInPrologueEpilogue += 5;
}
// GET SIZE OF THE CURRENT PACKET
// IF (DATA LEN - CURSOR)+ (PCB+COMMAND)> PICC FSD
if ((p_iDataInLength - l_iDataCursor + l_iDataInPrologueEpilogue +2) > g_TCLCard.f_iPICCMaximumInputFra
-meSize)
{
//LEN = PICC MAX- (PCB+COMMAND)- 2 BYTE OF CRC
l_iLength = g_TCLCard.f_iPICCMaximumInputFrameSize - l_iDataInPrologueEpilogue-2;
// MOVE CURSOR : CURSOR = CURSOR + LEN
l_iDataCursor += l_iLength;
}
else
{
//LEN = DATA LEN- CURSOR
l_iLength = p_iDataInLength - l_iDataCursor;
// MOVE CURSOR AT THE LAST DATA
ARM COMPILER V2.40e, Paypass_TCL 12/12/07 14:35:11 PAGE 13
l_iDataCursor = p_iDataInLength;
}
// ADD LENGTH TO LIST
l_aiDataInListLength[l_iDataInBlockCount] = l_iLength;
l_iDataInBlockCount++;
}
/*------------------------------------------------------------------------------------------------*/
// IF LC = 0 (NO DATA)
if (p_iDataInLength == 0)
{
//SET PROLOGUEEPILOGUE SIZE TO 6
l_iDataInPrologueEpilogue = 6;
//SET DATA IN LEN = 0
l_aiDataInListLength[0] = 0;
}
l_iIndexDataIn = 0;
/*------------------------------------------------------------------------------------------------*/
/*------------------UNIT FRAME BUILD--------SENDING-----------------------------------------------*/
/*------------------------------------------------------------------------------------------------*/
// LOOP UNTIL EXCHANGE DONE
while (l_eTransmitStep != CST_tcltsEnd)
{
/* BUILD FRAME */
// CASE STEP
switch (l_eTransmitStep)
{
case CST_tcltsCommand:
// SIZE OF FIRST DATA
l_iDataInLength = l_aiDataInListLength[0];
// SET CHAINING IF MORE THAN ONE DATA IN LIST
if (l_iDataInBlockCount > 1)
{
l_ePCBType = CST_pcbtIWithChaining;
}
// ONLY ONE DATA IN LIST
else
{
l_ePCBType = CST_pcbtINoChaining;
}
// BUILD I TCL FRAME
l_iTCLFrameInLength = 0;
l_iTCLFrameOutLength = 0;
v_fnTCLFrameBuild(l_ePCBType, p_pabCommand, &p_pabDataIn[0], l_iDataInLength, l_abTCLFrame, &l_iTCLFr
-ameInLength, &l_iTCLFrameOutLength);
// IN CASE OF RESENDING (TIMEOUT)
l_eTransmitStepToResend = CST_tcltsCommand;
// FOR Test TA 408.4 and Test TA 408.5
l_ePCBTypeInitial = l_ePCBType;
ARM COMPILER V2.40e, Paypass_TCL 12/12/07 14:35:11 PAGE 14
break;
case CST_tcltsChaining:
// LENGTH OF DATA TO SEND
l_iDataInLength = l_aiDataInListLength[l_iDataInIndex];
// SET CHAINING BIT IF STRING LEFT IN LIST
if (l_iDataInIndex < (l_iDataInBlockCount - 1))
{
l_ePCBType = CST_pcbtIWithChaining;
}
else
{
l_ePCBType = CST_pcbtINoChaining;
}
// BUILD I TCL FRAME
v_fnTCLFrameBuild(l_ePCBType, NULL, &p_pabDataIn[l_iIndexDataIn], l_iDataInLength, l_abTCLFrame, &l_i
-TCLFrameInLength, &l_iTCLFrameOutLength);
// UNKNOWN FRAME OUT LENGTH
l_iTCLFrameOutLength = -1;
// IN CASE OF RESENDING (TIMEOUT)
l_eTransmitStepToResend = CST_tcltsChaining;
// FOR Test TA 408.4 and Test TA 408.5
l_ePCBTypeInitial = l_ePCBType;
break;
case CST_tcltsRACK:
// BUILD RACK TCL FRAME
v_fnTCLFrameBuild(CST_pcbtRACK, NULL, NULL, 0, l_abTCLFrame, &l_iTCLFrameInLength, &l_iTCLFrameOutLen
-gth);
// UNKNOWN FRAME OUT LENGTH
l_iTCLFrameOutLength = -1;
break;
case CST_tcltsRNACK:
// BUILD RNACK TCL FRAME
v_fnTCLFrameBuild(CST_pcbtRNACK, NULL, NULL, 0, l_abTCLFrame, &l_iTCLFrameInLength, &l_iTCLFrameOutLe
-ngth);
// UNKNOWN FRAME OUT LENGTH
l_iTCLFrameOutLength = -1;
break;
case CST_tcltsSWTX:
// BUILD SWTX TCL FRAME
v_fnTCLFrameBuild(CST_pcbtSWTX, NULL, p_pabDataIn, 1, l_abTCLFrame, &l_iTCLFrameInLength, &l_iTCLFram
-eOutLength);
// FP DEBUG
// IN CASE OF RESENDING (TIMEOUT)
l_eTransmitStepToResend = CST_tcltsSWTX;
// UNKNOWN FRAME OUT LENGTH
l_iTCLFrameOutLength = -1;
//break; ////////////////DEBUG 240707
}
/* SET PARAMETERS ACCORDING TO THE PROTOCOL -- REVEIVE EOF -- TIMEOUT -- BEFORE SEND */
ARM COMPILER V2.40e, Paypass_TCL 12/12/07 14:35:11 PAGE 15
//PROTOCOL CHOICE
if(g_TCLCard.f_eCardType == CST_tclctISO_14443_A_4)
{
l_bRFReceiveEOF = g_bRFReceiveEOFA;
}
else
{
l_bRFReceiveEOF = g_bRFReceiveEOFB;
}
// INITIALIZE THE TIME OUT
if(l_eTransmitStep == CST_tcltsSWTX)
{
// TIME OUT IF WAITING TIME EXTENSION IS NEEDED(FWTtemp = FWT * WTXM)
g_TCLCard.f_dPICCMaximumFrameWaitingTime = g_FWT_SFGT * l_bWTX ;
}
else
{
g_TCLCard.f_dPICCMaximumFrameWaitingTime = g_FWT_SFGT ;
}
p_pStructReader->s_bRTimeoutUsed = g_TCLCard.f_dPICCMaximumFrameWaitingTime;
if (p_pStructReader->s_bRProtocol == ISOA_PROTOCOL)
{
p_pStructReader->s_bRTimeoutUsed += _PICOREAD_TIMEOUT_OFFSET_A;
}
if (p_pStructReader->s_bRProtocol == ISOB_PROTOCOL)
{
p_pStructReader->s_bRTimeoutUsed += _PICOREAD_TIMEOUT_OFFSET_B;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -