📄 osddraw.c
字号:
#include <reg51.h>
#include "common.h"
#include "System.h"
#include "Struct.h"
#include "OSDDraw.h"
#include "Keypad.h"
#include "TwoWire.h"
#include "TW10xReg.h"
#include "OSDCtrl.h"
#include "OSDDRAW.h"
#include "Video.h"
#include "Tuner.h"
#if (defined T100A)|(defined T101A)|(defined T101)
#include "T100_OSDString.h"
#include "T100OSD.h"
#endif
#if (defined T102)|(defined T106)|(defined T112)
#include "T102_OSDString.h"
#include "T102OSD.h"
#endif
#include "OSDTbl.h"
#include "OSDMenu.h"
#include "intrins.h"
extern uCHAR ir_data;
extern uCHAR m_cSoundSystem;
extern uCHAR ir_data;
extern uCHAR ir_repeat;
extern bit m_bAir_Cable;
extern bit m_bTV_Skip;
extern bit m_bKyPowerFlat;
extern bit m_bBKPowerOn;
extern bit m_bOSDEnable;
extern bit m_bKyPowerOn;
extern bit m_bChipPowerOn;
extern bit m_bKyBlocked;
extern uCHAR idata m_cBuff[5];
extern uWORD idata m_wBuff[3];
extern uDWORD m_dwBuff[2];
extern uCHAR idata m_cOSDEvent;
extern uCHAR idata m_cCurreKey;
extern uCHAR idata m_cPreKey;
extern uCHAR idata m_cItem;
extern uCHAR idata m_cOSDFunc;
extern uWORD idata m_wVRes;
extern uWORD idata m_wHRes;
extern uCHAR idata m_cSource;
extern uCHAR idata m_cTV_Num;
extern uDWORD m_dwVFrameCntPre;
extern uWORD m_wHSyncPeriodPre;
extern void BKPower(void);
extern void PowerManage(void);
extern void AutoScanChannel(void);
#if VIDEO_AVAILABLE
extern EEPVIDEO idata EepVideo;
#endif
#ifdef TIMER0
extern void Timer0Start(void);
extern void Timer0Stop(void);
#endif
#ifdef NVRAM
#include "NVRam.h"
extern uWORD idata m_wEepRom;
#endif
extern uCHAR idata m_cOSDMenu;
MULTILANGUAGEOSD *pOSDLangPtr;
OSDMENU **pOSDMenuPtr;
uCHAR cTotal=0;
// ADC Digi
//Bright,contrast,sharp,freq,phase,hpos,vpos,Bklight,OSDH/V,Gain/Offset Gain/Offset Volume
OSDPARAMS code sOSDParamsMax=
{0xff, 0xff, 5, 20, 0x1f, 40, 20, 20, 80,65, 0xC0,0xff, 0xff,0xff, 0xFF};
OSDPARAMS code sOSDParamsMin=
{0, 0, 0, 0, 0x00, 0, 0, 0, 1,1, 0,0, 0,0, 0x00};
OSDPARAMS code sOSDParamsDef=
{0x80, 0x80, 2, 10, 0x10, 20, 10, 10, 75,45, 0x80,0x80, 0x80,0x80, 0x40};
#if (defined T102)|(defined T106)|(defined T112)
uCHAR code cOSDMenuLutData[32]={ //For test
//0xGB, 0x0R
0x0f,0x00, //1 blue
0x00,0x00, //2 black
0x0f,0x0a, //3 purple
0x0f,0x00, //4 blue
0xf8,0x00, //5 green
0x22,0x0A, //6 red
0x1f,0x01, //7 light blue//olive
0x88,0x05, //8 light grey
0xb9,0x0b, //9 purple
0xBD,0x05, //A purple
0x0f,0x0f, //B
0xA3,0x0A, //C Yellow
0xcc,0x0c, //D light grey
0x68,0x03, //E Light Blue Main Menu Background or 0x79, 0x04 which is a litter light
0xff,0x0f, //F white
0x00,0x00, //0
};
#else
uCHAR code cOSDMenuLutData[32]={
//0xGB, 0x0R
0x00,0x00, //0
0x0f,0x00, //1 blue
0x00,0x00, //2 black
0x0f,0x0a, //3 purple
0x0f,0x00, //4 blue
0xf8,0x00, //5 green
0x22,0x0A, //6 red
0x1f,0x01, //7 light blue//olive
0x88,0x05, //8 light grey
0xb9,0x0b, //9 purple
0xBD,0x05, //A purple
0x0f,0x0f, //B
0xA3,0x0A, //C Yellow
0xcc,0x0c, //D light grey
0x68,0x03, //E Light Blue Main Menu Background or 0x79, 0x04 which is a litter light
0xff,0x0f, //F white
};
#endif
void OSDLoadColor(void)
{
uCHAR i;
I2CWriteByte(TW101,OSD_CFG_INDEX,OSD_LUT_RAM_DATA);
for(i=0;i<32;i++)
I2CWriteByte(TW101,OSD_CFG_DATA,cOSDMenuLutData[i]);
}
void OSDSetRamAddr(uWORD address)
{
I2CWriteByte(TW101,OSD_RAM_AH,(uCHAR)(address>>8));
I2CWriteByte(TW101,OSD_RAM_AL,(uCHAR)(address & 0xff));
}
void OSDEnable(void)
{
m_bOSDEnable = 1;
OSDCfgWr(OSD_CTRL,0x84);//0x80);//0x84);//0x98); //change by Sherman 05'11'01
#ifdef TIMER0
Timer0Start();
#endif
}
void OSDDisable(void)
{
Timer0Stop();
OSDCfgWr(OSD_CTRL,0x18);
m_cOSDEvent=0;
m_cOSDFunc=0;
m_cItem=1;
m_bOSDEnable=0;
m_cCurreKey=m_cPreKey=0xFF;
}
void OSDExit(void)
{
OSDCfgWr(OSD_CTRL,0x18);
OSDCfgWr(0x10,0x00); //Disable window
OSDDisable();
// OSDClearPage();
}
void OSDFuncSelect(sCHAR sStep)
{
//Remove previous cursor
OSDClearCursor();
if(m_cItem+sStep>=1 && m_cItem+sStep<=cTotal)
m_cItem+=sStep;
else
{
if(sStep<0)
m_cItem=cTotal;
else
m_cItem=1;
}
m_cOSDFunc=m_cItem;
switch(m_cOSDMenu){
case idVIDEOMENU:
OSDShowVideoData();
break;
case idTVMENU:
// OSDShowTVData(); // mark by Sherman 05'11'14
break;
default:
break;
}
OSDMoveCursor();
return;
}
void OSDEventMgr(void)
{
Timer0Stop();
switch(m_cOSDEvent){
case CLOSEMENU:
OSDExit();
break;
case OPENMENU:
m_cItem=1;
OSDOpenMenu();
break;
case FUNCSELCT_IN:
OSDFuncSelect(1);
break;
case FUNCSELCT_DN:
OSDFuncSelect(-1);
break;
case FUNCENTER:
OSDClearPage();
OSDPosition(CENTER);
OSDShowPage();
break;
case FUNCEXIT:
OSDFuncExit();
break;
case FUNCADJ_IN:
OSDItemAdj(INCREASE);
break;
case FUNCADJ_IN1:
OSDItemAdj(INCREASE1);
break;
case FUNCADJ_DN:
OSDItemAdj(DECREASE);
break;
case FUNCADJ_DN1:
OSDItemAdj(DECREASE1);
break;
case FUNCADCCAL:
break;
case POWERMANAGE:
m_bKyPowerOn = m_bKyPowerOn^0x01;
PowerManage();
break;
default: break;
}
if(m_bOSDEnable)
Timer0Start();
}
void OSDOpenMenu(void)
{
OSDClearPage();
OSDPosition(CENTER);
OSDEnable();
m_cItem=1;
m_cOSDFunc=1;
OSDShowPage();
switch(m_cOSDMenu){
case idVIDEOMENU:
ir_repeat=1;
OSDShowVideoData();
break;
case idTVMENU:
ir_repeat=0;
// OSDShowTVData(); // mark by Sherman 05'11'14
break;
default:
return;
}
m_cOSDEvent=OPENMENU;
}
void OSDFuncExit(void)
{
}
uCHAR OSD_cOSDLang=0;
void OSDShowPage(void)
{
uCHAR y=1;
pOSDLangPtr=&MultiLangOSD[OSD_cOSDLang];
pOSDMenuPtr=pOSDLangPtr->osdMenuPtr;
cTotal=0;
while(pOSDMenuPtr[m_cOSDMenu-1][cTotal].iconStr!=NULL)
{
OSDShowLine(iBlankLine,0,y,COL_NORMAL,OSD_LENGTH);
//OSDShowLine(pOSDMenuPtr[m_cOSDMenu-1][cTotal].iconStr,ICON_STAT,y,COL_NORMAL,OSD_LENGTH);
OSDShowLine(pOSDMenuPtr[m_cOSDMenu-1][cTotal].txtStr,TXT_STAT,y,COL_NORMAL,OSD_LENGTH);
// idx = pOSDMenuPtr[(m_cOSDFunc>>4)-1][cTotal].cidIdx;
switch (pOSDMenuPtr[(m_cOSDMenu-1)-1][cTotal].cDataAttr)
{
case GAUGE:
case NUMBER:
// OSDDrawNum(EepOSDPub[idx],sOSDParams1[idx].Max,NUM_STAT,y,COL_NORMAL);
break;
// case OPTION:
// OSDShowOption(y,COL_NORMAL);
// break;
// case INFO:
// OSDShowInfo(0,(cTotal+1),COL_GAUGE);
// break;
case NONE:
default:
break;
}
cTotal++;
y++;
//twdDelay(30);
}
OSDShowLine(iBlankLine,0,y++,COL_NORMAL,OSD_LENGTH);
OSDShowLine(iBlankLine,0,y,COL_NORMAL,OSD_LENGTH);
OSDMoveCursor();
}
void OSDCleanLine(uCHAR x,uCHAR y,uCHAR cColor,uCHAR cLength)
{
if((x < 30) && ( y < OSD_LINE_NUM))
{
OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)y << 5)+x);
twdWr_Burst_A(OSD_RAM_DL); // Write OSD index
while((x < 30) && (x < cLength))
{
twdWr_Burst_D(BLANK);
twdWr_Burst_D(cColor);
x++;
}
twdWr_Burst_P();
}
}
void OSDClearPage(void)
{
uCHAR i=0;
for(i=0;i<OSD_LINE_NUM;i++)
{
OSDCleanLine(0,i,0,30);
OSDSetLineAttribute(i,0x80);
}
}
void OSDSetLineAttribute(uCHAR cLine,uCHAR cAttribute)
{
OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)cLine << 5)+31);
twdWr_Burst_A(OSD_RAM_DL); // Write OSD index
twdWr_Burst_D(0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -