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

压缩解压

开发平台:

C++ Builder

  1. /*==========================================================================
  2. Copyright (c) 2004 ALi Corporation. All Rights Reserved
  3. File: UiFileList.c
  4. content: user interface for play module
  5. History: Created by TNE 2005/6/1
  6. ==========================================================================*/
  7. #define _UI_FLIST_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 "UiSysStr.h"
  16. #include "Key.h"
  17. #include "SaveSetting.h"
  18. #include "Playback.h"
  19. #include "NandFlash.h"
  20. #include "Idma.h"
  21. #include "FileSystem.h"
  22. #include "ExtCodec.h"
  23. #include "IntCodec.h"
  24. #include "UiPlayCommon.h"
  25. #include "UiFileList.h"
  26. #include "OledString.h"
  27. #include "OLED.h"
  28. #include "IconDefine.h"
  29. #include "ClassDataBase.h"
  30. #include "UiPlayDel.h"
  31. void UiErrHandle(void) large;
  32. //void UiDispDelYesNoMenu(void) large;
  33. void UiCountFileAfterDel(void) large;
  34. void UiFileListPlayMusic(void) large;
  35. void UiSaveCurPlayPath(void) large;
  36. void UiFileListSwapJob(void);
  37. void UiGoSelectDvrDir(void) large;
  38. void UiGoSelectDvrDir(void) large;
  39. void UiGoSelectFileList(void) large;
  40. //void UiDispSelListMenu(void) large;   // Jeff check if mark, yes
  41. void UiGoClassList(void) large;
  42. void UiGoRootFileList(void) large;
  43. void UiGetDvrDirNum(void) large;
  44. void UiFileListDvrLightMoe(BOOL bflag) large; // WHH #13 301_070106
  45. void UiGoBackMusicMenu(void); //tne 2007/01/06 #1
  46. API void UiPlayFileListDispCtrl(BYTE bStatus); //Walace060606#1 PlayProcess
  47. XWORD gxwOldTotalDirInDir;
  48. XWORD gxwOldTotalFileInDir;
  49. BOOL gfPeStartAfterDel;
  50. XBYTE gxbDvrDirNum; //tne 2005/10/09
  51. ////////////////////////////////////////////////////////////////////////////////////
  52. /////////////////////////////////  Ui Header End ///////////////////////////////////
  53. ////////////////////////////////////////////////////////////////////////////////////
  54. void main(void)
  55. {
  56. BYTE bKey;
  57. BYTE bPeCommand;
  58. //Walace060607#1 PlayProcess
  59. if((gxbModuleState&MODULE_SUB)==MODULE_PRC_EOF_CTRL||
  60.      (gxbModuleState&MODULE_SUB)==MODULE_DEL_AFTER_PRC||
  61.               (gxbModuleState&MODULE_SUB)==MODULE_NAND_RTN_RESOTRE) //NandRestore
  62. {
  63. KeepMemory(RESTORE_MEMORY);
  64. }
  65. EA = 1;
  66. #if(ICE_REAL_MODE) //vicky061001#2 Debug Play
  67. EnableTimer0();
  68. IE=0x83;
  69. #endif
  70. bPeCommand=P_NOP;
  71. bKey=KEY_INVALID;
  72. SetSysSpeed(0x08);
  73. #if(_PM_PLAY_)
  74. PeFillDspBuf();
  75. #endif
  76. #if(ENABLE_SD_FUNCTION&SD_DET_USE_INT1) //Nick060808
  77. gbDdmCheck = obGPIO_INT_FLAG&obGPIO_INT_MASK;//use gbDdmCheck as temp, ok la
  78. if(gbDdmCheck&0x20)//gpiod5 // sd init flase anyway, even SD/MMC plug in
  79. gfSDinit = FALSE;
  80. #endif
  81. if((gxbModuleState&MODULE_SUB)==MODULE_PRC_EOF_CTRL||
  82.      (gxbModuleState&MODULE_SUB)==MODULE_DEL_AFTER_PRC)
  83. {
  84. goto VAR_INIT_FINISH;
  85. }
  86.         //NandRestore
  87. if((gxbModuleState&MODULE_SUB)==MODULE_NAND_RTN_RESOTRE) //Nick061120
  88. {
  89. gxbModuleState=MODULE_PLAY_FLIST;
  90. goto RETURN_FROM_NANDRESTORE;
  91. }
  92.        OLED_DISP_MASK_INIT();
  93. //set default value
  94. //xbSubMenuNum[1]=10;
  95. gxfSourceUnicode=STRING_TYPE_ASCII;
  96. gxbCheckBattCounter=0;
  97. gxbBtyReTestNum=0;
  98. gxbBtyLowNum=0;
  99. gxbPwOffCounter=0;
  100. gxbLcdLimitCol=MAX_COLNUM; //tne lcd scroll2
  101. #if(SYS_USE_KEY_HOLD)
  102. gfLastKeyLocked=KEY_UNLOCK;
  103. #endif
  104. UiFileListFileType=UI_FILE_LIST_PLAYBACK;
  105. gfPwOffStop=FALSE;
  106. VAR_INIT_FINISH:
  107. if( (gxbModuleState & MODULE_SUB)==MODULE_FILE_DEL ) //Walace060607#1 PlayProcess
  108. {
  109. gxwOldTotalFileInDir=GXW_OLD_TOTAL_FILE_IN_DIR;
  110. gxwOldTotalDirInDir=GXW_OLD_TOTAL_DIR_IN_DIR;
  111.  
  112. if(gxwTotalFileInAll==0) //no file
  113. {
  114. gxbLastErrCode=ERR_FS_NO_FILE_FOUND;
  115. gxbPlayClassMode=P_CLASS_MODE_FILE;
  116. gxbSysState=S_PE_WAIT;
  117. //LCD_CTRL_EN(); //UiGoNoMenu() will disable lcd, so enable here
  118. UiGoNoMenu();
  119. }
  120. //Del playing file, Call PeStart to get tag info again...
  121. if(gxbSysState==S_PE_DEL)
  122. {
  123. //Vicky060901#1 _Add Power Down PA
  124. gxbSysState=S_PE_PAUSE;
  125. if(gfDspCtrlCdc) //vicky060912#1
  126. {
  127. //LoadExtendMemCode(); //tne 2007/01/05 #1 //Walace070109#2
  128. PlayEngine(P_STOP);
  129. }
  130. //End
  131. gpstFileIndex=&stFsFileInf;
  132. FsOpenFile(RELOAD_FILE_NAME); //tne 2006/03/23
  133. gxbSysState=S_PE_WAIT;
  134. gfPeStartAfterDel=TRUE;
  135. //Walace060606#1 PlayProcess start
  136. gxbModuleState=(MODULE_PLAY_FLIST|MODULE_FILE_DEL);
  137. LoadPlayProcess(PLAY_PROC_PE_CMD|P_RESTART);
  138. }
  139. //Vicky060901#1 _Add Fade In
  140. else
  141. {
  142. if(gxbSysState==S_PE_PLAY)
  143. {
  144. #if(FADE_IN_OUT_MODE==1)
  145. if(UiCheckDspFadeDone()==0x02)
  146. {
  147. UiDspFade((DSP_FADE_IN_EN|DSP_FADE_FORCE|DSP_FADE_1_UNIT),FALSE);
  148. }
  149. #endif
  150. }
  151. }
  152. //End
  153. }
  154. else
  155. {
  156. gxwOldTotalFileInDir=gxwTotalFileInDir;
  157. gxwOldTotalDirInDir=gxwTotalDirInDir;
  158. }
  159. #if(UI_USE_CHK_CARD)
  160. if(gxbStorage!=STOR_NAND)
  161. UiCheckCardRemoved();
  162. #endif
  163. //UI for class
  164. gpstFileIndex=&stUiFileListData;
  165. #if(_PM_DVR_)
  166. /* //tne 2005/10/09 //Not need
  167. if(stUiFileListData.bPathDepth==0) //Root //no file??
  168. { UiGoSelectDvrDir(); }
  169. else
  170. { UiGoFileList(); }
  171. */
  172. UiGetDvrDirNum();
  173. UiGoFileList();
  174. #else
  175. if(!gfChangeMusic)
  176. {
  177. //if(gxbModuleState==MODULE_PLAY_CLIST) //Walace060607#1 PlayProcess
  178. if((gxbModuleState==MODULE_PLAY_MENU) && (gxbPlayClassMode!=P_CLASS_MODE_FILE)) //tne 2007/01/24 #2
  179. UiGoRootFileList();
  180. UiGoFileList();
  181. }
  182. #endif
  183. gxbModuleState=MODULE_PLAY_FLIST; //Walace060606#1 
  184. bKey=KEY_INVALID;
  185. goto ERROR_HANDLE;
  186. while(1)
  187. {
  188. KeyGet(bKey);
  189. /*  Walace060105#1
  190. #if(UI_USE_ALARM_DISPLAY)
  191. if(gfAlarmTimeUp) bKey=KEY_INVALID; //let key disable when show alarm message
  192. #endif
  193. */
  194. UiCheckBackLight(bKey);
  195. UiNormalCheck();
  196. #if(USE_LYRIC_DISPLAY)
  197. UiPlayLyricControl();
  198. #endif
  199. #if(!EXT_ADC | !EXT_DAC | !EXT_PA)
  200. if(gxbMusicProcState==MUSIC_PROC_BODY) //Renshuo050603#A
  201. {    
  202. //IntCdcSetPaGainTask(FALSE); //Renshuo041203#A //Ren050312#1
  203. CdcSetPaGainTask(PA_TASK_UNIMMEDIATE|PA_TASK_DELAY);  //Walace060525#4 //tne 2006/12/26 #1
  204. }
  205. #endif
  206. bPeCommand=P_NOP;
  207. if(gfScrollFlag) //Walace060213#3 start
  208. {
  209. //#if(!_PM_DVR_) //No long file name in DVR  //Walace051227#1
  210. if(gxbUiMenuMainStates==UI_FILE_LIST_MENU)
  211. {
  212. if( (gxbLcdCounter>=UI_SCROLL_DELAY_TIME)&&(gxwFileNumInFileList!=0) )
  213. {
  214. //Walace051227#1
  215. //LcdScrollFileList(stUiFileListData.pbLongFileName,gxbUiMenuSubStates<<1);
  216. // WHH #13 301_070105
  217. //LcdScrollFileList(&stUiFileListData,gxbUiMenuSubStates<<1,TRUE);
  218. LcdScrollFileList(&stUiFileListData,gxbUiMenuSubStates,TRUE);
  219. gxbLcdCounter=0;
  220. }
  221. }
  222. //#endif
  223. }
  224. switch(bKey)
  225. {
  226. case KEY_LEFT_BREAK:
  227. //case KEY_VOL_UP_BREAK:  //tne 2007/01/24 #2
  228. if(gxbUiMenuMainStates==UI_FILE_LIST_MENU)
  229. {
  230.                                         UiShowFileList(UI_FILE_LIST_UP);
  231.                             }
  232. #if(_PM_DVR_)
  233. else if(gxbUiMenuMainStates==UI_DVR_FILE_SOURCE_MENU)
  234. {
  235. //OledReverse(OLED_FLIST_COL,LINE2PIXEL(gxbUiMenuSubStates),OLED_FLIST_END_COLUMN-OLED_FLIST_COL+1,LINE1);
  236. UiFileListDvrLightMoe(FALSE);// WHH #13 301_070106
  237. if(gxbUiMenuSubStates==0)
  238. gxbUiMenuSubStates=REC_DIR_NUM;
  239. else
  240. gxbUiMenuSubStates--;
  241. UiFileListDvrLightMoe(TRUE); // WHH #13 301_070106
  242. //OledReverse(OLED_FLIST_COL,LINE2PIXEL(gxbUiMenuSubStates),OLED_FLIST_END_COLUMN-OLED_FLIST_COL+1,LINE1);
  243. }
  244. #elif(0) //(UI_USE_CLASS_LIST) //tne 2007/01/24 #2
  245. else if(gxbUiMenuMainStates==UI_SEL_LIST_MENU)
  246. { UiDispSelectListMenu(); }
  247. #endif
  248. else //if(gxbUiMenuMainStates==UI_DEL_YES_NO_MENU)
  249. {
  250. gxbUiMenuSubStates ^= 1;
  251. UiDispYesNoMenu();
  252. }
  253. break;
  254. case KEY_RIGHT_BREAK:
  255. //case KEY_VOL_DOWN_BREAK:  //tne 2007/01/24 #2
  256. if(gxbUiMenuMainStates==UI_FILE_LIST_MENU)
  257. {
  258. UiShowFileList(UI_FILE_LIST_DOWN);
  259. }
  260. #if(_PM_DVR_)
  261. else if(gxbUiMenuMainStates==UI_DVR_FILE_SOURCE_MENU)
  262. {
  263. //OledReverse(OLED_FLIST_COL,LINE2PIXEL(gxbUiMenuSubStates),OLED_FLIST_END_COLUMN-OLED_FLIST_COL+1,LINE1);
  264. UiFileListDvrLightMoe(FALSE);// WHH #13 301_070106
  265. if(gxbUiMenuSubStates==REC_DIR_NUM)
  266. gxbUiMenuSubStates=0;
  267. else
  268. gxbUiMenuSubStates++;
  269. UiFileListDvrLightMoe(TRUE);// WHH #13 301_070106
  270. //OledReverse(OLED_FLIST_COL,LINE2PIXEL(gxbUiMenuSubStates),OLED_FLIST_END_COLUMN-OLED_FLIST_COL+1,LINE1);
  271. }
  272. #elif(0) //(UI_USE_CLASS_LIST) //tne 2007/01/24 #2
  273. else if(gxbUiMenuMainStates==UI_SEL_LIST_MENU)
  274. { UiDispSelectListMenu(); }
  275. #endif
  276. else //if(gxbUiMenuMainStates==UI_DEL_YES_NO_MENU)
  277. {
  278. gxbUiMenuSubStates ^= 1;
  279. UiDispYesNoMenu();
  280. }
  281. break;
  282. case KEY_UP_BREAK:
  283. if(gxbUiMenuMainStates==UI_FILE_LIST_MENU)
  284. {
  285. if(gxwFileNumInFileList<=gxwTotalDirInDir)
  286. {
  287. #if(_PM_DVR_)
  288. FILE_LIST_DIR_CONTROL:
  289. #if(REC_DIR_NUM==1)
  290. //only one dir, not change dir in DVR
  291. #else
  292. UiGoSelectDvrDir();
  293. #endif
  294. #else
  295. FILE_LIST_DIR_CONTROL:
  296. //root->select list
  297. if( (gxwFileNumInFileList==0) && (stUiFileListData.bPathDepth==0) )
  298. {
  299. #if(0) //(UI_USE_CLASS_LIST) //tne 2007/01/24 #2
  300. gxbUiMenuSubStates=UI_SEL_FILE_LIST_MENU;
  301. UiGoSelectListMenu();
  302. #else
  303. stUiFileListData=stFsFileInf; //restore file struct
  304. UiGoBackMusicMenu(); //tne 2007/01/06 #1
  305. #endif
  306. break;
  307. }
  308. //LCD_CTRL_DIS();
  309. PeFillDspBuf(); //tne 2005/08/03
  310. SetSysSpeed(0x02);
  311. gpstFileIndex=&stUiFileListData;//Vicky050321#3
  312. if(gxwFileNumInFileList==0) //back dir
  313. {
  314. //tne 2005/10/09
  315. //FsChangeDir(BACK_DIR);
  316. FsChangeDir(RESTORE_DIR);
  317. gxwFileNumInFileList=UiGetBackDirNum();
  318. }
  319. else
  320. {
  321. FsChangeDir(ENTER_DIR);
  322. gxwFileNumInFileList=0;
  323. }
  324. UiGetFileListNum();
  325. //restor clock
  326. SetSysSpeed(0x08);
  327. //LCD_CTRL_EN();
  328. UiGoFileList();
  329. #endif
  330. }
  331. else
  332. {
  333. //#if(_PM_PLAY_)
  334. //PeFillDspBuf();
  335. //#endif
  336.  //Walace060606#1 PlayProcess start
  337. UiFileListPlayMusic();
  338. /*
  339. if(gfIntroPlaying==INTRO_PLAY)
  340. UiCancelIntroMode();
  341. else if(gxbIntroMode)
  342. UiGoIntroMode();
  343. UiGoNoMenu();
  344. */
  345.                  //Walace060606#1 PlayProcess end
  346. }
  347. }
  348. #if(_PM_DVR_)
  349. else if(gxbUiMenuMainStates==UI_DVR_FILE_SOURCE_MENU)
  350. {
  351. if(gxbUiMenuSubStates>0)
  352. {
  353. gxbDvrDirNum=gxbUiMenuSubStates-1; //tne 2005/10/09
  354. SetSysSpeed(0x02);
  355. //change dir
  356. stUiFileListData.dwDirStartSec=gxdwData+(gxdwRecDirClu[gxbUiMenuSubStates-1]-2)*gbSecPerClu;
  357. stUiFileListData.dwDirSec[1]=stUiFileListData.dwDirStartSec;
  358. stUiFileListData.wDirOffset[1]=0;
  359. UiGetFileListNum();
  360. gxwFileNumInFileList=0;
  361. //restor clock
  362. SetSysSpeed(0x08);
  363. UiGoFileList();
  364. }
  365. }
  366. #elif(0) //(UI_USE_CLASS_LIST) //tne 2007/01/24 #2
  367. else if(gxbUiMenuMainStates==UI_SEL_LIST_MENU)
  368. {
  369. if(gxbUiMenuSubStates==UI_SEL_FILE_LIST_MENU)
  370. {
  371. UiGoRootFileList();
  372. UiGoFileList();
  373. }
  374. else
  375. {
  376. gfChangeMusic=FALSE;
  377. stUiFileListData=stFsFileInf;
  378. UiFileListSwapJob();
  379. gxwFileNumInFileList=gxwCurtFileInDir+gxwTotalDirInDir; //tne 2005/11/15
  380. LoadProgram(PM_CLASS_LIST,BASIC_CODE_ONLY);
  381. }
  382. break;
  383. }
  384. #endif
  385. else //if(gxbUiMenuMainStates==UI_DEL_YES_NO_MENU)
  386. {
  387. if(gxbUiMenuSubStates==TRUE) //del file
  388. {
  389. //tne 2007/01/24 #4
  390. OledShowIconNew(1,IM_SETUP_BG,0,ITEM_START_ROW);
  391. UI_SHOW_MENU_TITLE_ITEM_STRING(SYS_STR_TOOLS_DEL);
  392. //Walace060806#2
  393. //OLED_CLEAR_ALL();  
  394. //StrShowSysString(SYS_STR_HOST_WORKING_DEL,LCD_AUTO_CENTER_COL,PAGE3);
  395. GXW_OLD_TOTAL_DIR_IN_DIR=gxwOldTotalDirInDir;
  396. GXW_OLD_TOTAL_FILE_IN_DIR=gxwOldTotalFileInDir;
  397. //LCD_CTRL_DIS();
  398. //tne dir del
  399. SetSysSpeed(0x02);
  400. #if(_PM_DVR_)
  401. gxbModuleState=MODULE_DVR_FLIST; //Walace060607#1 PlayProcess
  402. #else
  403. gxbModuleState=MODULE_PLAY_FLIST; //Walace060607#1 PlayProcess
  404. #endif
  405. //Vicky060901#1 _Add Fade Out
  406. if(gxbSysState==S_PE_PLAY)
  407. {
  408. #if(FADE_IN_OUT_MODE==1)
  409. if((UiCheckDspFadeDone())!=0x02)
  410. UiDspFade((DSP_FADE_OUT_EN|(1<<3)),TRUE);
  411. #endif
  412. }
  413. //End
  414. if(gxwFileNumInFileList>gxwTotalDirInDir) //select a file //tne dir del
  415. {
  416. //if(stUiFileListData.dwFileStartClu==stFsFileInf.dwFileStartClu) //del playing file
  417. /*
  418. if( (stUiFileListData.dwDirSec[stUiFileListData.bPathDepth]==stFsFileInf.dwDirSec[stFsFileInf.bPathDepth]) &&
  419. (stUiFileListData.wDirOffset[stUiFileListData.bPathDepth]==stFsFileInf.wDirOffset[stFsFileInf.bPathDepth]) )
  420. { PlayEngine(P_STOP); }
  421. */
  422. LoadProgram(PM_PLAY_DEL,BASIC_CODE_ONLY);
  423. }
  424. else
  425. {
  426. LoadProgram(PM_DIR_DEL,BASIC_CODE_ONLY);
  427. }
  428. }
  429. UiGoFileList();
  430. }
  431. break;
  432. //case KEY_REC_BREAK:
  433. #if(FIVEKEY)
  434. case KEY_VOL_BREAK:
  435. #else
  436. case KEY_REC_BREAK:
  437. #endif
  438. if(gxbUiMenuMainStates==UI_FILE_LIST_MENU)
  439. {
  440. //tne dir del
  441. //if(gxwFileNumInFileList>gxwTotalDirInDir) //select a file
  442. if(gxwFileNumInFileList>0)
  443. {
  444. UiDrawSubMenu(SYS_STR_TOOLS_DEL);
  445. gxbUiMenuMainStates=UI_DEL_YES_NO_MENU;
  446. gxbUiMenuSubStates=FALSE;
  447. UiDispYesNoMenu();
  448. }
  449. }
  450. break;
  451. case KEY_FUNC_BREAK:
  452. if(gxbUiMenuMainStates==UI_FILE_LIST_MENU) //back dir
  453. {
  454. gxwFileNumInFileList=0;
  455. goto FILE_LIST_DIR_CONTROL;
  456. }
  457. case KEY_MODE_BREAK:
  458. if(gxbUiMenuMainStates==UI_DEL_YES_NO_MENU)
  459. {
  460. UiGoFileList();
  461. }
  462. #if(0) //(!_PM_DVR_ & UI_USE_CLASS_LIST) //tne 2007/01/24 #2
  463. else if(gxbUiMenuMainStates==UI_FILE_LIST_MENU)
  464. {
  465. gxbUiMenuSubStates=UI_SEL_FILE_LIST_MENU;
  466. UiGoSelectListMenu();
  467. }
  468. #endif
  469. else //if(gxbUiMenuMainStates==UI_SEL_LIST_MENU)
  470. {
  471. stUiFileListData=stFsFileInf; //restore file struct
  472. UiGoBackMusicMenu(); //tne 2007/01/06 #1
  473. }
  474. break;
  475. }
  476. #if(PLAY_ERR_THEN_NEXT_MUSIC) //Walace061024#2
  477. EOF_CTRL_PROC:
  478. #endif
  479. //End of file control
  480. #include "EOF_Ctrl.h"
  481. gpstFileIndex=&stFsFileInf; //Vicky050321#2
  482. PlayEngine(bPeCommand);
  483. ERROR_HANDLE:
  484. if(gxbErrCode!=ERR_NO_ERROR)
  485. {
  486. #if(PLAY_ERR_THEN_NEXT_MUSIC) //Walace061024#2
  487. if(gxbErrCode==ERR_PE_UNSUPPORT_FORMAT||gxbErrCode==ERR_PE_NO_AUTHORITY)
  488. {
  489. bPeCommand=P_NEXT; 
  490. gxbErrCode = ERR_NO_ERROR;
  491. goto EOF_CTRL_PROC;
  492. }
  493. else
  494. {
  495. PlayEngine(P_STOP); //Walace061024#2
  496. }
  497. #else
  498. PlayEngine(P_STOP); //Walace061024#2
  499. #endif
  500. }
  501. UiPlayFileListDispCtrl(gxbPeDispCmd);
  502. gxbPeDispCmd=UI_PE_NOP;  
  503. #if(1)
  504. //vicky070105#3 remove to function
  505. #if(_PM_DVR_)
  506. UiCheckNandRestore(MODULE_DVR_FLIST);
  507. #else
  508. UiCheckNandRestore(MODULE_PLAY_FLIST);
  509. #endif
  510. #else
  511. //Nick061120 start //NandRestore start
  512. if((gxbRestoreBlkNum || (gxwTimeToScanPM > SCAN_PM_DURATION)) && 
  513. (gfChangeMusic || gxbSysState==S_PE_PAUSE||gxbSysState==S_PE_WAIT)&&gfMLCMode) //Nick061204
  514. {
  515. //LCD_CTRL_DIS(); //Walace061126#1
  516. #if(_PM_DVR_)
  517. gxbModuleState=MODULE_DVR_FLIST; 
  518. #else
  519. gxbModuleState=MODULE_PLAY_FLIST;
  520. #endif
  521. //Nick061204 start
  522. if(gxwTimeToScanPM > SCAN_PM_DURATION)
  523. gxbRestoreCMD |= PM_SCAN;
  524. else
  525. gxbRestoreCMD = FullStep;
  526. //Nick061204 end
  527. KeepMemory(KEEP_MEMORY) ;
  528. LoadProgram(PM_PLAY_DATA_RTN_RESTORE, BASIC_CODE_ONLY);
  529. }
  530. #endif
  531. RETURN_FROM_NANDRESTORE:
  532. //Nick061120 end //NandRestore start
  533. if(gfChangeMusic)
  534. {
  535. gxdwLastFileSize=0;
  536. if( (gxbIntroMode) && (gfIntroPlaying!=INTRO_PLAY) )
  537. {
  538. UiGoIntroMode();
  539. }
  540. #if(_PM_DVR_)
  541. UiGetDvrDirNum();
  542. #endif
  543. UiGoFileList();
  544. gfChangeMusic=FALSE;
  545. }
  546. }
  547. }
  548. API void UiPlayFileListDispCtrl(BYTE bStatus) //Walace060607#1 PlayProcess
  549. {
  550. bStatus=bStatus; //tne 2007/01/14 #3
  551. #if(USE_ERR_MSG_DISPLAY)
  552. if(gxbErrCode!=ERR_NO_ERROR)
  553. {
  554. UiErrHandle();
  555. return;
  556. }
  557. #endif
  558. }
  559. API void UiFsDispCtrl(BYTE bStatus) large //tne play 320 music
  560. {
  561. switch(bStatus)
  562. {
  563. default:
  564. case UI_FS_OPENING_FILE:
  565. PeFillDspBuf();
  566. break;
  567. }
  568. }
  569. #if(0) //Walace060606#1 PlayProcess
  570. API void UiDispCtrl(BYTE bStatus)
  571. {
  572. #if(USE_ERR_MSG_DISPLAY)
  573. if(gxbErrCode!=ERR_NO_ERROR)
  574. {
  575. UiErrHandle();
  576. return;
  577. }
  578. #endif
  579. if(bStatus==UI_PE_START_END)
  580. {
  581. gxbLastErrCode=ERR_NO_ERROR;
  582. if(!gfPeStartAfterDel)
  583. {
  584. gxwFileNumInFileList=gxwCurtFileInDir+gxwTotalDirInDir;
  585. gxwOldTotalDirInDir=gxwTotalDirInDir;
  586. gxwOldTotalFileInDir=gxwTotalFileInDir;
  587.               /* //Walace060127#2 start
  588. //tne 2006/01/16
  589. #if(!UI_EQ_CUSTOM)    // Jeff_051116
  590. IdmaPioDmxW(&gxwEqMode,DSP_EQ_ADDR,1,DSP_W16);
  591. #else
  592. UiSetEqGain();
  593. #endif
  594. //chun_chi 060105
  595. #if(UI_USE_USER_EQ)
  596. if(gxwEqMode==EQ_USER)
  597. UiSetEqGain(EQ_USER);
  598. #endif
  599. IdmaPioDmxW(&gxw3DMode,DSP_3D_ADDR,1,DSP_W16);
  600.               */
  601.               IdmaPioDmxW(&gxw3DMode,DSP_3D_ADDR,1,DSP_W16);
  602.               UiSetEqGain(gxwEqMode);   
  603.        //Walace060127#2 end
  604.        
  605. #if(USE_LYRIC_DISPLAY)
  606. gxbLcdLyricStatus=LCD_LYRIC_SCROLL_DONE; // set done to show first lyric
  607. gxbLastLyrcBuf[1]=0; //tne 2005/08/11
  608. #endif
  609. }
  610. #if(!_PM_DVR_)
  611.  UiCheckTag(); //tne 2005/11/07
  612.  #endif
  613. gxbAbRepeatSts=AB_REPT_RESET; //tne 2006/08/08 #2
  614. gxwCurrentPlayTime=0; //set 0 for intro mode
  615. //gxdwCurrentLrcTime=0; //tne 2006/02/10 #1 //Walace060226#Remove
  616. gfFillDspBufEn=TRUE;
  617. }
  618. else if(bStatus==UI_PE_START_START) //tne 2005/08/10
  619. {
  620. if(!gfPeStartAfterDel)
  621. {
  622. LoadExtendMemCode();
  623. gfFillDspBufEn=FALSE;
  624. UiCountCurtFileNum(&stUiFileListData,&stFsFileInf);
  625. #if(UI_DISP_DIR_NAME)
  626. UiGetCurtDirName();
  627. #endif
  628. }
  629. }
  630. else if(bStatus==UI_PE_STOP)
  631. {
  632. if(!gfPwOffStop) //tne 2005/11/21 #2
  633. {
  634. //LoadExtendMemCode(); //tne 2006/08/16 #1
  635. UiRndPlayInit();
  636. gxwCurrentPlayTime=0;
  637. //gxdwCurrentLrcTime=0; //tne 2006/02/10 #1 //Walace060226#Remove
  638. }
  639. }
  640. }
  641. #endif
  642. void UiErrHandle(void) large
  643. {
  644. #if(USE_ERR_MSG_DISPLAY)
  645. if( (gxbErrCode!=ERR_NO_ERROR) && (gxbErrCode!=ERR_FS_NO_FILE_FOUND) ) //by pass no file error
  646. gxbLastErrCode=gxbErrCode;
  647. #endif
  648. }
  649. /* //tne 2007/01/14 #1 move to UiCommon.c
  650. void UiDispDelYesNoMenu(void) large
  651. {
  652. UiShowSubMenuNum(gxbUiMenuSubStates+1,2);
  653. UI_CLEAR_MENU_TAG_AREA();
  654. StrShowSysString(cwStringSysYesNoList[gxbUiMenuSubStates],LCD_AUTO_CENTER_COL,OLED_TAG_ROW);
  655. }
  656. */
  657. void UiFileListPlayMusic(void) large
  658. {
  659. // LCD_CTRL_DIS();
  660. //David051130#4 Start 
  661. #if(FADE_IN_OUT_MODE==0)
  662. #if(!EXT_ADC | !EXT_DAC | !EXT_PA)
  663. if(gxbSysState==S_PE_PLAY)
  664. {
  665. UiSetVolFadeOut();
  666.         }
  667. #endif
  668. #elif(FADE_IN_OUT_MODE==1)
  669. if((UiCheckDspFadeDone()!=0x02) &&(gxbSysState==S_PE_PLAY) ) //if fade out done, won't do it again
  670. {
  671. UiDspFade((DSP_FADE_OUT_EN|DSP_FADE_1_UNIT),TRUE);//bk //Vicky060119
  672. //UiDspFade((DSP_FADE_OUT_EN|DSP_FADE_FORCE|(10<<3)),TRUE);
  673. }
  674. #endif
  675. //End
  676. //
  677. LoadExtendMemCode();
  678. UiSetPeStop();
  679. gfFillDspBufEn=FALSE;
  680. gxbFileNumSearchMode=FNUM_SEARCH_RESET_MODE;
  681. //Walace060607#1 PlayProcess start
  682. //UiCountCurtFileNum(&stFsFileInf,&stUiFileListData); //Walace060606#1 PlayProcess
  683. //gxbFileNumSearchMode=FNUM_SEARCH_NEXT_MODE;
  684. //gxwOldTotalDirInDir=gxwTotalDirInDir;
  685. //gxwOldTotalFileInDir=gxwTotalFileInDir;
  686. gxbPlayClassMode=P_CLASS_MODE_FILE;
  687. stFsFileInf=stUiFileListData;
  688. gpstFileIndex=&stFsFileInf;
  689. gxbSysState=S_PE_PLAY;
  690. UiRndPlayInit(); //Ui for class
  691. if(gfIntroPlaying==INTRO_PLAY)
  692. UiCancelIntroMode();
  693. else if(gxbIntroMode)
  694. UiGoIntroMode();
  695. // PeStart();
  696. gxbModuleState=MODULE_PLAY_FLIST;
  697. LoadPlayProcess(PLAY_PROC_PE_CMD|P_RESTART);
  698. //Walace060606#1 PlayProcess end
  699. //PlayEngine(P_PLAYBACK);
  700. //PlayEngine(P_NOP);
  701. // LCD_CTRL_EN();
  702. }
  703. void UiFileListSwapJob(void)
  704. {
  705. // LCD_CTRL_DIS();
  706. PeFillDspBuf();
  707. SetSysSpeed(0x02);
  708. gxwTotalDirInDir=gxwOldTotalDirInDir;
  709. gxwTotalFileInDir=gxwOldTotalFileInDir;
  710. gxbModuleState=MODULE_PLAY_FLIST; //Walace060607#1 PlayProcess
  711. }
  712. void UiGoBackMenuJob(void)
  713. {
  714. UiFileListSwapJob();
  715. //gxbUiMenuMainStates=UI_FILE_LIST_MENU; //UI for class
  716. gpstFileIndex = &stUiFileListData; //Tne060113#1
  717. if(gxwTotalFileInAll>0) //tne 2005/12/09 #1
  718. FsOpenFile(RELOAD_FILE_NAME); //tne 2005/11/21 #2
  719. }
  720. //tne 2007/01/06 #1 start
  721. void UiGoBackMusicMenu(void)
  722. {
  723. UiGoBackMenuJob();
  724. gxbUiMenuMainStates=UI_MUSIC_MENU;
  725. gxbUiMenuSubStates=UI_MUSIC_ENTER_FLIST_MENU;    // Jeff Check if _LIST_  FLIST
  726. #if(_PM_DVR_)
  727. LoadProgram(PM_DVR_MENU,BASIC_CODE_ONLY);
  728. #else
  729. LoadProgram(PM_PLAY_MENU,BASIC_CODE_ONLY);
  730. #endif
  731. }
  732. //tne 2007/01/06 #1 end
  733. void UiGoNoMenu(void)
  734. {
  735. UiGoBackMenuJob();
  736. gxbUiMenuMainStates=UI_FILE_LIST_MENU; //UI for class
  737. #if(_PM_DVR_)
  738. LoadProgram(PM_PLAY_DVR,BASIC_CODE_ONLY);
  739. #else
  740. LoadProgram(PM_PLAY_FAT_LARGE,BASIC_CODE_ONLY);
  741. #endif
  742. }
  743. #if( (REC_DIR_NUM>1) & (_PM_DVR_) )
  744. //Note: If REC_DIR_NUM bigger than lcd size, the function should be fixed.
  745. void UiGoSelectDvrDir(void) large
  746. {
  747. CBYTE bFakeLongFileBuf[2]={0,0};
  748. BYTE bI;
  749. WORD wDisplayIcon;
  750. gxbUiMenuMainStates=UI_DVR_FILE_SOURCE_MENU;
  751. //gxbUiMenuSubStates=0;
  752. //WHH #13 301_070107
  753. //OLED_CLEAR_ALL();
  754. UiShowLargeBackground(5,IM_BROWSER_BG_S1); //tne 2007/01/10 #2
  755. //OledShowIconNew(1, IM_EXPLORE_BUTTON_01, UI_FILST_LIGHT_START_COL, (UI_FILST_LIGHT_START_ROW+UI_FILST_TREE_ROW));
  756. OledShowIconNew(1,IM_BROWSER_ICON_HOME,0,UI_FILST_ROOT_ROW);
  757. //OledShowIcon(ICON_FILE_FOLDER_OPEN,SEG0,LINE0);
  758. //OledShowIcon(UI_FLIST_DIR_HOME,SEG2,LINE0) ; //Icon HomeDir
  759. OledShowIconNew(1, IM_EXPLORE_BUTTON_01, UI_FILST_LIGHT_START_COL, (UI_FILST_LIGHT_START_ROW+UI_FILST_TREE_ROW+gxbDvrDirNum*UI_FILST_TREE_ROW));
  760. for(bI=1;bI<=REC_DIR_NUM;bI++)
  761. {
  762. if(bI==REC_DIR_NUM) //last dir
  763. {
  764. //wDisplayIcon=UI_FLIST_ICON_FOLDER_CLOSE;
  765. wDisplayIcon=UI_FILST_FILE_TREE_LAST ;
  766. }
  767. else
  768. {
  769. //wDisplayIcon=UI_FLIST_ICON_FOLDER_CLOSE; 
  770. wDisplayIcon=UI_FILST_FILE_TREE ;
  771. }
  772.               // OledShowIcon(ICON_FILE_FOLDER_CLOSE,SEG0,LINE2PIXEL(bI));
  773.               // WHH #13 301_070106
  774.               OledShowIconNew(1,wDisplayIcon,1,UI_FILST_ROOT_ROW+(UI_FILST_TREE_ROW)*(bI));
  775. OledShowIconNew(1,UI_FLIST_ICON_FOLDER_CLOSE,7,UI_FILST_ROOT_ROW+(UI_FILST_TREE_ROW)*(bI));
  776. //LcdShowFileList(gxbUiDirName[bI-1],bFakeLongFileBuf,bI<<1); //Walace051227#1
  777. stUiFileListData.pbFileName=gxbUiDirName[bI-1];
  778. stUiFileListData.pbLongFileName=bFakeLongFileBuf;
  779. //LcdShowFileList(&stUiFileListData,bI<<1);
  780. gfTransparent=TRUE;
  781. LcdShowFileList(&stUiFileListData,bI);
  782. gfTransparent=FALSE;
  783. stUiFileListData.pbFileName=gxbFileName;
  784. stUiFileListData.pbLongFileName=gxbLongFileName;
  785. }
  786. //tne 2005/10/09
  787.         gxbUiMenuSubStates=gxbDvrDirNum+1;
  788. // WHH #13 301_070106
  789. //OledReverse(OLED_FLIST_COL,LINE2PIXEL(gxbUiMenuSubStates),OLED_FLIST_END_COLUMN-OLED_FLIST_COL+1,LINE1);
  790. }
  791. #endif
  792. #if(!_PM_DVR_)
  793. void UiGoRootFileList(void) large
  794. {
  795. gxwFileNumInFileList=0;
  796. gpstFileIndex=&stUiFileListData;
  797. gpstFileIndex->bPathDepth=0;
  798. gpstFileIndex->dwDirStartSec=gxdwRoot;
  799. gpstFileIndex->dwDirSec[0]=gxdwRoot;
  800. gpstFileIndex->wDirOffset[0]=0;
  801. //FsOpenFile(FIRST_PLAYBACK_IN_DIR);
  802. UiGetFileListNum();
  803. }
  804. #endif
  805. //tne 2005/10/09
  806. #if(_PM_DVR_)
  807. void UiGetDvrDirNum(void) large
  808. {
  809. BYTE bI;
  810. for(bI=0;bI<REC_DIR_NUM;bI++)
  811. {
  812. if( (gxbFileName[0]==gxbUiFileName[bI][0]) && (gxbFileName[1]==gxbUiFileName[bI][1]) )
  813. {
  814. gxbDvrDirNum=bI;
  815. break;
  816. }
  817. }
  818. }
  819. #endif
  820. #if(_PM_DVR_)
  821. void UiFileListDvrLightMoe(BOOL bflag) large// WHH #13 301_070106
  822. {
  823. CBYTE bFakeLongFileBuf[2]={0,0};
  824. OledShowIconNew(1, IM_EXPLORE_BUTTON_CLEAR_ALL,0, UI_FILST_LIGHT_START_ROW+gxbUiMenuSubStates*UI_FILST_LIGHT_ROW);
  825. if(bflag)
  826. {
  827. //OledShowIconNew(1, IM_EXPLORE_BUTTON_CLEAR_01, 0, UI_FILST_LIGHT_START_ROW+gxbUiMenuSubStates*UI_FILST_LIGHT_ROW);
  828. OledShowIconNew(1, IM_EXPLORE_BUTTON_01, UI_FILST_LIGHT_START_COL, UI_FILST_LIGHT_START_ROW+gxbUiMenuSubStates*UI_FILST_LIGHT_ROW);
  829. }
  830. if(gxbUiMenuSubStates==0)
  831. {
  832.       OledShowIconNew(1,IM_BROWSER_ICON_HOME,0,UI_FILST_ROOT_ROW);
  833. }
  834. else if(gxbUiMenuSubStates==REC_DIR_NUM)
  835. {
  836. OledShowIconNew(1,UI_FILST_FILE_TREE_LAST,1,UI_FILST_ROOT_ROW+(UI_FILST_TREE_ROW)*(gxbUiMenuSubStates));
  837. OledShowIconNew(1,UI_FLIST_ICON_FOLDER_CLOSE,7,UI_FILST_ROOT_ROW+(UI_FILST_TREE_ROW)*(gxbUiMenuSubStates));
  838. }
  839. else
  840. {
  841. OledShowIconNew(1,UI_FILST_FILE_TREE,1,UI_FILST_ROOT_ROW+(UI_FILST_TREE_ROW)*(gxbUiMenuSubStates));
  842. OledShowIconNew(1,UI_FLIST_ICON_FOLDER_CLOSE,7,UI_FILST_ROOT_ROW+(UI_FILST_TREE_ROW)*(gxbUiMenuSubStates));
  843. }
  844. if(gxbUiMenuSubStates!=0)
  845. {
  846. stUiFileListData.pbFileName=gxbUiDirName[gxbUiMenuSubStates-1];
  847. stUiFileListData.pbLongFileName=bFakeLongFileBuf;
  848. gfTransparent=TRUE;
  849. LcdShowFileList(&stUiFileListData,gxbUiMenuSubStates);
  850. gfTransparent=FALSE;
  851. stUiFileListData.pbFileName=gxbFileName;
  852. stUiFileListData.pbLongFileName=gxbLongFileName;
  853. }
  854. }
  855. #endif