亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? m500auc.c

?? RC500的mifare卡開發備用程序及電路
?? C
?? 第 1 頁 / 共 5 頁
字號:
            {
               snr_in[nbytes + i] = MRcvBuffer[i + byteOffset];
            }
  
            if (status != MI_COLLERR ) // no error and no collision
            {
               // SerCh check
               snr_crc = snr_in[0] ^ snr_in[1] ^ snr_in[2] ^ snr_in[3];
               snr_check = MRcvBuffer[MInfo.nBytesReceived - 1];
               if (snr_crc != snr_check)
               {
                  status = MI_SERNRERR;
               } 
               else   
               {
                  complete = 1;
               }
            }
            else                   // collision occured
            {
               bcnt = bcnt + MInfo.collPos - nbits;
               status = MI_OK;
            }
         }
      }
   }
   if (status == MI_OK)
   {
      // transfer snr_in to snr
      memcpy(snr,snr_in,4);
   }
   else
   {
      memcpy(snr,"0000",4);
   }

   //----------------------Einstellungen aus Initialisierung ruecksetzen 
   ClearBitMask(RegDecoderControl,0x20); // ZeroAfterColl disable
   
   return status;  
}

///////////////////////////////////////////////////////////////////////
//          MIFARE    SELECT 
// for std. select
///////////////////////////////////////////////////////////////////////
char M500PiccSelect(unsigned char *snr, 
                  unsigned char *sak)
{
   return M500PiccCascSelect(0x93,snr,sak); // first cascade level
}

///////////////////////////////////////////////////////////////////////
//          MIFARE    CASCADED   SELECT 
//  for extended serial number
///////////////////////////////////////////////////////////////////////
char M500PiccCascSelect(unsigned char select_code, 
                        unsigned char *snr,
                        unsigned char *sak)
{
   char idata status = MI_OK; 
 
   M500PcdSetTmo(106);
	
   WriteIO(RegChannelRedundancy,0x0F); // RxCRC,TxCRC, Parity enable
   ClearBitMask(RegControl,0x08);    // disable crypto 1 unit

   //************* Cmd Sequence ********************************** 
   ResetInfo(MInfo);   
   MSndBuffer[0] = select_code;
   MSndBuffer[1] = 0x70;         // number of bytes send
   
   memcpy(MSndBuffer + 2,snr,4);
   MSndBuffer[6] = MSndBuffer[2] 
                   ^ MSndBuffer[3] 
                   ^ MSndBuffer[4] 
                   ^ MSndBuffer[5];
   MInfo.nBytesToSend   = 7;
   status = M500PcdCmd(PCD_TRANSCEIVE,
                       MSndBuffer,
                       MRcvBuffer,
                       &MInfo);

   *sak = 0;   
   if (status == MI_OK)    // no timeout occured
   {
      if (MInfo.nBitsReceived != 8)    // last byte is not complete
      {
         status = MI_BITCOUNTERR;
      }
      else
      {
	 *sak = MRcvBuffer[0];
         memcpy(MLastSelectedSnr,snr,4);            
      }	
   }
  
   return status;
}

///////////////////////////////////////////////////////////////////////
//          MIFARE      AUTHENTICATION
//   calling compatible version    
///////////////////////////////////////////////////////////////////////
char M500PiccAuth(unsigned char keyAB,       // KEYA or KEYB
               unsigned char *snr,        // 4 bytes card serial number 
               unsigned char key_addr,    // key address in reader storage
               unsigned char block)       // block number which should be 
                                          // authenticated
{
   char          idata  status = MI_OK;
   unsigned char xdata * key = 0;
   unsigned char idata  keycoded[12];
   unsigned char idata  offset = (keyAB == PICC_AUTHENT1A) ? 0 : 6;   

   key = MKeys[key_addr] + offset;
   M500HostCodeKey(key,keycoded);
   status = M500PiccAuthKey(keyAB,
                            snr,
                            keycoded,
                            block);  
  return status;
}

///////////////////////////////////////////////////////////////////////
//                  AUTHENTICATION   
//             WITH   KEYS   FROM   E2PROM
///////////////////////////////////////////////////////////////////////
char M500PiccAuthE2( unsigned char auth_mode,   // KEYA, KEYB
                     unsigned char *snr,        // 4 bytes card serial number
                     unsigned char key_sector,  // key address in reader storage, 
						// 0 <= key_sector <= 15                     
                     unsigned char block)      // block number which should be 
                                               // authenticated
					       // 0 <= block <= 256
{
   char idata status = MI_OK;
   // eeprom address calculation
   // 0x80 ... offset
   // key_sector ... sector
   // 0x18 ... 2 * 12 = 24 = 0x18
   unsigned short e2addr = 0x80 + key_sector * 0x18;
   unsigned char *e2addrbuf = (unsigned char*)&e2addr;
   

   if (auth_mode == PICC_AUTHENT1B)
      e2addr += 12; // key B offset   
   FlushFIFO();    // empty FIFO
   ResetInfo(MInfo);

   memcpy(MSndBuffer,e2addrbuf,2); // write low and high byte of address
   MSndBuffer[2] = MSndBuffer[0];          // Move the LSB of the 2-bytes
   MSndBuffer[0] = MSndBuffer[1];  // address to the first byte
   MSndBuffer[1] = MSndBuffer[2];
   MInfo.nBytesToSend   = 2;
    // write load command
   if ((status=M500PcdCmd(PCD_LOADKEYE2,MSndBuffer,MRcvBuffer,&MInfo)) == MI_OK)
   {      
      // execute authentication
      status = M500PiccAuthState(auth_mode,snr,block);  
   }
   return status;
}                        

///////////////////////////////////////////////////////////////////////
//                      CODE   KEYS  
///////////////////////////////////////////////////////////////////////
char M500HostCodeKey(  unsigned char *uncoded, // 6 bytes key value uncoded
                     unsigned char *coded)   // 12 bytes key value coded
{
   char idata status = MI_OK;
   unsigned char idata cnt = 0;
   unsigned char idata ln  = 0;     // low nibble
   unsigned char idata hn  = 0;     // high nibble
   
   for (cnt = 0; cnt < 6; cnt++)
   {
      ln = uncoded[cnt] & 0x0F;
      hn = uncoded[cnt] >> 4;
      coded[cnt * 2 + 1] = (~ln << 4) | ln;
      coded[cnt * 2 ] = (~hn << 4) | hn;

   }
   return MI_OK;
}

///////////////////////////////////////////////////////////////////////
//                  AUTHENTICATION   
//             WITH   PROVIDED   KEYS
///////////////////////////////////////////////////////////////////////
char M500PiccAuthKey(  unsigned char auth_mode,
                     unsigned char *snr,       
                     unsigned char *keys,      
                     unsigned char block)      
{
   char idata status = MI_OK;
   unsigned char idata i = 0;
   
   FlushFIFO();    // empty FIFO
   ResetInfo(MInfo);
   memcpy(MSndBuffer,keys,12);                  // write 12 bytes of the key
   MInfo.nBytesToSend = 12;
   // write load command
   if ((status=M500PcdCmd(PCD_LOADKEY,MSndBuffer,MRcvBuffer,&MInfo)) == MI_OK)
   {      
      // execute authentication
      status = M500PiccAuthState(auth_mode,snr,block); 
   }
   return status;
}

///////////////////////////////////////////////////////////////////////
//        AUTHENTICATION   STATES
///////////////////////////////////////////////////////////////////////
char M500PiccAuthState( unsigned char auth_mode,
                        unsigned char *snr,
                        unsigned char block)
{
   char idata status = MI_OK;
   unsigned char idata i = 0;
   
   status = ReadIO(RegErrorFlag);   // read error flags of the previous
                                    // key load
   if (status != MI_OK)
   {
      if (status & 0x40)            // key error flag set
         status = MI_KEYERR;
      else
         status = MI_AUTHERR;       // generic authentication error 
   }
   else
   {
      MSndBuffer[0] = auth_mode;        // write authentication command

      MSndBuffer[1] = block;    // write block number for authentication
      memcpy(MSndBuffer + 2,snr,4); // write 4 bytes card serial number 
      ResetInfo(MInfo);
      MInfo.nBytesToSend = 6;
      if ((status = M500PcdCmd(PCD_AUTHENT1,
                               MSndBuffer,
                               MRcvBuffer,
                               &MInfo)) == MI_OK)
      {
         if (ReadIO(RegSecondaryStatus) & 0x07) // Check RxLastBits for error
         {
            status = MI_BITCOUNTERR;
         }
         else
         {
            ResetInfo(MInfo);
            MInfo.nBytesToSend = 0;
            if ((status = M500PcdCmd(PCD_AUTHENT2,
                                     MSndBuffer,
                                     MRcvBuffer,
                                     &MInfo)) == MI_OK) 
            {
               if ( ReadIO(RegControl) & 0x08 ) // Crypto1 activated
               {
                   status = MI_OK;
               }
               else
               {
                   status = MI_AUTHERR;
               }
            }
         }
      }
   }
   return status;
}

///////////////////////////////////////////////////////////////////////
//          MIFARE   READ   
///////////////////////////////////////////////////////////////////////
char M500PiccRead(  unsigned char addr,
                  unsigned char *_data)
{
   char idata status = MI_OK;
   char idata tmp    = 0;

   FlushFIFO();    // empty FIFO

   M500PcdSetTmo(3);     // long timeout 

   WriteIO(RegChannelRedundancy,0x0F); // RxCRC, TxCRC, Parity enable
   
   // ************* Cmd Sequence ********************************** 
   ResetInfo(MInfo);   
   MSndBuffer[0] = PICC_READ;   // read command code
   MSndBuffer[1] = addr;
   MInfo.nBytesToSend   = 2;   
   status = M500PcdCmd(PCD_TRANSCEIVE,
                       MSndBuffer,
                       MRcvBuffer,
                       &MInfo);

   if (status != MI_OK)
   {
      if (status != MI_NOTAGERR ) // no timeout occured
      {
         if (MInfo.nBitsReceived == 4)  // NACK
         {
             MRcvBuffer[0] &= 0x0f;  // mask out upper nibble
             if ((MRcvBuffer[0] & 0x0a) == 0)
             {
                status = MI_NOTAUTHERR;
             }
             else
             {
                status = MI_CODEERR;
             }
          }
      }
      memcpy(_data,"0000000000000000",16); // in case of an error initialise 
                                          // data
   }
   else   // Response Processing
   {
      if (MInfo.nBytesReceived != 16)
      {
         status = MI_BYTECOUNTERR;
         memcpy(_data,"0000000000000000",16);
      }
      else
      {
         memcpy(_data,MRcvBuffer,16);
      }
   }
   M500PcdSetTmo(1);               // short timeout   
   return status; 
}

///////////////////////////////////////////////////////////////////////
//          MIFARE   WRITE     
///////////////////////////////////////////////////////////////////////
char M500PiccWrite( unsigned char addr,
                  unsigned char *_data)
{
   char idata status = MI_OK;

     // ************* Cmd Sequence ********************************** 
     ResetInfo(MInfo);   
     MSndBuffer[0] = PICC_WRITE;        // Write command code
     MSndBuffer[1] = addr;
     MInfo.nBytesToSend   = 2;
     status = M500PcdCmd(PCD_TRANSCEIVE,
                         MSndBuffer,
                         MRcvBuffer,
                         &MInfo);

     if (status != MI_NOTAGERR)   // no timeout error
     {
        if (MInfo.nBitsReceived != 4)   // 4 bits are necessary
        {
           status = MI_BITCOUNTERR;
        }
        else                     // 4 bit received
        {
           MRcvBuffer[0] &= 0x0f; // mask out upper nibble
           if ((MRcvBuffer[0] & 0x0a) == 0)
           {
              status = MI_NOTAUTHERR;                   

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜久久久久久久久| 日本中文字幕一区二区有限公司| 成人av免费在线播放| 中文字幕欧美三区| 色欧美日韩亚洲| 婷婷成人激情在线网| 精品国产伦一区二区三区免费| 国产一区二区美女| 亚洲欧洲av色图| 欧美午夜电影网| 亚洲国产视频在线| 精品福利在线导航| 91色porny在线视频| 日韩av电影一区| 国产精品毛片a∨一区二区三区| 欧美在线免费观看亚洲| 国产一区亚洲一区| 亚洲第一福利视频在线| 久久久五月婷婷| 欧美性一二三区| 国产盗摄视频一区二区三区| 亚洲欧美在线高清| 日韩一级片网站| 94色蜜桃网一区二区三区| 久久不见久久见免费视频1| 亚洲欧洲av在线| 欧美大片拔萝卜| 在线欧美日韩精品| 国产福利一区二区| 日本一区中文字幕 | 国产一区二区三区av电影| 中文字幕欧美一| 久久综合九色欧美综合狠狠| 欧美色窝79yyyycom| 懂色中文一区二区在线播放| 日本欧美久久久久免费播放网| 亚洲乱码国产乱码精品精98午夜| 欧美精品一区二区久久婷婷 | 日韩欧美国产高清| 欧美无乱码久久久免费午夜一区 | 亚洲午夜视频在线观看| 国产精品不卡一区| 欧美激情一区三区| 亚洲精品在线电影| 亚洲精品一线二线三线| 日韩欧美国产一区二区三区| 6080yy午夜一二三区久久| 欧美在线观看你懂的| 欧美视频一区二区三区四区| 91美女片黄在线观看91美女| 波多野结衣在线aⅴ中文字幕不卡| 国产精品一区免费视频| 国产成人综合网| 成人激情黄色小说| www.亚洲在线| 色丁香久综合在线久综合在线观看| www.日韩精品| 欧美日韩亚洲不卡| 91精品国产一区二区人妖| 日韩一区二区三区四区 | 国产成人夜色高潮福利影视| 国产乱码精品一区二区三区av| 国产一区二区三区免费观看| 国产一区在线精品| eeuss影院一区二区三区 | 日本不卡视频一二三区| 久久99国产精品久久99果冻传媒| 国内欧美视频一区二区| 国产成人在线视频网址| 91亚洲精品一区二区乱码| 欧洲人成人精品| 日韩一区二区高清| 国产女主播视频一区二区| 亚洲精品大片www| 奇米四色…亚洲| 不卡的看片网站| 在线成人av影院| 国产日韩欧美在线一区| 亚洲精品欧美综合四区| 精品一区二区三区久久| 99久久免费国产| 日韩欧美在线网站| 亚洲精品亚洲人成人网在线播放| 蜜臀91精品一区二区三区| 成人avav影音| 欧美精品一区二区三区在线播放| 亚洲精品国产精华液| 国产做a爰片久久毛片| 欧美丝袜丝交足nylons| 国产日韩视频一区二区三区| 日韩av电影免费观看高清完整版| 99精品久久只有精品| 久久这里只有精品视频网| 午夜欧美2019年伦理| 97精品国产露脸对白| 久久精品一区二区三区不卡 | 国产一区二区调教| 欧美男生操女生| 亚洲靠逼com| 97se亚洲国产综合自在线不卡| 国产亚洲1区2区3区| 人妖欧美一区二区| 91.xcao| 五月天视频一区| 在线免费观看视频一区| 国产精品卡一卡二卡三| zzijzzij亚洲日本少妇熟睡| 日韩视频一区二区| 国产精品久久久久aaaa| 洋洋成人永久网站入口| 国产一区二区三区在线观看免费| 国产丶欧美丶日本不卡视频| 91麻豆产精品久久久久久| 99国产精品一区| 日本一区二区三区电影| 国产精品中文字幕日韩精品 | 国产精品久久久久精k8| 国产91精品在线观看| 国产精品嫩草影院com| 国产精品18久久久久久久久 | 国产成人夜色高潮福利影视| 久久精品一区四区| 成人黄色免费短视频| 欧美高清在线一区| 91麻豆成人久久精品二区三区| 亚洲在线一区二区三区| 6080日韩午夜伦伦午夜伦| 老司机精品视频线观看86| 国产亚洲一区二区三区在线观看| 成人av在线一区二区三区| 亚洲精品中文字幕在线观看| 91精品在线免费| 国产福利一区二区三区在线视频| 亚洲免费在线观看视频| 欧美三级午夜理伦三级中视频| 免费在线欧美视频| 国产午夜精品理论片a级大结局 | 久久er精品视频| 国产欧美日本一区二区三区| 欧美亚日韩国产aⅴ精品中极品| 美国av一区二区| 亚洲另类色综合网站| 欧美成人一区二区| av电影在线观看一区| 日韩精品三区四区| 中文字幕在线观看不卡| 9191精品国产综合久久久久久| 国产精品99久久久久久久vr| 亚洲精品中文在线| 欧美国产日韩a欧美在线观看| 欧美日韩国产一级二级| av电影在线观看一区| 精品一区二区在线观看| 一区二区三区加勒比av| 久久精品水蜜桃av综合天堂| 91超碰这里只有精品国产| 91视频在线观看| 成人a级免费电影| 久久成人18免费观看| 日韩有码一区二区三区| 一区二区三区在线观看动漫| 国产精品色哟哟网站| 精品福利一二区| 日韩一区二区在线看| 欧美妇女性影城| 色婷婷狠狠综合| 91网上在线视频| 一本大道久久精品懂色aⅴ | 日韩理论片网站| 亚洲欧洲韩国日本视频| 亚洲欧美日韩国产一区二区三区 | 欧美性猛片xxxx免费看久爱| 97精品电影院| 成人黄色免费短视频| 国产成人在线免费观看| 国产传媒欧美日韩成人| 国产成人免费视频网站| 高清国产一区二区| 成年人网站91| 91福利在线观看| 欧美区在线观看| 日韩精品专区在线| 欧美精品一区二| 国产亚洲欧美日韩俺去了| 国产精品乱码一区二三区小蝌蚪| 中文字幕五月欧美| 一区二区在线观看视频| 日韩国产欧美在线播放| 韩国毛片一区二区三区| 99久久久免费精品国产一区二区 | 欧美精品1区2区3区| 欧美哺乳videos| 亚洲欧洲日韩女同| 日本中文在线一区| 丁香婷婷综合色啪| 精品视频在线免费| 久久日一线二线三线suv| 一区二区三区在线观看欧美| 日韩精品一二三四| 成人网在线免费视频|