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

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

?? check_midi_password.c

?? OSD顯示,單片機實現,ICCAVR! 代碼風格嚴謹,為高人所寫.我僅為了上傳換取資料
?? C
字號:
#ifdef MIDI_CHECK_PASSWORD_PASS_MCU 
int CheckMIDIPassWordPassMCU(char *PassWord);
int WriteEncryptData2MCU(void);
void WriteOneByte2MCU(BYTE data);
int ReadEncryptDataFromMCU(void);
int ReadOneByteFromMCU(void);
extern BYTE  get_random_number(int range);
BYTE  SendDataBuf[11];
BYTE  ReceiveDataBuf[11];

#define  CHECK_MIDI_PASSWORD_DEBUG  

/*
return 0: check sucessful
return 1: check password fail
return 2: Communication with MCU fail
*/
int CheckMIDIPassWordPassMCU(char *PassWord)
{
    #ifdef CHECK_MIDI_PASSWORD_DEBUG
         printf("\n*************CheckMIDIPassWordPassMCU()*************\n");
    #endif
    int Counter=0;
    BYTE Res=0;
    watchdog_onoff(0); 
    do
    {           
        //get encrypt data package      
        if(Counter==4)
        {
            SetEncryptDataPackage(PassWord,1);
        }
        else
        {
            SetEncryptDataPackage(PassWord,0);
        }            
        //send encrypt data to MCU   
        Res=WriteEncryptData2MCU();             
        if(Res==1)  
           { 
             return 2;//write fail
             #ifdef CHECK_MIDI_PASSWORD_DEBUG
                     printf("\n====write encrypt data fail!==========\n");
             #endif
           }           
           
        //receive encrypt data from MCU
        Res=ReadEncryptDataFromMCU();     
        if(Res==1)  
           {
              return 2;//write fail
              #ifdef CHECK_MIDI_PASSWORD_DEBUG
                     printf("\n====read encrypt data fail!===========\n");
              #endif
           }
          
        //dis-encrypt
        if(Counter==4)
        {                
            if(ReceiveDataBuf[0]!=0x68)  
            {
                #ifdef CHECK_MIDI_PASSWORD_DEBUG
                    printf("\n===========START CODE not correct!==============\n");
                #endif 
                return 1;//check password fail
            }
            if(CheckPassWordFromEncryptData(PassWord)) 
              {                  
                   #ifdef CHECK_MIDI_PASSWORD_DEBUG
                     printf("\n====check password fail!==============\n");
                   #endif
                   return 1;//check password fail
              }           
        }        
        Counter++;
        //delay 1000us
        delay_1us(1000);
       
    }
    while(Counter<10); 
    watchdog_onoff(1); 
    #ifdef CHECK_MIDI_PASSWORD_DEBUG
    if(Res==0)   printf("\n====check password sucessful!==========\n");
    #endif       
    return Res; //return 0: sucessful 
}



/*
    Send Encrypt data package:
    BYTE0:  START CODE :0xff
    BYTE1:  RANDOM_NUMBER_7
    BYTE2:  XOR_RANDOM_NUMBER_1
    BYTE3:  RANDOM_NUMBER_8
    BYTE4:  XOR_RANDOM_NUMBER_2
    BYTE5:  RANDOM_NUMBER_9    
    BYTE6:  XOR_RANDOM_NUMBER_3
    BYTE7:  RANDOM_NUMBER_1
    BYTE8:  RANDOM_NUMBER_2
    BYTE9:  RANDOM_NUMBER_3
    BYTE10: CHECK_SUM    
*/
void SetEncryptDataPackage(char *String,BYTE flag)
{
    #ifdef CHECK_MIDI_PASSWORD_DEBUG
         printf("\n**************SetEncryptDataPackage()*************\n");
    #endif
    int  i;
    unsigned char CheckSum=0;    
    BYTE Random_1=0,Random_2=0,Random_3=0;
    BYTE Random_7=0,Random_8=0,Random_9=0;
    BYTE PassWord_1=0,PassWord_2=0,PassWord_3=0;
    //random number
    Random_1=get_random_number(255); 
    Random_2=get_random_number(255); 
    Random_3=get_random_number(255); 
    Random_7=get_random_number(255); 
    Random_8=get_random_number(255); 
    Random_9=get_random_number(255); 
    #ifdef CHECK_MIDI_PASSWORD_DEBUG
         printf("\n**%x %x %x  %x  %x  %x **\n",Random_1,Random_2,Random_3,Random_7,Random_8,Random_9);         
    #endif    
    //SendDataBuf[0]
    if(flag==1)
    {
        SendDataBuf[0]=0xff; //START CODE
        PassWord_1=String[0];
        PassWord_2=String[1];
        PassWord_3=String[2];
    }
    else
    {
        SendDataBuf[0]=get_random_number(254); 
        PassWord_1=get_random_number(255); 
        PassWord_2=get_random_number(255);  
        PassWord_3=get_random_number(255); 
    }     
    //SendDataBuf[1]
    SendDataBuf[1]=Random_7;
    //SendDataBuf[2]
    SendDataBuf[2]=PassWord_1^Random_1^Random_2;
    //SendDataBuf[3]
    SendDataBuf[3]=Random_8;
    //SendDataBuf[4]
    SendDataBuf[4]=PassWord_2^Random_2^Random_3;
    //SendDataBuf[5]
    SendDataBuf[5]=Random_9;
    //SendDataBuf[6]
    SendDataBuf[6]=PassWord_3^Random_3^Random_1;
    //SendDataBuf[7]
    SendDataBuf[7]=Random_1;
    //SendDataBuf[8]
    SendDataBuf[8]=Random_2;
    //SendDataBuf[9]
    SendDataBuf[9]=Random_3;
    //SendDataBuf[10]
    for(i=0;i<10;i++)
        CheckSum+=SendDataBuf[i];
    SendDataBuf[10]=CheckSum; 
    #ifdef CHECK_MIDI_PASSWORD_DEBUG
         printf("\n**%x %x %x  %x  %x  %x %x  %x  %x  %x  %x**\n",SendDataBuf[0],
         SendDataBuf[1],SendDataBuf[2],SendDataBuf[3],SendDataBuf[4],SendDataBuf[5],
         SendDataBuf[6],SendDataBuf[7],SendDataBuf[8],SendDataBuf[9],SendDataBuf[10]);         
    #endif       
}


/*
return 0: sucessful
return 1: fail
*/ 
int WriteEncryptData2MCU(void)
{   
    #ifdef CHECK_MIDI_PASSWORD_DEBUG
         printf("\n**************WriteEncryptData2MCU()*************\n");
    #endif
    int i;
    BYTE   num;
    UINT32 TimeOut=0;    
//-------------------------------------------------------------------------
//           Risc handshaking with MCU  
//-------------------------------------------------------------------------
    //CLK=0
    GPIO_O_SET(CLK, 0);
    //Judge if STB is low
    while((GPIO_I_GET(STB)!=0)&&(TimeOut < 100000))
    {
        TimeOut ++;
    }
    if (TimeOut >= 100000)//time out after 10ms
    {
        GPIO_O_SET(CLK, 1); //CLK=1
        #ifdef CHECK_MIDI_PASSWORD_DEBUG
            printf("\n================Write time out 1===================\n");
        #endif 
        return 1;
    }
    //Delay 100us
    delay_1us(100);
    //clear TimeOut
    TimeOut=0;
    //CLK=1
    GPIO_O_SET(CLK, 1);
    
    //Judge if STB is high
    while((GPIO_I_GET(STB)==0)&&(TimeOut < 100000))
    {
        TimeOut ++;
    }
    if (TimeOut >= 100000)//time out after 10ms
    {    
        TimeOut=0;
        #ifdef CHECK_MIDI_PASSWORD_DEBUG
         printf("\n================Write time out 2====================\n");
        #endif     
        return 1;
    }
    TimeOut=0;
//-------------------------------------------------------------------------
//                  Risc transmit data to MCU
//------------------------------------------------------------------------- 
    
     //Delay 200us
    delay_1us(200);    //very important!
    
    watchdog_onoff(0);   
    
    for(i=0;i<11;i++)
    {
        num=SendDataBuf[i];
        WriteOneByte2MCU(num);     
        delay_1us(200);    //very important!   
    }    
    
    watchdog_onoff(1);   
    
    //Set DAT Input port
    GPIO_E_SET(DAT, 0);     
    return 0;
}
/*
return 0: sucessful
return 1: fail
*/
int CheckPassWordFromEncryptData(char *string)
{
    #ifdef CHECK_MIDI_PASSWORD_DEBUG
         printf("\n*********checkPassWordFromEncryptData()************\n");
    #endif  
    BYTE PassWord1,PassWord2,PassWord3;
    BYTE RandomNumber4,RandomNumber5,RandomNumber6;
    BYTE XorRandomNum4,XorRandomNum5,XorRandomNum6;
    XorRandomNum4=ReceiveDataBuf[2];
    XorRandomNum5=ReceiveDataBuf[4];
    XorRandomNum6=ReceiveDataBuf[6];
    RandomNumber4=ReceiveDataBuf[7];
    RandomNumber5=ReceiveDataBuf[8];
    RandomNumber6=ReceiveDataBuf[9];
    PassWord1=XorRandomNum4^RandomNumber4^RandomNumber5;
    PassWord2=XorRandomNum5^RandomNumber5^RandomNumber6;
    PassWord3=XorRandomNum6^RandomNumber6^RandomNumber4;
    if((PassWord1==string[0])&&(PassWord2==string[1])&&(PassWord3==string[2]))
    {
        #ifdef CHECK_MIDI_PASSWORD_DEBUG
            printf("\n**%c %c %c **\n",PassWord1,PassWord2,PassWord3);
            printf("\n==============MIDI check password sucessful!=================\n");
        #endif
        return 0;
    }
    else
    { 
        #ifdef CHECK_MIDI_PASSWORD_DEBUG
            printf("\n==============MIDI check password fail!=================\n");
        #endif
        return 1;
    }
}
/*
    Receive Encrypt data package:
    BYTE0:  START CODE :0x68
    BYTE1:  RANDOM_NUMBER_10
    BYTE2:  XOR_RANDOM_NUMBER_4
    BYTE3:  RANDOM_NUMBER_11
    BYTE4:  XOR_RANDOM_NUMBER_5
    BYTE5:  RANDOM_NUMBER_12    
    BYTE6:  XOR_RANDOM_NUMBER_6
    BYTE7:  RANDOM_NUMBER_4
    BYTE8:  RANDOM_NUMBER_5
    BYTE9:  RANDOM_NUMBER_6
    BYTE10: CHECK_SUM   

    return 0: sucessful
    return 1: fail
*/ 
int ReadEncryptDataFromMCU(void)
{   
    int i ,num=0;
    BYTE RecData=0;
    BYTE  Sum=0,CheckSum=0;
    UINT32 TimeOut=0; 
    //Wait for STB level
    while(GPIO_I_GET(STB))  {}    
    //CLK=0
    GPIO_O_SET(CLK, 0);    
    //Judge if STB is high
    while(!GPIO_I_GET(STB)&&(TimeOut < 100000))
    {
        TimeOut ++;
    }
    if (TimeOut >= 100000)//time out after 10ms
    {        
        #ifdef CHECK_MIDI_PASSWORD_DEBUG
            printf("\n===========read time out===============\n");
        #endif
        GPIO_O_SET(CLK, 1);    //very important!
        return 1;
    }
    TimeOut=0;
    //CLK=1
    GPIO_O_SET(CLK, 1);  
    //wait STB come to low level
   	while(GPIO_I_GET(STB)!=0) {}    		
    watchdog_onoff(0);   
    for(i=0;i<11;i++)    
    {     	
        num=ReadOneByteFromMCU();
        if(num==-1)
        {
          #ifdef CHECK_MIDI_PASSWORD_DEBUG
            printf("\n===========read one byte fail !================\n");
          #endif  
          return 1;
        }  
        else
        {
          ReceiveDataBuf[i]=num;   
        }     
    }  
    //Set DAT output port
    GPIO_E_SET(DAT, 1);    
    GPIO_O_SET(DAT, 1);    
    watchdog_onoff(1);   
      
    //get Sum  
    for(i=0;i<10;i++) 
        {
            Sum+=ReceiveDataBuf[i];
        }
    //get CheckSum
    CheckSum=ReceiveDataBuf[10];    
    //judge check sum
    if(Sum!=CheckSum)
      {
        #ifdef CHECK_MIDI_PASSWORD_DEBUG
            printf("\n===========check sum not correct!==============\n");
        #endif 
        return 1;
      } 
    else
         {
            #ifdef CHECK_MIDI_PASSWORD_DEBUG
                printf("\n===========check sum sucessful!==============\n");
            #endif 
         }  
  
      #ifdef CHECK_MIDI_PASSWORD_DEBUG
         printf("\nrec %x %x %x  %x  %x  %x %x  %x  %x  %x  %x**\n",ReceiveDataBuf[0],
         ReceiveDataBuf[1],ReceiveDataBuf[2],ReceiveDataBuf[3],ReceiveDataBuf[4],ReceiveDataBuf[5],
         ReceiveDataBuf[6],ReceiveDataBuf[7],ReceiveDataBuf[8],ReceiveDataBuf[9],ReceiveDataBuf[10]);         
      #endif   
    return 0;
}
//----------------------------write------------------------------------
void WriteOneByte2MCU(BYTE data)
{    
    int i,j,bit;     
    for(i=0;i<8;i++)
    {
       //CLK=0
       GPIO_O_SET(CLK, 0);        
       bit=((data<<i)&0x80);
       if(bit==0)
       {
            //DAT LOW;              
            GPIO_O_SET(DAT, 0);
       }
       else
       {
            //DAT HIGH;             
            GPIO_O_SET(DAT, 1);  
       }   
       //Delay 100us
       delay_1us(100);
       //CLK=1
       GPIO_O_SET(CLK, 1);      
       //Delay 100us 
       delay_1us(100);  
      
    }
}

/*
return data: receive one byte data from MCU
*/
int ReadOneByteFromMCU(void)
{        
    int i;
    BYTE data=0; 
    UINT32 Timeout=0;
    
    for(i=0;i<8;i++)
    {    
        if(i==0)        
         { 
            data=data<<0;  
         }
        else   
         { 
            data=data<<1; 
         }   
        //wait for STB low level
        while(!GPIO_I_GET(STB)) {}          
        if(GPIO_I_GET(DAT))
           {     
                data=data|0x01;             
           }
        else
           {                 
           	    data=data&(~0x01);             	   	 
           }      
            //wait for STB high level
            while(GPIO_I_GET(STB)&&(Timeout < 4000)) 
            {
                Timeout++; 
                delay_1us(1); 
            }   
             if(Timeout>=4000) 
            {
                printf("\n=receive over!==\n");
                Timeout=0;
                break;                 
            }
            Timeout=0;
    }  
    
    return data;
}
#endif


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品亚洲欧美一区| 亚洲欧美日韩国产综合在线| 一本到不卡免费一区二区| 国产在线精品免费| 美女视频黄 久久| 亚洲大型综合色站| 亚洲国产另类精品专区| 亚洲三级久久久| 国产欧美日韩一区二区三区在线观看| 欧美一级二级三级蜜桃| 欧美一区二区三区在线视频| 日韩一级免费观看| 日韩欧美的一区二区| 欧美大片在线观看一区二区| 日韩一区二区三区视频| 欧美精品一区二区三区视频| 欧美一级精品大片| 久久久久久久网| 亚洲日穴在线视频| 亚洲视频一区二区在线| 亚洲美女视频一区| 亚洲不卡一区二区三区| 石原莉奈一区二区三区在线观看| 亚洲图片有声小说| 久久精品国产99国产精品| 激情都市一区二区| 成人高清伦理免费影院在线观看| 成人成人成人在线视频| 91视频一区二区| 3751色影院一区二区三区| 久久精品日产第一区二区三区高清版 | 亚洲一区二区av电影| 亚洲女女做受ⅹxx高潮| 麻豆免费看一区二区三区| 成人高清免费在线播放| 欧美精品视频www在线观看| 久久综合久久99| 亚洲欧洲av一区二区三区久久| 肉色丝袜一区二区| a在线欧美一区| 欧美成人欧美edvon| 国产精品福利一区| 久久av老司机精品网站导航| 91免费观看视频在线| 欧美精品一区二区三| 午夜一区二区三区在线观看| 麻豆91免费看| 欧美调教femdomvk| 亚洲欧美在线视频| 狠狠色综合日日| 欧美影院一区二区三区| 国产精品欧美极品| 狠狠色丁香婷婷综合| 欧美日韩激情一区| 亚洲精品亚洲人成人网在线播放| 精品一区二区三区在线播放视频| 久久亚洲精品小早川怜子| 亚洲六月丁香色婷婷综合久久| 精久久久久久久久久久| 欧美自拍偷拍一区| 国产精品麻豆一区二区| 激情五月婷婷综合| 777xxx欧美| 久久久久久久一区| 丝袜诱惑制服诱惑色一区在线观看| 不卡的看片网站| 欧美成人福利视频| 亚洲高清免费一级二级三级| 韩国精品主播一区二区在线观看 | 日韩精品国产欧美| 成人教育av在线| 精品国产制服丝袜高跟| 欧美tickling网站挠脚心| 日本三级韩国三级欧美三级| av综合在线播放| 精品福利一区二区三区免费视频| 亚洲综合小说图片| av不卡在线播放| 国产视频一区在线观看 | 日韩欧美不卡一区| 性欧美疯狂xxxxbbbb| 99精品视频中文字幕| 久久久欧美精品sm网站| 狠狠色狠狠色综合日日91app| 欧美亚洲综合在线| 亚洲丝袜自拍清纯另类| 一道本成人在线| 亚洲丝袜另类动漫二区| heyzo一本久久综合| 中文av字幕一区| 成人福利视频在线| 国产精品国产精品国产专区不蜜| 国产精品影音先锋| 欧美国产欧美综合| 激情六月婷婷久久| 最新欧美精品一区二区三区| 9色porny自拍视频一区二区| 日韩手机在线导航| 天堂在线亚洲视频| 欧美一区二区三区思思人| 美女www一区二区| 精品国产一区二区精华| 九九精品一区二区| 欧美va亚洲va国产综合| 国产伦精品一区二区三区免费迷| 日韩精品一区二区三区蜜臀| 久久精品国产一区二区| 中文一区一区三区高中清不卡| 国产91精品一区二区| 中日韩av电影| 色天使色偷偷av一区二区| 亚洲国产精品一区二区www在线| 欧美日韩免费在线视频| 日本不卡在线视频| 日韩三级免费观看| 蜜桃在线一区二区三区| 久久九九久久九九| 91香蕉国产在线观看软件| 亚洲一区在线观看网站| 91精品国产综合久久久久久久| 日韩vs国产vs欧美| 精品久久久久香蕉网| 国产麻豆91精品| 一区二区免费看| 精品av久久707| 99久久久精品| 麻豆一区二区三区| 激情综合网av| 中文字幕成人av| 欧美日本在线播放| 激情久久五月天| 亚洲国产日韩在线一区模特| 欧美电视剧在线观看完整版| 国产一区视频网站| 美女网站在线免费欧美精品| 国产精品网曝门| 91麻豆精品国产91久久久资源速度| 精品一区二区三区免费观看| 日韩毛片高清在线播放| 日韩欧美成人一区二区| www.亚洲国产| 国产精品1区2区3区| 亚洲成人自拍偷拍| 亚洲国产精品激情在线观看| 欧美一区二区视频在线观看2022| 波多野结衣中文字幕一区| 青草av.久久免费一区| 亚洲三级视频在线观看| 国产精品久久久久久久久动漫 | 国产a精品视频| www国产精品av| 亚洲三级电影网站| 国产日韩综合av| 久久久www成人免费无遮挡大片| 日韩一区二区三区三四区视频在线观看| 国内成人精品2018免费看| 色女孩综合影院| 精品视频1区2区| 欧美日本韩国一区二区三区视频| 欧美三级乱人伦电影| 国产精品色眯眯| 亚洲情趣在线观看| 亚洲国产裸拍裸体视频在线观看乱了 | 一区二区三区影院| 亚洲制服丝袜在线| 天堂va蜜桃一区二区三区漫画版| 亚洲欧洲中文日韩久久av乱码| 日本伊人精品一区二区三区观看方式 | 一本大道久久a久久综合婷婷| 欧美成人一区二区三区片免费 | 国产精品久久久久久亚洲毛片| 久久精品视频一区二区| 中文字幕欧美一| 亚洲激情第一区| 亚洲伊人伊色伊影伊综合网| 成人美女视频在线观看| 一本色道a无线码一区v| 欧美三级一区二区| 精品国产欧美一区二区| 日韩精品在线一区二区| 亚洲一区精品在线| 日本少妇一区二区| 成人激情免费视频| 91丝袜国产在线播放| 久久精品欧美一区二区三区麻豆| 亚洲国产精品av| 一区二区欧美视频| 蜜桃视频在线观看一区| 免费观看30秒视频久久| 粉嫩aⅴ一区二区三区四区五区| 97久久精品人人做人人爽50路| 91精品久久久久久蜜臀| 色94色欧美sute亚洲13| 综合欧美亚洲日本| 日本人妖一区二区| 国产麻豆91精品| 国产麻豆精品久久一二三| 久久女同精品一区二区| 亚洲资源在线观看| av中文字幕亚洲|