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

压缩解压

开发平台:

C++ Builder

  1. /*==========================================================================
  2. Copyright (c) 2004 ALi Corporation. All Rights Reserved
  3. File: UiClassList.c
  4. content: user interface for class list
  5. History: Created by TNE 2005/9/5
  6. ==========================================================================*/
  7. #define _UI_CLIST_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 "Lcd.h"
  17. #include "Key.h"
  18. #include "SaveSetting.h"
  19. #include "Playback.h"
  20. #include "NandFlash.h"
  21. #include "Idma.h"
  22. #include "FileSystem.h"
  23. #include "ExtCodec.h"
  24. #include "IntCodec.h"
  25. #include "UiPlayCommon.h"
  26. #include "UiClassList.h"
  27. #include "ClassDataBase.h"
  28. #include "UiPlayDel.h"
  29. #include "OledString.h"
  30. #include "Oled.h"
  31. #include "IconDefine.h"
  32. void UiErrHandle(void) large;
  33. void UiGoClassListTop(void) large;
  34. void UiClassListSwapJob(void) large;
  35. void UiGoNoMenu(void) large;
  36. void UiShowClassList(BYTE bOpenType) large;
  37. void UiEnterClassList(void) large;
  38. void UiGoClassList(BYTE bCListNum) large;
  39. void UiBackClassList(void) large;
  40. void UiClassListPlayMusic(void) large;
  41. void UiCountFileNumInAllClass(void) large;
  42. BOOL UiCListIsRootMenu(void) large;
  43. BYTE UIGetCListDispType(void) large;
  44. BOOL UiCdbSearchCListData(BYTE bSearchType) large;
  45. void UiReLoadCdbInfo(void) large;
  46. BOOL UiCdbGetClassString(void) large;
  47. DWORD UiCdbGetDataBaseHeader(BYTE bInfAdd) large;
  48. void UiGoRefreshSureMenu(void) large;
  49. void UiRestoreCList(void) large;
  50. void UiFirstGoCList(void) large;
  51. //void UiDispYesNoMenu(void) large;
  52. void UiDispClassListTopMenu(BYTE bflag); // WHH #14 301_070107
  53. API void UiClassListDispCtrl(BYTE bStatus); //Walace060607# PlayProcess
  54. void UiClassListGoBackMenuJob(void) large; //tne 2007/01/24 #2
  55. CBYTE cbGetDataBaseHeaderAdd[]={
  56. CDB_HEADER_GENRE_NUM_ADD,
  57. CDB_HEADER_ARTIST_NUM_ADD,
  58. CDB_HEADER_ALBUM_NUM_ADD,
  59. CDB_HEADER_TITLE_NUM_ADD,
  60. };
  61. CBYTE cbEnterTopCListMainSts[]={
  62. UI_CLIST_GENRE_GENRE_MENU,
  63. UI_CLIST_ARTIST_ARTIST_MENU,
  64. UI_CLIST_ALBUM_ALBUM_MENU,
  65. UI_CLIST_TITLE_TITLE_MENU,
  66. };
  67. CBYTE cbEnterTitleCListMainSts[]={
  68. UI_CLIST_GENRE_TITLE_MENU,
  69. UI_CLIST_ARTIST_TITLE_MENU,
  70. UI_CLIST_ALBUM_TITLE_MENU,
  71. UI_CLIST_TITLE_TITLE_MENU,
  72. };
  73. XWORD gxwOldCurtFileInClass, gxwOldTotalFileInClass;
  74. XWORD gxwTotalFileInSelClass;
  75. XDWORD gdwOldCdbAddPoint;
  76. BOOL gfPeStartAfterDel;
  77. ////////////////////////////////////////////////////////////////////////////////////
  78. /////////////////////////////////  Ui Header End ///////////////////////////////////
  79. ////////////////////////////////////////////////////////////////////////////////////
  80. void main(void)
  81. {
  82. //Use Long File Name Buffer to kept state for show del menu
  83. #define bKeptMainSts gxbLongFileName[254]
  84. #define bKeptSubSts gxbLongFileName[255]
  85. //BYTE bKeptMainSts,bKeptSubSts;
  86. BYTE bKey;
  87. BYTE bPeCommand;
  88. //Walace060607#1 PlayProcess
  89. if((gxbModuleState&MODULE_SUB)==MODULE_PRC_EOF_CTRL||
  90.    (gxbModuleState&MODULE_SUB)==MODULE_DEL_AFTER_PRC||
  91.            (gxbModuleState&MODULE_SUB)==MODULE_NAND_RTN_RESOTRE) //NandRestore
  92. {
  93. KeepMemory(RESTORE_MEMORY);
  94. }
  95. EA = 1;
  96. #if(ICE_REAL_MODE) //vicky061001#2 Debug Play
  97. EnableTimer0();
  98. IE=0x83;
  99. #endif
  100. bPeCommand=P_NOP;
  101. bKey=KEY_INVALID;
  102. SetSysSpeed(0x08);
  103. #if(_PM_PLAY_)
  104. PeFillDspBuf();
  105. #endif
  106. if((gxbModuleState&MODULE_SUB)==MODULE_PRC_EOF_CTRL||
  107.      (gxbModuleState&MODULE_SUB)==MODULE_DEL_AFTER_PRC)
  108. {
  109. goto VAR_INIT_FINISH;
  110. }
  111.         //NandRestore
  112. if((gxbModuleState&MODULE_SUB)==MODULE_NAND_RTN_RESOTRE) //Nick061120
  113. {
  114. gxbModuleState=MODULE_PLAY_CLIST;
  115. goto RETURN_FROM_NANDRESTORE;
  116. }
  117. //set default value
  118. gxfSourceUnicode=STRING_TYPE_ASCII;
  119. gxbCheckBattCounter=0;
  120. gxbBtyReTestNum=0;
  121. gxbBtyLowNum=0;
  122. gxbPwOffCounter=0;
  123. gxbLcdLimitCol=MAX_COLNUM;
  124. #if(SYS_USE_KEY_HOLD)
  125. gfLastKeyLocked=KEY_UNLOCK;
  126. #endif
  127. gfPwOffStop=FALSE;
  128. #if(UI_USE_CHK_CARD)
  129. if(gxbStorage!=STOR_NAND)
  130. UiCheckCardRemoved();
  131. #endif
  132. OLED_DISP_MASK_INIT();
  133. VAR_INIT_FINISH:
  134. if((gxbModuleState & MODULE_SUB)==MODULE_FILE_DEL)
  135. {
  136. gxwOldCurtFileInClass=gxwOldDelCurtFileInClass;
  137. gxwOldTotalFileInClass=gxwOldDelTotalFileInClass;
  138. gdwOldCdbAddPoint=gdwOldDelCdbAddPoint;
  139. if(gxwTotalFileInAll==0) //no file
  140. {
  141. gxbLastErrCode=ERR_FS_NO_FILE_FOUND;
  142. gxbPlayClassMode=P_CLASS_MODE_FILE;
  143. gxbSysState=S_PE_WAIT; //tne 2005/12/09 #1
  144. UiGoNoMenu();
  145. }
  146. //Del playing file, Call PeStart to get tag info again...
  147. if(gxbSysState==S_PE_DEL)
  148. {
  149. //Vicky060901#1 _Add Power Down PA
  150. gxbSysState=S_PE_PAUSE;
  151. if(gfDspCtrlCdc) //vicky060912#1
  152. {
  153. //LoadExtendMemCode(); //tne 2007/01/05 #1 //Walace070109#2
  154. PlayEngine(P_STOP);
  155. }
  156. //End
  157. gpstFileIndex=&stFsFileInf;
  158. FsOpenFile(RELOAD_FILE_NAME); //tne 2006/03/23
  159. gxbSysState=S_PE_WAIT;
  160. gfPeStartAfterDel=TRUE;
  161. //LCD_CTRL_DIS();
  162. //LoadExtendMemCode();
  163. gxbModuleState=(MODULE_PLAY_CLIST|MODULE_FILE_DEL);
  164. LoadPlayProcess(PLAY_PROC_PE_CMD|P_RESTART);
  165. //PeStart(); //Walace060606#1 PlayProcess
  166. //LCD_CTRL_EN();
  167. }
  168. //Vicky060901#1 _Add Fade In
  169. else
  170. {
  171. if(gxbSysState==S_PE_PLAY)
  172. {
  173. #if(FADE_IN_OUT_MODE==1)
  174. if(UiCheckDspFadeDone()==0x02)
  175. {
  176. UiDspFade((DSP_FADE_IN_EN|DSP_FADE_FORCE|DSP_FADE_1_UNIT),FALSE);
  177. }
  178. #endif
  179. }
  180. }
  181. //End
  182. }
  183. else
  184. {
  185. gxwOldCurtFileInClass=gxwCurtFileInClass;
  186. gxwOldTotalFileInClass=gxwTotalFileInClass;
  187. gdwOldCdbAddPoint=gdwCdbAddPoint;
  188. }
  189. //GO_TO_FILE_LIST:
  190. //NO CDB... Ask Refresh
  191. if(gdwCdbAddPoint==CDB_NULL_POINT)
  192. {
  193. UiGoRefreshSureMenu();
  194. }
  195. else if(!gfChangeMusic)
  196. {
  197.                 //Walace060607#1 PlayProcess
  198. //if( (gxbModuleState==MODULE_PLAY_FLIST) ) //Display from top
  199. if( (gxbModuleState==MODULE_PLAY_MENU) && (gxbPlayClassMode==P_CLASS_MODE_FILE) ) //tne 2007/01/24 #2
  200. {
  201. gxbUiMenuSubStates=CDB_CLASS_MODE_GENRE;
  202. UiGoClassListTop();
  203. }
  204. else
  205. { UiFirstGoCList(); }
  206. }
  207.         //Walace060607#1 PlayProcess
  208. gxbModuleState=MODULE_PLAY_CLIST;
  209. goto ERROR_HANDLE;
  210. while(1)
  211. {
  212. KeyGet(bKey);
  213. /* Walace060105#1
  214. #if(UI_USE_ALARM_DISPLAY)
  215. if(gfAlarmTimeUp) bKey=KEY_INVALID; //let key disable when show alarm message
  216. #endif
  217. */
  218. UiCheckBackLight(bKey);
  219. UiNormalCheck();
  220. #if(USE_LYRIC_DISPLAY)
  221. UiPlayLyricControl();
  222. #endif
  223. #if(!EXT_ADC | !EXT_DAC | !EXT_PA)
  224. if(gxbMusicProcState==MUSIC_PROC_BODY) //Renshuo050603#A
  225. {  
  226. //IntCdcSetPaGainTask(FALSE); //Renshuo041203#A //Ren050312#1
  227. CdcSetPaGainTask(PA_TASK_UNIMMEDIATE|PA_TASK_DELAY);  //Walace060525#4 //tne 2006/12/26 #1
  228. }
  229. #endif
  230. bPeCommand=P_NOP;
  231. if(gfScrollFlag) //Walace060213#3 
  232. {
  233. if( (gxbUiMenuMainStates>=UI_CLIST_GENRE_GENRE_MENU) && (gxbUiMenuMainStates<=UI_CLIST_TITLE_TITLE_MENU) )
  234. {
  235. if( (gxbLcdCounter>=UI_SCROLL_DELAY_TIME)&&(gxwCurtFileInClass!=0) )
  236. {
  237. //WHH #14 301_070107
  238. //LcdScrollFileList(gxbDispClassString,gxbUiMenuSubStates<<1,TRUE); //Walace051227#1
  239. LcdScrollFileList(gxbDispClassString,gxbUiMenuSubStates,TRUE);
  240. gxbLcdCounter=0;
  241. }
  242. }
  243. }
  244. switch(bKey)
  245. {
  246. case KEY_LEFT_BREAK:
  247. //case KEY_VOL_UP_BREAK:
  248. case KEY_RIGHT_BREAK:
  249. //case KEY_VOL_DOWN_BREAK:
  250. switch(gxbUiMenuMainStates)
  251. {
  252. case UI_REFRESH_YES_NO_MENU:
  253. case UI_DEL_YES_NO_MENU:
  254. gxbUiMenuSubStates ^= 1;
  255. UiDispYesNoMenu();
  256. break;
  257. default:
  258. if( (bKey==KEY_LEFT_BREAK) || (bKey==KEY_VOL_UP_BREAK) )
  259. UiShowClassList(SHOW_CLASS_UP);
  260. else
  261. UiShowClassList(SHOW_CLASS_DOWN);
  262. break;
  263. }
  264. break;
  265. case KEY_UP_BREAK:
  266. switch(gxbUiMenuMainStates)
  267. {
  268. case UI_REFRESH_YES_NO_MENU:
  269. if(gxbUiMenuSubStates)
  270. {
  271. //LCD_CTRL_DIS();
  272. gxbModuleState=MODULE_INITIAL; //Walace060607#1 PlayProcess
  273. UiGoSysRefreshCdb();
  274. }
  275. else
  276. { UiGoNoMenu(); }
  277. break;
  278. case UI_DEL_YES_NO_MENU:
  279. if(gxbUiMenuSubStates)
  280. {
  281. //tne 2007/01/24 #4
  282. OledShowIconNew(1,IM_SETUP_BG,0,ITEM_START_ROW);
  283. UI_SHOW_MENU_TITLE_ITEM_STRING(SYS_STR_TOOLS_DEL);
  284. //LcdClearAll();
  285. //OLED_CLEAR_ALL();
  286. //LcdShowSysString(SYS_STR_HOST_WORKING_DEL,3,LCD_AUTO_CENTER_COL);
  287.                                                  //Walace060806#2 mark 
  288.                                                  //StrShowSysString(SYS_STR_HOST_WORKING_DEL,LCD_AUTO_CENTER_COL,PAGE3);
  289. //LCD_CTRL_DIS();
  290. //tne dir del
  291. SetSysSpeed(0x02);
  292. //keep restore variable
  293. gxwOldDelCurtFileInClass=gxwOldCurtFileInClass;
  294. gxwOldDelTotalFileInClass=gxwOldTotalFileInClass;
  295. gxwOldDelTotalFileInSelClass=gxwTotalFileInSelClass;
  296. gdwOldDelCdbAddPoint=gdwOldCdbAddPoint;
  297. gxbUiMenuMainStates=bKeptMainSts;
  298. gxbUiMenuSubStates=bKeptSubSts;
  299. gxbModuleState=MODULE_PLAY_CLIST; //Walace060607#1 PlayProcess
  300. //Vicky060901#1 _Add Fade Out
  301. if(gxbSysState==S_PE_PLAY)
  302. {
  303. #if(FADE_IN_OUT_MODE==1)
  304. if((UiCheckDspFadeDone())!=0x02)
  305. UiDspFade((DSP_FADE_OUT_EN|(1<<3)),TRUE);
  306. #endif
  307. }
  308. //End
  309. for(bKey=0;bKey<4;bKey++) //use bKey for temp variable
  310. {
  311. if(bKeptMainSts==cbEnterTitleCListMainSts[bKey]) //select title
  312. {
  313. //Del playing file
  314. /*
  315. if( (stCdbClassInfo.dwDirSec==stFsFileInf.dwDirSec[stFsFileInf.bPathDepth]) &&
  316. (stCdbClassInfo.wDirOff==stFsFileInf.wDirOffset[stFsFileInf.bPathDepth]) )
  317. { PlayEngine(P_STOP); }
  318. */
  319. LoadProgram(PM_PLAY_DEL,BASIC_CODE_ONLY);
  320. }
  321. }
  322. LoadProgram(PM_DIR_DEL,BASIC_CODE_ONLY);
  323. }
  324. else
  325. { goto DEL_YES_NO_BACK; }
  326. break;
  327. #if(0) //tne 2007/01/24 #2
  328. case UI_SEL_LIST_MENU:
  329. if(gxbUiMenuSubStates==UI_SEL_CLASS_LIST_MENU)
  330. {
  331. gxbUiMenuSubStates=CDB_CLASS_MODE_GENRE;
  332. UiGoClassListTop();
  333. break;
  334. }
  335. else
  336. {
  337. gfChangeMusic=FALSE;
  338. stUiFileListData=stFsFileInf;
  339. UiRestoreCList();
  340. UiClassListSwapJob();
  341. LoadProgram(PM_PLAY_FILE_LIST,BASIC_CODE_ONLY);
  342. }
  343. break;
  344. #endif
  345. default: //UI_CLIST_GENRE_GENRE_MENU~UI_CLIST_TITLE_TITLE_MENU
  346. if(gxwCurtFileInClass==0)
  347. goto CLASS_LIST_BACK;
  348. case UI_CLIST_TOP_MENU:
  349. UiEnterClassList();
  350. break;
  351. }
  352. break;
  353. case KEY_MODE_BREAK:
  354. if( (gxbUiMenuMainStates>=UI_CLIST_GENRE_GENRE_MENU) && (gxbUiMenuMainStates<=UI_CLIST_TITLE_TITLE_MENU) )
  355. goto CLIST_TOP_BACK; //Fast Jump to UI_SEL_LIST_MENU
  356. case KEY_FUNC_BREAK:
  357. switch(gxbUiMenuMainStates)
  358. {
  359. /* //tne 2007/01/24 #2
  360. case UI_SEL_LIST_MENU:
  361. UiRestoreCList();
  362. */
  363. case UI_REFRESH_YES_NO_MENU:
  364. UiGoNoMenu();
  365. break;
  366. case UI_DEL_YES_NO_MENU:
  367. DEL_YES_NO_BACK:
  368. gxbUiMenuMainStates=bKeptMainSts;
  369. gxbUiMenuSubStates=bKeptSubSts;
  370. UiGoClassList(CDB_CLASS_MODE_TITLE);
  371. //OledReverse(OLED_FLIST_COL,LINE2PIXEL(gxbUiMenuSubStates),OLED_FLIST_END_COLUMN-OLED_FLIST_COL+1,LINE1);
  372. break;
  373. case UI_CLIST_TOP_MENU:
  374. CLIST_TOP_BACK:
  375. //tne 2007/01/24 #2 start
  376. UiRestoreCList();
  377. UiClassListGoBackMenuJob();
  378. gxbUiMenuMainStates=UI_MUSIC_MENU;
  379. gxbUiMenuSubStates=UI_MUSIC_ENTER_CLIST_MENU;
  380. LoadProgram(PM_PLAY_MENU,BASIC_CODE_ONLY);
  381. //gxbUiMenuSubStates=UI_SEL_CLASS_LIST_MENU;
  382. //UiGoSelectListMenu();
  383. //tne 2007/01/24 #2 end
  384. break;
  385. default: //UI_CLIST_GENRE_GENRE_MENU~UI_CLIST_TITLE_TITLE_MENU
  386. CLASS_LIST_BACK:
  387. UiBackClassList();
  388. break;
  389. }
  390. break;
  391. //case KEY_REC_BREAK:
  392. case KEY_VOL_BREAK:
  393. //tne dir del
  394. if( (gxbUiMenuMainStates>=UI_CLIST_GENRE_GENRE_MENU) && (gxbUiMenuMainStates<=UI_CLIST_TITLE_TITLE_MENU) )
  395. {
  396. if(gxwCurtFileInClass>0)
  397. {
  398. bKeptMainSts=gxbUiMenuMainStates;
  399. bKeptSubSts=gxbUiMenuSubStates;
  400. UiDrawSubMenu(SYS_STR_TOOLS_DEL);
  401. gxbUiMenuMainStates=UI_DEL_YES_NO_MENU;
  402. gxbUiMenuSubStates=FALSE;
  403. UiDispYesNoMenu();
  404. }
  405. }
  406. break;
  407. }
  408. #if(PLAY_ERR_THEN_NEXT_MUSIC) //Walace061024#2
  409. EOF_CTRL_PROC:
  410. #endif
  411. //End of file control
  412. #include "EOF_Ctrl.h"
  413. gpstFileIndex=&stFsFileInf; //Vicky050321#2
  414. PlayEngine(bPeCommand);
  415. ERROR_HANDLE:
  416. if(gxbErrCode!=ERR_NO_ERROR)
  417. {
  418. #if(PLAY_ERR_THEN_NEXT_MUSIC) //Walace061024#2
  419. if(gxbErrCode==ERR_PE_UNSUPPORT_FORMAT||gxbErrCode==ERR_PE_NO_AUTHORITY)
  420. {
  421. bPeCommand=P_NEXT; 
  422. gxbErrCode = ERR_NO_ERROR;
  423. goto EOF_CTRL_PROC;
  424. }
  425. else
  426. {
  427. PlayEngine(P_STOP); //Walace061024#2
  428. }
  429. #else
  430. PlayEngine(P_STOP); //Walace061024#2
  431. #endif
  432. }
  433. UiClassListDispCtrl(gxbPeDispCmd); //Walace060606#1 PlayProcess
  434. gxbPeDispCmd=UI_PE_NOP;
  435. #if(1)
  436. //vicky070105#3 remove to function
  437. UiCheckNandRestore(MODULE_PLAY_CLIST);
  438. #else
  439. //Nick061120 start //NandRestore
  440. if((gxbRestoreBlkNum || (gxwTimeToScanPM > SCAN_PM_DURATION)) && 
  441. (gfChangeMusic || gxbSysState==S_PE_PAUSE||gxbSysState==S_PE_WAIT) &&gfMLCMode) //Nick061204
  442. {
  443. //LCD_CTRL_DIS(); //Walace061126#1
  444. gxbModuleState=MODULE_PLAY_CLIST;
  445. //Nick061204 start
  446. if(gxwTimeToScanPM > SCAN_PM_DURATION)
  447. gxbRestoreCMD |= PM_SCAN;
  448. else
  449. gxbRestoreCMD = FullStep;
  450. //Nick061204 end
  451. KeepMemory(KEEP_MEMORY);
  452. LoadProgram(PM_PLAY_DATA_RTN_RESTORE, BASIC_CODE_ONLY);
  453. }
  454. #endif
  455. RETURN_FROM_NANDRESTORE:
  456. //Nick061120 end
  457. if(gfChangeMusic)
  458. {
  459. gxdwLastFileSize=0;
  460. if( (gxbIntroMode) && (gfIntroPlaying!=INTRO_PLAY) )
  461. {
  462. UiGoIntroMode();
  463. }
  464. UiFirstGoCList();
  465. gfChangeMusic=FALSE;
  466. }
  467. }
  468. }
  469. API void UiFsDispCtrl(BYTE bStatus) large //tne play 320 music
  470. {
  471. switch(bStatus)
  472. {
  473. default:
  474. case UI_FS_OPENING_FILE:
  475. //PeFillDspBuf(); //not need
  476. break;
  477. }
  478. }
  479. //Walace060607#1 PlayProcess
  480. API void UiClassListDispCtrl(BYTE bStatus)
  481. {
  482. bStatus=bStatus; //tne 2007/01/14 #3  // for uncall warning
  483. #if(USE_ERR_MSG_DISPLAY)
  484. if(gxbErrCode!=ERR_NO_ERROR)
  485. {
  486. UiErrHandle();
  487. return;
  488. }
  489. #endif
  490. }
  491. #if(0) //Walace060606#1 PlayProcess
  492. API void UiDispCtrl(BYTE bStatus)
  493. {
  494. #if(USE_ERR_MSG_DISPLAY)
  495. if(gxbErrCode!=ERR_NO_ERROR)
  496. {
  497. UiErrHandle();
  498. return;
  499. }
  500. #endif
  501. if(bStatus==UI_PE_START_END)
  502. {
  503. gxbLastErrCode=ERR_NO_ERROR;
  504. if(!gfPeStartAfterDel)
  505. {
  506. gxwOldCurtFileInClass=gxwCurtFileInClass;
  507. gxwOldTotalFileInClass=gxwTotalFileInClass;
  508. gdwOldCdbAddPoint=gdwCdbAddPoint;
  509. }
  510.               /* //Walace060127#2 start
  511. //#if(!_PM_DVR_) //tne 2006/01/16
  512. #if(!UI_EQ_CUSTOM)                                       // Jeff_051116
  513. IdmaPioDmxW(&gxwEqMode,DSP_EQ_ADDR,1,DSP_W16);
  514. #else
  515. UiSetEqGain();
  516. #endif
  517. //chun_chi 060105
  518. #if(UI_USE_USER_EQ)
  519. if(gxwEqMode==EQ_USER)
  520. UiSetEqGain(EQ_USER);
  521. #endif
  522. IdmaPioDmxW(&gxw3DMode,DSP_3D_ADDR,1,DSP_W16);
  523. //#endif //tne 2006/01/16
  524. */ 
  525. IdmaPioDmxW(&gxw3DMode,DSP_3D_ADDR,1,DSP_W16);
  526. UiSetEqGain(gxwEqMode);
  527. //Walace060127#2 end
  528. #if(USE_LYRIC_DISPLAY)
  529. gxbLcdLyricStatus=LCD_LYRIC_SCROLL_DONE; // set done to show first lyric
  530. gxbLastLyrcBuf[1]=0; //tne 2005/08/11
  531. #endif
  532. #if(!_PM_DVR_)
  533.               UiCheckTag(); //tne 2005/11/07
  534.               #endif
  535. gxwCurrentPlayTime=0; //set 0 for intro mode
  536. //gxdwCurrentLrcTime=0; //tne 2006/02/10 #1 //Walace060226#Remove
  537. gfFillDspBufEn=TRUE;
  538. }
  539. else if(bStatus==UI_PE_STOP)
  540. {
  541. if(!gfPwOffStop) //tne 2005/11/21 #2
  542. {
  543. UiRndPlayInit();
  544. gxwCurrentPlayTime=0;
  545. //gxdwCurrentLrcTime=0; //tne 2006/02/10 #1 //Walace060226#Remove
  546. }
  547. }
  548. }
  549. #endif
  550. void UiErrHandle(void) large
  551. {
  552. #if(USE_ERR_MSG_DISPLAY)
  553. if( (gxbErrCode!=ERR_NO_ERROR) && (gxbErrCode!=ERR_FS_NO_FILE_FOUND) ) //by pass no file error
  554. gxbLastErrCode=gxbErrCode;
  555. #endif
  556. }
  557. void UiClassListSwapJob(void) large
  558. {
  559. //LCD_CTRL_DIS();
  560. PeFillDspBuf();
  561. SetSysSpeed(0x02);
  562. gxbModuleState=MODULE_PLAY_CLIST; //Walace060607#1 PlayProcess
  563. }
  564. //tne 2007/01/24 #2 start
  565. void UiClassListGoBackMenuJob(void) large
  566. {
  567. UiClassListSwapJob();
  568. stUiFileListData=stFsFileInf;
  569. gpstFileIndex = &stUiFileListData;
  570. if(gxwTotalFileInAll>0)
  571. FsOpenFile(RELOAD_FILE_NAME);
  572. gxbLongFileName[0]=STRING_TYPE_UNICODE;
  573. }
  574. void UiGoNoMenu(void) large
  575. {
  576. UiClassListGoBackMenuJob();
  577. LoadProgram(PM_PLAY_FAT_LARGE,BASIC_CODE_ONLY);
  578. }
  579. /*
  580. void UiGoNoMenu(void) large
  581. {
  582. UiClassListSwapJob();
  583. //tne 2006/07/07 #2
  584. stUiFileListData=stFsFileInf;
  585. /////tne 2006/01/26 #1
  586. gpstFileIndex = &stUiFileListData;
  587. if(gxwTotalFileInAll>0)
  588. FsOpenFile(RELOAD_FILE_NAME);
  589. ///////////////////
  590. //tne 2006/04/27 #2
  591. gxbLongFileName[0]=STRING_TYPE_UNICODE;
  592. LoadProgram(PM_PLAY_FAT_LARGE,BASIC_CODE_ONLY);
  593. }
  594. */
  595. //tne 2007/01/24 #2 end
  596. void UiSowClassListHome(BYTE bCListNum) large
  597. {
  598. // WHH #14 301_070107
  599. //OledClearArea(WORD0,LINE0,OLED_MAX_COL,LINE1);
  600.         //OledShowIcon(cwIconClassListTop[bCListNum],SEG0,PAGE0);
  601.     
  602. //OledShowIcon(cwIconClassListTop[bCListNum],UI_CLASSLST_ROOT_COL,UI_CLASSLST_ROOT_ROW);
  603. //OledShowIconNew(1,cwIconClassListTop[bCListNum],UI_CLASSLST_ROOT_COL,UI_CLASSLST_ROOT_ROW);
  604. OledShowIconNew(1,cwIconClassListNormal[bCListNum],UI_CLASSLST_ROOT_COL,UI_CLASSLST_ROOT_ROW);
  605. /*if(UiCListIsRootMenu())
  606.       OledShowIcon(UI_CLIST_DIR_HOME,WORD1,LINE0);
  607. else
  608.       OledShowIcon(UI_CLIST_DIR_UP,WORD1,LINE0);*/
  609. }
  610. void UiGoClassListTop(void) large
  611. {
  612. BYTE bI;
  613. gxbUiMenuMainStates=UI_CLIST_TOP_MENU;
  614. PeFillDspBuf(); // Ping070309#2
  615. // WHH #14 301_070107(start)
  616. UiShowLargeBackground(5,IM_BROWSER_BG_S1); //tne 2007/01/10 #2
  617. StrShowSysString(SYS_STR_SEL_CLASSIFICATION,LCD_AUTO_CENTER_COL,UI_FILST_SELECT_TITLE_ROW_START);
  618. OledShowIconNew(1,IM_MAINMENU_BUTTON_01 ,0,UI_CLASSLST_SELECT_ROW_START+UI_CLASSLST_SELECT_ROW_DIFF*gxbUiMenuSubStates);
  619. OledShowIconNew(1,cwIconClassListTopSelect[gxbUiMenuSubStates],UI_CLASSLST_SELECT_COL_START,UI_CLASSLST_SELECT_ROW_START+1+gxbUiMenuSubStates*UI_CLASSLST_SELECT_ROW_DIFF);
  620. gfTransparent=TRUE;
  621. PeFillDspBuf(); // Ping070309#2
  622. StrShowSysString(cwStringClassList[gxbUiMenuSubStates],UI_CLASSLST_SELECT_COL_START+16,UI_CLASSLST_SELECT_ROW_START+1+gxbUiMenuSubStates*UI_CLASSLST_SELECT_ROW_DIFF);
  623. for(bI=0;bI<4;bI++)
  624. {
  625. if(bI!=gxbUiMenuSubStates)
  626. {
  627. PeFillDspBuf();  // Ping070309#2
  628. OledShowIconNew(1,cwIconClassListTop[bI],UI_CLASSLST_SELECT_COL_START,UI_CLASSLST_SELECT_ROW_START+1+bI*UI_CLASSLST_SELECT_ROW_DIFF);
  629. StrShowSysString(cwStringClassList[bI],UI_CLASSLST_SELECT_COL_START+16,UI_CLASSLST_SELECT_ROW_START+1+bI*UI_CLASSLST_SELECT_ROW_DIFF);
  630. }
  631. }
  632. gfTransparent=FALSE;
  633. // WHH #14 301_070107(end)
  634. /*OLED_CLEAR_ALL();
  635. for(bI=0;bI<4;bI++)
  636. {
  637. OledShowIcon(cwIconClassListTop[bI],SEG0,LINE2PIXEL(bI));
  638. StrShowSysString(cwStringClassList[bI],WORD1,LINE2PIXEL(bI));
  639. }
  640. OledReverse(OLED_FLIST_COL,LINE2PIXEL(gxbUiMenuSubStates),OLED_FLIST_END_COLUMN-OLED_FLIST_COL+1,LINE1);*/
  641. }
  642. void UiShowClassListUp(BYTE bCListNum) large
  643. {
  644. //BYTE bI;
  645. //LCD_CTRL_DIS(); //tne play 320 music
  646. PeFillDspBuf();
  647. //LCD_CTRL_EN();
  648. if(gxwCurtFileInClass==0)
  649. {
  650. UiCdbSearchCListData(CDB_SEARCH_LAST|bCListNum);
  651. gxwCurtFileInClass=gxwTotalFileInClass;
  652. UiGoClassList(bCListNum);
  653. return;
  654. }
  655. else
  656. {
  657. // WHH #14 301_070107
  658. OledShowIconNew(1, IM_EXPLORE_BUTTON_CLEAR_STRING, UI_CLASSLST_LIGHT_START_COL, UI_CLASSLST_LIGHT_START_ROW+gxbUiMenuSubStates*UI_CLASSLST_LIGHT_ROW);
  659. //LcdShowClassList(gxbDispClassString,gxbUiMenuSubStates<<1);
  660. gfTransparent=TRUE;
  661. LcdShowClassList(gxbDispClassString,gxbUiMenuSubStates);
  662. gfTransparent=FALSE;
  663. if(gxwCurtFileInClass!=1)
  664. {
  665. UiCdbSearchCListData(CDB_SEARCH_PREV);
  666. UiCdbGetClassString();
  667. }
  668. if(gxbUiMenuSubStates==0)
  669. {
  670. #if(LCD_TYPE==TFT_ORISE||LCD_TYPE==TFT_TOPPOLY||LCD_TYPE==TFT_SOLOMON)
  671.  //WHH #14 301_070107
  672.  //UiMoveOneLine(SEG0,LINE0,OLED_MAX_COL-SEG0,3,FALSE);
  673.  UiMoveOneLine(0,UI_CLASSLST_START_ROW,UI_CLASSLST_STRING_END,UI_CLASSLST_NUM,FALSE);
  674. #else
  675. OledCopyArea(SEG0,LINE0,OLED_MAX_COL-SEG0,LINE3,SEG0,LINE1);
  676. #endif
  677. //OledShowIcon(cwIconClassListNormal[bCListNum],SEG0,PAGE0);
  678. //OledShowIcon(cwIconClassListNormal[bCListNum],7,UI_CLASSLST_START_ROW+(UI_CLASSLST_TREE_ROW)*(gxbUiMenuSubStates));
  679. OledShowIconNew(1, IM_BROWSER_ICON_TREE,1,UI_CLASSLST_START_ROW+(UI_CLASSLST_TREE_ROW)*(gxbUiMenuSubStates));
  680. OledShowIconNew(1, cwIconClassListTop[bCListNum],7,UI_CLASSLST_START_ROW+(UI_CLASSLST_TREE_ROW)*(gxbUiMenuSubStates));
  681. }
  682. else
  683. {
  684. gxbUiMenuSubStates--;
  685. }
  686. gxwCurtFileInClass--;
  687. if(gxwCurtFileInClass==0)
  688. {
  689. OledShowIconNew(1, IM_EXPLORE_BUTTON_CLEAR_ALL, 0, UI_CLASSLST_LIGHT_START_ROW+gxbUiMenuSubStates*UI_CLASSLST_LIGHT_ROW);
  690. OledShowIconNew(1, IM_EXPLORE_BUTTON_01, UI_CLASSLST_LIGHT_START_COL, UI_CLASSLST_LIGHT_START_ROW+gxbUiMenuSubStates*UI_CLASSLST_LIGHT_ROW);
  691. UiSowClassListHome(bCListNum);
  692. }
  693. else
  694. {
  695. // WHH #14 301_070107
  696. //LcdShowClassList(gxbDispClassString,gxbUiMenuSubStates<<1);
  697. OledShowIconNew(1, IM_EXPLORE_BUTTON_01, UI_CLASSLST_LIGHT_START_COL, UI_CLASSLST_LIGHT_START_ROW+gxbUiMenuSubStates*UI_CLASSLST_LIGHT_ROW);
  698. gfTransparent=TRUE;
  699. LcdShowClassList(gxbDispClassString,gxbUiMenuSubStates);
  700. gfTransparent=FALSE;
  701. }
  702. }
  703. }
  704. void UiShowClassListDown(BYTE bCListNum) large
  705. {
  706. // LCD_CTRL_DIS(); //tne play 320 music
  707. PeFillDspBuf();
  708. // LCD_CTRL_EN();
  709. if(gxwCurtFileInClass==gxwTotalFileInClass)
  710. {
  711. gxwCurtFileInClass=0;
  712. UiGoClassList(bCListNum);
  713. return;
  714. }
  715. else
  716. {
  717. // WHH #14 301_070107
  718. OledShowIconNew(1, IM_EXPLORE_BUTTON_CLEAR_STRING, UI_CLASSLST_LIGHT_START_COL, UI_CLASSLST_LIGHT_START_ROW+gxbUiMenuSubStates*UI_CLASSLST_LIGHT_ROW);
  719. if(gxwCurtFileInClass==0) //Home->First File
  720. { UiCdbSearchCListData(CDB_SEARCH_FIRST|bCListNum); }
  721. else
  722. {
  723. // WHH #14 301_070107
  724. gfTransparent=TRUE;
  725. //LcdShowClassList(gxbDispClassString,gxbUiMenuSubStates<<1);
  726. LcdShowClassList(gxbDispClassString,gxbUiMenuSubStates);
  727. gfTransparent=FALSE;
  728. UiCdbSearchCListData(CDB_SEARCH_NEXT);
  729. }
  730. UiCdbGetClassString();
  731. //WHH #14 301_070107
  732. //if(gxbUiMenuSubStates==3)
  733. if(gxbUiMenuSubStates==UI_CLASSLST_NUM)
  734. {
  735. #if(LCD_TYPE==TFT_ORISE||LCD_TYPE==TFT_TOPPOLY||LCD_TYPE==TFT_SOLOMON)
  736. // WHH #14 301_070107
  737. //UiMoveOneLine(SEG0,LINE1,OLED_MAX_COL-SEG0,3,TRUE);
  738. UiMoveOneLine(0,UI_CLASSLST_START_ROW,UI_CLASSLST_STRING_END,UI_CLASSLST_NUM,TRUE);
  739. #else
  740.                      OledCopyArea(SEG0,LINE1,OLED_MAX_COL-SEG0,LINE3,SEG0,LINE0);
  741. #endif
  742. if((gxwCurtFileInClass+1)==gxwTotalFileInClass)
  743. {
  744. //OledShowIcon(cwIconClassListBottom[bCListNum],WORD0,LINE3);
  745. //OledShowIcon(cwIconClassListBottom[bCListNum],7,UI_CLASSLST_ROOT_ROW+(UI_CLASSLST_TREE_ROW)*(gxbUiMenuSubStates));
  746. OledShowIconNew(1, IM_BROWSER_ICON_TREE_LAST,1,UI_CLASSLST_ROOT_ROW+(UI_FILST_TREE_ROW)*(gxbUiMenuSubStates));
  747. OledShowIconNew(1, cwIconClassListTop[bCListNum],7,UI_CLASSLST_ROOT_ROW+(UI_CLASSLST_TREE_ROW)*(gxbUiMenuSubStates));
  748. }
  749. else
  750. {
  751. //OledShowIcon(cwIconClassListNormal[bCListNum],WORD0,LINE3);
  752. //OledShowIcon(cwIconClassListNormal[bCListNum],7,UI_CLASSLST_START_ROW+(UI_CLASSLST_TREE_ROW)*(gxbUiMenuSubStates));
  753. OledShowIconNew(1, IM_BROWSER_ICON_TREE,1,UI_CLASSLST_START_ROW+(UI_FILST_TREE_ROW)*(gxbUiMenuSubStates));
  754. OledShowIconNew(1, cwIconClassListTop[bCListNum],7,UI_CLASSLST_START_ROW+(UI_CLASSLST_TREE_ROW)*(gxbUiMenuSubStates));
  755. }
  756. }
  757. else
  758. {
  759. gxbUiMenuSubStates++;
  760. }
  761. OledShowIconNew(1, IM_EXPLORE_BUTTON_01, UI_CLASSLST_LIGHT_START_COL, UI_CLASSLST_LIGHT_START_ROW+gxbUiMenuSubStates*UI_CLASSLST_LIGHT_ROW);
  762. gfTransparent=TRUE;
  763. //LcdShowClassList(gxbDispClassString,gxbUiMenuSubStates<<1);
  764. LcdShowClassList(gxbDispClassString,gxbUiMenuSubStates);
  765. gfTransparent=FALSE;
  766. gxwCurtFileInClass++;
  767. }
  768. }
  769. void UiShowClassList(BYTE bOpenType) large
  770. {
  771. /* //tne 2007/01/24 #2
  772. if(gxbUiMenuMainStates==UI_SEL_LIST_MENU)
  773. { UiDispSelectListMenu(); }
  774. else
  775. */
  776. {
  777. // WHH #14 301_070107
  778. //OledReverse(OLED_FLIST_COL,PAGE2PIXEL(gxbUiMenuSubStates<<1),OLED_FLIST_END_COLUMN-OLED_FLIST_COL+1,LINE1);
  779. if(gxbUiMenuMainStates==UI_CLIST_TOP_MENU)
  780. {
  781. if(bOpenType==SHOW_CLASS_UP)
  782. {
  783. UiDispClassListTopMenu(FALSE); // WHH #14 301_070107
  784. if(gxbUiMenuSubStates>0)
  785. gxbUiMenuSubStates--;
  786. else
  787. gxbUiMenuSubStates=3;
  788. UiDispClassListTopMenu(TRUE);
  789. }
  790. else
  791. {
  792. UiDispClassListTopMenu(FALSE); // WHH #14 301_070107
  793. if(gxbUiMenuSubStates<3)
  794. gxbUiMenuSubStates++;
  795. else
  796. gxbUiMenuSubStates=0;
  797. UiDispClassListTopMenu(TRUE); // WHH #14 301_070107
  798. }
  799. }
  800. else
  801. {
  802. if(bOpenType==SHOW_CLASS_UP)
  803. UiShowClassListUp(UIGetCListDispType());
  804. else
  805. UiShowClassListDown(UIGetCListDispType());
  806. }
  807. // WHH #14 301_070107
  808. //OledReverse(OLED_FLIST_COL,PAGE2PIXEL(gxbUiMenuSubStates<<1),OLED_FLIST_END_COLUMN-OLED_FLIST_COL+1,LINE1);
  809. }
  810. }
  811. void UiEnterClassList(void) large
  812. {
  813. switch(gxbUiMenuMainStates)
  814. {
  815. case UI_CLIST_TOP_MENU:
  816. gxwCurtFileInClass=0;
  817. gxwTotalFileInClass=UiCdbGetDataBaseHeader(cbGetDataBaseHeaderAdd[gxbUiMenuSubStates]);
  818. gxbUiMenuMainStates=cbEnterTopCListMainSts[gxbUiMenuSubStates];
  819. //UiCdbSearchCListData(CDB_SEARCH_FIRST|UIGetCListDispType()); //UiGoClassList will do it while gxwCurtFileInClass==0, not need
  820. UiGoClassList(UIGetCListDispType());
  821. break;
  822. case UI_CLIST_GENRE_TITLE_MENU:
  823. gxbPlayClassMode=P_CLASS_MODE_GENRE;
  824. goto START_PLAY_MUSIC;
  825. case UI_CLIST_ARTIST_TITLE_MENU:
  826. gxbPlayClassMode=P_CLASS_MODE_ARTIST;
  827. goto START_PLAY_MUSIC;
  828. case UI_CLIST_ALBUM_TITLE_MENU:
  829. gxbPlayClassMode=P_CLASS_MODE_ALBUM;
  830. goto START_PLAY_MUSIC;
  831. case UI_CLIST_TITLE_TITLE_MENU:
  832. gxbPlayClassMode=P_CLASS_MODE_TITLE;
  833. gxwTotalFileInSelClass=gxwTotalFileInClass;
  834. START_PLAY_MUSIC:
  835. UiClassListPlayMusic();
  836. UiGoNoMenu();
  837. break;
  838. default: //enter other menu
  839. if(UiCListIsRootMenu())
  840. gxwTotalFileInSelClass=stCdbClassInfo_wTotalMusic;
  841. gxwCurtFileInClass=0;
  842. gxwTotalFileInClass=stCdbClassInfo_wTotalChild;
  843. UiCdbSearchCListData(CDB_SEARCH_ENTER);
  844. gxbUiMenuMainStates++; //enter next state
  845. UiGoClassList(UIGetCListDispType());
  846. break;
  847. }
  848. // WHH #14 301_070107
  849. //OledReverse(OLED_FLIST_COL,LINE2PIXEL(gxbUiMenuSubStates),OLED_FLIST_END_COLUMN-OLED_FLIST_COL+1,LINE1);
  850. }
  851. //You should set gxwCurtFileInClass, gxwTotalFileInClass befor calling this function
  852. void UiGoClassList(BYTE bCListNum) large
  853. {
  854. BYTE bI;
  855. DWORD dwOldCdbAddPoint;
  856. // LCD_CTRL_DIS();
  857. PeFillDspBuf();
  858. // LCD_CTRL_EN();
  859. // WHH #14 301_070107
  860.         //OLED_CLEAR_ALL();
  861. UiShowLargeBackground(5,IM_BROWSER_BG_S1); //tne 2007/01/10 #2
  862. // WHH #14 301_070107
  863. if(gxwTotalFileInClass>(UI_CLASSLST_NUM-1))
  864. {
  865. if((gxwCurtFileInClass+(UI_CLASSLST_NUM))>gxwTotalFileInClass) //last 4 music
  866. gxbUiMenuSubStates=(UI_CLASSLST_NUM-1)-(gxwTotalFileInClass-gxwCurtFileInClass);
  867. else
  868. gxbUiMenuSubStates=0;
  869. }
  870. else
  871. {
  872. gxbUiMenuSubStates=gxwCurtFileInClass;
  873. }
  874. /*if(gxwTotalFileInClass>3)
  875. {
  876. if((gxwCurtFileInClass+4)>gxwTotalFileInClass) //last 4 music
  877. gxbUiMenuSubStates=3-(gxwTotalFileInClass-gxwCurtFileInClass);
  878. else
  879. gxbUiMenuSubStates=0;
  880. }
  881. else
  882. {
  883. gxbUiMenuSubStates=gxwCurtFileInClass;
  884. }*/
  885. //WHH #14 301_070107
  886. OledShowIconNew(1, IM_EXPLORE_BUTTON_01, UI_CLASSLST_LIGHT_START_COL, UI_CLASSLST_LIGHT_START_ROW+gxbUiMenuSubStates*UI_CLASSLST_LIGHT_ROW);
  887. if(gxbUiMenuSubStates == gxwCurtFileInClass)
  888. UiSowClassListHome(bCListNum);
  889. if(gxwTotalFileInClass==0)
  890. return;
  891. if(gxwCurtFileInClass==0)
  892. {
  893. UiCdbSearchCListData(CDB_SEARCH_FIRST|bCListNum);
  894. bI=1;
  895. }
  896. else
  897. { bI=gxbUiMenuSubStates; }
  898. dwOldCdbAddPoint=gdwCdbAddPoint;
  899. while(bI>0)
  900. {
  901. if(stCdbClassInfo.dwPrePoint==CDB_NULL_POINT) //no prev file
  902. break;
  903. UiCdbSearchCListData(CDB_SEARCH_PREV);
  904. bI--;
  905. }
  906. while(bI<(UI_CLASSLST_NUM+1))
  907. {
  908. UiCdbGetClassString();
  909. // WHH #14 301_070107
  910. //LcdShowClassList(gxbDispClassString,bI<<1);
  911. gfTransparent=TRUE;
  912. LcdShowClassList(gxbDispClassString,bI);
  913. gfTransparent=FALSE;
  914. if(stCdbClassInfo.dwNextPoint==CDB_NULL_POINT)
  915. {
  916. // WHH #14 301_070106
  917. //OledShowIcon(cwIconClassListBottom[bCListNum],WORD0,LINE2PIXEL(bI));
  918. OledShowIconNew(1, IM_BROWSER_ICON_TREE_LAST,1,UI_CLASSLST_START_ROW+(UI_FILST_TREE_ROW)*(bI));
  919. //OledShowIconNew(1, cwIconClassListBottom[bCListNum],7,UI_CLASSLST_START_ROW+(UI_CLASSLST_TREE_ROW)*(bI));
  920. OledShowIconNew(1, cwIconClassListTop[bCListNum],7,UI_CLASSLST_START_ROW+(UI_CLASSLST_TREE_ROW)*(bI));
  921. break;
  922. }
  923. // WHH #14 301_070106
  924. //OledShowIcon(cwIconClassListNormal[bCListNum],WORD0,LINE2PIXEL(bI));
  925. OledShowIconNew(1, IM_BROWSER_ICON_TREE,1,UI_CLASSLST_START_ROW+(UI_FILST_TREE_ROW)*(bI));
  926. OledShowIconNew(1,cwIconClassListTop[bCListNum],7,UI_CLASSLST_START_ROW+(UI_CLASSLST_TREE_ROW)*(bI));
  927. UiCdbSearchCListData(CDB_SEARCH_NEXT);
  928. bI++;
  929. }
  930. // LCD_CTRL_DIS(); //tne play 320 music
  931. PeFillDspBuf();
  932. // LCD_CTRL_EN();
  933. gdwCdbAddPoint=dwOldCdbAddPoint;
  934. UiReLoadCdbInfo();
  935. //show again to get display info for lcd
  936. if(gxwCurtFileInClass>0)
  937. {
  938. //WHH #14 301_070107
  939. //LcdShowClassList(gxbDispClassString,gxbUiMenuSubStates<<1);
  940. gfTransparent=TRUE;
  941. LcdShowClassList(gxbDispClassString,gxbUiMenuSubStates);
  942. gfTransparent=FALSE;
  943. }
  944. }
  945. void UiBackClassList(void) large
  946. {
  947. DWORD dwTempCdbPoint;
  948. if(UiCListIsRootMenu())
  949. {
  950. gxbUiMenuSubStates=UIGetCListDispType();
  951. UiGoClassListTop();
  952. return;
  953. }
  954. switch(gxbUiMenuMainStates)
  955. {
  956. case UI_CLIST_GENRE_ARTIST_MENU:
  957. case UI_CLIST_ARTIST_ALBUM_MENU:
  958. case UI_CLIST_ALBUM_TITLE_MENU:
  959. gxbUiMenuMainStates--;
  960. gxwTotalFileInClass=UiCdbGetDataBaseHeader(cbGetDataBaseHeaderAdd[UIGetCListDispType()]);
  961. UiCdbSearchCListData(CDB_SEARCH_BACK);
  962. gxwCurtFileInClass=stCdbClassInfo.wItemNum;
  963. UiGoClassList(UIGetCListDispType());
  964. break;
  965. //case UI_CLIST_GENRE_ALBUM_MENU:
  966. //case UI_CLIST_GENRE_TITLE_MENU:
  967. //case UI_CLIST_ARTIST_TITLE_MENU:
  968. default:
  969. gxbUiMenuMainStates--;
  970. UiCdbSearchCListData(CDB_SEARCH_BACK);
  971. dwTempCdbPoint=gdwCdbAddPoint;
  972. UiCdbSearchCListData(CDB_SEARCH_BACK); //Back to parent to get total file number
  973. gxwTotalFileInClass=stCdbClassInfo_wTotalChild;
  974. gdwCdbAddPoint=dwTempCdbPoint;
  975. UiReLoadCdbInfo();
  976. gxwCurtFileInClass=stCdbClassInfo.wItemNum;
  977. UiGoClassList(UIGetCListDispType());
  978. break;
  979. }
  980. // WHH #14 301_070107
  981. //OledReverse(OLED_FLIST_COL,LINE2PIXEL(gxbUiMenuSubStates),OLED_FLIST_END_COLUMN-OLED_FLIST_COL+1,LINE1);
  982. }
  983. void UiClassListPlayMusic(void) large
  984. {
  985. // LCD_CTRL_DIS();
  986. //David051130#4 Start 
  987. #if(FADE_IN_OUT_MODE==0)
  988. #if(!EXT_ADC | !EXT_DAC | !EXT_PA)
  989. if(gxbSysState==S_PE_PLAY)
  990. {
  991. UiSetVolFadeOut();
  992.         }
  993. #endif
  994. #elif(FADE_IN_OUT_MODE==1)
  995. if((UiCheckDspFadeDone()!=0x02) &&(gxbSysState==S_PE_PLAY) ) //if fade out done, won't do it again
  996. {
  997. UiDspFade((DSP_FADE_OUT_EN|DSP_FADE_1_UNIT),TRUE);//bk //Vicky060119
  998. }
  999. #endif
  1000. LoadExtendMemCode();
  1001. UiSetPeStop();
  1002. UiCountFileNumInAllClass();
  1003. UiOpenClassFile();
  1004. stUiFileListData=stFsFileInf;
  1005. gpstFileIndex=&stFsFileInf;
  1006. gxbSysState=S_PE_PLAY;
  1007. UiRndPlayInit();
  1008. //PeStart(); //Walace060606#1 PlayProcess
  1009. gxbModuleState=MODULE_PLAY_CLIST;
  1010. LoadPlayProcess(PLAY_PROC_PE_CMD|P_RESTART);
  1011. //PlayEngine(P_PLAYBACK);
  1012. //PlayEngine(P_NOP);
  1013. //LCD_CTRL_EN();
  1014. }
  1015. void UiCountFileNumInAllClass(void) large
  1016. {
  1017. DWORD dwTempCdbPoint;
  1018. dwTempCdbPoint=gdwCdbAddPoint;
  1019. gxwCurtFileInAllClass=gxwCurtFileInClass;
  1020. switch(gxbUiMenuMainStates)
  1021. {
  1022. case UI_CLIST_GENRE_TITLE_MENU:
  1023. CdbSearchData(CDB_SEARCH_BACK);
  1024. while(stCdbClassInfo.dwPrePoint!=CDB_NULL_POINT)
  1025. {
  1026. CdbSearchData(CDB_SEARCH_PREV);
  1027. gxwCurtFileInAllClass += stCdbClassInfo_wTotalMusic;
  1028. }
  1029. case UI_CLIST_ARTIST_TITLE_MENU:
  1030. CdbSearchData(CDB_SEARCH_BACK);
  1031. while(stCdbClassInfo.dwPrePoint!=CDB_NULL_POINT)
  1032. {
  1033. CdbSearchData(CDB_SEARCH_PREV);
  1034. gxwCurtFileInAllClass += stCdbClassInfo_wTotalMusic;
  1035. }
  1036. break;
  1037. case UI_CLIST_ALBUM_TITLE_MENU:
  1038. case UI_CLIST_TITLE_TITLE_MENU:
  1039. break;
  1040. }
  1041. gdwCdbAddPoint=dwTempCdbPoint;
  1042. CdbGetClassHeader(gdwCdbAddPoint);
  1043. gxwTotalFileInAllClass=gxwTotalFileInSelClass;
  1044. if(gfPlayAutoSearchFile)
  1045. {
  1046. gxwNumTotalFiles=gxwTotalFileInAllClass;
  1047. gxwCurrentFileNum=gxwCurtFileInAllClass;
  1048. }
  1049. else
  1050. {
  1051. gxwNumTotalFiles=gxwTotalFileInClass;
  1052. gxwCurrentFileNum=gxwCurtFileInClass;
  1053. }
  1054. }
  1055. BOOL UiCListIsRootMenu(void) large
  1056. {
  1057. switch(gxbUiMenuMainStates)
  1058. {
  1059. case UI_CLIST_GENRE_GENRE_MENU:
  1060. case UI_CLIST_ARTIST_ARTIST_MENU:
  1061. case UI_CLIST_ALBUM_ALBUM_MENU:
  1062. case UI_CLIST_TITLE_TITLE_MENU:
  1063. return TRUE;
  1064. default:
  1065. return FALSE;
  1066. }
  1067. }
  1068. BYTE UIGetCListDispType(void) large
  1069. {
  1070. switch(gxbUiMenuMainStates)
  1071. {
  1072. case UI_CLIST_GENRE_GENRE_MENU:
  1073. return(CDB_CLASS_MODE_GENRE);
  1074. case UI_CLIST_GENRE_ARTIST_MENU:
  1075. case UI_CLIST_ARTIST_ARTIST_MENU:
  1076. return(CDB_CLASS_MODE_ARTIST);
  1077. case UI_CLIST_GENRE_ALBUM_MENU:
  1078. case UI_CLIST_ARTIST_ALBUM_MENU:
  1079. case UI_CLIST_ALBUM_ALBUM_MENU:
  1080. return(CDB_CLASS_MODE_ALBUM);
  1081. //case UI_CLIST_GENRE_TITLE_MENU:
  1082. //case UI_CLIST_ARTIST_TITLE_MENU:
  1083. //case UI_CLIST_ALBUM_TITLE_MENU:
  1084. //case UI_CLIST_TITLE_TITLE_MENU:
  1085. default:
  1086. return(CDB_CLASS_MODE_TITLE);
  1087. }
  1088. }
  1089. BOOL UiCdbSearchCListData(BYTE bSearchType) large
  1090. {
  1091. BOOL fRetVal;
  1092. BYTE bFreqDiv; //tne play 320 music
  1093. //LCD_CTRL_DIS();
  1094. fRetVal=TRUE;
  1095. bFreqDiv=obCLKMCUDIVF; //tne play 320 music
  1096. SetSysSpeed(0x02);
  1097. if(!UiCListIsRootMenu())
  1098. {
  1099. //DataBase not support this first, Ui control to find first data
  1100. if( ((bSearchType&CDB_SEARCH_WAY)==CDB_SEARCH_FIRST) || ((bSearchType&CDB_SEARCH_WAY)==CDB_SEARCH_LAST) )
  1101. {
  1102. if(!CdbSearchData(CDB_SEARCH_BACK))
  1103. {
  1104. fRetVal=FALSE;
  1105. goto FINISH_SEARCH;
  1106. }
  1107. if( (bSearchType&CDB_SEARCH_WAY)==CDB_SEARCH_FIRST )
  1108. fRetVal=CdbSearchData(CDB_SEARCH_ENTER);
  1109. else if( (bSearchType&CDB_SEARCH_WAY)==CDB_SEARCH_LAST )
  1110. fRetVal=CdbSearchData(CDB_SEARCH_ENTER_LAST);
  1111. goto FINISH_SEARCH;
  1112. }
  1113. }
  1114. PeFillDspBuf(); //tne play 320 music //test debug
  1115. fRetVal=CdbSearchData(bSearchType);
  1116. FINISH_SEARCH:
  1117. SetSysSpeed(bFreqDiv); //tne play 320 music
  1118. //LCD_CTRL_EN();
  1119. return fRetVal;
  1120. }
  1121. void UiReLoadCdbInfo(void) large
  1122. {
  1123. //LCD_CTRL_DIS();
  1124. CdbGetClassHeader(gdwCdbAddPoint);
  1125. CdbGetClassString(gdwCdbAddPoint,gxbDispClassString);
  1126. //LCD_CTRL_EN();
  1127. }
  1128. BOOL UiCdbGetClassString(void) large
  1129. {
  1130. BOOL fRetVal;
  1131. //LCD_CTRL_DIS();
  1132. fRetVal=CdbGetClassString(gdwCdbAddPoint,gxbDispClassString);
  1133. //LCD_CTRL_EN();
  1134. return fRetVal;
  1135. }
  1136. DWORD UiCdbGetDataBaseHeader(BYTE bInfAdd) large
  1137. {
  1138. DWORD dwRetVal;
  1139. //LCD_CTRL_DIS();
  1140. dwRetVal=CdbGetDataBaseHeader(bInfAdd);
  1141. //LCD_CTRL_EN();
  1142. return dwRetVal;
  1143. }
  1144. void UiRestoreCList(void) large
  1145. {
  1146. if(gdwCdbAddPoint!=CDB_NULL_POINT)
  1147. {
  1148. gxwTotalFileInClass=gxwOldTotalFileInClass;
  1149. gxwCurtFileInClass=gxwOldCurtFileInClass;
  1150. gdwCdbAddPoint=gdwOldCdbAddPoint;
  1151. UiReLoadCdbInfo();
  1152. }
  1153. }
  1154. void UiFirstGoCList(void) large
  1155. {
  1156.         //Walace060607#1 PlayProcess
  1157. if((gxbModuleState & MODULE_SUB)==MODULE_DEL_AFTER_PRC||
  1158.    (gxbModuleState & MODULE_SUB)==MODULE_FILE_DEL)
  1159. {
  1160. gxwTotalFileInSelClass=gxwOldDelTotalFileInSelClass;
  1161. gxbModuleState=MODULE_PLAY_CLIST;
  1162. }
  1163. else
  1164. {
  1165. gxwTotalFileInSelClass=gxwTotalFileInAllClass;
  1166. gxbUiMenuMainStates=cbEnterTitleCListMainSts[gxbPlayClassMode];
  1167. }
  1168. UiGoClassList(UIGetCListDispType()); //tne dir del
  1169. // WHH #14 301_070107
  1170. //OledReverse(OLED_FLIST_COL,LINE2PIXEL(gxbUiMenuSubStates),OLED_FLIST_END_COLUMN-OLED_FLIST_COL+1,LINE1);
  1171. }
  1172. void UiGoRefreshSureMenu(void) large
  1173. {
  1174. //Display Error Message
  1175. OLED_CLEAR_ALL();
  1176. StrShowSysString(SYS_STR_NOT_REFRESH_DB,LCD_AUTO_CENTER_COL,PAGE3);
  1177. gxbLcdCounter=0;
  1178. //LCD_CTRL_DIS();
  1179. while(gxbLcdCounter<42)
  1180. {
  1181. PlayEngine(P_NOP);
  1182. }
  1183. //LCD_CTRL_EN();
  1184. UiDrawSubMenu(SYS_STR_TOOLS_REFRESH);
  1185. gxbUiMenuMainStates=UI_REFRESH_YES_NO_MENU;
  1186. gxbUiMenuSubStates=FALSE;
  1187. UiDispYesNoMenu();
  1188. }
  1189. // WHH #14 301_070107
  1190. void UiDispClassListTopMenu(BYTE bflag) 
  1191. {
  1192. if(bflag)
  1193. {
  1194. OledShowIconNew(1,IM_MAINMENU_BUTTON_01 ,0,UI_CLASSLST_SELECT_ROW_START+gxbUiMenuSubStates*UI_CLASSLST_SELECT_ROW_DIFF);
  1195. OledShowIconNew(1, cwIconClassListTopSelect[gxbUiMenuSubStates],UI_CLASSLST_SELECT_COL_START,UI_CLASSLST_SELECT_ROW_START+1+gxbUiMenuSubStates*UI_CLASSLST_SELECT_ROW_DIFF);
  1196. }
  1197. else
  1198. {
  1199. OledShowIconNew(1,IM_EXPLORE_BUTTON_CLEAR_ALL ,0,UI_CLASSLST_SELECT_ROW_START+gxbUiMenuSubStates*UI_CLASSLST_SELECT_ROW_DIFF);
  1200. OledShowIconNew(1, cwIconClassListTop[gxbUiMenuSubStates],UI_CLASSLST_SELECT_COL_START,UI_CLASSLST_SELECT_ROW_START+1+gxbUiMenuSubStates*UI_CLASSLST_SELECT_ROW_DIFF);
  1201. }
  1202. gfTransparent=TRUE;
  1203. StrShowSysString(cwStringClassList[gxbUiMenuSubStates],UI_CLASSLST_SELECT_COL_START+16,UI_CLASSLST_SELECT_ROW_START+1+gxbUiMenuSubStates*UI_CLASSLST_SELECT_ROW_DIFF);
  1204. gfTransparent=FALSE;
  1205. }
  1206. /* //tne 2007/01/14 #1
  1207. void UiDispYesNoMenu(void) large
  1208. {
  1209. CLEAR_MENU_NUM_AREA(); //Walace060426#3
  1210. UiShowSubMenuNum(gxbUiMenuSubStates+1,2);
  1211. //CLEAR_MENU_NUM_AREA(); //Walace060426#3
  1212. StrShowSysString(cwStringSysYesNoList[gxbUiMenuSubStates],LCD_AUTO_CENTER_COL,OLED_TAG_ROW);
  1213. }
  1214. */