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

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

?? rsm_upd.c

?? 凌陽8202T的紅外接收代碼及LED屏的驅動代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include "user_init.h"
#include "rsm_upd.h"

/// ******  New resume info write / read functions  ******

#ifdef SUPPORT_SPI_FLASH//added by wangyong for compile warning 2007-1-16 03:01下午
extern int SPI_Resume_Read();
extern int SPI_Resume_Write();
#endif
//#define RSM_UPDATE_DBG
//#define RESUME_INFO_DBG

#include "flash.h"

#define UNUSED_VALUE 0xFF
#define FIRST_LEN 4 //ted.chang 2006 1117, 2

#ifdef SUPPORT_SPI_FLASH
//static int find_start_addr(int low, int high)
int find_start_addr(int low, int high)
{
  int hi, lo; //, mid;
BYTE tmp1[4];
  
  lo = low;
  hi = high-3;

  while (lo<=hi)
  {
    SPI_Resume_Read(hi, tmp1, 4);
    if(tmp1[3]!=0xFF || tmp1[2]!=0xFF || tmp1[1]!=0xFF || tmp1[0]!=0xFF)
  	{
  	  break;
  	}
    hi-=4;
  }
  
  if (hi<lo)
    return lo;
  else
    return (hi+4);
}

//swpong 2006 0404
// Function     :   Resume_Info_Write_Update
// Description	:   re-direct writing address to free-section address
// Input        :   iStartAddr  -> the Start Address of pBuf1 where pBuf2 starts
//                  *pBuf1       -> buffer of full record, used in the first time and after sector full.
//                  iBuf1Len     -> length of pBuf1
//                  *pBuf2       -> buffer for updated data
//                  iBuf2Len     -> length of pBuf2
// Output       :   >=0         -> sucess
//                  <0          -> fail	
// Note          :  call write-funcion to write index array, 
//                  and write buffer data to destination

enum {H_MODFF=0, H_LEN, H_OFFSET_HI, H_OFFSET_LO, HEAD_SIZE};
#define W_ARRAY_SIZE 8
#define W_ALIGN 4
#define MODFF_IDX    0
int Resume_Info_Write_Update(UINT32 iStartAddr, BYTE *pBuf1, UINT32 iBuf1Len, BYTE *pBuf2, UINT32 iBuf2Len)
{
    #ifdef  RESUME_INFO_DBG
        printf_w("---Resume_Info_Write_Update---\n");
    #endif    
  if(((flash_info>>16) != 0x1111) && (flash_info!=0))
    {
        SPI_APP_upgrade_init();
    }
  
    int     iRes =0;    
    BYTE FirstMark[FIRST_LEN];
    UINT32 i, j, size;
    BYTE w_array[W_ARRAY_SIZE];
    BYTE w_head[HEAD_SIZE];
    UINT32 ExtraInfoSize, total_len, current_start;
    BYTE *p;
    
    #ifdef  RESUME_INFO_DBG
    printf_w("Resume info write Update\n");
    FlashDelay(10000);
    #endif

    SPI_Resume_Read(rsm_flash_start_addr, FirstMark, FIRST_LEN);
    if (FirstMark[0] == rsm_flash_erasing_keyword) //the first time written, write full structure.
    {
        FirstMark[0] = (iBuf1Len+FIRST_LEN)>>8;
        FirstMark[1] = (iBuf1Len+FIRST_LEN)&0xff;
        FirstMark[2] = 0x00;
        FirstMark[3] = 0x00;
        
        SPI_Resume_Write(rsm_flash_start_addr, FirstMark, FIRST_LEN);      
        SPI_Resume_Write(rsm_flash_start_addr+FIRST_LEN,pBuf1,iBuf1Len);
        spi_api_resume_start_address = rsm_flash_start_addr+FIRST_LEN + iBuf1Len;//tw add.20070416
        #ifdef  RESUME_INFO_DBG
    	printf_w("Write initial %x, %x, %d\n", FirstMark[0], FirstMark[1], iBuf1Len);
    	#endif
    }
    else //for difference history
    {
        SPI_Resume_Read(rsm_flash_start_addr, FirstMark, FIRST_LEN);
        //====ted.chang 2007 07.24 for block resume, only for 4 ~ 64k resume
        if(FirstMark[0]==0xFF)
        {
            SPI_Resume_Write(rsm_flash_start_addr+FIRST_LEN+iStartAddr,pBuf2,iBuf2Len);
        }
        else
        //====
        {
        current_start = spi_api_resume_start_address;//tw add.20070416
        ////tw mark.20070416
        //current_start = find_start_addr(rsm_flash_start_addr + ((FirstMark[0]<<8)|(FirstMark[1])), 
        //                                       rsm_flash_start_addr + rsm_flash_sec_size-1);
        if (!current_start)
        {
       	   iRes = -1;
       	   printf_w ("**SPI find start addr error***\n");
        }
        else
        {
			if(iBuf2Len % 7 == 0)                 
                ExtraInfoSize = HEAD_SIZE + (iBuf2Len)/(W_ARRAY_SIZE-1);
            else
				ExtraInfoSize = HEAD_SIZE + (iBuf2Len)/(W_ARRAY_SIZE-1) + 1;
			
       	   total_len = iBuf2Len + ExtraInfoSize;
                UINT32 realwrite; 
                realwrite = ((total_len-1)&0xFFFFFFFC) +4; 
#ifdef RSM_UPDATE_DBG      	       	  	  
       	   printf_w("Write at 0x%x, len = %d, extra = %d\n", current_start, total_len, ExtraInfoSize);
#endif       	   

                //====ted.chang 2007 07.24 for block resume, only for 4 ~ 64k resume
                //if ((current_start + total_len) >= (rsm_flash_start_addr+rsm_flash_sec_size))
                if ((current_start + realwrite) >= (rsm_flash_start_addr+0x1000))
                //====
                {
                    //====ted.chang 2007 07.24 for block resume, only for 4 ~ 64k resume
                    if((rsm_flash_start_addr & 0xf000)!=0xf000)
                    {
                        rsm_flash_start_addr = rsm_flash_start_addr + 0x1000;
                        printf_w("Recreate new 4k block ... \n");
                        FirstMark[0] = (iBuf1Len+FIRST_LEN)>>8;
                        FirstMark[1] = (iBuf1Len+FIRST_LEN)&0xff;
                        FirstMark[2] = 0x00;
                        FirstMark[3] = 0x00;
                        SPI_Resume_Write(rsm_flash_start_addr, FirstMark, FIRST_LEN);//tw mark.20070416
                        iRes = SPI_Resume_Write(rsm_flash_start_addr+FIRST_LEN,pBuf1,iBuf1Len);//tw mark.20070416
                        spi_api_resume_start_address = rsm_flash_start_addr+FIRST_LEN + iBuf1Len;//tw add.20070416
                        if(((flash_info>>16) != 0x1111) && (flash_info!=0))//tw add.20070416
                        {
                            SPI_APP_flash_init();
                        } 
                        return iRes;    //tw mark.20070416
                    }
                    else
                    //====
       	   {
       	     printf_w("Sector full, erasing ... \n");
                        //====ted.chang 2007 07.24 for block resume, only for 4 ~ 64k resume
                        rsm_flash_start_addr = rsm_flash_start_addr + 0x1000 - rsm_flash_sec_size;
                        //====

       	  	 //sector full, erase and update all.
                        SPI_api_sec_erase(rsm_flash_sec_type, rsm_flash_start_addr);

             FirstMark[0] = (iBuf1Len+FIRST_LEN)>>8;
             FirstMark[1] = (iBuf1Len+FIRST_LEN)&0xff;
             FirstMark[2] = 0x00;
             FirstMark[3] = 0x00;
 
                        SPI_Resume_Write(rsm_flash_start_addr, FirstMark, FIRST_LEN);//tw mark.20070416
                        iRes = SPI_Resume_Write(rsm_flash_start_addr+FIRST_LEN,pBuf1,iBuf1Len);//tw mark.20070416
                        spi_api_resume_start_address = rsm_flash_start_addr+FIRST_LEN + iBuf1Len;//rsm_flash_start_addr;tw add.20070416
                        //return 0;//tw mark.20070416
                        if(((flash_info>>16) != 0x1111) && (flash_info!=0))//tw add.20070416
                        {
                            SPI_APP_flash_init();
                        } 
                        return iRes;
                    }
       	   }
       	   else  //Update history
       	   {
       	  	 //swpong 2006 0505 w_head[H_MODFF] = 0;
       	  	 w_head[H_MODFF] = (rsm_flash_erasing_keyword&0x80)^0x80;
       	  	   
       	  	 if (total_len == rsm_flash_erasing_keyword) //swpong 2006 0505, 0xff)
       	  	 {
       	  		w_head[H_MODFF] |= (1<<H_LEN);
       	  		w_head[H_LEN] = 0;
       	     }
       	     else
       	  	    w_head[H_LEN] = total_len&0xff;
       	  	  
       	  	 if ((iStartAddr&0xff) == rsm_flash_erasing_keyword) //swpong 2006 0505, 0xff)
       	  	 {
       	  		w_head[H_MODFF] |= (1<<H_OFFSET_LO);
       	  		w_head[H_OFFSET_LO] = 0;
       	     }
       	     else
       	  	    w_head[H_OFFSET_LO] = iStartAddr&0xff;
       	  	  
       	  	 if ((iStartAddr>>8) == rsm_flash_erasing_keyword) //swpong 2006 0505, 0xff)
       	  	 {
       	  		w_head[H_MODFF] |= (1<<H_OFFSET_HI);
       	  		w_head[H_OFFSET_HI] = 0;
       	     }
       	     else
       	  	    w_head[H_OFFSET_HI] = (iStartAddr>>8)&0xff;
       	  	  
             #ifdef RSM_UPDATE_DBG      	       	  	  
                    printf_w("Write cur = %d HEAD(%x,%x,%x,%x)\n",current_start, w_head[H_MODFF], w_head[H_OFFSET_HI], w_head[H_OFFSET_LO], w_head[H_LEN]);               
             #endif       	  	
       	  	
            SPI_Resume_Write(current_start, w_head, HEAD_SIZE);
       	  	current_start += HEAD_SIZE;

          #ifdef RSM_UPDATE_DBG      	
       	  printf_w("Write offset = 0x%x, len = %d\n", w_head[H_OFFSET_LO]|((w_head[H_OFFSET_HI])<<8), w_head[H_LEN]);
          #endif       	  
       	  	
       	  	size = iBuf2Len;
       	  	j = 0;
       	  	p = pBuf2;
       	  	while (size)
       	  	{
       	  		if (j==0)
       	  		  //swpong2006 0505 w_array[MODFF_IDX] = 0;
       	  		  w_array[MODFF_IDX] = (rsm_flash_erasing_keyword&0x80)^0x80;
       	  		if (*p == 0xff)
       	  		{
       	  		  w_array[MODFF_IDX] |= (1<<j);
       	  		  w_array[j+1] = 0;
       	  		}
       	  		else
       	  		  w_array[j+1] = *p;
       	  		  
       	  		j++;
       	  		j%=(W_ARRAY_SIZE - 1);
       	  		if (j==0)
       	  		{
#ifdef RSM_UPDATE_DBG      	       	  			
       	  			printf_w("WriteTo:0x%x, left : %d\n", current_start, size);
#endif       	  			
                SPI_Resume_Write(current_start, w_array, W_ARRAY_SIZE);
       	  			current_start += W_ARRAY_SIZE;
       	  		}
       	  		  
       	  		size--;
       	  		p++;
       	    }
       	  	if (j)
       	  	{
                  for (i=j+1;i<W_ARRAY_SIZE;i++)
                    w_array[i] = 0x00;
                  
                  //ted.chang 2007.07.25 for unfinished writing
                  if (j<=(W_ALIGN-1))// for size less then or equal to 3
                   //====
                  {
                    SPI_Resume_Write(current_start, w_array, W_ALIGN);
                    current_start += W_ALIGN;
                  }
                  else//for size larger then 3 and less then or equal to  7
                  {
                    SPI_Resume_Write(current_start, w_array, W_ARRAY_SIZE);
                    current_start += W_ARRAY_SIZE;                  	
                  }
       	      }

#ifdef RSM_UPDATE_DBG      	       	    
       	    printf_w ("Write next start = 0x%x\n", current_start);
#endif       	    
       	      }
          }
           spi_api_resume_start_address = current_start;//tw add.20070416
        }
    }
      if(((flash_info>>16) != 0x1111) && (flash_info!=0))
    {
        SPI_APP_flash_init();
    } 
    return iRes;    
}

//
// Function     :   Resume_Info_Read_Update
// Description	:   re-direct reading address to current-section address
// Input        :   
//                  *pBuf1      -> buffer for recording data
//                  iLen        -> buffer length                 
// Output       :   >=0         -> sucess
//                  <0          -> fail	
// Note         :  

int Resume_Info_Read_Update(BYTE *pBuf1, UINT32 iLen)
{
    #ifdef  RESUME_INFO_DBG
        printf_w("---Resume_Info_Read---\n");
    #endif    

    int current_addr = 0, end_addr, len;
    unsigned int cnt = 0, get_cnt;
    UINT32 offset, j;
    BYTE *p;
    BYTE FirstMark[FIRST_LEN];
    BYTE w_array[W_ARRAY_SIZE];
    BYTE w_head[HEAD_SIZE];
    
    if(((flash_info>>16) != 0x1111) && (flash_info!=0))//tw open.20070416
    {
        SPI_APP_upgrade_init();
    }
    
#ifdef RSM_UPDATE_DBG      	       	      
    printf_w("Resume info read Update\n");
#endif    

    // for skip first mark and jump to append data start address if exist
    SPI_Resume_Read(rsm_flash_start_addr, FirstMark, FIRST_LEN);
    SPI_Resume_Read(rsm_flash_start_addr+FIRST_LEN, pBuf1, iLen);
    current_addr =  rsm_flash_start_addr + ((FirstMark[0]<<8)|(FirstMark[1]));
  
    if (FirstMark[0] == rsm_flash_erasing_keyword)
    { 
#ifdef RSM_UPDATE_DBG      	       	    	
  	printf_w("FirstMark[0] == rsm_flash_erasing\n");
#endif      	
      end_addr = current_addr; //swpong 2006 0503
    }
    else{ //swpong 2006 0503
      //end_addr = find_start_addr(current_addr, rsm_flash_start_addr + rsm_flash_sec_size-1);//tw mark.20070416
      end_addr = spi_api_resume_start_address;//tw add.20070416
    }

#ifdef RSM_UPDATE_DBG      	       	  
    printf_w("Resume Update get curr = 0x%x, end = 0x%x\n", current_addr, end_addr);
#endif    


    //p = pBuf1;
    while (current_addr < end_addr)
    { 
      SPI_Resume_Read(current_addr, w_head, HEAD_SIZE);

        #ifdef RSM_UPDATE_DBG       
        printf_w("Read cur = %x HEAD(%x,%x,%x,%x)\n",current_addr, w_head[H_MODFF], w_head[H_OFFSET_HI], w_head[H_OFFSET_LO], w_head[H_LEN]);
        #endif

        //ted.chang 2007.07.25 for unfinished writing
        if((w_head[0]==0xFF) || (w_head[1]==0xFF)||(w_head[2]==0xFF)||(w_head[3]==0xFF)){
            if((w_head[0]==0xFF) && (w_head[1]==0xFF)&&(w_head[2]==0xFF)&&(w_head[3]==0xFF))
                break;
            else{
      current_addr += HEAD_SIZE;
            continue;
            }
        }
        //====
      
      if (w_head[H_MODFF]&(1<<H_LEN))
        w_head[H_LEN] = rsm_flash_erasing_keyword; //swpong 2006 0505, 0xff;
      if (w_head[H_MODFF]&(1<<H_OFFSET_LO))
        w_head[H_OFFSET_LO] = rsm_flash_erasing_keyword; //swpong 2006 0505, 0xff;
      if (w_head[H_MODFF]&(1<<H_OFFSET_HI))
        w_head[H_OFFSET_HI] = rsm_flash_erasing_keyword; //swpong 2006 0505, 0xff;
 
      offset = (((UINT32)w_head[H_OFFSET_HI])<<8) | (w_head[H_OFFSET_LO]);
      len = (w_head[H_LEN]&0xff) - HEAD_SIZE;
      
        if((offset >iLen) || (len <0)){
            if(((flash_info>>16) != 0x1111) && (flash_info!=0))//tw add.20070416
            {
                SPI_APP_flash_init();
            } 
	  	return 1;
        }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产**成人网毛片九色 | 国产精品高潮久久久久无| 欧美性猛交xxxx乱大交退制版| 国产成人一区在线| 国产99精品国产| 国产精品一区二区三区四区| 免费高清在线一区| 精品一区二区三区久久| 国产一区不卡在线| 成人性生交大片免费| 国产成人免费在线视频| 99热99精品| 欧美三级三级三级爽爽爽| 欧美在线免费观看视频| 7777精品伊人久久久大香线蕉的| 91精品黄色片免费大全| 久久综合九色综合欧美亚洲| 欧美韩国日本一区| 亚洲精选视频在线| 香蕉久久一区二区不卡无毒影院| 日韩在线一二三区| 国产一区二区三区在线观看精品| 成人免费视频一区| 在线观看一区不卡| 欧美电影免费提供在线观看| 国产女人18水真多18精品一级做| 亚洲精品成人悠悠色影视| 日韩中文字幕麻豆| 欧美日韩一二区| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 一本到三区不卡视频| 69堂精品视频| 亚洲人精品午夜| 免播放器亚洲一区| 91网页版在线| 精品国产乱码久久久久久1区2区 | 欧美一级日韩免费不卡| 久久色在线视频| 一区二区久久久| 国产一区二区三区美女| 欧美性生活影院| 欧美激情一区二区三区在线| 日韩精彩视频在线观看| 丁香婷婷综合激情五月色| 欧美群妇大交群的观看方式| 国产欧美日韩亚州综合| 秋霞影院一区二区| 色综合欧美在线| 久久精品亚洲国产奇米99| 亚洲bdsm女犯bdsm网站| 972aa.com艺术欧美| 久久精品一区二区三区不卡牛牛 | 国产老肥熟一区二区三区| 欧美性猛片aaaaaaa做受| 国产精品网曝门| 激情图片小说一区| 日韩写真欧美这视频| 亚洲大片免费看| 日本道色综合久久| 中文字幕一区二区三区在线播放 | 欧美福利视频导航| 亚洲婷婷在线视频| 成人免费av在线| 久久九九久久九九| 国产剧情一区在线| wwwwxxxxx欧美| 国产自产v一区二区三区c| 欧美美女网站色| 日日夜夜精品免费视频| 欧美写真视频网站| 亚洲一区免费在线观看| 色综合久久综合网97色综合| 亚洲欧洲一区二区在线播放| 国产99久久久国产精品免费看| 久久这里都是精品| 国产剧情一区二区三区| 久久尤物电影视频在线观看| 久久超碰97人人做人人爱| 日韩欧美成人午夜| 久久精品二区亚洲w码| 精品久久一区二区| 国产精品自在欧美一区| 国产日韩欧美综合一区| 成人性视频免费网站| 久久99精品久久久久久| 欧美一区二区啪啪| 久久99国产精品麻豆| 久久奇米777| 福利一区在线观看| 亚洲精品国产视频| 欧美一区二区三区视频在线| 狠狠色丁香婷婷综合久久片| 久久久久久久久久久久久女国产乱 | 一区二区三区在线观看欧美| 欧美视频一区二区三区在线观看 | 日本伊人午夜精品| 精品88久久久久88久久久| 高潮精品一区videoshd| 一区二区不卡在线播放 | 亚洲男人天堂av| 精品视频999| 国产在线不卡视频| 国产精品色哟哟| 欧美久久久久久久久| 国产在线观看一区二区| 自拍偷拍国产亚洲| 日韩视频一区二区三区在线播放 | 蜜臀av一区二区在线免费观看| 精品国产乱码久久久久久夜甘婷婷| 大白屁股一区二区视频| 亚洲成人7777| 国产精品欧美久久久久无广告| 欧美亚洲综合在线| 国产福利一区二区三区视频在线 | 色婷婷av一区| 国模套图日韩精品一区二区| 亚洲女同一区二区| 国产无一区二区| 91精品久久久久久久91蜜桃| 91啪九色porn原创视频在线观看| 日韩av一级片| 亚洲精品视频自拍| 国产日韩欧美在线一区| 欧美理论片在线| 日本韩国欧美一区| 成人网页在线观看| 黄网站免费久久| 天堂一区二区在线免费观看| 中文字幕日韩一区二区| 久久久亚洲国产美女国产盗摄| 欧美日韩精品专区| 91亚洲国产成人精品一区二区三| 国产美女久久久久| 麻豆成人91精品二区三区| 一区二区三区不卡在线观看 | 成人免费视频网站在线观看| 蜜桃av噜噜一区| 色婷婷国产精品| 懂色中文一区二区在线播放| 久久超级碰视频| 九九久久精品视频| 日韩精品国产欧美| 亚洲成人你懂的| 亚洲午夜在线视频| 亚洲图片欧美视频| 亚洲高清免费视频| 亚洲成a人v欧美综合天堂下载 | 成人欧美一区二区三区1314| 国产人妖乱国产精品人妖| 欧美成人a∨高清免费观看| 欧美一区二区成人6969| 欧美精品vⅰdeose4hd| 欧美精品tushy高清| 91麻豆精品国产91久久久久久久久 | 亚洲一区二区三区四区不卡| 亚洲天堂精品视频| 夜夜精品浪潮av一区二区三区| 亚洲另类在线制服丝袜| 亚洲国产一区二区在线播放| 亚洲一卡二卡三卡四卡| 五月婷婷久久丁香| 免费一级欧美片在线观看| 蜜桃久久精品一区二区| 国产一区二区三区最好精华液| 韩国av一区二区三区四区| 国产成人精品免费在线| av亚洲精华国产精华| 色一情一乱一乱一91av| 在线成人av网站| 精品国产乱码久久久久久老虎| 欧美国产精品中文字幕| 亚洲男人的天堂在线观看| 亚洲网友自拍偷拍| 精品无人码麻豆乱码1区2区| 国产999精品久久久久久绿帽| 91啪亚洲精品| 日韩亚洲欧美在线观看| 中文字幕va一区二区三区| 一区二区成人在线观看| 黄色精品一二区| 色综合久久久久综合99| 日韩欧美一级二级| 亚洲欧洲精品天堂一级 | 亚洲小说欧美激情另类| 免费观看成人av| bt欧美亚洲午夜电影天堂| 欧美精品在线观看播放| 国产欧美一区二区三区沐欲| 一区二区三区欧美日| 韩国三级在线一区| 色成年激情久久综合| www国产成人| 亚洲v日本v欧美v久久精品| 高清国产一区二区| 制服丝袜日韩国产| 最近中文字幕一区二区三区| 麻豆精品在线视频| 在线精品视频一区二区三四 | 色综合久久久久综合| 欧美www视频|