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 + -
显示快捷键?