UiPlayProcess.c
上传用户:hjhsjcl
上传日期:2020-09-25
资源大小:11378k
文件大小:19k
源码类别:

压缩解压

开发平台:

C++ Builder

  1. /*==========================================================================
  2. Copyright (c) 2004 ALi Corporation. All Rights Reserved
  3. File: 
  4. content: 
  5. History: Created by Walace2006/05/29
  6. ==========================================================================*/
  7. #define _UI_PLAY_PRC_H_
  8. #include <DP8051XP.H>
  9. #include "TypeDef.h"
  10. #include "Const.h"
  11. #include "Reg5661.h"
  12. #include "Common.h"
  13. #include "UiCommon.h"
  14. #include "SysStrDef.h"
  15. //#include "Key.h"
  16. #include "UiPlayCommon.h"
  17. #include "SaveSetting.h"
  18. #if(_PM_DVR_)
  19. #include "ImaAdpcm.h"
  20. #endif
  21. #include "UiPlayProcess.h"
  22. #include "Oled.h"
  23. #include "OledString.h"
  24. #include "Playback.h"
  25. #include "NandFlash.h"
  26. #include "Idma.h"
  27. #include "FileSystem.h"
  28. //#include "OLED.h"
  29. #include "ClassDataBase.h"
  30. #include "OledString.h"
  31. void UiPlayStartInitial(void) large;
  32. BOOL UiGetSlideShowFile(void);
  33. void PlayConsumeVarInitial(void);
  34. BYTE PlayEofProcess(BYTE bPeCommand);
  35. #if(SETTING_FOR_ICE_START)
  36. void PlayProcessInitialForIce(void);
  37. #endif
  38. #define gxbLastDirNameBuff gxbNameBuf //tne 512 tag
  39. #define gxbLastFileNameBuff  gxbStringBuffer
  40. //XBYTE  gxbLastFileDepth;
  41. ////////////////////////////////////////////////////////////////////////////////////
  42. /////////////////////////////////  Ui Header End ///////////////////////////////////
  43. ////////////////////////////////////////////////////////////////////////////////////
  44. /*--------------------------------------------------------------------------
  45. Description:
  46. Main program for TARGET Playback
  47. Arguments:
  48. Global arguments:
  49. Returns: 
  50. --------------------------------------------------------------------------*/
  51. main(void)
  52. {
  53. BYTE bPeCommand;
  54. bPeCommand=obDCV_INT_FLAG;
  55. EA=1;
  56. #if(ICE_REAL_MODE) //vicky061001#2 Debug Play
  57. EnableTimer0();
  58. IE=0x83;
  59. #endif
  60. PlayConsumeVarInitial();
  61. switch(gxbPlayProcessCmd&PLAY_PROC_TYPE)
  62. {
  63. case PLAY_PROC_INIT:
  64. UiPlayStartInitial();
  65. if(gxbModuleState!=(MODULE_PLAY|MODULE_PRC_REC_KEY_END))
  66. gxbModuleState=(MODULE_PLAY|MODULE_PRC_INIT); //Walace061222#1
  67. break;
  68. case PLAY_PROC_EOF_CTRL:
  69. KeepMemory(RESTORE_MEMORY);
  70. gpstFileIndex=&stFsFileInf; //Vicky050321#2
  71. bPeCommand=PlayEofProcess(gxbPlayProcessCmd&PLAY_PROC_CMD);
  72. PlayEngine(bPeCommand);
  73. gxbModuleState&=(~MODULE_SUB);
  74. gxbModuleState|=MODULE_PRC_EOF_CTRL;
  75. KeepMemory(KEEP_MEMORY);
  76. break;
  77. case PLAY_PROC_PE_CMD:
  78. KeepMemory(RESTORE_MEMORY);
  79. gpstFileIndex=&stFsFileInf; //Walace061206#1
  80. PlayEngine(gxbPlayProcessCmd&PLAY_PROC_CMD);
  81. if((gxbModuleState&MODULE_SUB)==MODULE_FILE_DEL)
  82. {
  83. gxbModuleState&=(~MODULE_SUB);
  84. gxbModuleState|=MODULE_DEL_AFTER_PRC;
  85. KeepMemory(KEEP_MEMORY);
  86. }
  87. else
  88. gxbModuleState=MODULE_PLAY;
  89. break;
  90. default:
  91. break;
  92. }
  93. if(gxbErrCode!=ERR_NO_ERROR)  //Walace061025#1
  94. gxbLastErrCode=gxbErrCode;
  95. switch(gxbModuleState&MODULE_MASTER)
  96. {
  97. case MODULE_PLAY_MENU:
  98. #if(_PM_DVR_)
  99. LoadProgram(PM_DVR_MENU,BASIC_CODE_ONLY);  
  100. #else
  101. LoadProgram(PM_PLAY_MENU,BASIC_CODE_ONLY);  
  102. #endif
  103. break;
  104. case MODULE_PLAY:
  105. #if(_PM_DVR_)
  106. LoadProgram(PM_PLAY_DVR,BASIC_CODE_ONLY);  
  107. #else
  108. LoadProgram(PM_PLAY_FAT_LARGE,BASIC_CODE_ONLY);  
  109. #endif
  110. break;
  111. case MODULE_PLAY_FLIST:
  112. #if(_PM_DVR_)
  113. LoadProgram(PM_DVR_FILE_LIST,BASIC_CODE_ONLY);  
  114. #else
  115. LoadProgram(PM_PLAY_FILE_LIST,BASIC_CODE_ONLY);  
  116. #endif
  117. break;
  118. #if(_PM_DVR_)
  119. case MODULE_REC_MENU:
  120. LoadProgram(PM_DVR_REC_MENU,BASIC_CODE_ONLY);  
  121. break;
  122. #endif
  123. #if(!_PM_DVR_)
  124. case MODULE_PLAY_CLIST:
  125. LoadProgram(PM_CLASS_LIST,BASIC_CODE_ONLY);  
  126. break;
  127. case MODULE_SLIDE_SHOW:
  128. LoadProgram(PM_SLIDE_SHOW,BASIC_CODE_ONLY);  
  129. break;
  130. #endif
  131. }
  132. }
  133. void InitFsStrPtToRoot(void)
  134. {
  135. gpstFileIndex->pbFileName=gxbFileName;
  136. gpstFileIndex->pbLongFileName=gxbLongFileName;
  137. gpstFileIndex->dwFileSize=0;
  138. gpstFileIndex->bPathDepth=0;
  139. gpstFileIndex->dwDirStartSec=gxdwRoot;
  140. gpstFileIndex->dwDirSec[0]=gxdwRoot;
  141. gpstFileIndex->wDirOffset[0]=0;
  142. }
  143. #if(UI_USE_SLIDE_SHOW)
  144. BOOL UiGetSlideShowFile(void)
  145. {    
  146. if(gbFsUnableUse)  //Walace060629#2
  147. return FALSE;
  148. //3 1.find the correct directory "SLIDESHOW"
  149.        if(!FsOpenFile(FIRST_DIR_IN_DIR))
  150. return FALSE;
  151.     while(!StrComp(gxbFileName,"SLS      ", 8))
  152. if(!FsOpenFile(NEXT_DIR_IN_DIR))
  153. return FALSE;
  154. }
  155. FsChangeDir(ENTER_DIR);
  156.    
  157. //3 2. find the correct file "slide.sls"
  158.        if(!FsOpenFile(FIRST_FILE_IN_DIR))
  159. return FALSE;
  160.    
  161. while(!StrComp(gxbFileName+8,"sls", 3))
  162. {
  163. if(!FsOpenFile(NEXT_FILE_IN_DIR))
  164. return FALSE;
  165. }
  166. return TRUE;
  167. }
  168. #endif
  169. void UiSetZeroFile(void)
  170. {
  171. gxwTotalFileInAll=0;
  172. gxwNumTotalFiles=0;
  173. gxwCurrentFileNum=0;
  174. gxwTotalFileInDir=0;
  175. gxwTotalDirInDir=0;
  176. gxwFileNumInFileList=0;
  177. gxwCurtFileInAll=0;
  178. gxwCurtFileInDir=0;
  179. }
  180. void PlayGlobalVarInitialize(void) //Walace060518
  181. {
  182. gxbMemContorlSts=0;
  183. gxbUiMenuMainStates=UI_NO_MENU;
  184. gxbErrCode=0;
  185. gxbLastErrCode=0;       
  186. gxwCurrentPlayTime=0;
  187. gxwMusicTotalTime=0; 
  188. gxwUiLastBitRate=0;
  189. gxwAutoOffCounter=0;
  190. gxbTargetVolume = FADEOUT_VOL;
  191. gxbLastVolume = FADEOUT_VOL;
  192. gxbSysState=S_PE_WAIT;
  193. gxbAbRepeatSts=AB_REPT_RESET;
  194. gxbFastPlaySts=PLAY_SPEED_NORMAL;
  195. //Vicky061001#1
  196. #if(FF_SOUND_EN)
  197. gxbFFSound=TRUE;
  198. #else
  199. gxbFFSound=FALSE;
  200. #endif
  201. //End
  202. gxbLrcState=0;
  203. gxbLastLyrcBuf[0]=STRING_TYPE_ASCII;
  204. gfDelFile=FALSE;
  205. fGoPrevNext=FALSE;
  206. gfFillDspBufEn=FALSE;
  207. gfFirstResume=FALSE; //tne 2005/11/21 #1
  208. gfChangeMusic=FALSE;
  209. //tne 2005/08/11
  210. gxbIntroMode = 0; //Tne051228#1
  211. gfIntroPlaying=INTRO_NOP;
  212. gfDspCtrlCdc=FALSE;
  213. gfCdcAlreadyInit = FALSE;
  214. #if(_PM_DVR_)
  215. SetSysSpeed(SYS_SPEED_NORMAL);
  216. MCU_ACCESS_CODEC_I2S_EN(); /*Renshuo050216#A*/
  217. obALGPAREG |= 0x04; 
  218. obALGPAREG |= 0x01;
  219. obALGPAREG |= 0x02;
  220. MCU_ACCESS_CODEC_I2S_DIS(); /*Renshuo050216#A*/
  221. SetSysSpeed(SYS_SPEED_UP_UI);
  222. #endif
  223. gxbPeDispCmd=UI_PE_NOP;
  224. gxbLongFileName[0]=STRING_TYPE_UNICODE;
  225.        UiSetZeroFile();    
  226. gpstFileIndex=&stFsFileInf; 
  227. InitFsStrPtToRoot();
  228. gpstFileIndex=&stUiFileListData; 
  229. InitFsStrPtToRoot();
  230. }
  231. void PlayLoadNandSetting(void)
  232. {
  233. BYTE bI;
  234. #if(_PM_DVR_)
  235.     BYTE bRecSource;
  236.     #endif
  237. NandPrivateEn();
  238. ReadSettingData(FS_DATA_0_0);
  239. //NandPrivateDis(); //tne 2006/01/10
  240. #if(_PM_DVR_)
  241. /////tne 2006/01/16/////
  242. gxwEqMode=gxbFsData[SRAM_DVR_EQ+gxwOffsetDataSec];
  243. gxw3DMode=gxbFsData[SRAM_DVR_3D+gxwOffsetDataSec];
  244. gxbUserDefEq[0]=gxbFsData[SRAM_DVR_USER_EQ_LV1+gxwOffsetDataSec];
  245. gxbUserDefEq[1]=gxbFsData[SRAM_DVR_USER_EQ_LV2+gxwOffsetDataSec];
  246. gxbUserDefEq[2]=gxbFsData[SRAM_DVR_USER_EQ_LV3+gxwOffsetDataSec];
  247. gxbUserDefEq[3]=gxbFsData[SRAM_DVR_USER_EQ_LV4+gxwOffsetDataSec];
  248. gxbUserDefEq[4]=gxbFsData[SRAM_DVR_USER_EQ_LV5+gxwOffsetDataSec];
  249. gxbUserDefEq[5]=gxbFsData[SRAM_DVR_USER_EQ_ALL+gxwOffsetDataSec];
  250. ////////////////////////
  251. gxbRepeatMode=gxbFsData[SRAM_DVR_REPEAT_MODE+gxwOffsetDataSec];
  252. gfPlayAutoSearchFile = ((gxbRepeatMode & REPEAT_SETTING_DIR_FLAG_J)>>7);
  253. gxbRepeatMode &= REPEAT_SETTING_MODE;
  254. gxbRecOption=gxbFsData[SRAM_VAD_MODE+gxwOffsetDataSec]; //tne 2006/01/16
  255. //Renshuo050603#A
  256. gxdwLastFileSec=*((DWORD*)&gxbFsData[SRAM_DVR_LAST_FILESECTOR+gxwOffsetDataSec]);
  257. gxdwLastFileSize=*((DWORD*)&gxbFsData[SRAM_DVR_LAST_FILESIZE+gxwOffsetDataSec]);
  258. gxdwLastFrameNum=*((DWORD*)&gxbFsData[SRAM_DVR_LAST_FRAMENUM+gxwOffsetDataSec]);
  259. gxbSpectrumMode=gxbFsData[SRAM_SPECTRUM_MODE+gxwOffsetDataSec];
  260. gxwLastPlayTime=*((WORD*)&gxbFsData[SRAM_LAST_DVR_TIME+gxwOffsetDataSec]);
  261. gxbPlayClassMode=P_CLASS_MODE_FILE; //UI for class
  262. #if(_PEDOMETER_Mode_)
  263. gxbCustomerAge=gxbFsData[SRAM_CUSTOMERAGE+gxwOffsetDataSec];
  264. gxbUserStanding=gxbFsData[SRAM_CUSTOMERSTATURE+gxwOffsetDataSec];
  265. gxbUserWeight=gxbFsData[SRAM_CUSTOMERWEIGHT+gxwOffsetDataSec];
  266. gxbWalkingStride=gxbFsData[SRAM_CUSTOMERSTRIDE+gxwOffsetDataSec];
  267. gxbCustomerSEX=gxbFsData[SRAM_CUSTOMERSEX+gxwOffsetDataSec];
  268. #endif
  269. #else
  270. /////tne 2006/01/16/////
  271. gxwEqMode=gxbFsData[SRAM_EQ+gxwOffsetDataSec];
  272. gxw3DMode=gxbFsData[SRAM_3D+gxwOffsetDataSec];
  273. gxbUserDefEq[0]=gxbFsData[SRAM_USER_EQ_LV1+gxwOffsetDataSec];
  274. gxbUserDefEq[1]=gxbFsData[SRAM_USER_EQ_LV2+gxwOffsetDataSec];
  275. gxbUserDefEq[2]=gxbFsData[SRAM_USER_EQ_LV3+gxwOffsetDataSec];
  276. gxbUserDefEq[3]=gxbFsData[SRAM_USER_EQ_LV4+gxwOffsetDataSec];
  277. gxbUserDefEq[4]=gxbFsData[SRAM_USER_EQ_LV5+gxwOffsetDataSec];
  278. gxbUserDefEq[5]=gxbFsData[SRAM_USER_EQ_ALL+gxwOffsetDataSec];
  279. ////////////////////////
  280. gxbRepeatMode=gxbFsData[SRAM_REPT_MODE+gxwOffsetDataSec];
  281. #if(_PEDOMETER_Mode_)
  282. gxbCustomerAge=gxbFsData[SRAM_CUSTOMERAGE+gxwOffsetDataSec];
  283. gxbUserStanding=gxbFsData[SRAM_CUSTOMERSTATURE+gxwOffsetDataSec];
  284. gxbUserWeight=gxbFsData[SRAM_CUSTOMERWEIGHT+gxwOffsetDataSec];
  285. gxbWalkingStride=gxbFsData[SRAM_CUSTOMERSTRIDE+gxwOffsetDataSec];
  286. gxbCustomerSEX=gxbFsData[SRAM_CUSTOMERSEX+gxwOffsetDataSec];
  287. #endif
  288. gfPlayAutoSearchFile = ((gxbRepeatMode & REPEAT_SETTING_DIR_FLAG_J)>>7);
  289. gxbRepeatMode &= REPEAT_SETTING_MODE;
  290. //Renshuo050603#A
  291. gxdwLastFileSec=*((DWORD*)&gxbFsData[SRAM_PLAY_LAST_FILESECTOR+gxwOffsetDataSec]);
  292. gxdwLastFileSize=*((DWORD*)&gxbFsData[SRAM_PLAY_LAST_FILESIZE+gxwOffsetDataSec]);
  293. gxdwLastFrameNum=*((DWORD*)&gxbFsData[SRAM_PLAY_LAST_FRAMENUM+gxwOffsetDataSec]);
  294. gxbSpectrumMode=gxbFsData[SRAM_SPECTRUM_MODE+gxwOffsetDataSec];
  295.          gxwLastPlayTime=*((WORD*)&gxbFsData[SRAM_LAST_PLAY_TIME+gxwOffsetDataSec]);
  296. #if(UI_USE_SLIDE_SHOW)
  297.          gxbSlideShowSet = gxbFsData[SRAM_SLIDE_SHOW_DATA+gxwOffsetDataSec];   //Walace060220#1
  298. #endif
  299.   
  300. //Ui for class
  301. #if(UI_USE_CLASS_LIST)
  302. //tne CDB for SD
  303. if( ((gxbStorage==STOR_NAND)&&(gxbFsData[SRAM_MSC_MODIFY_FLAG+gxwOffsetDataSec]==MSC_DATA_NOT_MODIFIED)) ||
  304. ((gxbStorage!=STOR_NAND)&&(gxbFsData[SRAM_SD_MODIFY_FLAG+gxwOffsetDataSec]==SD_DATA_NOT_MODIFIED)) )
  305. {
  306. gxbPlayClassMode=gxbFsData[SRAM_PLAY_CLASS_MODE+gxwOffsetDataSec];
  307. gdwCdbAddPoint=*((DWORD*)&gxbFsData[SRAM_CLASS_ADDR_POINT+gxwOffsetDataSec]);
  308. gxwCurtFileInAllClass=*((WORD*)&gxbFsData[SRAM_FILE_NUM_IN_ALL_CLASS+gxwOffsetDataSec]);
  309. gxwTotalFileInAllClass=*((WORD*)&gxbFsData[SRAM_TOTAL_NUM_IN_ALL_CLASS+gxwOffsetDataSec]);
  310. gxwTotalFileInClass=*((WORD*)&gxbFsData[SRMA_TOTAL_NUM_IN_CLASS+gxwOffsetDataSec]);
  311. //tne 2006/01/10 //Force to use file play to avoid playing illegal file if user don't power off safely
  312. if(gxbPlayClassMode!=P_CLASS_MODE_FILE)
  313. {
  314. gxbFsData[SRAM_PLAY_CLASS_MODE+gxwOffsetDataSec]=P_CLASS_MODE_FILE;
  315. FsWrite(SAVE_SETTING_NAND_ADD,1,FS_DATA_0_0);
  316. NandFinishJob();
  317. }
  318. }
  319. else
  320. #endif
  321. {
  322. gxbPlayClassMode=P_CLASS_MODE_FILE;
  323. gdwCdbAddPoint=CDB_NULL_POINT;
  324. }
  325. #endif
  326. #if(_PM_DVR_)
  327. //restore last record file
  328. gxbLastDirNameBuff[0]=0;
  329. for(bRecSource=0;bRecSource<REC_DIR_NUM;bRecSource++)
  330. {
  331. //Only compare 2 words here for code size & speed
  332. if( (gxbFsData[SRAM_LAST_DVR_FILE+gxwOffsetDataSec]==gxbUiFileName[bRecSource][0]) &&
  333. (gxbFsData[SRAM_LAST_DVR_FILE+gxwOffsetDataSec+1]==gxbUiFileName[bRecSource][1]) )
  334. {
  335. for(bI=0;bI<11;bI++)
  336. {
  337. gxbLastDirNameBuff[bI]=gxbUiDirName[bRecSource][bI];
  338. gxbLastFileNameBuff[bI]=gxbFsData[SRAM_LAST_DVR_FILE+bI+gxwOffsetDataSec];
  339. }
  340. break;
  341. }
  342. }
  343. gxbLastFileDepth=1;
  344. #else
  345. for(bI=0;bI<(MAX_PATH_DEPTH-1)*11;bI++)
  346. gxbLastDirNameBuff[bI]=gxbFsData[SRAM_PLAY_PATH_START+bI+gxwOffsetDataSec];
  347. for(bI=0;bI<11;bI++)
  348. gxbLastFileNameBuff[bI]=gxbFsData[SRAM_LAST_PLAY_FILE+bI+gxwOffsetDataSec];
  349. gxbLastFileDepth=gxbFsData[SRAM_PLAY_PATH_DEPTH+gxwOffsetDataSec];
  350. #endif
  351. NandPrivateDis(); //tne 2006/01/10
  352. #if(!UI_USE_FILE_LIST)
  353. gfPlayAutoSearchFile=TRUE;
  354. #endif
  355. }
  356. void UiPlayStartFileInitial()
  357. {
  358. BYTE bI;
  359. gpstFileIndex=&stUiFileListData;
  360. InitFsStrPtToRoot();
  361. gxwTotalFileInAll=UiCountFileInDir(COUNT_ALL_PLAYBACK);
  362. if(gxwTotalFileInAll==0)
  363. {
  364. UiSetZeroFile();
  365. gxbErrCode=ERR_FS_NO_FILE_FOUND;
  366. goto FINISH_LAST_PLAY_JOB;
  367. }
  368. if(gxbPlayClassMode!=P_CLASS_MODE_FILE)
  369. goto FINISH_LAST_PLAY_JOB;
  370. //Search last play dir
  371. InitFsStrPtToRoot();
  372. #define bDepth bI 
  373. for(bDepth=1;bDepth<=gxbLastFileDepth;bDepth++)
  374. {
  375. if(UiSearchFile(ALL_DIR_IN_DIR,(PBYTE)(gxbLastDirNameBuff+(bDepth-1)*11)))
  376. { FsChangeDir(ENTER_DIR);   }
  377. else
  378. { goto SET_TO_FIRST_PLAYBACK; }
  379. }
  380. #undef bDepth
  381. //search last play file
  382. gpstFileIndex=&stFsFileInf;
  383. InitFsStrPtToRoot();
  384. FsOpenFile(FIRST_PLAYBACK);
  385. gxwCurtFileInAll=1;
  386. gxwCurtFileInDir=0;
  387. while(1)
  388. {
  389. //check the same dir
  390. if(stFsFileInf.dwDirStartSec==stUiFileListData.dwDirStartSec)
  391. {
  392. //if(gxwCurtFileInDir==0) //first file in the dir //tne 2005/11/09 not need
  393. // wFirstNumInDir=gxwCurtFileInAll;
  394. gxwCurtFileInDir++;
  395. for(bI=0;bI<11;bI++)
  396. {
  397. if(gxbLastFileNameBuff[bI]!=gxbFileName[bI])
  398. break;
  399. }
  400. if(bI==11) //find the same file
  401. { //OLED
  402. gfFirstResume=TRUE; //tne 2005/08/19
  403. break;
  404. }
  405. }
  406. if(gxwCurtFileInAll>=gxwTotalFileInAll) //not found the same file
  407. goto SET_TO_FIRST_PLAYBACK;
  408. FsOpenFile(NEXT_PLAYBACK);
  409. gxwCurtFileInAll++;
  410. }
  411. goto FINISH_GET_A_FILE;
  412. SET_TO_FIRST_PLAYBACK:
  413. gpstFileIndex=&stFsFileInf;
  414. InitFsStrPtToRoot();
  415. FsOpenFile(FIRST_PLAYBACK);
  416. gxwCurtFileInAll=1;
  417. gxwCurtFileInDir=1;
  418. // Here, stFsFileInf -> (last) playback file
  419. //  stUiFileListData -> (last) playback file path (anyfile)
  420. FINISH_GET_A_FILE:
  421. stUiFileListData=stFsFileInf; //all point to playback file
  422. UiGetFileListNum();
  423. if(gfPlayAutoSearchFile)
  424. {
  425. gxwNumTotalFiles=gxwTotalFileInAll;
  426. gxwCurrentFileNum=gxwCurtFileInAll;
  427. }
  428. else
  429. {
  430. gxwNumTotalFiles=gxwTotalFileInDir;
  431. gxwCurrentFileNum=gxwCurtFileInDir;
  432. }
  433. gxwFileNumInFileList=gxwCurtFileInDir+gxwTotalDirInDir;
  434. FsOpenFile(RELOAD_FILE_NAME);
  435. // if(gxbErrCode==ERR_FS_NO_FILE_FOUND) //clean not found file error
  436. // gxbErrCode=ERR_NO_ERROR;
  437. FINISH_LAST_PLAY_JOB:
  438. gpstFileIndex=&stFsFileInf;
  439. //tne CDB
  440. #if(!_PM_DVR_ & UI_USE_CLASS_LIST)
  441. CdbGetDbSector();
  442. if( (gxwTotalFileInAll>0) && (gdwCdbAddPoint!=CDB_NULL_POINT) )
  443. {
  444. if(gxbPlayClassMode==P_CLASS_MODE_FILE)
  445. { CdbSearchData(CDB_SEARCH_FIRST_TITLE); }
  446. else
  447. {
  448. CdbGetClassHeader(gdwCdbAddPoint);
  449. gxwCurtFileInClass=stCdbClassInfo.wItemNum;
  450. UiOpenClassFile();
  451. stUiFileListData=stFsFileInf;
  452. if(gfPlayAutoSearchFile)
  453. {
  454. gxwNumTotalFiles=gxwTotalFileInAllClass;
  455. gxwCurrentFileNum=gxwCurtFileInAllClass;
  456. }
  457. else
  458. {
  459. gxwNumTotalFiles=gxwTotalFileInClass;
  460. gxwCurrentFileNum=gxwCurtFileInClass;
  461. }
  462. gfFirstResume=TRUE;
  463. }
  464. }
  465. #endif
  466. //vicky060926#1
  467. if(gfFirstResume)
  468. {
  469. if( (gxdwLastFileSec == 0) 
  470. || (gxdwLastFileSec>= gpstFileIndex->dwFileTotalSector) 
  471. || (gpstFileIndex->dwFileTotalSector != gxdwLastFileSize)
  472. || (gxwLastPlayTime==0)
  473. )
  474. {
  475. if((gxdwLastFileSec) &&(gxdwLastFileSec==gpstFileIndex->dwFileTotalSector)) //vicky070320
  476. {
  477. gxdwLastFileSec--;
  478. }
  479. else
  480. gfFirstResume=FALSE;
  481. }
  482. }
  483. //End
  484. if(gfFirstResume)
  485. gxwCurrentPlayTime=gxwLastPlayTime;
  486. else
  487. gxdwLastFileSize = 0; //cancel resume
  488. }
  489. void UiPlayStartInitial(void) large
  490. {
  491. if(gbFsUnableUse)
  492. {
  493. //gxbLastErrCode=ERR_FS_INIT_ERROR;
  494. //vicky070103#3
  495. gxbLastErrCode=ERR_INIT_FS_ERR; 
  496. OledShowIconNew(2,IM_BG_CLEAR_TO_BLACK,0,0);
  497. //OLED_CLEAR_ALL();
  498. //End
  499. UiCheckIniErr();
  500. return;
  501. }
  502. #if(UI_USE_CHK_CARD)
  503. if(gxbStorage!=STOR_NAND)
  504. UiCheckCardRemoved();
  505. #endif
  506. PlayGlobalVarInitialize();
  507.  
  508. PlayLoadNandSetting(); 
  509. PeInit();
  510. //Walace061030#1 start
  511. #if(UI_USE_SLIDE_SHOW)  
  512. gpstFileIndex=&stUiFileListData;
  513. InitFsStrPtToRoot();
  514.        if(UiGetSlideShowFile())  
  515.        {
  516. gxdwSlsFileCurClu=gpstFileIndex->dwFileCurClu;
  517. gxdwSlsFileStartClu=gpstFileIndex->dwFileStartClu;
  518. gxdwSlsFileTotalSector=gpstFileIndex->dwFileTotalSector;       
  519.        }
  520. else
  521. {
  522. gxdwSlsFileCurClu = 0;
  523. gxdwSlsFileStartClu = 0;
  524. gxdwSlsFileTotalSector = 0;
  525. }
  526. #endif
  527. //Walace061030#1 end
  528. #if(DRM_MODE_EN)
  529. UiSearchMtpPropFile();
  530. #else
  531. gxbExceptFileAttrib=(FILE_ATTR_LABEL|FILE_ATTR_SYSTEM|FILE_ATTR_HIDDEN);
  532. #endif
  533. UiPlayStartFileInitial();
  534. if(gxbErrCode==ERR_NO_ERROR)
  535. {
  536. PeStart();
  537. UiRndPlayInit();
  538. }
  539. //if(gxbErrCode!=ERR_NO_ERROR) //tne 2006/07/21 #1 //Walace061025#1
  540. // gxbLastErrCode=gxbErrCode;
  541. }
  542. void PlayConsumeVarInitial(void)
  543. {
  544. // set default common value
  545. gxbCheckBattCounter=0;
  546. gxbBtyReTestNum=0;
  547. gxfSourceUnicode=STRING_TYPE_ASCII;
  548. gfPwOffStop=FALSE;
  549. gxbBtyLowNum=0;
  550. gxbPwOffCounter = 0;
  551. gxbLcdLimitCol=MAX_COLNUM;
  552. #if(SYS_USE_KEY_HOLD)
  553. gfLastKeyLocked=KEY_UNLOCK;
  554. #endif
  555. UiFileListFileType=UI_FILE_LIST_PLAYBACK;
  556. #if(UI_USE_SLIDE_SHOW) //Walace060306#2
  557. gxbSlsCounter=0;
  558. #endif
  559. OLED_DISP_MASK_INIT();
  560. gxbLastFileDepth=0;
  561. }
  562. #if(SETTING_FOR_ICE_START)
  563. void PlayProcessInitialForIce(void)
  564. {
  565. SettingForIceStart();
  566. NandInit();
  567. FsInit();
  568. OledInit() ;
  569.        FontTableInit();
  570. LoadStringTableIndex();
  571. LoadTransTableIndex();
  572. EnableTimer0();
  573. #if(_PM_DVR_)
  574. gxbDeviceMode=DEV_DVR;
  575. #else
  576. gxbDeviceMode=DEV_MUSIC;
  577. #endif
  578. gxwProgramIndex=PM_PLAY_PRC;
  579. gfIntroPlaying=INTRO_NOP;
  580. gxbIntroMode=0;
  581. gxwEqMode=EQ_NORMAL;
  582. gxbRepeatMode=NO_REPEAT;
  583. gxw3DMode=SOUND_3D_DEFAULT;
  584. gxwLastTotalFiles=0;
  585. gdwSampleNum=0;
  586. gxbExtRtc=0;
  587. }
  588. #endif
  589. BYTE PlayEofProcess(BYTE bPeCommand)
  590. {
  591. if(bPeCommand==P_PLAYBACK)
  592. return bPeCommand;
  593. if((bPeCommand==P_NEXT)||(bPeCommand==P_PREV)||(bPeCommand==P_RESTART)) //tne 2006/02/15 #1
  594. {
  595. if(bPeCommand!=P_RESTART) //tne 2006/02/15 #1
  596. {
  597. #if(UI_USE_RND_PLAY_ONE_EN)
  598. if( (gxbRepeatMode==RND_ALL_REPEAT) || (gxbRepeatMode==RND_REPEAT) )
  599. #else
  600. if(gxbRepeatMode==RND_ALL_REPEAT)
  601. #endif
  602. bPeCommand=UiSelectRandMusic(bPeCommand);
  603. else
  604. bPeCommand=UiSelectNextMusic(bPeCommand);
  605. }
  606. gxbAbRepeatSts=AB_REPT_RESET;
  607. }
  608. switch(bPeCommand)
  609. {
  610. case P_NEXT:
  611. case P_RESTART:
  612. case P_LAST:
  613. gxbFileNumSearchMode=FNUM_SEARCH_NEXT_MODE;
  614. gfChangeMusic=TRUE;
  615. break;
  616. case P_FIRST:
  617. case P_PREV:
  618. gxbFileNumSearchMode=FNUM_SEARCH_PREV_MODE;
  619. gfChangeMusic=TRUE;
  620. break;
  621. }
  622. if(gfChangeMusic) //tne 2005/11/18
  623. gfFirstResume = FALSE;
  624. return bPeCommand;
  625. }