⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rsm_util.h

📁 凌阳8202T的红外接收代码及LED屏的驱动代码
💻 H
📖 第 1 页 / 共 5 页
字号:
		printf("read flash error\n");
	}	
#endif//#ifndef DISC_ID_IN_FLASH


}
/*
*  i2c device addr : a0 , read UINT32 parameter
*/
int ReadFromI2cA0_32(UINT16 iAddr,BYTE *bBuffer,UINT16 len)
{
	UINT32 v=0;
#ifndef DISC_ID_IN_FLASH
	if(ReadFromI2c(0xa0, iAddr,bBuffer, len) >=0 )
	{//sucess
	    printf("read flash data:\n");
		//print_block(bBuffer,len);
		if(len == 4)	v = getUINT32_li(bBuffer);
		else v = getUINT16_li(bBuffer);
	}else
	{
		printf("read flash error\n");		
	}	
#else//#ifndef DISC_ID_IN_FLASH

       int result,j=0;


//	memset(bBuffer,0,len);
        
#ifdef SETUP_IN_FLASH

   #ifndef RW_NVMEM
   BYTE *p;
   UINT32 i;
   int k;

   i = sizeof(disc_resume);        
   #endif

   if( iAddr >= DRM_INFO )
   {
#ifdef RW_NVMEM
/* swpong 2006 0320 */
            result = ReadFromNVMEM(TYPE_DRM, iAddr - DRM_INFO, bBuffer, len);
#else  //RW_NVMEM
  #ifdef FLASH_HISTORY 
             result = Resume_Info_Read_Update((BYTE*)disc_resume, i);   //swpong 2006 0404
  #else  	       	   	
         result = Resume_Info_Read(rsm_flash_start_addr, (BYTE*)disc_resume,i);
  #endif         
    	
    	p=(BYTE*)&disc_resume[TOTAL_RESUME+3].disc_info;
    	for (k=0; k<len;k++)
    	{
		    j=iAddr - DRM_INFO + k;                                          
    		*bBuffer++ = *(p+j);
    	}
#endif //RW_NVMEM      	
   }
   else
#endif
   	if (iAddr >= DVD_INFO_BASE)       	
       {
       	//i = sizeof(disc_resume);

              if ((iAddr >= DVD_INFO_BASE) && (iAddr <DVD_DISC_INFO))
              {
                  	if ((iAddr >= DVD_INFO_BASE) && (iAddr <CDROM_INFO_BASE))   
				j = iAddr - DVD_INFO_BASE;
			else if ((iAddr >= CDROM_INFO_BASE) && (iAddr <CDDA_INFO_BASE))   
				j = iAddr - CDROM_INFO_BASE;
     	       	else if ((iAddr >= CDDA_INFO_BASE) && (iAddr <VCD_INFO_BASE))   
				j = iAddr - CDDA_INFO_BASE;
     			else if ((iAddr >= VCD_INFO_BASE) && (iAddr <DVD_DISC_INFO))   
				j = iAddr - VCD_INFO_BASE;
#ifdef RW_NVMEM
/* swpong 2006 0320 */
               result = ReadFromNVMEM(TYPE_RESUME, iAddr - DVD_INFO_BASE, bBuffer, len);
#else  //RW_NVMEM        			
  #ifdef FLASH_HISTORY
             result = Resume_Info_Read_Update((BYTE*)disc_resume, i);   //swpong 2006 0404
  #else  	       					
 			result = Resume_Info_Read(rsm_flash_start_addr,(BYTE*)disc_resume,i);
  #endif 			
			p= (BYTE*)&disc_resume[current_resume].disc_info;
			p +=j;
		       for (k=0; k<len;k++) *(bBuffer+k) = *p++;
//	      		memcpy(bBuffer,&disc_resume[current_resume].disc_info+j,len);
#endif //RW_NVMEM
              }
              else
              {
#ifdef RW_NVMEM
/* swpong 2006 0320 */
                result = ReadFromNVMEM(TYPE_DISC_ID, 0, bBuffer, ID_LEN);
#else  //RW_NVMEM
  #ifdef FLASH_HISTORY
             result = Resume_Info_Read_Update((BYTE*)disc_resume, i);   //swpong 2006 0404
  #else  	       	              	
         	       result = Resume_Info_Read(rsm_flash_start_addr,(BYTE*)disc_resume,i);
  #endif         	       
         	       p= (BYTE*)&disc_resume[current_resume].disc_id;
		       for (k=0; k<len;k++) *(bBuffer+k) = *p++;
//		       memcpy(bBuffer,&disc_resume[current_resume].disc_id,len);
#endif //RW_NVMEM
		 }
       }
#if defined( SETUP_IN_FLASH ) && defined( SUPPORT_TVG )
        else if( iAddr >= TVG_MEM_BASE )
        {
  #ifdef FLASH_HISTORY
             result = Resume_Info_Read_Update((BYTE*)disc_resume, i);   //swpong 2006 0404
  #else  	       	        	
            result = Resume_Info_Read( rsm_flash_start_addr, disc_resume,i );
  #endif            
        	p = ((UINT8*)&disc_resume[TOTAL_RESUME+3].disc_info) + 48;
        	for (k=0; k<len;k++)
        	{
			    j = iAddr - TVG_MEM_BASE + k;
        		*bBuffer++ = *(p+j);
        	}
        }
#endif
       else
       {
 #ifdef SETUP_IN_FLASH
#ifdef RW_NVMEM
/* swpong 2006 0320 */
            result = ReadFromNVMEM(TYPE_SETUP, iAddr, bBuffer, len);
#else //RW_NVMEM          
  #ifdef FLASH_HISTORY
               result = Resume_Info_Read_Update((BYTE*)disc_resume, i);   //swpong 2006 0404
  #else  	       	
      	       result = Resume_Info_Read(rsm_flash_start_addr, (BYTE*)disc_resume,i);
  #endif      	       
        	for (k=0; k<len;k++)
        	{
			j=iAddr+k;
        		p=(BYTE*)&disc_resume[TOTAL_RESUME+1].disc_info;
        		
 			if (j>=(SETUP_MENU_BASE+SIZE_PER_ID)) 
 			//Wrap around for the next 64 (SIZE_PER_ID) bytes for setup
 			{
 				j-= SIZE_PER_ID;
 				p=(BYTE*)&disc_resume[TOTAL_RESUME+2].disc_info;

 			}
                                          
        		*bBuffer++ = *(p+j);
        	}
#endif //RW_NVMEM        	
  #else
       	     result = ReadFromI2c(0xa0, iAddr,bBuffer, len);
#endif
       }
       
	if(result >=0 )
	{//sucess
    	       printf("read flash data:\n");
		//print_block(bBuffer,len);
		if(len == 4)	v = getUINT32_li(bBuffer);
		else v = getUINT16_li(bBuffer);
	}else
	{
		printf("read flash error\n");		
	}	

#endif//#ifndef DISC_ID_IN_FLASH

	return v;
}
/*
*  i2c device addr : a0 , write function
*/
void WriteToI2cA0(int iAddr,BYTE *bData,UINT32 len)
{

#if (!defined(DISC_ID_IN_FLASH))&&(!defined(SETUP_IN_FLASH))//zxb 061019
    //printf("i2c,iAddr:%d len:%d\n",iAddr,len);
	if( WriteToI2c(0xa0,iAddr,bData,len) < 0 )
	{//write fail
		printf("!!!!  ========  write flash error  ======== !!!!!\n");
	}
#else//(!defined(DISC_ID_IN_FLASH))&&(!defined(SETUP_IN_FLASH))
        int result=0, j=0;
      	UINT32  is_write_flash =1;
      	
        //joshua, 20060220, modified for enhancing read/write cycles of flash.
        //is_write_flash==0 don't write, is_write_flash==1 write
        //1.However, iAddr(setup-menu related address) from 4(SETUP_VA_I2C_YA) to 68(SETUP_CHECKSUM_I2C_YA) will be return.
        //  finally, run_save_total_userSet() will save all modified values and write into flash once.      	
        //2.About resume function, we also write once at last function call.
        if( ((iAddr>=4)&&(iAddr<=68)) 
        	#if defined(SAME_DISC_RESUME) || defined(POWER_RESUME) || defined(RECORD_KEY)
            || (iAddr==DVD_INFO_BASE) || (iAddr==CDROM_INFO_BASE) || (iAddr==CDDA_INFO_BASE) || (iAddr==VCD_INFO_BASE) //zxb 061019
            || (iAddr==DVD_DISC_INFO) || (iAddr==CDDA_DISC_INFO)   || (iAddr==VCD_DISC_INFO) 
            #endif
            )
        {
            is_write_flash = 0;      	              	      	
        }    
 
#ifdef SETUP_IN_FLASH
//swpong 2006 0413
     #ifdef FLASH_HISTORY
       BYTE *pdata1;
                    
       pdata1 = bData;
     #endif

     #ifndef RW_NVMEM
       UINT32 i, k;
       BYTE *p, *q;
       
       i = sizeof(disc_resume);
     #endif
     
     #if defined(FLASH_HISTORY)&&(!defined(RW_NVMEM))
       UINT32 padr, qadr, iStart1, len1, len2;
       BYTE *pdata2;
     #endif

       if( iAddr >= (int)DRM_INFO )
       {
#ifdef RW_NVMEM
            result = WriteToNVMEM(TYPE_DRM, iAddr - DRM_INFO, bData, len);
#else  //RW_NVMEM
			//FlashEraseSector(FLASH_ERASE_SECTOR);
            
            p = (BYTE*)&disc_resume[TOTAL_RESUME+3].disc_info;

            #ifdef FLASH_HISTORY            
            padr = (UINT32)p - (UINT32)disc_resume;
            #endif            

        	for (k=0; k<len;k++)
        	{
			    j=iAddr - DRM_INFO + k;
        		*(p+j)=*bData++;
        	}
            
//swpong 2006 0404
  #ifdef FLASH_HISTORY
            result = Resume_Info_Write_Update((padr+iAddr-DRM_INFO), (BYTE*)disc_resume, i, pdata1, len);
  #else   		        
            if(is_write_flash==1)
            {
                result = Resume_Info_Write(rsm_flash_start_addr,(BYTE*)disc_resume,i);
            }     	            
  #endif //FLASH_HISTORY

#endif  //RW_NVMEM            	            
       }
       else
#endif
	   #if defined(SAME_DISC_RESUME) || defined(POWER_RESUME) || defined(RECORD_KEY)//zxb 061019
       if (iAddr >= (int)DVD_INFO_BASE)       	
       {
             if ((iAddr >= (int)DVD_INFO_BASE) && (iAddr <(int)DVD_DISC_INFO))
             {
                if ((iAddr >= (int)DVD_INFO_BASE) && (iAddr <(int)CDROM_INFO_BASE))   
                    j = iAddr - DVD_INFO_BASE;
                else if ((iAddr >= (int)CDROM_INFO_BASE) && (iAddr <(int)CDDA_INFO_BASE))   
                    j = iAddr - CDROM_INFO_BASE;
                else if ((iAddr >= (int)CDDA_INFO_BASE) && (iAddr <(int)VCD_INFO_BASE))   
                    j = iAddr - CDDA_INFO_BASE;
                else if ((iAddr >= (int)VCD_INFO_BASE) && (iAddr <(int)DVD_DISC_INFO))   
                    j = iAddr - VCD_INFO_BASE;
      
#ifdef RW_NVMEM       
/* swpong 2006 0320 */
            result = WriteToNVMEM(TYPE_RESUME, iAddr - DVD_INFO_BASE, bData, len);
#else  //RW_NVMEM
    			//FlashEraseSector(FLASH_ERASE_SECTOR);
    		//    memcpy(&disc_resume[current_resume].disc_info+j,bData,len);
    			p= (BYTE*)&disc_resume[current_resume].disc_info;

#ifdef FLASH_HISTORY            
                padr = (UINT32)p - (UINT32)disc_resume;
#endif            

    			p += j;
    		        for (k=0; k<len;k++) 
    		        {
    		            *p++ = *bData++;
    		        }    

//swpong 2006 0404
#ifdef FLASH_HISTORY
           result = Resume_Info_Write_Update((padr+j), (BYTE*)disc_resume, i, pdata1, len);
#else   		            		       
                    if(is_write_flash==1)
                    {
                        result = Resume_Info_Write(rsm_flash_start_addr,(BYTE*)disc_resume,i); 
                    }              	
#endif    
            
#endif //RW_NVMEM                               	
                  }
                  else
                  {
#ifdef RW_NVMEM
/* swpong 2006 0320 ted modified 2007 0502*/
            if(same_disc_flag==0){
                result = WriteToNVMEM(TYPE_DISC_ID, 0, bData, len);
                same_disc_flag = 1;
            }
#else //NV_MEM     	                
    			//FlashEraseSector(FLASH_ERASE_SECTOR);
    			p= (BYTE*)&disc_resume[current_resume].disc_id;
  #ifdef FLASH_HISTORY            
                padr = (UINT32)p - (UINT32)disc_resume;
  #endif            

    		       for (k=0; k<len;k++) *p++ = *bData++;
  //swpong 2006 0404
  #ifdef FLASH_HISTORY
               result = Resume_Info_Write_Update(padr, (BYTE*)disc_resume, i, pdata1, len);
  #endif               

                //memcpy(&disc_resume[current_resume].disc_id,bData,len);
                //update disc_resume_index;
    			p= (BYTE*)&disc_resume[TOTAL_RESUME].disc_id;
    			q= (BYTE*)disc_resume_index;
  #ifdef FLASH_HISTORY            
                pdata1 = q;
                padr = (UINT32)p - (UINT32)disc_resume;
                
  #endif                			
    		       for (k=0; k<sizeof(disc_resume_index);k++) *p++ = *q++;
    
                //memcpy(&disc_resume[TOTAL_RESUME].disc_id,disc_resume_index,sizeof(disc_resume_index));
  //swpong 2006 0404
  #ifdef FLASH_HISTORY
               result = Resume_Info_Write_Update(padr, (BYTE*)disc_resume, i, pdata1, sizeof(disc_resume_index));
  #else   		                        
                if(is_write_flash==1)
                {
    			    result = Resume_Info_Write(rsm_flash_start_addr,(BYTE*)disc_resume,i); 
                }    
  #endif            

#endif //NV_MEM    	    	
            }
       }
       else 
       #endif
#if defined( SETUP_IN_FLASH ) && defined( SUPPORT_TVG )
        if( iAddr >= TVG_MEM_BASE )
        {
			//FlashEraseSector( FLASH_ERASE_SECTOR );
            
            p = ((UINT8*)&disc_resume[TOTAL_RESUME+3].disc_info) + 48;
            padr = (UINT32)p - (UINT32)disc_resume; //swpong 2006 0414
        	for (k=0; k<len;k++)
        	{
			    j=iAddr - TVG_MEM_BASE + k;
        		*(p+j)=*bData++;
        	}
        	
            //swpong 2006 0404
            #ifdef FLASH_HOSTORY
               result = Resume_Info_Write_Update((padr+j), (BYTE*)disc_resume, i, pdata1, len);
            #else        	
        	  if(is_write_flash==1)
        	  {
        	    result = Resume_Info_Write( rsm_flash_start_addr, disc_resume, i );
        	  }    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -