📄 osdctrl.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 + -