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

📄 paypass_anticollision.lst

📁 读RF卡的源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
                       if (l_bStatus == ERR_COLL)
                       {
                           return COLLISION_ERROR ;     
                       }
               
                       if (l_bStatus != ERR_NO_ERROR) 
                       {
                           return TRANSMISSION_ERROR;
                       }
               
                       // UID CLn NOT COMPLIANT(Requirements 5.4)
                       if (   ( ( (g_abATQAResponse[0]& 0xC0) == 0x00) & ((l_bSEL > 0x93)||(l_abBuffer[0]==0x88)))
                           || ( ( (g_abATQAResponse[0]& 0xC0) == 0x40) & (((l_bSEL == 0x93)&(l_abBuffer[0]!=0x88)) || (l_bSEL > 0
             -x95)))    
                           || ( ( (g_abATQAResponse[0]& 0xC0) == 0x80) & (((l_bSEL == 0x93)&(l_abBuffer[0]!=0x88))||((l_bSEL == 0
             -x95)&(l_abBuffer[0]!=0x88))))
                           || ( ( (g_abATQAResponse[0]& 0xC0) == 0xC0)))    
                       {   
                           
                           return PROTOCOL_ERROR;
                       }
                                                                                        
                       // VERIFY IF THE BCC INCLUDING IN THE UID CLn IS CORRECT (Requirements 5.4)
                       // CALCULATED VALUE
                       l_abBuffer[6] = l_abBuffer[0] ^ l_abBuffer[1] ^ l_abBuffer[2] ^ l_abBuffer[3];  
                       if (l_abBuffer[4] != l_abBuffer[6]) 
                       {   
                           return TRANSMISSION_ERROR;
                       }       
               
                       // STORE THE UID
                       memcpy(&p_abUID[l_bCurrentSerial],&l_abBuffer[0],5);
                       
                       // BUFFER SHOULD BE INITIALIZED WITH 0x00 FROM 5 UNTIL 14
                       memset(&l_abBuffer[5],0,10);
               
                       // COPY THE UID WITHOUT THE BCC IN THE 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;
                           // 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);
                       }
ARM COMPILER V2.40e,  PayPass_Anticollision                                                12/12/07  14:35:10  PAGE 13  

                       while ((i < 3) && (l_bStatus == ERR_NOCARD));
                       
                       // RETURN ERROR
                       if ((i = 3) && (l_bStatus == ERR_NOCARD)) 
                       {
                           return TIME_OUT_ERROR;
                       }
                       
                       // FP COLLISION RETURN 23/08/07
                       if (l_bStatus == ERR_COLL)
                       {
                           return COLLISION_ERROR ;     
                       }
               
                       if (l_bStatus != ERR_NO_ERROR)  
                       {
                           return TRANSMISSION_ERROR;
                       }
               
                       // IF = CT --> DOUBLE OR TRIPLE UID
                       if (p_abUID[l_bCurrentSerial] == 0x88)    
                       {    
                           // NEXT STAGE SELECTION 93->95->97
                           l_bSEL += 2;                
                           // SHIFT POSITION FOR THE NEXT 5 BYTES SERIAL NUMBER STAGE
                           l_bCurrentSerial += 5;      
                       }           
                       else 
                       {
                           // FOR THE REAL SIZE OF UID
                           l_bCurrentSerial += 5;     
                           break;
                       }
                           
                       // VERIFY THE LAST SELECT RESPONSE: 
                       // CASCADE BIT : IF BIT3=0 --> VALID SAK --> COMPLETE UID 
                       //if ( bit_testChar(&l_abBuffer[0],2) == 0 ) 
                       if ((l_abBuffer[0] & 0x04) == 0) 
                       {
                               return PROTOCOL_ERROR;
                       }                                      
                   }
                   while (l_bSEL<0x98);    
                   
                   // VERIFY THE LAST SELECT RESPONSE: 
                   // CASCADE BIT : IF BIT3=0 --> VALID SAK --> COMPLETE UID 
                   if ((l_abBuffer[0] & 0x04) == 0x04 ) 
                   {
                       return PROTOCOL_ERROR;
                   }
                                     
                   // UID LENGTH
                   *p_bUIDLength=l_bCurrentSerial;
               
                   /*----------COLLISION DETECTION A----------*/      
                   // SEND HALT A COMMAND  
                   v_fnSendHALTA(p_pStructReader);
                   // no response waiting from the PICC
               
                   // WAIT DURING tH = 100etu = 0,94ms = 2*472祍
                   for(l_bDelay=2;l_bDelay>0;l_bDelay--) 
                   {   
                       delay_us(472);
                   }
               
                   // SEND REQ A
ARM COMPILER V2.40e,  PayPass_Anticollision                                                12/12/07  14:35:10  PAGE 14  

                   l_bStatus = b_fnSendReceiveREQAWUPA(_ISOA_REQA,&l_abBuffer[0],p_pStructReader,&g_lDataBytesReceived);
               
                 
                   // IF A CARD A ANSWERS --> 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);   
                   
                   // SEND WUPB
                   l_bStatus = b_fnSendReceiveREQBWUPB_PayPass(_ISOB_WUPB_NO_SLOT,&l_abBuffer[0],p_pStructReader,&g_lDataBy
             -tesReceived);
               
               
                   // IF A CARD B ANSWERS: 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-A PROTOCOL
                   v_fnProtocolChange(ISOA_PROTOCOL,&g_abP6Config14443A_PayPass[0],g_bRFReceiveEOFA,p_pStructReader);   
               
               #ifdef MODE_DEBUG
                   printf("Card A ready for activate \n");
                   printf("UID : ");
                   for(i=0;i<*p_bUIDLength;i++)
                   {
                       printf("%02x",p_abUID[i]);
                   }
                   printf("         PUID Lenght : ");
                   printf("%02d\n",*p_bUIDLength);
               #endif
                   return END_COLLISION_A;
               }
               
               
               //-----------------------------------------------------------------------------
               // Function name : b_fnCollisionB(unsigned char* l_abBuffer, StructReader* p_pStructReader)
               //-----------------------------------------------------------------------------
               // Description : Do the type B collision detection
               //               
               //
               // IN       :   p_pStructReader : Pointer to the used StructReader structure.
               //              l_abBuffer      : ATQB extract from the WUPB of POLLING
               //
               // OUT      :   - none -
               //  
               // RETURN   :   END_COLLISION_B    one card B 
               //              PROTOCOL_ERROR
               //              TIME_OUT_ERROR
ARM COMPILER V2.40e,  PayPass_Anticollision                                                12/12/07  14:35:10  PAGE 15  

               //              TRANSMISSION_ERROR Collision
               //
               // Notes    :   - none -
               //-----------------------------------------------------------------------------
               unsigned char b_fnCollisionB(unsigned char* l_abBuffer, StructReader* p_pStructReader)
               {
                   unsigned char l_bStatus;
                   unsigned char i;
                   unsigned char l_bDelay;
                   
                   // EXTRACT FWI FROM THE ATQB TO CALCULATE THE FWT FOR THE HALTB COMMAND
                   g_FWT_SFGT = b_fnFWT_SFGTCalculate(_FWT,l_abBuffer[11],1);
                   g_FWT_SFGT += _PICOREAD_TIMEOUT_OFFSET_B;
               
                   /*--------------COLLISION DETECTION B--------------*/
                   // SEND HALT CMD TO THE CHIP            
                   i = 0;
                   do                     //loop(x3) for time-out error
                   {
                       i += 1;
                       // TIMEOUT VALUE (礢) = g_FWT_SFGT : calculate with the FWI of ATQB
                       p_pStructReader->s_bRTimeoutUsed = g_FWT_SFGT; 
                       // SEND HALTB COMMAND AND RECEIVE RESPONSE  
                       l_bStatus = b_fnSendReceiveHALTB(&l_abBuffer[0],p_pStructReader);
                   
                       // CHECK ERROR
                       l_bStatus = b_fnPayPassAnticollisionErrorHandling(_ISOB_HALT, l_bStatus,&l_abBuffer[0],g_lDataBytesR
             -eceived);
                   }
                   while (( i < 3 ) && (l_bStatus == ERR_NOCARD));
               
                   // RETURN ERROR
                   if ((l_bStatus == ERR_NOCARD) && (i = 2)) 
                   {
                       return TIME_OUT_ERROR;
                   }
               
                   // 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
                   }
               
               
               #ifdef MODE_DEBUG
                   printf("Card B halted\n");
               #endif
               
                   /*----------COLLISION CHECKING----------*/
                   // TIMEOUT VALUE + PICOREAD OFFSET (祍)
                   p_pStructReader->s_bRTimeoutUsed = (_FWT_ATQB + _PICOREAD_TIMEOUT_OFFSET_B);        
                   // SEND REQB COMMAND
                   l_bStatus = b_fnSendReceiveREQBWUPB_PayPass(_ISOB_REQB_NO_SLOT,&l_abBuffer[0],p_pStructReader,&g_lDataB
             -ytesReceived);
               
               
                   // IF CARD B ANSWERS: COLLISION --> RETURN ERROR   // FP COLLISION RETURN 23/08/07
                   if(l_bStatus != ERR_NOCARD) 
                   {
                       return COLLISION_ERROR ; //eturn TRANSMISSION_ERROR;

⌨️ 快捷键说明

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