📄 ir_drv.c
字号:
call_ir_func(rx);
#endif
#ifdef TONIC_DVD
if(rx==IRC_KEYLOCK)
ircmd_keylock();
#endif
return 0;
}
#endif
#ifdef USE_VFDPORT_TRANDATA //linrc add 2004-3-27 16:40
#define USE_VFDPORT_TRANDATA_return(); return IRC_NULL;
#else
#define USE_VFDPORT_TRANDATA_return();
#endif
#ifdef SUPPORT_SPI
#define SUPPORT_SPI_return(); return IRC_NULL;
#else
#define SUPPORT_SPI_return();
#endif
#ifdef TCL_VFD_GPIO//2004-3-22 12:49 lijd
#define call_SUPPORT_TCL_LED(); tcl_led();
#else
#define call_SUPPORT_TCL_LED();
#endif
#if defined(SPHE1000) && !defined(DVB1000_NON_OS) //MIKEY
#define call_SUPPORT_SPHE1000_return(); {if(f_skip_polling_ir==1) {return IRC_NULL;}}
#else
#define call_SUPPORT_SPHE1000_return();
#endif
static inline void NEXT_FORWARD_IN_A_KEY_short_time(UINT16 rx)
{
#ifdef NEXT_FORWARD_IN_A_KEY
if(bIrSkipState)
{
bIrSkipCnt++;
if(bIrSkipCnt>5)
{
if(rep_ir_times==0)
{
#ifdef NEW_NEXT_FORWARD_IN_A_KEY
rx = IRC_PREV + bIrSkipState -1;
#else//#ifdef NEW_NEXT_FORWARD_IN_A_KEY
rx = IRC_BACKWARD + bIrSkipState -1;
#endif//#ifdef NEW_NEXT_FORWARD_IN_A_KEY
ircmd_pre_paser(rx);
}
bIrSkipState = 0;
bIrSkipCnt = 0;
rep_ir_times = 0;
}
}
#else
if(rx) {}
#endif//NEXT_FORWARD_IN_A_KEY
}
static inline void NEXT_FORWARD_IN_A_KEY_long_time(UINT16 rx)
{
#ifdef NEXT_FORWARD_IN_A_KEY
bIrSkipCnt = 0;
if(rep_ir_times<=2)
{
rep_ir_times=2;
#ifdef NEW_NEXT_FORWARD_IN_A_KEY
rx = IRC_BACKWARD + bIrSkipState -1;
#else//NEW_NEXT_FORWARD_IN_A_KEY
rx = IRC_PREV + bIrSkipState -1;
#endif//NEW_NEXT_FORWARD_IN_A_KEY
//printf("run rx:%d \n",rx);
ircmd_pre_paser(rx);
}else if(rep_ir_times>3)
{
rep_ir_times = 1;
}
#else
if(rx) {}
#endif
}
//moved... by David
/*
#ifdef DVB1000_OSD_MENU //Maoyong 2004-10-25 9:37
#ifdef SUPPORT_EPG
extern int g_EPG_Mode;
#endif
//Return: if has proc this key in this function
UINT8 check_proc_dvb_key(BYTE rx)
{
BYTE setup_valid_key[] = {IRC_0, IRC_1, IRC_2, IRC_3, IRC_4, IRC_5, IRC_6, IRC_7, IRC_8, IRC_9, //Number Key
IRC_UP, IRC_DOWN, IRC_LEFT, IRC_RIGHT, IRC_SELECT, //U/D/L/R/Enter
IRC_SETUP, IRC_POWER, IRC_GOTO,
};
BYTE dvb_menu_valid_key[] = {IRC_0, IRC_1, IRC_2, IRC_3, IRC_4, IRC_5, IRC_6, IRC_7, IRC_8, IRC_9, //Number Key
IRC_UP, IRC_DOWN, IRC_LEFT, IRC_RIGHT, IRC_SELECT, //U/D/L/R/Enter
IRC_SETUP, IRC_RETURN, IRC_GOTO, IRC_STOP, IRC_POWER //Other Key
};
#ifdef SUPPORT_EPG
BYTE epg_menu_valid_key[] = {IRC_UP, IRC_DOWN, IRC_LEFT, IRC_RIGHT, IRC_SELECT, IRC_POWER, IRC_RETURN,};
#endif
BYTE sound_menu_valid_key[] = {IRC_UP, IRC_DOWN, IRC_LEFT, IRC_RIGHT, IRC_SELECT, IRC_POWER, IRC_3D};
BYTE dvb_display_valid_key[] = {IRC_DISPLAY, IRC_POWER,};
BYTE no_menu_valid_key[] = {IRC_0, IRC_1, IRC_2, IRC_3, IRC_4, IRC_5, IRC_6, IRC_7, IRC_8, IRC_9, //Number Key
IRC_UP, IRC_DOWN, IRC_LEFT, IRC_RIGHT,
IRC_VOLUME_UP, IRC_VOLUME_DN, IRC_POWER, IRC_MUTE, IRC_PREV, IRC_NEXT,
IRC_DISPLAY, IRC_3D, IRC_SETUP, IRC_ZOOM,
};
BYTE i, tmpRx, *pValidKey, validKeyNum;
tmpRx = ir_mapcode[(BYTE) rx];
//for DVB/DVD common use
if((system_state == SYSTEM_TS) || (system_state == SYSTEM_NODISC))
{
if(tmpRx == IRC_GOTO){
irc_func_table[(BYTE)tmpRx]();
#ifdef SUPPORT_EPG
g_EPG_Mode = 0;
#endif
return 1;
}
}
if(system_state == SYSTEM_TS) {
if(full_scrn & SETUP) {
pValidKey = setup_valid_key;
validKeyNum =sizeof(setup_valid_key);
} else if(full_scrn & DVB_MENU) {
#ifdef SUPPORT_EPG
if(g_EPG_Mode){
pValidKey = epg_menu_valid_key;
validKeyNum =sizeof(epg_menu_valid_key);
} else
#endif
{
pValidKey = dvb_menu_valid_key;
validKeyNum =sizeof(dvb_menu_valid_key);
}
} else if(full_scrn & SOUND) {
pValidKey = sound_menu_valid_key;
validKeyNum =sizeof(sound_menu_valid_key);
} else if(full_scrn & PROGRAMINFO){
pValidKey = dvb_display_valid_key;
validKeyNum =sizeof(dvb_display_valid_key);
}
else {
pValidKey = no_menu_valid_key;
validKeyNum =sizeof(no_menu_valid_key);
}
//printf("=========== validKeyNum = %d ============\n", validKeyNum);
for(i = 0; i< validKeyNum; i++)
{
if(tmpRx == pValidKey[i])
irc_func_table[(BYTE)tmpRx]();
}
return 1;
}
return 0;
}
#endif //DVB1000_OSD_MENU
*/
/*
** FUNCTION
** polling_ir
**
** DESCRIPTION
** polling IR interface and store received IR command
** to IR receive queue
*/
BYTE polling_ir(void)
{
UINT16 rx;
UINT16 unCustId;
//... terry,2004/7/23 10:56PM
USE_VFDPORT_TRANDATA_return();
SUPPORT_SPI_return();
ir_tcl_standby();
call_SUPPORT_TCL_LED();
mon_ir();
call_SUPPORT_SPHE1000_return();
rx = regs0->iop_data[IR_PORT];
if (!(rx & IR_RDY))
{
//printf("bIrSkipState:%d rep_ir_times:%d bIrSkipCnt:%d \n",bIrSkipState,rep_ir_times,bIrSkipCnt);
NEXT_FORWARD_IN_A_KEY_short_time(rx);
#ifdef ANGLE_GOTO_IN_A_KEY
if(bIrSkipState1)
{
bIrSkipCnt1++;
if(bIrSkipCnt1>5)
{
if(rep_ir_times==0)
{
//rx=IRC_ANGLE;
rx=IRC_GOTO;
ircmd_pre_paser(rx);
}
bIrSkipState1 = 0;
bIrSkipCnt1 = 0;
rep_ir_times = 0;
}
}
#endif
#ifdef QISHENG_DVD // alan, 2003/9/7 06:30PM
if (pressed==IRC_PLAY)
{
if (not_rdy_times>=2)
{
rep_ir_times=0;
not_rdy_times=0;
pressed=IRC_NULL;
if(dvd_menu_play==1)
{//terry,2003/9/12 02:35PM
if(IsPBCOn()||(cd_type_loaded==CDDVD))
{
ircmd_playmode_toggle();
return IRC_NULL;
}
}
return Call_Ir_Fun(0x55); // call IRC_Play, at ir_mapcode position 0x55
} else {
not_rdy_times++;
}
} else if (pressed==IRC_DEFAULT_SETUP)
{
rep_ir_times=0;
pressed=IRC_NULL;
return Call_Ir_Fun(0x56); // call IRC_DEFAULT_SETUP, at ir_mapcode position 0x56
}
#endif
return IRC_NULL;
}
else
{
//terry,2003/7/14 01:24PM
if ((rep_ab_mode==REPEAT_FIND_B) &&
(sys_cmd==(CMD_FUNC|CMD_FUNC_REPAB)) &&
(cd_type_loaded != CDROM)) // Robert 2004/02/06
{
//when system(nav.c) post CMD_FUNC_REPAB to navigation, and navigation tries to exit MediaMain and enter again
//In the meanwhile, rep_ab_mode can't be set to REPEAT_AB_IDLE
//For VCD, system will playtrack and then correct s_msf
//if rep_ab_mode==REPEAT_AB_IDLE, s_msf will not be corrected, and it will jump to the start of this track
printf("waiting for navigator\n");
return IRC_NULL;;
}
unCustId=IOP_IR_DATA();
regs0->iop_data[IR_PORT] = rx & (~IR_RDY);
#ifdef IR_TOOL
if (watch_ir_id_value==1)
{
watch_ir_custm_id(unCustId);
return IRC_NULL;
}
#else
watch_ir_custm_id(unCustId);
#endif
if(CHK_CUST_ID(unCustId))
{
show_ir_custid_err();
return IRC_NULL;
}
#ifdef ONLY_VOLUME_REPEAT
rx = TRANS_IR_CODE(rx);
#endif
if( (regs0->iop_data[IR_PORT])&IR_REPEAT )
{
rep_ir_times++;
//printf("rep:%d bIrSkipState:%d\n",rep_ir_times,bIrSkipState);
#ifdef NEXT_FORWARD_IN_A_KEY
if(bIrSkipState)
{//bw:1 ff:2
NEXT_FORWARD_IN_A_KEY_long_time(rx);
return;//0;//0 maybe wrong , but a non-void function must return a value
}
#endif//NEXT_FORWARD_IN_A_KEY
#ifdef ANGLE_GOTO_IN_A_KEY
if(bIrSkipState1)
{
bIrSkipCnt1 = 0;
if(rep_ir_times<=2)
{
rep_ir_times=2;
//rx=IRC_GOTO;
rx=IRC_ANGLE;
//printf("run rx:%d \n",rx);
ircmd_pre_paser(rx);
}
else
if(rep_ir_times>3)
{
rep_ir_times = 1;
}
return;//0;//0 maybe wrong , but a non-void function must return a value
}
#endif//NEXT_FORWARD_IN_A_KEY
#ifdef QISHENG_DVD // alan, 2003/9/7 06:31PM
not_rdy_times=0;
if (rep_ir_times>=4)
{
/*if (irc_value==IRC_STOP)
{
pressed=IRC_POWER;
irc_value=IRC_NULL;
}*/
if (irc_value==IRC_DEFAULT_SETUP)
{
pressed=IRC_DEFAULT_SETUP;
irc_value=IRC_NULL;
}
}
#endif
#ifdef ONLY_VOLUME_REPEAT//wangap add 04/5/20
if((ir_mapcode[(BYTE) rx]!=IRC_VOLUME_UP)&&(ir_mapcode[(BYTE) rx]!=IRC_VOLUME_DN))
return IRC_NULL;
#elif defined(ONLY_COMPUND_KEY_REPEAT)&&defined(NEXT_FORWARD_IN_A_KEY)&&defined(ANGLE_GOTO_IN_A_KEY)
if((ir_mapcode[(BYTE) rx]!=IRC_PREV)&&(ir_mapcode[(BYTE) rx]!=IRC_NEXT)&&(ir_mapcode[(BYTE) rx]!=IRC_ANGLE))
return IRC_NULL;
#endif
#ifdef IR_NO_REPEAT
return IRC_NULL;
#endif
}else
{
rep_ir_times=0;
}
}
save_srn_start_t = get_rtc_val();
#ifndef ONLY_VOLUME_REPEAT
rx = TRANS_IR_CODE(rx);
#endif
#ifdef IR_TOOL
adj_ir_rxcode(unCustId==IRAddr,&rx,0x10);
#else
adj_ir_rxcode(unCustId==IR_ADDR_PATT,&rx,0x10);
#endif
adj_ir_rxcode(unCustId==IR_ADDR_PATT2,&rx,0x15);
#ifdef IR_TOOL
if (watch_ir_value==1)
{
watch_ir_id(rx);
return IRC_NULL;
}
#else
watch_ir_id(rx);
#endif
#ifdef QISHENG_DVD // alan, 2003/9/7 06:32PM
if (pressed==IRC_NULL)
{
irc_value = ir_mapcode[(BYTE) rx];
/*if (irc_value==IRC_STOP)
{
pressed=IRC_STOP;
return IRC_NULL;
}*/
if (irc_value==IRC_DEFAULT_SETUP)
{
pressed=IRC_PLAY;
return IRC_NULL;
}
}
#endif
#ifdef BBK_DV961_DVD // fengjl edit 4-2-5 19:56
//NOTE:
//need contious 3s to change video output.
//zhaoyanhua add 03-10-22 21:36
if( (ir_mapcode[(BYTE) rx] == IRC_ONLY_P_SCAN)
#ifdef ONLY_VGA_KEY
||(ir_mapcode[(BYTE) rx] == IRC_VGA)
#endif
||(ir_mapcode[(BYTE) rx] == IRC_INTERLACE)
)
{
if(rep_ir_times <= 3)
return;
}
#endif//BBK_DVD
#ifdef BOOMBOX_NOT_USE_SOME_IR_KEYS//nono 2003-11-17 1:02 for YILI.
if( (ir_mapcode[(BYTE) rx] == IRC_POWER)
||(ir_mapcode[(BYTE) rx] == IRC_MUTE)
||(ir_mapcode[(BYTE) rx] == IRC_VOLUME_UP)
||(ir_mapcode[(BYTE) rx] == IRC_VOLUME_DN)
)
{
return;
}
#endif//BOOMBOX_NOT_USE_SOME_IR_KEYS
#ifdef PORTABLE_DVD //rbhung for Portable DVD HOLD IR
#ifdef HOLD_KEY_DETECT
if(hold_state)
return IRC_NULL;
else
#endif
return Call_Ir_Fun(rx);
#else
#ifdef SYBER_NATIVE_DVD_TYPE
if((rx == 0x1c) ||(rx == 0x0b) || (rx == 0x07) ||(rx == 0x13)
||(rx == 0x00) ||(rx == 0x40) || (rx == 0x14) || (rx == 0x47) || (rx == 0x48))
return 0;
#endif //Maoyong 2003/12/17 16:20 for mask syber DVD vol+-, stdby and so on
#ifdef DVB1000_OSD_MENU //Maoyong 2004-10-25 9:37
if(Dvb_ircmd_pre_parser(rx))
return 0;
#endif //DVB1000_OSD_MENU
return Call_Ir_Fun(rx);
#endif
}
#ifdef SUPPORT_SPI
#include "spi.c"
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -