📄 ir_drv.c
字号:
regs0->iop_data[IR_PORT]|=IrRepeatRate(6);
#else
regs0->iop_data[IR_PORT]|=IrRepeatRate(4);
#endif
// show some message to tell users this key have no system function. robert.chang, 2007-05-07
char str_buf[20];
strcpy(str_buf, "INVALID KEY");
timeout_osd[1]=1*OSD_TIMEOUT;
osdshow(1, str_buf);
}
/*
* detect ir key input,using to search tuner band
*/
//#ifdef SUPPORT_TUNER // add tuner 2-6-14 23:17
BYTE key_input(void)
{
BYTE res;
//need to add vfd key input
if(regs0->iop_data[IR_PORT]&IR_RDY)
res=1;
else
res=0;
return res;
}
//#endif
#if defined(DESAY_PHILIPS_IR)||defined(IR_GBM_PHILIPS)
UINT16 desay_philips_ir_move(UINT16 rx)
{
if(((regs0->iop_data[6]>>6)&0x5f) == IR_ADDR_PATT)
{
switch(rx)
{
case 0x30:
case 0x32:
case 0x33:
case 0x34:
rx+=0x10;
break;
case 0x11:
case 0x12:
case 0x13:
rx+=0x40;
break;
default:
break;
}
}
else if(((regs0->iop_data[6]>>6)&0x5f) == IR_ADDR_PATT2)
{
switch(rx)
{
case 0x06:
rx+=0x40;
break;
case 0x02c:
case 0x02e:
case 0x02f:
rx+=0x20;
break;
default:
break;
}
}
else if(((regs0->iop_data[6]>>6)&0x5f) == IR_ADDR_PATT3)
{
switch(rx)
{
case 0x032:
case 0x033:
rx+=0x15;
break;
default:
break;
}
}
else if(((regs0->iop_data[6]>>6)&0x5f) == IR_ADDR_PATT4)
{
switch(rx)
{
case 0x2c:
rx+=0x30;
break;
default:
break;
}
}
return rx;
}
#endif //CLEAD 2004-3-23
#ifdef IR_GBM_PHILIPS //added by wangwei,2004-8-16 20:09
UINT16 gbm_philips_ir_move(UINT16 rx)
{
desay_philips_ir_move(rx);
}
#endif //IR_GBM_PHILIPS
/*
* call ir post function (ir parser)
*/
#if defined(DEBUG_IR_CODE)||defined(IR_PHILIPS)
static inline BYTE Call_Ir_Fun(UINT16 rx)
{
#ifdef DESAY_PHILIPS_IR
rx=desay_philips_ir_move(rx);
rx = ir_mapcode[(BYTE) rx];
#ifndef IR_TOOL
printf("\n ir(705) rx = %x \n",rx);
call_ir_func(rx);
#endif
#elif defined(IR_GBM_PHILIPS)
rx=gbm_philips_ir_move(rx);
#ifdef DEBUG_IR_CODE//gerry add it for philips ir,2004-8-4 16:41
watch_ir_id(rx);
return;
#endif
rx = ir_mapcode[(BYTE) rx];
#ifndef IR_TOOL
printf("\n ir(705) rx = %x \n",rx);
call_ir_func(rx);
#endif
#else
#ifdef DEBUG_IR_CODE//gerry add it for philips ir,2004-8-4 16:41
watch_ir_id(rx);
return;
#endif
rx = ir_mapcode[(BYTE) rx];
#ifndef IR_TOOL
printf("\n ir(705) rx = %x \n",rx);
call_ir_func(rx);
#endif
#endif
return rx;
}
#else
static inline BYTE Call_Ir_Fun(UINT16 rx)
{
if(rx >= MAX_IR_MAP) // Out of MAP range?
return 0;
#ifdef TEST_VFD_PANNEL_AND_KEY//lijd 2005-5-8 13:53
if(Test_Front_Panel_flag==1)
{
TestIrData=(BYTE)rx;
if(Test_Stop_flag!=1)
{
if((rx!=0x11)&&(rx!=0x26)) return 0;
}else if(Test_Stop_flag==1)
{
if(rx!=0x11) return 0;
}
}
#endif
rx = ir_mapcode[(BYTE) rx];
#ifdef MALATA_KEY
rx= malata_key_check(rx);
#endif //end-> #ifdef MALATA_KEY
#ifdef DMA_DVD_SWITCH
extern void DMA_DVD_Switch(UINT16 rx);
DMA_DVD_Switch(rx);
#endif
#ifndef IR_TOOL
printf("\n ir(705) rx = %x \n",rx);
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
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
}
#if defined(SUPPORT_DVB_GUI_NEW)&&defined(DVB_IR_3D_ON)
static inline BYTE is_available_key_in_3D_state(BYTE rx __attribute__((unused)))
{
if((ir_mapcode[(BYTE) rx]==IRC_SELECT) || (ir_mapcode[(BYTE) rx]==IRC_PLAY_SELECT)
||(ir_mapcode[(BYTE) rx]==IRC_UP) || (ir_mapcode[(BYTE) rx]==IRC_DOWN)
||(ir_mapcode[(BYTE) rx]==IRC_LEFT) || (ir_mapcode[(BYTE) rx]==IRC_RIGHT)
||(ir_mapcode[(BYTE) rx]==IRC_3D)
)
return 1;
return 0;
}
static inline BYTE InDVB3DNow(BYTE rx __attribute__((unused)))
{
if(!(full_scrn&SOUND))
return 1;
/*
if((ir_mapcode[(BYTE) rx]==IRC_SETUP) || (ir_mapcode[(BYTE) rx]==IRC_DISPLAY)
#ifdef DVB_IR_SCAN_KEY //sunzhh add 20051117
|| (ir_mapcode[(BYTE) rx]==IRC_GOTO)
#endif
#ifdef SUPPORT_DVB_PREVIEW_9FRAMES //sunzhh add 20051117
|| (ir_mapcode[(BYTE) rx]==IRC_PREVIEW)
#endif
*/
if(!is_available_key_in_3D_state(rx))
{
cancel_sound();
return 1;
}
return 0;
}
#endif
#ifdef SLOW_SOME_KEY_IN_MALATA_IR
void slow_key_update();
void slow_key_update()
{
if(clear_key == 1)
{
// printf_w("@@@@@@@@@@@ clear_count ++; clear_count:%d\n",clear_count);//20051207 tiany debug
clear_count --;
if(clear_count < 1)
{
clear_key = 0;
clear_count = 0;
// printf_w("@@@@@@@@@@@ clear_key = 0; @@@@@@@@@@@@@@@\n");//20051207 tiany debug
}
}
else
{
clear_count = 0;
}
}
#endif
/*
** FUNCTION
** polling_ir
**
** DESCRIPTION
** polling IR interface and store received IR command
** to IR receive queue
*/
#ifdef XM_MODEL //fcr 2005-11-3 17:39
extern unsigned char XMkey_release_hold;
#endif
BYTE polling_ir(void)
{
#ifdef SUPPORT_SMF // add for close ir when loading fh ; hf.pang ; 2007-02-12
extern UINT8 g_iLoadFHCloseIR;
if(g_iLoadFHCloseIR)
return;
#endif
#ifdef OP_DVD5121_PANEL //qinhua ,2005-9-13 22:55
static BYTE count;
#endif
UINT16 rx;
UINT16 unCustId;
#if defined(HOLD_VOL_KEY_FAST_REPEAT)
static UINT16 rep_ir_hold_times=0;
static BYTE ir_key_clone_times=0;//insert clone key to increase repeat speed
#ifdef SUPPORT_MCU_68A
#define MIN_IR_REPEAT_TIME 3
#define MIN_IR_REPEAT_TIME_N 5//2
#define IR_CLONE_TIME 0
#else
#define MIN_IR_REPEAT_TIME 4
#define MIN_IR_REPEAT_TIME_N 5//3
#define IR_CLONE_TIME 0
#endif
#endif
//... terry,2004/7/23 10:56PM
USE_VFDPORT_TRANDATA_return();
SUPPORT_SPI_return();
ir_tcl_standby();
call_SUPPORT_TCL_LED();
mon_ir();
#ifdef SLOW_SOME_KEY_IN_MALATA_IR
slow_key_update();
#endif
#ifdef SUPPORT_SYS_POWER_ON_WAITING_MCUINFO//tianye 200607
if(!flag_check_mcu_info)
{
return;
}
#endif//end=> #ifdef SUPPORT_SYS_POWER_ON_WAITING_MCUINFO
rx = regs0->iop_data[IR_PORT];
if (!(rx & IR_RDY))
{
#ifdef OP_DVD5121_PANEL //qinhua ,2005-9-13 22:55
count=0;
#endif
#ifdef XM_MODEL //fcr 2005-11-3 17:39
if(XMkey_release_hold)XMkey_release_hold--;
#endif
//printf("bIrSkipState:%d rep_ir_times:%d bIrSkipCnt:%d \n",bIrSkipState,rep_ir_times,bIrSkipCnt);
NEXT_FORWARD_IN_A_KEY_short_time(rx);
#if defined(ANGLE_GOTO_IN_A_KEY)||defined(TITLE_RETURN_IN_A_KEY)
if(bIrSkipState1)
{
bIrSkipCnt1++;
if(bIrSkipCnt1>5)
{
if(rep_ir_times==0)
{
#ifdef TITLE_RETURN_IN_A_KEY
rx=IRC_TITLEMENU;
#else
rx=IRC_GOTO;
#endif
ircmd_pre_paser(rx);
}
bIrSkipState1 = 0;
bIrSkipCnt1 = 0;
rep_ir_times = 0;
}
}
#endif
#ifdef SLOW_ZOOM_IN_A_KEY
if(bIrSkipState2)
{
bIrSkipCnt2++;
if(bIrSkipCnt2>5)
{
if(rep_ir_times==0)
{
rx=IRC_ZOOM;
ircmd_pre_paser(rx);
}
bIrSkipState2 = 0;
bIrSkipCnt2 = 0;
rep_ir_times = 0;
}
}
#endif
#ifdef QISHENG_DVD // alan, 2003/9/7 06:30PM
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -