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

📄 osdctrl.c

📁 TFT LCD驱动芯片T100A+AU7" Source code
💻 C
字号:
//---------------------------------------------------------------------------
// Terawins Inc. Company Confidential Strictly Private
//
// $Archive: OSDCtrl.c $
// $Revision: 2.0 $
// $Author: jwang $
// $Date: 2003/08/13 $
//
// --------------------------------------------------------------------------
// >>>>>>>>>>>>>>>>>>>>>>>>> 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 "TW101Reg.h"
#include "OSDCtrl.h"
#include "TwoWire.h"
#include "OSDDraw.h"
#include "Keypad.h"
//#include "SrcCtrl.h"
//#include "ModeCtrl.h"
#include "Video.h"
//#include "Auto.h"
#include "Tuner.h"

#ifdef NVRAM
#include "NVRam.h"
extern uWORD idata m_wEepRom;
#endif
extern bit m_bAir_Cable;
extern bit m_bTV_Skip;
extern uCHAR ir_data;
extern void BKPower(void);
#ifdef TIMER1
extern void Timer1Reset(void);
extern void Timer1Start(void);
extern void Timer1Stop(void);
#endif

extern uCHAR m_cSoundSystem;

extern bit m_bBKPowerOn;
extern LoadFilter(uCHAR);
extern BOOL SrcOptimizing(uCHAR cTuneType);
extern OSDPARAMS code sOSDParamsDef, sOSDParamsMin, sOSDParamsMax;
extern uCHAR idata m_cOSDEvent;
extern uCHAR idata m_cOSDFunc;
extern uCHAR idata m_cItem;
extern uCHAR idata m_cSource;
extern uCHAR code OSDPositionTable[];
extern uCHAR idata m_cBuff[4];
extern uWORD idata m_wBuff[3];

#if VIDEO_AVAILABLE
extern EEPVIDEO idata EepVideo;
#endif



unsigned char Language_Flag = ENGLISH;

void OSDItemAdj(uCHAR cAdj)
{
	  sCHAR sStep;
	  if(cAdj==INCREASE)
		  sStep=1;
	  else if(cAdj==DECREASE)
		  sStep=-1;
	
	  if(m_cOSDFunc==idVOLUMEMENU)
	  {
		    if(sStep>0)
			    AdjVolume(1);
		    else
		 	    AdjVolume(-1);
		    return;
	  }
		else if(m_cOSDFunc == idLANGUAGE_MENU)
		{
		    if((cAdj == INCREASE) || (cAdj == DECREASE))
		    {
		        if(Language_Flag == ENGLISH)
		        {
		            Language_Flag = CHINESS;
		        }
				    else 
				    {
				        Language_Flag = ENGLISH;
				    }
						OSDShowSubpage();
		    }
		}
   	OSDItemAdjVideo(sStep);
}



void OSDItemAdjVideo(sCHAR sStep)
{
	  switch(m_cOSDFunc)
	  {
	      case idBRIGHT_VIDEO:
	      case idBRIGHTMENU_VIDEO:
		        AdjVideoBright(sStep);
		        break;
	      case idCONTRAST_VIDEO:
	      case idCONTRASTMENU_VIDEO:
		        AdjVideoContrast(sStep);
		        break;
	      case idSHARP_VIDEO:
	      case idSHARPMENU_VIDEO:
		        AdjVideoSharp(sStep);
		        break;
	      case idSAT_VIDEO:	
	      case idSATMENU_VIDEO:
		        AdjVideoSat(sStep);
		        break;
	      case idHUE_VIDEO:
	      case idHUEMENU_VIDEO:
		        AdjVideoHue(sStep);
		        break;
#ifdef TV
//	case idCHANNEL_TV:
//		AdjTVChannel(sStep, 1);
//		break;
#ifdef PAL
	case iSOUNDSYSTEM_TV:
		AdjTVSoundSystem();
		break;
#endif
#ifdef NTSC
	case idSKIP_TV:
		AdjTVSkip();
		break;
	case idSOURCE_TV:
	OSDShowTVSource(sStep);
		break;
#endif
	case idFINETUNE_TV:
		AdjTVFineTune(sStep);
		break;
	case idAUTOMEMORY_TV:
		AutoMemory();
//		OSDExit();
		break;
	case idRECALL_TV:
		ResetTVChannel();
//	case idAUTOSCAN_TV:
//		AutoScan();
		break;
#endif
	default: break;
	}
}


#if 0
void AdjSharp(sCHAR sStep)
{
	if( (EepPublic.cSharp+sStep)<=sOSDParamsMax.cSharp
	  &&(EepPublic.cSharp+sStep)>=sOSDParamsMin.cSharp)
	{
			EepPublic.cSharp +=sStep;
			LoadFilter(EepPublic.cSharp);
			OSDShowData(COL_FOCUS);
	}                                                
	#ifdef NVRAM
	SavePubData(1, EepPublic.cSharp, idSHARP_INDEX);
	#endif
}


void AdjOSDHPos(sCHAR sStep)
{
	uCHAR i;
	if( (EepPublic.cOSDHPos+sStep)<=sOSDParamsMax.cOSDHPos
	  &&(EepPublic.cOSDHPos+sStep)>=sOSDParamsMin.cOSDHPos)
	{
    	EepPublic.cOSDHPos+=sStep;
		i=((EepPublic.cOSDVPos&0xe0)>>1)|((EepPublic.cOSDHPos&0xe0)>>5);
		OSDCfgWr(CHAR_DLY_0,i);
		i=EepPublic.cOSDHPos<<3;
		OSDCfgWr(CHAR_DLY_1,i); 
	}

	#ifdef NVRAM
	SavePubData(1, EepPublic.cOSDHPos, idOSDHPOS_INDEX);
	#endif
}

void AdjOSDVPos(sCHAR sStep)
{
	if( (EepPublic.cOSDVPos+sStep)<=sOSDParamsMax.cOSDVPos
	  &&(EepPublic.cOSDVPos+sStep)>=sOSDParamsMin.cOSDVPos)
	{
    	EepPublic.cOSDVPos+=sStep;
		OSDCfgWr(CHAR_DLY_0,((EepPublic.cOSDVPos&0xe0)>>1)|((EepPublic.cOSDHPos&0xe0)>>5));
		OSDCfgWr(CHAR_DLY_2,EepPublic.cOSDVPos<<3); 
    }

	#ifdef NVRAM
	SavePubData(1, EepPublic.cOSDVPos, idOSDVPOS_INDEX);
	#endif
}
#endif

void AdjVolume(sCHAR sStep)
{
	if( (EepVideo.cVolume+sStep)<=sOSDParamsMax.cVolume
	  &&(EepVideo.cVolume+sStep)>=sOSDParamsMin.cVolume)
	{
		EepVideo.cVolume += sStep;
	   I2CWriteByte(PT2313, (0x3f-EepVideo.cVolume),(0x3f-EepVideo.cVolume));
//	   I2CWriteByte(TW101, 0xE9, EepVideo.cVolume);
		OSDShowVideoData();
		if(EepVideo.cVolume==sOSDParamsMin.cVolume)
			AUDIO_MUTE=1;  //MUTE audio
		else
			AUDIO_MUTE=0;  //open audio	
	}
	
	#ifdef NVRAM
	I2CWriteByte(EEPVIDEOBLOCK, idVIDEO_VOLUME_INDEX, EepVideo.cVolume);
	#endif
	return;

}

#if 0
void AdjBackLight(sCHAR sStep)
{
	if( (EepPublic.cBkLight+sStep)<=sOSDParamsMax.cBkLight
	  &&(EepPublic.cBkLight+sStep)>=sOSDParamsMin.cBkLight)
	{
		EepPublic.cBkLight += sStep;
		I2CWriteByte(TW702,BLH1,BL_HIGHOFFSET+EepPublic.cBkLight*BL_STEP);
		I2CWriteByte(TW702,BLH3,0x40);
		I2CWriteByte(TW702,BLL1,0xff - (BL_HIGHOFFSET+EepPublic.cBkLight*BL_STEP));
	}
	#ifdef NVRAM
		SavePubData(1, EepPublic.cBackLight, idBACKLIGHT_INDEX);
	#endif
}
#endif

#if VIDEO_AVAILABLE
void AdjVideoBright(sCHAR sStep)
{
	if( (EepVideo.cBright+sStep)<=V_BRIGHT_MAX && (EepVideo.cBright+sStep)>=V_BRIGHT_MIN)
	{
		EepVideo.cBright+=sStep;
		I2CWriteByte(TW101,VBRIGHT,EepVideo.cBright);  //Ruby 2004-10-09
//		I2CWriteByte(VIDEO_ADDR,VBRIGHT,EepVideo.cBright);
		OSDShowVideoData();
		I2CWriteByte(EEPVIDEOBLOCK, idVIDEO_BRIGHT_INDEX, EepVideo.cBright);
		twdDelay(NVRDELAY);
		#if 0
		//#ifdef NVRAM
		SavePriData(1, EepPrivate.cVPos, idVPOS_INDEX);
		twdDelay(NVRDELAY);
		SavePriData(0, EepPrivate.wVOffset, idVOFFSET_INDEX);
		#endif
	}        
}

void AdjVideoContrast(sCHAR sStep)
{
	if( (EepVideo.cContrast+sStep)<=V_CONTRAST_MAX && (EepVideo.cContrast+sStep)>=V_CONTRAST_MIN)
	{
		EepVideo.cContrast+=sStep;
		I2CWriteByte(TW101,VCONTRAST,EepVideo.cContrast);  //Ruby 2004-10-09
//		I2CWriteByte(VIDEO_ADDR,VCONTRAST,EepVideo.cContrast);
		OSDShowVideoData();
		I2CWriteByte(EEPVIDEOBLOCK, idVIDEO_CONTRAST_INDEX, EepVideo.cContrast);
		twdDelay(NVRDELAY);
		#if 0
		//#ifdef NVRAM
		SavePriData(1, EepPrivate.cVPos, idVPOS_INDEX);
		twdDelay(NVRDELAY);
		SavePriData(0, EepPrivate.wVOffset, idVOFFSET_INDEX);
		#endif
	}        
}
/*
void AdjVideoSharp(sCHAR sStep)
{
	if( (EepVideo.cSharp+sStep)<=V_SHARP_MAX && (EepVideo.cSharp+sStep)>=V_SHARP_MIN)
	{
		EepVideo.cSharp+=sStep;
        I2CWriteByte(TW101+4,0x80,V_SHARP_MSK|EepVideo.cSharp);
		OSDShowVideoData();
		I2CWriteByte(EEPVIDEOBLOCK, idVIDEO_SHARP_INDEX, EepVideo.cSharp);
		twdDelay(NVRDELAY);		
		#if 0
		//#ifdef NVRAM
		SavePriData(1, EepPrivate.cVPos, idVPOS_INDEX);
		twdDelay(NVRDELAY);
		SavePriData(0, EepPrivate.wVOffset, idVOFFSET_INDEX);
		#endif
	}        
}
*/
void AdjVideoSharp(sCHAR sStep)
{
    if(EepVideo.cSharp>V_SHARP_MAX)
       EepVideo.cSharp=V_SHARP_MAX-1;
    if(EepVideo.cSharp<V_SHARP_MIN)
       EepVideo.cSharp=V_SHARP_MIN;

	if( (EepVideo.cSharp+sStep)<=V_SHARP_MAX && (EepVideo.cSharp+sStep)>=V_SHARP_MIN)
	{
		EepVideo.cSharp+=sStep;
		I2CWriteByte(0x54, 0x80, (EepVideo.cSharp*2+1));
	    //LoadFilter(EepVideo.cSharp); 	
//        I2CWriteByte(TW101+4,0x80,V_SHARP_MSK|EepVideo.cSharp);
//		I2CWriteByte(TW101+4,0x80,V_SHARP_DS);
		OSDShowVideoData();
		I2CWriteByte(EEPVIDEOBLOCK, idVIDEO_SHARP_INDEX, EepVideo.cSharp);
		twdDelay(NVRDELAY);		
		#if 0
		//#ifdef NVRAM
		SavePriData(1, EepPrivate.cVPos, idVPOS_INDEX);
		twdDelay(NVRDELAY);
		SavePriData(0, EepPrivate.wVOffset, idVOFFSET_INDEX);
		#endif
	}
       
}

void AdjVideoSat(sCHAR sStep)
{
	if( (EepVideo.cSat+sStep)<=V_SAT_MAX && (EepVideo.cSat+sStep)>=V_SAT_MIN)
	{
		EepVideo.cSat+=sStep;
		
		I2CWriteByte(VIDEO_ADDR,VSAT,EepVideo.cSat);
		OSDShowVideoData();
		I2CWriteByte(EEPVIDEOBLOCK, idVIDEO_SAT_INDEX, EepVideo.cSat);
		twdDelay(NVRDELAY);		
		#if 0
		//#ifdef NVRAM
		SavePriData(1, EepPrivate.cVPos, idVPOS_INDEX);
		twdDelay(NVRDELAY);
		SavePriData(0, EepPrivate.wVOffset, idVOFFSET_INDEX);
		#endif
	}        
}

void AdjVideoHue(sCHAR sStep)
{
	if( (EepVideo.cHue+sStep)<=V_HUE_MAX && (EepVideo.cHue+sStep)>=V_HUE_MIN)
	{
		EepVideo.cHue+=sStep;
		I2CWriteByte(VIDEO_ADDR,VHUE,EepVideo.cHue-0x80);
		OSDShowVideoData();
		I2CWriteByte(EEPVIDEOBLOCK, idVIDEO_HUE_INDEX, EepVideo.cHue);
		twdDelay(NVRDELAY);		
		#if 0
		//#ifdef NVRAM
		SavePriData(1, EepPrivate.cVPos, idVPOS_INDEX);
		twdDelay(NVRDELAY);
		SavePriData(0, EepPrivate.wVOffset, idVOFFSET_INDEX);
		#endif
	}        
}
#ifdef TV
extern bit m_bLCDOFF;

void AdjTVChannel(sCHAR sStep, bit bShow)
{
	uCHAR cNum, cNum_b,cTotal;
	uWORD wTemp;
//	cTotal=I2CReadByte(EEPVIDEOBLOCK, 0x00);
#ifdef NTSC
	if(m_bAir_Cable)cTotal=99;
	else cTotal=83;	
#endif
#ifdef PAL
	cTotal=95;
#endif
	twdDelay(NVRDELAY);
	cNum = I2CReadByte(EEPVIDEOBLOCK, 0x01);
	cNum_b=cNum;
	twdDelay(NVRDELAY);

	do
	{
		cNum+=sStep;
		if(sStep)
		{
			if(cNum>cTotal)
				cNum=1;
			else if(cNum<1)
				cNum=cTotal;
		}
		wTemp=TVSetChannel(cNum-1);
		if(wTemp&0x8000)m_bTV_Skip=1;
		else m_bTV_Skip=0;
	}while(m_bTV_Skip&&(cNum_b!=cNum)&&sStep);

	I2CWriteByte(EEPVIDEOBLOCK, 0x01, cNum);
	if(sStep||(!bShow))
	{
//			Timer1Start();
			if(m_bBKPowerOn)
				BKPower();
			SetTuner(wTemp);
			OSDPosition(RIGHT_TOP);
			OSDDrawNum(cNum, 0, 19, 1, COL_NORMAL, DRAW_BLANK|0x03);//

⌨️ 快捷键说明

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