?? keyremo.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;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -