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

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

?? m500auc.c

?? MRF500源碼,讀寫射頻卡!快點下!!絕對精彩
?? 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一区二区三区免费野_久草精品视频
bt7086福利一区国产| 国内精品伊人久久久久av影院| 成年人国产精品| 国产精品久久久99| 欧美在线999| 亚洲成人先锋电影| 日韩精品综合一本久道在线视频| 久久99国产精品免费| 国产欧美精品区一区二区三区| jlzzjlzz亚洲日本少妇| 亚洲大片在线观看| 欧美tickling挠脚心丨vk| 国产盗摄一区二区| 国产一区啦啦啦在线观看| 精品国一区二区三区| 成人小视频在线观看| 亚洲国产一区在线观看| 欧美一级免费大片| 丁香婷婷深情五月亚洲| 亚洲日本成人在线观看| 欧美精品123区| 国产精品99久久久久久久vr| 亚洲色图19p| 欧美成人精品1314www| 国产91精品在线观看| 亚洲午夜久久久| 国产亚洲精品7777| 欧美在线观看一二区| 精品一区二区影视| 亚洲精品免费电影| 精品不卡在线视频| 欧美日韩中字一区| 大白屁股一区二区视频| 日本亚洲视频在线| 亚洲视频一二区| 日韩精品一区二区三区视频播放| 成人av在线资源| 久久精品国产秦先生| 亚洲免费观看高清| 久久精品一二三| 欧美日韩国产影片| www.亚洲人| 国产一区二区三区av电影| 亚洲综合激情小说| 日本一区二区三区久久久久久久久不 | 亚洲国产美女搞黄色| wwwwww.欧美系列| 欧美日韩在线电影| av亚洲精华国产精华| 国内精品在线播放| 日本欧美加勒比视频| 一片黄亚洲嫩模| 国产精品―色哟哟| 精品国产三级a在线观看| 欧美日韩精品一区二区| 91免费观看视频在线| 高清不卡一二三区| 国内成人免费视频| 久久er99精品| 蜜臂av日日欢夜夜爽一区| 午夜精品久久久久影视| 亚洲精品午夜久久久| 1000精品久久久久久久久| 国产无遮挡一区二区三区毛片日本| 3d成人动漫网站| 在线播放中文字幕一区| 91高清视频在线| 91激情五月电影| 91麻豆福利精品推荐| 不卡在线观看av| 国产91精品精华液一区二区三区 | 免费成人av在线播放| 午夜影院久久久| 日韩影院精彩在线| 香蕉av福利精品导航| 夜夜精品视频一区二区| 亚洲综合视频在线| 亚洲国产视频在线| 午夜私人影院久久久久| 午夜视频在线观看一区二区三区 | 日韩视频一区二区三区在线播放| 欧美高清性hdvideosex| 91精品一区二区三区在线观看| 69堂精品视频| 欧美sm美女调教| 久久日韩粉嫩一区二区三区| 久久久国产精品不卡| 中文字幕欧美三区| 综合久久综合久久| 亚洲国产美女搞黄色| 青椒成人免费视频| 国产老女人精品毛片久久| 国产精品白丝jk黑袜喷水| 成人午夜电影久久影院| 91丝袜美女网| 欧美日韩高清在线| 精品免费99久久| 国产视频一区不卡| 亚洲裸体在线观看| 日韩专区中文字幕一区二区| 韩国女主播一区二区三区| 东方aⅴ免费观看久久av| 99免费精品在线| 欧美在线播放高清精品| 精品人在线二区三区| 日本一区二区动态图| 亚洲天堂福利av| 日本午夜一本久久久综合| 狠狠v欧美v日韩v亚洲ⅴ| av在线不卡免费看| 91麻豆精品久久久久蜜臀| 亚洲国产精品国自产拍av| 一二三四社区欧美黄| 国产综合色在线| 在线观看免费成人| 26uuu成人网一区二区三区| 中文字幕一区不卡| 免费在线成人网| 99精品久久只有精品| 欧美一区二区国产| 国产精品福利电影一区二区三区四区| 亚洲成人免费在线| 成人小视频在线| 日韩一卡二卡三卡四卡| √…a在线天堂一区| 六月婷婷色综合| 日本电影亚洲天堂一区| 久久香蕉国产线看观看99| 亚洲第一福利一区| 91亚洲精品久久久蜜桃网站 | 日本怡春院一区二区| 9i看片成人免费高清| 欧美刺激午夜性久久久久久久| 一区二区三区蜜桃| 国产a久久麻豆| 日韩精品一区二区三区四区视频| 亚洲午夜久久久| 成人天堂资源www在线| 日韩精品一区二区三区老鸭窝| 一区二区三区四区高清精品免费观看| 极品瑜伽女神91| 制服丝袜亚洲色图| 亚洲一区av在线| 成人久久视频在线观看| www国产精品av| 久久精品久久99精品久久| 欧美日韩一区二区三区不卡| 中文字幕在线不卡| 成人午夜电影小说| 日本一区二区三区免费乱视频| 久久成人麻豆午夜电影| 4438成人网| 天天影视网天天综合色在线播放| 色菇凉天天综合网| 亚洲男人的天堂一区二区| 成人一区在线看| 国产欧美综合在线| 国产成人综合视频| 久久久久久久久久久黄色| 国产在线看一区| 久久精品人人做人人爽人人| 国模套图日韩精品一区二区| 欧美v日韩v国产v| 免费看日韩a级影片| 7777女厕盗摄久久久| 视频一区在线播放| 在线不卡中文字幕| 日本不卡视频在线| 日韩三级视频在线观看| 日韩不卡在线观看日韩不卡视频| 欧美丰满一区二区免费视频| 亚洲成人在线网站| 制服丝袜中文字幕亚洲| 久久精品免费观看| 精品国产制服丝袜高跟| 国产乱子伦视频一区二区三区| 久久久美女毛片| 99久久精品免费观看| 亚洲美女少妇撒尿| 51精品视频一区二区三区| 久久精品av麻豆的观看方式| 一区在线中文字幕| 色综合天天综合网天天看片| 亚洲精品视频在线观看网站| 欧美体内she精视频| 天堂一区二区在线| 久久久一区二区| 99久久精品国产一区| 性欧美疯狂xxxxbbbb| 精品1区2区在线观看| 成人成人成人在线视频| 亚洲综合小说图片| 欧美大片顶级少妇| 成人丝袜18视频在线观看| 一区二区三区精品视频| 日韩欧美一区电影| 成人午夜私人影院| 日韩和欧美一区二区| 欧美国产精品v| 欧美三级乱人伦电影|