📄 rsm_util.h
字号:
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 + -