www.pudn.com > sunplus_mp3LOGO.rar > sysmain2.c


/* 
** FILE 
** sysmain2.c 
** 
** DESCRIPTION 
** Main entry of DVD system firmware 
** 
** Maintain by terry , 2003.03.07 
** 
*/ 
#include "sysmain2_h.h" 
#include "gpio.h" 
#include "user_init.h" 
#include "kinf.h" 
#include "sinf.h" 
#include "user_if.h" 
#include "timer.h" 
#ifdef POWER_ON_MUTE_MIC   //axel 2004/2/26 04:10pm mute mic during initialization 
#include "dsp3_if.h" 
#endif 
#include "mp3_logo.h" 
 
#ifdef TP6317_PANNEL   //yaowh add 04-10-25 
   extern BYTE TP6317_Power ;   //flag 
#endif 
 
#ifdef SPHE1000 
 
#ifdef  DVB1000_NON_OS 
#include "TunerDrv.h"   //maoyong 2004-9-27 16:58 
#include "sp_dtv.h" 
#endif //DVB1000_NON_OS 
 
//#define TEST_DVD 
#define LINUX_USER_LOGO     //MIKEY 2004.07.01 
#endif //SPHE1000 
 
#ifdef LINUX_USER_LOGO  //MIKEY 2004.07.01 
UINT8 f_check_user_logo=0; 
UINT8 *user_logo_rom_addr=(UINT8 *)0x88080000; 
UINT8 *user_logo_ram_addr=(UINT8 *)0x804e0000; 
int user_logo_ram_size=(128*1024); 
#define USER_LOGO_ROM_ADDR  (user_logo_rom_addr) 
#define USER_LOGO_RAM_ADDR  (user_logo_ram_addr) 
#define USER_LOGO_RAM_SIZE  (user_logo_ram_size) 
#endif 
 
#if 1//def TEST_SERVO//nono 2004-3-30 19:13 
#include "ircode.h" 
#endif 
#include "srv_test.c" 
extern UINT8 volume_value; 
 
#ifdef SUPPORT_RECEIVER     //benson  2004/03/01 
#include "dsp3_if.h" 
#endif 
 
#ifdef SUPPORT_APOGEE_AMP 
#include "ddx8000.h" 
#endif 
 
#include "auddrv.h" //2004AUDDRV oliver 20041004 for using audio driver purpose 
#ifdef SUPPORT_SPDIF_IN 
#include "audif.h" 
#endif 
 
#ifdef SUPPORT_WMA           
#include "asf_if.h" 
#endif 
 
//jslin //for QSI PIPO  //20040901 
#ifdef QSI_SHOW_ERR_RATE 
#include "uart.h" 
#endif 
 
#ifdef DVB1000_OSD_MENU     //Maoyong 2004-10-12 11:28 
#include "dvbmenu.h" 
#endif 
 
//========================= 
 
#if defined(SUPPORT_WMA) || defined(SUPPORT_MP4) 
extern UINT32 nGotoPck; 
#endif 
 
//Maoyong 2004.03.05, move some resume relative declare/def to "rsm_util.h" 
#ifdef  CHECK_RECORD_DISK_PARENT_LVL    //Maoyong 2004.03.04 
extern BYTE CheckDiscParentLvl(void);  
#endif 
extern BYTE CheckLoadRsmInfo(void);  
extern void RecordRsmPlay(void); 
 
#if defined(AUDIO_2CH_5_1CH)&&defined(SUPPORT_PROLOGIC_II)//axel modified 2004/3/16 10:53am zhaoyanhua add 2003-12-17 9:47 
extern int setup_IsSpkDownmixOff(void);//setup_tab.c 
extern void AudioSet2chOutput(void);//setup_tab.c 
#endif 
 
#ifdef  DYNAMIC_SPECTRUM //zhaoyanhua add 03-11-6 15:26 
extern void Show3dspectrum(void);  
#endif 
 
#ifdef USER_MPEG_LOGO 
extern UINT8 Is_User_Mpeg_Logo(); 
#endif 
 
 
#ifdef CORTROL_VCD_ONF 
extern int setup_IsVCD_OFF(); 
#endif 
 
#if defined(SUPPORT_CARD_STORAGE)||defined(SUPPORT_USB)||defined(SPHE8202_CARD_STORAGE) 
extern BYTE IsCardMediaExist(void); 
extern void SwitchMedia(BYTE direction); 
#endif 
 
#ifdef  SUPPORT_REP_READ 
#include "read.h" 
#endif 
 
#ifdef PROVIEW_GPIO_KEY 
void set_proview_gpio_key(void); 
#endif 
void system_check_media_switch(void); 
void system_check_source_switch(void);// for QSI disc\card switch   //added by JS   //20040727 
 
 
#ifdef PMP_DVD //wthsin, 2004/11/9 07:19 
 UINT8 PMP_ENABLE=0; 
 extern void pc_usb_access_mode(); 
#endif //#ifdef PMP_DVD  
 
#ifdef SUPPORT_Auo_Digital_panel 
extern void init_auo_digital_panel(void); 
#endif 
 
#if defined(SUPPORT_USB)||defined(SPHE8202_CARD_STORAGE)  //modefied by wangwei,2004-11-19 17:31(for storage no files screen refresh problem) 
extern UINT8 MediaIsEmpty; 
#define MEDIA_EMPTY 1 
#define MEDIA_NOT_EMPTY 0 
#endif 
 
//===================================================== 
//* debug option 
//===================================================== 
#ifndef DVDRELEASE 
//#define SYSMAIN2_DBG        1 
//#define MONE_LOGO 
#endif 
 
#undef FORCE_SKIP_VCD_MOSAIC//nono 4-6-9 0:35 
 
#ifndef SYSMAIN2_DBG 
#undef printf 
#undef print_block 
#define printf(f, a...) do {} while (0) 
#define print_block(x,y) do {} while (0) 
#endif 
 
//===================================================== 
//* var. and extern function decalare 
//===================================================== 
#include "sysmain2.h" 
 
extern UINT8 Subp_stream_Chg(UINT8,int); 
extern UINT16 Audio_stream_Chg_SVCD(UINT8); 
//2004AUDDRV extern void init_mp3(void); 
extern void do_mp3(void); 
extern int AUDIF_Set_Play();//2004AUDDRV AudioSetPlay();  //huziqin 2004-2-26 
extern int AUDIF_Set_Stop();//2004AUDDRV AudioSetStop();  //change type to int 
extern void RsmInfo2Flash(int); 
extern void LoadRsmInfo(void); 
extern void LoadModual(UINT16); 
extern void RS42Init(); 
extern void RS2420Init(); 
extern void DisplayScreenSaver(); 
#ifdef DVD_SERVO 
extern UINT8 cServoWrongDataPass; 
#endif 
void SetDeInterlace(BYTE nVal); 
extern void setup_SetSPDIFConfig();//nono 3-8-18 15:45 
#ifdef CD_PLAYER    //liweihua 2003-9-3     
extern void show_cdplayer(void); 
#endif 
#if defined(CF_CARD_WRITE) || defined(SPHE8202_FAT_Write_Function)//|| defined(WRITE_USB) 
extern BYTE read_card_sign,flag_cf2cd,flag_cd2cf;          //xulf 
#endif 
#ifdef VIRTUAL_KEYBOARD//liweihua 2003-9-18 
extern BYTE KeyID; 
void hl_keyboard_button(BYTE SelectID); 
void osd_draw_virtual_keyboard(int xStart, int yStart,BYTE r); 
#endif 
 
#ifdef LOGO_PLAY_MP3 
 int playindex; 
#endif  
 
BYTE logo_play_mp3_flag; 
extern UINT8 power_on_mute;//terry 20030805 
extern void set_video_default_offset(void);//wanghaoying 2003-8-12 20:21 
extern void save_cmp_disc_info(UINT32 info1);//wanghaoying 2003-8-12 20:22 
 
#ifdef SUPPORT_HDD_ACCESS 
    UINT8 f_force_browser=0; 
    UINT8 f_browser_mode=0; 
#endif 
 
#ifdef USE_PIN31_CONTROL_POWER_LED      //gerry,2004-3-9 19:41 
int gbm_gpio_led_flag; 
#endif//USE_PIN31_CONTROL_POWER_LED 
 
void show_osd_disc_type(void) 
{//terry,2003/12/29 08:25PM 
    #if defined(JUST_SHOW_CD_TYPE)||defined(NOSHOW_CDROM_WHEN_DISP)        //Not show CD Icon for NINTAUS Maoyong 2004.02.12 
    #ifdef NOSHOW_CDROM_WHEN_DISP//nono 2004-6-15 0:02 
    if(cd_type_loaded == CDROM) 
    #else 
    if(cd_type_loaded == CDDA) 
    #endif 
    { 
        osd_tog_region(REGION1, OSD_OFF);        
        return; 
    } 
    #endif 
     
    #ifdef GBM_DVD 
    PrintOsdMsg(osd_cd_id[cd_type_loaded],REGION1,2,0); 
    #elif defined(DVD_AUDIO)    // alan, 2003/8/15 04:23PM, to distinguish DVD-VIDEO or DVD-AUDIO 
 
#ifdef SHOW_DVD_ROM//NONO 4-2-10 19:08   
    if( (is_svo_dvd())&&(cd_type_loaded==CDROM) )  
        { 
            OSD1000ISP_STATUS(OSDISP_TYPE_DVDROM, OSDIR_CDTYPE); 
 
            psprintf(RegionValStr[REGION1], "DVDROM"); 
            PrintOsdMsg(STR_OS_SPACE,REGION1, 1, 1); 
        } 
    else  
#endif//SHOW_DVD_ROM 
     
    if (cd_type_loaded==CDDVD)   
    { 
        if (dAMG_LSN==0) 
            psprintf(RegionValStr[REGION1], "DVD-VIDEO");      
        else 
            psprintf(RegionValStr[REGION1], "DVD-AUDIO"); 
 
        OSD1000ISP_STATUS(OSDISP_TYPE_DVD, OSDIR_CDTYPE); 
 
        PrintOsdMsg(STR_OS_SPACE,REGION1, 1, 1); 
    } else { 
#ifdef DVD_SERVO 
        if ((cd_type_loaded == CDVCD10) && (is_svo_dvd())) 
#else 
        if (cd_type_loaded == CDVCD10) 
#endif 
{ 
            OSD1000ISP_STATUS(OSDISP_TYPE_DVD, OSDIR_CDTYPE); 
 
            PrintOsdMsg(osd_cd_id[CDDVD],REGION1,1,0); 
} 
        else 
        { 
            OSD1000ISP_STATUS(cd_type_loaded, OSDIR_CDTYPE); 
 
            PrintOsdMsg(osd_cd_id[cd_type_loaded],REGION1,1,0);         
        } 
    } 
    #elif defined (FENGKAI_DVD) 
    ///////clead 2003-8-27 17:31 
    printf("**--- cd_type_loaded:%d  bDiscType:%d ---**\n",cd_type_loaded,bDiscType); 
     
    if((cd_type_loaded==CDSVCD)&&(bDiscType == CD_CVD)) 
    { 
        OSD1000ISP_STATUS(OSDISP_TYPE_CVD, OSDIR_CDTYPE); 
 
        psprintf(RegionValStr[REGION1], "CVD"); 
        PrintOsdMsg(STR_OS_SPACE,REGION1, 1, 1); 
    }else  
    { 
        OSD1000ISP_STATUS(cd_type_loaded, OSDIR_CDTYPE); 
 
        PrintOsdMsg(osd_cd_id[cd_type_loaded],REGION1,1,0); 
    } 
    #elif defined(SKYWORTH_DVD) 
        if(cd_type_loaded!=CDROM) 
        { 
            OSD1000ISP_STATUS(cd_type_loaded, OSDIR_CDTYPE); 
 
            PrintOsdMsg(osd_cd_id[cd_type_loaded],REGION1,1,0); 
        } 
        else 
        PrintOsdMsg(STR_OS_SPACE,REGION1,1,0); 
 
    #else//#ifdef GBM_DVD 
    #ifdef DVD_SERVO 
        if ((cd_type_loaded == CDVCD10) && (is_svo_dvd())) 
    #else 
        if (cd_type_loaded == CDVCD10) 
    #endif 
        { 
            OSD1000ISP_STATUS(OSDISP_TYPE_DVD, OSDIR_CDTYPE); 
 
            PrintOsdMsg(osd_cd_id[CDDVD],REGION1,1,0); 
        } 
        else 
        { 
            OSD1000ISP_STATUS(cd_type_loaded, OSDIR_CDTYPE); 
 
            PrintOsdMsg(osd_cd_id[cd_type_loaded],REGION1,1,0);         
        } 
 
    #endif//#ifdef GBM_DVD 
} 
//*******init ce2746 dac ******** wangap 2004/4/21 
#ifdef CE2746 
#define Chip_addr 0x6a      
#define Register_addr 0x00   
void init_ce2746()   
{ 
   int I2c_data1=0x01,I2c_data2=0x80; 
   WriteI2c(Chip_addr,Register_addr,I2c_data1,1); 
   delay_1ms(10); 
   WriteI2c(Chip_addr,Register_addr+1,I2c_data2,1); 
} 
#endif 
 
 
//===================================================== 
//* function decalare 
//===================================================== 
void InitVar(void) 
{ 
    //init pe engine 
    pe_run = 0; 
//    dVts_iso9600_addr = 0;//terry,2003/8/6 04:01PM 
#ifdef TP6317_PANNEL   //yaowh add  04-10-25 
    TP6317_Power = 0 ; 
#endif 
    PE_ClearNav(); 
    mpeg_audio=0; 
    dspWatchDog=DSP_WD_INIT; 
     
#ifdef BAD_DISC_AUTO_STOP //terry,2003/8/31 12:00AM                    
    bad_disc_auto_stop=0; 
#endif  
 
    //init navigation 
    cd_subtype = CDROM_UNSUPPORT; 
    bDiscType=CDUNKNOWN; 
    still_timer=0; 
 
    #ifdef SUPPORT_MIX_MP3_CDDA 
    mp3_cd_end_trk = 0; 
    #endif 
    play_dir = 0; 
 
    Mp3ReadFinish=0;//mp3 ........ 
    logo_play_mp3_flag=1; 
    fore_disp_time=-1; 
 
    jpg_slide_time = JPEG_SLIDE_TIME;//jpeg .......... wanghaoying 2003-8-26 20:21 
     
#ifdef NO_BLACK_for_PIC_CD     
    pic_cd_first_play = 0; 
#endif     
 
    bPbcOff=0; //vcd .......... 
    cd_trk_now=0; 
    cd_trk_hi=0xff; 
    cd_trk_lo_now=0; 
    cd_trk_lo=0; 
 
    dVMG_LSN = 0; //dvd....... 
    HL_exist=0; 
    read_sector=0; 
    dvd_error=0; 
    min_astn_id=0;//terry,2003/12/15 02:33PM 
    dvd_karaoke_mode = 0; //terry,2004/2/16 11:11AM 
 
    #ifdef DVD_AUDIO 
    dAMG_LSN = 0; 
    #endif 
 
    #ifdef TUNR_OFF_PARENTAL_LVL 
    bTurnOffParentalLVL=0; //terry,2002/9/20 11:40PM 
    #endif 
 
    #ifdef JUST_SHOW_CD_TYPE    //Maoyong 2004.02.26 
    track_play_diff_time = 0; 
    #endif 
     
#ifdef DVD_SEQ_PLAY 
#ifdef AUTO_PLAY 
    extern BYTE auto_play_on(); 
    if (auto_play_on()) 
        dvd_menu_play = 0; 
    else 
        dvd_menu_play = 1; 
#else 
    dvd_menu_play = 0; 
#endif 
#endif 
 
    // 2004/07/16 yltseng 
    wb_tag_init();           
     
    //init UI 
    init_ir_num(); 
    goto_active=0; 
    mp3_user_select=0; 
    pFsJpeg->iso9660_file_cnt = 0; 
    disp_trk_now = 0; 
    Mp3_kbitrate=0; 
    bIntro=0; 
    //keep_cmd_code=0; 
    keep_cmd_code=IR_CODE_MAX_NUM;//2004-3-30 19:14 
    disc_st_time=0; 
 
    #if defined(IR_PLAY_RESUME) && defined(POWER_RESUME)  //yw 021003 
    power_resumeflag = 0; 
    #endif 
     
    #ifdef SUPPORT_REP_READ    //Maoyong 2004.06.03 
    InitRead(); 
    #endif 
     
    #ifdef  SUPPORT_BOOK 
    init_book(); 
    #endif 
     
    goto_time = 0;//4-4-13 16:22 
         
#ifdef OP_UI//zhaoyanhua 2004-5-24 17:35 
    prog_cnt = 0; 
#endif 
    //nono move from ap_mian(): SYSTEM_READ_TITTLE.2004-2-27 12:00 
    coding_mode_now=AUDIF_CODING_MODE_NONE;//wangfeng 2003-12-19 17:44 
 
#ifdef USE_PIN31_CONTROL_POWER_LED      //gerry,2004-3-9 19:42 
    gbm_gpio_led_flag=0; 
#endif//USE_PIN31_CONTROL_POWER_LED 
 
    nOldFst = 0;          //Maoyong 2004.05.25 move from labif.c 
 
#ifdef SUPPORT_WMA        //Maoyong 2004.05.31 for WMA      
    asf_resume_pck = 0; 
#endif 
 
#if defined(SUPPORT_WMA) || defined(SUPPORT_MP4) 
    nGotoPck = 0; 
#endif 
 
    //FS SWD 
    #ifdef SUPPORT_PLAY_SWD 
        START_POLLING_SWD = 0; 
    #endif 
 
    //OSD 16bit direct color 
    #ifdef SUPPORT_PS2 
        OSD_buffer_16bit = 0; 
    #endif 
     
    //initiate PS2 mouse  
    #ifdef SUPPORT_PS2 
        START_POLLING_PS2 = 0;  //hold polling 
        mouse_pos_x = 180; 
        mouse_pos_y = 120; 
        mouse_btn_status = 0x0; 
        PS2_INIT_DONE = 0x0; 
    #endif 
 
 
//============================================== 
//for QSI source switch     //added by JS   //20040726 
#if defined(QSI_PORTABLE_DVD) && defined(SUPPORT_CARD_STORAGE) 
    #ifdef SUPPORT_QSI_SOURCE_SWITCH 
        source_type_now = source_disc; 
        source_type_old = source_disc; 
    #endif 
#endif   
//============================================== 
} 
 
extern  char    _stextf[]; 
extern  char    _text_drv[], _text_drv_dvd[], _text_drv_ap[], _text_drv_iop[], _text_other[], _text_drv_cdrom[]; 
extern  char    _text_drv_srvdp[], _text_drv_ap2[], _text_drv_free[]; 
 
#include "kernel.h" 
 
#define CUSTM_LOGO 0 
#define SETUP_LOGO 1 
UINT8 logo_type=CUSTM_LOGO; 
extern const unsigned char Setup_Logo[]; 
// 
//  show logo 
// 
//  Terry,2003/9/13 12:20AM 
//  integration mpeg logo/new style setup logo function 
void    ShowTitle() 
{ 
    BYTE *p; 
    UINT32  unOffset; 
#ifdef NEW_STYLE_SETUP    //terry,2004/2/17 11:09AM 
    UINT8 setup; 
#endif   
 
    #ifdef MONE_LOGO 
    printf("logo in\n"); 
    #endif 
     
#ifdef LINUX_USER_LOGO  //MIKEY 2004.07.01 
        if(f_check_user_logo==0) { 
            printf("INFO: f_check_user_logo USER_LOGO_ROM_ADDR=[%x]\n", USER_LOGO_ROM_ADDR); 
            f_check_user_logo=1; 
            p = (BYTE *) USER_LOGO_ROM_ADDR; 
            memset((BYTE *) USER_LOGO_RAM_ADDR, 0, USER_LOGO_RAM_SIZE); 
            if(*(p+0x80)=='T' && *(p+0x81)=='M') { 
                //printf("INFO: cp USER_LOGO_RAM_ADDR=[%x] USER_LOGO_RAM_SIZE=[%x]\n", USER_LOGO_ROM_ADDR, USER_LOGO_RAM_SIZE); 
                memcpyS((BYTE *) USER_LOGO_RAM_ADDR, (BYTE *) USER_LOGO_ROM_ADDR, USER_LOGO_RAM_SIZE); 
                //printf("INFO: cp USER_LOGO_RAM_ADDR=[%x] USER_LOGO_RAM_SIZE=[%x] OK!!\n", USER_LOGO_ROM_ADDR, USER_LOGO_RAM_SIZE); 
                f_check_user_logo=2; 
            } 
        } 
#endif 
 
    LoadModual(MODUAL_MPEG); 
    show_logo=1; 
    Abort(); 
    unOffset = ((UINT32 *)_stextf)[MODUAL_ROM3]; 
     
    #ifdef NEW_STYLE_SETUP 
    #ifdef SDRAM_16Mb_Mode//zhaoyanhua add 2003-8-7 10:12 
    if((prog_state == 4 )||(prog_state == 5)) 
    #else 
    if((setup_state == 1 )||(setup_state == 3)) 
    #endif//SDRAM_16Mb_Mode 
       setup =1; 
    else 
       setup =0; 
#endif//NEW_STYLE_SETUP 
     
    set_vpp_disp_size(0,0); 
#ifdef NEW_STYLE_SETUP 
    if(setup) 
    { 
        set_video_aspect(); 
            p = Setup_Logo; 
        logo_type = SETUP_LOGO; 
            printf("==============>display setup logo\n");   
    } 
    else  
#endif 
#ifdef USER_MPEG_LOGO 
    // alan, 2003/9/24 11:33AM 
    if(Is_User_Mpeg_Logo()) p=(UINT8 *)(ROM_BASE_UNCACHED+768*1024); //Flash offset addr 0x90000(for 080) 
    else  
#endif 
    { 
#ifdef LINUX_USER_LOGO  //MIKEY 2004.07.01 
        p = (BYTE *) USER_LOGO_RAM_ADDR; 
        if(*(p+0x80)=='T' && *(p+0x81)=='M') 
            f_check_user_logo=3; 
        else 
#endif 
        p = DVDTitle;  
       printf("Manufacture Logo\n"); 
     
    #ifdef DOUBLE_LOGO 
       if(OsdIsEnglish())  p=DVDTitle1; 
    #endif 
 
#ifdef CD_PLAYER    //liweihua 2003-9-3 
       if((cd_type_loaded==CDDA)&&(play_state!=VCD_STATE_OPEN)) 
          p=CDPlayerTitle; 
#endif 
    }  
 
 
    PlayRomSlide(p); 
 
#ifdef LOGO_STARTUP_VPP_NOW 
    startup_vpp_now();//nono 4-6-10 0:25 for ZOOMING IN,show logo startup_vpp_now. 
#endif//LOGO_STARTUP_VPP_NOW 
 
    MediaMainLoop(); 
    PlayRomSlide(p); 
    MediaMainLoop(); 
 
#ifdef NEW_STYLE_SETUP  // alan, 2003/8/13 11:44PM 
    if(setup) 
    {//terry,0813 
            if(getVPP_TVsystem()) set_vpp_disp_size(720,540); 
            else set_vpp_disp_size(0,0); 
    } 
#endif 
 
    #ifdef NEW_STYLE_SETUP 
    if(logo_type == CUSTM_LOGO) 
    #endif 
    tv_setup_misc(0); 
         
    reset_sup(); 
    Sync(); 
 
    show_logo=0; 
 
    set_video_default_offset(); 
    startup_vpp(); 
     
    #ifdef NEW_STYLE_SETUP 
    if(setup==0) 
        logo_type = CUSTM_LOGO; 
    #endif//#ifdef NEW_STYLE_SETUP     
     
    #ifdef MONE_LOGO 
    printf("logo out\n"); 
    #endif 
	 
	//gy 08/11 for MPE_LOGO 
	Clear_Mp3_Logo_End(); 
} 
 
 
#ifdef LOGO_PLAY_MP3 
 
void Show_Logo_Play_MP3() 
{ 
    extern const unsigned char LOGO_MP3[];   
	    extern const unsigned char LOGO_MP31[];   
 
    int a;   
static BYTE  iCount; 
    /*Play Background MP3*/ 
    
    #define PlayLen 3  
  
    //int b=sizeof(LOGO_MP3); 
    //printf("MP3 size=%d\n",b);  
      
    for(a=0;a=0)||(DiscType == CDDVD) ) 
            #else 
            if(Res>=0) 
            #endif 
            { 
                Res=check_cdtype(); 
#ifdef SYSMAIN2_DBG 
                if (cd_type_loaded != CDDVD) { 
                    printf("check_cdtype:after disc_init, DVD xxx, dVMG_LSN=%x\n", dVMG_LSN); 
                } else { 
                    printf("check_cdtype:after disc_init, DVD ooo, dVMG_LSN=%x\n", dVMG_LSN); 
                } 
 
                printf("check_cdtype:Res=%d, cd_type_loaded=%x\n", Res, cd_type_loaded); 
#endif//SYSMAIN2_DBG 
                disc_time=M2I(gettrkmsf_leadout()); //terry 891004 
                if(cd_type_loaded!=CDDVD)//terry,2003/8/7 03:57PM 
                save_cmp_disc_info(disc_time); 
            } 
        }else 
        { 
            Res=0; 
        } 
    } 
 
    if (is_user_opened()) 
        Res =  -1; 
#ifdef SUPPORT_CD_TEXT 
    else 
        read_cd_text(); 
#endif 
 
#ifdef DIP_CFG_ENABLE 
   SetDeInterlace(dip_sel); 
#else 
   dip_enable = 0; 
#endif 
 
    if( (cd_type_loaded==CDVCD10)&&( (cd_trk_hi<1)||(cd_trk_hi>100) ) ) 
    {//terrry,2003/12/30 11:00AM 
        printf("toc err\n"); 
        cd_trk_hi = 1; 
        cd_type_loaded=CDROM; 
    } 
 
 
    return Res; 
} 
 
 
//detect tray function subroutin 
UINT8 is_user_opened(void) 
{ 
    //printf("no_disk_cnt:%x s:%x p:%x\n",no_disk_cnt,system_state,play_state); 
 
    if( (no_disk_cnt==DETECT_TIMES)||(system_state==SYSTEM_POWER) ) 
        return TRUE; 
    else 
    { 
        return FALSE; 
    } 
} 
 
 
UINT8 is_test_unit(void)//2001/10/23 
{ 
    //if(no_disk_cnt!=DETECT_TIMES&&no_disk_cnt!=0)     
    //if((no_disk_cnt!=DETECT_TIMES&&no_disk_cnt!=0 )||(atapi_p_mechanism_status()==2))      //he qiang,4-2-11 1:07,avoid displaying "CLOSE" when should show "LOAD" on VFD when a poor disc is put in.             
    //if((no_disk_cnt!=DETECT_TIMES&&no_disk_cnt!=0 )||(atapi_p_mechanism_status()==2)||(atapi_p_mechanism_status()==1))      //he qiang,4-2-11 10:23,avoid displaying "CLOSE" when should show "LOAD" on VFD when a poor disc is put in.             
    if((no_disk_cnt!=DETECT_TIMES&&no_disk_cnt!=0 )||(atapi_p_mechanism_status()==ATAPI_DOOR_CLOSE)||(atapi_p_mechanism_status()==ATAPI_ERROR))      //he qiang,4-2-11 10:25,avoid displaying "CLOSE" when should show "LOAD" on VFD when a poor disc is put in.  
        return TRUE; 
    else 
        return FALSE; 
} 
 
 
 
void close_tray_init(void) 
{ 
 
    #ifdef WHEN_READTOC_AUTO_EXIT_SETUPPAGE 
        if((full_scrn&SETUP) || (full_scrn&CUSTM)) 
        { 
            ExitSetupPage(1);   //dingzhy for tonic auto close setup menu 2004-2-5 2:40 
        } 
    #endif 
 
    OSD1000ISP_STATUS(OSDISP_READ, OSDIR_GLOBAL); 
 
    PrintOsdMsg(STR_OS_READ,REGION1,0,0); 
    sys_cmd=(CMD_FUNC|CMD_FUNC_CLOSE); 
    CDSetStop(); 
    play_state=VCD_STATE_CLOSE; 
    no_disk_cnt=DETECT_TIMES; 
 
#if defined(SUPPORT_USB)||defined(SPHE8202_CARD_STORAGE)//liweihua add 20031223 
    if(!(card_plug_state&USER_DO_PLUG_OUT)){ 
        printf("ENTER COLSE TRAY INIT!\n"); 
        card_plug_state |= USER_DO_PLUG_IN; 
    } 
#endif 
} 
 
//BYTE gbCloseTrayFail = 0;//terry 2003-7-31 0:55 
#if DISC_SYSTEM==DISC_SYSTEM_ATAPI 
void test_atapi_drv_rdy(void) 
{ 
    int test_ready_ret; 
    UINT8 door; 
 
    test_ready_ret=atapi_p_test_unit_ready();//start up loader 
    delay_srv_10ms(15); // 
 
    door = atapi_p_mechanism_status(); 
    if( door==ATAPI_DOOR_CLOSE ) 
    {//tray close 
        #ifdef SYSMAIN2_DBG 
        printf("cnt: %x\n",no_disk_cnt); 
        #endif 
 
        if(no_disk_cnt==0) 
        { 
            close_tray_init(); 
        }else if(no_disk_cnt==1) 
        { 
            #ifdef HOBO_DVD //Jefftest 20020930 
            if (test_ready_ret != 2) 
                play_state=VCD_STATE_CLOSE; 
            else 
            #endif 
                play_state=VCD_STATE_IDLE; 
 
            system_state=SYSTEM_NODISC; 
        }else 
        {//test 
            no_disk_cnt--; 
            if(test_ready_ret==0)//unit is ready or not 
            { 
                // set feature 
                #ifdef SYSMAIN2_DBG 
                printf("system read title\n"); 
                #endif 
 
                #ifdef TONIC_DVD 
                if((full_scrn&SETUP) || (full_scrn&CUSTM)) 
                { 
                ExitSetupPage(1);   //dingzhy for tonic auto close setup menu 2004-2-5 2:40 
                } 
                #endif 
 
                OSD1000ISP_STATUS(OSDISP_READ, OSDIR_GLOBAL); 
 
                PrintOsdMsg(STR_OS_READ,REGION1,0,0); 
                 
                drv_do_set_features(); 
                 
                if(!is_user_opened()) 
                { 
                    system_state=SYSTEM_READ_TITLE; 
                    no_disk_cnt=0; 
                     
                    extern UINT8 old_cd_type;   //2004/10/01 yltseng, set this value in order to let hostx_servo_buf_init() really reconfig/clear data 
                    old_cd_type=0xff; 
                } 
 
            } 
            else if((test_ready_ret==ATAPI_NO_MEDIA)&&(no_disk_cnt>1)&&!CDOpened())//NO disc 
            { 
                if(no_disk_cnt>NO_DISC_TIMES) 
                { 
                    no_disk_cnt-=NO_DISC_TIMES; 
                }else { 
                    no_disk_cnt=1; 
                } 
            } 
         } 
    }else if( door==ATAPI_DOOR_CLOSE_ERR )//terry 2003-7-31 0:55 
    { 
//         printf("~~~~~~~~~~~open~~~~~~~~~~:%x\n",door); 
//         gbCloseTrayFail=0;//terry 2003-7-31 0:55 
         ircmd_trayout(); 
    }else 
    { 
         
        no_disk_cnt=0; 
        #ifdef NO_DVD_SERVO //ycwen 2004/08/10  
            system_state=SYSTEM_NODISC;             
        #else 
            no_disk_cnt=0; 
        #endif 
    } //if(atapi_p_mechanism_status()==2) 
} 
 
#elif   DISC_SYSTEM==DISC_SYSTEM_AVB 
void test_avb_drv_rdy(void) 
{ 
    int test_ready_ret; 
 
 
    if(is_tray_close()) 
    {//tray close 
#ifdef SYSMAIN2_DBG 
        printf("cnt: %x\n",no_disk_cnt); 
#endif 
 
        test_ready_ret=is_ready2play(); 
        if(no_disk_cnt==0) 
        {//read disc 
                close_tray_init(); 
        }else if(no_disk_cnt==1) 
        {// 
                play_state=VCD_STATE_IDLE; 
                system_state=SYSTEM_NODISC; 
        }else 
        {//test 
                no_disk_cnt--; 
                if(test_ready_ret)//unit is ready or not 
                { 
                        no_disk_cnt=0; 
                        // set feature 
                        #ifdef SYSMAIN2_DBG 
                        printf("system read title\n"); 
                        #endif 
 
                        OSD1000ISP_STATUS(OSDISP_READ, OSDIR_GLOBAL); 
 
                        PrintOsdMsg(STR_OS_READ,REGION1,0,0); 
                        system_state=SYSTEM_READ_TITLE; 
                } 
                else if( is_no_disc()&&(no_disk_cnt>1)&&!CDOpened() )//NO disc 
                { 
                    if(no_disk_cnt>NO_DISC_TIMES) 
                        no_disk_cnt-=NO_DISC_TIMES; 
                    else 
                        no_disk_cnt=1; 
                } 
         } 
    }else 
        no_disk_cnt=0; 
 
} 
#endif 
//terry,2003/8/14 12:22AM 
void power_on_gpio_demute(int demute) 
{ 
    if( power_on_mute&&((system_state==SYSTEM_NODISC)||(demute)) ) 
    {//terry,2003/8/14 12:10AM 
      if(system_state==SYSTEM_NODISC) AUDIF_Init_CDDA();//2004AUDDRV init_cdda();//terry,for bbk 
         
      power_on_mute=0; 
         
      #ifdef POWER_ON_MUTE_MIC   //axel 2004/2/26 04:10pm mute mic during initialization 
      AUDIF_Set_MICVol(mic_volume);//2004AUDDRV AudioSetMICVol(mic_volume); 
      #endif 
         
      GPIO_DEMUTE(); 
     setup_SetSPDIFConfig();//2003-8-15 20:56 for avoid SPDIF noise when power on. 
    } 
} 
 
/* 
CheckRecordKey 
CheckDiscParentLvl 
Maoyong 2004.03.05 move to IR_VFD\rsm_util.h 
 */ 
 
// 
// interface setup 
// 
#if defined(SPHE8202_CARD_STORAGE) 
//#define  SPHE8202_216PIN  //wthsin,    2004/2/23 10:49am   
//#define  SPHE8202_256PIN  //wthsin,    2004/2/23 10:49am   
extern void Card_gpio_init(); 
void setup_8202_card_storage_interface() 
{ 
   #if defined(CARD_SETUP_TYPE_1)||defined(CARD_SETUP_TYPE_2)  
    regs0->sft_cfg7 = regs0->sft_cfg7 | 0x2;    // Set FM 256-PIN package 
    regs0->fm_gpio_mode = 8;                    // Set FM GPIO TABLE to ALL IN ONE case 
    regs0->fm_gpio_len  = 12                    // Set FMGPIO_B[41:0] turn on 
                        |  (0xf << 4);          // Set FMGPIO_B[41:0] enable    
   #elif defined(CARD_SETUP_TYPE_3) ||defined(CARD_SETUP_TYPE_5)  
    regs0->sft_cfg7 = regs0->sft_cfg7 & (~0x2);    // Set FM 256-PIN package 
    regs0->fm_gpio_len  = 11                    // Set FMGPIO_B[26:0] turn on 
                        |  (0xf << 4);          // Set FMGPIO_B[26:0] enable   
   #elif defined(CARD_SETUP_TYPE_4)  
    regs0->sft_cfg7 = regs0->sft_cfg7 & (~0x2);    // Set FM 256-PIN package 
    regs0->fm_gpio_len  = 3                    // Set FMGPIO_B[5:0] turn on 
                        |  (0x1 << 4);          // Set FMGPIO_B[5:0] enable     
    //regs0->gpio_mode_B=0;                                        
   #endif                                           
    Card_gpio_init();    //wthsin,  2004/3/24 04:55pm 
} 
#endif 
 
#if defined(SUPPORT_CARD_STORAGE) 
void setup_card_storage_interface() 
{ 
    if(regs0->stamp==1)               //Version-B ,wthsin 10/18 
        regs0->pcmcia_iorw_wait = 0x2222;   // Must be 0x2222 in 8200B, setup and hold time for both ior, iow is 0xf, 
     else 
        regs0->pcmcia_iorw_wait = 0xffff;   
    regs0->wait_cyc1_0 = regs0->wait_cyc1_0 | 0x3f00; // maximum cs timing for R_CS2_B 
    regs0->wait_cyc3_2 = regs0->wait_cyc3_2 | 0x003f; // maximum cs timing for R_CS3_B 
} 
#endif 
 
 
#if defined(SUPPORT_USB)&&defined(HOST_SL811HS) //wthsin, 2004/1/12 01:36pm 
void setup_usbhost_sl811hs_interface() 
{  
    regs0->oe_wait_cyc1_0=regs0->oe_wait_cyc1_0|0x3200; 
    regs0->we_wait_cyc1_0=regs0->we_wait_cyc1_0|0x3200; 
    regs0->wait_cyc1_0 = regs0->wait_cyc1_0 | 0x1f00; // maximum cs timing for R_CS2_B 
    regs0->rom1_base = 0x100;       // rom2 n*64k-base ,pcmcia 
    regs0->rom2_base = 0x160;       // rom2 n*64k-base ,pcmcia 
    regs0->rom3_base = 0x200;       // rom3 n*64k-base ,pcmcia 
    regs0->rom_config = 0x7000;   // pcmcia,rom2,3 
} 
#endif 
 
 
// 
// setup supporting for extra interfaces 
// 
void 
init_extra_interface() //terry,2004/2/18 10:12AM 
{ 
    #if defined(SPHE8202_CARD_STORAGE) 
        setup_8202_card_storage_interface(); 
    #elif defined(SUPPORT_CARD_STORAGE) 
        setup_card_storage_interface(); 
    #elif  defined(SUPPORT_USB)&&defined(HOST_SL811HS) //wthsin, 2004/1/12 01:36pm 
        setup_usbhost_sl811hs_interface(); 
    #endif  
} 
 
 
 
 
void dvd_startup(void)//20040316 
{ 
    disc_time = 0xefff;//terry 891004 
 
    #ifdef TOP_DOOR_LOADER 
        #ifdef SUNPLUS_8202P_DEMOBOARD 
        regs0->sft_cfg4 &= ~((0x03)<<2);    //Enable GPIO2,3 For COVER & TFT SW 
        #endif 
        bDoorStatus = GPIO_GET_DOOR_STATUS(); 
        if (bDoorStatus==DOOR_OPEN) { 
            OSD1000ISP_STATUS(OSDISP_OC_OPEN, OSDIR_OPEN); 
 
            PrintOsdMsg(STR_OS_OPEN,REGION1,0,0); 
            //SERVO_LDOff();//maybe use it. 
            //SERVO_STSledHome();//maybe use it. 
            ircmd_trayout(); 
            play_state=VCD_STATE_OPEN; 
        } else { 
            ircmd_trayin(); 
            play_state=VCD_STATE_CLOSE; 
        } 
    #else 
         
        #if !defined(SPHE1000) 
        PrintOsdMsg(STR_OS_READ,REGION1,0,0); 
        #endif 
         
        play_state=VCD_STATE_CLOSE; 
    #endif //#ifdef TOP_DOOR_LOADER 
 
    #ifdef  REPEAT_RESET_IOP //zhaoyanhua add 2004-2-13 13:59  //fengjl edit 2004-02-27 15:49 
    //only for DSS 555(VFD Driver: NEC 16312) 
    //This vfd is very strange! When power switch between on and off  
    //more than 20 times, it will not show VFD informaiton again! 
    //we found it that the data which IOP send to 16312 is abnormal, 
    //so reset IOP here.  
    reset_iop(); 
    reset_ir(); 
    reset_vfd(); 
    #endif //ifdef REPEAT_RESET_IOP 
 
    #ifdef CE2746 
    init_ce2746();  
    #endif 
    // 
    // CONTROL FLOW 
    // 
    AVD_ResetMediaStatus(); 
    ClearCommand(); 
 
    no_disk_cnt=DETECT_TIMES; 
 
    #ifdef DVB1000_NON_OS 
    system_state=SYSTEM_TS; 
    #else 
    system_state=SYSTEM_OPEN; 
    #endif 
 
    //play_state=VCD_STATE_CLOSE; 
    sys_cmd=CMD_FUNC|CMD_FUNC_CLOSE; 
//    init_audio_dsp_coding_mode(); 
 
    power_on=2; 
 
 
} 
 
 
 
 
/* 
** FUNCTION 
** main() 
** 
** DESCRIPTION 
** main function...  what else? 
*/ 
#ifdef SUPPORT_RECEIVER 
#include "sysmain_receiver.c"  //huziqin 2004-3-12 
#endif 
 
 
#ifdef SUPPORT_POWER_OFF_CLOCK_FUNC  //xyy 2004-10-11 17:18 
#include "clock_func.c" 
#endif 
 
#ifdef DVB_SETUP 
 UINT8 eBuffer[128]; 
void SP_SetVolume(UINT8 volume); 
#endif    
 
#ifdef QSI_SHOW_ERR_RATE 
#include "sysmain2_QSI.c" 
#endif 
 
#ifdef  AUTO_ADJUST_TV_TYPE  //lijd 2004-9-15 13:27 
extern BYTE  Adjust_TV_type ; 
#endif 
 
 
#ifdef QSI_SUPPORT_SLOT_TEST 
extern  BYTE SERVO_GetRunInState(void); 
 
BYTE is_do_slot_test(void) 
{ 
    if(SERVO_GetRunInState()==PRODUCTION_RUNIN_ST_IS_SLOT_TEST) 
    { 
        return(1); 
    } 
    return(0); 
} 
#else 
#define is_do_slot_test()   0 
#endif 
 
void ap_main(void)  // benson update 2004/3/1 04:25¤U¤È 
{ 
#ifdef DVB_SETUP 
        UINT8 i; 
#endif     
 
    int Res,continue_run_nav,mode,cmd; 
    int test_ready_timer=DEV_RDY_TM; 
 
    #ifdef RECORD_PER_SECOND 
    resume_time_ourmind=0; 
    #endif 
 
    #ifdef LOGO_PLAY_MP3 
     BYTE old_system_state=0;  //for mp3 
     BYTE play_mp3_flag=0; 
     int mp3_count=0; 
    #endif 
 
#ifdef QSI_SUPPORT_SLOT_TEST //qsi: added by johnson 20040719 
    unsigned int slot_test_cnt=0; 
#endif 
 
    #ifdef SYSMAIN2_DBG 
    printf("----------------  AP main , in   ---------------\n"); 
    #endif 
 
    #ifdef NO_DVD_SERVO 
    servo_turn_off(); 
    #endif 
     
#ifdef SUPPORT_APOGEE_AMP  //huziqin 2004-2-26 
    //disable external amplifier 
    ddx_disableEPAD(); 
    //mute all channels 
    ddx_masterMute(1); 
    ddx_initialization(); 
    ddx_masterMute(0);   
    ddx_enableEPAD(); 
#endif 
 
#ifdef SUPPORT_POWER_OFF_CLOCK_FUNC//xyy 2004-10-12 
    Pcf8563Init(); 
#endif 
 
#ifdef SPHE1000 
    volume_init();  // barry move here        
 
    #ifdef DVB1000_NON_OS   //Maoyong 2004-9-27 16:57 
    tuner_init(); 
    FtaInit(); 
    #endif     
#endif 
    // 
    // set default audio coding-mode (download decoder) 
    delay_srv_10ms(30);//maybe we need more time,gerry,2004-4-15 13:53 
    AUDIF_Set_CodingMode(AUDIF_CODING_MODE_DEFAULT);//2004AUDDRV audif_set_coding_mode(AUDIF_CODING_MODE_DEFAULT); 
    #ifdef POWER_ON_MUTE_MIC   //axel 2004/2/26 04:10pm mute mic during initialization 
    AUDIF_Set_MICVol(0);//2004AUDDRV AudioSetMICVol(0); 
    #endif 
 
#ifdef  MIC_2CHANNEL        //gerry add it for setting mic vol,2004-7-6 9:34 
    #include "dsp3_if.h" 
    AUDIF_Set_MICVol2(setup_GetMICVol2()-2);//2004AUDDRV AudioSetMICVol_2(setup_GetMICVol2()-2); 
    AUDIF_Set_MICVol(setup_GetMICVol()-2);//2004AUDDRV AudioSetMICVol(setup_GetMICVol()-2); 
#endif 
 
    // 
    // initialize interfaces 
    init_extra_interface(); 
 
    //  
    // initialize servo 
    init_srv_test_mode();//terry,2003/9/10 12:17AM 
 
    // 
    // initialize hardware. 
    play_state=VCD_STATE_POWER; 
#ifndef SPHE1000 
    volume_init(); 
#endif 
 
    //include tuner/amp/mic 
    #include "sysmain2_inc.h" 
 
    // 
    // start OSD 
    // 
    #if SUPPORT_OSD 
     
    #ifdef  DYNAMIC_SPECTRUM    //zhaoyanhua add 2003-12-4 9:26 
    if(bEqDisplay) 
        Show3dspectrum(); 
    else 
    #endif//end DYNAMIC_SPECTRUM         
    osd_init(); 
 
    #ifdef OP_UI//zhaoyanhua add 2004-2-26 10:28     
    InitMainMenu(); 
    #endif//ifdef OP_UI 
 
    #endif 
 
    //had move to sysmain.c sleep_when_power_on(); Jeff mark 20040312 
    /* 
    #if defined(SLEEP_WHEN_POWER_ON) //20040206 
    { 
      volatile int *iMagic=(int *)(DATA_RAM_BASE|0x90); 
      if( *iMagic != 0x1234abcd) 
      { 
        ircmd_power(); 
      } 
     *iMagic=0;    
    } 
    #endif 
    */ 
// Simon:  Receiver-related code here 
// Receiver does not have to start in DVD mode 
#ifdef SUPPORT_RECEIVER 
 
 receiver_startup(); 
    #else 
 dvd_startup(); 
#endif 
 
 
/* 
    move to sysmain.c  
     //WSF ADD 2004-7-27 20:32  
    */ 
    #ifndef  AFTER_UPGRADE_TRAYOUT  
    #ifdef RESET_AFTER_UPGRADE 
    { 
        volatile int *iMagic = (int *)(DATA_RAM_BASE|0x80); 
        if (*iMagic == 0x1881) ircmd_trayout(); 
        *iMagic = 0; 
    } 
    #endif 
    #endif 
/*huziqin removed 2004-2-26*/ 
 
#ifdef GBM_DEFAULT_NTSC_CAPTION_OFF         //gerry,2004-2-13 14:18 
    tv_l21_enable(0); 
#endif//GBM_DEFAULT_NTSC_CAPTION_OFF 
 
    //#if defined(CARD_MASTER) && defined(SUPPORT_CARD_STORAGE) 
    //#include "sysmain2_car.h" 
    //power_on_init_car(); 
    //#endif 
 
    #ifdef SUPPORT_UART_COMMAND 
    Inform_MCUOK(); 
    #endif 
 
    #ifdef TONIC_DVD 
       ReadFromI2c(0xa0,0xff,&KeyLockStatus,1); 
    if(KeyLockStatus!=0&&KeyLockStatus!=1) 
    { 
        KeyLockStatus=0; 
        WriteToI2c(0xa0,0xff,&KeyLockStatus,1); 
    } 
     
    { 
        regs0->sft_cfg1  &=  ~(0x1<<  2);  //  CS3  as GPIO3| 
        GPIO_M_SET(36,1); 
        GPIO_E_SET(36,0); 
    } 
    #ifdef SUPPORT_VFD_SHOW_P_SCAN 
    vfd_show_p_scan(); 
    #endif 
    #endif//#ifdef TONIC_DVD 
 
 
#ifdef JPEG_EXP_RATIO//terry,2004/2/6 04:24PM 
    vpp_set_expansion_ratio(14*8); 
#endif 
#ifndef SUPPORT_EXT_MCU //xyy add 2004-11-17  
#ifdef SUPPORT_EXT_ADC//xyy 2004-4-12  
    GPIO_O_SET(EXT_ADC_RESET,1); 
#endif 
#endif 
//---------------------------------------- 
#ifdef DVB_SETUP 
for(i=0;i<128;i++)  eBuffer[i]=0xff; 
watchdog_onoff(0);//disable watchdog 
for(i=0;i<128;i++) 
 ReadFromI2c(0xa0, i, &eBuffer[i] ,1); 
watchdog_renew(0xffff);//reset watchdog 
watchdog_onoff(1);//enable watchdog 
#if 1         //set volume default   //wnzhang 
 volume_value=eBuffer[66]; 
 SP_SetVolume(eBuffer[66]);  
 #endif 
//ReadFromI2c(0xa0,0, eBuffer,128); 
//void SP_SetVolume(UINT8 volume) 
//volume_value=eBuffer[66]; 
//SP_SetVolume(eBuffer[66]); //set default volume 
#endif 
//---------------------------------------- 
    #ifdef PMP_DVD  //wthsin add for PMP  2004/11/8 
      if(GPIO_I_GET(PC_USB_CONNECT_PIN))       
      { 
        system_state= SYSTEM_PC_USB_MODE; 
      }   
      PMP_ENABLE=1; 
    #endif //#ifdef PMP_DVD  
     
    #ifdef SUPPORT_Auo_Digital_panel 
    init_auo_digital_panel(); 
    #endif 
     
    while (1) 
    { 
#ifdef QSI_SUPPORT_SLOT_TEST 
        if(is_do_slot_test()) 
        { 
            if(play_state==VCD_STATE_READTOC) 
            { 
                slot_test_cnt++; 
                psprintf(linebuf,"SLOT-IN/OUT TEST: %d", slot_test_cnt);            
                strcpy(RegionValStr[REGION2], linebuf); 
                PrintOsdMsg(STR_OS_SPACE, REGION2, 0, 1); 
                printf("ap_main>Eject disc! test cnt = %d\n",slot_test_cnt); 
                ircmd_trayout(); 
            } 
        } 
        else if(slot_test_cnt!=0) 
        { 
            slot_test_cnt=0; 
            ClearOsdMsg(REGION2); 
        } 
#endif 
        //printf("=====polling====\n"); 
        polling(); 
         
        #ifdef EASTWIN 
                regs0->sft_cfg3 |= ((0x01)<<1);    //Enable AUD0(GPIO53) fix the audio noise bug 
        #endif 
        //  
        test_mode_chk_close_tray();//terry,2003/9/10 12:52AM 
         
        #ifdef SLOT_IN_LOADER 
        if ((system_state >= SYSTEM_READ_TITLE)) // for slot-in loader 
        #elif defined(SDRAM_16Mb_Mode) 
        if ((system_state >= SYSTEM_READ_TITLE) || (play_state == VCD_STATE_CLOSE)||(full_scrn & SETUP)||(full_scrn & CUSTM)||(full_scrn & PROGRAM) ) 
        #else 
        if ((system_state >= SYSTEM_READ_TITLE) || (play_state == VCD_STATE_CLOSE)||(full_scrn & SETUP)||(full_scrn & CUSTM) 
            #ifdef SUPPORT_FUNCTION_MENU 
            ||(full_scrn & SETUP_PLUS) 
            #endif  
           ) 
        #endif 
        { 
            safe_srn_off(); 
        } 
        else 
        { 
            #ifdef SDRAM_16Mb_Mode 
            if (cd_type_loaded==CDDVD) 
            { 
                psprintf(RegionValStr[REGION1], ""); 
                PrintOsdMsg(STR_OS_SPACE,REGION1,1,0); 
            } 
            #endif 
 
            safe_srn_on(); 
        } 
 
        #ifdef SYSMAIN2_DBG 
        if(old_state!=system_state) 
        { 
            old_state=system_state; 
            #ifndef IR_TOOL 
            printf("[%s,in][play_state:%x][sys_cmd:%x][cd_type:%x]\n",system_state_str[system_state],play_state,sys_cmd,cd_type_loaded); 
        #endif 
        } 
        #endif 
 
        #ifdef LOGO_PLAY_MP3  
         if(old_system_state!=system_state) 
         { 
          if(((old_system_state==SYSTEM_NODISC) &&(system_state==SYSTEM_OPEN))||((old_system_state==SYSTEM_IDLE) &&(system_state==SYSTEM_OPEN))||((old_system_state==SYSTEM_STOP)&&(system_state==SYSTEM_OPEN)))    
                  play_mp3_flag=0;   
             
          old_system_state=system_state; 
          if((system_state==SYSTEM_NODISC)||(system_state==SYSTEM_OPEN)||(system_state==SYSTEM_STOP)) 
           {                       
            if(!play_mp3_flag) 
            { 
            //printf("MP3 INIT!---------\n");            
            AUDIF_Init_Audio();//2004AUDDRV init_audio(); 
            AUDIF_Init_MP3();//2004AUDDRV init_mp3(); 
            AUDIF_Set_Play();//2004AUDDRV AudioSetPlay();  
            playindex=0; 
            mp3_count=0; 
            play_mp3_flag=1; 
            } 
           }         
         } 
         else  if((system_state==SYSTEM_NODISC)||(system_state==SYSTEM_OPEN)||(system_state==SYSTEM_STOP)) 
          { 
          //gy 08/11 for MPE_LOGO 
            if((mp3_count>=500)&&(!(Is_Mp3_Logo_End()))) 
                    {    
                    //printf("Show_Logo_Play_MP3\n");    
                        Show_Logo_Play_MP3(); 
                        mp3_count=0; 
                    } 
            else mp3_count++;  
          } 
         #endif 
    #ifdef SUPPORT_RECEIVER //huziqin 2004-3-12;move to sysmain_receiver.c 
        receiver_check_system_state(); 
    #endif 
          
    #ifdef SUPPORT_POWER_OFF_CLOCK_FUNC  //xyy 2004-10-11 
        check_system_clock_func(); 
    #endif      
     
        switch(system_state) 
        { 
         #ifdef PMP_DVD  //wthsin add for PMP  2004/11/8 
            case SYSTEM_PC_USB_MODE: 
                  pc_usb_access_mode();         
            break; 
         #endif //#ifdef PMP_DVD  
            case SYSTEM_POWER: 
        /*removed by huziqin 2004-2-26*/ 
 
            break; 
 
            case SYSTEM_NODISC: 
 
                #ifdef DVB1000_NON_OS  //Maoyong 2004-10-25 14:32 
                if(DVD2DVB_switch_flag) 
                {    
                    DVD2DVB_switch_flag = 0; 
                    system_state = SYSTEM_TS; 
                    break; 
                } 
                #endif   
                 
                // remain=0;   //wsf  2004-7-27 13:12 
                #ifdef OP_UI//zhaoyanhua add 2004-2-26 10:57                         
                system_state = SYSTEM_SETTING; 
         
                #elif defined(GBM_SLOT_IN_LOADER_TEST)          //gerry,2004-2-27 19:43 
                if(no_disk_cnt==1) 
                { 
                    no_disk_cnt=0; 
 
                    #ifdef POWER_RESUME //Jeff 20021022 
                    RsmInfo2Flash(1);//clear memory 
                    #endif 
                    ircmd_eject_toggle();                     
                } 
 
                #else//GBM_SLOT_IN_LOADER_TEST 
                if(no_disk_cnt==1) 
                { 
                    int id; 
 
                    if(play_state==VCD_STATE_IDLE) 
                    { 
                        OSD1000ISP_STATUS(OSDISP_NODISC, OSDIR_GLOBAL); 
 
                        id=STR_OS_NODISC; 
                    } 
                    else 
                    { 
                    #if defined(FUSS_DVD) || defined(HOBO_DVD) 
                        OSD1000ISP_STATUS(OSDISP_ERR_DISC, OSDIR_GLOBAL); 
 
                        id=STR_OS_ERR_DISC;//nono 2-4-22 13:26 for fuss 
                    #elif defined(CORTROL_VCD_ONF) //wangap add 2004/5/27 
                      if( (  
                                (bDiscType == CD_OKO) 
                                ||(cd_type_loaded==CDVCD20) 
                                ||(cd_type_loaded==CDVCD10) 
                                ||(cd_type_loaded==CDSVCD)  
                                ) 
                                &&(setup_IsVCD_OFF()) ) 
                            { 
                                OSD1000ISP_STATUS(OSDISP_ERR_DISC, OSDIR_GLOBAL); 
 
                                id=STR_OS_ERR_DISC;                  
                                play_state=VCD_STATE_IDLE; 
                            }                         
                    #else 
 
                        OSD1000ISP_STATUS(OSDISP_STOP, OSDIR_STOP); 
 
                        id=STR_OS_STOP; 
                    #endif 
                    }   
 
                     #ifdef SLOT_IN_LOADER//terry,2004/4/7 06:20PM 
                     OSD1000ISP_STATUS(OSDISP_STOP, OSDIR_STOP); 
 
                     id=STR_OS_NODISC; 
                     ircmd_eject_toggle(); 
                     #endif 
                      
                     #ifdef SHOW_SPECIAL_DISC_TYPE 
                     if(read_disc_state == 0xf0) 
                     { 
                       read_disc_state = 0x0f;  
                       id = STR_OS_ERR_DISC; 
                     } 
                     #endif 
                         
                     #if defined(QSI_PORTABLE_DVD) && defined(QSI_PLATFORM) //qsi: merge by johnson 20040712 
                     id=STR_OS_NODISC; 
                     ircmd_eject_toggle(); 
                     //qsi: modify by sharon 
                     #endif 
                      
                #ifdef ALWAYS_DISPLAY_NODISK     //wthsin 03/08/15; for bbk,hq,3-11-22 14:13 
                      PrintOsdMsg(id,REGION1,0,0); 
                #elif !defined(KENLOON_DVD) //yaowh add 04-07-30 
                    PrintOsdMsg(id,REGION1,1,0); 
                #endif  
                     
                    no_disk_cnt=0; 
 
                    #ifdef POWER_RESUME //Jeff 20021022 
                    RsmInfo2Flash(1);//clear memory 
                    #endif 
 
                    srv_test_mode1_no_disc();//terry,2003/9/10 12:52AM 
                } 
        #endif//#ifdef OP_UI//zhaoyanhua add 2004-2-26 10:57 
                 
                system_check_media_switch();    //Maoyong 2004.05.14 
 
                // probe if there is disc in loader 
                if (sys_cmd==(CMD_FUNC|CMD_FUNC_OPEN)) 
                { 
                    system_state=SYSTEM_OPEN; 
                } 
            break; 
 
#if defined(SPHE1000) && !defined(TEST_DVD) && !defined(DVB1000_NON_OS)    //Maoyong added 2004-9-27 9:04 
            case SYSTEM_DVD: 
#else 
            case SYSTEM_OPEN: 
#endif             
                system_check_media_switch();   //Maoyong 2004.05.14 
                #ifdef PROVIEW_GPIO_KEY 
                set_proview_gpio_key(void); 
                #endif 
                
                //system test drv ready 
#if defined(SUPPORT_CARD_STORAGE)||defined(SUPPORT_USB)||defined(SPHE8202_CARD_STORAGE) 
                if(media_type == MEDIA_CD)  
#endif                
                { 
                    if(safe_on) 
                    test_ready_timer=test_ready_timer%DEV_RDY_TM_IN_SCRNER; 
 
                    if(--test_ready_timer<0) 
                    { 
                        test_ready_timer=DEV_RDY_TM; 
                        test_drv_rdy(); 
                        power_on=0; 
                        power_on_gpio_demute(0); 
                    } 
                    srv_test_mode1_open(); 
                } 
 
#ifdef SUPPORT_POWER_OFF_CLOCK_FUNC  //xyy 2004-10-11 
                if(switch_to_clockmode == 1) 
                { 
                    system_state = SYSTEM_MODE_CLOCK_FUNC;   
                } 
#endif 
 
// Simon 12-16-2003 
// This code is in both SYSTEM_STOP and SYSTEM_OPEN 
                #ifdef SUPPORT_RECEIVER 
                  if (switch_modes_now == 1) 
                  { 
                    system_state = SYSTEM_MODE_CHANGE; 
                  } 
                #endif 
#ifdef QSI_SHOW_ERR_RATE 
if(system_state != SYSTEM_OPEN) { 
    QSI_PIPO_pre_check(SYSTEM_OPEN); 
} 
#endif   
 
            break; 
 
            case SYSTEM_STOP: 
 
                state_stop_navigation(); 
                system_check_media_switch();    //Maoyong 2004.05.14 
 
 
#ifdef SUPPORT_POWER_OFF_CLOCK_FUNC  //xyy 2004-10-11 
                if(switch_to_clockmode == 1) 
                { 
                    system_state = SYSTEM_MODE_CLOCK_FUNC;   
                } 
#endif 
 
// Simon 12-16-2003 
// If this code isn't in SYSTEM_STOP, sometimes user will have to hit the button twice 
// before mode switch actually occurs (switching from DVD mode). 
// This occurs because there are cases when system doesn't properly go to 
// the OPEN state after ejecting (eg: ejecting right before VCD menu appears). 
                #ifdef SUPPORT_RECEIVER 
                  if (switch_modes_now == 1) 
                  { 
                    // Fix startup problem 
                    // Make sure loader is stopped before switching 
                    //while (play_state == VCD_STATE_POWER) 
                    //{ 
                    //  printf("PS %d\n", play_state); 
                    //  play_state = VCD_STATE_OPEN; 
                    //} 
                    system_state = SYSTEM_MODE_CHANGE; 
                  } 
                #endif 
                 
                system_check_source_switch();//for QSI disc/card switch //added by JS   //20040726 
         
            break; 
 
            case SYSTEM_READ_TITLE: 
                //printf("SYSTEM_READ_TITLE\n");  
#ifdef SETUP_IN_READ_STATE//terry,2003/9/15 06:22PM 
                if(full_scrn&SETUP) 
                   break; 
#endif           
                 
//JSlin //for QSI PIPO  //20040901 
#ifdef QSI_SHOW_ERR_RATE 
    psprintf(linebuf, "SYSTEM_READ_TITLE [in]\n"); 
    UART0_puts(linebuf); 
#endif   
//========================= 
                 
                #ifdef LOGO_PLAY_MP3  
                 play_mp3_flag=0; 
                #endif    
                //LoadModual(MODUAL_DVD);//terry,2004/2/6 04:23PM 
                InitVar(); 
 
                EnableBuffer( TRUE ); 
     
                // clear global variables, Robert 03/04/30 
                memset(pFsJpeg, 0, sizeof(FSJPEGDATA)); 
                LoadModual(MODUAL_CDROM); 
 
                sys_cmd=(CMD_FUNC|CMD_FUNC_CLOSE); // robert 020917 
 
                Res=ReadCDTitle(); 
 
                #ifdef DVD_SERVO 
                hostx_servo_buf_init();//correct servo buffer location 
                #endif 
 
                #ifdef SYSMAIN2_DBG 
                printf("read cd title leave\n"); 
                #endif 
 
                #if defined(CORTROL_VCD_ONF)      //wangap add for no support vcd 2004/5/27         
                        if( (  
                           (bDiscType == CD_OKO) 
                           ||(cd_type_loaded==CDVCD20) 
                           ||(cd_type_loaded==CDVCD10) 
                           ||(cd_type_loaded==CDSVCD)  
                          ) 
                          &&(setup_IsVCD_OFF()) ) 
                        {         
                             
                    Res=-2; 
                        } 
                #endif 
 
                switch(Res) 
                { 
                    default:/*play*/ 
                        t_disp = 0; 
                        remain= 0; 
                        if(!(bInitPlayTrk&0x01)) 
                        { 
            #ifdef OP_UI//zhaoyanhua add 2004-2-26 10:53                             
                            system_state = SYSTEM_SETTING; 
                            break; 
                        #else 
                            show_osd_disc_type();//terry,2003/12/29 08:25PM 
                            system_state=SYSTEM_SETUP_BROWSER; 
                    #endif//ifdef OP_UI 
                            //Jeff 20010816 
                            NP_SPSTN = 0xbf; 
                            Subp_stream_Chg(1,1); 
                            NP_ASTN = 0xf; 
                            Audio_stream_Chg_SVCD(1); 
 
                            //terry,2002/6/25 09:17PM 
                            if(cd_type_loaded==CDDVD) 
                            { 
                                memset(pDSV, 0,sizeof(DataSaved)); 
                                 #ifdef  AUTO_ADJUST_TV_TYPE                     
                                         Adjust_TV_type=1;                                                                     
                                 #endif   
                            }                      
                            //Maoyong 2004.03.04 23:12, move and make into functions for record resume 
                            if(!CheckLoadRsmInfo())   
                                break;  
                            LoadRsmInfo();                             
                            #ifdef  CHECK_RECORD_DISK_PARENT_LVL 
                            if(!CheckDiscParentLvl())                        
                                break; 
                            #endif                      
                            RecordRsmPlay();    //Maoyong 2004.03.04, do record resume play now                                          
                                   
                        }else //if(!(bInitPlayTrk&0x01)) 
                        { 
                            system_state=SYSTEM_FINISH; 
                            play_state=VCD_STATE_STOP; 
                            bInitPlayTrk=0; 
                            sys_cmd=0; 
                        } //if(!(bInitPlayTrk&0x01)) 
 
                    break; 
 
                    case -1:/*open*/ 
                    case -3:/*power off*/ 
                        system_state=SYSTEM_FINISH; 
 
                    break; 
                    case -2:/*no disc*/ 
                        no_disk_cnt=1; 
                        system_state=SYSTEM_NODISC; 
                        play_state=VCD_STATE_STOP; 
                         
                        #ifdef SHOW_SPECIAL_DISC_TYPE 
                        read_disc_state = 0xf0;  
                        #endif 
                         
                        //cd_func_stop(); 
 
                    break; 
                } //switch(Res) 
 
                // 2004/07/16 marked by yltseng 
                //EnableBuffer( FALSE ); 
                 
//JSlin //for QSI PIPO  //20040901 
#ifdef QSI_SHOW_ERR_RATE 
    QSI_PIPO_pre_check(SYSTEM_READ_TITLE); 
    //psprintf(linebuf, "next SYSTEM STATE: [%d]\n", system_state); 
    //UART0_puts(linebuf);           
    //psprintf(linebuf, "SYSTEM_READ_TITLE [out]\n"); 
    //UART0_puts(linebuf); 
#endif 
//========================= 
                 
            break; //case SYSTEM_READ_TITLE: 
 
#ifdef OP_UI//zhaoyanhua add 2004-2-26 10:24 
            //check if the disc is valid. 
            case SYSTEM_SETTING: 
                play_state = VCD_STATE_IDLE; 
                //play_state = VCD_STATE_WAITING_SET;//because when play_state ==READTOC, "play" is disable. 
                check_disc_valid(); 
                 
                if(SYSTEM_SETTING != system_state) 
                    break; 
#endif//ifdef OP_UI 
 
            // 
            // setup used browser. 
            // 
            case SYSTEM_SETUP_BROWSER: 
                #ifdef LOGO_PLAY_MP3  
                 play_mp3_flag=0;  
                #endif   
                #if defined(USE_GAMEPORT_TO_DISCLIGHT) 
                check_light_status(); 
                #endif 
 
#ifdef DVD_SERVO 
#ifdef CSWDP_0 
                    cServoWrongDataPass = 0; 
#else 
                cServoWrongDataPass = 1; 
#endif 
#endif 
 
#ifdef FORCE_SKIP_VCD_MOSAIC//nono 4-5-5 12:38 for hyoptics VCD mosaic issue. 
//#if 1//def  ERROR_CONCEALMENT 
                        //setup_error_mb_limit(4);//(ERROR_MB_LIMIT_NUM);        // ERROR_MB_LIMIT_NUM*16 MB default=4  
                        setup_error_concealment(0);//(ERROR_CONCEALMENT_MODE);  // detect error and skip 
//#endif////#if 1//def  ERROR_CONCEALMENT 
#endif//#ifdef FORCE_SKIP_VCD_MOSAIC 
 
 
                // jnable watchdog (default) 
                    watchdog_renew(0xffff); // reset watchdog 
                    watchdog_onoff(1);      // enable watchdog 
 
                // disable watchdog (default) 
 //               watchdog_onoff(0); 
 
                if(cd_type_loaded==CDDVD) 
                { 
#ifdef BAD_DISC_SEQ_PLAY   
                    bad_disc_seq_play = 1;//terry,2003/8/29 02:16AM 
#endif 
                     
#if 0//def CSWDP_0 
                    cServoWrongDataPass = 0; 
#endif 
 
//                    watchdog_renew(0xffff); // reset watchdog 
//                    watchdog_onoff(1);      // enable watchdog 
 
                    browser = dvd_navigation; 
                }else if(cd_type_loaded==CDROM) 
                { 
                #ifdef SUPPORT_OSDID3 
                    osd_init_OSDID3(); 
                #endif 
                #if defined(AUDIO_2CH_5_1CH)&&defined(SUPPORT_PROLOGIC_II)//axel modified 2004/3/16 10:53am zhaoyanhua add 2003-12-17 9:47 
                //if MP3/WMA/MPG, must turn off PROLOGIC II.                     
                    if(setup_IsSpkDownmixOff()) 
                        AudioSet2chOutput(); 
                #endif                       
                    // disable watchdog (default) 
                    watchdog_onoff(0); 
 
                     
                    bInitPlayTrk=0;/*jhuang 891005 add,MP3 ignore bInitPalyTrk while tray open*/ 
                    browser = read_iso9660; 
                    cd_trk_now = 1;// 2-6-13 23:40 
                }else if(cd_type_loaded==CDDA) 
                { 
 
                    #ifdef CD_PLAYER    //liweihua 2003-9-3   
                    ShowTitle(); 
                    ClearOsdMsg(3);  
                    show_cdplayer(); 
                    #ifdef VIRTUAL_KEYBOARD//liweihua 2003-9-18 
                        ClearOsdMsg(4); 
                    osd_draw_virtual_keyboard(0,0,4);    
                    hl_keyboard_button(KeyID); 
                    full_scrn |= KEYBOARD; 
                    #endif 
                    #endif 
 
                    // disable watchdog (default) 
                    watchdog_onoff(0); 
 
                    AUDIF_Init_CDDA();//2004AUDDRV init_cdda(); 
 
                    #ifdef SUPPORT_ECC 
                    RS42Init(); 
                    RS2420Init(); 
                    #endif 
 
                    cd_trk_lo_now   = cd_trk_lo; 
                    browser = v11_navigation; 
                }else 
                { 
                    //terry,2004/3/2 12:07PM  
                    //Maoyong, 2004/03/04 changed for VCD10 resume play of all resume definition  
                    #if defined(POWER_RESUME)|| defined(SAME_DISC_RESUME)||defined (RECORD_KEY)                              
                    if(resumeMSF) 
                    { 
                        goto_active=1;//terry,2004/3/2 11:59AM 
                        psd_st.psd_list_id = 0xffff; 
                    } 
                    #endif 
                     
                    #ifdef VCD_CDG_PLAY_CONTROL_BY_SETUPMENU    //linrc add 2004-11-4 20:19 
                    extern BYTE VcdControlFlag();              //when "MNP" what define in setupmenu is on  
		            if(VcdControlFlag())                      //VCD & CDG play one TRK in one time.... 
		            psd_st.psd_list_id = 0xffff; 
                    #endif 
                     
                    if (cd_type_loaded==CDVCD10)                     
                        psd_st.psd_list_id = 0xffff; 
 
 
                    AUDIF_Init_MP3();//2004AUDDRV init_mp3(); 
 
                    if(psd_st.psd_list_id == 0xffff) 
                        browser = v11_navigation; 
                    else 
                    { 
                        psd_st.psd_list_id = 0;  //PVD start entr 
                        browser   = psd_navigation; 
 
#ifdef FORCE_SKIP_VCD_MOSAIC//nono 4-5-5 12:38 for hyoptics VCD mosaic issue. 
//#if 1//def  ERROR_CONCEALMENT 
                        setup_error_mb_limit(2);//(ERROR_MB_LIMIT_NUM);        // ERROR_MB_LIMIT_NUM*16 MB default=4  
                        setup_error_concealment(0x03);//(ERROR_CONCEALMENT_MODE);  // detect error and skip 
//#endif////#if 1//def  ERROR_CONCEALMENT 
#endif//#ifdef FORCE_SKIP_VCD_MOSAIC 
 
                    } 
 
                    //terry,2002/9/6 12:01PM 
                    //Às¬ì,ªìÅÊ 
                    cd_trk_lo_now   = cd_trk_lo; 
 
                    #ifdef SUPPORT_HDD_ACCESS 
                    f_browser_mode=0; 
                    if (f_force_browser) { 
                        printf("MIKEY_BUG: force setup browser = read_iso9660\n"); 
#ifdef HDD_MODIFY_INDEX_TEST 
                      watchdog_onoff(0); 
                      ReadFontFile(); 
                      watchdog_onoff(1); 
#endif               
                        browser = read_iso9660; 
                        f_force_browser=0; 
                        f_browser_mode=1; 
                        f_browser_mode=cd_type_loaded;               
                        cd_type_loaded = CDROM; 
                        watchdog_onoff(0); 
                    } 
                    #endif //SUPPORT_HDD_ACCESS 
 
                    if (cd_type_loaded!=CDVCD10) 
                        cd_trk_lo_now++; 
                } 
 
                system_state=SYSTEM_BROWSE; 
 
                if(cd_type_loaded!=CDROM) 
                    play_state =VCD_STATE_NORMAL; 
            break; //case SYSTEM_SETUP_BROWSER: 
 
            // 
            // start to browse. 
            // 
            case SYSTEM_BROWSE: 
            #ifdef PORTABLE_POWER_ON_MUTE 
            regs0->sft_cfg3 |=((0x01<<6));//CHENZZ FOR LRCK=1.for power on noise. 
            #endif 
 
        #ifdef QSI_SHOW_ERR_RATE 
            if(QSI_PIPO_TEST==0x1){ 
                //psprintf(linebuf,"play_stste=%x\n", play_state); 
                //UART0_puts(linebuf); 
                 
                if(QSI_PIPO_FLAG) { 
                    QSI_PIPO_routine(); 
                } 
                break;   
            } 
        #endif 
 
 
                 
                #ifdef LOGO_PLAY_MP3   
                 play_mp3_flag=0;  
                #endif  
 
                #if defined(SUPPORT_CARD_STORAGE) 
                    if ( (media_type==MEDIA_CARD) && CARDIsPlugIn() ) { 
                        if(play_state == VCD_STATE_CLOSE)//liweihua 2004-2-1 
                        CardTestReady(); 
                         
                        memset(pFsJpeg, 0, sizeof(FSJPEGDATA));//liweihua mark 2004-1-31 
                        //axel clear mark for HJ card reader 2004/4/30 08:52pm 
                    } 
                #endif 
 
                if(browser == read_iso9660) { 
                    LoadModual(MODUAL_CDROM); 
                } 
 
                #ifdef TEST_SERVO//terry,2003/9/10 12:42AM 
                if((iTestServoMode==1)||(iTestServoMode==3))  
                   srv_test_mode_play(); 
                else 
                #endif 
                browser(); 
 
                #ifdef SYSMAIN2_DBG 
                printf("brower out,sys_cmd:%x play_state:%x\n",sys_cmd,play_state); 
                printf("system_state=%x\n", system_state); 
                #endif 
 
                continue_run_nav=0; 
                mode=GET_CMD_MODE(); 
                cmd=GET_CMD_SELECT(); 
 
                if(bPbcOff && ((cd_type_loaded==CDVCD20)||(cd_type_loaded==CDSVCD)) ) 
                { 
                    cd_trk_lo_now   = cd_trk_lo + 1; 
                    if(cd_trk_now>cd_trk_hi || cd_trk_nowpbc off)&FF/FB from startup timeout*/ 
                        bPbcOff = 0; 
                    }else 
                        continue_run_nav=2; 
 
                }else if(mode==CMD_SELECT) 
                { 
                    continue_run_nav=2; 
                } 
                else if (mode==CMD_FUNC) 
                { 
                    if( (cmd==CMD_FUNC_GOTO)||(cmd==CMD_FUNC_PRG)||(cmd==CMD_FUNC_RESUME))//2-4-26 14:41 
                        continue_run_nav=2; 
                    else if(cmd==CMD_FUNC_PBC) 
                        continue_run_nav=1; 
                } 
 
                if(continue_run_nav) 
                { 
                    cd_trk_lo_now   = cd_trk_lo + 1; 
                    if(!IsPBCOn()) 
                    { 
                        browser = v11_navigation; 
 
                        if(continue_run_nav==1) 
                            ClearCommand(); 
                    } 
                    else 
                    { 
                        browser = psd_navigation; 
                    } 
                } 
               else  
        { 
#if defined(CF_CARD_WRITE)|| defined(SPHE8202_FAT_Write_Function)//||defined(WRITE_USB) 
            if(!flag_cf2cd&&!flag_cd2cf)           //xulf 
#endif 
                    system_state = SYSTEM_FINISH; 
#if defined(CF_CARD_WRITE)|| defined(SPHE8202_FAT_Write_Function)//||defined(WRITE_USB) 
            else                                                 //xulf 
            { 
//              flag_cd2cf=0;   //wuxiaofeng moved to fs9660.c  03/09/15 
//              flag_cf2cd=0; 
            } 
#endif 
                } 
 
            break; //case SYSTEM_BROWSE: 
 
            // 
            // system playback finished. 
            // 
            case SYSTEM_FINISH: 
                #ifdef SUPPORT_OSDID3//liweihua 2004-1-9 11:18 
                if(Is_MP3_STATE()) 
                     osd_init(); 
                #endif 
                if(cd_trk_lo!=0xff)  //jhuang 2000/11/16 
                    stop_init(); 
 
                if(GET_CMD_SELECT() == CMD_FUNC_POWER) 
                    state_stop_navigation();      //jhuang add it 891010 
                else 
                { 
                    system_state = SYSTEM_STOP; 
#ifdef NEWSTYLE_WINDOW   //xyy  3-7-23 13:32 
                    if(full_scrn==MESSAGE) 
                #if defined(BBK_DVD)&&defined(DISC_INFO_KEY)  //fengjl edit 2004-04-22 15:00 
                    ircmd_disc_info(); 
                #else    
                        ircmd_goto();//exit goto mode 
#endif                     
#endif                     
                    ShowTitle(); 
                } 
 
                if(GET_CMD_SELECT() != CMD_FUNC_OPEN && GET_CMD_SELECT() != CMD_FUNC_CLOSE) /*jhuang add CMD_FUNC_CLOSE 891018*/ 
                { 
                    ClearCommand();//terry,2003/9/6 07:06PM 
                    #ifdef STOP_LOADER  //terry,2003/9/1 05:34PM 
                    stop_loader(); 
                    #endif 
                } 
                else 
                { 
                    flush_atapi();//terry,0515,let data tranfer finish 
                } 
 
                #ifdef DVB1000_NON_OS 
                if(DVD2DVB_switch_flag) 
                {    
                    DVD2DVB_switch_flag = 0; 
                    system_state = SYSTEM_TS; 
                } 
                #endif   
 
            break; 
 
#if defined(SPHE1000) && !defined(TEST_DVD) && !defined(DVB1000_NON_OS)    //Maoyong changed 2004-9-27 9:05 
            case SYSTEM_OPEN: 
                peek_message(&system_state); 
                break; 
#endif 
 
#if defined(SPHE1000) && !defined(TEST_DVD) 
            case SYSTEM_TS: 
                play_ts_stream(); 
                break; 
            case SYSTEM_FILESTREAM: 
                play_file_stream(); 
                break; 
#endif 
 
#ifdef QSI_SHOW_ERR_RATE 
    case SYSTEM_QSI_PIPO_TEST: 
         psprintf(linebuf,"SYSTEM_QSI_PIPO_TEST> play_stste=%x\n", play_state); 
                UART0_puts(linebuf); 
        if(QSI_PIPO_FLAG) { 
            QSI_PIPO_routine(); 
        } 
        break; 
#endif 
        } //switch(system_state) 
 
        #ifdef SYSMAIN2_DBG 
        if(old_state!=system_state) 
        { 
            old_state=system_state; 
            #ifndef IR_TOOL 
            printf("[%s,out][play_state:%x][sys_cmd:%x][cd_type:%x]\n",system_state_str[system_state],play_state,sys_cmd,cd_type_loaded); 
         #endif 
        } 
        #endif 
    } //while (1) 
} 
 
 
 
//terry,2004/2/6 04:23PM 
//move do syc job function to other file 
 
 
//benons move  ap_main_receiver() 2004/3/1 03:22¤U¤È    
 
#ifdef OP_UI 
#include "menu_def.h" 
#include "menu_func.h" 
/* 
 *Funciton Description: 
 *   
 *  check if the disc is valid. 
 * 
 *  if no disc,prompt"Insert a disc" 
 *  if the disc is incompatible, play is gray. 
 *  if the disc is valid ,can play. Then set system_state SYSTEM_SETUP_BROWSER. 
 *  zhaoyanhua 2004-2-26 11:12 
 */ 
void check_disc_valid(void) 
{ 
     
     
    if(cd_type_loaded == CDROM) 
    { 
        ExitMainMenu(); 
        system_state = SYSTEM_SETUP_BROWSER; 
         
        return; 
    } 
    else 
        ShowPlayState(0); 
 
    while(system_state == SYSTEM_SETTING) 
    { 
        polling(); 
         
        if(sys_cmd == (CMD_FUNC|CMD_FUNC_OPEN)) 
        {    
            system_state = SYSTEM_OPEN;  
            break; 
        } 
    } 
     
 
} 
#endif 
 
//Maoyong 2004.05.14 moved here 
#ifdef PROVIEW_GPIO_KEY 
void set_proview_gpio_key(void) 
{ 
  
    #ifdef PROVIEW_GPIO_KEY_527 
    GPIO_E_SET(EJECT_KEY_GPIO, 0);      //IN GPIO[5] OPEN 
    //GPIO_E_SET(PREV_KEY_GPIO, 0);     //IN GPIO[4] PREV 
    GPIO_E_SET(PAUSEPLAY_KEY_GPIO, 0);      //IN GPIO[18] PLAY 
    GPIO_E_SET(STOP_KEY_GPIO, 0);       //IN GPIO[17] STOP 
    //GPIO_E_SET(NEXT_KEY_GPIO, 0);     //IN GPIO[16] NEXT 
    #else 
    GPIO_E_SET(EJECT_KEY_GPIO, 0);      //IN GPIO[5] OPEN 
    GPIO_E_SET(PREV_KEY_GPIO, 0);       //IN GPIO[4] PREV 
    GPIO_E_SET(PAUSEPLAY_KEY_GPIO, 0);      //IN GPIO[18] PLAY 
    GPIO_E_SET(STOP_KEY_GPIO, 0);       //IN GPIO[17] STOP 
    GPIO_E_SET(NEXT_KEY_GPIO, 0);       //IN GPIO[16] NEXT 
    #endif   
} 
#endif 
 
/********************************************************************* 
 * call this function for card/cd switch process in special system state 
 * Maoyong 2004.05.18 changes for consideration of USB card reader. 
 *********************************************************************/ 
#if defined(SUPPORT_CARD_STORAGE)||defined(SUPPORT_USB)||defined(SPHE8202_CARD_STORAGE) 
void system_check_media_switch(void) 
{ 
    if(system_state == SYSTEM_STOP) 
    {     
        //check whether card is plugged in 
        if ( IsCardMediaExist() && (card_plug_state&USER_DO_PLUG_IN)//liweihua mod 2004-3-10 
        //#if defined(CF_CARD_WRITE)|| defined(SPHE8202_FAT_Write_Function)//||defined(WRITE_USB) 
        // && read_card_sign       //xulf 
        //#endif 
           )  
        { 
            //#ifndef SUPPORT_USB//Maoyong 2004.05.18 for USB carder consideration 
            //CardTestReady(); 
            //#endif  //#ifdef SUPPORT_USB 
            //Maoyong 2004.05.25. now use OPEN cmd and switch meida in SYSTEM_OPEN,just for wirte 
        #if defined(CF_CARD_WRITE)|| defined(SPHE8202_FAT_Write_Function)//||defined(WRITE_USB) 
            if( read_card_sign && (media_type == MEDIA_CARD) && (MediaIsEmpty == MEDIA_NOT_EMPTY))  //modefied by wangwei,2004-11-19 17:31(for storage no files screen refresh problem) 
            { 
                CardTestReady(); 
            } 
        #endif 
        } 
        else if(!IsCardMediaExist()) 
        { 
            #if defined(SUPPORT_USB)||defined(SPHE8202_CARD_STORAGE)  
            polling_storage();   //polling_U_Disk(); //wthsin,2004/4/12 02:16pm 
            #else 
            polling_card_plug();//kenny 2003/1/26 
            #endif 
            drv_do_set_features(); //card plug out, do set feature to loader 
 
            //if((card_plug_state&USER_DO_PLUG_OUT)&&(media_type == MEDIA_CARD)) 
            if(media_type == MEDIA_CARD)    //Maoyong 2004.05.18 for USB card reader consideration            
            { 
                /*ClearOsdMsg(0);//liweihua 2004-3-17                
                no_disk_cnt=DETECT_TIMES; 
                system_state=SYSTEM_OPEN; 
                play_state=VCD_STATE_CLOSE; 
                sys_cmd=CMD_FUNC|CMD_FUNC_CLOSE*/ 
                SwitchMedia(CARD2CD);       //this will do more actions 
             } 
            media_type = MEDIA_CD;              
        }                 
    } 
    else if(system_state == SYSTEM_OPEN) 
    {         
        if ((card_plug_state&USER_DO_PLUG_IN)&&CARDIsPlugIn()//liweihua mod 2004-3-10                                     
        #if defined(CF_CARD_WRITE)|| defined(SPHE8202_FAT_Write_Function)//||defined(WRITE_USB) 
           && read_card_sign       //xulf 
        #endif 
        ) 
        {            
            //if(play_state == VCD_STATE_CLOSE)//liweihua add 2004-2-1 
            {                 
                //8200 card power on run and 8202 cd to card switch will come here by CMD_FUNC_OPEN cmd              
                if(media_type == MEDIA_CARD)           
                {                   
                    //Maoyong 2004.05.25 
                    #ifdef CARD_PLAY_STOP_LOADER 
                        run_close_tray(1); 
                    #endif 
                    if(MediaIsEmpty == MEDIA_NOT_EMPTY)  //modefied by wangwei,2004-11-19 17:31(for storage no files screen refreshing problem) 
                    CardTestReady();                       
                    else   
                        media_type = MEDIA_CD; 
                } 
            }             
        } 
        else         
            media_type = MEDIA_CD; //Jeff 20020726 
 
        #ifdef SUPPORT_SLOT_IN_LOADER 
        if( IsCardMediaExist() )//Maoyong 2004.05.18 for USB card reader consideration  
        { 
            CardTestReady(); 
        } 
        #endif     
    } 
    else if(system_state == SYSTEM_NODISC)  //no disc switch to card when card exist s 
    {         
        //if( (safe_on==0) && CARDIsPlugIn()) 
        if( IsCardMediaExist() )//Maoyong 2004.05.18 for USB card reader consideration  
        { 
            if(MediaIsEmpty == MEDIA_NOT_EMPTY)  //modefied by wangwei,2004-11-19 17:31(for storage no files screen refreshing problem) 
            CardTestReady(); 
        } 
        //Maoyong mask 2004.05.25. when no disc & card, just waiting card/trayout here. 
        //if set SYSTEM_OPEN, will read disc again, though no disc. 
        #if 0 
        else //card not plug in 
        { 
            if(no_disk_cnt>1) 
            { 
                drv_do_set_features(); //card plug out, do set feature to loader 
                no_disk_cnt=DETECT_TIMES; 
                system_state=SYSTEM_OPEN; 
                //play_state=VCD_STATE_CLOSE;  //fengjl mark 2004-04-27 11:25 
                sys_cmd=CMD_FUNC|CMD_FUNC_CLOSE; 
            } 
        }         
        #endif //#if 0 
    }    
} 
#else 
void system_check_media_switch(void)    {} 
#endif  //#if defined(SUPPORT_CARD_STORAGE)||defined(SUPPORT_USB)||defined(SPHE8202_CARD_STORAGE) 
 
 
//============================================== 
// for QSI disc\card switch \\added by JS   \\20040727 
#ifdef SUPPORT_QSI_SOURCE_SWITCH 
void system_check_source_switch(void) 
{ 
    if(source_switch_flag) //  source switched 
    { 
        #if defined(QSI_PORTABLE_DVD) && defined(QSI_PLATFORM) //qsi: modify by johnson 20040812 
            if(source_type_now == source_card) 
            { 
                SwitchMedia(CD2CARD); 
            } 
            else if(source_type_now == source_disc) 
            { 
                SwitchMedia(CARD2CD); 
            } 
         
        #else 
         
            if(source_type_now == source_card) 
            { 
                CardReset(); 
                sys_cmd = (CMD_FUNC|CMD_FUNC_CLOSE); 
            } 
            else if(source_type_now == source_disc) 
            { 
                sys_cmd = (CMD_FUNC|CMD_FUNC_OPEN); 
            } 
        #endif 
         
        system_state = SYSTEM_NODISC; 
        play_state = VCD_STATE_IDLE; 
        cd_type_loaded = CDUNKNOWN; 
 
        source_switch_flag = 0; 
    }  
    else  // source has not switched 
    { 
        if((source_type_now == source_card) && (!CARDIsPlugIn())) 
        { 
            sys_cmd = (CMD_FUNC|CMD_FUNC_CLOSE); 
            system_state = SYSTEM_NODISC; 
            play_state = VCD_STATE_IDLE; 
            cd_type_loaded = CDUNKNOWN; 
        } 
    } 
 
} 
#else 
void system_check_source_switch(void)   {} 
#endif 
//==============================================