📄 osddraw.c
字号:
OSDCfgWr(CHAR_HEIGHT_CTRL,0x20);
//OSDCfgWr(CHAR_HEIGHT_CTRL,0x40); //For malata only
OSDCfgWr(BLINK_CTRL,0x01);
//OSDCfgWr(ALPHA_BLD_CTRL,0x80); /* Alpha blending is disable */
OSDCfgWr(ALPHA_BLD_CTRL,0x8A);//0x00); //0x86 // Alpha blending is disable; for malata only
OSDLoadColor();
//OSDSetRamAddr(FONT_DATA_START_ADDRESS);
#if 0
// set TW to fast mode
#ifdef TW100K
I2CWriteByte(TW702_WR_ADDR,TW_INTERFACE,0x04);
#else
I2CWriteByte(TW702_WR_ADDR,TW_INTERFACE,0x05);
#endif
#endif
twdWr_Burst_A(OSD_RAM_DL);
//Below is re-writted
for(i=0; i<128*FONT_HEIGHT; i++)
{
twdWr_Burst_D(font_00[2*i]);
twdWr_Burst_D(font_00[2*i+1]);
}
//0xc00==1024*3;
for(; i<0xc00; i++){
twdWr_Burst_D(0x00);
twdWr_Burst_D(0x00);
}
twdWr_Burst_P();
for(i=0;i<15;i++)
{
OSDCleanLine(0,i,0,31);
OSDSetLineAttribute(i,0x80);
}
//#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));
//EA=0;
}
void OSDEnable(void)
{
m_bOSDEnable = 1;
OSDCfgWr(OSD_CTRL,0x98);
//OSDCfgWr(OSD_CTRL,0x99); //For malata only
#ifdef TIMER0
// if(m_bFactryMode) return;
Timer0Start();
#endif
}
void OSDDisable(void)
{
/*
#ifdef TIMER0
if(!m_bFactryMode)
#endif
*/ Timer0Stop();
OSDCfgWr(OSD_CTRL,0x18);
m_cOSDEvent=0;
m_cOSDFunc=0;
m_cItem=1;
// m_bAdjRGBColor=0; //Init color
m_bOSDEnable=0;
m_cCurreKey=m_cPreKey=0xFF;
}
extern bit bFactry_Func,bFactry_Menu;
void OSDExit(void)
{
OSDCfgWr(OSD_CTRL,0x18);
OSDCfgWr(0x10,0x00); //Disable window
OSDDisable();
OSDClearPage();
bFactry_Func=0;
bFactry_Menu=0;
}
void OSDEventMgr(void)
{
Timer0Stop();
switch(m_cOSDEvent)
{
case CLOSEMENU:
OSDExit();
break;
case OPENMENU:
m_cItem=1;
OSDOpenMenu();
//m_cOSDFunc|=m_cItem;
OSDMoveCursor(0x00,0x17);
break;
case FUNCSELCT_IN:
OSDFuncSelect(1);
// OSDShowData(COL_GAUGE);
break;
case FUNCSELCT_DN:
OSDFuncSelect(-1);
// OSDShowData(COL_GAUGE);
break;
case FUNCENTER:
if(m_cOSDFunc==idVOLUMEMENU
||m_cOSDFunc==idBRIGHTMENU
||m_cOSDFunc==idCONTRASTMENU
||m_cOSDFunc==idSATMENU_VIDEO
||m_cOSDFunc==idSHARP_VIDEO
||m_cOSDFunc==idHUEMENU_VIDEO
||m_cOSDFunc==idLANGUAGE_MENU)
{
// OSDClearPage(); // Del by charles
OSDCfgWr(0x10,0x00); //Disable window
//Ruby test OSDPosition(LEFT_BOTTOM);
OSDPosition(CENTER);
OSDShowSubpage();
break;
}
// OSDFuncEnter();
break;
case FUNCSEL_DN:
if(m_cItem == 1)
{
OSDCleanLine(17,6,COL_GAUGE,OSD_LENGTH);
}
else
{
OSDCleanLine(17,m_cItem-1,COL_GAUGE,OSD_LENGTH);
}
OSDShowVideoData();
break;
case FUNCSEL_UP:
if(m_cItem == 6)
{
OSDCleanLine(17,1,COL_GAUGE,OSD_LENGTH);
}
else
{
OSDCleanLine(17,m_cItem+1,COL_GAUGE,OSD_LENGTH);
}
OSDShowVideoData();
break;
case FUNCEXIT:
OSDFuncExit();
break;
case FUNCADJ_IN:
OSDItemAdj(INCREASE);
break;
case FUNCADJ_DN:
OSDItemAdj(DECREASE);
break;
case FUNCADCCAL:
break;
case POWERMANAGE:
m_bKyPowerOn = m_bKyPowerOn^0x01;
PowerManage();
//if(m_bChipPowerOn)
// BKPower();
break;
default:
break;
}
if(m_bOSDEnable)
Timer0Start();
}
void OSDOpenMenu(void)
{
OSDPosition(CENTER);
switch(m_cOSDFunc){
case idMAINMENU:
break;
case idCOLORMENU:
break;
case idLANGMENU:
break;
case idTVMENU_VIDEO:
OSDShowLine(iBlankLine,0,0,COL_TITLE,OSD_LENGTH);
OSDShowLine(iTuning_E,0,0,COL_TITLE,OSD_LENGTH);
OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)0<<5)+20);
twdWr_Burst_A(OSD_RAM_DL);
twdWr_Burst_D('M');
twdWr_Burst_D(COL_TITLE);
twdWr_Burst_D('H');
twdWr_Burst_D(COL_TITLE);
twdWr_Burst_D(0x17); //'z'
twdWr_Burst_D(COL_TITLE);
twdWr_Burst_D(BLANK); //'z'
twdWr_Burst_D(COL_TITLE);
//Draw shadow
//OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)0<<5)+24);
//twdWr_Burst_A(OSD_RAM_DL);
twdWr_Burst_D(0x40); //V
twdWr_Burst_D(0x02);
twdWr_Burst_P();
break;
case idSRCMENU:
return;
case idFCTRYMENU:
return;
}
OSDPosition(CENTER);
OSDEnable();
OSDShowPage(); //Title
OSDShowVideoData();
}
void OSDFuncSelect(sCHAR sStep)
{
//Remove previous cursor
//OSDHLLine(m_cItem, COL_NORMAL);
switch(m_cOSDFunc&0xf0){
case idMAINMENU:
if((m_cSource&0x0C)==0x00)//isrcVIDEO)
{
if(m_cItem+sStep>=1 && m_cItem+sStep<=6 ) m_cItem+=sStep;
else
{
if(sStep<0) m_cItem=6;
else m_cItem=1;
}
}
else
{
if(m_cItem+sStep>=1 && m_cItem+sStep<=10 ) m_cItem+=sStep;
else
{
if(sStep<0) m_cItem=10;
else m_cItem=1;
}
}
break;
case idCOLORMENU:
if(m_cItem+sStep>=1 && m_cItem+sStep<=5) m_cItem+=sStep;
else
{
if(sStep<0) m_cItem=5;
else m_cItem=1;
}
break;
case idLANGMENU:
if(m_cItem+sStep>=1 && m_cItem+sStep<=5) m_cItem+=sStep;
else
{
if(sStep<0) m_cItem=5;
else m_cItem=1;
}
break;
case idSRCMENU:
if(m_cItem<4) m_cItem++;
else m_cItem=1;
break;
case idFCTRYMENU:
if(m_cItem+sStep>=1 && m_cItem+sStep<=9 )
{
if(sStep>0)
{
if(m_cItem==6) m_cItem+=3;
else m_cItem+=sStep;
}
else
{
if(m_cItem==9) m_cItem-=3;
else m_cItem+=sStep;
}
}
else
{
if(sStep<0) m_cItem=9;
else m_cItem=1;
}
break;
case id9300MENU:
if(m_cItem<8) m_cItem++;
else m_cItem=6;
m_cOSDFunc=(m_cOSDFunc&0xf0)|(m_cItem-5);
OSDMoveCursor(0x12,0x17);
return;
case id6500MENU:
if(m_cItem<11)
m_cItem++;
else
m_cItem=9;
m_cOSDFunc=(m_cOSDFunc&0xf0)|(m_cItem-8);
OSDMoveCursor(0x12,0x17);
return;
case idTVMENU_VIDEO:
if(m_cItem+sStep>=1 && m_cItem+sStep<=6) m_cItem+=sStep;
else
{
if(sStep<0) m_cItem=6;
else m_cItem=1;
}
break;
default:
break;
}
m_cOSDFunc=(m_cOSDFunc&0xf0)|m_cItem;
//High Light Current item
OSDMoveCursor(0x00,0x17);
}
void OSDFuncEnter(void)
{
#ifdef TV
uCHAR cTemp;
uWORD wTemp;
if (m_cOSDFunc==idTVMENU_VIDEO)
{
//Clear Previous Page;
//OSDClearPage();
// OSDExit();
m_cItem=1;
cTemp=TVEEPGetChannel();
wTemp=TVSetChannel(cTemp-1);
twdDelay(200);
//SrcControl();
OSDOpenMenu();
#ifdef PAL
OSDDrawTVFreq(wTemp);
OSDDrawBand(wTemp);
#endif
OSDMoveCursor(0x00,0x17);
m_cOSDFunc=idCHANNEL_TV;
return;
}
else
{
switch(m_cOSDFunc){
case idAUTOMEMORY_TV:
AutoMemory();
return;
// case idAUTOSCAN_TV:
// AutoScan();
// return;
case idFINETUNE_TV:
m_cOSDFunc=idFINETUNEMENU_TV;
OSDCfgWr(0x10,0x00); //Disable window
OSDShowLine(iBlankLine,0,2,COL_GAUGE,OSD_LENGTH);
OSDShowLine(iPixelIcon,ICON_STAT,2,COL_GAUGE,OSD_LENGTH);
OSDShowLine(iFineTune_E,TXT_STAT,2,COL_GAUGE,OSD_LENGTH);
break;
case idCHANNEL_TV:
m_cOSDFunc=idCHANNELMENU_TV;
OSDCfgWr(0x10,0x00); //Disable window
cTemp = I2CReadByte(EEPVIDEOBLOCK, 0x01);
OSDShowLine(iBlankLine,0,3,COL_GAUGE,OSD_LENGTH);
OSDShowLine(iPixelIcon,ICON_STAT,3,COL_GAUGE,OSD_LENGTH);
OSDShowLine(iChannel_E,TXT_STAT,3,COL_GAUGE,OSD_LENGTH);
OSDDrawNum(cTemp, 0, 19, 3, COL_GAUGE, DRAW_BLANK|0x03);
break;
default: return;
}
}
#endif
}
void OSDFuncExit(void)
{
}
void OSDShowPage(void)
{
uCHAR i=0;
uCHAR y=1;
MULTILANGUAGEOSD *pOSDLangPtr;
OSDMENU **pOSDMenuPtr;
OSDPosition(CENTER);
if((m_cSource&0x0F)==(isrcTV))
pOSDLangPtr=&MultiLangOSDTV[0];
else
pOSDLangPtr=&MultiLangOSD[0];
pOSDMenuPtr=pOSDLangPtr->osdMenuPtr; //Main
while(pOSDMenuPtr[(m_cOSDFunc>>4)-1][i].iconStr!=NULL)
{
OSDShowLine(iBlankLine,0,y,COL_TITLE,OSD_LENGTH);//TV Kuo
OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)y<<5)+24);
twdWr_Burst_A(OSD_RAM_DL);
twdWr_Burst_D(0x3C); //V
twdWr_Burst_D(0x02);
twdWr_Burst_P();
OSDShowLine(pOSDMenuPtr[(m_cOSDFunc>>4)-1][i].iconStr,ICON_STAT,y,COL_TITLE,OSD_LENGTH);//TV Kuo
if(m_cOSDFunc==idCOLORMENU)
OSDShowLine(pOSDMenuPtr[(m_cOSDFunc>>4)-1][i].txtStr,TXT_STAT-2,y,COL_TITLE,OSD_LENGTH);
else
OSDShowLine(pOSDMenuPtr[(m_cOSDFunc>>4)-1][i].txtStr,TXT_STAT,y,COL_TITLE,OSD_LENGTH);
i++;
y++;
}
OSDShowLine(iBlankLine,0,y,COL_TITLE,OSD_LENGTH);//Kuo TV
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -