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

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

?? m500auc.c

?? 包括讀卡器源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
         {
            byteOffset = 0;
            if( nbits != 0 ) // last byte was not complete
            {
                snr_in[nbytes - 1] = snr_in[nbytes - 1] | MRcvBuffer[0];
                byteOffset = 1;
            }

            for ( i =0; i < (4 - nbytes); i++)     
            {
               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;  
}

///////////////////////////////////////////////////////////////////////
//          M I F A R E    S E L E C T 
// for std. select
///////////////////////////////////////////////////////////////////////
char M500PiccSelect(unsigned char *snr, 
                  unsigned char *sak)
{
   return M500PiccCascSelect(0x93,snr,sak); // first cascade level
}

///////////////////////////////////////////////////////////////////////
//          M I F A R E    C A S C A D E D   S E L E C T 
//  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;
}

///////////////////////////////////////////////////////////////////////
//          M I F A R E      A U T H E N T I C A T I O N
//   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;
}

///////////////////////////////////////////////////////////////////////
//                  A U T H E N T I C A T I O N   
//             W I T H   K E Y S   F R O M   E 2 P R O M
///////////////////////////////////////////////////////////////////////
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;
}                        

///////////////////////////////////////////////////////////////////////
//                      C O D E   K E Y S  
///////////////////////////////////////////////////////////////////////
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;
}

///////////////////////////////////////////////////////////////////////
//                  A U T H E N T I C A T I O N   
//             W I T H   P R O V I D E D   K E Y S
///////////////////////////////////////////////////////////////////////
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;
}

///////////////////////////////////////////////////////////////////////
//        A U T H E N T I C A T I O N   S T A T E S
///////////////////////////////////////////////////////////////////////
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;
}

///////////////////////////////////////////////////////////////////////
//          M I F A R E   R E A D   
///////////////////////////////////////////////////////////////////////
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; 
}

///////////////////////////////////////////////////////////////////////
//          M I F A R E   W R I T E     
///////////////////////////////////////////////////////////////////////
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);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕第一区二区| 精品久久久久久综合日本欧美 | 欧美大白屁股肥臀xxxxxx| 久久蜜桃一区二区| 一区二区三区在线观看国产| 久久国产精品免费| 在线国产电影不卡| 国产欧美一区二区三区在线看蜜臀| 一区二区三区91| 成人av在线网站| 日韩免费一区二区三区在线播放| 亚洲综合无码一区二区| 国产精品一区二区在线观看网站| 欧美日韩国产高清一区二区| 国产精品网友自拍| 国内成人免费视频| 在线电影院国产精品| 亚洲黄色免费网站| av电影天堂一区二区在线观看| 亚洲福利一二三区| 国产日本欧美一区二区| 日本精品视频一区二区三区| 国产精品不卡一区二区三区| 老司机精品视频导航| 国产精品一区二区三区乱码| 一本久久综合亚洲鲁鲁五月天 | 午夜久久电影网| 精品成人私密视频| 99在线精品观看| 五月天激情小说综合| 欧美大黄免费观看| av电影天堂一区二区在线观看| 香蕉久久一区二区不卡无毒影院| 日韩精品一区二| 99久久精品一区| 日韩成人精品在线| 日本一区二区久久| 在线电影一区二区三区| 成人av在线播放网站| 日韩精品电影一区亚洲| 欧美精彩视频一区二区三区| 欧美精品三级在线观看| 风间由美中文字幕在线看视频国产欧美 | 婷婷综合另类小说色区| 国产日韩影视精品| 欧美久久久一区| 成人av手机在线观看| 日韩国产在线观看一区| 亚洲视频免费观看| 久久先锋影音av鲁色资源网| 欧美日韩精品一区二区三区蜜桃| 成人性生交大片免费看在线播放| 首页欧美精品中文字幕| 中文字幕一区二| 日韩手机在线导航| 欧美午夜免费电影| 成人av网在线| 风间由美一区二区三区在线观看| 日韩国产在线观看一区| 亚洲免费观看高清完整版在线观看 | 欧美videossexotv100| 日本精品视频一区二区三区| 福利电影一区二区三区| 欧美三级电影在线看| 久久人人爽爽爽人久久久| 欧美美女网站色| 91福利视频久久久久| 99久久亚洲一区二区三区青草| 三级在线观看一区二区| 久久精品一区四区| 精品久久久久久久久久久院品网| 欧美久久免费观看| 欧美年轻男男videosbes| 色噜噜狠狠成人中文综合| 99久久婷婷国产综合精品| 国产一区欧美二区| 久久99精品久久久久久国产越南 | 日韩一区二区视频| 91精品一区二区三区久久久久久| 欧美三区免费完整视频在线观看| 色综合欧美在线| 色诱亚洲精品久久久久久| 91在线一区二区三区| av福利精品导航| 99在线精品观看| 色94色欧美sute亚洲线路一ni| 99久久伊人精品| 日本精品一级二级| 欧美精品一二三四| 91精品国产综合久久精品图片 | 国产美女在线精品| 国产精品一区二区你懂的| 国产精品一区二区久激情瑜伽| 国产精品影音先锋| 粉嫩在线一区二区三区视频| 99热这里都是精品| 色综合久久综合网97色综合| 在线视频你懂得一区| 欧美肥妇free| 久久综合色鬼综合色| 国产欧美一区二区三区在线老狼| 中文字幕制服丝袜成人av| 亚洲免费伊人电影| 午夜久久久久久电影| 国产一区二区三区四区五区入口| 国产不卡视频一区二区三区| 91在线视频免费91| 91精品一区二区三区久久久久久| 26uuu国产日韩综合| 国产精品久久久久久久久免费樱桃 | 国产真实乱偷精品视频免| 成人一道本在线| 欧美日本国产视频| 国产午夜精品久久久久久免费视 | 欧美日韩一卡二卡| 精品国产精品网麻豆系列| 国产精品妹子av| 丝袜a∨在线一区二区三区不卡| 国产伦精品一区二区三区免费| 91网站黄www| 欧美成人vps| 亚洲另类春色国产| 国模少妇一区二区三区| 色美美综合视频| 精品国产麻豆免费人成网站| 国产精品国产精品国产专区不片| 天天操天天色综合| 丁香婷婷深情五月亚洲| 欧美日韩一级二级三级| 国产日产欧美精品一区二区三区| 亚洲一区二区美女| 成人av网站免费| 夜夜嗨av一区二区三区中文字幕 | 国产精品无圣光一区二区| 一区二区日韩av| 国产成人亚洲综合a∨婷婷 | 乱一区二区av| 91黄色在线观看| 欧美国产97人人爽人人喊| 日韩激情在线观看| 色激情天天射综合网| 国产午夜精品一区二区三区四区| 舔着乳尖日韩一区| 一本色道久久综合亚洲aⅴ蜜桃| 欧美电影免费观看高清完整版在| 一区二区三区丝袜| www.日本不卡| 久久久久久久久蜜桃| 日本成人在线电影网| 欧美性色黄大片| 亚洲天堂网中文字| 成人av电影在线| 国产欧美一区二区精品性| 人人精品人人爱| 欧美日韩国产一级二级| 一区二区三区波多野结衣在线观看 | 日本sm残虐另类| 欧美日韩亚洲丝袜制服| 依依成人综合视频| 91蜜桃免费观看视频| 日本一区二区三区高清不卡| 国产一区二区三区日韩| 精品美女一区二区三区| 美女视频一区在线观看| 91超碰这里只有精品国产| 亚洲风情在线资源站| 日本韩国欧美一区| 一二三四区精品视频| 欧美视频完全免费看| 一区二区三区日韩| 欧美做爰猛烈大尺度电影无法无天| 亚洲欧洲精品一区二区三区| 成人免费毛片嘿嘿连载视频| 中文字幕av在线一区二区三区| 国产99久久久久久免费看农村| 久久亚洲捆绑美女| 成人激情黄色小说| 1000精品久久久久久久久| 97se亚洲国产综合自在线| 亚洲精选在线视频| 欧美三级欧美一级| 日韩va亚洲va欧美va久久| 日韩欧美一区二区久久婷婷| 狠狠色综合播放一区二区| 久久久综合激的五月天| 成人深夜福利app| 亚洲欧美日韩系列| 欧美日韩视频不卡| 青娱乐精品在线视频| 精品久久国产97色综合| 国产成人av一区二区三区在线 | 久久精品国产久精国产爱| 精品久久久久久无| 成人爽a毛片一区二区免费| 中文字幕日韩精品一区| 91久久精品日日躁夜夜躁欧美| 五月天一区二区三区| 精品欧美黑人一区二区三区| 成人一级视频在线观看| 玉足女爽爽91|