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

📄 polling.c

📁 代码有点长,需细心阅读,仅供影音视听类产品的开发人员参考
💻 C
字号:
/*
** FILE
** polling.c
**
** DESCRIPTION
** polling hardware response.
**
** HISTORY
**
*/

//#define MONE_TIME_DISP
//#define MONE_TIMEOUT
//#define MONE_MAKE_PICTURE
//#define MONE_DECODE
//#define MONE_DECODE_TIMING
//#define MONE_DECODE_ABV
//#define MONE_SKIP
//#define MONE_AUDIO_PART2
//#define MONE_FRAMERATE_PAUSE
//#define   VFD_TIME_GOP
//#define MONE_STACK_OVERFLOW
#include "config.h"
#include "global.h"
#include "regmap.h"
#include "memmap.h"
#include "avd.h"
#include "util.h"
#include "stc.h"
#include "audio.h"
#include "cd.h"
#include "cddsp.h"
#include "ringbuf.h"
#include "dsa.h"
#include "sig.h"
#include "vfd.h"
#include "func.h"
#include "hwsetup.h"
#include "cfont.h"
#include "epp.h"
#include "iop.h"
#include "gpio.h"
#include "osd.h"
#include "set.h"
#include "servo.h"
#include "avapi.h"
#include "dma.h"
#include "cdfunc.h"
#include "ircmd.h"
#include "irconfig.h"
#include "cpu.h"
#include "stdlib.h"
#include "zigzag.h"
#include "framebuf.h"
#include "osdutil.h"
#include "fs9660.h"
/*
**  FUNCTION PROTOTYPE DECLARATION
*/
//in osdutil.c
//extern void show_goto(BYTE);

#ifdef COMPRESS_MODULE
extern  UINT16  IsFuduDrvLoad(void);
#endif

//in cddsp.c
extern int polling_cddsp(void);
//extern void setup_func_select(void);
extern void DispDiscTite(BYTE);         //ZHX 061603
//in ogt.c
//extern int polling_ogt(void);

#ifdef SAMSUNG_SERVO
extern BYTE servo_recover_gotof;
#endif
//in ircmd.c
#if VFD_DRIVER==SPL10                       //zhg 2002/10/16
extern BYTE Select_Dir_flag;        //zhg 2002/09/26 13:50
#endif
#ifdef DIGITAL_DIRECT_SELECT
extern BYTE ircmd_post_func(UINT32);
#endif
extern void get_cdkit_time(BYTE);
extern void redraw_prog_page(void);
extern BYTE prog_page_action;
extern void __swap(void *func);
extern BYTE c_pos;
extern UINT16 mic_amplitude;        //jhuang
//#ifdef SUPPORT_OGT
//extern UINT16 OGT_timer; //Joseph 20030226 modify for OGT display issue
//#endif
extern void set_dis_pic_id(BYTE);
void    polling_gamepad(void);

#ifdef SUPPORT_CHECK_PIC_DECODE
void    polling_pic_decode(void);
#endif
#if VFD_DRIVER==SPL10                       //zhg 2002/10/16
//in vfd_turnkey.h
extern void UI_show_trk(BYTE mode);

//in vfd.c
extern BYTE vfdr_1s_timer;
#endif

#ifdef DEBUG_VFDSEG
int debug_lcd;                      //ZHX 033103
#endif
/*
** FUNCTION
** polling_timeout()
**
** DESCRIPTION
** check if timeout
**/
int polling_timeout()
{
    if(timeout_playback)
    {
        if((get_rtc() >> 4) > timeout_playback)
        {
            if(GetIntrMask() & INTR_TIMEOUT)
            {
                SetIntrFlag(GetIntrFlag() | INTR_TIMEOUT);
            }
            AVD_SetMediaTimeout();

            timeout_playback = 0;
        }
    }
    return 0;
}

/*
** FUNCTION
** polling()
**
** DESCRIPTION
** pooling system status and issue decoding if able.
**/
#if VFD_DRIVER==SPL10                       //zhg 2002/10/16
extern UINT16 stop_poweroff_timer;
#endif
int polling(void)
{
    UINT32  diff;
    UINT32  timenow;
    static BYTE timer_10ms = 0, timer_1ms = 0 /*, indx = 0 */ ;
    BYTE    t_indx;

#ifdef MONE_STACK_OVERFLOW
    int    *p = (int *)(0xafff3d28);
#endif
    timenow = regs0->stc_15_0;
    diff = timenow ^ stc_polling;
    stc_polling = timenow;

#ifdef SUPPORT_CD_DEBUG
    GPIO_M_SET(2, 1);                           /* cd debug start */
    GPIO_E_SET(2, 0);

    if(GPIO_I_GET(2))
    {
        epp_write_wait("enter debug tool\n");
        cd_debug_tool();
    }
#endif

#ifndef SUPPORT_COMBO                       /* polling DSA interface */
    polling_dsat(0);
#endif
#ifndef UNIX
    if((diff & 0x0000fff8) == 0)
        return 0;                                       /* mask by 0xffe0       */
#endif
#ifndef SUPPORT_COMBO
    //polling_dsar(0);//jhuang not used 2003/2/24
#endif

#if 1//ndef EMU_DEMO_BOARD
    if(!(regs0->stamp & (1 << 14))) /* for power down */
    {
        for(timenow = 0; timenow < 5; timenow++)
        {
            if(regs0->stamp & (1 << 14))
                break;
            else if(timenow == 4)
            {
                int i;
                GPIO_O_SET(38, 1);
                while(1)
                {                   
                    regs0->reset = 0x01;
                    for (i=0;i<0xfffff;i++);
                }               
            }
        }
        return 0;
    }
#endif
    /* filter-entry (32 * 90kHz) */
#ifndef UNIX
    if((diff & 0x0000ffe0) == 0)
        return 0;                                       /* mask by 0xffe0       */
#endif

    /*EDO step motion,check cddsp when AVD not paused*/// 2003/3/24    
    #ifdef SUPPORT_ESP
        if( (CDActive() && (!IsAVDPaused())) || (shock_state & (SHOCK_ENABLE/*|SHOCK_PAUSE*/)) )
    #else
        if(CDActive() && (!IsAVDPaused()))  /* polling CDDSP interface  */
    #endif
            polling_cddsp();//for CDDA ESP shock pause->play smooth
#ifdef SUPPORT_EPP_DBG
    polling_epp();
#endif

    if((!IsRPicStart && IsVPicEnd) || (GetIntrFlag() & INTR_TRACK_CHANGE))  //bondy 2002/4/3
    {
        if(GetIntrMask() & INTR_TIMEOUT)
        {
            polling_timeout();
            if(IsAVDMediaTimeout())
            {
                if(switch_to_menu == 1)
                {
                    set_dis_pic_id(0);
                    switch_to_menu = 0;
                }
                AVD_SetMediaInterrupt();
                if((sys_cmd == 0) && (timeout_playback == 0))
                    PostCommand(CMD_FUNC | CMD_FUNC_TIMEOUT);
            }
        }
    }

#ifdef SUPPORT_ESP
   if(!(shock_state & SHOCK_ENABLE))
#endif              
    if(do_dec_video())                      /* try decoding video frame */
    {
        ;
    }

    /* 1 ms polling intrval */
    if(TimeUp_1MS())
    {
#if VFD_DRIVER==SPL10                       //zhg 2002/10/16
        vfd_BlinkHandle();
#endif
        #ifdef SUPPORT_MP3_BUFFER_FULL_STOP /*move from servo code */
                if(pause_flag == ESP_CDDSP_BUFFER_FULL)                 /* Buffer Full  */
                {
                    pause_flag = ESP_CDDSP_SERVO_SLEEP;                 /* In Sleep Mode */
                    cd_func_stop();
                }
#endif  
        
#ifdef SUPPORT_ESP/*矪瞶VCD ESP SHOCK粄﹚/铬瓂/钡瓂拜肈*/
    if(speed_chg_end && (shock_state & SHOCK_ENABLE_VCD))
    {
        do_vcd_esp();       
    }
#endif



#ifdef NEW_SKATE_TRACK_HANDLE//jhuang 2003/3/11
        #ifdef SUPPORT_ESP 
        if(!(shock_state & (SHOCK_ENABLE_VCD | SHOCK_ENABLE)))/*VCD ESPぃ祇ネ

⌨️ 快捷键说明

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