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

压缩解压

开发平台:

C++ Builder

  1. /*==========================================================================
  2. Copyright (c) 2004 ALi Corporation. All Rights Reserved
  3. File: UiCommon.c
  4. content: user interface for usb module
  5. History: Created by TNE 2004/8/17
  6. ==========================================================================*/
  7. #define _UI_USB_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 "UiSysStr.h"
  15. #include "Usb.h"
  16. #include "OledString.h"
  17. #if(_PM_MTP_)
  18. #include "FileSystem.h"
  19. #include "Mtp.h" //050418 allen
  20. #include "MtpDataBase.h" //Allen060419#1
  21. #include "Drm.h" //050418 allen
  22. #endif
  23. #include "DDM.h"
  24. #include "NandFlash.h"
  25. #include "OLED.h"
  26. #include "IconDefine.h"
  27. #include "UiUsbDevice.h" //allen051101#4 add
  28. #if(USE_STEP_UP_CONVERTER)
  29. #include "StepUp.h"
  30. #endif
  31. #if(USE_FW_CHARGER) //060918Renshuo //Ted 1013
  32. #include "Charger.h"
  33. #endif
  34. /* //allen050608#1
  35. Note:
  36. 1. Key Hold (Write Protect):
  37. gfWPFlag_Hw: indicate current WP state.
  38. GPIOH[0]=1: No-WriteProtect  (SDK)
  39. GPIOH[0]=0: WriteProtect (SDK)
  40. search "obGPIOHDAT" in this file, and modify the statement.
  41. */
  42. //Walace060620#1 start
  43. //===========================================
  44. #define ST_FORCE_REFRESH 0x01
  45. #define ST_BACKGROUND 0x02
  46. #define ST_BATTERY 0x04
  47. #define ST_RW_STATUS 0x08
  48. #define ST_DISP_CMD 0x70
  49. #define ST_DISP_SUSPEND 0x10
  50. #define ST_DISP_RESUME 0x20
  51. void UiFlashDisk(BYTE bStatus); //allen051101#4
  52. //=============================================
  53. //Walace060620#1 end
  54. void UsbSaveMtpMode(BYTE fMtpMode) large;
  55. extern void SD_POWER_OFF(void);
  56. extern CBYTE cbDeviceDescriptor[];
  57. extern XBYTE gbSecureClockState;
  58. BOOL gfKeyReady;
  59. ////allen051101#3: move from main()
  60. XBYTE xbUiState=UI_USB_IDLE;
  61. XBYTE xbUiCurState=UI_USB_IDLE;
  62. XBYTE gxbUiRwIconStep; //tne 2007/01/04 #2
  63. XBYTE gxbUiRwIconDelay; //tne 2007/01/04 #2
  64. //tne 2005/08/24 //use xbUiBattCounter for temp variable (to get RTC counter)
  65. XBYTE xbUiBattCounter;
  66. WORD ConvertToV(BYTE bSarAdc); // Jeff070411#1 for charge Debug
  67. void ChargerDebug(void) large; // Jeff070411#1 for charge Debug
  68. #if(_PM_MTP_|USE_RTC_COUNTER) //David060412 start, prevent lost RTC interrupt  //Ted 1013
  69. XBYTE gxbTemp;
  70. #endif //David060412 end
  71. #if(!ONE_BATT_MODE)
  72. BYTE bTimeTemp;   //add by Rojam 070202
  73. #endif
  74. #if(COST_DOWN_CIRCUIT)
  75. XBYTE xbUsbFlag=0;
  76. #endif
  77. void UiCheckAlarm(void);  //Walace061019#1
  78. #if(SYS_USE_KEY_HOLD) //modify by Rojam 2007-05-18 17:27
  79. BOOL CheckWPKey(void) //Allen060511#0 new_nf
  80. {
  81. if(gfWPFlag_Sw)
  82. {
  83. return TRUE; // Write-protect
  84. }
  85. if(obGPIOHDAT&0x01)
  86. return FALSE; // non-Write-protect
  87. else
  88. return TRUE; // Write-protect
  89. }
  90. #endif
  91. /*--------------------------------------------------------------------------
  92. Description:
  93. Main program for TARGET UsbFlashDisk
  94. Arguments:
  95. Global arguments:
  96. Returns: 
  97. --------------------------------------------------------------------------*/
  98. #if(DRM_MODE_EN)
  99. BOOL CheckModeKey(void)//David 050518
  100. {
  101. BYTE bKeyRept;
  102. if(!(obUSBMISCCTL & 0x10))//Nick060605#2 add it
  103. return FALSE;
  104. //0001 11xx
  105. bKeyRept=0x10;
  106. while(bKeyRept)
  107. {
  108. if(!(obGPIOBDAT&0x28)) //Gpio 3(ouput low) 6(input) , key released //1001000
  109. {
  110. gfKeyReady=TRUE;
  111. return FALSE;
  112. }
  113. else //key pressed
  114. {
  115. if(gfKeyReady)
  116. {
  117. bKeyRept--;
  118. }
  119. else 
  120. return FALSE;
  121. }
  122. }
  123. return TRUE;
  124. }
  125. #endif
  126. /*--------------------------------------------------------------------------
  127. Desciption:
  128. Handle USB suspend & resume
  129. Arguments:
  130. Returns: 
  131. void
  132. 2004/11/05: use gbBuf as Keep Buffer
  133. 0,1: GPIOB
  134. 2,3: GPIOC
  135. 4,5: GPIOE
  136. 6,7: GPIOH
  137. 8: obMODSEL1
  138. 9: obMODSEL2
  139. --------------------------------------------------------------------------*/
  140. API void USB_Suspend(void) large//allen050610#1
  141. {
  142. //remove !_PM_MTP_ by tne 2006/12/01 #1
  143. #if (!(_PM_MPTEST_|SETTING_FOR_ISP_START))
  144. BYTE gbuf[10];
  145. NandFinishJob();
  146. obUSBDEVEPAFCTR |= EP_INI;
  147. obUSBDEVEPBFCTR |= EP_INI;
  148. /* //Walace060620#1  start
  149.               // WHH #1 060607 (start)
  150. obCLKSRAMCTRL=0xD0;
  151. obCLKSMCTRL=0xD0;
  152. obCLKMCUCTRL=0xD0;
  153.         OledCtrlEn();
  154. OLED_CLEAR_ALL();
  155. OLED_WRITE(OLED_CMD_SET_DISP_OFF) ;
  156.         OledCtrlDis();
  157.         obCLKMCUCTRL=0xA0;
  158. obCLKSRAMCTRL=0xA0;
  159. obCLKSMCTRL=0xA0;
  160.               // WHH #1 060607 (end)
  161. */
  162. UiFlashDisk(ST_DISP_SUSPEND);
  163. //Walace060620#1  end
  164. // obGPIOADAT = 0x00;   //Force GPIOA Howard 050812 del
  165. // obGPIOADIR = 0xFF;
  166. // obGPIOAPUEN =0x00;
  167. //allen041129#2 start
  168. gbuf[0] = obGPIOBDAT; //keep GPIOB data //David , 050517
  169. gbuf[1] = obGPIOBDIR;
  170. POWER_OFF_3V3SD();
  171. obGPIOBDAT = 0x01;
  172. obGPIOBDIR = 0xFF; //GPIOB0 => force HI => powerdown
  173. obGPIOBPUEN =0x00;
  174. //allen041129#2 end
  175. gbuf[2] = obGPIOCDAT; //Record GPIOC
  176. gbuf[3] = obGPIOCDIR;
  177. obGPIOCDAT = 0x00;   //Force GPIOC
  178. obGPIOCDIR = 0xFF;   
  179. obGPIOCPUEN =0x00;
  180. // obGPIODDAT = 0x00; //Force GPIOD allen051111 del
  181. // obGPIODDIR = 0xFF; 
  182. // obGPIODPUEN =0x00;
  183. gbuf[4] = obGPIOEDAT; //Record GPIOE
  184. gbuf[5] = obGPIOEDIR;
  185. #if(COLOR_MODE!=3 ) //modify by Rojam 2007-05-17 15:37
  186. POWER_OFF_3V3_FM(); //Allen060224: use define
  187. #endif
  188. obGPIOEDAT = 0x40/*0x00*/;   //Force GPIOE   //Allen060224: power-down FM in suspend
  189. obGPIOEDIR = 0xFF;  
  190. obGPIOEPUEN =0x00;
  191. obGPIOFDAT = 0x00;   //Force GPIOF
  192. obGPIOFDIR = 0xFF;
  193. obGPIOFPUEN =0x00;
  194. obGPIOGDAT = 0x00;   //Force GPIOG
  195. obGPIOGDIR = 0xFF;  
  196. obGPIOGPUEN =0x00;  
  197. gbuf[6] = obGPIOHDAT; //Record GPIOH
  198. gbuf[7] = obGPIOHDIR;
  199. obGPIOHDAT = 0x00; //Force GPIOH
  200. obGPIOHDIR = 0xFF;       //Howard 1018
  201. obGPIOHPUEN =0x00;
  202. obGPIOIDAT = 0x00;   //Force GPIOI
  203. obGPIOIDIR = 0xFF;  
  204. obGPIOIPUEN =0x00;
  205. obGPIOJDAT = 0x00;  //Force GPIOJ
  206. obGPIOJDIR = 0xFF;
  207. obGPIOJPUEN =0x00;
  208. obGPIOKDAT = 0x00;   //Force GPIOK
  209. obGPIOKDIR = 0xFF;    
  210. obGPIOKPUEN =0x00;
  211.     
  212. obGPIOLDAT = 0x00;   //Force GPIOL
  213. obGPIOLDIR = 0xFF;
  214. obGPIOLPUEN =0x00;
  215. obGPIOMDAT = 0x00;   //Force GPIOM
  216. obGPIOMDIR = 0xFF;
  217. obGPIOMPUEN =0x00;
  218. gbuf[8] = obMODSEL1;
  219. obMODSEL1 = 0x00; //PWD_ALL 1105
  220. gbuf[9] = obMODSEL2;
  221. obMODSEL2 = 0x00; //PWD_ALL 1105
  222. PIN_SD_PDDAT|=SD_PD;  //Force SD_PD PIN ON (POWER OFF), Vicky1005 add
  223. PIN_SD_PDDIR|=SD_PD;  //SD_PD(Output), Vicky1005 add
  224. gfSDinit=FALSE; //Vicky061213#1
  225. #if(_PM_MTP_)
  226. gxbStorAvailable[SD_LUN]=STORAGE_NOT_EXIST;  //Vicky061213#1
  227. #endif
  228. UsbSuspend_DPLL(); //<- code stop here
  229. //
  230. // Restore Gpio State
  231. //
  232. obGPIOBDIR = gbuf[1]; //Restore GPIOB 
  233. #if(USE_STEP_UP_CONVERTER)
  234.  #if(_C_MODE_)
  235. gxbDrawUsbUi|=0x01;
  236.  
  237.                 #else
  238.                  gxbDrawUsbUi|=0x07;
  239.                 #endif
  240. #endif
  241. obGPIOBDAT = gbuf[0];
  242.     obGPIOCDAT = gbuf[2];  //Restore GPIOC 
  243.     obGPIOCDIR = gbuf[3];
  244.    
  245.     obGPIOEDAT = gbuf[4];  //Restore GPIOE
  246.     obGPIOEDIR = gbuf[5];
  247.     obGPIOHDAT = gbuf[6];  //Restore GPIOH 
  248.     obGPIOHDIR = gbuf[7];
  249. obMODSEL1 = gbuf[8];
  250. obMODSEL2 = gbuf[9];
  251. UsbSuspend_WaitCmd(); //050610
  252. UiFlashDisk(ST_DISP_RESUME); //Walace060620#1 
  253. #endif
  254. }
  255. bit GetUsbConfig(void) //Allen060622 new_nf
  256. {
  257. BOOL fAutoRun = FALSE; //Nick060706
  258. //vicky061128#1
  259. #define MTP_PID_0 0x06
  260. #define MTP_PID_1 0x11
  261. //End
  262. bit fRet=FALSE;
  263. #if(NEW_FLASH)
  264. obSYSSOFTRSTCTRL |= USB_RST_DIS;
  265. obUSBOTGCTRL &= 0xFD; //DPLL normal
  266. obMODSEL3 |= MOD_USB_EN; //USB Clock EN
  267. #endif
  268. if(NandReadPhySec(gxwAddrPMI,1,SRAM_USB_DESC_ADDR)) //read PMI
  269. {
  270. *((BYTE *)&gwRomIdx+1) = gxbConfig[PM_CONFIG]; //get config address
  271. *((BYTE *)&gwRomIdx) = gxbConfig[PM_CONFIG+1];
  272. //060426: set clk from config
  273. if(NandReadPhySec(gwRomIdx,1,SRAM_USB_DESC_ADDR)) //read config data
  274. {
  275. #if(USE_FW_CHARGER) //Ted 1013  // Jason 20070119#1  // Jeff070303#1  // Jeff070411#1
  276.   GetChargerStageInf(); 
  277. #endif
  278.         if(gxbConfig[1] == 3) //Nick060706
  279.       fAutoRun = TRUE; //Nick060706
  280. if((gxbConfig[0x0E]==0x61)&&(gxbConfig[0x0F]==0x56))
  281. {
  282. #if(NEW_FLASH)
  283. //SM Clock
  284. obCLKSMDIVF=gxbConfig[17];
  285. obCLKSMCTRL=gxbConfig[16];
  286. //MCU Clock
  287. obCLKMCUCTRL=0xD0; //12MHz
  288. obCLKMCUDIVF=gxbConfig[19];
  289. obCLKMCUCTRL=gxbConfig[18];
  290. //RA Clock
  291. obCLKSRAMDIVF=gxbConfig[21];
  292. obCLKSRAMCTRL=gxbConfig[20];
  293. //SM R/W Cycle
  294. //Walace070205#1 start
  295. #if 1
  296. gxbSmReadCyc=gxbConfig[22];
  297. gxbSmWriteCyc=gxbConfig[23];
  298. obSMREADCYC = gxbSmReadCyc; // SM_READ_CYCLE
  299. obSMWRITECYC = gxbSmWriteCyc; // SM_WRITE_CYCLE
  300. #else
  301. obSMREADCYC=gxbConfig[22];
  302. obSMWRITECYC=gxbConfig[23];
  303. #endif
  304. #if(USE_STEP_UP_CONVERTER)  //Walace070131#1
  305. StepUpConverterDutyCycleSetting(); 
  306. #endif
  307. #endif    
  308.                           //Walace070205#1 end
  309. gwRomIdx++; // 2nd sector is Usb Desc
  310. gxwUsbDescIndex=gwRomIdx; //Allen060529 add
  311. if(NandReadPhySec(gwRomIdx,1,SRAM_USB_DESC_ADDR)) //read config data
  312. {
  313. if((gxbConfig[0]==0x61)&&(gxbConfig[1]==0x56)&&(gxbConfig[2]==0xAA)&&(gxbConfig[3]==0x55)&&(gxbConfig[510]==0x55)&&(gxbConfig[511]==0xAA))
  314. {
  315. *((BYTE *)&gwRomIdx+1) = gxbConfig[INDEX_OF_MODE_SELECT];
  316. *((BYTE *)&gwRomIdx) = gxbConfig[INDEX_OF_MODE_SELECT+1];
  317. gxbMaxLUN = gxbConfig[gwRomIdx+1];
  318.                                 gxbMscMaxLUN = gxbMaxLUN;//Nick060706
  319. gbDescriptorSource =SRAM;
  320. *((BYTE *)&gwRomIdx+1) = gxbConfig[INEDX_OF_DEVICE_DESP];
  321. *((BYTE *)&gwRomIdx) = gxbConfig[INEDX_OF_DEVICE_DESP+1];
  322. //vicky061128#1
  323. /*
  324. #if(_PM_MTP_) //050407 allen: MTP's PID = UMS's PID + 1 //Allen060612
  325. if((gxbConfig[gwRomIdx+11]==0x56)&(gxbConfig[gwRomIdx+10]==0x61))
  326. {
  327. gxbUsbPID[0]=0x06; //allen060529
  328. gxbUsbPID[1]=0x11;
  329. }
  330. else
  331. {
  332. gxbUsbPID[0]=gxbConfig[gwRomIdx+11]; //allen060529
  333. gxbUsbPID[1]=gxbConfig[gwRomIdx+10]+1;
  334. }
  335. #else
  336. gxbUsbPID[0]=gxbConfig[gwRomIdx+11]; //Allen060612
  337. gxbUsbPID[1]=gxbConfig[gwRomIdx+10];
  338. #endif
  339. */
  340. #if(DRM_MODE_EN)
  341. if((gxbConfig[gwRomIdx+11]==0x56)&(gxbConfig[gwRomIdx+10]==0x61))
  342. {
  343. #if (_PM_MTP_)
  344. gxbUsbPID[0]=MTP_PID_0;
  345. gxbUsbPID[1]=MTP_PID_1;
  346. #else // MSC Mode
  347. if(gfHostSupportMTP)
  348. {
  349. gxbUsbPID[0]=gxbConfig[gwRomIdx+11];
  350. gxbUsbPID[1]=gxbConfig[gwRomIdx+10];
  351. }
  352. else
  353. {
  354. gxbUsbPID[0]=MTP_PID_0;
  355. gxbUsbPID[1]=MTP_PID_1;
  356. }
  357. #endif
  358. }
  359. else
  360. {
  361. gxbUsbPID[0]=gxbConfig[gwRomIdx+11];
  362. gxbUsbPID[1]=gxbConfig[gwRomIdx+10];
  363. #if (_PM_MTP_)
  364. gxbUsbPID[1]++;
  365. #else //MSC Mode
  366. if(!gfHostSupportMTP)
  367. {
  368. gxbUsbPID[1]++;
  369. }
  370. #endif
  371. }
  372. #else
  373. gxbUsbPID[0]=gxbConfig[gwRomIdx+11];
  374. gxbUsbPID[1]=gxbConfig[gwRomIdx+10];
  375. #endif
  376. //End
  377. //Nick060706 start
  378. gbLUNType[0] = NAND_LUN;
  379. gbLUNType[2] = 0xFF;//initial value
  380. if(fAutoRun)
  381. {
  382. gxbMscMaxLUN++;//Auto Run LUN
  383. // gxdwDebug = gxbMaxLUN;//for debug
  384. if(gxbMscMaxLUN == 3)
  385. {
  386. gbLUNType[1] = SD_LUN;
  387. gbLUNType[2] = CDROM_LUN;
  388. }
  389. else if(gxbMscMaxLUN == 2)
  390. {
  391. gbLUNType[1] = CDROM_LUN;
  392. }
  393. }
  394. else
  395. gbLUNType[1] = SD_LUN;
  396. //Nick060706 end
  397. fRet=TRUE;
  398. }
  399. }
  400. }
  401. }
  402. }
  403. if(!fRet)
  404. {
  405. #if(NEW_FLASH)
  406. //SM Clock
  407. obCLKSMDIVF=0x00;
  408. obCLKSMCTRL=0xA0;
  409. //MCU Clock
  410. obCLKMCUCTRL=0xD0; //12MHz
  411. obCLKMCUDIVF=0x00;
  412. obCLKMCUCTRL=0xA0;
  413. //RA Clock
  414. obCLKSRAMDIVF=0x00;
  415. obCLKSRAMCTRL=0xA0;
  416. //SM R/W Cycle
  417. //Walace070205#1 start
  418. #if 1
  419. gxbSmReadCyc=0x02;
  420. gxbSmWriteCyc=0x02;
  421. obSMREADCYC = gxbSmReadCyc; // SM_READ_CYCLE
  422. obSMWRITECYC = gxbSmWriteCyc; // SM_WRITE_CYCLE
  423. #else
  424. obSMREADCYC=0x02;
  425. obSMWRITECYC=0x02;
  426. #endif
  427. #if(USE_STEP_UP_CONVERTER)  //Walace070131#1
  428. StepUpConverterDutyCycleSetting(); 
  429. #endif
  430. //Walace070205#1 end
  431. #endif
  432. gxbMaxLUN =1;
  433.         gxbMscMaxLUN = 1;//Nick060706
  434. gbDescriptorSource = ROM; // Initial config Descriptor from ROM
  435. }
  436. #if(NEW_FLASH)
  437. //dsp source from usb
  438. obCLKDSPCTRL=0x20; //USB 48Mhz and Disable
  439. obCLKDSPDIVF=0x00;
  440. obCLKCODECCTRL=0x20; //USB 48Mhz and Disable
  441. obCLKCODECDIVF=0x00;
  442. obDCVARRD=0x04;
  443. obDCVWRDATA=0xf2; //disable dcv clock
  444. obDCVARRD=0x14;
  445. obDCVWRDATA=obDCVRDDATA|0x01; //disable DC-DC
  446. #endif
  447. return fRet;
  448. }
  449. //allen050812
  450. #if(USB_DISP_CHARGING)
  451. void UiShowBattCharging(BYTE bLevel) large //0~7
  452. {
  453. /* BYTE bClkCtrlTmp=obCLKMCUCTRL; allen060223
  454. obCLKMCUCTRL=0xD0; //MCU clock use XTALI 12MHz //v03210#1*/
  455. #if(USB_DISPCOUNTER)
  456. if(gxwDelayTime%4==0)
  457. {
  458. if(gxbBackLightCounter&BACKLIGHT_STS_ON)
  459. gxbBackLightCounter++;
  460. }
  461. #endif
  462. if(gxwDelayTime>=30000)
  463. {
  464. bTimeTemp++;
  465. gxwDelayTime=0;
  466. }
  467. if(bTimeTemp<26)//36)
  468. {
  469. PIN_SD_PDDAT&=~SD_PD;  //Force SD_PD PIN ON (POWER OFF), Vicky1005 add
  470. PIN_SD_PDDIR|=SD_PD;  //SD_PD(Output), Vicky1005 add
  471. #if(COLOR_MODE==3) //modify by Rojam 2007-05-17 16:4
  472. if((obGPIOCDAT&0x02)==0x00)
  473. #else
  474. #if(UI_CHARGE_IC)
  475. obGPIOADIR&=~0X02;
  476. if(obGPIOADAT&0X02) //add by Rojam
  477. #else 
  478. obGPIOADIR&=~0X10;
  479. if(0)//!(obGPIOADAT&0X10)) //add by Rojam 070202
  480. #endif
  481. #endif
  482. {
  483. if(gxbBatterFullCount<BATTERY_CHARGE_FULL_COUNT)
  484. gxbBatterFullCount++;
  485. }
  486. else
  487. {
  488. gxbBatterFullCount=0;
  489. }
  490. if(gxbBatterFullCount>=BATTERY_CHARGE_FULL_COUNT)
  491. bLevel=BATTERY_LV_COUNT-1;  //Walace060803#2 end
  492. }
  493. else
  494. {
  495. bLevel=BATTERY_LV_COUNT-1;  //Walace060803#2 end
  496. }
  497. // ShowIcon(bLevel*154,11,7,85,0);
  498. gxbLastBattSts=bLevel; //050817
  499. UI_SHOW_BATTERY();
  500. // obCLKMCUCTRL=bClkCtrlTmp; allen060223
  501. }
  502. #endif
  503. //tne 2007/01/04 #2 start
  504. void UiShowUsbIconSts(BYTE bState) large
  505. {
  506. NandGpioCtrl(NAND_CS_OFF); //all off Allen051208#1: fix 2 chip nand show icon bug.
  507. // TODO: add display code
  508. //display download or upload icon
  509. /*#if(USE_STEP_UP_CONVERTER) //Walace070205#1
  510. obCLKSRAMCTRL=0xD0;
  511. obCLKSMCTRL=0xD0;
  512. McuClockCtrlAdjust(0xD0);
  513. #endif
  514.         */
  515. switch(bState)
  516. {
  517. case UI_USB_IDLE:
  518. case UI_USB_BUSY:
  519. if(bState!=xbUiCurState)
  520. {
  521. OledShowIconNew(2,IM_USB_NO_DOT,UI_USB_RW_ICON_COLNUM,UI_USB_RW_ICON_ROWNUM);
  522. gxbUiRwIconStep=0;
  523. }
  524. break;
  525. case UI_USB_WAIT:
  526. //OledShowIconNew(2,IM_WAITING,0,0);
  527. break;
  528. case UI_USB_FIRST_READY:
  529. OledShowIconNew(2,IM_USB_BG,0,0);
  530. #if(_PM_MTP_)
  531. OledShowIconNew(2,IM_USB_MTP,UI_USB_MSC_TYPE_ICON_COL,UI_USB_MSC_TYPE_ICON_ROW);
  532. #else
  533. OledShowIconNew(2,IM_USB_MSC,UI_USB_MSC_TYPE_ICON_COL,UI_USB_MSC_TYPE_ICON_ROW);
  534. #endif
  535. case UI_USB_SEARCHING:
  536. //Do nothing now...
  537. break;
  538. //case UI_USB_READ:
  539. //case UI_USB_WRITE:
  540. default:
  541. #if(_PM_MTP_)
  542. for(gxbUiRwIconStep=0;gxbUiRwIconStep<UI_USB_RW_MAX_ICON_STEP;gxbUiRwIconStep++)
  543. {
  544. OledShowIconNew(2,
  545. IM_USB_DOT,
  546. UI_USB_RW_ICON_COLNUM+UI_USB_RW_ICON_INTERVAL*gxbUiRwIconStep,
  547. UI_USB_RW_ICON_ROWNUM);
  548. }
  549. #else
  550. if(gxbUiRwIconDelay>=UI_USB_RW_DELAY_NUM)
  551. {
  552. OledShowIconNew(2,IM_USB_NO_DOT,UI_USB_RW_ICON_COLNUM,UI_USB_RW_ICON_ROWNUM);
  553. OledShowIconNew(2,
  554. IM_USB_DOT,
  555. UI_USB_RW_ICON_COLNUM+UI_USB_RW_ICON_INTERVAL*gxbUiRwIconStep,
  556. UI_USB_RW_ICON_ROWNUM);
  557. gxbUiRwIconStep++;
  558. if(gxbUiRwIconStep>=UI_USB_RW_MAX_ICON_STEP)
  559. gxbUiRwIconStep=0;
  560. gxbUiRwIconDelay=0;
  561. }
  562. else
  563. { gxbUiRwIconDelay++; }
  564. #endif
  565. break;
  566. }
  567. xbUiCurState=xbUiState;
  568. }
  569. #if(_PM_MTP_) //allen051101#4: for MTP sendobject, getobject //modify by tne 2007/01/04 #2
  570. API void UiDispCtrl(BYTE bStatus) large
  571. {
  572. if(bStatus!=xbUiState)
  573. {
  574. UsbSetSysSpeed(USB_CLK_UI); //Walace070205#1
  575. UiShowUsbIconSts(bStatus);
  576.         UsbSetSysSpeed(USB_CLK_UI_CANCEL); //Walace070205#1
  577. }
  578. xbUiState=bStatus;
  579. }
  580. #endif
  581. /*--------------------------------------------------------------------------
  582. Description:
  583. User Interface for TARGET UsbFlashDisk
  584. Arguments:
  585. Global arguments:
  586. IN gxbDrawUsbUi
  587. IN xbUiBattCounter
  588. Returns: 
  589. --------------------------------------------------------------------------*/
  590. #if 1 //allen051101#4 Combine to 1 func
  591. /* //Walace060620#1
  592. #define ST_FORCE_REFRESH 0x01
  593. #define ST_BACKGROUND 0x02
  594. #define ST_BATTERY 0x04
  595. #define ST_RW_STATUS 0x08
  596. */
  597. void UiFlashDisk(BYTE bStatus)
  598. {
  599. //BYTE bClkCtrlTmp=obCLKMCUCTRL; //Walace070205#1
  600. #if(_PM_MTP_)
  601. CBYTE cbIconTemp[]={77,84,80};
  602. #endif
  603. if(gxbDrawUsbUi&0x80) //need to draw
  604. {
  605. // obCLKMCUCTRL=0xD0; //MCU clock use XTALI 12MHz //v03210#1 allen060223
  606. //allen060227(11)
  607.                 //Walace070205#1
  608. /*#if(USE_STEP_UP_CONVERTER)
  609. #else
  610. obCLKSRAMCTRL=0xD0;
  611. obCLKSMCTRL=0xD0;
  612. obCLKMCUCTRL=0xD0; //MCU clock use XTALI 12MHz //v03210#1
  613. #endif
  614. */
  615. //Walace060620#1 start //remove !_PM_MTP_ by tne 2006/12/01 #1
  616. //#if(!_PM_MTP_)
  617. switch(bStatus&ST_DISP_CMD)
  618. {
  619. case ST_DISP_SUSPEND:
  620. //Walace070205#1
  621. /*#if(USE_STEP_UP_CONVERTER)
  622. obCLKSRAMCTRL=0xD0;
  623. obCLKSMCTRL=0xD0;
  624. McuClockCtrlAdjust(0xD0);
  625. #endif
  626. */
  627. UsbSetSysSpeed(USB_CLK_UI); //Walace070205#1
  628. //Display control before enter suspend status
  629. // OLED_CLEAR_ALL(); //Tony070312
  630. LCD_RESET_EN(); //Walace060802#4
  631. UsbSetSysSpeed(USB_CLK_UI_CANCEL); //Walace070205#1
  632. break;
  633. case ST_DISP_RESUME:
  634. /* //Walace070205#1
  635. #if(USE_STEP_UP_CONVERTER)
  636. obCLKSRAMCTRL=0xD0;
  637. obCLKSMCTRL=0xD0;
  638. McuClockCtrlAdjust(0xD0);
  639. #endif
  640. */
  641. UsbSetSysSpeed(USB_CLK_UI); //Walace070205#1
  642. OledInit();
  643. //OledShowIcon(ICON_PC,14,16); //remove by tne 2007/01/04 #2
  644. //OledShowIcon(ICON_USB_STATE_IDLE,52,LINE2); //remove by tne 2007/01/04 #2
  645. #if(!DRM_MODE_EN) //Walace060902#1
  646. OledShowIconNew(2,IM_USB_MSC,0,0); //tne 2007/01/04 #2
  647. #endif
  648. UsbSetSysSpeed(USB_CLK_UI_CANCEL); //Walace070205#1
  649. gxwHostTimeOutCnt &= (~0x8000);
  650. break;
  651. default:
  652. break;
  653. }
  654. //#endif
  655.        //Walace060620#1 end
  656. if(bStatus&ST_FORCE_REFRESH)
  657. {
  658. // force refresh 
  659. #if(_C_MODE_)
  660. gxbDrawUsbUi|=0x01;
  661. #else
  662. gxbDrawUsbUi|=0x07;
  663. #endif
  664. }
  665. if(bStatus&ST_BACKGROUND)
  666. {
  667. if(gxbDrawUsbUi&0x7F)
  668. {
  669. //
  670. // Show "PC & Device"
  671. //
  672. //Walace060620#1 start
  673.                                 /*
  674.  //Walace060501#3 start  
  675. OledInit(); //Walace060607#2
  676. //OledSetBrightness(gxbLcdContrast);
  677. //OLED_SET_CONTRAST_HI();
  678. //Walace060501#3 end
  679. OLED_CLEAR_ALL();
  680. OledShowIcon(ICON_PC,14,16);
  681. OledShowIcon(ICON_USB_STATE_IDLE,52,LINE2);
  682. #if(_PM_MTP_)
  683. OledShowIcon(ICON_USB_MTP,SEG8,LINE2);
  684. #else
  685. OledShowIcon(ICON_USB_MASS,SEG8,LINE2);
  686. #endif
  687.                                 */ //Walace060620#1 end
  688. //
  689. // Show Battery Frame
  690. //
  691. #if(USB_DISP_CHARGING)
  692. //Walace070205#1
  693. /*#if(USE_STEP_UP_CONVERTER)
  694. obCLKSRAMCTRL=0xD0;
  695. obCLKSMCTRL=0xD0;
  696. McuClockCtrlAdjust(0xD0);
  697. #endif
  698. */
  699. UsbSetSysSpeed(USB_CLK_UI);//Walace070205#1
  700. UiShowBattCharging(0); //050812
  701. UsbSetSysSpeed(USB_CLK_UI_CANCEL); //Walace070205#1
  702.        #endif
  703. gxbDrawUsbUi--;
  704. }
  705. }
  706. #if(SHOW_NOW_TIME) //For debug usage
  707. if((gxbShowTimeCounter++)>0xF0)
  708. {
  709. UsbSetSysSpeed(USB_CLK_UI);//Walace070205#1
  710. OledShowNumber((WORD)(gxdwNowTime&0xFFFF),WORD0,LINE0,6);
  711. UsbSetSysSpeed(USB_CLK_UI_CANCEL); //Walace070205#1
  712. gxbShowTimeCounter=0;
  713. }
  714. #endif
  715. if(bStatus&(ST_RW_STATUS|ST_BATTERY)) //Allen051221#2
  716. {
  717. /* Determine ISP Start */
  718. if(gxbAtaAtapiCmd==OP_ISP_START)
  719. {
  720. xbUiState=UI_USB_ISP_START;
  721. // TODO: Display ISP Start
  722. }
  723. if(gxbAtaAtapiCmd==OP_ISP_FINISH)
  724. {
  725. xbUiState=UI_USB_ISP_END;
  726. // TODO: Display ISP Finish
  727. }
  728. /* Determine R/W Status */
  729. if((gxbLcdCounter>80)&&(xbUiState!=UI_USB_ISP_START))
  730. {
  731. gxbLcdCounter=0;
  732. UsbSetSysSpeed(USB_CLK_UI);//Walace070205#1
  733. #if(_PM_USB_MSC_)
  734. if(gxbAtaAtapiCmd==OP_READ10)
  735. xbUiState=UI_USB_READ;
  736. else if(gxbAtaAtapiCmd==OP_WRITE10)
  737. xbUiState=UI_USB_WRITE;
  738. else
  739. xbUiState=UI_USB_IDLE;
  740. gxbAtaAtapiCmd=OP_TEST_UNIT_READY; //allen051028: win98 r/w issue
  741. #else
  742. /* MTP only show BUSY or IDLE */
  743. if(gxbMtpState&MTP_SESSIONOPEN) //Open Session
  744. xbUiState=UI_USB_BUSY;
  745. else //Close Session
  746. xbUiState=UI_USB_IDLE;
  747. #endif
  748. //tne 2007/01/04 #2 start
  749. #if(_PM_USB_MSC_)
  750. if(xbUiCurState!=xbUiState)
  751. gxbUiRwIconDelay=UI_USB_RW_DELAY_NUM; //Update right now
  752. #endif
  753. UiShowUsbIconSts(xbUiState);
  754. //tne 2007/01/04 #2 end
  755. //Allen051221#2
  756. // TODO: display show battery charging
  757. xbUiBattCounter++;
  758. #if(1)//DRM_MODE_EN)//Nick060605#2 // modify by Rojam 2007-04-13 15:17
  759. if(!(obUSBMISCCTL & 0x10))
  760. {
  761. /* //tne 2007/01/04 #2 
  762. NandGpioCtrl(NAND_CS_OFF);//all off Allen051208#1: fix 2 chip nand show icon bug.
  763. #if(USE_STEP_UP_CONVERTER)
  764. obCLKSRAMCTRL=0xD0;
  765. obCLKSMCTRL=0xD0;
  766. McuClockCtrlAdjust(0xD0);
  767. #endif
  768. */
  769. UiShowUsbIconSts(UI_USB_SEARCHING);
  770. }
  771. else if(!(gxwHostTimeOutCnt&0x8000))
  772. {
  773. gxwHostTimeOutCnt |= 0x8000;
  774. gxbHostTimeOutRetry = 0;//reset retry
  775. /* //tne 2007/01/04 #2
  776. #if(USE_STEP_UP_CONVERTER)
  777. obCLKSRAMCTRL=0xD0;
  778. obCLKSMCTRL=0xD0;
  779. McuClockCtrlAdjust(0xD0);
  780. #endif
  781. */
  782. UiShowUsbIconSts(UI_USB_FIRST_READY);
  783. }
  784. #endif
  785. #if(USB_DISP_CHARGING)
  786. NandGpioCtrl(NAND_CS_OFF); //all off Allen051208#1: fix 2 chip nand show icon bug.
  787. //UiShowBattCharging((xbUiBattCounter&0x0007)); //Walace070205#1
  788. /*#if(USE_STEP_UP_CONVERTER)
  789. obCLKSRAMCTRL=0xD0;
  790. obCLKSMCTRL=0xD0;
  791. McuClockCtrlAdjust(0xD0);
  792. #endif
  793. */
  794. UiShowBattCharging(xbUiBattCounter%BATTERY_LV_COUNT); //Walace060803#2
  795. #endif
  796. UsbSetSysSpeed(USB_CLK_UI_CANCEL);//Walace070205#1
  797. //obCLKSMCTRL|=0x80;  Walace debug 
  798. }
  799. }
  800. /* //Walace070205#1 
  801. //#if(USE_STEP_UP_CONVERTER)
  802. McuClockCtrlAdjust(bClkCtrlTmp);// WHH #1 061017
  803. //#else
  804. //obCLKMCUCTRL=bClkCtrlTmp; //MCU clock use XTALI 12MHz //v03210#1
  805. //#endif
  806. obCLKSRAMCTRL=bClkCtrlTmp;
  807. obCLKSMCTRL=bClkCtrlTmp;
  808. */
  809. }
  810. }
  811. #else
  812. void UiFlashDisk(void) //allen041201 add error handle
  813. {
  814. BYTE bClkCtrlTmp=obCLKMCUCTRL;
  815. #if(_PM_MTP_)
  816. CBYTE cbIconTemp[]={77,84,80};
  817. #endif
  818. /* //tne 2005/09/02
  819. if(!NandReadPhySec(gxwAddrPMI,1,SRAM_DATA_ADDR)) //read font index
  820. return;
  821. gxwFontTable[FONT_SYS]=(((WORD)gxbFsData[PM_FONT_SYS+1])<<8)|gxbFsData[PM_FONT_SYS];//keep system font index
  822. */
  823. #if(_PM_MTP_)
  824. if(!NandReadPhySec(gxwAddrPMI,1,SRAM_DATA_ADDR)) //read font index
  825. return;
  826. gxwMtpConstSec=(((WORD)gxbFsData[PM_MTP_CONST+1])<<8)|gxbFsData[PM_MTP_CONST]; //David 050504
  827. #endif
  828. /*
  829. #if(_PM_MTP_)
  830. gxwUniBig5Table=(((WORD)gxbFsData[PM_TABLE_UNI_BIG5+1])<<8)|gxbFsData[PM_TABLE_UNI_BIG5];
  831. #endif
  832. */
  833. obCLKMCUCTRL=0xD0; //MCU clock use XTALI 12MHz //v03210#1
  834. OledInit();
  835. //OLED_CLEAR_ALL(); //Tony070312
  836. OledShowIcon(ICON_PC,14,16);
  837. OledShowIcon(ICON_USB_STATE_IDLE,52,LINE2);
  838. #if(_PM_MTP_)
  839. OledShowIcon(ICON_USB_MTP,SEG8,LINE2);
  840. #else
  841. OledShowIcon(ICON_USB_MASS,SEG8,LINE2);
  842. #endif
  843.        #if(USB_DISP_CHARGING)
  844. UiShowBattCharging(0); //050812
  845.        #endif
  846.    
  847. gxbDrawUsbUi--;
  848. GetUsbConfig();
  849. obCLKMCUCTRL=bClkCtrlTmp;
  850. }
  851. #endif
  852. #if(!(_PM_MTP_|_PM_USB_))
  853. void UiShowString(BYTE bState) large
  854. {
  855. BYTE bClkCtrlTmp=obCLKMCUCTRL;
  856. CBYTE cbIconTemp[4][5]={ {'R','D',' ',' ',' '},
  857. {'W','R',' ',' ',' '},
  858. {'I','S','P',' ',' '},
  859. {'E','n','d',' ',' '},};
  860. // #if(USE_STEP_UP_CONVERTER)
  861. McuClockCtrlAdjust(0xD0);// WHH #1 061017
  862. //#else
  863. // obCLKMCUCTRL=0xD0; //MCU clock use XTALI 12MHz //v03210#1
  864. //#endif
  865. //#if(USE_STEP_UP_CONVERTER)
  866. McuClockCtrlAdjust(bClkCtrlTmp);// WHH #1 061017
  867. //#else
  868. // obCLKMCUCTRL=bClkCtrlTmp; //MCU clock use XTALI 12MHz //v03210#1
  869. //#endif
  870. }
  871. #endif
  872. /*--------------------------------------------------------------------------
  873. Description:
  874. Check FW Charger Batt SADC change, when Batt SADC is stable then send Mtp Event to PC
  875. Arguments:
  876. Global arguments:
  877. gxbBatUnChg: Batt SADC
  878. gxbBattStableValue: Mtp return Value
  879. Returns: 
  880. //Chris070521#1 MTP update Batt lv
  881. --------------------------------------------------------------------------*/
  882. #if (_PM_MTP_)
  883. void UpdateBattValue(void)
  884. {
  885. BYTE bBattValue;
  886. #if(ONE_BATT_MODE)
  887. bBattValue=BattCheck();
  888. if ((bBattValue > BATTERY_LV_MAX)||(bBattValue < gxbBattMin))
  889. {
  890. gxbBattValue = gxbBattMin;
  891. }
  892. // Normal Battery Value
  893. else
  894. {
  895. gxbBattValue = bBattValue;
  896. }
  897. //Stable Delay, and Update Event send
  898. if (gxbBattKeep != gxbBattValue)
  899. {
  900. gxbBattKeep = gxbBattValue;
  901. gxwBattStableDelay = (gfBattFirstSet)? FirstDelay: StableDelay;
  902. }
  903. else
  904. {
  905. gxwBattStableDelay--;
  906. if (gxwBattStableDelay == 0)
  907. {
  908. if ((gxbBattStableValue!=gxbBattKeep))
  909. {
  910. #if (MTP_SUPPORT_EVENT)
  911. if ((gfMtpEventReady) && ((gxbMtpState&MTP_SESSIONOPEN)==MTP_SESSIONOPEN))
  912. SendEvent(16, PTP_EVENTCODE_DEVICEPROPCHANGED, 0x01500000);
  913. #endif
  914. gxbBattStableValue = gxbBattKeep;
  915. gfBattFirstSet = FALSE;
  916. }
  917. gxwBattStableDelay = StableDelay;
  918. }
  919. }
  920. #else // Li-Ion
  921. if ((gxbChargerState == CHG_STAGE_END) && (gfBattChargerEnd))
  922. return;
  923. gfBattChargerEnd = FALSE;
  924. #if(USE_FW_CHARGER)
  925. bBattValue=gxbBatUnChg;
  926. #else
  927. bBattValue=BattCheck();
  928. #endif
  929. // UnNormal Battery Status or No Battery
  930. if ((bBattValue > BATTERY_LV_MAX)||(bBattValue < gxbBattMin)||(gxbChargerState & 0xF0 == CHG_STAGE_NO_BAT))
  931. {
  932. gxbBattValue = gxbBattMin;
  933. }
  934. // Costant Voltage Charge
  935. else if ((bBattValue > gxbBattMax) && (gxbChargerState & 0xF0 != CHG_STAGE_END))   // Jeff070522#1
  936. {
  937. gxbBattValue = gxbBattMax-1;
  938. }
  939. // Charging Battery Value
  940. else
  941. {
  942. gxbBattValue = bBattValue;
  943. }
  944. //Stable Delay, and Update Event send
  945. if (gxbBattKeep != gxbBattValue)
  946. {
  947. gxbBattKeep = gxbBattValue;
  948. gxwBattStableDelay = (gfBattFirstSet)? FirstDelay: StableDelay;
  949. }
  950. else
  951. {
  952. gxwBattStableDelay--;
  953. if (gxwBattStableDelay == 0)
  954. {
  955. if ((gxbBattStableValue!=gxbBattKeep) ||(gxbChargerState & 0xF0  == CHG_STAGE_END))
  956. {
  957. if (gxbChargerState & 0xF0 == CHG_STAGE_END)
  958. {
  959. gfBattChargerEnd = TRUE;
  960. if (gxbBattKeep != gxbBattMin)
  961. {
  962. SramWrite(SRAM_CHARGER_STOP_SADC,&gxbBattKeep);
  963. gxbBattMax = gxbBattKeep;
  964. }
  965. }
  966. #if (MTP_SUPPORT_EVENT)
  967. if ((gfMtpEventReady) && ((gxbMtpState&MTP_SESSIONOPEN)==MTP_SESSIONOPEN))
  968. SendEvent(16, PTP_EVENTCODE_DEVICEPROPCHANGED, 0x01500000);
  969. #endif
  970. gxbBattStableValue = gxbBattKeep;
  971. gfBattFirstSet = FALSE;
  972. }
  973. gxwBattStableDelay = StableDelay;
  974. }
  975. }
  976. #endif
  977. }
  978. #endif
  979. /*--------------------------------------------------------------------------
  980. Description:
  981. Check Hardware Charger's status as Charging or End
  982. Arguments:
  983. Global arguments:
  984. gxbChargerState: Charge Status
  985. Returns: 
  986. --------------------------------------------------------------------------*/
  987. #if (_PM_USB_&&!USE_FW_CHARGER)
  988. void CheckHardwareChargerStatus(void) //Jeff070523#1
  989. {
  990. obGPIOADIR &= (~0x01);
  991. if(obGPIOADAT&0x01)
  992. {
  993. gxbChargerState = CHG_STAGE_CHARGE;
  994. }
  995. else
  996. {
  997. if(BattCheck()<BATTERY_LV_LOW)
  998. gxbChargerState = CHG_STAGE_NO_BAT;
  999. else
  1000. gxbChargerState = CHG_STAGE_END;
  1001. }
  1002. }
  1003. #endif
  1004. main(void)
  1005. {
  1006. #if(USB_DISPCOUNTER)
  1007. XBYTE bKey ;
  1008. #endif
  1009. #if(!UI_CHARGE_IC)
  1010. XBYTE bChargeCount;
  1011. #endif
  1012. #if(COST_DOWN_CIRCUIT)
  1013. Usb_reset:
  1014. #endif
  1015. #if(_PM_MTP_)   
  1016. gxdwMtpGUIDSN = 0x00000000; //Chris for GUID 060727
  1017. //xbUiBattCounter=obDCV_INT_FLAG; //Ted 1013
  1018. gxbMtpMultiBank=FALSE; //Scott060720
  1019. #endif
  1020. xbUiBattCounter=obDCV_INT_FLAG; //Ted 1013
  1021. xbUiBattCounter = 0x00;
  1022. gxbLcdLimitCol=MAX_COLNUM; //tne lcd scroll2
  1023. gfHaveSaveModifyFlag=FALSE; //tne CDB
  1024. gxbUiRwIconStep=0; //tne 2007/01/04 #2
  1025. gxbUiRwIconDelay=0; //tne 2007/01/04 #2
  1026. //#if(USE_FW_CHARGER) //060918Renshuo //Ted 1013 //WHH070304(mark)
  1027. //ChargerInit();
  1028. //#endif
  1029. #if(SETTING_FOR_ISP_START)
  1030.   CKCON &= 0xF8;
  1031. CKCON |= 0x07; // STRECH = 111
  1032. obREADYENL=SM_EN|USB_EN|SD_EN;
  1033. obREADYENH=(SRAMRA_EN|RA_EN|SYSREG_EN)|0xF0;
  1034. //CKCON &= 0xF9; // STRECH = 001 //David 050406
  1035. CKCON &= 0xF8; // STRECH = 000
  1036. IE = 0;
  1037. EA = 1;
  1038. IP = 0;
  1039. PX0 = 1;
  1040. TMOD = 0x10;
  1041. TCON = 0;
  1042. T2CON= 0;
  1043. TA=0xAA;
  1044. TA=0x55;
  1045. WDCON =0;
  1046. // Context_Switch from BR.
  1047. // 1. MCUCLK from USB, (120/4)
  1048. // 2. SRAMCLK from USB, (120/4)
  1049. // 3. SMCLK Disable, but from DCV
  1050. // 4. DCVCLK disable
  1051. // 5. Do not Reset Pipe
  1052. obCLKLCDCTRL|=0x20; //Div2 Enable
  1053. obDCVARRD = 0x04; //DCV clock
  1054. obDCVWRDATA = 0xe1; //147 MHz
  1055. obCLKSMCTRL=0xA0; //48Mhz
  1056. obCLKSMDIVF=0x00;
  1057. obSMREADCYC = 0x02;
  1058. obSMWRITECYC = 0x02;
  1059. obSMHOLDTIME = 0x00;
  1060. obDCVARRD=0x04;
  1061. obDCVWRDATA=0xf1; //disable dcv clock
  1062. gxbNandInitStage=NDINIT_INIT; //Allen060609 new_nf
  1063. NandGpioInit();
  1064. NandInit(NDINIT_IDENT_DONE);
  1065. gxbMaxLUN =1;
  1066. gbDescriptorSource = ROM; // Initial config Descriptor from ROM 
  1067. UsbDeviceInit();
  1068. gxbDrawUsbUi = 0x00; //ISP don't draw UI
  1069. UiFlashDisk(ST_FORCE_REFRESH|ST_BACKGROUND); //dummy call
  1070. gxbUsbWPStatus=FALSE;
  1071. gxbSWCBW = 0x00;
  1072. #else //SETTING_FOR_ISP_START
  1073. #if(SETTING_FOR_ICE_START)
  1074. SettingForIceStart();
  1075. gxbDeviceMode=DEV_INIT;
  1076.                 //David050627
  1077. #if(_PM_MTP_)
  1078.                     gxbDrmOptionMode|=USB_MTP;
  1079. #else
  1080.                     gxbDrmOptionMode&=~USB_MTP;
  1081. #endif
  1082. //David050705#1
  1083. //SM Clock
  1084. obCLKSMCTRL=0xD0;
  1085. gxbNandInitStage=NDINIT_INIT;
  1086. NandGpioInit();
  1087. NandInit(NDINIT_IDENT_DONE);
  1088. #endif
  1089. #if(_NAND_API_RELOADWLC_) //060718
  1090. NandReloadCnt(); //Allen060624
  1091. #ifdef _WL_DEBUG_
  1092. gxdwDoWlNumber=0;
  1093. gxwWLCReset=0;
  1094. gxwProgramError=0;
  1095. gxwEraseError=0;
  1096. gxbUsbWriteFail=0; //060628
  1097. gxbUsbReadFail=0; //060628
  1098. gxbSaveLutFail=0; //060628
  1099. gxbBadBlockNum=0; //060629
  1100. #endif
  1101. #endif
  1102. IE = 0;
  1103. EA = 1;
  1104. // TODO:  add Variable Initial code here
  1105. //allen051101#2
  1106. #if(SYS_USE_KEY_HOLD) //modify by Rojam 2007-05-18 17:30
  1107. gxbUsbWPStatus=CheckWPKey();
  1108. #else
  1109. gxbUsbWPStatus=FALSE;
  1110. #endif
  1111. OLED_DISP_MASK_INIT();
  1112. //add by tne 2005/05/07
  1113. //device mode itself, it's swaping mode after format
  1114. #if(_PM_MTP_)
  1115. MtpVariableInit();// 060108 //Allen060419#1
  1116. //allen051101#3: Var Init
  1117. // fForwardReadFileSec=FALSE;
  1118. // fOpenWithLongName=FALSE;
  1119. fDeleteContinuous=FALSE; //060721
  1120. #if(SETTING_FOR_ICE_START)
  1121. // fOpenWithLongName=FALSE;
  1122. gxbExtRtc=0;
  1123. gxbStorage=STOR_NAND;
  1124. gxbStorType=STOR_NAND;
  1125. NandInit(); //050517
  1126. if(FsInit())
  1127. {
  1128. INIT_FSFILEInf();
  1129. FsRecInit();
  1130. }
  1131. else
  1132. {
  1133. gbFsUnableUse=TRUE;
  1134. }
  1135. #else
  1136. // INIT_FSFILEInf();
  1137. #endif
  1138. //
  1139. // Get Config & gxbMaxLUN Allen051110#1
  1140. //
  1141. if(GetUsbConfig())
  1142. gxbDrawUsbUi = 0x80;
  1143. else
  1144. gxbDrawUsbUi = 0x00;
  1145. #if(SETTING_FOR_ICE_START) //David050705#1
  1146. gxbStorLun=NAND_LUN;
  1147. gxbMtpInitMode=MTPINIT_NEED_USBINIT;
  1148. gxbStorAvailable[gxbStorLun]=STORAGE_FSINIT_DONE;
  1149. #endif
  1150. MtpDeviceInit(); //allen051101#2 Allen051110#1
  1151. //tne 2005/08/22
  1152. //check secure clock state //David 050425
  1153. if(gxbDrmOptionMode&S_CLOCK_READY_MODE) //if SRAM indicate s-clk ready
  1154. gbSecureClockState = SECURE_CLOCK_NEED_REFRESH;
  1155. else
  1156. gbSecureClockState = SECURE_CLOCK_NOT_SET;
  1157. obDCV_INT_MASK |= RTC_COUNTER_EN;
  1158. if(gxbMtpInitMode&MTPINIT_NEED_USBINIT)
  1159. {
  1160. gxbMtpInitMode&=~MTPINIT_NEED_USBINIT;
  1161. // TODO: every plugin will execute here one time.
  1162. UsbSaveMtpMode(DRM_OPTION_MTP_ON); //tne 2005/08/17
  1163. obUSBOTGSPEED &= USB_OFFJ;
  1164.                 // WalaceMerge060612
  1165. obSYSSOFTRSTCTRL &= 0x7F;   //Usb Reset //Nick060531
  1166. obSYSSOFTRSTCTRL |= 0x80;   //Usb Reset dis //Nick060531
  1167. UsbDeviceInit();
  1168. UiFlashDisk(ST_FORCE_REFRESH|ST_BACKGROUND);
  1169. }
  1170. MTPLicScan(); //Chris 060918 #1
  1171. EnableExtInt0(); //Walace060524#2
  1172. #if ENABLE_SD_FUNCTION
  1173. if(gxbStorAvailable[SD_LUN]==STORAGE_NOT_EXIST) //Chris for SD 061110 #7 //Chris070521#1
  1174. {
  1175. CardDetect(FALSE); //Chris 061222#1
  1176. }
  1177. #endif
  1178. //Chris070111#4 for send finished check
  1179. for (gbVar1 = 0; gbVar1 < MAX_LUN; gbVar1++)
  1180. {
  1181. gbVar2 = 0x56;
  1182. SramWrite(SRAM_MTP_SEND_FINISH - gbVar1, &gbVar2);
  1183. }
  1184. #else
  1185. /*  MSC Start  */
  1186. //Yen_Lung050721
  1187. //obUSBOTGSPEED &= USB_OFFJ; //David 050414
  1188. #if(USE_RTC_COUNTER)     
  1189. obDCV_INT_MASK |= RTC_COUNTER_EN;   //Ted 1013
  1190. #endif
  1191. #if(NEW_FLASH)
  1192. NandInit(NDINIT_IDENT_DONE);
  1193. if(GetUsbConfig())
  1194. gxbDrawUsbUi = 0x80;
  1195. else
  1196. gxbDrawUsbUi = 0x00;
  1197. UsbDeviceInit();
  1198. NandInit(NDINIT_DONE);
  1199. #else
  1200. UsbDeviceInit();
  1201. if(GetUsbConfig())
  1202. gxbDrawUsbUi = 0x80;
  1203. else
  1204. gxbDrawUsbUi = 0x00;
  1205. #endif
  1206. if(gxbSWCBW&0x01)//Yen_Lung050721: Mtp auto-switch to Msc
  1207. {
  1208. CheckReceiveCBW();
  1209. gxbUsbSetupFlag=TRUE; //Walace060527#2
  1210. }
  1211. UiFlashDisk(ST_FORCE_REFRESH|ST_BACKGROUND);
  1212. #endif // (_PM_MTP_)
  1213. #endif //SETTING_FOR_ISP_START
  1214. #if(_PM_USB_MSC_) //allen060528: variable init
  1215. #if(NEW_FLASH)
  1216. gxbMscCachePath[0]=SRAM_CACHE_0_PATH;
  1217. gxbMscCachePath[1]=SRAM_CACHE_1_PATH;
  1218. gxbMscKeptModified[0]=0; //Allen060611 fix
  1219. gxbMscKeptModified[1]=0; //Allen060611 fix
  1220. #endif
  1221. if (gdwCapacity[0]!=0) //Walace060527#1: fixed "Eject" bug
  1222. gfStartStop = 0;
  1223. else
  1224. gfStartStop = 1;
  1225. #endif
  1226. #if(!_PM_MTP_)
  1227. gxbRestoreCMD = FinishAllBlk;//Nick061120 //NandRestore
  1228. NandRestore(); //Scott061114
  1229. #endif
  1230. obUSBOTGSPEED |= USB_ON;
  1231. //Key Init
  1232. obGPIOBDAT = 0xfc;
  1233. obGPIOBDIR |= 0x1C; //set GPIOB_2,3,4 output                                                      //XXX1 1100
  1234. obGPIOBDIR &= 0x1F/*0x1C*/; //set GPIOB_5,6,7 input Allen060224: GPIOB0 Output  //000X XXXX
  1235. obGPIOBDAT &= 0xf7; //let GPIO_B_3 output low
  1236. POWER_ON_3V3SD(); //Allen060224: 
  1237. gfKeyReady=FALSE;
  1238. #if(DRM_MODE_EN)
  1239. gxwHostTimeOutCnt = 0x7FFF;//Nick060605#1
  1240. #endif
  1241. gxbLcdCounter=0; //050811
  1242. #if(USB_DISP_CHARGING)
  1243. gxbBatterFullCount=0; //Walace060803#2
  1244. #endif
  1245. #if(PLAY_IN_ADAPTOR)
  1246. gxwWaitUsbSetupCnt = 0; //Alan060921   // Jason 20070119#1
  1247. #endif
  1248. ET0 = 1; // enable Timer0
  1249. #if(_PM_USB_MSC_)//Nick060706#1 for ansuring auto run function on win2K
  1250.  gxbCdRomSts = 0;//STSMediaNotPresent; 
  1251.  #endif
  1252.  
  1253.  #if((!UI_CHARGE_IC)&&(COLOR_MODE!=3))// modify by Rojam 2007-05-17 16:23
  1254. obGPIOADIR&=~0X10;
  1255. obGPIOADIR |= 0x02;
  1256. obGPIOADAT &= (~0x02);
  1257. #endif
  1258. gxwDelayTime=0; //add by Rojam 070202
  1259. bTimeTemp=0; //add by Rojam 070202
  1260. #if(COLOR_MODE==0)
  1261.  obGPIOCDIR|=0x04;
  1262.  obGPIOCDAT&=~0x04;
  1263. #else 
  1264.  obGPIOADIR|=0x01;
  1265.  obGPIOADAT&=~0x01;
  1266.  obGPIOBDIR|=0x80;
  1267.  obGPIOBDAT&=~0x80;  
  1268. #endif
  1269. #if(COLOR_MODE==3 ) //modify by Rojam 2007-05-17 15:37
  1270. obGPIOADIR|=0x01;
  1271. obGPIOADIR&=~0x02;
  1272. obGPIOADAT|=0x02;
  1273. obGPIOCDIR&=~0x02;
  1274. obGPIOCDAT|=0x02;
  1275. #endif
  1276. #if(USB_DISPCOUNTER)
  1277. gxbBackLightTime=5;
  1278. gxbBackLightCounter=BACKLIGHT_STS_ON;
  1279. #endif
  1280.  
  1281. while(1)
  1282. {
  1283. UiCheckAlarm(); //Walace061019#1
  1284. obDCVARRD=0x14;  //Power Control
  1285. obDCVWRDATA=(obDCVRDDATA|0x01); //VREG_BAT use VDDA
  1286. #if(_PM_MTP_|USE_RTC_COUNTER) //Ted 1013
  1287. gxbTemp=obDCV_INT_FLAG;  
  1288. #endif
  1289. #if(COLOR_MODE==3 ) //modify by Rojam 2007-05-17 15:37
  1290. if(((obGPIOADAT&0x02)==0x00)||(obGPIOCDAT&0x02)==0x00)
  1291. {
  1292. obGPIOADAT&=~0x01;
  1293. }
  1294. else
  1295. obGPIOADAT|=0x01;
  1296. #endif
  1297. #if(!SETTING_FOR_ISP_START) //060718
  1298. #if(USE_FW_CHARGER) //060918Renshuo //Ted 1013
  1299. ChargerSenseVoltage();
  1300. #else
  1301. #if(!ONE_BATT_MODE)
  1302. CheckHardwareChargerStatus(); //Chris070521#1
  1303. #endif   
  1304. #endif
  1305. #if (_PM_MTP_)
  1306. UpdateBattValue(); //Chris070521#1  MTP show Batt lv
  1307. #endif
  1308.                 #if (DRM_MODE_EN)
  1309. //David 050517, MTP/UMS mode changable
  1310. //if(CheckModeKey())//Nick060605#1 mark it
  1311.     //WHH070307#5(start)    
  1312. #if(PLAY_IN_ADAPTOR)
  1313.     if(gfHostSupportMTP && 
  1314.     ((CheckModeKey()&&gxbUsbSetupFlag)|| (gxwHostTimeOutCnt==TimeOutCnt&&gxbHostTimeOutRetry<3)))//Nick060605#1 add it
  1315. #else
  1316.     if(gfHostSupportMTP && 
  1317.     (CheckModeKey() || (gxwHostTimeOutCnt==TimeOutCnt&&gxbHostTimeOutRetry<3)))//Nick060605#1 add it
  1318. #endif
  1319.     //WHH070307#5(end)
  1320. {
  1321. while ((obUSBDEVEPAFCTR & EP_STS_ALLEMP) != EP_STS_ALLEMP) {} //Nick060605#1 add it
  1322. obUSBOTGSPEED &= USB_OFFJ;
  1323. obSYSSOFTRSTCTRL &= 0x7F; //Usb Reset //David060602
  1324. obSYSSOFTRSTCTRL |= ~0x7F; //Usb Normal //David060602
  1325. NandFinishJob();
  1326. #if(USE_FW_CHARGER) //Ted 1013
  1327. CHG_CTRL_DIR |=0x01;
  1328. CHG_CTRL_DAT &=0xFE; //set GPIOA0 to low to active charge
  1329. //gxbChargerFlag = INIT_READY;   //Jason 20070119#1 start    // Jeff070303#1
  1330. #endif
  1331. gbSpecialRW=RW_NORMAL;//Nick060706
  1332. UiShowUsbIconSts(UI_USB_WAIT); //tne 2007/01/04 #2
  1333. if((gxbDrmOptionMode&DRM_OPTION_MTP_MODE)==USB_MASS_STORAGE)
  1334. {
  1335. if(gxwHostTimeOutCnt==TimeOutCnt)//Nick060605#1
  1336. {
  1337. gxbHostTimeOutRetry++;
  1338. LoadProgram(PM_USB,NORMAL_CODE); //load USB program
  1339. }
  1340. gxbDrmOptionMode|=USB_MTP;
  1341. SramWrite(SRAM_DRM_OPTION_MODE,&gxbDrmOptionMode);
  1342. //gxbDeviceMode=DEV_INIT; //050601 //Walace070205#1
  1343. gxbDeviceMode=DEV_USB;//Walace070205#1
  1344. LoadProgram(PM_MTP_INIT,NORMAL_CODE); //load MTP program
  1345. }
  1346. else //if(gxbDrmOptionMode==1)
  1347. {
  1348. if(gxwHostTimeOutCnt==TimeOutCnt)//Nick060605#1
  1349. {
  1350. gxbHostTimeOutRetry++;
  1351. LoadProgram(PM_MTP_INIT,NORMAL_CODE); //load MTP program
  1352. }
  1353. gxbDrmOptionMode&=(~USB_MTP);
  1354. SramWrite(SRAM_DRM_OPTION_MODE,&gxbDrmOptionMode);
  1355. #if(_PM_MTP_)
  1356. UsbSaveMtpMode(DRM_OPTION_MTP_OFF); //tne 2005/08/17
  1357. #endif
  1358. LoadProgram(PM_USB,NORMAL_CODE); //load USB program
  1359. }
  1360. }
  1361.                 #endif
  1362. //if(!VbusCheck())  //if disconnect //Walace060901#2
  1363. if(VbusCheck(CHECK_VBUS_OFF)) //if disconnect //Walace060901#2
  1364. {
  1365. obUSBOTGSPEED &= USB_OFFJ;
  1366. EX0=0;
  1367. #if(COST_DOWN_CIRCUIT)
  1368. xbUsbFlag=1;
  1369. #endif
  1370. /*
  1371. obCLKLCDCTRL|=0x20; //Div2 Enable
  1372. obDCVARRD=0x04; //DCV clock
  1373. obDCVWRDATA=0xe1; //147 MHz
  1374. //Mcu Clock
  1375. obCLKMCUDIVF=0x03;
  1376. obCLKMCUCTRL=0xb8; //73(67)/5=14.6(13.4)
  1377. //Ra Clock
  1378. obCLKSRAMDIVF=0x03;
  1379. obCLKSRAMCTRL=0xb8; //73(67)/5=14.6(13.4)
  1380. //SM Clock
  1381. obCLKSMDIVF=0x03;
  1382. obCLKSMCTRL=0xb8; //73(67)/5=14.6(13.4)
  1383. SD_POWER_OFF();
  1384. obCLKCODECCTRL=0x50;
  1385. obCLKSDCTRL=0x50;
  1386. obUSBOTGCTRL |= 0x02; //DPLL power down
  1387. obMODSEL3 &= 0xBF; //USB  Disable
  1388. obSYSSOFTRSTCTRL &= 0x7F;   //Usb Reset
  1389. obSYSSOFTRSTCTRL=SM_RST_DIS|RA_RST_DIS; //reset all, but not SM, RA
  1390. obSYSSOFTRSTCTRL2=0x00;
  1391. obMODSEL1=0x08;
  1392. obMODSEL3=0x08;
  1393. LoadProgram(PM_INIT,NORMAL_CODE);
  1394. */
  1395. }
  1396. // Jason 20070119#1 start
  1397. //**************For Adapter initialize Use****************//
  1398. #if(PLAY_IN_ADAPTOR)
  1399. if(gxwWaitUsbSetupCnt >= USB_SETUP_TIMEOUT)   // USB_SETUP_TIMEOUT=600
  1400. {
  1401. //if(!gxbUsbSetupFlag)
  1402. if((!gxbUsbSetupFlag)&&(gxbAdaptorPlugIn==ADAPTER_DEFAULT_STATE)) //WHH070307#5
  1403. {
  1404. gxbAdaptorPlugIn = ADAPTER_PLUG_IN; // judge adapter flag //WHH070307#5
  1405. EX0=0;
  1406. obUSBOTGSPEED &= USB_OFFJ; //USB stop
  1407. obDCVARRD=0x04;//DCV clock
  1408. obDCVWRDATA=0xe1;  //147 MHz
  1409. //Mcu Clock
  1410. obCLKMCUDIVF=0x08;
  1411. obCLKMCUCTRL=0xC8; //73(67)/5=14.6(13.4)
  1412. #if(USE_STEP_UP_CONVERTER)  //WHH 070117
  1413. StepUpConverterDutyCycleSetting( );
  1414. #endif
  1415. //Ra Clock
  1416. obCLKSRAMDIVF=0x08;
  1417. obCLKSRAMCTRL=0xC8; //73(67)/5=14.6(13.4)
  1418. //SM Clock
  1419. obCLKSMDIVF=0x08; 
  1420. obCLKSMCTRL=0xC8;  //73(67)/5=14.6(13.4)
  1421. //DSP clock
  1422. obCLKDSPCTRL=0xd0; //12M 
  1423. obCLKCODECCTRL=0x50;   //Codec 12M
  1424. obCLKSDCTRL=0x50;    //SD 12M
  1425. obSYSSOFTRSTCTRL &= 0x7F;   //Usb Reset
  1426. obUSBOTGCTRL |= 0x02; //DPLL power down
  1427. obMODSEL3 &= 0xBF; //USB  Disable
  1428. obSYSSOFTRSTCTRL2=0x00;  //reset
  1429. //obSYSSOFTRSTCTRL=SM_RST_DIS|RA_RST_DIS; //reset all, but not SM, RA
  1430. //GPIOC2_DEBUG(9);
  1431. obMODSEL1=0x08; // 8bit SM
  1432. obMODSEL3=0x08; //internal ROM Disable      
  1433.  //gxbChargerFlag=0;// charging Flag//WHH070309#1
  1434.  //GPIOC2_DEBUG(10);
  1435. LoadProgram(PM_INIT, NORMAL_CODE);
  1436.    
  1437. }
  1438. else
  1439. {
  1440. gxbAdaptorPlugIn=ADAPTER_USB_PLUG_IN;//WHH070307#5
  1441. UiFlashDisk(ST_BACKGROUND|ST_BATTERY|ST_RW_STATUS); //Usb Flash Disk display allen051101#4
  1442. }
  1443. }
  1444. else
  1445. {
  1446. UiFlashDisk(ST_BACKGROUND|ST_BATTERY|ST_RW_STATUS); //Usb Flash Disk display allen051101#4
  1447. }
  1448. #endif
  1449. //***************END***************//
  1450. // Jason 20070119#1 end
  1451. #if(COST_DOWN_CIRCUIT)
  1452. if(VbusCheck(CHECK_VBUS_ON))
  1453. {
  1454. if(xbUsbFlag==1)
  1455. {
  1456. xbUsbFlag=0;
  1457. goto Usb_reset;
  1458. }
  1459. }
  1460. #endif
  1461. UiFlashDisk(ST_BACKGROUND|ST_BATTERY|ST_RW_STATUS); //Usb Flash Disk display allen051101#4
  1462. //tne CDB
  1463. #if(!_PM_MTP_)
  1464. if(!gfHaveSaveModifyFlag)
  1465. {
  1466.                   if( (gxbAtaAtapiCmd==OP_WRITE10) && (gbLUNType[gbCBWLUN]==NAND_LUN) ) //tne CDB for SD //Nick060706
  1467. UsbSaveModifyFlag();
  1468. }
  1469. #endif
  1470. #endif
  1471. UsbDevice();
  1472. #if(_PM_MTP_)
  1473. #if ENABLE_SD_FUNCTION
  1474. //050601: Detect Card Plug-In
  1475. CardDetect(TRUE); //Chris 061222#1 //Chris070521#1
  1476. #endif
  1477. #endif
  1478. #if(USB_DISPCOUNTER)
  1479. obGPIOBDAT |= 0x7c; //Let all key's GPIO pins be high
  1480. obGPIOBDIR &=(~0x60); //GPIOB_5,6,input
  1481. obGPIOBDIR |= 0x1C; //GPIOB_2,3,4,output
  1482. obGPIOBDAT&=~0x1c;
  1483. #if(COLOR_MODE==1)
  1484. /*============Del by Rojam  2007-04-20 15:53===============
  1485. obGPIOBDIR &= (~0x80);
  1486. if((!(obGPIOBDAT&0x80))&((obGPIOBDAT&0x20)==0x20)&((obGPIOBDAT&0x40)==0x40))
  1487. bKey=0x00;
  1488. else
  1489. bKey=0x01;
  1490. obGPIOBDIR|=0x80;
  1491. obGPIOBDAT&=~0x80;
  1492. =========================== end Del ========================*/
  1493. //==================modify by Rojam 070208 =======================
  1494. if(((obGPIOBDAT&0x20)==0x00)||((obGPIOBDAT&0x40)==0x00))
  1495. bKey=0x01;
  1496. else
  1497. bKey=0x00;
  1498. //============================end============================
  1499. #else
  1500. obGPIOADIR &= (~0x04);
  1501. if((!(obGPIOADAT&0x04))&((obGPIOBDAT&0x20)==0x20)&((obGPIOBDAT&0x40)==0x40))
  1502. bKey=0x00;
  1503. else
  1504. bKey=0x01;
  1505. #endif
  1506. if(bKey!=0x00)
  1507. {
  1508. //backlight on
  1509. if(gxbBackLightTime!=LCD_BACKLIGHT_MIN_NUM)
  1510. {
  1511. gxbBackLightCounter=BACKLIGHT_STS_ON; //Set state on and clen counter
  1512. BACKLIGHT_ON();
  1513. }
  1514. }
  1515. else // if(bKey==KEY_INVALID) 
  1516. {
  1517. //backlight off
  1518. if(gxbBackLightTime!=LCD_BACKLIGHT_MAX_NUM)
  1519. {
  1520. if(gxbBackLightCounter&BACKLIGHT_STS_ON)
  1521. {
  1522. if((gxbBackLightCounter&BACKLIGHT_COUNTER_VAL)>=gxbBackLightTime)
  1523. {
  1524. gxbBackLightCounter=BACKLIGHT_STS_OFF; //set state off and cleaner counter
  1525. BACKLIGHT_OFF();
  1526. }
  1527. }
  1528. }
  1529. }
  1530. #endif
  1531. #if((!UI_CHARGE_IC)&&(COLOR_MODE!=3))// modify by Rojam 2007-05-17 16:23
  1532. if(1)//obGPIOADAT&0X10)  //add by Rojam
  1533. {
  1534. if(bChargeCount>6)
  1535. {
  1536. bChargeCount=0;
  1537. obGPIOADIR |= 0x02;
  1538. obGPIOADAT &= (~0x02);
  1539. }
  1540. else
  1541. {
  1542. bChargeCount++;
  1543. obGPIOADIR |= 0x02;
  1544. obGPIOADAT |= (0x02);
  1545. }
  1546. }
  1547. #endif
  1548. #if(SETTING_FOR_ISP_START)
  1549. gxbUsbWPStatus=FALSE;
  1550. #else
  1551. //Allen060511#0: always check WP in super loop new_nf
  1552. #if(SYS_USE_KEY_HOLD) //modify by Rojam 2007-05-18 17:30
  1553. if(CheckWPKey()) //WP
  1554. {
  1555. if(!gxbUsbWPStatus)
  1556. {
  1557. gxbUsbWPStatus=TRUE;
  1558. gbErrorMsg = SENSE_CHANGEMEDIUM_WP;
  1559. }
  1560. }
  1561. else
  1562. {
  1563. if(gxbUsbWPStatus)
  1564. {
  1565. gxbUsbWPStatus=FALSE;
  1566. gbErrorMsg = SENSE_CHANGEMEDIUM_WP;
  1567. }
  1568. }
  1569. #endif
  1570. #endif
  1571. if(gfTimeout)
  1572. {
  1573. gfTimeout=FALSE;//allen060511#4
  1574. #if(_PM_MTP_)
  1575. MtpFinishJob();
  1576. #else
  1577. NandFinishJob();
  1578. #endif
  1579. #if(!_PM_MTP_) //Nick061208 //NandRestore start
  1580. if(gxbRestoreBlkNum) 
  1581. {
  1582. gxbRestoreCMD = FullStep;
  1583. NandRestore();
  1584. }
  1585. #endif //NandRestore end
  1586. }
  1587. }
  1588. }
  1589. //tne 2005/08/17
  1590. #if(_PM_MTP_)
  1591. void UsbSaveMtpMode(BYTE fMtpMode) large
  1592. {
  1593. NandPrivateEn();
  1594. FsRead(SAVE_SETTING_NAND_ADD,1,FS_DATA_0_0);
  1595. SRAM_DAT_ACCESS(SRAM_LAST_DRM_OPTION) = ((gxbDrmOptionMode&(~DRM_OPTION_MTP_MODE)) | fMtpMode);
  1596. FsWrite(SAVE_SETTING_NAND_ADD,1,FS_DATA_0_0);
  1597. NandPrivateDis();
  1598. NandFinishJob();
  1599. }
  1600. #endif
  1601. //Walace061019#1 start
  1602. void UiCheckAlarm(void) 
  1603. {
  1604. if(!gfAlarmTimeUp)
  1605. return; 
  1606. UiSysGetAlarmTime();
  1607. //Disable alarm
  1608. obDCVARRD=0x03;
  1609. obDCVWRDATA=(obDCVRDDATA&RTC_ALARM_DIS);
  1610. //Reset alarm time
  1611. UiSetNewAlarmTime();
  1612. //Eisable alarm
  1613. obDCVARRD=0x03;
  1614. obDCVWRDATA=(obDCVRDDATA|RTC_ALARM_EN);
  1615. gfAlarmTimeUp=FALSE;
  1616. }
  1617. //Walace061019#1 end