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

压缩解压

开发平台:

C++ Builder

  1. /*==========================================================================
  2. Copyright (c) 2004 ALi Corporation. All Rights Reserved
  3. File: UiPlayMenu2.h
  4. content: rec menu in playback module 
  5. History: Created by TNE 2005/6/6
  6. ==========================================================================*/
  7. #define _UI_MENU_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 "OledString.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 "UiFileList.h"
  27. #include "UiPlayMenu2.h"
  28. #include "IconDefine.h"
  29. #include "OLED.h"
  30. void UiErrHandle(void) large;
  31. void UiShowMusicMenuText(void) large;
  32. void UiEnterMenuItem(void) large;
  33. void UiBackMenuItem(void) large;
  34. void UiRecMenuEnter(void) large;
  35. void UiFromMenuEnter(void) large;
  36. void UiQtyMenuEnter(void) large;
  37. void UiVadMenuEnter(void) large;
  38. void UiWorkBackMenu(void) large;
  39. void UiAgcMenuEnter(void) large; //tne 2006/01/16
  40. void UiRecMenuDispCtrl(BYTE gxbPeDispCmd);  //Walace060606#PlayProcess
  41. code CWORD *pcbMenuListStr[]=
  42. {
  43. cwStringRecList,
  44. cwStringRecSrcList,
  45. 0, //Quality //dummy
  46. cwStringOffOnList, //VAD
  47. cwStringOffOnList, //AGC //tne 2006/01/16
  48. };
  49. CBYTE cbMenuMaxItemNum[]=
  50. {
  51. MENU_REC_MAX_ITEM_NUM,
  52. MENU_REC_SRC_MAX_ITEM_NUM,
  53. MENU_REC_QTY_MAX_ITEM_NUM, //Dummy
  54. MENU_REC_VAD_MAX_ITEM_NUM,
  55. MENU_REC_AGC_MAX_ITEM_NUM, //tne 2006/01/16
  56. };
  57. CBYTE cbMenuTitleStr[]=
  58. {
  59. SYS_STR_MENU,
  60. SYS_STR_MENU_REC_SOURCE,
  61. SYS_STR_MENU_REC_QUALITY,
  62. SYS_STR_MENU_REC_VAD,
  63. SYS_STR_MENU_REC_AGC, //tne 2006/01/16
  64. };
  65. ////////////////////////////////////////////////////////////////////////////////////
  66. /////////////////////////////////  Ui Header End ///////////////////////////////////
  67. ////////////////////////////////////////////////////////////////////////////////////
  68. void main(void)
  69. {
  70. BYTE bKey,bPeCommand;
  71. //Walace060607#1 PlayProcess
  72. if((gxbModuleState&MODULE_SUB)==MODULE_PRC_EOF_CTRL)
  73. KeepMemory(RESTORE_MEMORY);
  74. SetSysSpeed(0x08);
  75.        bPeCommand=P_NOP;
  76. EA = 1;
  77. bKey=KEY_INVALID;
  78. #if(ICE_REAL_MODE) //vicky061001#2 Debug Play
  79. EnableTimer0();
  80. IE=0x83;
  81. #endif
  82. #if(_PM_PLAY_)
  83. PeFillDspBuf() ;
  84. #endif
  85. //Walace060607#1 PlayProcess
  86. if((gxbModuleState&MODULE_SUB)==MODULE_PRC_EOF_CTRL)
  87. {
  88. gxbModuleState=MODULE_REC_MENU;
  89. goto ERROR_HANDLE;
  90. }
  91.         //NandRestore start
  92. if((gxbModuleState&MODULE_SUB)==MODULE_NAND_RTN_RESOTRE) //Nick061120
  93. {
  94. gxbModuleState=MODULE_REC_MENU;
  95. goto RETURN_FROM_NANDRESTORE;
  96.         }
  97. //NandRestore end
  98. gxbModuleState=MODULE_REC_MENU;
  99. OLED_DISP_MASK_INIT();
  100. gxfSourceUnicode=STRING_TYPE_ASCII;
  101. gxbCheckBattCounter=0;
  102. gxbBtyReTestNum=0;
  103. gxbBtyLowNum=0;
  104. gxbPwOffCounter=0;
  105. gpstFileIndex=&stFsFileInf;
  106. gxbLcdLimitCol=MAX_COLNUM;
  107. #if(SYS_USE_KEY_HOLD)
  108. gfLastKeyLocked=KEY_UNLOCK;
  109. #endif
  110. UiFileListFileType=UI_FILE_LIST_PLAYBACK;
  111. gfPwOffStop=FALSE;
  112. #if(UI_USE_CHK_CARD)
  113. if(gxbStorage!=STOR_NAND)
  114.                 UiCheckCardRemoved();
  115. #endif
  116. UiDrawBasicMusicMenu();
  117. UiShowMusicMenuText();
  118. goto ERROR_HANDLE;
  119. while(1)
  120. {
  121. KeyGet(bKey);
  122. UiCheckBackLight(bKey);
  123. UiNormalCheck();
  124. #if(USE_LYRIC_DISPLAY)
  125. UiPlayLyricControl();
  126. #endif
  127. bPeCommand=P_NOP;
  128. #if(!EXT_ADC | !EXT_DAC | !EXT_PA)
  129. if(gxbMusicProcState==MUSIC_PROC_BODY) //Renshuo050603#A
  130. {       
  131. //IntCdcSetPaGainTask(FALSE); //Renshuo041203#A //Ren050312#1
  132. CdcSetPaGainTask(PA_TASK_UNIMMEDIATE|PA_TASK_DELAY);  //Walace060525#4 //tne 2006/12/26 #1
  133. }
  134. #endif
  135. switch(bKey)
  136. {
  137. case KEY_LEFT_LONG:
  138. case KEY_LEFT_BREAK:
  139. UiPrevMenuItem();
  140. break;
  141. case KEY_RIGHT_LONG:
  142. case KEY_RIGHT_BREAK:
  143. UiNextMenuItem();
  144. break;
  145. case KEY_UP_BREAK:
  146. UiEnterMenuItem();
  147. break;
  148. case KEY_FUNC_BREAK:
  149. case KEY_MODE_BREAK:
  150. UiBackMenuItem();
  151. break;
  152. }
  153. #if(PLAY_ERR_THEN_NEXT_MUSIC) //Walace061024#2
  154. EOF_CTRL_PROC:
  155. #endif
  156. //End of file control
  157. #include "EOF_Ctrl.h"
  158. gpstFileIndex=&stFsFileInf; //Vicky050321#2
  159. PlayEngine(bPeCommand);
  160. ERROR_HANDLE:
  161. if(gxbErrCode!=ERR_NO_ERROR)
  162. {
  163. #if(PLAY_ERR_THEN_NEXT_MUSIC) //Walace061024#2
  164. if(gxbErrCode==ERR_PE_UNSUPPORT_FORMAT||gxbErrCode==ERR_PE_NO_AUTHORITY)
  165. {
  166. bPeCommand=P_NEXT; 
  167. gxbErrCode = ERR_NO_ERROR;
  168. goto EOF_CTRL_PROC;
  169. }
  170. else
  171. {
  172. PlayEngine(P_STOP); //Walace061024#2
  173. }
  174. #else
  175. PlayEngine(P_STOP); //Walace061024#2
  176. #endif
  177. }
  178.    
  179. UiRecMenuDispCtrl(gxbPeDispCmd);
  180. gxbPeDispCmd=UI_PE_NOP;        
  181. #if(1)
  182. //vicky070105#3 remove to function
  183. UiCheckNandRestore(MODULE_REC_MENU);
  184. #else
  185. //Nick061120 start  //Walace061126#1 start
  186. if((gxbRestoreBlkNum || (gxwTimeToScanPM > SCAN_PM_DURATION)) && 
  187. (gfChangeMusic || gxbSysState==S_PE_PAUSE||gxbSysState==S_PE_WAIT)&&gfMLCMode) //Nick061204
  188. {
  189. //LCD_CTRL_DIS(); 
  190.         gxbModuleState=MODULE_REC_MENU;
  191. //Nick061204 start
  192. if(gxwTimeToScanPM > SCAN_PM_DURATION)
  193. gxbRestoreCMD |= PM_SCAN;
  194. else
  195. gxbRestoreCMD = FullStep;
  196. //Nick061204 end
  197. KeepMemory(KEEP_MEMORY) ;
  198. LoadProgram(PM_PLAY_DATA_RTN_RESTORE, BASIC_CODE_ONLY);
  199. #endif
  200. RETURN_FROM_NANDRESTORE:
  201. //Nick061120 end  //Walace061126#1 end
  202. if(gfChangeMusic)
  203. {
  204. gxdwLastFileSize=0;
  205. if( (gxbIntroMode) && (gfIntroPlaying!=INTRO_PLAY) )
  206. {
  207. UiGoIntroMode();
  208. UiGoNoMenu();
  209. }
  210. gfChangeMusic=FALSE;
  211. }
  212.         
  213. }
  214. }
  215. API void UiFsDispCtrl(BYTE bStatus) large //tne play 320 music
  216. {
  217. switch(bStatus)
  218. {
  219. default:
  220. case UI_FS_OPENING_FILE:
  221. //PeFillDspBuf(); //not need
  222. break;
  223. }
  224. }
  225. //Walace060606#1 PlayProcess  
  226. API void UiRecMenuDispCtrl(BYTE bStatus)
  227. {
  228. #if(USE_ERR_MSG_DISPLAY)
  229. if(gxbErrCode!=ERR_NO_ERROR)
  230. {
  231. UiErrHandle();
  232. return;
  233. }
  234. #endif
  235. }
  236. #if(0) //Walace060606#1 PlayProcess
  237. API void UiDispCtrl(BYTE bStatus)
  238. {
  239. //#if(!_PM_DVR_) //tne 2006/01/16
  240. WORD wDspVal=gxbUiMenuSubStates;
  241. //#endif //tne 2006/01/16
  242. #if(USE_ERR_MSG_DISPLAY)
  243. if(gxbErrCode!=ERR_NO_ERROR)
  244. {
  245. UiErrHandle();
  246. return;
  247. }
  248. #endif
  249. if(bStatus==UI_PE_START_END)
  250. {
  251. gxbLastErrCode=ERR_NO_ERROR;
  252. //UiCountCurtFileNum(&stUiFileListData,&stFsFileInf);
  253. //Walace060127#2 start
  254. /*
  255. #if(!UI_EQ_CUSTOM)                                         //  Jeff_051116
  256. IdmaPioDmxW(&gxwEqMode,DSP_EQ_ADDR,1,DSP_W16);
  257. #else
  258. UiSetEqGain();
  259. #endif
  260. //chun_chi 060105
  261. #if(UI_USE_USER_EQ)
  262. if(gxwEqMode==EQ_USER)
  263. UiSetEqGain(EQ_USER);
  264. #endif
  265. IdmaPioDmxW(&gxw3DMode,DSP_3D_ADDR,1,DSP_W16);
  266.               */
  267.               IdmaPioDmxW(&gxw3DMode,DSP_3D_ADDR,1,DSP_W16);
  268.               UiSetEqGain(gxwEqMode);
  269.               //Walace060127#2 end
  270. #if(USE_LYRIC_DISPLAY)
  271. gxbLcdLyricStatus=LCD_LYRIC_SCROLL_DONE; // set done to show first lyric
  272. gxbLastLyrcBuf[1]=0; //tne 2005/08/11
  273. #endif
  274. gxwCurrentPlayTime=0; //set 0 for intro mode
  275. //gxdwCurrentLrcTime=0; //tne 2006/02/10 #1 //Walace060226#remove
  276. gfFillDspBufEn=TRUE;
  277. }
  278. else if(bStatus==UI_PE_START_START) //tne 2005/08/10
  279. {
  280. LoadExtendMemCode();
  281. gfFillDspBufEn=FALSE;
  282. UiCountCurtFileNum(&stUiFileListData,&stFsFileInf);
  283. #if(UI_DISP_DIR_NAME)
  284. UiGetCurtDirName();
  285. #endif
  286. }
  287. else if(bStatus==UI_PE_STOP)
  288. {
  289. if(!gfPwOffStop) //tne 2005/11/21 #2
  290. {
  291. UiRndPlayInit();
  292. gxwCurrentPlayTime=0;
  293. //gxdwCurrentLrcTime=0; //tne 2006/02/10 #1 //Walace060226#remove
  294. }
  295. }
  296. }
  297. #endif
  298. void UiErrHandle(void) large
  299. {
  300. #if(USE_ERR_MSG_DISPLAY)
  301. if(gxbErrCode!=ERR_NO_ERROR)
  302. gxbLastErrCode=gxbErrCode;
  303. #endif
  304. }
  305. void UiShowMusicMenuText(void) large
  306. {
  307. if(gxbUiMenuMainStates==UI_QTY_MENU)
  308. {
  309. UiGoRecQtyMenu();
  310. }
  311. else
  312. {
  313. // tne 2006/12/05 #2 //start
  314.        UiShowSubMenuNum(gxbUiMenuSubStates+1,cbMenuMaxItemNum[gxbUiMenuMainStates-MUSIC_MENU_MAIN_START_NUM]);
  315. UI_SHOW_MENU_TAG_STRING(pcbMenuListStr[gxbUiMenuMainStates-MUSIC_MENU_MAIN_START_NUM][gxbUiMenuSubStates]);
  316. UI_SHOW_MENU_TITLE_STRING(cbMenuTitleStr[gxbUiMenuMainStates-MUSIC_MENU_MAIN_START_NUM]);
  317. // tne 2006/12/05 #2 //end
  318. }
  319. }
  320. void UiEnterMenuItem(void) large
  321. {
  322. switch(gxbUiMenuMainStates)
  323. {
  324. case UI_REC_MENU:
  325. UiRecMenuEnter();
  326. return;
  327. case UI_FROM_MENU:
  328. UiFromMenuEnter();
  329. break;
  330. case UI_QTY_MENU:
  331. UiQtyMenuEnter();
  332. break;
  333. case UI_VAD_MENU:
  334. UiVadMenuEnter();
  335. break;
  336. case UI_AGC_MENU:
  337. UiAgcMenuEnter();
  338. break;
  339. }
  340. UiGoNoMenu();
  341. }
  342. void UiBackMenuItem(void) large
  343. {
  344. UiWorkBackMenu();
  345.     
  346. //if(gxbUiMenuMainStates==UI_QTY_MENU)
  347. // UiDrawBasicMusicMenu();
  348.     
  349. gxbUiMenuMainStates=UI_REC_MENU;
  350. UiShowMusicMenuText();
  351. }
  352. void UiWorkBackMenu(void) large
  353. {
  354. switch(gxbUiMenuMainStates)
  355. {
  356. case UI_REC_MENU:
  357. UiGoNoMenu();
  358. break;
  359. case UI_FROM_MENU:
  360. gxbUiMenuSubStates=UI_REC_FROM_MENU;
  361. break;
  362. case UI_QTY_MENU:
  363. UiDrawBasicMusicMenu();
  364. gxbUiMenuSubStates=UI_REC_QTY_MENU;
  365. break;
  366. case UI_VAD_MENU:
  367. gxbUiMenuSubStates=UI_REC_VAD_MENU;
  368. break;
  369. case UI_AGC_MENU:
  370. gxbUiMenuSubStates=UI_REC_AGC_MENU;
  371. break;
  372. }
  373. }
  374. void UiRecMenuEnter(void) large
  375. {
  376. switch(gxbUiMenuSubStates)
  377. {
  378. case UI_REC_FROM_MENU:
  379. gxbUiMenuMainStates=UI_FROM_MENU;
  380. gxbUiMenuSubStates=gxbRecSource;
  381. break;
  382. case UI_REC_QTY_MENU:
  383. #if(UI_USE_LINE_REC_QTY)
  384. //Walace060914#1 start
  385. //OledClearArea(SEG4,LINE0,SEG5,LINE1);//LcdClearBlock(0,32,2,72);
  386. //OledClearArea(SEG0,LINE1,OLED_MAX_COL-SEG0,LINE3);//LcdClearBlock(2,0,6,MAX_COLNUM+1);
  387. OledClearArea(SEG0,UI_MENU_FRAME_ROW,OLED_MAX_COL-SEG0,OLED_MAX_ROW-UI_MENU_FRAME_ROW);//LcdClearBlock(2,0,6,MAX_COLNUM+1);
  388. //Walace060914#1 end
  389. StrShowSysString(SYS_STR_MENU_REC_QUALITY,SEG2,PAGE0);
  390. //if(UI_USE_PROGRESS_BAR) //Walace060831#5
  391. //ShowProgress(11,PAGE6,((WORD)(gxbUiMenuSubStates+1)*PROGRESS_MAX)/(UI_QTY_MAX+1));
  392. //endif
  393. #else
  394. UiDrawSubMenu(SYS_STR_MENU_REC_QUALITY);
  395. #endif
  396. gxbUiMenuSubStates=gxbRecQuality;
  397. gxbUiMenuMainStates=UI_QTY_MENU;
  398. UiGoRecQtyMenu();
  399. break;
  400. case UI_REC_VAD_MENU:
  401. gxbUiMenuMainStates=UI_VAD_MENU;
  402. gxbUiMenuSubStates = (gxbRecOption & REC_VAD_EN_MODE)/REC_VAD_EN_MODE; //tne 2006/01/16
  403. break;
  404. case UI_REC_AGC_MENU: //tne 2006/01/16
  405. gxbUiMenuMainStates=UI_AGC_MENU;
  406. gxbUiMenuSubStates = (gxbRecOption & REC_AGC_EN_MODE)/REC_AGC_EN_MODE;
  407. break;
  408. }
  409. UiShowMusicMenuText();
  410. }
  411. void UiFromMenuEnter(void) large
  412. {
  413. gxbRecSource=gxbUiMenuSubStates;
  414. }
  415. void UiQtyMenuEnter(void) large 
  416. {
  417.   gxbRecQuality=gxbUiMenuSubStates;
  418. }
  419. void UiVadMenuEnter(void) large
  420. {
  421. //tne 2006/01/16
  422. if(gxbUiMenuSubStates)
  423. gxbRecOption |= REC_VAD_EN_MODE;
  424. else
  425. gxbRecOption &= (~REC_VAD_EN_MODE);
  426. }
  427. //tne 2006/01/16
  428. void UiAgcMenuEnter(void) large
  429. {
  430. if(gxbUiMenuSubStates)
  431. gxbRecOption |= REC_AGC_EN_MODE;
  432. else
  433. gxbRecOption &= (~REC_AGC_EN_MODE);
  434. }
  435. void UiGoNoMenu(void)
  436. {
  437. DetermineDspClock(gxbPlaybackRate,gxw3DMode); //Vicky060303#1
  438. PeFillDspBuf();
  439. //speed up to download code
  440. SetSysSpeed(0x02);
  441. gxbModuleState=MODULE_PLAY_MENU; //Walace060607#1 PlayProcess
  442. LoadProgram(PM_PLAY_DVR,BASIC_CODE_ONLY);
  443. }