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

📄 keyremo.c

📁 此程序为twell8806驱动程序
💻 C
字号:
//
// KeyRemo.h
// Default function for Key Input and Remocon Input
//
//=============================================================================
//		                    Operation Key Mapping
//=============================================================================
#include "config.h"
#include "typedefs.h"
#include "keyremo.h"
#include "measure.h"
#include "audio.h"
#include "dispinfo.h"
#include "main.h"
#include "osdmenu.h"
#include "debug.h"
#include "cc.h"
#include "tuner.h"
#include "printf.h"

#ifdef SUPPORT_CCD_VCHIP
extern	bit		VchipWindow_On;
#endif
extern  bit		OnChangingValue;
extern 	bit		RepeatKey;
#ifdef SUPPORT_DEBUG
extern  bit Debug_On;
#endif
extern  IDATA BYTE  PcMode;
extern  PDATA  WORD  OSDLastKeyInTime;		// in ms
extern   bit   DisplayInputHold;
extern  DATA  WORD  tic_pc;
extern  bit KeyReady;
extern  DATA BYTE Key;

extern  IDATA BYTE	RemoDataReady,RemoSystemCode, RemoDataCode;
extern	bit	        ChannelEdit_Flag;
extern 	bit			ChannelEdit_on;

#if (defined SUPPORT_CCD_VCHIP) || (defined SUPPORT_TV) || (defined SUPPORT_TELETEXT)

BYTE ToNumber( BYTE chncode )
{
	switch( chncode ) 
	{
	case REMO_NUM0:		return 0;
	case REMO_NUM1:		return 1;
	case REMO_NUM2:		return 2;
	case REMO_NUM3:		return 3;
	case REMO_NUM4:		return 4;
	case REMO_NUM5:		return 5;
	case REMO_NUM6:		return 6;
	case REMO_NUM7:		return 7;
	case REMO_NUM8:		return 8;
	case REMO_NUM9:		return 9;
	default: return 0xff; 
	}
}
#endif

void RemoMenu_MenuKey(void)
{
	if(  GetDisplayedOSD() & MENU  ) 		OSDHighMenu();
	else 									OpenOSDMenu();
}

void RemoChnUp_UpKey(void)
{

	#ifdef SUPPORT_DEBUG
	if( Debug_On )
	 {
		DebugWindowData(UP);
		return;
	}
	else 
	#endif	
	if( GetDisplayedOSD() & MENU  )	
		#ifdef PAL_TV
		if( ChannelEdit_Flag)
		 {
			if( ChannelEdit_on )				
				ChannelEdit_Char(UP);
			else 
			{		
				UpDownTVChannel(DN);
				ChannelEdit_display();
			}
		}
		else
		#endif	
		#ifdef SUPPORT_CCD_VCHIP
		if( VchipWindow_On == 1 )			
			ChangeVchip_LevelCursor(DN);
		else
		#endif
			OSDCursorMove(UP);	
	#ifdef SUPPORT_PC
	else if( GetInputSelection()==PC )		
	AutoAdjust();

		/*{ 
								ClearOSDInfo();
								DisplayAutoAdjust();
								DetectAndSetForVGAInput(0);
								ClearAutoAdjust();
								LCDPowerON(0); }*/
	#endif

	#ifdef SUPPORT_TV
	else if( GetInputSelection() == TV )	
		UpDownTVChannel(UP);
	#endif
	else	
		return;

}

void RemoChnDn_DnKey(void)
{

	#ifdef SUPPORT_DEBUG
	if( Debug_On )
	 {
		DebugWindowData(DN);
		return;
	}
	else 
	#endif	
	if( GetDisplayedOSD() & MENU  )
	 {
		#ifdef PAL_TV
		if( ChannelEdit_Flag)
		{
			if( ChannelEdit_on )					ChannelEdit_Char(DN);
			else 
			{		
				UpDownTVChannel(UP);
				ChannelEdit_display();
			}
		}
		else
		#endif
		#ifdef SUPPORT_CCD_VCHIP
		if( VchipWindow_On == 1 )				ChangeVchip_LevelCursor(UP);
		else
		#endif
			OSDCursorMove(DN);	
	}
	#ifdef SUPPORT_TV
	else if( GetInputSelection() == TV )	UpDownTVChannel(DN);
	#endif
	else	
		return;

}

void RemoVolUp_RightKey(void)
{
	#ifdef SUPPORT_DEBUG
	if( Debug_On ) 
	{
		DebugWindowCursor(UP);
		return;
	}
	else 
	#endif	
	if(  GetDisplayedOSD() & MENU  ) 
	{
		if( OnChangingValue ) 						OSDValueUpDn(UP );
		#ifdef PAL_TV
		else if( ChannelEdit_Flag )					ChannelEdit_Cursor (UP);
		#endif
		#ifdef SUPPORT_CCD_VCHIP
		else if( VchipWindow_On == 1 )				ChangeVchip_ContentCursor(UP);
		#endif
		else										OSDSelect();			
	}
	else 
	{
		ChangeVol(1);
		DisplayVol();
	}
}

void RemoVolDn_LeftKey(void)
{
	#ifdef SUPPORT_DEBUG
	if( Debug_On ) 
	{
		DebugWindowCursor(DN);
		return;
	}
	else 
	#endif
	if(  GetDisplayedOSD() & MENU  ) 
	{
		if( OnChangingValue )						OSDValueUpDn(DN );
		#ifdef PAL_TV
		else if( ChannelEdit_Flag )					ChannelEdit_Cursor (DN);
		#endif
		#ifdef SUPPORT_CCD_VCHIP
		else if( VchipWindow_On == 1 )				ChangeVchip_ContentCursor(DN);
		#endif
		else OSDHighMenu();	
	}
	else 
	{
		ChangeVol(-1);
		DisplayVol();
	}
}


//=============================================================================
//
//=============================================================================
BYTE ActionRemo(BYTE _RemoDataCode, BYTE AutoKey)
{

	SetOSDLastKeyInTime();
	
	#if (defined SUPPORT_PC) || (defined SUPPORT_DTV) 	

	if( (PcMode==EE_PC_NO_SIGNAL) && (GetInputSelection()==PC || GetInputSelection()==DTV) ) 
	{
		if( PcMode==EE_PC_NO_SIGNAL )
		 {
			switch (_RemoDataCode)
			 {
			case REMO_INPUT:
			//case REMO_STANDBY:	
				break;
				
			default:
				tic_pc = 0;
				return 1;
			}
		}
	}
	#endif // SUPPORT_PC

	switch(_RemoDataCode)
	 {

	case REMO_STANDBY:				// power
		//Printf("\r\n Power RemoKey In..");
		OSDLastKeyInTime = 0xffff;
		if( AutoKey ) return 1;
		return 0;					// power off

	case REMO_MUTE:
		if( AutoKey ) return 1;
		ToggleAudioMute();
		if( IsAudioMuteOn() )		
		DisplayMuteInfo();
		else
		{						
			ClearMuteInfo();
			if( DisplayInputHold ) 
			DisplayInput();
		}
		break;

	case REMO_INPUT:
		ChangeInput(GetNextInputSelection());
		return 1;

	case REMO_INFO:
		if( GetDisplayedOSD() & INPUTINFO )
			ClearInput();
		else	
			DisplayInput();
		return 1;

	#ifdef SUPPORT_CCD_VCHIP
	case REMO_CC:
		if( GetDisplayedOSD() & CC ) break;
		SetCCFlag(CC_CC1);
		if( !(GetDisplayedOSD() & MENU)  ) 
			 InitClosedCaption();
		break;
	#endif
	
	case REMO_NUM0:
	case REMO_NUM1:
	case REMO_NUM2:
	case REMO_NUM3:
	case REMO_NUM4:
	case REMO_NUM5:
	case REMO_NUM6:
	case REMO_NUM7:
	case REMO_NUM8:
	case REMO_NUM9:
		if( AutoKey )								return 1;

		#ifdef SUPPORT_TELETEXT
		else if( IsTeleTextOn() )              		TeleTextNumber(_RemoDataCode);	// Number keys of remocon 
		#endif 
		
		#ifdef SUPPORT_CCD_VCHIP
		else if( GetDisplayedOSD() & MENU  )		OSDNumber( ToNumber(_RemoDataCode) );
		#endif

		#ifdef SUPPORT_TV
		else if( GetInputSelection() == TV )		EditTVChn( ToNumber(_RemoDataCode) );
		#endif
		else										return 1;
		break;

	case REMO_CHNUP:
		//#ifdef SUPPORT_TELETEXT
		//if( IsTeleTextOn() ) TeleTextPageUp(); else
		//#endif

		RemoChnUp_UpKey();
		break;
	
	case REMO_CHNDN:
		//#ifdef SUPPORT_TELETEXT
		//if( IsTeleTextOn() ) TeleTextPageDown(); else
		//#endif

		RemoChnDn_DnKey();
		break;
	
	case REMO_SELECT:
		if( AutoKey ) return 1;
		if(  GetDisplayedOSD() & MENU  )		
		{
			#ifdef SUPPORT_CCD_VCHIP
			if( VchipWindow_On == 1 )	Select_VchipLevel();	
			else	
			#endif
				OSDSelect();
		}
		break;

	case REMO_VOLUP:
		RemoVolUp_RightKey();
		break;
	case REMO_VOLDN:
		RemoVolDn_LeftKey();
		break;


	case REMO_MENU:
		if( AutoKey ) return 1;
		RemoMenu_MenuKey();
		break;

	case REMO_EXIT:
		if(  GetDisplayedOSD() & MENU  )		
			DoAction(EXITMENU);
		break;

	#ifdef SUPPORT_PC
	case REMO_AUTO:
		if( GetInputSelection()==PC )
			AutoAdjust();
		break;
	#endif

	#ifdef WIDE_SCREEN
	case REMO_ASPECT:
		SetItemValue(WIDESCREEN,UP);
		break;
	#endif
/*	#ifdef SUPPORT_TV
	#ifdef REMO_TV
	case REMO_TV:
		ChangeInput(TV);
		break;
	#endif
	#endif

	#ifdef REMO_VCR
	case REMO_VCR:
		ChangeInput(COMPOSITE);
		break;
	#endif

	#ifdef SUPPORT_SVIDEO
	#ifdef REMO_SVIDEO
	case REMO_SVIDEO:			//AV
		ChangeInput(SVIDEO);
		break;
	#endif
	#endif
*/	
	}
	#ifdef PAL_TV
	 if(ChannelEdit_Flag)
	  {
		switch(_RemoDataCode) 
		{		
		case REMO_TTXRED:		ChannelEdit_Move(UP);		break;
		case REMO_TTXGREEN:		ChannelEdit_Move(DN);		break;
		case REMO_TTXYELLOW:	ChannelEdit_Skip();		break;
		case REMO_TTXCYAN:		ChannelEdit_Edit();		break;
		}
	}
	#endif

	#ifdef SUPPORT_DEBUG
	switch(_RemoDataCode) 
	{		
	case REMO_DEBUG:		DebugWindowControl();		break;
	case REMO_READ:			Debug_Read();		break;
	case REMO_WRITE:		Debug_Write();	
							Debug_Read();	// Read back
												break;
	}
	#endif


	#ifdef SUPPORT_TELETEXT

	if( IsTeleTextOn() ) 
	{

//		TeleTextNumber(_RemoDataCode);	// Number keys of remocon 
		
		switch(_RemoDataCode) 
		{		// in text mode
		case REMO_TTXONOFF:		TeleTextONOFF();		break;
//		case REMO_TTXOFF:		TeleTextOFF();			break;
		case REMO_TTXRED:		TeleTextRed();			break;
		case REMO_TTXGREEN:		TeleTextGreen();		break;
		case REMO_TTXYELLOW:	TeleTextYellow();		break;
		case REMO_TTXCYAN:		TeleTextCyan();			break;
		case REMO_TTXHOLD:		TeleTextHold();			break;
		//case REMO_TTXTIME:		TeleTextTime();			break;	// tv mode
		case REMO_TTXSIZE:		TeleTextSize();			break;
		case REMO_TTXINDEX:		TeleTextIndex();		break;
		case REMO_TTXCANCEL:	TeleTextCancel();		break;
//		case REMO_TTXMODE:		TeleTextMode();			break;	// ???
		case REMO_TTXPAGEUP:	TeleTextPageUp();		break;
		case REMO_TTXPAGEDOWN:	TeleTextPageDown();		break;
		case REMO_MIX:			TeletextMix();			break;	
		default:				break;
		}
	}
	else if( _RemoDataCode == REMO_TTXONOFF ) TeleTextONOFF();
		
	#endif // SUPPORT_TELETEXT

	return 1;
}


BYTE ChcekKeyIn(void)
{
	BYTE ret=1, ikey;
//	if( (ikey = keyIn()) ) {

	if( (ikey = GetKey(1)) )
	 {

		#if (defined SUPPORT_PC) || (defined SUPPORT_DTV) 	
		if( (PcMode==EE_PC_NO_SIGNAL) && (GetInputSelection()==PC || GetInputSelection()==DTV) )
		 {
			if( PcMode==EE_PC_NO_SIGNAL )
			 {
				switch (ikey) 
				{
				case INPUTSOURCEKEY:
				//case POWERKEY:	
					break;

				default:
					tic_pc = 0;
					return 1;
				}
			 }
		 }
		#endif // SUPPORT_PC
		SetOSDLastKeyInTime();
		switch( ikey )
		 {

			#ifdef POWERKEY
			case  POWERKEY :
				ret = ActionRemo( REMO_STANDBY, RepeatKey );					break;
			#endif

			case MENUKEY:
				ret = ActionRemo( REMO_MENU, RepeatKey );						break;

			//------------------------------------------------------------------------		
			#ifdef SUPPORT_SELECTKEY
			case UPKEY:
				if(  GetDisplayedOSD() & MENU  ) 
					if( OnChangingValue )			
						OSDValueUpDn(UP );
					else							
						OSDCursorMove( UP );

				#ifdef SUPPORT_TV
				else if( GetInputSelection() == TV )	UpTVChannel();
				#endif
				else	
					return 1;
				break;
			case DOWNKEY:
				if(  GetDisplayedOSD() & MENU  ) 
					if( OnChangingValue )				
					OSDValueUpDn(DN );
					else							
					OSDCursorMove( DN );

				#ifdef SUPPORT_TV
				else if( GetInputSelection() == TV )	DownTVChannel();
				#endif
				else	
					return 1;
				break;

			case SELECTKEY:
				if(  GetDisplayedOSD() & MENU  ) 
				{
					if( OnChangingValue ) 			
					SaveValue1();
					else							
					OSDSelect();			
				}
				break;
			#else
			//------------------------------------------------------------------------		
			case UPKEY:		ret = ActionRemo( REMO_CHNUP, RepeatKey );	break;
			case DOWNKEY:	ret = ActionRemo( REMO_CHNDN, RepeatKey );	break;
			case LEFTKEY:	ret = ActionRemo( REMO_VOLDN, RepeatKey );	break;
			case RIGHTKEY:	ret = ActionRemo( REMO_VOLUP, RepeatKey );	break;
			#endif
			//------------------------------------------------------------------------		

			case INPUTSOURCEKEY:
				ret = ActionRemo( REMO_INPUT, RepeatKey );					break;
		}
//		WaitKeyClear(ikey);
	}
	return ret;
}

//=============================================================================
//		Get Key 
//=============================================================================
BYTE GetKey(BYTE repeat)
{
	bit ready;

	ready = KeyReady;
	KeyReady = 0;

	if( !ready ) return 0;
	if( repeat ) return Key;
	if( !RepeatKey ) return Key;

	return 0;
}


//=============================================================================
//		CheckRemo
//=============================================================================
#ifdef REMO_RC5

BYTE IsRemoDataReady(BYTE *DataCode, BYTE *AutoKey)
{
	bit togglebit;
	static bit	LastToggle=0;
	static BYTE AutoWait=0;

	BYTE _RemoSystemCode, _RemoDataCode, _RemoDataReady;

	if( !RemoDataReady ) return 0;

	_RemoDataReady = RemoDataReady;
	_RemoDataCode = RemoDataCode;
	_RemoSystemCode = RemoSystemCode;

	*AutoKey = 0;

	EnableRemoconInt();

	#ifdef DEBUG_KEYREMO
	Printf("\r\n(CheckRemo)R-S:%02x, R-D:%02x", (WORD)_RemoSystemCode, (WORD)_RemoDataCode);
	#endif

	if( (_RemoSystemCode & 0xc0) != 0xc0 ) return 0;
	if( (_RemoSystemCode & 0x1f) != REMO_CUSTOM ) return 0;

	togglebit = LastToggle;
	if( _RemoSystemCode & 0x20 ) LastToggle = 1;
	else LastToggle = 0;

	#ifdef DEBUG_KEYREMO
	dPrintf("**** %d  %d ", (WORD)LastToggle, (WORD)_RemoDataReady);
	#endif

	if( LastToggle != togglebit )
	 {			// new key
		AutoWait =  0;
	 }
	else if( AutoWait>=4 )
	 {				// auto key
		AutoWait++;
		if( AutoWait>=6 ) 
		{
			AutoWait = 4;
			*AutoKey = 1;
		}
		else return 0;
	 }
	else 
	{									// wait auto key
		AutoWait++;
		return 0;
	}
	
	#ifdef DEBUG_KEYREMO
	if( *AutoKey )
	 {
		dPuts(" ---> AutoKey ");
	 }
	else 
	{
		dPuts(" ---> New Key ");
	}
	#endif

	*DataCode = _RemoDataCode;
	return 1;
}

#elif defined REMO_NEC
extern 		BYTE	 RemoData[4];

BYTE IsRemoDataReady(BYTE *DataCode, BYTE *AutoKey)
{
	static BYTE AutoWait=0;
	static IDATA BYTE LastDataCode=0xff;
	static IDATA BYTE repeatcnt=0;
	BYTE ret =0 ;

	*AutoKey = 0;
	switch ( RemoDataReady ) 
	{

	case 0: return 0;

	case 1:
		#ifdef DEBUG_KEYREMO
		Printf("\r\nNEC RemoData = %02x %02x %02x %02x", (WORD)RemoData[0], (WORD)RemoData[1], (WORD)RemoData[2], (WORD)RemoData[3] );
		#endif
		if( (RemoData[0]==REMO_CUSTOM1) && (RemoData[1]==REMO_CUSTOM2 ) && (RemoData[2]+RemoData[3])==0xff ) 
		{
			RemoDataCode = RemoData[2];
			LastDataCode = RemoDataCode;
			AutoWait = 0;
			*AutoKey = 0;
			repeatcnt = 0;
		}
		else 
		{
			RemoDataCode = 0xff;
			LastDataCode = 0xff;
			EnableRemoconInt();		//
			return 0;
		}
		break;

	case 2:
		AutoWait++;
		if( AutoWait>=6 ) 
		{
			RemoDataCode = LastDataCode;
			repeatcnt++;
			if( repeatcnt>=5 ) 
			{
				AutoWait = 5;
			}
			else
				AutoWait = 4;

			*AutoKey = 1;
		}
		else 
		{
			EnableRemoconInt();		//
			return 0;
		}
		break;

	}

	EnableRemoconInt();		////LJY052902
	if( RemoDataCode==0xff )	return 0;

	#ifdef DEBUG_KEYREMO
	dPrintf("(R-D:%02x)  ", (WORD)RemoDataCode);
	#endif

	*DataCode = RemoDataCode;
	return 1;
}

#endif	// REMO_NEC

BYTE CheckRemo(void)
{
	BYTE AutoKey, ret=1, _RemoDataCode;

	if( IsRemoDataReady(&_RemoDataCode, &AutoKey) )
	{
		ret = ActionRemo( _RemoDataCode, (BYTE)AutoKey) ;
	}

	return ret;
}

⌨️ 快捷键说明

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