📄 rsm_util.h
字号:
#endif
}
else
#endif
{
#ifdef SETUP_IN_FLASH
#ifdef RW_NVMEM
if (iAddr > (int)SETUP_CHECKSUM_I2C_YA)
result = WriteToNVMEM(TYPE_SETUP_W, iAddr, bData, len);
else
result = WriteToNVMEM(TYPE_SETUP_NW, iAddr, bData, len);
#else //RW_NVMEM
//result = FlashEraseSector(FLASH_ERASE_SECTOR);
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;
}
*(p+j)=*bData++;
}
//swpong 2006 0404
#ifdef FLASH_HISTORY
// Process for setup info cross two blocks
// case 1 : start in 1st, end in 1st
// case 2 : start in 1st, end in 2nd
// case 3 : start in 2nd, end in 2nd
if (iAddr < (SETUP_MENU_BASE + SIZE_PER_ID))
{
p=(BYTE*)&disc_resume[TOTAL_RESUME+1].disc_info;
padr = (UINT32)p;
iStart1 = padr - (UINT32)disc_resume + iAddr - SETUP_MENU_BASE;
if ((iAddr + len) >= (SETUP_MENU_BASE + SIZE_PER_ID))
{
len1 = ((SETUP_MENU_BASE + SIZE_PER_ID) - iAddr);
len2 = len - len1;
p=(BYTE*)&disc_resume[TOTAL_RESUME+2].disc_info;
qadr = (UINT32)p - (UINT32)disc_resume;
pdata2 = pdata1 + len1;
result = Resume_Info_Write_Update(iStart1, (BYTE *)disc_resume, i, pdata1, len1);
result = Resume_Info_Write_Update(qadr, (BYTE *)disc_resume, i, pdata2, len2);
}
else
{
result = Resume_Info_Write_Update(iStart1, (BYTE *)disc_resume, i, pdata1, len);
}
}
else // iAddr in second block
{
p=(BYTE*)&disc_resume[TOTAL_RESUME+2].disc_info;
padr = (UINT32)p - (UINT32)disc_resume + iAddr - (SETUP_MENU_BASE + SIZE_PER_ID);
//iStart1 = padr - (UINT32)disc_resume + iAddr - (SETUP_MENU_BASE + SIZE_PER_ID);
result = Resume_Info_Write_Update(padr, (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
result = WriteToI2c(0xa0,iAddr,bData,len) ;
#endif
}
if( result < 0 )
{//write fail
printf("!!!! ======== write flash error ======== !!!!!\n");
}
/*
#ifdef DVD_SERVO //ycwen 2004/08/10
extern void ClearServoCacheBuffer();
ClearServoCacheBuffer();
#endif
*/
#endif//#ifndef DISC_ID_IN_FLASH
}
#ifdef RECORD_PER_SECOND //Maoyong add pre-def condition 2004.02.20
/*
* power resume function for record every secode
*/
static inline void power_rsm_ps_RsmInfo2Flash(int clr)
{
static BYTE savetemparry[50];
BYTE *p;
//printf("!!!run save_tuner_setup ,size:%d\n",sizeof(pDSV->rsm_info[DVD_PRESTOP_RSM_ITEM]));
#ifdef SUPPORT_FILE_SYSTEM_MODE
if ((cd_type_loaded == CDROM) && (GetCurrentFileType() == CDROM_MPG))
return ;
#endif
if( is_menu() || clr )
{
resumeMSF = 0;
resumeTRK = 0;
pFsJpeg->fsnav_dir_now = 0;
pFsJpeg->fsnav_trk_now = 0;
myTime=0;
}else
{
if(cd_type_loaded!=CDDVD)
{
resumeMSF = s_msf&0x00ffffff;
resumeTRK = cd_trk_now;
if( (cd_type_loaded==CDROM)&&( !Is_MP3_STATE() ) )
{ //Jeff 20021114//nono 20021123 modified
resumeMSF = 0; //we only support MP3, not contain JPEG/Game
}
}
else
{
resumeMSF = 1;
if(play_state!=VCD_STATE_STOP)//20021014
RSM_save(0xff,DVD_PRESTOP_RSM_ITEM); //chenzhao 2006-9-13 11:41 .
}
}
if(cd_type_loaded==CDDVD)
{
int k;
int changlen=0;
BYTE first_flag=1;
p=(BYTE *)&pDSV->rsm_info[DVD_PRESTOP_RSM_ITEM];
for(k=(sizeof(pDSV->rsm_info[DVD_PRESTOP_RSM_ITEM])-1);k>=0;k--)
{
if(savetemparry[k] != p[k])
{
if(first_flag)
{
first_flag=0;
changlen=k;
}
}
savetemparry[k]=p[k];
}
WriteToI2cA0(128,p,changlen+1);
//printf("len=%d\n",changlen+1);
first_flag=(BYTE)resumeMSF; //in dvd mode resumeMSF only use flag!
WriteToI2cA0(128+sizeof(pDSV->rsm_info[DVD_PRESTOP_RSM_ITEM])+sizeof(resumeTRK),(BYTE *)&first_flag, sizeof(first_flag));
}
else
{
printf("resumeTRK=%d\n",resumeTRK);
WriteToI2cA0(128+sizeof(pDSV->rsm_info[DVD_PRESTOP_RSM_ITEM]),(BYTE *)&resumeTRK, sizeof(resumeTRK));
printf("resumeMSF:%x\n",resumeMSF);
WriteToI2cA0(128+sizeof(pDSV->rsm_info[DVD_PRESTOP_RSM_ITEM])+sizeof(resumeTRK),(BYTE *)&resumeMSF, sizeof(resumeMSF));
printf("fsnav_dir_now:%d\n", pFsJpeg->fsnav_dir_now);
//it only cdrom need record
if(cd_type_loaded==CDROM)
{
WriteToI2cA0(128 + sizeof(pDSV->rsm_info[DVD_PRESTOP_RSM_ITEM]) + sizeof(resumeTRK) + sizeof(resumeMSF),
(BYTE *)&(pFsJpeg->fsnav_dir_now), sizeof(pFsJpeg->fsnav_dir_now));
printf("fsnav_trk_now:%d\n", pFsJpeg->fsnav_trk_now);
WriteToI2cA0(128 + sizeof(pDSV->rsm_info[DVD_PRESTOP_RSM_ITEM]) + sizeof(resumeTRK) + sizeof(resumeMSF) + sizeof(pFsJpeg->fsnav_dir_now),
(BYTE *)&(pFsJpeg->fsnav_trk_now), sizeof(pFsJpeg->fsnav_trk_now));
printf("myTime:%d\n", myTime);
WriteToI2cA0(128 + sizeof(pDSV->rsm_info[DVD_PRESTOP_RSM_ITEM]) + sizeof(resumeTRK) + sizeof(resumeMSF) + sizeof(pFsJpeg->fsnav_dir_now) + sizeof(pFsJpeg->fsnav_trk_now),
(BYTE *)&myTime, sizeof(myTime));
}
}
}
#endif //end #ifdef RECORD_PER_SECOND
#ifndef DISC_ID_IN_FLASH //put them at the beginning
/*========================================================================
record resume play func's save and load realized functions prototypes
=========================================================================*/
/*
* last memory function
*/
/*
#define SETUP_MENU_BASE 0
#define DVD_INFO_BASE 128
#define CDROM_INFO_BASE 180
#define CDDA_INFO_BASE 200
#define VCD_INFO_BASE 220
//Maoyong 2004.04.07 for all resume use
#define DVD_DISC_INFO 244
#define CDDA_DISC_INFO 248
#define VCD_DISC_INFO 252
*/
//nono according to yltseng's suggestion.20050812
//Linrc move to memmap_I2C.h 2006-2-28 10:19
#define SETUP_MENU_BASE 0
/*#define DVD_INFO_BASE 110//128
#define CDROM_INFO_BASE 162//180
#define CDDA_INFO_BASE 182//200
#define VCD_INFO_BASE 187//220*/
//denghg change resume Addr because resumeTRK byte -->now UINT32 2005-12-2 01:49
//#define DVD_INFO_BASE 104//110//128
//#define CDROM_INFO_BASE 156//162//180
//#define CDDA_INFO_BASE 176//182//200
//#define VCD_INFO_BASE 184//187//220
//#define DVD_DISC_INFO 192//244
//#define CDDA_DISC_INFO 196//248
//#define VCD_DISC_INFO 200//252
#define DRM_INFO 208
#endif //#ifndef DISC_ID_IN_FLASH
#ifdef MP3_POWER_RESUME// 0//def POWER_RESUME//mp3 power resume needto be fixed later.
/**********************************************************************************************
Function : To identify whether the current MP3 disc is the one played last time
return 1 : yes
0 : no
Created by caiyh , 17:03 , Nov 5th , 2004
**********************************************************************************************/
UINT8 IsTheSameMP3 ( void )
{
UINT32 fsnav_dir_now = 0 ,
fsnav_trk_now = 0 ,
first_mp3_entry = 0 ,
MSFFlag = 0 ,
msf = 0 ;
BYTE v [ 4 ] ;
fsnav_dir_now = ReadFromI2cA0_32 ( CDROM_INFO_BASE , v , sizeof( pFsJpeg -> fsnav_dir_now ) ) ;
fsnav_trk_now = ReadFromI2cA0_32 ( CDROM_INFO_BASE + sizeof( pFsJpeg -> fsnav_dir_now ) ,
v , sizeof( pFsJpeg -> fsnav_trk_now ) ) ;
MSFFlag = ReadFromI2cA0_32 ( CDROM_INFO_BASE + sizeof( pFsJpeg -> fsnav_dir_now )
+ sizeof( pFsJpeg -> fsnav_trk_now ) , v , sizeof( MSFFlag ) ) ;
/* read the information recorded from i2c ,
annotated by caiyh , 17:03 , Nov 5th , 2004 */
first_mp3_entry = pFsJpeg -> Dir_entry [ fsnav_dir_now ] ;
fsnav_trk_now += first_mp3_entry ;
msf = FS_GetFileProperty(fsnav_trk_now,FILE_PROPERTY_LOCATION);
//msf = iso9660_file [ fsnav_trk_now ] . loc ;
if ( msf == MSFFlag )
return 1 ;
else
return 0 ;
/* according to the dir and trk recorded in i2c, to find the msf specified ,
and compare the current msf with the one read from i2c ,
annotated by caiyh , 17:03 , Nov 5th , 2004 */
}
/**************************************************************
Function : read the parameters about MP3 resume
para = 0 : dir
1 : trk
2 : msf
3 : myTime
return : the value of dir trk msf or myTime
Created by caiyh , 09:24 , Nov 22nd , 2004
**************************************************************/
UINT32 ReadSameMP3Para ( UINT8 para )
{
UINT32 result = 0 ;
BYTE v [ 4 ] ;
#if defined(STOP_RESUME_DVD_VCD)
return 0;
#endif
if ( para <=2 )
result = ReadFromI2cA0_32 ( CDROM_INFO_BASE + para * 2 , v , 2 ) ;
else if ( para == 3 )
result = ReadFromI2cA0_32 ( CDROM_INFO_BASE + 8 , v , 4 ) ;
// read parameter of mp3 resume from i2c , annotated by caiyh , 09:24 , Nov 22nd , 2004
return result ;
}
/*********************************************************
Function : clear msf about MP3 resume
Created by caiyh , 09:34 , Nov 22nd , 2004
*********************************************************/
void ClrSameMP3Flag ( void )
{
UINT32 MSFFlag = 0 ;
WriteToI2cA0 ( CDROM_INFO_BASE + 4 , ( BYTE * ) & MSFFlag , sizeof ( MSFFlag ) ) ;
// clear msf of mp3 resume in i2c , annotated by caiyh , 09:34 , Nov 22nd , 2004
}
#endif // POWER_RESUME
#if defined (POWER_RESUME)|| defined(SAME_DISC_RESUME)|| defined(RECORD_KEY)
void clr_rsm_info(void)
{//terry,2003/8/13 01:21AM
#ifdef DVD_5_DISC_RESUME//LIJD 2005-6-30 20:12
if( is_cdg_disc(0) ||(cd_type_loaded==CDROM) || ((disp_trk_now==0)&&(cd_type_loaded!=CDDVD)) )
#elif defined(STOP_RESUME_DVD_VCD)&&defined(DISC_ID_IN_FLASH)
if( is_menu() || is_cdg_disc(0) || (pe_run==0) ||(play_state==VCD_STATE_OPEN)|| (!IS_DVD_VCD_DISC()) || (need_record==CLEAR_RECORD_FLAG))//shenyj add for alco177w vcd open resume
#elif defined(POWER_OFF_NEED_DVD_RESUME)&&!defined(PARENTAL_DVD_NEDD_RESUME)//hongfeng modify 2006/2/27
if(is_menu()||is_cdg_disc(0)||(cd_type_loaded==CDROM)||((disp_trk_now==0)&&(cd_type_loaded!=CDDVD)))
#elif defined(POWER_OFF_NEED_DVD_RESUME)&&defined(PARENTAL_DVD_NEDD_RESUME) //hongfeng 2006/3/31 17:53
if(is_cdg_disc(0)||(cd_type_loaded==CDROM)||((disp_trk_now==0)&&(cd_type_loaded!=CDDVD)))
#else
// if( is_cdg_disc(0) ||(cd_type_loaded==CDROM) || ((disp_trk_now==0)&&(cd_type_loaded!=CDDVD)) )//hongfeng open.Nono mark it.20060401
if( is_menu() || is_cdg_disc(0) || (pe_run==0) ||(cd_type_loaded==CDROM) || ((disp_trk_now==0)&&(cd_type_loaded!=CDDVD)) )
#endif
{
printf("clr rsm info: %d %d %d %d\n",is_menu(),is_cdg_disc(0),pe_run,disp_trk_now);
#if defined(STOP_RESUME_DVD_VCD)&&defined(DISC_ID_IN_FLASH)
if(need_record == REAL_RECORD_VALUE)
return;
#endif
resumeMSF = 0;
resumeTRK = 0;
pFsJpeg->fsnav_dir_now=0;
pFsJpeg->fsnav_trk_now=0;
myTime=0;
}
}
static inline void same_disc_RsmInfo2Flash(int clr)
{
#ifdef FS_FILE_POWER_RESUME //qinhua,2006-6-13 05:03下午
Resume_hl_trk = 0; //add by jiangtao for resume hl erro 2006-9-26 9:27
#endif
#ifdef SUPPORT_WHEN_PLAY_MENU_NOT_SAVE_DISC
if(is_menu())
{
if(cd_type_loaded==CDDVD)
{
if((disp_time ==0)||(get_tt_info(DISP_TT) == 0)
||(get_tt_info(DISP_CH)==0))
return;
}
else
return;
}
#endif//end=> #define SUPPORT_WHEN_PLAY_MENU_NOT_SAVE_DISC
#ifdef SUPPORT_TEN_DISC_RESUME //linrc add for 10 disc resume play 2005-5-12 10:09
UINT32 info1; //if you have any problem,see DOC file
BYTE *p;
UINT32 MSFFlag = 0 ;
UINT16 pos;
BYTE Resume_Now;
BYTE Resume_Index;
BYTE i;
UINT32 Rom_Info1;
if(clr){};
if(cd_type_loaded==CDUNKNOWN) return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -