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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? m500auc.c

?? 一個射頻卡開發(fā)板 iso4443規(guī)范 學(xué)習(xí)智能卡的好資料
?? 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);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩色视频在线观看| hitomi一区二区三区精品| 欧美久久久久久久久中文字幕| 亚洲视频一二区| 一本大道av一区二区在线播放 | 精品一区二区三区久久久| 久久一区二区三区国产精品| 福利一区二区在线观看| ●精品国产综合乱码久久久久| 91在线porny国产在线看| 亚洲高清免费一级二级三级| 欧美精品乱人伦久久久久久| 国产综合久久久久久久久久久久| 国产精品天美传媒沈樵| 欧美色涩在线第一页| 精品亚洲aⅴ乱码一区二区三区| 久久精品一区二区三区不卡| 一本到三区不卡视频| 日韩高清欧美激情| 国产欧美日韩视频在线观看| 一本大道av伊人久久综合| 免费亚洲电影在线| 国产精品久久三区| 777久久久精品| 懂色一区二区三区免费观看| 亚洲精品美国一| 精品国精品国产| 色呦呦国产精品| 韩国精品在线观看| 亚洲va韩国va欧美va| 国产午夜亚洲精品不卡| 欧美综合久久久| 国产电影一区二区三区| 亚洲国产日韩a在线播放| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 国产精品欧美久久久久无广告 | 美腿丝袜亚洲色图| 中文字幕在线一区| 精品美女一区二区三区| 色爱区综合激月婷婷| 国产一区二区三区高清播放| 亚洲综合一二三区| 国产精品久久久一区麻豆最新章节| 91精品国产综合久久久久久| 91麻豆6部合集magnet| 国产麻豆一精品一av一免费| 日韩在线一区二区三区| 一区二区久久久久久| 中文字幕精品一区二区三区精品| 91精品国产高清一区二区三区蜜臀| www.在线成人| 国产精品888| 美日韩一区二区三区| 一区二区三区四区不卡在线 | 日本伊人精品一区二区三区观看方式| 国产精品久久毛片| 国产欧美日韩综合精品一区二区| 91精品国产高清一区二区三区 | 国产精品夫妻自拍| 欧美激情一区在线| 久久久影视传媒| 精品国免费一区二区三区| 日韩欧美在线综合网| 精品久久久久久久久久久久久久久| 色视频一区二区| www.日韩在线| 高清av一区二区| 成人综合婷婷国产精品久久蜜臀 | 亚洲国产成人高清精品| 亚洲精品伦理在线| 亚洲日本中文字幕区| 国产精品久久久久久一区二区三区| 久久久久久久久久久久久久久99| 欧美不卡一区二区三区| 精品欧美一区二区久久| 欧美第一区第二区| 精品国产一区二区国模嫣然| 欧美成人三级电影在线| 日韩美女天天操| 精品国产在天天线2019| 欧美精品一区二区三区视频| 国产三级一区二区| 国产精品久久久久三级| 亚洲精品国产一区二区精华液| 亚洲视频1区2区| 一区二区三区在线不卡| 亚洲夂夂婷婷色拍ww47| 午夜在线成人av| 精品一区二区在线看| 国产尤物一区二区| 成人成人成人在线视频| 日本韩国精品在线| 欧美日韩亚洲综合在线 | 亚洲一区二区三区在线播放| 亚洲va欧美va天堂v国产综合| 免费视频一区二区| 国产成人一级电影| 色一情一乱一乱一91av| 在线不卡免费欧美| 久久众筹精品私拍模特| 国产精品成人一区二区艾草| 亚洲韩国精品一区| 国产一区福利在线| 91美女福利视频| 日韩一区二区电影| 欧美激情一区二区三区四区| 一区二区三区精品在线| 美女免费视频一区二区| gogo大胆日本视频一区| 精品久久国产97色综合| 国产精品丝袜黑色高跟| 一区二区三区四区蜜桃| 久久se精品一区二区| 99re这里只有精品首页| 在线播放欧美女士性生活| 久久久九九九九| 樱桃视频在线观看一区| 国产在线视频一区二区三区| 91久久精品一区二区二区| 精品国产免费视频| 亚洲国产精品久久一线不卡| 国产精品自在在线| 91精品视频网| 亚洲乱码中文字幕综合| 狠狠色综合播放一区二区| 91黄视频在线| 国产午夜一区二区三区| 青青草精品视频| 色综合中文字幕国产| 精品免费日韩av| 亚洲已满18点击进入久久| 成人在线视频一区| 精品少妇一区二区三区| 亚洲.国产.中文慕字在线| 成人午夜激情片| 26uuu欧美日本| 日本三级亚洲精品| 精品视频免费看| 亚洲视频免费在线观看| 国产a级毛片一区| 日韩欧美高清dvd碟片| 亚洲香蕉伊在人在线观| 北条麻妃一区二区三区| 国产视频一区二区三区在线观看| 手机精品视频在线观看| 欧美午夜片在线看| 成人欧美一区二区三区视频网页 | 欧美福利视频导航| 夜夜嗨av一区二区三区四季av| 成人av影院在线| 国产日产精品1区| 精品亚洲国内自在自线福利| 91精品国产aⅴ一区二区| 亚洲一级片在线观看| 色偷偷88欧美精品久久久| 欧美国产日韩精品免费观看| 国产老妇另类xxxxx| 精品国产乱码久久久久久夜甘婷婷 | 韩国女主播一区二区三区| 日本不卡一区二区三区| 国产精品综合一区二区| 中文字幕二三区不卡| 久久久精品国产免大香伊| 午夜在线电影亚洲一区| 欧美性生活一区| 亚洲一区二区三区四区在线观看 | av欧美精品.com| 国产精品青草综合久久久久99| 国产成人一级电影| 中文久久乱码一区二区| 91在线视频免费91| 亚洲欧美韩国综合色| 色综合久久综合| 亚洲成人先锋电影| 日韩精品一区在线| 激情五月婷婷综合| 中文字幕av一区 二区| 99视频一区二区| 亚洲女爱视频在线| 欧美精选在线播放| 国产一区二区三区精品欧美日韩一区二区三区 | 国产自产2019最新不卡| 国产日产精品一区| 色天使久久综合网天天| 亚洲成a人v欧美综合天堂| 9191精品国产综合久久久久久| 麻豆精品一区二区| 国产精品无遮挡| 欧美三级三级三级爽爽爽| 久久se精品一区二区| 中文字幕高清不卡| 在线观看精品一区| 美女视频第一区二区三区免费观看网站| xf在线a精品一区二区视频网站| 成人午夜在线免费| 午夜不卡av免费| 国产欧美一区二区精品婷婷| 91国偷自产一区二区三区观看| 视频在线观看一区| 国产精品亲子伦对白|