⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sysmain2.c

📁 Sunplus 8202S source code.
💻 C
📖 第 1 页 / 共 3 页
字号:
{
    //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;
            
            #ifdef FILE_MODE_WRITE//added by wangwei,2005-1-9 16:13
            detect_CD = 0;
            #endif//FILE_MODE_WRITE
            
       
        }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())
                {
                    #ifdef FILE_MODE_WRITE//added by wangwei,2005-1-9 16:21
                    printf("detect_CD = %x\n",detect_CD);
                    detect_CD = 1;
                    #endif//FILE_MODE_WRITE
                    
                    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
            else if(((test_ready_ret==ATAPI_NO_MEDIA)||(test_ready_ret==ATAPI_MEDIA_UPSIDE_DOWN)||(test_ready_ret==ATAPI_UNKNOWN_MEDIA)\
								||(test_ready_ret==ATAPI_ILLEGAL_MODE))&&(no_disk_cnt>1)&&!CDOpened())//zhongshan modified 05/01/17 if media err ,will not show "play" for a long time. 	
            {
                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
        
        #ifdef FILE_MODE_WRITE//added by wangwei,2005-1-9 16:21
        printf("detect_CD = %x\n",detect_CD);
        detect_CD = 1;
        #endif//FILE_MODE_WRITE
            
            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
        #ifdef HDMI_SMC_CLE//for HDDVD Non CF config.chenzhao on 2004-12-1 21:27  
        regs0->fm_gpio_len  = 10                    
                            |  (0xf << 4);          // Set FMGPIO_B[26:0] enable  
        #else
    regs0->fm_gpio_len  = 11                    // Set FMGPIO_B[26:0] turn on
                        |  (0xf << 4);          // Set FMGPIO_B[26:0] enable  
        #endif//HDMI_SMC_CLE
   #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
{
#ifdef PULIANG_EJECT_MODE    //yaowh add for puliang 04-12-17
    BYTE    I2c_Data;
    BYTE    I2C_Clear=0;
#endif
    
    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
        #ifdef PULIANG_EJECT_MODE  //yaowh add 04-12-17
        ReadFromI2c(0xa0,0xfc,&I2c_Data,1);
        if((I2c_Data==0x80))
        {
            call_ir_func(IRC_EJECT);   
            WriteToI2c(0xa0,0xfc,&I2C_Clear,1);   
        }else
        #endif
        {
        #if !(defined(SPHE1000)||defined(PMP_UI))
        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;
    ControlDvbDvdMic();		//Maoyong 2005-1-18 16:33 turn off MIC when DVB state
    #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 SUPPORT_MIDI           //xlluo 2004-12-28
#include "fsmidi.h"
#ifdef SUPPORT_MIDI_MENU_SEL
#include "fsmidiui.h"
#endif
#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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -