fs_nav_upgrade.c
上传用户:poi891205
上传日期:2013-07-15
资源大小:9745k
文件大小:20k
源码类别:

DVD

开发平台:

C/C++

  1. /*
  2. *  Terry,2004/3/30 05:13PM
  3. */
  4. #include "global.h"
  5. #include "cmd.h"
  6. #include "func.h" 
  7. #include "memmap.h"
  8. #include "memmap0.h"
  9. #include "util.h" 
  10. #include "kernel.h"
  11. #include "cfont.h"
  12. #include "vfdfunc.h"
  13. #include "osd.h"
  14. #include "image.h"
  15. #include "iop.h"
  16. #include "memcfg.h"
  17. #include "ircode.h"
  18. #include "user_init.h"
  19. #include "fsNAV.h"
  20. #include "fsGUI.h"
  21. #include "setup.h"
  22. #include "fs96602.h"
  23. #include "fsGUI1.h"
  24. #include "timer.h"
  25. // Added by houyiwu 9/18/2004 for defining "SPHE1000"
  26. #ifndef SPHE1000
  27. #include "ver.h"
  28. #endif
  29. #if defined(SUPPORT_CARD_STORAGE)||defined(SUPPORT_USB)||defined(SPHE8202_CARD_STORAGE)//liweihua mod 20031219
  30. #include "cardfs.h"
  31. extern CARD_FILE       cardFile;
  32. extern CARD_INFO       cardP;
  33. #if defined(CF_CARD_WRITE) || defined(SPHE8202_FAT_Write_Function)//|| defined(WRITE_USB)
  34. extern BYTE read_card_sign,flag_cf2cd,flag_cd2cf;
  35. #endif
  36. extern BYTE IsCardMediaRemove(void);
  37. #endif
  38. extern const BYTE ir_mapcode[256];  //Jefftest 20020606
  39. //OSD related
  40. extern void     osd_init(void);
  41. extern void     osd_draw_rect(UINT32 xStart, UINT32 yStart, UINT32 xLen, UINT32 yLen, BYTE bkColor);
  42. extern void     osd_init_setup(void);
  43. extern void     osd_DrawLine(UINT32 xStart, UINT32 yStart, UINT32 xEnd, UINT32 yEnd, BYTE color, BYTE lineWidth);
  44. extern void     DrawOSD_XO(BYTE bXO);
  45. //FLASH related
  46. extern int      FlashEraseUpgrade(unsigned char *pBuf, unsigned int dwSize);
  47. extern UINT16   FlashReadID();
  48. extern UINT16   FlashRead();
  49. extern int      FlashWrite(UINT32 iStartAddr, BYTE *pBuf, UINT32 iLen);
  50. extern int      FlashEraseSector(UINT32 unSectorNum);
  51. extern UINT16   giFlashReadID; //Jeff 20020708
  52. #ifndef DVDRELEASE
  53. #define FSNAV_DBG
  54. #endif
  55. #define fsnav_printf(s...)  ((void)0)
  56. #ifdef  FSNAV_DBG
  57. #include "sio.h"
  58. #include "emuio.h"
  59. #undef  fsnav_printf
  60. #define fsnav_printf        printf_w
  61. #endif
  62. #ifdef UPGRADE_TRAYOUT  //joshua add    04-07-13
  63.     int trayout_flag = 0;
  64. #endif    
  65. #ifdef SUPPORT_SPI
  66. #include "spi.h"
  67. #endif
  68. #ifdef SPHE1000
  69. #define SMART_UPLOAD_BASE 0x80a00000
  70. #endif
  71. #ifdef DVD_AUDIO//2004-4-27 1:11
  72. extern UINT32 g_nAKeyFileLoc;
  73. extern UINT32 g_nAKeyFileSize;
  74. #endif
  75. void FSNav_UpgradeCountDown(UINT32  iCount)
  76. {
  77.     BYTE    buf[10];
  78.     psprintf(buf, "%02d", iCount);
  79.     osd_DrawString(6, 3, buf, 2, 6);
  80. }
  81. int FSNav_DoUpgrade(BYTE* strVersion)
  82. {
  83.     
  84. #ifdef UPGRADE_TRAYOUT    
  85.     trayout_flag = 1;
  86. #endif    
  87.     BYTE buf[30];
  88.     BYTE len, bOK = 1;
  89.     BYTE *pDVDROM;
  90.     int iRes = 0;
  91.     UINT32  iCount;
  92. #if defined(SUPPORT_CARD_STORAGE) || defined(SUPPORT_USB)||defined(SPHE8202_CARD_STORAGE)
  93.    watchdog_onoff(0);    //fengjl add 2004-05-20 09:39  for usb upgrade
  94. #endif
  95. #ifdef DVD_AUDIO
  96. BYTE* pKeyFile;
  97. UINT32 nKeyAmount = 0;
  98. UINT32 nKeySize = 0;
  99. UINT32 nEnterNum = 0;
  100. UINT32 nPos = 0;
  101. BYTE b0, b1, b2, b3, b4;
  102. b0 = b1 = b2 = b3 = b4 = 0;
  103. pKeyFile = (BYTE *)(SDRAM_BASE + (A_JPEG_SERVO_YA + JPEG_SERVO_SIZE) * 1024);
  104. #endif
  105. #if defined(QSI_PORTABLE_DVD) && defined(QSI_PLATFORM)  //qsi: added by johnson 20040720
  106. printf("FSNav_DoUpgrade> New Firmware Version = %sn",strVersion);
  107. #endif
  108. #if defined(QSI_PORTABLE_DVD) && defined(QSI_PLATFORM)//qsi: modify by johnson 20040720
  109. #define COUNTDOWN_MAX   QSI_QUERY_FW_UPGRADE_WAITING_TIME
  110. #else
  111. #define COUNTDOWN_MAX   20
  112. #endif 
  113.     
  114.     ircmd_callback_check = NULL;
  115.     cd_subtype = CDROM_BIN;
  116. #ifdef SDRAM_16Mb_Mode//3-12-9 0:31 nono
  117.     regs0->osd_base_addr = P_BIDIR_LUMA;
  118. #endif//SDRAM_16Mb_Mode
  119.    
  120.     osd_init_setup();
  121.     if (IsOSDChinese())
  122.         psprintf(buf, "         %s           ", &_OsdMessegeFont1[osd_font_mode][STR_OS_SMART_UPGRADE][0]);
  123.     else
  124.         psprintf(buf, "        %s       ", &_OsdMessegeFont1[osd_font_mode][STR_OS_SMART_UPGRADE][0]);
  125.     len = strlen(buf);
  126.     osd_draw_rect(4*16, 3*26, 28*16, 9*26, 6);
  127.     
  128.     //top
  129.     osd_DrawLine(4*16, 3*26, 4*16+28*16, 3*26, 2, 1);
  130.     //left
  131.     osd_DrawLine(4*16-2, 3*26, 4*16-2, 3*26+9*26, 2, 1);
  132.     //bottom
  133.     osd_DrawLine(4*16, 3*26+9*26, 4*16+28*16, 3*26+7*26, 11, 1);
  134.     //right
  135.     osd_DrawLine(4*16+28*16, 3*26, 4*16+9*26, 3*26+28*16, 11, 1);
  136.     osd_DrawString(4, 3, buf, 2, 6); //2:font color, 6:background color
  137.     psprintf(buf, "%s", &_OsdMessegeFont1[osd_font_mode][STR_OS_READ][0]); //Jeff 20020527
  138.     len = strlen(buf);
  139.     osd_DrawString(6, 5, buf, 2, 6); //2:font color, 6:background color
  140.     
  141.     
  142.     #if defined(SPHE1000) && !defined(DVB1000_NON_OS)
  143.     pDVDROM = (BYTE *)(SMART_UPLOAD_BASE);
  144.     
  145.     #else
  146.     //Move system image to DRAM
  147.     #ifdef FS_BMP_GUI
  148.     //when NTSC mode,"dvdrom.bin" is not put into UDF buf,but put buf after GP chroma.suqiaoli add 2004-10-16
  149.         pDVDROM = (BYTE *)(SDRAM_BASE + (GP_REF0_CHROMA + GP_CHROMA_SIZE) * 1024);
  150.     #else
  151.     pDVDROM = (BYTE *)(SDRAM_BASE + (A_UDF_WORK_BUF+UDF_WORK_BUF_SIZE) * 1024);
  152.     #endif
  153.     #endif
  154. #if defined(SUPPORT_CARD_STORAGE)||defined(SUPPORT_USB)||defined(SPHE8202_CARD_STORAGE)
  155.     if (media_type==MEDIA_CARD) {
  156.         UINT32  nLBA;
  157.         cardFile.stLBA = msf2l(pFsJpeg->gifsMSFDVDRom);
  158. //        cardFile.stClus = CardLBA2Clus( cardFile.stLBA );
  159.         cardFile.stClus = FSLBA2Clus( cardFile.stLBA );//linrc rename.20041204
  160.         cardFile.iFileSize = pFsJpeg->gifsDVDRomSize;
  161.         cardFile.curLBA = cardFile.stLBA;
  162.         cardFile.curClus = cardFile.stClus;
  163.         cardFile.iLeaveSize = cardFile.iFileSize;
  164.         nLBA = (pFsJpeg->gifsDVDRomSize + cardP.bytePerSec - 1) / cardP.bytePerSec;
  165. //        CardReadStream(&cardFile, nLBA, pDVDROM);
  166.         FSReadStream(&cardFile, nLBA, pDVDROM);//linrc rename.20041205
  167.     } else
  168. #endif
  169.     {
  170. ran_read(pDVDROM, pFsJpeg->gifsMSFDVDRom, pFsJpeg->gifsDVDRomSize);
  171.     }
  172. // read DVD_AUDIO key file, Robert 030820
  173. #ifdef DVD_AUDIO
  174. if (g_nAKeyFileLoc != 0)
  175. {
  176. ran_read(pKeyFile, g_nAKeyFileLoc, 2048); // robert 2004/02/18, read 2048 bytes only to identify file header
  177. }
  178. #endif
  179.     //Calculate CheckSum
  180.     {
  181.         BYTE    *p, bl, bh;
  182.         UINT32  *pSum, iSum = 0, iNext = 0;
  183.         UINT32  iIndex = 0x4f;
  184.         //we store check in 0x20th byte
  185.         pSum = (UINT32 *)(pDVDROM + 0x20);
  186.         //printf("Origional checksum=%08xn", *pSum);
  187.         //from 0x50th byte to caculate checksum
  188.         p = (BYTE *)(pDVDROM + 0x50);
  189.         while (iIndex < pFsJpeg->gifsDVDRomSize)
  190.         {
  191.             bl = *p++;
  192.             iIndex++;
  193.             
  194.             if (iIndex < pFsJpeg->gifsDVDRomSize)
  195.             {
  196.                 bh = *p++;
  197.                 iIndex++;
  198.             }
  199.             else
  200.             {
  201.                 bl = 0;
  202.                 bh = 0;
  203.             }
  204.             iSum = iSum + iNext;
  205.             iNext = (unsigned int)bh * 256U + (unsigned int)bl;
  206.         }
  207.         iNext &= 0xFF;
  208.         iSum += iNext;
  209.         //printf("Read checksum=%08xn", iSum);
  210.         
  211.         
  212.         if (*pSum != iSum)
  213.         {
  214.             //printf("Checksum Errorn");
  215.             return -1;
  216.         }
  217.     }
  218.     
  219.     #ifdef UPGRADE_TRAYOUT
  220.             ircmd_trayout();
  221.             delay_srv_10ms(500);
  222.             trayout_flag = 0;
  223.     #endif
  224. #ifdef DVD_AUDIO
  225. if (g_nAKeyFileLoc != 0)
  226. {
  227. BYTE buf[10];
  228. // check key numbers
  229. nKeyAmount = getUINT32(pKeyFile + 5);
  230. nKeySize = getUINT32(pKeyFile + 9);
  231. if (nKeyAmount > 99999) // max key counts up to 99999
  232. nKeyAmount = 99999;
  233. //psprintf(buf, "%d %d", nKeyAmount, nKeySize);
  234. //osd_DrawString(23, 3, buf, 2, 6);
  235. psprintf(buf, "ENTER 0~%d:", nKeyAmount);
  236. osd_DrawString(8, 6, buf, 2, 6);
  237. // show a region to enter number
  238. psprintf(buf, "%d", b4);
  239. osd_DrawString(23, 6, buf, 2, 5);
  240. psprintf(buf, "%d", b3);
  241. osd_DrawString(24, 6, buf, 2, 4);
  242. psprintf(buf, "%d", b2);
  243. osd_DrawString(25, 6, buf, 2, 4);
  244. psprintf(buf, "%d", b1);
  245. osd_DrawString(26, 6, buf, 2, 4);
  246. psprintf(buf, "%d", b0);
  247. osd_DrawString(27, 6, buf, 2, 4);
  248. }
  249. #endif
  250. #ifdef QSI_PLATFORM
  251. #ifdef QSI_SUPPORT_QSIVER_INFO_WHEN_UPGRADE
  252.     psprintf(buf," OLD VER: %s%s",QSI_MASTER_VER,QSI_SLAVE_VER);
  253.     osd_DrawString(4, 5, buf, 2, 6);
  254.     
  255.     if (IsOSDChinese())
  256.         #ifdef USE_KOREAN_OSD       //clead korean 2003-10-23 
  257.         psprintf(buf, " %s%s %s", &_OsdMessegeFont1[osd_font_mode][STR_OS_UPGRADE_TO][0], strVersion, Ch_question);
  258.         #else
  259.         psprintf(buf, " %s%s%s %s", &_OsdMessegeFont1[osd_font_mode][STR_OS_UPGRADE_TO][0], strVersion, Ch_ban, Ch_question);
  260.         #endif
  261.     else
  262.         psprintf(buf, " %s%s %s", &_OsdMessegeFont1[osd_font_mode][STR_OS_UPGRADE_TO][0], strVersion, Ch_question);
  263.     
  264.     len = strlen(buf);
  265.     
  266.     //osd_DrawString(6, 5, buf, 2, 6); //2:font color, 6:background color
  267.     osd_DrawString(4, 6, buf, 2, 6); //2:font color, 6:background color
  268. #else
  269.     if (IsOSDChinese())
  270.         #ifdef USE_KOREAN_OSD //clead korean 2003-10-23 
  271.         psprintf(buf, "%s%s%s", &_OsdMessegeFont1[osd_font_mode][STR_OS_UPGRADE_TO][0], strVersion, Ch_question);
  272.         #else
  273.         psprintf(buf, "%s%s%s%s", &_OsdMessegeFont1[osd_font_mode][STR_OS_UPGRADE_TO][0], strVersion, Ch_ban, Ch_question);
  274.         #endif
  275.     else
  276.         psprintf(buf, "%s%s%s", &_OsdMessegeFont1[osd_font_mode][STR_OS_UPGRADE_TO][0], strVersion, Ch_question);
  277.     len = strlen(buf);
  278.     
  279.     //osd_DrawString(6, 5, buf, 2, 6); //2:font color, 6:background color
  280.     osd_DrawString(4, 5, buf, 2, 6); //2:font color, 6:background color
  281. #endif    //#ifdef QSI_SUPPORT_QSIVER_INFO_WHEN_UPGRADE
  282. #else
  283.     if (IsOSDChinese())
  284.         #ifdef USE_KOREAN_OSD       //clead korean 2003-10-23 
  285.         psprintf(buf, "%s%s%s", &_OsdMessegeFont1[osd_font_mode][STR_OS_UPGRADE_TO][0], strVersion, Ch_question);
  286.         #else
  287.         psprintf(buf, "%s%s%s%s", &_OsdMessegeFont1[osd_font_mode][STR_OS_UPGRADE_TO][0], strVersion, Ch_ban, Ch_question);
  288.         #endif
  289.     else
  290.         psprintf(buf, "%s%s%s", &_OsdMessegeFont1[osd_font_mode][STR_OS_UPGRADE_TO][0], strVersion, Ch_question);
  291.     len = strlen(buf);
  292.     
  293.     //osd_DrawString(6, 5, buf, 2, 6); //2:font color, 6:background color
  294.     osd_DrawString(4, 5, buf, 2, 6); //2:font color, 6:background color
  295. #endif  //#ifdef QSI_PLATFORM
  296.     //Draw O-X selection
  297.     DrawOSD_XO(1);
  298.     set_rtc_val(0);
  299.     iCount = COUNTDOWN_MAX;
  300.     FSNav_UpgradeCountDown(iCount);
  301.     
  302.     do
  303.     {
  304.         UINT32  rx;
  305.         UINT32  iTime;
  306. #ifndef OLD_VFD_DRV
  307.         UINT32  nVFDkey = 0;
  308. //nVFDkey = CheckVFDkey();
  309. #endif
  310.         iTime = get_rtc_val();
  311.         
  312.         #ifdef SUPPORT_SPI
  313.         if(!(iTime%50))
  314.           polling_spi();
  315.         #endif
  316.         iTime = COUNTDOWN_MAX - (iTime/100);
  317.         if (iCount==0) {
  318.             if (bOK == 1)   bOK=2;
  319.             break;
  320.         } else {
  321.             if (iTime != iCount) {
  322.                 iCount = iTime;
  323.                 FSNav_UpgradeCountDown(iCount);
  324.             }
  325.         }
  326.         extern UINT16 GetIRCode();  // 2004/10/01 yltseng, move to ir_parser.c GetIRCode()
  327.         rx = GetIRCode();
  328.         if( rx != IR_CODE_MAX_NUM )
  329.         {            
  330.             if (rx == IRC_LEFT)
  331.             {
  332.                 if (bOK == 1)
  333.                 {
  334.                     bOK = 0;
  335.                     DrawOSD_XO(0);
  336.                     set_rtc_val(0);
  337.                     iCount = COUNTDOWN_MAX;
  338.                     FSNav_UpgradeCountDown(iCount);
  339.                 }
  340.             }
  341.             else if (rx == IRC_RIGHT)
  342.             {
  343.                 if (bOK == 0)
  344.                 {
  345.                     bOK = 1;
  346.                     DrawOSD_XO(1);
  347.                     set_rtc_val(0);
  348.                     iCount = COUNTDOWN_MAX;
  349.                     FSNav_UpgradeCountDown(iCount);
  350.                 }
  351.             }
  352. #ifdef DVD_AUDIO
  353.             else if ((rx == IRC_0) || (rx == IRC_1) || (rx == IRC_2) ||
  354.  (rx == IRC_3) || (rx == IRC_4) || (rx == IRC_5) ||
  355.  (rx == IRC_6) || (rx == IRC_7) || (rx == IRC_8) ||
  356.  (rx == IRC_9))
  357.             {
  358. set_rtc_val(0);
  359. iCount = COUNTDOWN_MAX;
  360. FSNav_UpgradeCountDown(iCount);
  361. if (g_nAKeyFileLoc != 0)
  362. {
  363. BYTE bVal;
  364. bVal = rx - IRC_0;
  365. psprintf(buf, "%d", bVal);
  366. osd_DrawString(23 + nPos, 6, buf, 2, 4);
  367. // write to nPos position
  368. switch (nPos)
  369. {
  370. case 0: 
  371. b0 = bVal;
  372. psprintf(buf, "%d", b1);
  373. nPos = 1;
  374. break;
  375. case 1:
  376. b1 = bVal;
  377. psprintf(buf, "%d", b2);
  378. nPos = 2;
  379. break;
  380. case 2:
  381. b2 = bVal;
  382. psprintf(buf, "%d", b3);
  383. nPos = 3;
  384. break;
  385. case 3:
  386. b3 = bVal;
  387. psprintf(buf, "%d", b4);
  388. nPos = 4;
  389. break;
  390. case 4:
  391. b4 = bVal;
  392. psprintf(buf, "%d", b0);
  393. nPos = 0;
  394. break;
  395. }
  396. osd_DrawString(23 + nPos, 6, buf, 2, 5);
  397. }
  398.             }
  399. #endif
  400.             else if ((rx == IRC_SELECT) || (rx == IRC_PLAY_SELECT))
  401.             {
  402.                 if (bOK == 1)
  403.                 {
  404. #ifdef DVD_AUDIO
  405. if (g_nAKeyFileLoc != 0)
  406. {
  407. // get user selected number
  408. nEnterNum = 10000 * b0 + 1000 * b1 + 100 * b2 + 10 * b3 + b4;
  409. if (nEnterNum > nKeyAmount)
  410. {
  411. b4 = b3 = b2 = b1 = b0 = 0;
  412. nPos = 0;
  413. // show a region to enter number
  414. psprintf(buf, "%d", b4);
  415. osd_DrawString(23, 6, buf, 2, 5);
  416. psprintf(buf, "%d", b3);
  417. osd_DrawString(24, 6, buf, 2, 4);
  418. psprintf(buf, "%d", b2);
  419. osd_DrawString(25, 6, buf, 2, 4);
  420. psprintf(buf, "%d", b1);
  421. osd_DrawString(26, 6, buf, 2, 4);
  422. psprintf(buf, "%d", b0);
  423. osd_DrawString(27, 6, buf, 2, 4);
  424. }
  425. else
  426. {
  427. bOK = 2;
  428. }
  429. }
  430. else
  431. bOK = 2;
  432. #else
  433. bOK = 2;
  434. #endif
  435.                 }
  436. if (bOK == 0)
  437. break;
  438.             }
  439.         } //end of if (rx & IR_RDY)
  440. #ifndef OLD_VFD_DRV     // 2004/10/14 yltseng
  441.         if (nVFDkey != IR_CODE_MAX_NUM)
  442.         {
  443.             if (nVFDkey == IRC_LEFT)
  444.             {
  445.                 if (bOK == 1)
  446.                 {
  447.                     bOK = 0;
  448.                     DrawOSD_XO(0);
  449.                 }
  450.             }
  451.             else if (nVFDkey == IRC_RIGHT)
  452.             {
  453.                 if (bOK == 0)
  454.                 {
  455.                     bOK = 1;
  456.                     DrawOSD_XO(1);
  457.                 }
  458.             }
  459.             else if ((nVFDkey == IRC_PLAY) || (nVFDkey == IRC_PAUSEPLAY))
  460.             {
  461.                 if (bOK == 1)
  462.                 {
  463. #ifdef DVD_AUDIO
  464. if (g_nAKeyFileLoc != 0)
  465. {
  466. // get user selected number
  467. nEnterNum = 10000 * b0 + 1000 * b1 + 100 * b2 + 10 * b3 + b4;
  468. if (nEnterNum > nKeyAmount)
  469. {
  470. b4 = b3 = b2 = b1 = b0 = 0;
  471. // show a region to enter number
  472. psprintf(buf, "%d", b4);
  473. osd_DrawString(23, 6, buf, 2, 5);
  474. psprintf(buf, "%d", b3);
  475. osd_DrawString(24, 6, buf, 2, 4);
  476. psprintf(buf, "%d", b2);
  477. osd_DrawString(25, 6, buf, 2, 4);
  478. psprintf(buf, "%d", b1);
  479. osd_DrawString(26, 6, buf, 2, 4);
  480. psprintf(buf, "%d", b0);
  481. osd_DrawString(27, 6, buf, 2, 4);
  482. }
  483. else
  484. {
  485. bOK = 2;
  486. }
  487. }
  488. else
  489. bOK = 2;
  490. #else
  491. bOK = 2;
  492. #endif
  493.                 }
  494. if (bOK == 0)
  495. break;
  496.             }
  497.         }
  498. #endif//#ifndef OLD_VFD_DRV     // 2004/10/01 yltseng
  499.     } while (bOK != 2);
  500.     if (bOK == 2)
  501.     {        
  502.         //write system image to flash
  503.         osd_init_setup();
  504.         
  505.         if (IsOSDChinese())
  506.             psprintf(buf, "         %s           ", &_OsdMessegeFont1[osd_font_mode][STR_OS_SMART_UPGRADE][0]);
  507.         else
  508.             psprintf(buf, "        %s       ", &_OsdMessegeFont1[osd_font_mode][STR_OS_SMART_UPGRADE][0]);
  509.         len = strlen(buf);
  510.         osd_draw_rect(4*16, 3*26, 28*16, 7*26, 6);
  511.         //top
  512.         osd_DrawLine(4*16, 3*26, 4*16+28*16, 3*26, 2, 1);
  513.         //left
  514.         osd_DrawLine(4*16-2, 3*26, 4*16-2, 3*26+7*26, 2, 1);
  515.         //bottom
  516.         osd_DrawLine(4*16, 3*26+7*26, 4*16+28*16, 3*26+7*26, 11, 1);
  517.         //right
  518.         osd_DrawLine(4*16+28*16, 3*26, 4*16+7*26, 3*26+28*16, 11, 1);
  519.         osd_DrawString(4, 3, buf, 2, 6); //2:font color, 6:background color
  520.         //psprintf(buf, "%s...", &_OsdMessegeFont1[STR_OS_UPGRADING][osd_font_mode][0]);
  521.         psprintf(buf, "%s...", &_OsdMessegeFont1[osd_font_mode][STR_OS_UPGRADING][0]);
  522.         osd_DrawString(6, 5, buf, 2, 6); //2:font color, 6:background color
  523.         //psprintf(buf, "%s", &_OsdMessegeFont1[STR_OS_NOT_POWEROFF][osd_font_mode][0]);
  524.         psprintf(buf, "%s", &_OsdMessegeFont1[osd_font_mode][STR_OS_NOT_POWEROFF][0]);
  525.         osd_DrawString(6, 6, buf, 2, 5); //2:font color, 6:background color
  526.         
  527.     #ifdef PORTABLE_DVD         
  528.         osd_DrawString(6, 7, "DISC CAN BE REMOVED", 2, 4);
  529.     #endif
  530.               
  531. #ifdef DVD_AUDIO
  532. // copy key data to pDVDROM
  533. if ((g_nAKeyFileLoc != 0) && (nEnterNum > 0))
  534. {
  535. //psprintf(buf, "%d ", nEnterNum);
  536. //osd_DrawString(27, 3, buf, 2, 6);
  537. UINT32 nSelectedSector, nOffset;
  538. nSelectedSector = 13 + nKeySize * (nEnterNum - 1);
  539. nOffset = (nSelectedSector & 0x7ff);
  540. nSelectedSector >>= 11;
  541. g_nAKeyFileLoc = addmsf(g_nAKeyFileLoc, nSelectedSector);
  542. ran_read(pKeyFile, g_nAKeyFileLoc, nKeySize + 2048);
  543. *((BYTE*)(pDVDROM + 0x100)) = 0x44;
  544. *((BYTE*)(pDVDROM + 0x101)) = 0x45;
  545. *((BYTE*)(pDVDROM + 0x102)) = 0x56;
  546. *((BYTE*)(pDVDROM + 0x103)) = 0x4B;
  547. memcpy((BYTE*)(pDVDROM + 0x104), (BYTE*)(pKeyFile + nOffset), nKeySize);
  548. }
  549. #endif                
  550.         
  551.         FlashEraseUpgrade(pDVDROM, pFsJpeg->gifsDVDRomSize);
  552.         
  553.         ircmd_callback_check = fs_callback_check;
  554.         //while (1);
  555.     }
  556. #if defined(SUPPORT_CARD_STORAGE) || defined(SUPPORT_USB)||defined(SPHE8202_CARD_STORAGE)
  557.     watchdog_onoff(1);   //fengjl add 2004-05-20 09:39  for usb upgrade
  558. #endif
  559.     return iRes;
  560. }
  561. void FSNav_GetRomVersion(BYTE* strVersion)//jhuang 2004/9/3 11:29