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

📄 paypass_anticollision.lst

📁 读RF卡的源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
ARM COMPILER V2.40e,  PayPass_Anticollision                                                12/12/07  14:35:10  PAGE 16  

                   }
               
                   //CHANGE PROTOCOL AND WAIT DURRING THE SAME TIME tP = 4,72ms
                   //delay(500 etu = 4,72 ms = 10 * 419 祍 + t(ProtocolChange) )    
                   for(l_bDelay=10;l_bDelay>0;l_bDelay--) 
                   {
                       delay_us(419);
                   }
                   // LOAD ISO14443-A PROTOCOL 
                   v_fnProtocolChange(ISOA_PROTOCOL,&g_abP6Config14443A_PayPass[0],g_bRFReceiveEOFA,p_pStructReader);   
                   
                   // SEND WUPA COMMAND
                   l_bStatus = b_fnSendReceiveREQAWUPA(_ISOA_WUPA,&l_abBuffer[0],p_pStructReader,&g_lDataBytesReceived);
                   
               
                   // If CARD A ANSERS: COLLISION --> RETURN ERROR         // FP COLLISION RETURN 23/08/07
                   if (l_bStatus != ERR_NOCARD) 
                   {
                       return COLLISION_ERROR ;    // return TRANSMISSION_ERROR;
                   }
               
                   //CHANGE PROTOCOL AND WAIT DURRING THE SAME TIME tP = 4,72ms
                   //delay(500 etu = 4,72 ms = 10 * 419 祍 + t(ProtocolChange) )    
                   for(l_bDelay=10;l_bDelay>0;l_bDelay--) 
                   {
                       delay_us(419);
                   }
                   // LOAD ISO14443-B PROTOCOL 
                   v_fnProtocolChange(ISOB_PROTOCOL,&g_abP6Config14443B_PayPass[0],g_bRFReceiveEOFB,p_pStructReader);   
               
               #ifdef MODE_DEBUG
                   printf("Card B ready for activate\n");
               #endif
                   return END_COLLISION_B;
               }
               
               
               //-----------------------------------------------------------------------------
               // Function name : b_fnActivateA(unsigned char* p_abATQAResponse_polling,unsigned char* p_abUID, StructRe
             -ader* p_pStructReader)
               //-----------------------------------------------------------------------------
               // Description : Do the type A Activate
               //               
               // IN       :   p_pStructReader : Pointer to the used StructReader structure.
               //              p_abATQAResponse_polling : ATQA memorized in the polling
               //              p_abUID         : UID memorized in COLLISION
               //
               // OUT      :    - none -
               //  
               // RETURN   :   END_ACTIVATE_A     card A activated 
               //              PROTOCOL_ERROR
               //              TIME_OUT_ERROR
               //              TRANSMISSION_ERROR Collision
               //
               // Notes    :   - none -
               //-----------------------------------------------------------------------------
               unsigned char b_fnActivateA(unsigned char* p_abATQAResponse_polling, unsigned char* p_abUID, StructReader
             -* p_pStructReader)
               {
                   unsigned char l_bStatus;
                   unsigned char l_abBuffer[20];
                   unsigned char l_bDelay;
                   unsigned char i,v;
                   unsigned char l_bSEL;
                   unsigned char l_bCurrentSerial, l_lDataBytesReceived;
                   unsigned char l_abDataForPrintf[3];
ARM COMPILER V2.40e,  PayPass_Anticollision                                                12/12/07  14:35:10  PAGE 17  

               
                   v = 0;
                   
                   l_lDataBytesReceived = 0;
                   l_abDataForPrintf[0] = 0;
               
                   /*----------WUPA----------*/
                   //CONFIGURE DATA TO SEND & SEND COMMANDE         
                   i = 0;
                   do                        //loop(x3) for time-out error
                   {
                       i += 1;
               
                       //Option for Host mode
                   /*  #ifdef TTAL1
                       printf("WUPA Command:   %02x\n",_ISOA_WUPA);
                       if(g_sLog.enable)
                       {
                           sprintf(g_sLog.buffer,"WUPA Command:    %02x\n",_ISOA_WUPA);
                       }
                       #endif
                     */        
                     //TA311 retarde
               
                       // SEND WUPA COMMAND AND RECEIVE ATQA
                       l_bStatus = b_fnSendReceiveREQAWUPA(_ISOA_WUPA,&l_abBuffer[0],p_pStructReader,&g_bATQALength);
                       // CHECK ERROR
                       l_bStatus = b_fnPayPassAnticollisionErrorHandling(_ISOA_WUPA, l_bStatus,&l_abBuffer[0],g_bATQALength);
               
                   /*  #ifdef TTAL1
                       //Option for Host mode
                                   printf("ATQA received:  %02x%02x\n",l_abBuffer[0],l_abBuffer[1]);
                       if(g_sLog.enable)
                       {
                       
                           sprintf(g_sLog.buffer + strlen(g_sLog.buffer),"ATQA received:   %02x%02x\n",l_abBuffer[0],l_abBuffer[1])
             -;
                       }       
                       #endif
                       */
                       //TA311 Retarde
                   }
                   while ((i < 3) && (l_bStatus == ERR_NOCARD));
                   
                   // RETURN ERROR
                   if ((i = 3) && (l_bStatus == ERR_NOCARD)) 
                   {
                       return TIME_OUT_ERROR;  // time-out error within tresetdelay
                   }
               
                       // FP COLLISION RETURN 23/08/07
                   if (l_bStatus == ERR_COLL)
                   {
                       return COLLISION_ERROR ;     
                   }
               
                   if (l_bStatus != ERR_NO_ERROR)
                   {
                       return TRANSMISSION_ERROR;      //return l_bStatus; FP 23/08/07
                   }   
                                                    
                  // VERIFY THE ATQA VALUE (Requirements 9.4)
                   for(i=0;i<(g_bATQALength);i++) 
                   {
                       if (p_abATQAResponse_polling[i] != l_abBuffer[i])  
                       {
ARM COMPILER V2.40e,  PayPass_Anticollision                                                12/12/07  14:35:10  PAGE 18  

                           return PROTOCOL_ERROR;
                       }
                   }
                       
               #ifdef MODE_DEBUG
                   printf("Card A awoken, ATQA OK\n");
               #endif
                  /*----------UID SIZE DETECTION----------*/
                  l_bCurrentSerial  =0;
                  l_bSEL = _ISOA_SELECT;
                  do 
                  {    
                       // CLEAR BUFFER     
                       memset(&l_abBuffer[5],0,10);
                       // COPY UID IN BUFFER TO SEND                    
                       memcpy(&l_abBuffer[2],&p_abUID[l_bCurrentSerial],4);
               
                       //SELECT COMMAND
                       i = 0;
                       do                 //loop(x3) for time-out error
                       {
                           i += 1;
                           
                           #ifdef TTAL1
                           //Option for Host mode
                           if(g_sLog.enable)      
                           {
                               //BUFFER CONCATENATION
                               l_abDataForPrintf[0] = l_bSEL;
                               l_abDataForPrintf[1] = 0x70;
                               l_abDataForPrintf[2] = l_abBuffer[2];
                               l_abDataForPrintf[3] = l_abBuffer[3];
                               l_abDataForPrintf[4] = l_abBuffer[4];
                               l_abDataForPrintf[5] = l_abBuffer[5];
                               l_abDataForPrintf[6] = l_abBuffer[2] ^ l_abBuffer[3] ^ l_abBuffer[4] ^ l_abBuffer[5]; // LRC (BCC cal
             -culate)      
                               sprintf(g_sLog.buffer + strlen(g_sLog.buffer),"SELECT Command: %02x%02x%02x%02x%02x%02x%02x\n",l_abDa
             -taForPrintf[0],l_abDataForPrintf[1],l_abDataForPrintf[2],l_abDataForPrintf[3],l_abDataForPrintf[4],l_abDataForPrintf[5],
             -l_abDataForPrintf[6]);
                           }
                           #endif
               
                       
                           // SEND SELECT COMMAND AND RECEIVE SAK
                           l_bStatus = b_fnSendReceiveSELECT_ISOA(l_bSEL,&l_abBuffer[0],p_pStructReader);
                           // CHECK ERROR
                           l_bStatus = b_fnPayPassAnticollisionErrorHandling(_ISOA_SELECT, l_bStatus,&l_abBuffer[0],g_lDataBytesR
             -eceived);
               
                           #ifdef TTAL1
                           //Option for Host mode
                           if(g_sLog.enable)      
                           {
                               //BUFFER CONCATENATION (WITH VARIABLE SIZE OF RESPONSE)
                               sprintf(g_sLog.buffer+strlen(g_sLog.buffer),"SELECT Response: %02x\n",l_abBuffer[0]);
                           }
                           #endif
                       }
                       while ((i < 3) && (l_bStatus == ERR_NOCARD));
                       
                       // RETURN ERROR
                       if ((i = 3) && (l_bStatus == ERR_NOCARD)) 
                       {
                           return TIME_OUT_ERROR; //time-out error witih tresetdelay
                       }
               
ARM COMPILER V2.40e,  PayPass_Anticollision                                                12/12/07  14:35:10  PAGE 19  

                       // FP COLLISION RETURN 23/08/07
                       if (l_bStatus == ERR_COLL)
                       {
                           return COLLISION_ERROR ;     
                       }
               
                       if (l_bStatus != ERR_NO_ERROR) 
                       {
                           return TRANSMISSION_ERROR;
                       }
               
                       // CHECK UID LENGTH: IF = CT --> DOUBLE OR TRIPLE UID SIZE
                       if (p_abUID[l_bCurrentSerial]==0x88) 
                       {
                           l_bSEL += 2;     
                           l_bCurrentSerial += 5;
                       }
                       else 
                       {   
                           l_bCurrentSerial += 5;
                           break;
                       }
                       
                       // VERIFY THE LAST SELECT RESPONSE: 
                       // CASCADE BIT : IF BIT3=0 --> VALID SAK --> COMPLETE UID 
                       if ((l_abBuffer[0]& 0x04) == 0x00 ) 
                       {
                           return PROTOCOL_ERROR;
                       }                                      
                   }             
                   while (l_bSEL < 0x98);
                   
                  // VERIFY THE LAST SELECT RESPONSE: 
                       // CASCADE BIT : IF BIT3=1 --> NOT COMPLETE UID 
                  if((l_abBuffer[0]& 0x04) == 0x04 )  
                   {
                       return PROTOCOL_ERROR;
                   }
               
               //Debug OC
               #ifdef MODE_DEBUG
                   printf("Card A selected\n");
               //  printf("g_sLog.enable: %X\n",g_sLog.enable);
               //  g_sLog.enable=1;
               #endif
               
                   /*----------RATS/ATS----------*/ 
           

⌨️ 快捷键说明

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