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

📄 ir_drv.c

📁 凌阳8202T的红外接收代码及LED屏的驱动代码
💻 C
📖 第 1 页 / 共 5 页
字号:
                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









//============by linson 2008-7-9==============
#include".\iptv\Vod_Iptv_Data.h"	
#include".\iptv\Vod_Iptv_network.h"
#include".\iptv\Vod_Iptv_osd.h"
#include".\iptv\Vod_Ir_drv.h"
#include ".\iptv\h\iptv.h"
#include".\iptv\Vod_iptv_data_process.h"
#include".\iptv\Vod_Iptv_Ircode.h"
#include".\h\kernel.h"

//暂停和继续播放测试
#define FAST2NORM    0x01<<0
#define PAUSE2NORM   0x01<<1
#define SLOW2NORM    0x01<<2
#define REALPLAY     1

extern int AUDIF_Set_Volume(UINT8 x);
extern void AUDIF_Set_Channel(int chn);
extern int AUDIF_AutoDownload_Codec(UINT8 chn);
extern int mp4_aud_channel_flg;
extern  UINT32	file_aud_num;
extern UINT32 nGotoPck;
extern BYTE    audioNotContinuous;
extern UINT32	(*file_goto_next_frame)();
extern int	 file_set_audio_stream(int aud_strm_num);
extern int ircmd_sub_picture2(void);
extern void chg2normal_play(UINT8 md,UINT8 realplay);
extern UINT16 Subp_stream_Chg_VOB(UINT8);  
//重启系统
extern void __boot_entry(); 
//goto时间
extern UINT32 nGotoPck;
extern int disp_time;
extern UINT32 GET_MP4_TIME();

//=============by linson 2008-7-9==============
/*******************************************************************
	关闭电源
********************************************************************/
void vod_ircmd_power(){
	vod_Socket_Disonnect(0);
	vod_Socket_Disonnect(1);
	delay_1ms(100);
	ircmd_power();
}


/*******************************************************************

	如果获得IR红外遥控码
	
********************************************************************/
BYTE polling_ir(void)
{

	UINT16 rx;    
	UINT16 unCustId;

	rx = regs0->iop_data[IR_PORT];   


	// ==================below by linson 2008-7-17=================
	//如果系统没有开通
	if(vod_system_is_activated == VOD_SYSTEM_NOT_ACTIVATED){
		regs0->iop_data[IR_PORT] = rx & (~IR_RDY);  
		return 0;
	}
	
	//如果是收费视频
	if(vod_isVideo & VOD_VIDEO_Y){
		//收费视频的通知窗口
		if(vod_video_isCharges ==VOD_VIDEO_CHARGES_NOTICE){
			//if(vod_video_time_waiting_paid >= 100)
			//	vod_video_time_waiting_paid = 0;

			if(vod_video_time_waiting_paid < 80){
				vod_video_time_waiting_paid ++;
			}
			else{
				vod_osd_video_charges_notice();
				vod_video_isCharges = VOD_VIDEO_CHARGES_WAIT_FOR_PAID;
				vod_video_time_waiting_paid = 0;
				//等待用户确定
				vod_isVideo = (VOD_VIDEO_Y | VOD_VIDEO_Y_CHARGE);	
			}
		}
		//等待用户确定
		if(vod_video_isCharges ==VOD_VIDEO_CHARGES_WAIT_FOR_PAID){
			if(vod_video_time_waiting_paid < 100)	{		
				vod_video_time_waiting_paid ++;
				if(vod_video_time_waiting_paid == 100){
					//暂停播放
					Pause();
					play_state=VCD_STATE_PAUSE;
					vod_osd_video_display(VOD_VIDEO_PAUSE);
				}				
			}
		}

	}


	
	// ===================above by linson 2008-7-17=================

//===========below当接收到IR 命令时执行=======================
if ((rx & IR_RDY))
    {

	printf_w("IR data:%04x\n",rx);
	// ===================below by linson 2008-7-19===================

	//写回寄存器,清除前2字节
	regs0->iop_data[IR_PORT] = rx & (~IR_RDY);  
	rx = rx & VOD_IRC_MASK; 

	//如果不是以下系列的遥控器则不执行以下代码
	unCustId=IOP_IR_DATA();  
	//printf_w("unCustId:%04x\n",unCustId);
	if(!(unCustId == IR_ADDR_PATT_1 )){
		printf_w("unCustId:%04x\n",unCustId);
		return 0;
	}

	
	//如果是在屏保状态下
	if(vod_osd_direction_moving_scr_saver){
		vod_recovery_from_screen_saver();
		return 1;
	}
	//如果不是在屏保状态下,屏保时间间隔复位
	vod_osd_time_interval_scr_saver = 0;



	//从遥控器数组中取值
	rx = vod_ir_mapcode_1[rx];
	
	//关机
	if(rx == VOD_IRC_POWER){
		vod_ircmd_power();
		return 1;
	}

	/*
	//屏保
	if(rx == 0x68){
		vod_osd_time_interval_scr_saver = VOD_TIME_INTERVAL_SCR_SAVER ;
		vod_polling_screen_saver();	
	}
	*/

#ifdef HOTEL_IPTV_SYSTEM
	//如果技师IR
	if(vod_technician_ir_handle){
		switch(vod_technician_ir_handle){
			case(VOD_TECHNICIAN_IR_HANDLE_TIME_UP):
				return vod_logo_technician_time_up(rx);
				break;
			case(VOD_TECHNICIAN_IR_HANDLE_ADD):
				return vod_logo_technician_add_service(rx);
				break;
			case(VOD_TECHNICIAN_IR_HANDLE_START):
				return vod_logo_technician_start_service(rx);
				break;
			case(VOD_TECHNICIAN_IR_HANDLE_BOOK_NULL):
				return vod_logo_technician_book_null(rx);
				break;
		}
	}
#endif

	//======如果在播放视频========
	if(vod_isVideo & VOD_VIDEO_Y){
		return vod_video_ir(rx);
		
	}
	
	//======如果没有在播放视频=============
	if(vod_isVideo == VOD_VIDEO_N) {
		//如果是设置IP地址
		if(vod_network_setIP){
			return vod_ir_set_ip(rx);
		}			
		if(vod_logo_ir(rx))
			return 1;		
	}

	return 0;
	
	// ===================above by linson 2008-7-19===================

	
    }

//=============above 当接收到IR 命令时执行======================

	return 0;
}




//=============below by linson 2008-7-30==============

/*******************************************************************

	如果在LOGO显示的状态下
	
********************************************************************/
BYTE vod_logo_ir(UINT16 rx){

	/*
	//在线更新
	if(rx == VOD_IRC_TEMP1){
		vod_tx_s1_command_init();
		vod_tx_s1_command.bType = REQUEST_FILEINFO_SYSTEM;
		vod_tx_s1_command_filename = "rom.bin";
		vod_tx_s1_state = VOD_TX_SYS_UPDATE;	
		vod_tx_s1_command_queue_push();
	}
	*/
	
	
	
	switch(vod_current_logo){

			case(VOD_LOGO_1): 
				return vod_logo_1(rx);
				break;
			case(VOD_LOGO_11): 
				return vod_logo_11(rx);
				break;
			case(VOD_LOGO_12): 
				return vod_logo_12(rx);
				break;
			case(VOD_LOGO_13): 
				return vod_logo_13(rx);
				break;

⌨️ 快捷键说明

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