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

📄 ircmd.c

📁 代码有点长,需细心阅读,仅供影音视听类产品的开发人员参考
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
** FILE
** ircmd.c
**
** DESCRIPTION
** splitted from ir.c, now all the IR (or global) functions
** are implemented here.
**
*/

#include "config.h"
#include "regmap.h"
#include "user_init.h"                    //ZHX 071203 
#include "global.h"
#include "macro.h"
//#include "cfont.h"//no used
#include "mon.h"
#include "dsa.h"
#include "util.h"
#include "func.h"
#include "epp.h"
#include "sio.h"
#include "vfd.h"
#include "ir.h"
#include "ircmd.h"
//#include "ircode.h"
#include "cd.h"
#include "osd.h"
#include "cdfunc.h"
#include "osdutil.h"
#include "auctrl.h"
#include "avapi.h"
#include "fifo.h"
#include "vfd.h"
#include "memmap.h"
#include "fs9660.h"                         //wyf reduce warning.
#include "cpu.h"
////#include "servo.h"
#include "gpio.h"
#include "iop.h"
#include "framebuf.h"
#ifdef SUPPORT_ESP
#include "servo.h"
#endif

//in vfd_turnkey2.h
extern void UI_show_trk(BYTE mode);
extern void vfd_stop(void);    //ZHX 032803
//in mp3common.c
extern int mp3_abv_bitstream_size(void);

//in sysmain.c
extern void ShowTitle(void);

#ifdef VOLUME_OSD32
UINT8 vol2x_flag;
UINT8 zhx_volume = VOL_VALUE *2;
#else
UINT8 zhx_volume = VOL_VALUE;
#endif

#ifdef VFDVOL_DISPLAY
extern void vfd_vol_display(BYTE);
#endif

#ifdef IR_BOOK_MARK
UINT32 bookmark_msf[MAX_BOOKMARK_CNT];
BYTE bookmark_trk[MAX_BOOKMARK_CNT];
BYTE bookmark_index=0,bookmark_select=0;
#endif

#ifdef COMPRESS_MODULE
extern  UINT16  IsMp3DrvLoad(void);
extern  void    LoadPrevProgDrv(void);
extern  void    LoadSetupDrv(void);
#endif


//extern UINT16 Dir_entry[MAX_DIR_CNT]; //zhg 2002/09/25 17:22
#if (VFD_DRIVER==SPL10)   //zhg 2002/10/16 18:53
extern BYTE key_long_press;
BYTE    Select_Dir_flag = 0;        //zhg 2002/09/26 13:50
BYTE    Mp3DirSelNum = 0;               //zhg 2002/09/26 13:50
BYTE    gbSegUMask = 0;                 //zhg 2002/10/22 
UINT16  OldEspTime = 0;                 //zhg 2002/10/22 
#endif
//#define MONE_IRCMD
//#define MONE_IR_SELECT
//#defune MONE_CONFIG_PLAY_MODE
//#define MONE_CDDA_ESP
//#define MONE_VCD_ESP
#ifdef POWER_KEY                          //ZHX  032903 
extern void Servo_init(void);
extern void ShowTitle(void); 
extern void enable_video(void); 
extern void disable_video(void); 
extern int clrFrameBuffer(UINT32 bitmask); 
#endif 
/********************************************************************/
/*          EXPORT FUNCTIONS                                                                                        */
/********************************************************************/
//in sysmain.c
void    InitVar(void);                  //wyf reduce warning.
void    select_sysFS(BYTE);
void DispDiscTite(BYTE );
/********************************************************************/
/*          FUNCTION PROTOTYPE                                                                                        */
/********************************************************************/
//#ifdef SUPPORT_MP3_FORWARD
void    Mp3_ChkSkipData(void);

//#endif
/********************************************************************/
/*          LOCAL DEFINITIONS                                                                                       */
/********************************************************************/

/********************************************************************/
/*          PRIVATE FUNCTIONS                                                                                       */
/********************************************************************/
/*
** FUNCTION
**
** DESCRIPTION
**
*/
void invalid_key(void)
{
    ////if(!IsKYNorm()) UISetKYNorm();//jhuang 2002/3/13 mark
#ifdef USE_PP5_KEY
    pp5_flag = 0;
#endif 
#ifdef DIGITAL_DIRECT_SELECT
    direct_prog = 0;
    prog_digital = 0;
    direct_time = 0;
    direct_p5_time = 0;
    direct_p10_time = 0;
    direct_p5_flag = 0;
    direct_p10_flag = 0;
#endif
    PrintOsdMsg(STR_OS_NO, REGION1, 1, 0, CH_N);
}

/*
** FUNCTION
**
** DESCRIPTION
**
*/
UINT32 ircmd_callback_check_generic(UINT32 func)
{

    return func;
}

/*
** FUNCTION
** polling_ir
**
** DESCRIPTION
** polling IR interface and store received IR command
** to IR receive queue
*/
#ifndef DIGITAL_DIRECT_SELECT
static 
#endif
BYTE ircmd_post_func(UINT32 func)
{
    if(ircmd_callback_check == NULL)
        ircmd_callback_check = ircmd_callback_check_generic;

    func = ircmd_callback_check(func);

    if(func == 0)
    {
        ir_select_number = 0;
        invalid_key();
#ifdef MONE_IR_SELECT
        epp_write_wait("Post Invalid Key\n");
#endif
        //PrintOsdMsg(STR_OS_NO,REGION1,1,0,CH_N);
        return C_FALSE;
    }
    else
    {
        if(cd_type_loaded == CDROM)
            e_msf = 0;

        if(GetIntrMask() & INTR_IRKEY)
        {

#ifdef MONE_IR_SELECT
            epp_write("INTR_IRKEY ..\n");
#endif

            SetIntrFlag(GetIntrFlag() | INTR_IRKEY);
        }
        AVD_SetMediaTimeout();          // Joseph 20021114 roll back to previous setting
        //JJDing,for IR sensitity
        //JJDing 20021111 modify for pressing Return -> Macroblocking      
        /*if(func == (CMD_FUNC|CMD_FUNC_PBC))
           AVD_SetMediaInterrupt();
           else 
           AVD_SetMediaTimeout(); */

        PostCommand(func);

        #ifdef SUPPORT_MP3_BUFFER_FULL_STOP
        if(cd_type_loaded==CDROM)
            Gmem.gmp3.trk_inbuf=0;
        #endif

        return C_TRUE;
    }

}

/*
** FUNCTION
**
** DESCRIPTION
**
*/
void config_play_mode(BYTE flag)    //jhuang reduce 2002/4/11
{
    ClrKYGoto();
#ifdef IR_INTRO_ON
     intro_osd_flag=0;                           //ZHX 032903
#endif
    if(flag == CLEAR_ALL)                   //clear all flag
    {
        UISetKYNorm();
        UISetRepABMode(REPEAT_AB_IDLE); //clear repeat A&B
        UISetRepMode(REPEAT_IDLE);  //clear repeat 1 &all
        UISetProgState(PROG_IDLE);  //clear program state
        ClrKYRand();                                //wyf add 2-4-27 13:32.
#if VFD_DRIVER==SPL10                       //zhg 2002/10/16
        UISetNMNorm();                          //zhyf for lcd mode shift 2-9-26 23:27
#endif
#ifdef MONE_CONFIG_PLAY_MODE
        epp_write_wait("[config_play_mode]:CLEAR_ALL\n");
#endif
    }
    else if(flag == RESUME)
    {
        ClrKYRand();                                //clear random key
        UISetRepABMode(REPEAT_AB_IDLE); //clear repeat A&B
        UISetRepMode(REPEAT_IDLE);  //clear repeat 1 &all

#ifdef MONE_CONFIG_PLAY_MODE
        epp_write_wait("[config_play_mode]:RESUME\n");
#endif
    }
    else if(flag == REPEAT_ALL)     //keep repeat value
    {
        if(!CheckUIRep(REPEAT_IDLE))
            UISetRepMode(REPEAT_IDLE);  //clear repeat 1 &all
        //if((rep_mode!=REPEAT_IDLE)&&(repeat==REP_NONE_SEL))
        //{
        //    rep_mode=REPEAT_IDLE;
        //}

#ifdef MONE_CONFIG_PLAY_MODE
        epp_write_wait("[config_play_mode]:REPEAT_ALL\n");
#endif
    }
    else if(flag == REPEAT_AB)
    {
        ClrKYRand();
        UISetRepABMode(REPEAT_AB_IDLE); //clear repeat A&B
        //shuffle_flag=0;
        //rep_ab_mode=REPEAT_AB_IDLE;                 //keep rep_mode

#ifdef MONE_CONFIG_PLAY_MODE
        epp_write_wait("[config_play_mode]:REPEAT_AB\n");
#endif
    }
#ifdef IR_SHUFFLE_ON
    else if(flag == SHUFFLE)
    {
        //UISetKYRand();
        UISetRepABMode(REPEAT_AB_IDLE); //clear repeat A&B
        //zhyf test mark it for shift mode 2-9-26 23:20 
        //UISetRepMode(REPEAT_IDLE);            //clear repeat 1 &all

#ifdef MONE_CONFIG_PLAY_MODE
        epp_write_wait("[config_play_mode]:SHUFFLE\n");
#endif
    }
#endif
#ifdef IR_GOTO_ON
    else if(flag == GOTO)
    {
        UISetKYGoto();
        digit_cnt = 0;
        goto_time = 0;
        goto_min = 0;
        goto_sec = 0;

#ifdef MONE_CONFIG_PLAY_MODE
        epp_write_wait("[config_play_mode]:GOTO\n");
#endif
    }
#endif
#ifdef IR_PROG_ON
    else if(flag == PROGRAM)
    {
        ClrKYRand();
        ProgIndx = 1;
        prog_state = PLAY_PROGRAM;
        UISetRepABMode(REPEAT_AB_IDLE); //clear repeat A&B
        UISetRepMode(REPEAT_IDLE);  //clear repeat 1 &all

#ifdef MONE_CONFIG_PLAY_MODE
        epp_write_wait("[config_play_mode]:PROGRAM\n");
#endif
    }
#endif
    else
    {
        ClrKYRand();                                //shuffle_flag=0;

#ifdef MONE_CONFIG_PLAY_MODE
        epp_write_wait("[config_play_mode]:ELSE\n");
#endif
    }

}

/*
** FUNCTION
**
** DESCRIPTION
**
*/
void goto_func_input(void)          //jhuang reduce 2002/4/11
{
    int     goto_ff;

    /* Consider 10 as 0 key */
    if(ir_select_number == 10)
        ir_select_number = 0;
#ifdef P3_IN_P5                     //ZHX 082603 FOR XHD  
    if(ir_select_number == 11) 
        ir_select_number = 3;         
#else 
    if(ir_select_number == 11) 
        ir_select_number = 5;         
#endif         

#ifdef DIGITAL_DIRECT_SELECT
    if(ir_select_number == 1 && direct_p10_flag) {
        ir_select_number = 0;
        direct_p10_flag = 0;
    	}
#endif

    digit_cnt++;

    if(digit_cnt == 1)
    {
        goto_min = ir_select_number << 4;
        //show_goto(digit_cnt);//reduce 11
    }
    else if(digit_cnt == 2)
    {
        goto_min |= ir_select_number;
        //show_goto(digit_cnt);//reduce 11
    }
    else if(digit_cnt == 3)
    {
        if(ir_select_number > 5)
            digit_cnt--;
        else
            goto_sec = ir_select_number << 4;
        //show_goto(digit_cnt);//reduce 11
    }
    else if(digit_cnt == 4)
    {
        goto_sec |= ir_select_number;
        /* Second has to be truncated down to 59!! */
        if(goto_sec > 0x59)
            goto_sec = 0x59;

        if(cd_type_loaded == CDSVCD)
            goto_time =
                (bcd2bin(goto_min) + msf_mm(gettrkmsf(cd_trk_lo_now))) * 60 +
                bcd2bin(goto_sec) + msf_ss(gettrkmsf(cd_trk_lo_now) / 2);
        else
            goto_time =
                (bcd2bin(goto_min) + msf_mm(gettrkmsf(cd_trk_lo_now))) * 60 +
                bcd2bin(goto_sec) + msf_ss(gettrkmsf(cd_trk_lo_now));
        goto_time = MSF((goto_time / 60), (goto_time % 60), 0);

        if((goto_min == 0) && (goto_sec == 0))
            goto_time = gettrkmsf(cd_trk_lo_now) & 0x00ffffff;
        //JJDing 2002/05/07
        //We received Q-code at 2X speed
#if CONFIG==CONFIG_COMBO_SVCD
        if(cd_type_loaded == CDSVCD)
            goto_ff = M2I(goto_time << 1);
        else
#endif
            goto_ff = M2I(goto_time);
        //disc_time   = M2I(gettrkmsf_leadout());

        ClrKYGoto();                                //reduce 11

        if((goto_ff > disc_time + M2I((int)gettrkmsf(cd_trk_lo_now))) ||
             (goto_ff < leadin_time))
        {
            invalid_key();                      //zhyf goto cancel2-4-27 13:24
            //ClrKYGoto();//reduce 11
            return;                                     //reduce 11
        }
        else
        {
            //jjding
            //release FF/FB state when Goto New Address
            Chg2PlayMd();                           //jhuang 2002/4/11 mark //if(IsUIStateSearch()) Search(0);
            //show_goto(digit_cnt);//reduce 11
            ircmd_post_func(CMD_FUNC | CMD_FUNC_GOTO);
            //To skip I,P,B frame,JJDing
            GotoSkipFrm = 4;
#ifdef MONE_IRCMD
            psprintf(linebuf, "GOTO %x:%x\n", goto_min, goto_sec);
            epp_write_wait(linebuf);
#endif
        }

        //ClrKYGoto();//reduce 11
    }

    show_goto(digit_cnt);                   //reduce 11
}

/*
** FUNCTION
**
** DESCRIPTION
**
*/
static void ircmd_select_number(BYTE num)
{
#ifndef DIGITAL_DIRECT_SELECT
    UINT16  tmp_num;
#endif
    BYTE    Res;

#ifdef MONE_IR_SELECT
    psprintf(linebuf, "IR SELECT %x\n", num);
    epp_write_wait(linebuf);
#endif

#if 0                                                       //def SUPPORT_JPG
    //charles 2002/9/23 invalid ircmd_select_number when jpg slide show
    if((Gmem.gmp3.gifsFunc == FS_FUNC_JPEG) && Gmem.gmp3.gifsSlide &&
         !Gmem.gmp3.gifsStatic)
    {
        invalid_key();
        return;
    }
#endif

    //if (CheckUIProgState (PLAY_PROGRAM))//2-6-16 jhuang mark due to irdef.h
    //  ircmd_cancel (PROG_CNL);
#ifdef SUPPORT_ESP

⌨️ 快捷键说明

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