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

📄 mifare1.lst

📁 mifarea卡程序mifarea卡程序mifarea卡程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 631   4                      longtobuf86(epvalue, cmd+1);
 632   4                  }
 633   3                  // success
 634   3                  cmd[0] = SUCCESS;
 635   3                  return 5;
 636   3              }
 637   2          }
 638   1          
 639   1          // 使用philips的命令加减钱包
 640   1          else if(cmd[1] == CMD_PINCEP)
 641   1          {
 642   2              uchar m1bakblock, m1eptype;
 643   2              
 644   2              m1bakblock = m1data[0];
 645   2              m1eptype = m1data[1];
 646   2              m1data += 2;
 647   2              m1block = (m1sector << 2) + m1block;
 648   2              m1bakblock = (m1sector << 2) + m1bakblock;
 649   2              
 650   2              if(len != 10)
 651   2              {
 652   3                  cmd[0] = ERRORCMDLEN;
 653   3                  return 1;
 654   3              }
 655   2      
 656   2              // convert data
 657   2              if(m1eptype)        // msb first ep
 658   2              {
 659   3                  epvalue = buftolong86(m1data);
 660   3                  longtobuf51(epvalue, m1data);
 661   3              }
 662   2              
 663   2              epstatus = M500GetEpStatus(m1block, m1bakblock);
 664   2      
 665   2              // increment
 666   2              if(epstatus & 0x01)
 667   2              {
 668   3                  i = M500Increment(m1block, m1data, m1bakblock);
 669   3              }
 670   2              else if(epstatus & 0x02)
 671   2              {
 672   3                  i = M500Increment(m1bakblock, m1data, m1block);
 673   3              }
 674   2              else
C51 COMPILER V8.00   MIFARE1                                                               04/23/2009 15:56:16 PAGE 12  

 675   2              {
 676   3                  cmd[0] = FAIL;
 677   3                  cmd[1] = MI_VALERR;
 678   3                  return 2;
 679   3              }
 680   2              // either success or fail, i will send the ep value
 681   2              if(i != MI_OK)
 682   2              {
 683   3                  cmd[0] = FAIL;
 684   3                  //cmd[1] = i;
 685   3                  //CommSend(cmd, 2);
 686   3                  //break;
 687   3              }
 688   2              else
 689   2              {
 690   3                  cmd[0] = SUCCESS;
 691   3              }
 692   2      
 693   2              i = M500ReadValue(m1block, cmd+1, m1bakblock);
 694   2              if(i != MI_OK)
 695   2              {
 696   3                  cmd[0] = FAIL;
 697   3                  cmd[1] = i;
 698   3                  return 2;
 699   3              }
 700   2              else
 701   2              {
 702   3                  // success
 703   3                  if(m1eptype)        // msb first ep
 704   3                  {
 705   4                      epvalue = buftolong51(cmd+1);
 706   4                      longtobuf86(epvalue, cmd+1);
 707   4                  }
 708   3                  
 709   3                  return 5;
 710   3              }
 711   2          }
 712   1          else if(cmd[1] == CMD_PDECEP)
 713   1          {
 714   2              uchar m1bakblock, m1eptype;
 715   2              
 716   2              m1bakblock = m1data[0];
 717   2              m1eptype = m1data[1];
 718   2              m1data += 2;
 719   2              m1block = (m1sector << 2) + m1block;
 720   2              m1bakblock = (m1sector << 2) + m1bakblock;
 721   2              
 722   2              if(len != 10)
 723   2              {
 724   3                  cmd[0] = ERRORCMDLEN;
 725   3                  return 1;
 726   3              }
 727   2      
 728   2              // convert data
 729   2              if(m1eptype)        // msb first ep
 730   2              {
 731   3                  epvalue = buftolong86(m1data);
 732   3                  longtobuf51(epvalue, m1data);
 733   3              }
 734   2              
 735   2              epstatus = M500GetEpStatus(m1block, m1bakblock);
 736   2      
C51 COMPILER V8.00   MIFARE1                                                               04/23/2009 15:56:16 PAGE 13  

 737   2              // increment
 738   2              if(epstatus & 0x01)
 739   2              {
 740   3                  i = M500Decrement(m1block, m1data, m1bakblock);
 741   3              }
 742   2              else if(epstatus & 0x02)
 743   2              {
 744   3                  i = M500Decrement(m1bakblock, m1data, m1block); //070207, switch bakblock and block
 745   3              }
 746   2              else
 747   2              {
 748   3                  cmd[0] = FAIL;
 749   3                  cmd[1] = MI_VALERR;
 750   3                  return 2;
 751   3              }
 752   2              // either success or fail, i will send the ep value
 753   2              if(i != MI_OK)
 754   2              {
 755   3                  cmd[0] = FAIL;
 756   3                  //cmd[1] = i;
 757   3                  //CommSend(cmd, 2);
 758   3                  //break;
 759   3              }
 760   2              else
 761   2              {
 762   3                  cmd[0] = SUCCESS;
 763   3              }
 764   2      
 765   2              i = M500ReadValue(m1block, cmd+1, m1bakblock);
 766   2              if(i != MI_OK)
 767   2              {
 768   3                  cmd[0] = FAIL;
 769   3                  cmd[1] = i;
 770   3                  return 2;
 771   3              }
 772   2              else
 773   2              {
 774   3                  // success
 775   3                  if(m1eptype)        // msb first ep
 776   3                  {
 777   4                      epvalue = buftolong51(cmd+1);
 778   4                      longtobuf86(epvalue, cmd+1);
 779   4                  }
 780   3                  
 781   3                  // cmd[0] = SUCCESS; // see the dec operation
 782   3                  return 5;
 783   3              }
 784   2          }
 785   1          else if(cmd[1] == CMD_BLOCKCOPY)
 786   1          {
 787   2              uchar m1bakblock;
 788   2              
 789   2              m1bakblock = m1data[0];
 790   2              m1block = (m1sector << 2) + m1block;
 791   2              m1bakblock = (m1sector << 2) + m1bakblock;
 792   2              
 793   2              if(len != 5)
 794   2              {
 795   3                  cmd[0] = ERRORCMDLEN;
 796   3                  return 1;
 797   3              }
 798   2              
C51 COMPILER V8.00   MIFARE1                                                               04/23/2009 15:56:16 PAGE 14  

 799   2              i = M500Copy(m1block, m1bakblock);
 800   2              if(i != MI_OK)
 801   2              {
 802   3                  cmd[0] = FAIL;
 803   3                  cmd[1] = i;
 804   3                  return 2;
 805   3              }
 806   2              else
 807   2              {
 808   3                  cmd[0] = SUCCESS;
 809   3                  return 1;
 810   3              }
 811   2          }
 812   1          
 813   1          else
 814   1          {
 815   2              // error package
 816   2              cmd[0] = ERRORCMD;
 817   2              return 1;
 818   2          }
 819   1      
 820   1      }
 821          
 822          bit M1Search(unsigned char *snr)
 823          {
 824   1          char atq[2];
 825   1          static bit fret = 0;
 826   1          unsigned char i;
 827   1          static unsigned int starttime = 0;
 828   1          static unsigned int hascardtime = 0;
 829   1          
 830   1          if(GetTenTickCount() - starttime <= 50)
 831   1              return fret;
 832   1              
 833   1          starttime = GetTenTickCount();
 834   1          
 835   1          for(i=0; i<4; i++)
 836   1          {
 837   2              if(M500Request(PICC_REQALL /*PICC_REQSTD*/, atq) == MI_OK)
 838   2              {
 839   3                  if(MI_OK == M500Anticoll(snr))
 840   3                  {
 841   4                      if(MI_OK == M500Select(snr))
 842   4                      {
 843   5                          if(fret == 0)
 844   5                          {
 845   6                              if(starttime - hascardtime >= CardConfirmTime)
 846   6                                  fret = 1;
 847   6                          }
 848   5                          return fret;
 849   5                      }
 850   4                  }
 851   3              }
 852   2      
 853   2              #ifdef WATCHDOG
                      //ResetWDT();
                      #endif
 856   2          }
 857   1          
 858   1          hascardtime = starttime;
 859   1          return (fret = 0);
 860   1      }
C51 COMPILER V8.00   MIFARE1                                                               04/23/2009 15:56:16 PAGE 15  

 861          
 862          long buftolong86(char *buf)
 863          {
 864   1          char invbuf[4];
 865   1          
 866   1          invbuf[0] = buf[3];
 867   1          invbuf[1] = buf[2];
 868   1          invbuf[2] = buf[1];
 869   1          invbuf[3] = buf[0];
 870   1          
 871   1          return  *(long *)invbuf;
 872   1      }
 873          
 874          void longtobuf86(long val, char *buf)
 875          {
 876   1          char *invbuf;
 877   1          
 878   1          invbuf = (char *)&val;
 879   1          
 880   1          buf[0] = invbuf[3];
 881   1          buf[1] = invbuf[2];
 882   1          buf[2] = invbuf[1];
 883   1          buf[3] = invbuf[0];
 884   1      }
 885          
 886          long buftolong51(char *buf)
 887          {
 888   1          return *(long *)buf;
 889   1      }
 890          
 891          void longtobuf51(long val, char *buf)
 892          {
 893   1          memcpy(buf, (char *)&val, 4);
 894   1      }
 895          
 896          unsigned char M1Auth(unsigned char keyab, unsigned char *key, unsigned char sec)
 897          {
 898   1          unsigned char i;
 899   1          
 900   1          if(keyab)
 901   1              keyab = PICC_AUTHENT1B;
 902   1          else
 903   1              keyab = PICC_AUTHENT1A;
 904   1              
 905   1          i = M500Auth(keyab, snr, key, sec);
 906   1          if(MI_OK != i)
 907   1          {
 908   2              return i;
 909   2          }
 910   1          else
 911   1          {
 912   2              // search current key in key buffer
 913   2              for(i=0; i<m1keycnt; i++)
 914   2              {
 915   3                  if(sec == (m1keystatus[i] & 0x7f))
 916   3                      break;
 917   3              }
 918   2              
 919   2              if(i >= m1keycntmax)        // not found and buffer full
 920   2                  i = 0;
 921   2              else if(i >= m1keycnt)      // not found and buffer not full
 922   2                  m1keycnt += 1;
C51 COMPILER V8.00   MIFARE1                                                               04/23/2009 15:56:16 PAGE 16  

 923   2              // else                     // found
 924   2                  
 925   2              ///////////////////////////////////////////////////////
 926   2              memcpy(m1keys[i], key, 6);       // store key
 927   2              if(PICC_AUTHENT1A == keyab)
 928   2                  m1keystatus[i] = sec & 0x7f;    // key a
 929   2              else
 930   2                  m1keystatus[i] = sec | 0x80;    // key b
 931   2              
 932   2              return MI_OK;
 933   2          }
 934   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   4895    ----
   CONSTANT SIZE    =      1    ----
   XDATA SIZE       =    128      61
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      3       2
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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