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

📄 main.lst

📁 读ISO14443 CPU卡源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 260          //响应上位机发送的A卡锁定命令
 261          /////////////////////////////////////////////////////////////////////
 262          void ComSelect()
 263          {
 264   1          if (MI_OK == PcdSelect(&g_cReceBuf[6], &g_cReceBuf[0]))
 265   1          {    AnswerOk(&g_cReceBuf[0], 1);      }
 266   1          else
 267   1          {    AnswerErr(FAULT10);   }        
 268   1      }
 269          
 270          /////////////////////////////////////////////////////////////////////
 271          //响应上位机发送的A卡休眠命令
 272          /////////////////////////////////////////////////////////////////////
 273          void ComHlta()
 274          {
 275   1          if (MI_OK == PcdHalt())
 276   1          {    AnswerCommandOk();    }
 277   1          else
 278   1          {    AnswerErr(FAULT10);   }        
 279   1      }
 280          
 281          /////////////////////////////////////////////////////////////////////
 282          //响应上位机发送的A卡验证密钥命令
 283          /////////////////////////////////////////////////////////////////////
 284          void ComAuthentication()
 285          {       
 286   1          char status = MI_COM_ERR;
 287   1          unsigned char *pkeys,*pSNR;
 288   1          pkeys = &g_cReceBuf[20];
 289   1          pSNR  = &g_cSNR;
 290   1          if (MI_OK == ChangeCodeKey(&g_cReceBuf[8],pkeys))                       //转换密钥格式
 291   1          {    
 292   2              if (MI_OK == PcdAuthKey(pkeys))                                     //传送密钥到RC500FIFO
 293   2              {
 294   3                   status = PcdAuthState(g_cReceBuf[6], g_cReceBuf[7], pSNR);     //验证密钥
 295   3              }
 296   2          }
 297   1          if (status == MI_OK)
 298   1          {    AnswerCommandOk();    }
 299   1          else
 300   1          {    AnswerErr(FAULT22);   }
 301   1      }    
 302          
 303          /////////////////////////////////////////////////////////////////////
C51 COMPILER V8.05a   MAIN                                                                 07/05/2010 23:34:44 PAGE 6   

 304          //响应上位机读M1卡命令
 305          /////////////////////////////////////////////////////////////////////
 306          void ComM1Read()
 307          {
 308   1          if (MI_OK == PcdRead(g_cReceBuf[6], &g_cReceBuf[0]))
 309   1          {    AnswerOk(&g_cReceBuf[0], 16);  }
 310   1          else
 311   1          {    AnswerErr(FAULT23);            }
 312   1      }
 313          
 314          /////////////////////////////////////////////////////////////////////
 315          //响应上位机写M1卡命令
 316          /////////////////////////////////////////////////////////////////////
 317          void ComM1Write()
 318          {
 319   1          if (MI_OK == PcdWrite(g_cReceBuf[6], &g_cReceBuf[7]))
 320   1          {    AnswerCommandOk();    }
 321   1          else
 322   1          {    AnswerErr(FAULT24);   }
 323   1      }
 324          
 325          /////////////////////////////////////////////////////////////////////
 326          //响应上位机初始化钱包命令
 327          /////////////////////////////////////////////////////////////////////
 328          void ComM1Initval()
 329          {
 330   1          g_cReceBuf[11]=~g_cReceBuf[7];g_cReceBuf[12]=~g_cReceBuf[8];
 331   1          g_cReceBuf[13]=~g_cReceBuf[9];g_cReceBuf[14]=~g_cReceBuf[10];
 332   1          g_cReceBuf[15]=g_cReceBuf[7];g_cReceBuf[16]=g_cReceBuf[8];
 333   1          g_cReceBuf[17]=g_cReceBuf[9];g_cReceBuf[18]=g_cReceBuf[10];
 334   1          g_cReceBuf[19]=g_cReceBuf[6];g_cReceBuf[20]=~g_cReceBuf[6];
 335   1          g_cReceBuf[21]=g_cReceBuf[6];g_cReceBuf[22]=~g_cReceBuf[6];
 336   1          if (MI_OK == PcdWrite(g_cReceBuf[6], &g_cReceBuf[7]))
 337   1          {    AnswerCommandOk();    }
 338   1          else
 339   1          {    AnswerErr(FAULT24);   }
 340   1      }
 341          
 342          /////////////////////////////////////////////////////////////////////
 343          //响应上位机读钱包命令
 344          /////////////////////////////////////////////////////////////////////
 345          void ComM1Readval()
 346          {
 347   1          if (MI_OK == PcdRead(g_cReceBuf[6], &g_cReceBuf[0]))
 348   1          {    AnswerOk(&g_cReceBuf[0], 4);   }
 349   1          else
 350   1          {    AnswerErr(FAULT23);         }
 351   1      }
 352          
 353          /////////////////////////////////////////////////////////////////////
 354          //响应上位机扣款命令
 355          /////////////////////////////////////////////////////////////////////
 356          void ComM1Decrement()
 357          {
 358   1          if (MI_OK == PcdValue(PICC_DECREMENT, g_cReceBuf[6], &g_cReceBuf[7]))
 359   1          {    AnswerCommandOk();    }
 360   1          else
 361   1          {    AnswerErr(FAULT24);   }
 362   1      }
 363              
 364          /////////////////////////////////////////////////////////////////////
 365          //响应上位机充值命令
C51 COMPILER V8.05a   MAIN                                                                 07/05/2010 23:34:44 PAGE 7   

 366          /////////////////////////////////////////////////////////////////////
 367          void ComM1Increment()
 368          {
 369   1          if (MI_OK == PcdValue(PICC_INCREMENT, g_cReceBuf[6], &g_cReceBuf[7]))
 370   1          {    AnswerCommandOk();    }
 371   1          else
 372   1          {    AnswerErr(FAULT24);   }
 373   1      }
 374          
 375          /////////////////////////////////////////////////////////////////////
 376          //响应上位机M1卡回传命令
 377          /////////////////////////////////////////////////////////////////////
 378          void ComM1Restore()
 379          {
 380   1          if (MI_OK == PcdRestore(g_cReceBuf[6]))
 381   1          {    AnswerCommandOk();    }
 382   1          else
 383   1          {    AnswerErr(FAULT23);   }
 384   1      }
 385          
 386          /////////////////////////////////////////////////////////////////////
 387          //响应上位机M1卡值传送命令
 388          /////////////////////////////////////////////////////////////////////
 389          void ComM1Transfer()
 390          {
 391   1          if (MI_OK == PcdTransfer(g_cReceBuf[6]))
 392   1          {    AnswerCommandOk();    }
 393   1          else
 394   1          {    AnswerErr(FAULT24);   }
 395   1      }
 396          
 397          
 398          
 399          
 400          /////////////////////////////////////////////////////////////////////
 401          //响应上位机TYPEA卡高级复位命令
 402          /////////////////////////////////////////////////////////////////////
 403          void ComTypeARst()
 404          {
 405   1          unsigned char status,i;
 406   1          i = (FSDI << 4) & 0xF0;
 407   1          status = PcdRequest(g_cReceBuf[6], &g_cReceBuf[0]);
 408   1          
 409   1          if (status != MI_OK)
 410   1          {   status = PcdRequest(g_cReceBuf[6], &g_cReceBuf[0]);   }
 411   1      
 412   1          if (status == MI_OK)
 413   1          {   status =  PcdAnticoll(&g_cReceBuf[1]);   }
 414   1          
 415   1          if (status == MI_OK)
 416   1          {   status =  PcdSelect(&g_cReceBuf[1], &g_cReceBuf[6]);   }
 417   1          
 418   1          if (status == MI_OK)        
 419   1          {   status =  MifareProRst(i, &g_cReceBuf[0], &g_cReceBuf[5]);    }
 420   1          
 421   1          if (status == MI_OK)
 422   1          {   
 423   2              g_cFWI         = g_cReceBuf[8]>>4; //0xff;//
 424   2              g_cReceBuf[0] += 4;
 425   2              g_cCidNad      = 0;//(g_cReceBuf[9] & 0x03) << 2;
 426   2              AnswerOk(&g_cReceBuf[1], g_cReceBuf[0]);
 427   2          }
C51 COMPILER V8.05a   MAIN                                                                 07/05/2010 23:34:44 PAGE 8   

 428   1          else
 429   1          {   AnswerErr(FAULT21);    }
 430   1      }   
 431           
 432          /////////////////////////////////////////////////////////////////////
 433          //响应上位机ISO14443-4卡COS命令
 434          /////////////////////////////////////////////////////////////////////
 435          void ComTypeACOS()
 436          {
 437   1          g_cReceBuf[0] -= 5;
 438   1          if (MI_OK == MifareProCom(g_cCidNad, g_cFWI, &g_cReceBuf[0], &g_cReceBuf[6]))
 439   1          {   AnswerOk(&g_cReceBuf[6], g_cReceBuf[0]);   }
 440   1          else
 441   1          {   AnswerErr(FAULT10);    }
 442   1      } 
 443          
 444                  
 445          /////////////////////////////////////////////////////////////////////
 446          //响应上位机T=CL卡退出激活状态命令
 447          /////////////////////////////////////////////////////////////////////
 448          void ComCL_Deselect()
 449          {
 450   1          if (MI_OK == CL_Deselect(0))
 451   1          {    AnswerCommandOk();    }
 452   1          else
 453   1          {    AnswerErr(-1);   }
 454   1      }
 455          
 456          
 457          
 458          
 459          
 460          
 461          /////////////////////////////////////////////////////////////////////
 462          //正确执行完上位机指令,应答(无返回数据)
 463          /////////////////////////////////////////////////////////////////////
 464          void AnswerCommandOk()
 465          {    
 466   1           unsigned char i,chkdata;
 467   1           chkdata = 0;
 468   1           
 469   1           TI   = 0;                         //发送命令头          
 470   1           SBUF = 0xAA;
 471   1           while (!TI);           
 472   1           TI   = 0;
 473   1           SBUF = 0xBB;
 474   1           while (!TI);
 475   1           
 476   1           TI   = 0;                         //发送长度字
 477   1           SBUF = 0x06;
 478   1           while (!TI);           
 479   1           TI   = 0;
 480   1           SBUF = 0x00; 
 481   1           while (!TI);           
 482   1                
 483   1           TI   = 0;                         //发送设备标识
 484   1           SBUF = g_cIcdevH;
 485   1           while (!TI);
 486   1           if (g_cIcdevH == 0xAA)
 487   1           {
 488   2              TI   = 0;
 489   2              SBUF = 0;
C51 COMPILER V8.05a   MAIN                                                                 07/05/2010 23:34:44 PAGE 9   

 490   2              while (!TI);
 491   2           }
 492   1           TI   = 0; 
 493   1           SBUF = g_cIcdevL; 
 494   1           while (!TI);
 495   1           if (g_cIcdevL == 0xAA)
 496   1           {
 497   2              TI   = 0;
 498   2              SBUF = 0;
 499   2              while (!TI);
 500   2           }
 501   1           
 502   1           TI   = 0;                         //发送命令码                     
 503   1           i = (unsigned char)(g_cCommand & 0xFF);
 504   1           SBUF = i;
 505   1           chkdata ^= i;
 506   1           while (!TI);
 507   1      
 508   1           TI   = 0;                         //发送命令码 
 509   1           i = (unsigned char)((g_cCommand >>8) & 0xFF);
 510   1           SBUF = i;
 511   1           chkdata ^= i;
 512   1           while (!TI);
 513   1      
 514   1           TI   = 0;                         //发送状态字
 515   1           SBUF = 0;
 516   1           while (!TI);           
 517   1           
 518   1           TI   = 0;                         //发送效验字
 519   1           chkdata ^= g_cIcdevH^ g_cIcdevL;
 520   1           SBUF = chkdata;
 521   1           while (!TI);           
 522   1           if (chkdata == 0xAA)
 523   1           {
 524   2              TI   = 0;
 525   2              SBUF = 0;
 526   2              while (!TI);
 527   2           }

⌨️ 快捷键说明

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