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

📄 paypass_tcl.lst

📁 读RF卡的源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
                   
                   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 + -