📄 keypad.c
字号:
//---------------------------------------------------------------------------
// Terawins Inc. Company Confidential Strictly Private
//
// $Archive: Keypad.c $
// $Revision: 0.01 $
// $Author: jwang $
// $Date: 2002/06/19 23:49:23 $
//
// --------------------------------------------------------------------------
// >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
// --------------------------------------------------------------------------
// Copyright 2002 (c) Terawins Inc.
// This is an unpublished work.
// --------------------------------------------------------------------------
#include <reg51.h>
#include "common.h"
#include "System.h"
#include "Struct.h"
#include "Keypad.h"
#include "TW101Reg.h"
#include "OSDDraw.h"
#include "OSDCtrl.h"
#include "TwoWire.h"
#include "Display.h"
#include "T101_Util.h"
#include "video.h"
extern void CVBS_S1(void);
extern void CVBS_S2(void);
extern void CVBS_S3(void);
extern void CVBS_S4(void);
extern void SVideo_S(void);
extern bit ChangeLang;
extern bit Key;
extern bit AdjustSig;
#ifdef T515
void switch_T515(uCHAR);
#endif
#ifdef TIMER0
extern void Timer0Reset(void);
extern void Timer0Stop(void);
extern void Timer0Start(void);
#endif
extern bit m_bKyPowerOn;
typedef struct tag_sKEYPAD_FLD
{
uCHAR cAddress; // Address of field
uCHAR cMask; // Mask for field after shifted right
uCHAR cFlagsShift; // Flags & Shift byte:
// [7] Type: 1=external, 0=internal
// [6] Polarity: 1=high true, 0=low true
// [4] Shift direction: 1=left, 0=right
// [2:0] Shift to Right Justify
} sKEYPADFLD;
#define nKEYFLDS 1
sKEYPADFLD code sKeyFlds={
//PORT MASK FLAGS/SHIFT
KEYPORT2, 0x1f, 0x00
};
uCHAR idata m_cCurreKey;
uCHAR idata m_cPreKey;
uWORD idata m_wAccelPollCnt;
extern uCHAR idata m_cTV_Num;
extern bit m_bTV_Num_Bits;
extern bit m_bFactryReady;
extern bit m_bFactryMode;
extern uCHAR m_cFactryCnt;
extern bit m_bRelease;
extern bit m_bChipPowerOn;
extern bit m_bKyBlocked;
extern uCHAR idata m_cOSDEvent;
extern uCHAR idata m_cOSDFunc;
extern uCHAR idata m_cOSDMenu;
extern uCHAR idata m_cOSDFactoryMenu;
extern uCHAR idata m_cSource;
extern uCHAR idata m_cMode;
extern uWORD idata m_wBuff[3];
extern uCHAR idata m_cBuff[5];
extern uDWORD m_dwBuff[2];
extern uCHAR idata m_cScaleratio;
extern uWORD m_wHRes;
extern uWORD m_wVRes;
extern uWORD idata m_wVTotal;
extern uCHAR idata m_cStandard;
extern uCHAR idata m_cLang;
uCHAR idata ChangeTime;
extern EEPVIDEO idata EepVideo;
void kyKeypadInit(void)
{
m_wAccelPollCnt=0;
m_cCurreKey=m_cPreKey=0xFF;
m_cOSDEvent=0;
m_cOSDFunc= 0;
m_cOSDMenu=idNULLMENU;
m_cOSDFactoryMenu=ifaNULLMENU;
}
void kyKeypad(void)
{
if(kyKeypadScan())
{
Timer0Reset();
kyFindFunc();
//kyFindEvent();//add by cwyong
}
else
m_cPreKey=m_cCurreKey;
// if((m_cCurreKey == kySOURCE)&&((m_cSource == isrc_T515_CVIDEO1)||(m_cSource == isrc_T515_CVIDEO2)))
// kyPOWEREvent();
}
bit kyKeypadScan(void)
{
uCHAR cTemp;
while(1)
{
cTemp=ReadPort();
//if(cTemp)
// Tpoint=~Tpoint;
m_cCurreKey=sKeyFlds.cMask&(0xFF-cTemp);
#if 1
if(m_cCurreKey==kySOURCE || m_cCurreKey==kyMENU || m_cCurreKey==kyPOWER)//
{
if(!m_bRelease)
{
m_bRelease=1;
return 1;
}
}
else
{
m_bRelease=0;
if(m_cCurreKey)
return 1;
else if(!m_cCurreKey) //no key pressed
return 0;
}
#else
if(m_cCurreKey==m_cPreKey)
return 0;
else
return 1;
#endif
}
/*
cTemp=ReadPort();
m_cCurreKey=sKeyFlds.cMask&(0xFF-cTemp);
return 1;
*/
}
void kyFindFunc(void)
{
#if 1
if(m_cCurreKey==m_cPreKey)
{
if(!kyIncPollCount())
{
//Tpoint = ~ Tpoint;
if(kyFindEvent())
OSDEventMgr();
}
}
else
{
if(kyFindEvent())
{
if(m_cOSDEvent!=FUNCOUNT)
OSDEventMgr();
m_cPreKey=m_cCurreKey;
m_wAccelPollCnt=0;
kyIncPollCount();
}
}
#else
kyFindEvent();
#endif
/* if(!kyIncPollCount())
{
//Tpoint = ~ Tpoint;
if(kyFindEvent())
OSDEventMgr();
} */
}
uCHAR ReadPort(void)
{
uCHAR cKey;
switch(sKeyFlds.cAddress){
case 0: cKey=P0; break;
case 1: cKey=P1; break;
case 2: cKey=P2; break;
case 3: cKey=P3; break;
}
return cKey;
}
extern bit m_bAdjRGBColor;
bit kyFindEvent(void)
{
if(m_cCurreKey==kySOURCE)
{
return IRSourceSelKeyCtrl();//kyEXITEvent();
}
else if(m_cCurreKey==kyMENU)
{
if(AdjustSig==1)
return kyMENUEvent();
}
else if(m_cCurreKey==kyINCREASE)
{
return kyINCREASEEvent();
}
else if(m_cCurreKey==kyDECREASE)
{
return kyDECREASEEvent();
}
else if(m_cCurreKey==kyEXIT)
{
if(m_cOSDFunc == 0)
{
return IRNTSC_PALCtrl();
}
else
{
return IRDownKeyCtrl();
}
}
else if(m_cCurreKey==kyPOWER)
{
return kyPOWEREvent();
}
}
//Ruby add 2004-06-07
bit kySCALEREvent(void)
{
m_cOSDMenu=idNULLMENU;
m_cOSDFunc=0;
m_cOSDEvent=CLOSEMENU;
OSDClearPage();
OSDEnable();
if(AdjustSig==0)
OSDInit();
m_cScaleratio++;
if(m_cScaleratio>=ScaleEnd)
m_cScaleratio=ScaleFULL;
IRScaleratioCtrl();
OSDShowRatio();
return 1;
}
bit kyMENUEvent(void)
{
if(AdjustSig == 0)
Key = 1;
else if(AdjustSig == 1)
Key = 0;
if(m_bKyBlocked)
return 0;
//if(FactoryModeEn==0)
//{
switch(m_cOSDMenu)
{
case idNULLMENU:
m_cOSDMenu=idVIDEOMENU;m_cOSDFunc=idBRIGHTMENU;m_cOSDEvent=OPENMENU;ChangeTime=0;
if(AdjustSig == 0) OSDInit();
break;
/*#ifdef TV
case idVIDEOMENU:
if((m_cSource&0x0F)==(isrcTV))
{m_cOSDMenu=idTVMENU;m_cOSDFunc=idBRIGHTMENU;m_cOSDEvent=OPENMENU;m_cItem=1;break;}
else
{m_cOSDMenu=idNULLMENU;m_cOSDFunc=0;m_cOSDEvent=CLOSEMENU;m_cItem=0;break;}
#endif
default:
//m_cOSDMenu=idNULLMENU;m_cOSDFunc=0;m_cOSDEvent=CLOSEMENU;m_cItem=0;break; */
case idVIDEOMENU:
if((m_cOSDFunc==idLANGUAGEMENU)&&(ChangeTime%2==0))
{
m_cOSDMenu=idNULLMENU;
m_cOSDFunc=0;
m_cOSDEvent=CLOSEMENU;
OSDClearPage();
OSDEnable();
}
else if((m_cOSDFunc==idLANGUAGEMENU)&&(ChangeTime%2==1))
{
m_cOSDEvent = FUNCADJ_IN;
m_cLang++;
if(m_cLang>=L_END) m_cLang=L_ENGLISH;
if(m_cLang<L_ENGLISH) m_cLang=L_CHINESE;
I2CWriteByte(EEPVIDEOBLOCK,idVIDEO_LANGUAGE_INDEX,m_cLang);
OSDInit();
SourceSelect();
m_cOSDMenu=idVIDEOMENU;m_cOSDFunc=idBRIGHTMENU;m_cOSDEvent=OPENMENU;ChangeTime=0;
}
else
IRDownKeyCtrl();
break;
}
// }
/*
else if(FactoryModeEn==1)
{
if(m_cOSDFunc ==ifaHUEMENU)
{
m_cOSDMenu=ifaNULLMENU;
m_cOSDFunc=0;
m_cOSDEvent=CLOSEMENU;
m_cItem=0;
FactoryModeEn=0;
OSDClearPage();
OSDEnable();
}
else
IRDownKeyCtrl();
}
*/
return 1;
}
/*bit kyMENUEvent(void)
{
if(m_bKyBlocked)
return 0;
switch(m_cOSDFunc)
{
case idNULLMENU:
//m_cOSDFunc=idBRIGHTMENU;m_cOSDEvent=FUNCENTER;m_cItem=1;break;
m_cOSDMenu=idVIDEOMENU;m_cOSDFunc=idBRIGHTMENU;m_cOSDEvent=OPENMENU;m_cItem=1;break;
case idBRIGHTMENU:
m_cOSDFunc=idCONTRASTMENU;m_cOSDEvent=FUNCENTER;m_cItem=2;break;
case idCONTRASTMENU:
m_cOSDFunc=idSHARPMENU;m_cOSDEvent=FUNCENTER;m_cItem=3;break;
case idSHARPMENU:
{
m_cOSDFunc=idSATMENU;
m_cOSDEvent=FUNCENTER;
m_cItem=4;
}
break;
case idSATMENU:
m_cOSDFunc=idHUEMENU;m_cOSDEvent=FUNCENTER;m_cItem=5;break;
case idHUEMENU:
m_cOSDEvent=CLOSEMENU;m_cItem=1;break;
}
return 1;
}
*/
bit kyINCREASEEvent(void)
{
if(m_bKyBlocked) return 0;
if(!m_cOSDFunc&&m_bFactryMode) return 0;
if(m_cOSDFunc==0)
{
#ifdef TV
if((m_cSource&0x0F)==(isrcTV))
{
return IRUpKeyCtrl();//0;
}
#endif
/*
//add by zjl
OSDPosition(CENTER);
OSDEnable();
m_cOSDEvent=FUNCADJ_IN;
AdjVolume(1);
OSDDrawGauge(EepVideo.cVolume,0xff,0,7,COL_GAUGE);
OSDDrawNum (EepVideo.cVolume,0xff,NUM_STAT,7,0x09,DRAW_BLANK|0x03);
// end of by zjl
*/
}
else
m_cOSDEvent=FUNCADJ_IN;
return 1;
}
bit kyDECREASEEvent(void)
{
if(m_bKyBlocked) return 0;
if(!m_cOSDFunc&&m_bFactryMode) return 0;
if(m_cOSDFunc==0)
{
#ifdef TV
if((m_cSource&0x0F)==(isrcTV))
{
return IRDownKeyCtrl();//0;
}
#endif
/*
//add by zjl
OSDPosition(CENTER);
OSDEnable();
m_cOSDEvent=FUNCADJ_DN;
AdjVolume(-1);
OSDDrawGauge(EepVideo.cVolume,0xff,0,7,COL_GAUGE);
OSDDrawNum (EepVideo.cVolume,0xff,NUM_STAT,7,0x09,DRAW_BLANK|0x03);
//end of by zjl
*/
}
else
m_cOSDEvent=FUNCADJ_DN;
return 1;
}
#if 0
bit kyEXITEvent(void)
{
if(m_bKyBlocked) return 0;
if(m_cOSDEvent && (m_cOSDEvent!=FUNCOUNT))
m_cOSDEvent=FUNCEXIT;
else
{
if(m_bFactryReady)
{
m_bFactryReady=0;
m_cFactryCnt=0;
}
else
{
m_cFactryCnt++;
if(m_cFactryCnt==3)
{
m_bFactryReady=1;
}
}
m_cOSDEvent=FUNCOUNT;
}
return 1;
}
#endif
bit kyPOWEREvent(void)
{
m_bFactryMode = 0;
if(m_bKyBlocked)
m_bKyBlocked=0;
m_cOSDEvent=POWERMANAGE;
Audio0 = 1; //add by cwyong for audio
Audio1 = 1;
twdDelay(100);
return 1;
}
bit kyIncPollCount(void)
{
if (m_wAccelPollCnt==0)
{
if((m_cOSDEvent==OPENMENU)||(m_cOSDEvent==FUNCENTER)||(m_cOSDEvent==CLOSEMENU)||(m_cOSDEvent==FUNCEXIT))
m_wAccelPollCnt=KEY_MENU_POLL_COUNT;
else if(m_cOSDEvent==POWERMANAGE)
m_wAccelPollCnt=KEY_POWER_SEL;
else
{
if(m_cOSDEvent==FUNCSELCT_IN || m_cOSDEvent==FUNCSELCT_DN )
m_wAccelPollCnt=KEY_SEL_POLL_COUNT;
else if((m_cOSDEvent==FUNCADJ_IN)||(m_cOSDEvent==FUNCADJ_DN))
m_wAccelPollCnt=KEY_VAL_POLL_COUNT;
}
return 0;
}
else
m_wAccelPollCnt--;
return 1;
}
#ifdef ROTATE
extern uCHAR Dis_Mode;
bit kyDismodeEvent()
{
/*
sbit LEFT_RIGHT = P0^0; 1: LEFTtoRIGHt, 0: RIGHTtoLEFT
sbit UP_DOWN = P0^1; 1: Down, 0: UP
*/
#ifdef KVGA
if((Dis_Mode++)>=VALID_DIR)
Dis_Mode=TOP_LEFT;
SET_Dismod();
#endif
#ifdef WVGA
if((Dis_Mode++)>=VALID_DIR)
Dis_Mode=TOP_LEFT;
SET_Dismod();
#endif
return 1;
}
#endif
bit kyRotate()
{
#ifdef KVGA
if(kBLACK == 0 )
Dis_Mode=TOP_LEFT;
else if(kBLACK == 1)
Dis_Mode = BOTTOM_RIGHT ;
SET_Dismod();
return 1;
#endif
}
/////////////////
/*
#ifdef TV
bit IRSetupKeyCtrl(void)
{
if(m_bKyBlocked) return 0;
if((m_cSource&0x0F)==(isrcTV))
{
if((m_cOSDFunc&0xF0)==idTVMENU_VIDEO)
{
m_cOSDEvent=FUNCEXIT;
}
else if((m_cOSDFunc==0))//&0xF0)==idMAINMENU)
{
m_cOSDFunc=idTVMENU_VIDEO;
m_cOSDEvent=FUNCENTER;
}
else return 0;
}
else
return 0;
return 1;
}
#endif
*/
/*
bit IRUpKeyCtrl(void)
{
if(m_bKyBlocked) return 0;
#ifdef TV
if((m_cOSDFunc&0xF0)==idTVMENU_VIDEO)
{
m_cOSDEvent=FUNCSELCT_DN;
return 1;
}
#endif
switch(m_cOSDFunc)
{
#ifdef TV
case 0:
{
OSDExit();
AdjTVChannel(1,0);
return 0;
}
#endif
#ifdef LOAD_TIME
case idBRIGHTMENU:
m_cOSDFunc=idTIMEMENU;m_cOSDEvent=FUNCENTER;m_cItem=6;break;
#else
case idBRIGHTMENU:
m_cOSDFunc=idHUEMENU;m_cOSDEvent=FUNCENTER;m_cItem=5;break;
#endif
case idCONTRASTMENU:
{
m_cOSDFunc=idBRIGHTMENU;
m_cOSDEvent=FUNCENTER;
m_cItem=1;//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -