ir_parser.c

来自「OSD显示,单片机实现,ICCAVR! 代码风格严谨,为高人所写.我仅为了上传换」· C语言 代码 · 共 1,847 行 · 第 1/4 页

C
1,847
字号
     #ifdef SUPPORT_VIDEO_WITH_SPDIF  //xyy 2004-8-11
     || (rx == IRC_RCVR_ANALOG_DIGITAL)
     #endif
    #if defined(EQ_SWITCH_KEY)
		||((rx == IRC_RCVR_EQ)&&(current_rcvr_mode == RECEIVER_MODE_DVD))
    #endif
    #if defined(BASS_SWITCH_KEY)
        ||(rx == IRC_RCVR_LEVEL)
    #endif
    #if defined(TREBLE_SWITCH_KEY)
    ||(rx == IRC_RCVR_TONE)
#endif
        ) //end if condition sentence
 {
#ifdef AVOID_READDISC_WHEN_STARTUP  //xyy add for Oritron
 		if((rx==IRC_RCVR_NEXT_MODE && uCounterFlag==0)/*||(system_state==SYSTEM_OPEN)*/)
 		{
 			return 1;
 		}
#endif
    irc_func_table[(BYTE)rx]();
    return 1;
 }

 // If one of the specific mode buttons is pressed, call ircmd_rcvr_select_mode
    //xulf  modified 2004-3-7
    else if ((rx >= IRC_RCVR_SELECT_DVD) && (rx <= IRC_RCVR_SELECT_DUMMY))  // mode buttons
    {
        rx = rx - IRC_RCVR_SELECT_DVD;      // mode button values start at 0x6f
        if (rcvr_support_bits & (1 << rx))  // check to see if mode is enabled
            ircmd_rcvr_select_mode(rx);
        else
        {
            invalid_key();          // unsupported mode
        }
        return 1;
    }
 
 // Don't let user press any other button other than power if we aren't in DVD mode
    else if ((current_rcvr_mode != RECEIVER_MODE_DVD) && (rx != IRC_POWER))
    {
    
#if defined(SUPPORT_TUNER_MV114) || defined(SUPPORT_TUNER_ALPS)
        //Move to call_ir_func_tuner()
        call_ir_func_tuner(rx);   //xyy 2004-8-14
                return 1;
#endif //SUPPORT_TUNER_MV114    
    
        invalid_key();
		return 1;
	}
	return 0;
}
#endif//SUPPORT_RECEIVER


void call_ir_func(BYTE rx)
{   
//gerry,to avoid gpio key bugs,2004-6-3 9:36
    extern UINT32 save_srn_start_t;
    save_srn_start_t = get_rtc_val();

    #ifdef AD_TCL//2004-3-22 13:12 lijd
    jpg_ps=1;
    menu_id=0;
    #endif 
#ifdef TP6317_PANNEL   //yaowh add 04-10-25
   if(TP6317_Power == 2)
   {
      return ;
   }
#endif
    //printf("call ir in\n");    
    if(rx<IR_CODE_MAX_NUM)
    {
#ifdef AUDIO_SHOW_SAVER
        ir_cmd_temp = rx;   //yw 020904
#endif

/*
temporary used for oritron receiver
*/
#ifdef SUPPORT_POWER_OFF_CLOCK_FUNC  //xyy 2004-10-12
	if(rx==IRC_SET_CLOCK)
	{
		if(system_state==SYSTEM_DOING_CLOCK_FUNC)
			ircmd_set_clock();
		else
			invalid_key();
		return;
	}
#endif

#ifdef AD_TCL//2004-3-22 13:12 lijd     
   if((rx==IRC_CHANNEL||rx==IRC_EFFECT||rx==IRC_3D)&&(Is_JPEG_STATE()))
       rx=IRC_NULL;
   if((play_state==VCD_STATE_OPEN)&&(rx==IRC_CHANNEL))
       rx=IRC_P_SCAN;    
   else if((Is_JPEG_SlideMode())&&(rx==IRC_ROOT_MENU))
   {
        menu_id=1;
        rx==IRC_STOP;   
   }    
#endif

#ifdef SUPPORT_RECEIVER  //huziqn 2004-2-26
    if(call_ir_func_receiver_hook(rx))
        return;
#endif  // End:  #ifdef SUPPORT_RECEIVER

#ifdef AD_TCL
    if((cd_type_loaded==CDDVD)&&(get_tt_info(DISP_TT)==0)&&(rx==IRC_NEXT||rx==IRC_PREV))
        rx=IRC_NULL;
#endif  

#if defined(JPG_EFFECT)
        if( (rx == IRC_PAUSE)||(rx == IRC_ONLY_PAUSE) )
        {
            //printf("Now pause");
            pause_flag=1;
        }
#endif

#if defined(JPG_EFFECT)&&defined(CALL_JPGEFFECT_HELP)
//      jpeg_call_help();
        if(Jpg_Show_Usage_Flag)
        {
        #ifdef HELP_BMP_GUI
            if((rx!=IRC_POWER)&&(rx!=IRC_EJECT)&&(rx!=IRC_STOP)&&(rx!=IRC_SELECT)&&(rx != IRC_PLAY_SELECT)&&(rx!=IRC_NEXT)&&(rx != IRC_PREV)&&(rx !=IRC_PREVIEW))
        #else
            if((rx!=IRC_POWER)&&(rx!=IRC_EJECT)&&(rx!=IRC_STOP)&&(rx!=IRC_SELECT)&&(rx != IRC_PLAY_SELECT))
        #endif
                return;

#ifdef HELP_BMP_GUI
            if (rx == IRC_NEXT)
            {
                if (Jpg_Show_Usage_Page < 4)
                {    
                    Jpg_Show_Usage_Page ++;
                    Jpg_Show_Usage();
                    return;
                }
                else
                {
                    help_stop_flag = 1;
                    rx = IRC_STOP;
                }                
            }
            
            if (rx == IRC_PREV)
            {
                if (Jpg_Show_Usage_Page > 0)
                {    
                    Jpg_Show_Usage_Page --;
                    Jpg_Show_Usage();
                return;
                }
                else
                {
                    help_stop_flag = 1;
                    rx = IRC_STOP;
                }                
            }
            if (rx == IRC_PREVIEW)//when select "preview" button continully,show Mp3 Gui
            {
                    help_stop_flag = 1;
                    rx = IRC_STOP;                
            }               
#endif      
        

            if( (rx == IRC_SELECT)||(rx == IRC_PLAY_SELECT) )
            {
                if(Jpg_Show_Usage_Page < HELP_PAGE_COUNT)
                {
                    Jpg_Show_Usage_Page++;
                    Jpg_Show_Usage();
                    return;
                }
                else if(Jpg_Show_Usage_Page == HELP_PAGE_COUNT)
                {
//wanghaoying marked below 2004-7-1 14:01, for it is repetitive
//              #if !defined(MP3_JPEG_COWORK)//2004-05-18 Clear the flag in fs_nav_jpg.c
              Jpg_Show_Usage_Flag=0;//nono open it.4-7-26 15:41
//              #endif  
                    Jpg_Show_Usage_Page=0;
                    
                    #ifdef FS_BMP_GUI
                    help_stop_flag = 1;
                    #endif

                    rx = IRC_STOP;
                }
            }

            if(rx == IRC_STOP)
            {
//wanghaoying marked below 2004-7-1 14:01, for it is repetitive
//          #ifndef  MP3_JPEG_COWORK//2004-05-18 Clear the flag in fs_nav_jpg.c
              Jpg_Show_Usage_Flag=0;//nono open it.4-7-26 15:41
//          #endif  
                    Jpg_Show_Usage_Page=0;

#ifdef  SDRAM_16Mb_Mode                 
                 ircmd_stop();
#else// SDRAM_16Mb_Mode
                            if(pFsJpeg->gifsState!=3)   //2003/10/27 axelchen for HELP screen flickering
                            {
                    delay_srv_10ms(2);
                    #if defined (MP3_LARGE_GUI) || defined (FS_BMP_GUI)//Maoyong 2003.12.29 for Large GUI  retrun from Jpeg Help page
                    config_memory(MEMORY_GRAPH_NTSC);    //Large , not SMALL, but NTSC 
                    #else
                    config_memory(MEMORY_GRAPH_SMALL);
                    #endif
                    setup_tv_format(tv_format);
                    play_state = VCD_STATE_MP3_FILELIST;
                    FSGUI_Menu();
                    delay_srv_10ms(2);
            }
#endif//SDRAM_16Mb_Mode
                         }
        }
    #endif //#ifdef JPG_EFFECT

        if(play_state==VCD_STATE_POWER)
        {   
 
#if defined(SUPPORT_TUNER_MV114) || defined(SUPPORT_TUNER_ALPS)

            if( (rx==IRC_POWER)||(rx<=IRC_P10) )
            {
                irc_func_table[(BYTE)rx]();
                return;
            }
            else if(rx==IRC_3D||rx==IRC_SETUP||rx==IRC_FORMAT||rx==IRC_P_SCAN)
            {
                action_click=1;
                irc_func_table[(BYTE)rx]();
                return;
            }
            else if(rx==IRC_VOLUME_UP||rx==IRC_VOLUME_DN)
            {
                chk_password(rx);
                return;
            }
#ifdef XINGQIU_DVD_RECEIVER
            else if(rx==IRC_PREV||rx==IRC_NEXT||rx==IRC_BACKWARD||rx==IRC_FORWARD||rx==IRC_LEFT||rx==IRC_RIGHT||rx==IRC_SELECT||
                    rx==IRC_MUTE||rx==IRC_RCVR_BAND||rx==IRC_AUD_LANGUAGE||IRC_ANGLE)
#else
            else if(rx==IRC_UP||rx==IRC_DOWN||rx==IRC_LEFT||rx==IRC_RIGHT||rx==IRC_SELECT||
                    rx==IRC_MUTE||rx==IRC_ZOOM||rx==IRC_AUD_LANGUAGE||IRC_ANGLE)
#endif
            {
                #ifdef SUPPORT_APOGEE_AMP
                if((!((full_scrn & APOGEEAMPVOL)||(full_scrn & SOUND)||(full_scrn & SETUP))))
                #endif
                {
                        tuner_key(rx);
                        return;
                }
                    }
                    else
                    {
                        return;
                    }

#else 
            if(rx==IRC_POWER)
                irc_func_table[(BYTE)rx]();
#endif

//wanghaoying marked below 2004-7-1 14:00, for not use any more
            //freyman add 2002-8-27 11:24
            //in tuner or aninput mode switch amp on off
//    #ifdef IR17
//        if((rx>=IRC_CENTER_UP)||(rx<=IRC_MEMORY_UP))
//    #else
//        #ifdef SUPPORT_AMP
//        if(rx==IRC_AMP_ONOFF)
//        #endif
//    #endif

            irc_func_table[(BYTE)rx]();

//  wanghaoying marked 2004-7-1 13:59, for not use any more
//        #if defined(SUPPORT_TUNER)
//        if((rx==IRC_VOLUME_DN)||(rx==IRC_VOLUME_UP))
//            ircmd_power_volume(rx);
//        #endif
        }    
        else
        {//move to password.c,terry,2003/8/20 06:47PM
            chk_password(rx);
        }
    }
}


extern const BYTE ir_mapcode[256];

BYTE GetReverse(BYTE bIRCode)
{
    BYTE i;

    for (i = 0; i < 256; i++)
    {
        if (ir_mapcode[i] == bIRCode)
            break;
    }

    if (bIRCode == 255)
        return 0xff;

    return revn(i, 8);
}

//nono 5-5-9 15:03 move to ir_parser_special_func.c
#include "ir_parser_special_func.c"

extern UINT16 GetIRCode()
{
    // 2004/09/23 yltseng
    extern const BYTE ir_mapcode[256];
    UINT16 rx = regs0->iop_data[IR_PORT];
    
    #ifndef SUPPORT_SPI
    if( rx & IR_RDY )
    #endif
    {
        #if defined(IR_NEC)||defined(IR_M3004)||defined(IR_ORITRON)||defined(IR_ORITRON_RCVR)//LIJD 2005-6-16 22:27
        rx = reverse_fun(rx);
        #else
        rx = rx&0x003f;
        #endif

        #if defined(IR30)
        if(regs0->iop_data[6] == IR_ADDR_PATT)
        {
            switch(rx)
            {
            case 0x30:
            case 0x32:
            case 0x33:
            case 0x34:
                rx+=0x10;
                break;
            default:
                break;
            }
        }
        if(regs0->iop_data[6] == IR_ADDR_PATT2)
        {
            switch(rx)
            {
            case 0x30:
            case 0x32:
            case 0x33:
            case 0x34:
                rx+=0x15;
                break;
            default:
                break;
            }
        }
        #endif //#if defined(IR30)

        #ifdef SUPPORT_SPI
        rx = ir_mapcode[(BYTE)spi_mem[5]];
        #else
        rx = ir_mapcode[(BYTE) rx];
        #endif

        regs0->iop_data[IR_PORT] &= (~IR_RDY);
                
        return rx;
    }
    
    return IR_CODE_MAX_NUM;
}

void PollingSpecifiedKeys( UINT16* pKeyArray, UINT32 uiArraySize )  // 2004/10/14 yltseng
{
    UINT16 rx = GetIRCode();
    if( rx == IR_CODE_MAX_NUM )
    {
#ifdef SUPPORT_VFD
        extern UINT32 CheckVFDkey();
        rx = CheckVFDkey();
#endif
        if( rx == IR_CODE_MAX_NUM )
            return;
    }
    
    UINT32 i = 0;
    for( i = 0; i < uiArraySize; i++ )
    {
        if( rx == pKeyArray[i] )
        {
            irc_func_table[rx]();
            break;
        }
    }
}

#ifdef SUPPORT_SPI_QSI
extern void spi_cmd_production_reset(void);
extern void spi_cmd_run_in(void);
extern void spi_cmd_run_in_final(void);
extern void spi_cmd_mecha_test(void);
extern void spi_cmd_slot_test(void);
extern void spi_cmd_invalid_key(void);
void spicmd_pre_parse(BYTE spi_cmd)
{
    UINT8 uRx;
    uSpiRxData=spi_cmd;//tmp usage
    
    switch(uSpiRxData)//special cmd
    {
        case 0x00:
            spi_cmd_wakeup(); return;
        case 0x80:
            spi_cmd_production_reset(); return;
        case 0x81:
            spi_cmd_run_in(); return;
        case 0x82:
            spi_cmd_run_in_final(); return;
        case 0x83: //qsi: added by johnson 20040715
            spi_cmd_mecha_test(); return;
        case 0x84: //qsi: added by johnson 20040715
            spi_cmd_slot_test(); return;
            
        case 0xF0:
            spi_cmd_invalid_key(); return;
    }
    
    if(uSpiRxData < MAX_SPI_CMD_NUM)//boundry control
        uRx = SPI_IR_TRANS_TABLE[uSpiRxData];
    else
        return;

    //if( uRx == IRC_NULL)
       //spi_cmd_func_table[spi_cmd]();
    //else

    call_ir_func(uRx);
        //ircmd_pre_paser(uRx);
}
#endif //#ifdef SUPPORT_SPI_QSI

//Maoyong 2004-9-24 8:59 call after full scrn menu initialization 
void SetFullscrnCmdFuncPtr( void (*up), void (*down), void (*left), void (*right),void (*sel))
{
    ircmd_full_scrn_up = up;
    ircmd_full_scrn_down = down;
    ircmd_full_scrn_left = left;
    ircmd_full_scrn_right = right;
    ircmd_full_scrn_select = sel;
}

⌨️ 快捷键说明

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