📄 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 "SRC_ctrl.h"
#define _key_def_
#include "Keypad.h"
#include "TW803Reg.h"
#include "OSDDraw.h"
#include "OSDCtrl.h"
#include "TwoWire.h"
#include "Display.h"
#include "T803_Util.h"
#include "timer0.h"
#define __GLOBAL_H__
#include "Global.h"
#define __INIT_H__
#include "init.h"
#include "OSDTbl.h"
#define _OSDMENU_H_
#include "OSDMenu.h"
#include "T803OSD.h"
#ifdef TV
#include "tuner.h"
#endif
/*
sKEYPADFLD code sKeyFlds={
//PORT MASK FLAGS/SHIFT
KEYPORT2, 0x3f, 0x00
};
*/
//void (*f1)(void);
void kyKeypadInit(void)
{
m_wAccelPollCnt=0;
m_cCurreKey=m_cPreKey=0xFF;
m_cOSDMenu=idNULLMENU;
m_cItem=0;
}
void kyKeypad(void)
{
if(kyKeypadScan())
{
Timer0Reset();
kyFindFunc();
}
else
m_cPreKey=m_cCurreKey;
}
bit kyKeypadScan(void)
{
uCHAR cTemp;
while(1)
{
cTemp=ReadPort();
m_cCurreKey=sKeyFlds.cMask&(0xFF-cTemp);
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;
if(!m_cCurreKey) //no key pressed
return 0;
}
}
}
void kyFindFunc(void)
{
kyFindEvent();
}
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();
}
else if(m_cCurreKey==kyMENU)
{
return kyMENUEvent();
}
else if(m_cCurreKey==kyINCREASE)
{
return kyINCREASEEvent();
}
else if(m_cCurreKey==kyDECREASE)
{
return kyDECREASEEvent();
}
else if(m_cCurreKey==kyEXIT)
{
if(m_cOSDMenu==idNULLMENU)
{
return IRNTSC_PALCtrl();
}
else
{
return IRDownKeyCtrl();
}
}
else if(m_cCurreKey==kyPOWER)
{
return kyPOWEREvent();
}
}
//Ruby add 2004-06-07
bit kySCALEREvent(void)
{
//void (*fff1)(void);
uCHAR SlaveAddr,RegAddrShift;
m_cScaleratio++;
if(m_cScaleratio>=ScaleEnd)
m_cScaleratio=ScaleFULL;
#ifdef T515
if(EepPublic.cSource >= isrc_T515_CVIDEO1){
SlaveAddr=0xb8;
RegAddrShift=0x20;
}else{
SlaveAddr=0x54;
RegAddrShift=0x00;
}
#else
SlaveAddr=0x54;
RegAddrShift=0x00;
#endif
if((ALL_MENU[m_cOSDMenu]->Par[m_cItem].cDataAttr&OSD_FUNC1) && ((ALL_MENU[m_cOSDMenu]->Par[m_cItem].func1)!=NULL)){
ALL_MENU[m_cOSDMenu]->Par[m_cItem].func1();
}else if(I2CReadByte(SlaveAddr, 0x3A+RegAddrShift)&0x06 && ((ALL_MENU[m_cOSDMenu]->Par[m_cItem].func1)!=NULL) ){
SetOPTiming(); // Add by Sherman 05'11'18
OSDShowRatio();
}
return 1;
}
bit kyMENUEvent(void)
{
if((++m_cOSDMenu)>idNULLMENU)
m_cOSDMenu=0;
m_cItem=0;
#ifdef TV
if((uiaSrcMux1[EepPublic.cSource].VideoType!=itypeTV)&&(m_cOSDMenu==idTVMENU))
if((++m_cOSDMenu)>idNULLMENU)
m_cOSDMenu=0;
if((uiaSrcMux1[EepPublic.cSource].VideoType!=itypeTV)&&(m_cOSDMenu==idTVFAVOMENU))
if((++m_cOSDMenu)>idNULLMENU)
m_cOSDMenu=0;
#endif
#ifdef PC_MODE
if((uiaSrcMux1[EepPublic.cSource].VideoType!=itypeRGB)&&(m_cOSDMenu==idVGAMENU))
if((++m_cOSDMenu)>idNULLMENU)
m_cOSDMenu=0;
#endif
#ifdef TV
if((uiaSrcMux1[EepPublic.cSource].VideoType==itypeTV)&&(m_cOSDMenu==idTVFAVOMENU)){
I2CWriteByte(EEPGLOBAL_BLOCK , EEPTV_OFFSET+TV_ChanelIndex,0x00);
twdDelay(5);
}
#endif
if(m_cOSDMenu>=idNULLMENU){
OSDDisable();
}else{
OSDReadData(m_cOSDMenu);
OSDOpenMenu();
}
Timer0Start();
return 1;
}
bit kyINCREASEEvent(void)
{
if(m_cOSDMenu==idNULLMENU)
{
#ifdef TV
if(uiaSrcMux1[EepPublic.cSource].VideoType==itypeTV){
return IRUpKeyCtrl();
}
#endif
}
else
{
OSDItemAdj(INCREASE);
Timer0Start();
}
return 1;
}
bit kyDECREASEEvent(void)
{
if( m_cOSDMenu==idNULLMENU)
{
#ifdef TV
if(uiaSrcMux1[EepPublic.cSource].VideoType==itypeTV){
return IRDownKeyCtrl();//0;
}
#endif
}
else
{
OSDItemAdj(DECREASE);
Timer0Start();
}
return 1;
}
bit kyPOWEREvent(void)
{
m_bFactryMode = 0;
if(m_bKyBlocked) m_bKyBlocked=0;
//ruby m_cOSDEvent=POWERMANAGE;
return 1;
}
#ifdef ROTATE
bit kyDismodeEvent()
{
/*
sbit LEFT_RIGHT = P0^0; 1: LEFTtoRIGHt, 0: RIGHTtoLEFT
sbit UP_DOWN = P0^1; 1: Down, 0: UP
*/
#ifdef _480_234 //KVGA
if((++Dis_Mode)>=VALID_DIR)
Dis_Mode=TOP_LEFT;
SET_Dismod();
#endif
#ifdef _800_480 //WVGA
if((++Dis_Mode)>=VALID_DIR)
Dis_Mode=TOP_LEFT;
SET_Dismod();
#endif
return 1;
}
#endif
/////////////////
//Thomas
bit IRUpKeyCtrl(void)
{
#ifdef TV
if (uiaSrcMux1[EepPublic.cSource].VideoType==itypeTV && m_cOSDMenu == idNULLMENU){
SearchVaildCahnnel(1); //Filter out the skipped channel
ChannelSel();
OSDTVShowChannel(EepTV.cChannelNum);
}else
#endif
if(m_cOSDMenu != idNULLMENU){
OSDClearCursor();
if(m_bOSDEnable)
m_cItem--;
if(m_cItem==0xff)
m_cItem=ALL_MENU[m_cOSDMenu]->Item_Num-1;
#ifdef TV
if(m_cOSDMenu == idTVFAVOMENU){
OSDCleanLine(19,0,0,32);
I2CWriteByte(EEPGLOBAL_BLOCK , EEPTV_OFFSET+TV_ChanelIndex,0x00);
twdDelay(5);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -