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

压缩解压

开发平台:

C++ Builder

  1. /*==========================================================================
  2. Copyright (c) 2004 ALi Corporation. All Rights Reserved
  3. File: UiCommon.c
  4. content: user interface for system module
  5. History: Created by TNE 2004/8/17
  6. ==========================================================================*/
  7. #define _UI_FSDELETE_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 "ClassDataBase.h"
  19. #include "NandFlash.h"
  20. #include "UiSys.h"
  21. #include "SD.h"
  22. #include "FileSystem.h"
  23. #include "SaveSetting.h"
  24. #include "IconDefine.h"
  25. // WHH #3 301_061225(start)
  26. #include "IconDefine1.h"
  27. #include "IconDefine2.h"
  28. #include "IconDefineMenu1.h"
  29. #include "IconDefineMenu2.h"
  30. #include "IconDefineMenu3.h"
  31. #include "IconDefineGame.h"
  32. // WHH #3 301_061225(end)
  33. #include "Oled.h"
  34. #if(USE_STEP_UP_CONVERTER)
  35. #include "StepUp.h"
  36. #endif
  37. void SetModifyFlag(BYTE bModifyFlag) large;
  38. void CheckCdbReflash(void) large;
  39. void CheckRecFile(void) large;
  40. void RecoverRecFile(void) large;
  41. struct FILE_INF_DATA xdata stFsInitChk;
  42. /*
  43. #if(UI_DISP_CDB_HOURGLASS)
  44. CBYTE cbIcon_Hourglass_1[]={0x0,0x0,0x0,0x0,0x0,0xC,0xFC,0x14,0x94,0x14,0x94,0x1C,0x9C,0x1C,0xFC,0xC,0x0,0x0,0x0,0x0,
  45. 0x0,0x0,0x0,0x0,0x0,0x0,0xC0,0x21,0x12,0xD,0x2,0xD,0x12,0x21,0xC0,0x0,0x0,0x0,0x0,0x0,
  46. 0x0,0x0,0x0,0x0,0x0,0xC,0xF,0xA,0xA,0xA,0xA,0xE,0xE,0xE,0xF,0xC,0x0,0x0,0x0,0x0,
  47. };
  48. #endif
  49. CBYTE cbIcon_Hourglass_2[]={0x0,0x0,0x0,0x0,0x0,0xC,0xFC,0x14,0x94,0x14,0x14,0x1C,0x1C,0x1C,0xFC,0xC,0x0,0x0,0x0,0x0,
  50. 0x0,0x0,0x0,0x0,0x0,0x0,0xC0,0x21,0x12,0xD,0x52,0xD,0x12,0x21,0xC0,0x0,0x0,0x0,0x0,0x0,
  51. 0x0,0x0,0x0,0x0,0x0,0xC,0xF,0xA,0xB,0xA,0xB,0xE,0xF,0xE,0xF,0xC,0x0,0x0,0x0,0x0,
  52. };
  53. #if(UI_DISP_CDB_HOURGLASS)
  54. CBYTE cbIcon_Hourglass_3[]={0x0,0x0,0x0,0x0,0x0,0xC,0xFC,0x14,0x14,0x14,0x14,0x1C,0x1C,0x1C,0xFC,0xC,0x0,0x0,0x0,0x0,
  55. 0x0,0x0,0x0,0x0,0x0,0x0,0xC0,0xA1,0x52,0x8C,0x40,0x8C,0x52,0xA1,0xC0,0x0,0x0,0x0,0x0,0x0,
  56. 0x0,0x0,0x0,0x0,0x0,0xC,0xF,0xA,0xB,0xA,0xB,0xE,0xF,0xE,0xF,0xC,0x0,0x0,0x0,0x0,
  57. };
  58. CBYTE cbIcon_Hourglass_4[]={0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xC0,0x20,0x10,0xE,0x16,0x2C,0x58,0xF0,0xE0,0xC0,0x80,
  59. 0x60,0xA0,0x60,0xD0,0xA8,0x44,0xA4,0x44,0x84,0x43,0xF0,0x8,0x8,0x8,0x8,0x4,0x2,0x1,0x1,0x1,
  60. 0x0,0x0,0x1,0x2,0x7,0xF,0x1E,0x1D,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  61. };
  62. CBYTE cbIcon_Hourglass_5[]={0x0,0x0,0xC0,0xC0,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0xC0,0xC0,
  63. 0x0,0x0,0xFF,0xF0,0xFF,0xA0,0xD0,0xA0,0x51,0x22,0x14,0x14,0x22,0x41,0x80,0x80,0x80,0xFF,0xF0,0xFF,
  64. 0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,
  65. };
  66. CBYTE cbIcon_Hourglass_6[]={0x80,0x40,0xA0,0xD0,0x78,0x3C,0x1E,0xE,0x10,0xA0,0xC0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
  67. 0x1,0x1,0x1,0x2,0x4,0xA,0xD,0xA,0xD,0xF2,0x3,0x4,0x4,0x4,0x4,0x88,0xD0,0xE0,0xE0,0x60,
  68. 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x1C,0x1A,0xD,0x6,0x3,0x1,0x0,0x0,
  69. };
  70. code PBYTE pbIconHourGlassPoint[]=
  71. {
  72. cbIcon_Hourglass_1,
  73. cbIcon_Hourglass_2,
  74. cbIcon_Hourglass_3,
  75. cbIcon_Hourglass_4,
  76. cbIcon_Hourglass_5,
  77. cbIcon_Hourglass_6,
  78. };
  79. #endif
  80. */
  81. ////////////////////////////////////////////////////////////////////////////////////
  82. /////////////////////////////////  Ui Header End ///////////////////////////////////
  83. ////////////////////////////////////////////////////////////////////////////////////
  84. /*--------------------------------------------------------------------------
  85. Description:
  86. Main program for TARGET System
  87. Arguments:
  88. Global arguments:
  89. Returns: 
  90. --------------------------------------------------------------------------*/
  91. main(void) large
  92. {
  93. //obPMSIZE|=0x04;  //MCU USE ALL
  94. #if(SETTING_FOR_ICE_START)
  95. SettingForIceStart();
  96. //SM Clock
  97. obCLKSMDIVF=0x01;
  98. obCLKSMCTRL=0xC8; //147/3=49
  99. gxwAddrPMI=0;
  100. NandInit();
  101. FsInit();
  102. OledCtrlEn();
  103. OledInit();
  104. OledCtrlDis();
  105. LoadStringTableIndex();
  106. LoadTransTableIndex();
  107. KeyInit();
  108. EnableTimer0();
  109. //gxbFsDelId = FSDEL_INIT_FS | FSDEL_GO_USB;
  110. //gxbFsDelId=FSDEL_GO_PLAY|FSDEL_SCAN_DB;
  111. gxbFsDelId = FSDEL_GO_AMUSE; //Vicky060301
  112. #endif
  113. #if(CDB_OPTION_SYS_CACHE)
  114. obPMSIZE|=0x04;  //MCU USE ALL //System cache use 0xA000-0xBFFF
  115. #endif
  116. EA=0;
  117. //DCV_SET_PWM(); //David050719, Shiaw-Yi suggests
  118. //SetDCVPWMCycle(PWM_NORMAL_CYCLE); //Walace060607#4  //Walace060720#1
  119. /* //move to init
  120. if(gxbFsDelId & FSDEL_INIT_FS)
  121. {
  122. obCLKMCUDIVF=0x02;
  123. gfNandInit=FALSE;
  124. NandInit();
  125. FsInit();
  126. obCLKMCUDIVF=0x08;
  127. }
  128. */
  129. OLED_DISP_MASK_INIT();
  130. //OLED_CLEAR_ALL(); //Walace060501#3
  131. stFsInitChk.pbFileName=gxbFileName;
  132. stFsInitChk.pbLongFileName=gxbLongFileName;
  133. gpstFileIndex=&stFsInitChk;
  134. gxbLcdLimitCol=MAX_COLNUM;
  135. #if(!UI_USE_CLASS_LIST) //Walace070130#1 start
  136. // Dummy call for disable Class UI function, because of that It occupies the data memory by "the uncalled function"
  137. // after Keil C optimization.
  138. //if(gxbLcdLimitCol!=0xFF)    // Jeff070515#1
  139. if(gxbLcdLimitCol!=MAX_COLNUM)    // Jeff070515#1
  140. {
  141. StrCompWithCase(&gxbLcdLimitCol, &gxbLcdLimitCol,0xFF);
  142. CommonDelay(0xFFFF);
  143. ParserGetField(&gxbLcdLimitCol,0xFFFF, (PWORD)&gxbLcdLimitCol,TRUE, TRUE);
  144. FsOpenFile(0xFF);
  145. FsWriteFileHeader();
  146. FsWriteWmaHeader();
  147. //OledShowIcon(0xFFFF,0xFF,0xFF);
  148. ShowProgress(0xFF,0xFF,0xFF);
  149. }
  150. #endif //Walace070130#1 end
  151. if(!gbFsUnableUse)  //Walace060629#2
  152. {
  153. #if(NANDRESTORE_EN)
  154. CheckNandReStore(); //Scott061212
  155. #endif //tne CDB with SD
  156. #if(UI_USE_CLASS_LIST)
  157. if((gxbFsDelId&FSDEL_SCAN_DB)==0) //Force scan data base again, doesn't need to check rec file
  158. #endif
  159. {
  160. CheckRecFile();
  161. }
  162. #if(UI_USE_CLASS_LIST)
  163. CheckCdbReflash();
  164. #endif
  165. NandFinishJob();
  166. }
  167. /*
  168. #if(UI_USE_CLASS_LIST)
  169. if(gxbFsDelId&FSDEL_SCAN_DB) //Force scan data base again
  170. {
  171. SetModifyFlag(MSC_DATA_HAVE_MODIFIED);
  172. if(CdbInit())
  173. SetModifyFlag(MSC_DATA_NOT_MODIFIED);
  174. else
  175. SetModifyFlag(MSC_DATA_HAVE_MODIFIED);
  176. }
  177. else
  178. #endif
  179. {
  180. CheckRecFile();
  181. #if(UI_USE_CLASS_LIST)
  182. if( ((gxbFsDelId & FSDEL_NEXT_PM)!=FSDEL_GO_MTP) && ((gxbFsDelId & FSDEL_NEXT_PM)!=FSDEL_GO_USB) )
  183. CheckCdbReflash();
  184. #endif
  185. }
  186. */
  187. #if(SETTING_FOR_ICE_START )
  188. while(1) { }; //stop here
  189. #else
  190. switch(gxbFsDelId & FSDEL_NEXT_PM)
  191. {
  192. // WHH #1 301_061220(start)
  193. case FSDEL_GO_SAVE:
  194. gxbModuleState=MODULE_INITCHK; 
  195. LoadProgram(PM_SAVE_SETTING,NORMAL_CODE);
  196. break;  
  197. // WHH #1 301_061220(end)  
  198. case FSDEL_GO_DVR:
  199. gxbModuleState=MODULE_INITCHK; //Walace060607#1 PlayProcess
  200. LoadProgram(PM_PLAY_DVR,NORMAL_CODE);
  201. break;
  202. case FSDEL_GO_FM:
  203.                         gxbModuleState=MODULE_INITCHK; //Walace060607#1 PlayProcess
  204. gxbFmPreset=0x00; //Walace060714#2
  205. LoadProgram(PM_FM,NORMAL_CODE);
  206. break;
  207. case FSDEL_GO_HST:
  208. LoadProgram(PM_HOST,NORMAL_CODE);
  209. break;
  210. case FSDEL_GO_MTP:
  211. #if(DRM_MODE_EN)
  212. LoadProgram(PM_MTP_INIT,NORMAL_CODE);  //load MTP program
  213. #else
  214. LoadProgram(PM_USB,NORMAL_CODE); //load USB program
  215. #endif
  216. break;
  217. case FSDEL_GO_PLAY:
  218. gxbModuleState=MODULE_INITCHK; //Walace060607#1 PlayProcess
  219. LoadProgram(PM_PLAY_FAT_LARGE,NORMAL_CODE);  
  220. break;
  221. case FSDEL_GO_PHO: // Walace050916
  222. gxbModuleState=MODULE_INITCHK; //NandRestore
  223. LoadProgram(PM_PHOTO_VIEW,NORMAL_CODE); 
  224. break;
  225. case FSDEL_GO_VIDEO: // Walace051124#Video //Walace060926#1 VideoResume
  226. gxbModuleState=MODULE_INITIAL; //NandRestore
  227. LoadProgram(PM_VIDEO_FLIST,NORMAL_CODE); 
  228. break;
  229. case FSDEL_GO_SYS:
  230. case FSDEL_GO_FCTRL: //tne 2007/01/12 #1
  231. LoadProgram(PM_SYSTEM,NORMAL_CODE);
  232. break;
  233. case FSDEL_GO_USB:
  234. LoadProgram(PM_USB,NORMAL_CODE); //load USB program
  235. break;
  236. //Vicky060301
  237. #if(ENABLE_AMUSE_FUNC)
  238. case FSDEL_GO_AMUSE:
  239. IE=0;
  240. #if(ENABLE_SD_FUNCTION)
  241. SD_POWER_OFF();
  242. #endif
  243. obSYSSOFTRSTCTRL&=0xF7; //reset dsp
  244. obSYSSOFTRSTCTRL|=DSP_RST_DIS; //dsp enable
  245. obPMSIZE|=0x04; //MCU USE ALL
  246. LoadProgram(PM_AMUSE,NORMAL_CODE); //load AMUSE
  247. break;
  248. #endif
  249. //End
  250. }
  251. #endif
  252. //code will step into each LoadProgram()  and won't return
  253. }
  254. #if(UI_USE_CLASS_LIST)
  255. //clean or set MSC modify flag and reset play class mode
  256. void SetModifyFlag(BYTE bModifyFlag) large
  257. {
  258. NandPrivateEn();
  259. #if(NEW_FLASH)
  260. gfCommonModified=TRUE; //Allen060510#0 new_nf
  261. #endif
  262. ReadSettingData(FS_LRC);
  263. //tne CDB with SD
  264. if(bModifyFlag>=SD_DATA_NOT_MODIFIED)
  265. {
  266. SRAM_LRC_ACCESS(SRAM_SD_MODIFY_FLAG)=bModifyFlag;
  267. }
  268. else
  269. {
  270. SRAM_LRC_ACCESS(SRAM_MSC_MODIFY_FLAG)=bModifyFlag;
  271. }
  272. SRAM_LRC_ACCESS(SRAM_PLAY_CLASS_MODE)=P_CLASS_MODE_FILE;
  273. FsWrite(SAVE_SETTING_NAND_ADD, 1, FS_LRC);
  274. NandPrivateDis();
  275. }
  276. #endif
  277. #if(UI_USE_CLASS_LIST)
  278. //check the necessary of CDB reflash //tne CDB with SD
  279. void CheckCdbReflash(void) large
  280. {
  281. BYTE bOldStorType;
  282. if( ((gxbFsDelId & FSDEL_NEXT_PM)==FSDEL_GO_MTP) || ((gxbFsDelId & FSDEL_NEXT_PM)==FSDEL_GO_USB) )
  283. return;
  284. if(gxbStorage==STOR_NAND)
  285. {
  286. NandPrivateEn();
  287. ReadSettingData(FS_LRC);
  288. NandPrivateDis();
  289. if( (SRAM_LRC_ACCESS(SRAM_MSC_MODIFY_FLAG)==MSC_DATA_HAVE_MODIFIED) ||(gxbFsDelId&FSDEL_SCAN_DB))
  290. {
  291. SetModifyFlag(MSC_DATA_HAVE_MODIFIED);
  292. bOldStorType=gxbStorage;
  293. gxbStorType=STOR_NAND;
  294. gxbStorage=STOR_NAND;
  295. if(CdbInit())
  296. SetModifyFlag(MSC_DATA_NOT_MODIFIED);
  297. gxbStorType=bOldStorType;
  298. gxbStorage=bOldStorType;
  299. //CDB might set ERR_CDB_OVER_MAX but return TRUE here
  300. //CDB is ready to use but maybe lost some music
  301. //You could check the error code to show some message here
  302. gxbErrCode=ERR_NO_ERROR;
  303. }
  304. }
  305. else
  306. {
  307. SetModifyFlag(SD_DATA_HAVE_MODIFIED);
  308. if(CdbInit())
  309. SetModifyFlag(SD_DATA_NOT_MODIFIED);
  310. //CDB might set ERR_CDB_OVER_MAX but return TRUE here
  311. //CDB is ready to use but maybe lost some music
  312. //You could check the error code to show some message here
  313. gxbErrCode=ERR_NO_ERROR;
  314. }
  315. }
  316. #endif
  317. //check lost rec file
  318. void CheckRecFile(void) large
  319. {
  320. if(gxbStorage!=STOR_NAND) //not support
  321. return;
  322. #if(NEW_FLASH) //Allen060607 new_nf
  323. NandSettingEn();
  324. ReadSettingData(FS_LRC);
  325. NandPrivateDis();
  326. if(SRAM_LRC_ACCESS(SRAM_RECING_FLAG)==SAVE_REC_STILL_REC) //File lost
  327. {
  328. //#if(USE_STEP_UP_CONVERTER)
  329. McuClockDivfAdjust(0x02);// WHH #1 061017
  330. //#else
  331. // obCLKMCUDIVF=0x02;
  332. //#endif
  333. //allen060607 start from RecoverRecFile()
  334. stFsInitChk.bPathDepth=1;
  335. stFsInitChk.dwDirSec[1]=*((DWORD *)&SRAM_LRC_ACCESS(SRAM_RECING_ENTRY_SEC));
  336. stFsInitChk.wDirOffset[1]=*((WORD *)&SRAM_LRC_ACCESS(SRAM_RECING_ENTRY_OFF));
  337. stFsInitChk.dwFileTotalSector=*((DWORD *)&SRAM_LRC_ACCESS(SRAM_RECING_FILE_SEC));
  338. stFsInitChk.dwFileSize=(stFsInitChk.dwFileTotalSector<<9);
  339. stFsInitChk.dwDirStartSec=*((DWORD *)&SRAM_LRC_ACCESS(SRAM_RECING_ENTRY_SEC));
  340. //allen060607 end
  341. if(gxbFsDelId & FSDEL_INIT_FS)
  342. {
  343. gxdwFirstEmptyClu=2;
  344. gxdwFirstEmptyClu=FindEmptyClu();
  345. //FsRecInit();
  346. }
  347. //try to recover file here
  348. RecoverRecFile();
  349. //#if(USE_STEP_UP_CONVERTER)
  350. McuClockDivfAdjust(0x08);// WHH #1 061017 //CheckWHH
  351. //#else
  352. // obCLKMCUDIVF=0x02;
  353. //#endif
  354. }
  355. #else
  356. NandPrivateEn();
  357. ReadSettingData(FS_LRC);
  358. NandPrivateDis();
  359. if(SRAM_LRC_ACCESS(SRAM_RECING_FLAG)==SAVE_REC_STILL_REC) //File lost
  360. {
  361. //#if(USE_STEP_UP_CONVERTER)
  362. McuClockDivfAdjust(0x02);// WHH #1 061017
  363. //#else
  364. // obCLKMCUDIVF=0x02;
  365. //#endif
  366. //obCLKSRAMDIVF=0x00;
  367. //obCLKSMDIVF=0x00;
  368. //allen060607 start from RecoverRecFile()
  369. stFsInitChk.bPathDepth=1;
  370. stFsInitChk.dwDirSec[1]=*((DWORD *)&SRAM_LRC_ACCESS(SRAM_RECING_ENTRY_SEC));
  371. stFsInitChk.wDirOffset[1]=*((WORD *)&SRAM_LRC_ACCESS(SRAM_RECING_ENTRY_OFF));
  372. stFsInitChk.dwFileTotalSector=*((DWORD *)&SRAM_LRC_ACCESS(SRAM_RECING_FILE_SEC));
  373. stFsInitChk.dwFileSize=(stFsInitChk.dwFileTotalSector<<9);
  374. stFsInitChk.dwDirStartSec=*((DWORD *)&SRAM_LRC_ACCESS(SRAM_RECING_ENTRY_SEC));
  375. //allen060607 end
  376. if(gxbFsDelId & FSDEL_INIT_FS)
  377. {
  378. gxdwFirstEmptyClu=2;
  379. gxdwFirstEmptyClu=FindEmptyClu();
  380. //FsRecInit();
  381. }
  382. //try to recover file here
  383. RecoverRecFile();
  384. //#if(USE_STEP_UP_CONVERTER)
  385. McuClockDivfAdjust(0x08);// WHH #1 061017 //CheckWHH
  386. //#else
  387. // obCLKMCUDIVF=0x02;
  388. //#endif
  389. //obCLKSRAMDIVF=0x03;
  390. //obCLKSMDIVF=0x03;
  391. }
  392. #endif
  393. }
  394. void CleanRecFileFlag(void) large
  395. {
  396. #if(NEW_FLASH) //allen060607 new_nf
  397. NandSettingEn();
  398. gfCommonModified=TRUE;
  399. ReadSettingData(FS_LRC);
  400. SRAM_LRC_ACCESS(SRAM_RECING_FLAG)=SAVE_REC_FINISH_REC;
  401. FsWrite(SAVE_SETTING_NAND_ADD, 1, FS_LRC);
  402. NandPrivateDis();
  403. #else
  404. NandPrivateEn();
  405. ReadSettingData(FS_LRC);
  406. SRAM_LRC_ACCESS(SRAM_RECING_FLAG)=SAVE_REC_FINISH_REC;
  407. FsWrite(SAVE_SETTING_NAND_ADD, 1, FS_LRC);
  408. NandPrivateDis();
  409. #endif
  410. }
  411. void RecoverRecFile(void) large
  412. {
  413. WORD wAddrOffset;
  414. DWORD dwTotalCluster,dwCurFatNum,dwNextFatNum;
  415. BYTE bRecFileName[11],bI; //tne 2006/06/20 #1
  416. //NeedToCheck
  417. #if 0 //Source20500_061208v2 have the following code ?? check this section!
  418. stFsInitChk.bPathDepth=1;
  419. stFsInitChk.dwDirSec[1]=*((DWORD *)&gxbLyrics[SRAM_RECING_ENTRY_SEC+gxwOffsetLrcSec]);
  420. stFsInitChk.wDirOffset[1]=*((WORD *)&gxbLyrics[SRAM_RECING_ENTRY_OFF+gxwOffsetLrcSec]);
  421. #if(USE_SPECIAL_REC_PRC)  //Scott060610
  422.         stFsInitChk.dwFileTotalSector=gdwFileSector; 
  423. #else
  424. stFsInitChk.dwFileTotalSector=*((DWORD *)&gxbLyrics[SRAM_RECING_FILE_SEC+gxwOffsetLrcSec]);
  425. #endif
  426. stFsInitChk.dwFileSize=(stFsInitChk.dwFileTotalSector<<9);
  427. stFsInitChk.dwDirStartSec=*((DWORD *)&gxbLyrics[SRAM_RECING_ENTRY_SEC+gxwOffsetLrcSec]);
  428. #endif
  429. FsRead(stFsInitChk.dwDirSec[1],1,FS_DATA_0_0);
  430. wAddrOffset=stFsInitChk.wDirOffset[1]+gxwOffsetDataSec;
  431. /*
  432. if( (gxbFsData[wAddrOffset+8]=='M') &&
  433. (gxbFsData[wAddrOffset+8]=='P') &&
  434. (gxbFsData[wAddrOffset+8]=='3') )
  435. */
  436. if( (gxbFsData[wAddrOffset+8]=='M') && //Tne060310#1
  437. (gxbFsData[wAddrOffset+9]=='P') &&
  438. (gxbFsData[wAddrOffset+10]=='3') )
  439. { gxbMusicType=M_MP3; }
  440. else
  441. { gxbMusicType=M_WAV; }
  442. //Walace060926#3 code size start
  443. DWORDFsClusterCopy((PBYTE)&stFsInitChk.dwFileStartClu,gxbFsData+wAddrOffset);
  444. /*if(gxbFatType==FAT_32)
  445. {
  446. stFsInitChk.dwFileStartClu=((DWORD)gxbFsData[wAddrOffset+0x15]<<24) | //start cluster number of this file
  447.                     ((DWORD)gxbFsData[wAddrOffset+0x14]<<16) |
  448.                     ((DWORD)gxbFsData[wAddrOffset+0x1b]<<8)  | gxbFsData[wAddrOffset+0x1a] ;
  449. }
  450. else  //FAT12 or FAT16
  451. {
  452. stFsInitChk.dwFileStartClu=((WORD)gxbFsData[wAddrOffset+0x1b]<<8) |//start cluster number of this file
  453.                    gxbFsData[wAddrOffset+0x1a];
  454. }
  455. */
  456. //Walace060926#3 code size end
  457. if(stFsInitChk.dwFileTotalSector==0)
  458. {
  459. //no size, unable recover, del the file entry
  460. gxbFsData[wAddrOffset]=0xE5;
  461. FsWrite(stFsInitChk.dwDirSec[1],1,FS_DATA_0_0);
  462. }
  463. else
  464. {
  465. //tne 2006/06/20 #1 //keep file name
  466. for(bI=0;bI<11;bI++)
  467. bRecFileName[bI]=gxbFsData[wAddrOffset+bI];
  468. //restore file entry size
  469. //Walace060926#3 code size start
  470. DWORDReverseCopy(gxbFsData+wAddrOffset+0x1c,(PBYTE)&stFsInitChk.dwFileSize);
  471.   gxbFsData[wAddrOffset+0x1c]=(BYTE)stFsInitChk.dwFileSize;
  472.   gxbFsData[wAddrOffset+0x1d]=(BYTE)(stFsInitChk.dwFileSize>>8);
  473.   gxbFsData[wAddrOffset+0x1e]=(BYTE)(stFsInitChk.dwFileSize>>16);
  474.   gxbFsData[wAddrOffset+0x1f]=(BYTE)(stFsInitChk.dwFileSize>>24);
  475.                 //Walace060926#3 code size end
  476. FsWrite(stFsInitChk.dwDirSec[1],1,FS_DATA_0_0);
  477. dwTotalCluster=((stFsInitChk.dwFileTotalSector-1)/gbSecPerClu)+1;
  478. dwCurFatNum=stFsInitChk.dwFileStartClu;
  479. while(dwTotalCluster)
  480. {
  481. dwNextFatNum=FatRead(dwCurFatNum); //search next fat number
  482. //FAT break...start to recover file
  483. if(dwNextFatNum==0)
  484. {
  485. dwTotalCluster--;
  486. while(dwTotalCluster)
  487. {
  488. gxdwFirstEmptyClu++;
  489. gxdwFirstEmptyClu=FindEmptyClu(); //Find next empty cluster
  490. FatWrite(dwCurFatNum,gxdwFirstEmptyClu);
  491. dwCurFatNum=gxdwFirstEmptyClu;
  492. dwTotalCluster--;
  493. gxdwNumFreeClu--;
  494. }
  495. FsWriteEndOfFatEntry(dwCurFatNum);
  496. //Fix record information
  497. gxdwFirstEmptyClu++;
  498. gxdwFirstEmptyClu=FindEmptyClu();
  499. gxdwRecFileStartClu=gxdwFirstEmptyClu;
  500. break;
  501. }
  502. dwCurFatNum=dwNextFatNum;
  503. dwTotalCluster--;
  504. }
  505. if(gxbMusicType==M_WAV)
  506. {
  507. gpstFileIndex=&stFsInitChk;
  508. FsWriteFileHeader();
  509. FsWrite(gxdwData+((gpstFileIndex->dwFileStartClu)-2)*gbSecPerClu,1,FS_DATA_0_0);
  510. }
  511. //tne 2006/06/20 #1 //strat
  512. NandPrivateEn(); //060710
  513. #if(NEW_FLASH)
  514. gfCommonModified=TRUE; //060710
  515. #endif
  516. ReadSettingData(FS_LRC);
  517. for(bI=0;bI<11;bI++)
  518. gxbLyrics[SRAM_LAST_DVR_FILE+bI+gxwOffsetLrcSec]=bRecFileName[bI];
  519. FsWrite(SAVE_SETTING_NAND_ADD,1,FS_LRC);
  520. NandPrivateDis();
  521. //tne 2006/06/20 #1 //end
  522. }
  523. CleanRecFileFlag();
  524. if(gxbFsDelId & FSDEL_INIT_FS)
  525. {
  526. //unknow free size, let os search free size again
  527. gxdwNumFreeClu=0xFFFFFFFF;
  528. }
  529. FsInfoUpdate();
  530. NandFinishJob();
  531. }
  532. /*
  533. void UiDispyWorkBar(BYTE bPercent) large
  534. {
  535. BYTE bI;
  536. if(bPercent>100)
  537. return;
  538. LcdGoto(6,12);
  539. LcdWriteData(0xFF);
  540. LcdWriteData(0x81);
  541. for(bI=0;bI<bPercent;bI++)
  542. {
  543. LcdWriteData(0xBD);
  544. }
  545. while(bI<=100)
  546. {
  547. LcdWriteData(0x81);
  548. bI++;
  549. }
  550. LcdWriteData(0xFF);
  551. }
  552. */
  553. /*
  554. void UiShowCancelButton(void) large
  555. {
  556. BYTE bLen,bI,bJ;
  557. bLen=LcdShowSysString(SYS_STR_CANCEL,5,LCD_AUTO_CENTER_COL);
  558. bI=((MAX_COLNUM+1-bLen)>>1);
  559. LcdGoto(5,bI-4);
  560. LcdWriteData(0xFF);
  561. LcdGoto(4,bI-3);
  562. LcdWriteData(0x80);
  563. LcdGoto(6,bI-4);
  564. LcdWriteData(0xFF);
  565. LcdGoto(7,bI-3);
  566. LcdWriteData(0x01);
  567. LcdGoto(5,bI+bLen+3);
  568. LcdWriteData(0xFF);
  569. LcdGoto(4,bI+bLen+2);
  570. LcdWriteData(0x80);
  571. LcdGoto(6,bI+bLen+3);
  572. LcdWriteData(0xFF);
  573. LcdGoto(7,bI+bLen+2);
  574. LcdWriteData(0x01);
  575. LcdGoto(4,bI-2);
  576. for(bJ=0;bJ<bLen+4;bJ++)
  577. LcdWriteData(0xC0);
  578. LcdGoto(7,bI-2);
  579. for(bJ=0;bJ<bLen+4;bJ++)
  580. LcdWriteData(0x03);
  581. LcdReverse(5,bI-3,2,bLen+6);
  582. }
  583. */
  584. API void UiDispCtrl(BYTE bStatus) large
  585. {
  586. BYTE bCurtPercen;
  587. BYTE bClkCtrlTmp=obCLKMCUDIVF;
  588. bCurtPercen=((DWORD)gxwCurrentFileNum*100)/gxwNumTotalFiles;
  589. //#if(USE_STEP_UP_CONVERTER)
  590. McuClockDivfAdjust(0x08);// WHH #1 061017
  591. //#else
  592. // obCLKMCUDIVF=0x08;
  593. //#endif
  594. //LCD_CTRL_EN();
  595. switch(bStatus)
  596. {
  597. case UI_CDB_INIT_START:
  598. //LcdWritePic(cbIcon_Hourglass_2,1,54,4,22);
  599. //UiDispyWorkBar(0);
  600.                      //UiShowCancelButton();
  601. //OLED_CLEAR_ALL(); //Walace060501#3
  602. //OledShowIcon(ICON_UPDATE_DB,SEG3,LINE0);
  603. OledShowIconNew(2,IM_WAITING,0,0); //tne 2007/01/09 #3
  604. #if(UI_USE_PROGRESS_BAR)
  605. ShowProgress((OLED_MAX_COL-PROGRESS_MAX)/2,185,0); //tne 2007/01/09 #3
  606.                         #endif
  607. #if(UI_DISP_CDB_WORK_INF & !SETTING_FOR_ICE_START)
  608. //wait to get current time
  609. dwCdbWorkTime=gxdwNowTime;
  610. EX0=1;
  611. EA=1;
  612. while(dwCdbWorkTime==gxdwNowTime) { };
  613. dwCdbWorkTime=gxdwNowTime;
  614. #endif
  615. break;
  616. case UI_CDB_INIT_END:
  617. #if(UI_DISP_CDB_WORK_INF)
  618. dwCdbWorkTime = gxdwNowTime-dwCdbWorkTime;
  619. LcdClearAll();
  620. #if(CDB_OPTION_DATA_CACHE)
  621. LcdShowTitleNum(dwCdbWorkTime,0,0,4);
  622. LcdShowTitleNum(gxwCacheHitRateNum,2,0,4);
  623. LcdShowTitleNum(gxwNumTotalFiles*10,2,32,4);
  624. #endif
  625. #if(CDB_OPTION_SYS_CACHE)
  626. LcdShowTitleNum(gxwSysCacheHitRateNum,4,0,4);
  627. LcdShowTitleNum(gxwWriteFlashNum,4,32,4);
  628. LcdShowTitleNum(gxwSysCacheTimeStamp,4,64,4);
  629. #endif
  630. gxbLcdCounter=0;
  631. while(gxbLcdCounter<75) { };
  632. #endif
  633. //tne 2006/12/05 #3
  634. #if(UI_USE_PROGRESS_BAR)
  635. ShowProgress((OLED_MAX_COL-PROGRESS_MAX)/2,185,PROGRESS_MAX); //tne 2007/01/09 #3
  636. #endif
  637. break;
  638. case UI_CDB_CLASS_ENDING:
  639. //UiDispyWorkBar(100);
  640. #if(UI_USE_PROGRESS_BAR)
  641. ShowProgress((OLED_MAX_COL-PROGRESS_MAX)/2,185,PROGRESS_MAX); //tne 2007/01/09 #3
  642. #endif
  643. break;
  644. case UI_CDB_CLASS_BUILDING:
  645. //only show odd number to decrease display overhead
  646. if(gxwCurrentFileNum&0x01)
  647. {
  648.       /*
  649. #if(UI_DISP_CDB_HOURGLASS)
  650. //not display 6 hourglass because it change too fast
  651. if(gxwCurrentFileNum>6)
  652. {
  653. LcdWritePic(pbIconHourGlassPoint[xbHourGlassNum],0,52,3,20);
  654. xbHourGlassNum++;
  655. if(xbHourGlassNum>=6)
  656. xbHourGlassNum=0;
  657. }
  658. #endif
  659. */
  660. //UiDispyWorkBar(bCurtPercen);
  661. #if(UI_USE_PROGRESS_BAR)
  662. ShowProgress((OLED_MAX_COL-PROGRESS_MAX)/2,185,(((WORD)bCurtPercen*PROGRESS_MAX)/100)); //tne 2007/01/09 #3
  663. #endif
  664. }
  665. break;
  666. default:
  667. //do nothing...
  668. break;
  669. }
  670. //LCD_CTRL_DIS();
  671. //#if(USE_STEP_UP_CONVERTER)
  672. McuClockDivfAdjust(bClkCtrlTmp);// WHH #1 061017
  673. //#else
  674. // obCLKMCUDIVF=bClkCtrlTmp;
  675. //#endif
  676. }