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

📄 keypad.c

📁 这是T118和T103的通用程序
💻 C
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------
// 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 + -