📄 osddraw.c
字号:
//Maximum three initiger, percentage
void OSDDrawNum(uWORD wVal, uCHAR cMax, uCHAR x, uCHAR y, uCHAR cColor, uCHAR cAttr)
{
//Init Part
uCHAR cTemp;
if(cMax!=0)
{
m_wBuff[0]=(unsigned long)wVal*100;
m_wBuff[0]=m_wBuff[0]/cMax;
}
else //Non percentage
{
m_wBuff[0]=wVal;
}
if(m_wBuff[0]<10)
m_cBuff[1]=1;
else if(m_wBuff[0]<100)
m_cBuff[1]=2;
else
m_cBuff[1]=3;
OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)y << 5)+x);
twdWr_Burst_A(OSD_RAM_DL); // Write OSD index
if((cAttr&0xF0)==DRAW_BLANK)
{
switch(m_cBuff[1]){
case 1:
if((cAttr&0x0F)==3||(cAttr&0x0F)==2)
{
twdWr_Burst_D(BLANK);
twdWr_Burst_D(cColor);
}
case 2:
if((cAttr&0x0F)==3)
{
twdWr_Burst_D(BLANK);
twdWr_Burst_D(cColor);
}
}
}
else if((cAttr&0xF0)==DRAW_ZERO)
{
switch(m_cBuff[1]){
case 1:
if((cAttr&0x0F)==3||(cAttr&0x0F)==2)
{
twdWr_Burst_D('0'-IndexNumOffset);
twdWr_Burst_D(cColor);
}
case 2:
if((cAttr&0x0F)==3)
{
twdWr_Burst_D('0'-IndexNumOffset);
twdWr_Burst_D(cColor);
}
}
}
while(m_cBuff[1]>0)
{
if(m_cBuff[1]==3)
cTemp=m_wBuff[0]/100;
else if(m_cBuff[1]==2)
cTemp=(m_wBuff[0]%100)/10;
else if(m_cBuff[1]==1)
cTemp=m_wBuff[0]%10;
OSDNumConvert(cTemp);
twdWr_Burst_D(cColor );
m_cBuff[1]--;
}
twdWr_Burst_P();
}
void OSDNumConvert(uCHAR cNum)
{
switch(cNum){
case 9: twdWr_Burst_D('9'-IndexNumOffset); break;
case 8: twdWr_Burst_D('8'-IndexNumOffset); break;
case 7: twdWr_Burst_D('7'-IndexNumOffset); break;
case 6: twdWr_Burst_D('6'-IndexNumOffset); break;
case 5: twdWr_Burst_D('5'-IndexNumOffset); break;
case 4: twdWr_Burst_D('4'-IndexNumOffset); break;
case 3: twdWr_Burst_D('3'-IndexNumOffset); break;
case 2: twdWr_Burst_D('2'-IndexNumOffset); break;
case 1: twdWr_Burst_D('1'-IndexNumOffset); break;
case 0: twdWr_Burst_D('0'-IndexNumOffset); break;
default: break;
}
}
//Ruby add 2004-06-08
//extern uCHAR idata m_cScaleratio;
void OSDShowRatio(void)
{
uCHAR i;
for(i=0;i<10;i++)
{
OSDCleanLine(0,i,0,30);
OSDSetLineAttribute(i,0x80);
}
OSDPosition(RIGHT_TOP);
switch(m_cScaleratio)
{
case ScaleFULL:
OSDShowLine(iScaleFULL_E,16,1,COL_GAUGE,OSD_LENGTH);
break;
case Scale16_9:
OSDShowLine(iScale16_9_E,16,1,COL_GAUGE,OSD_LENGTH);
break;
#if (ZOOM_MODES >=2)
case ZOOM_1:
OSDShowLine(iZoom_1_E,16,1,COL_GAUGE,OSD_LENGTH);
break;
#endif
#if (ZOOM_MODES >=3) //Bruce, 2006/01/10
case ZOOM_2:
OSDShowLine(iZoom_2_E,16,1,COL_GAUGE,OSD_LENGTH);
break;
#endif
#if (ZOOM_MODES >=4)
case Scale4_3:
OSDShowLine(iScale4_3_E,16,1,COL_GAUGE,OSD_LENGTH);
break;
#endif
#if (ZOOM_MODES >=5)
case ZOOM_3:
OSDShowLine(iZoom_3_E,16,1,COL_GAUGE,OSD_LENGTH);
break;
#endif
#if (ZOOM_MODES >=6)
case ZOOM_4:
OSDShowLine(iZoom_4_E,16,1,COL_GAUGE,OSD_LENGTH);
break;
#endif
#if (ZOOM_MODES >=7)
case ZOOM_5:
OSDShowLine(iZoom_5_E,16,1,COL_GAUGE,OSD_LENGTH);
break;
#endif
#if (ZOOM_MODES >=8)
case ZOOM_6:
OSDShowLine(iZoom_6_E,16,1,COL_GAUGE,OSD_LENGTH);
break;
#endif
#if (ZOOM_MODES >=9)
case ZOOM_7:
OSDShowLine(iZoom_1_E,16,1,COL_GAUGE,OSD_LENGTH);
break;
#endif
/*#ifdef T515
case Scale1_1:
OSDShowLine(iScale1_1_E,16,1,COL_GAUGE,OSD_LENGTH);
break;
#endif*/
}
OSDEnable();
}
void OSDShowSource(void)
{
// add by kenny on 941115
OSDDisable();
//=========================
OSDClearPage();
OSDPosition(RIGHT_TOP);
OSDShowLine(uiaSrcMux1[EepPublic.cSource].SrcStr,16,1,COL_GAUGE,OSD_LENGTH);
#ifdef TV
if (uiaSrcMux1[EepPublic.cSource].VideoType==itypeTV)
OSDDrawNum(EepTV.cChannelNum, 0, 19, 2, COL_TITLE, LBLUE_RED|0x03);
#endif
OSDEnable();
}
//extern uCHAR idata m_cStandard;
void OSDShowNTSC_PAL(void)
{
uCHAR i;
// add by kenny on 941115
OSDDisable();
for(i=0;i<10;i++)
{
OSDCleanLine(0,i,0,30);
OSDSetLineAttribute(i,0x80);
}
OSDPosition(RIGHT_TOP);
//=======================
if(m_cChroma==S_NTSC) OSDShowLine(iNTSC_E ,16,1,COL_GAUGE,OSD_LENGTH);
else if(m_cChroma==S_PAL) OSDShowLine(iPAL_E ,16,1,COL_GAUGE,OSD_LENGTH);
else if(m_cChroma==S_SECAM) OSDShowLine(iSECAM_E ,16,1,COL_GAUGE,OSD_LENGTH);
else if(m_cChroma==S_NTSC_4) OSDShowLine(iNTSC_4_E,16,1,COL_GAUGE,OSD_LENGTH);
else if(m_cChroma==S_PAL_M) OSDShowLine(iPAL_M_E ,16,1,COL_GAUGE,OSD_LENGTH);
else if(m_cChroma==S_PAL_CN) OSDShowLine(iPAL_CN_E,16,1,COL_GAUGE,OSD_LENGTH);
OSDEnable();
}
void OSDClearCursor()
{
//uCHAR str_index=ALL_MENU[m_cOSDMenu]->Item_Num*EepPublic.cOSDLang;
uCHAR str_index;
OSDReadData(idPUBMENU);
str_index=ALL_MENU[m_cOSDMenu]->Item_Num*EepPublic.cOSDLang;
OSDShowLine(ALL_MENU[m_cOSDMenu]->str[m_cItem+str_index],TXT_STAT,m_cItem,COL_NORMAL,OSD_LENGTH);
return;
}
void OSDMoveCursor(void)
{
//uCHAR str_index=ALL_MENU[m_cOSDMenu]->Item_Num*EepPublic.cOSDLang;
uCHAR str_index;
uCHAR Max=ALL_MENU[m_cOSDMenu]->Par[m_cItem].ucValMAX;
uCHAR Val=ALL_MENU[m_cOSDMenu]->EEProm[m_cItem];
OSDReadData(idPUBMENU);
str_index=ALL_MENU[m_cOSDMenu]->Item_Num*EepPublic.cOSDLang;
OSDCleanLine(0,ALL_MENU[m_cOSDMenu]->Item_Num+2,COL_NORMAL,28);
OSDShowLine(ALL_MENU[m_cOSDMenu]->str[m_cItem+str_index],TXT_STAT,m_cItem,BLUE_PURPLE,OSD_LENGTH);
if(ALL_MENU[m_cOSDMenu]->Par[m_cItem].cDataAttr&OSD_GUAGE)
OSDDrawGauge(Val,Max,0,ALL_MENU[m_cOSDMenu]->Item_Num+2, COL_GAUGE);
if(ALL_MENU[m_cOSDMenu]->Par[m_cItem].cDataAttr&OSD_VALUE)
OSDDrawNum(Val,Max,NUM_STAT,ALL_MENU[m_cOSDMenu]->Item_Num+GUAGE_GAP,COL_NORMAL,DRAW_BLANK);
//thomas
if((ALL_MENU[m_cOSDMenu]->Par[m_cItem].cDataAttr&OSD_SH_LAN)){
// OSDTransfer(EepPublic.cOSDLang);
OSDSetLineAttribute(ALL_MENU[m_cOSDMenu]->Item_Num+2,0x80);
OSDShowLine(iTransfer_ALL,(OSD_LENGTH-16),ALL_MENU[m_cOSDMenu]->Item_Num+2,BLUE_PURPLE,OSD_LENGTH);
}
return;
}
void OSDPosition(uCHAR cPos)
{
if(cPos==RIGHT_TOP){
OSDCfgWr(CHAR_DLY_0,Y0RightTop); //V[10:8] bit 6-4; H[10:8] bit2-0 23 12
OSDCfgWr(CHAR_DLY_1,Y1RightTop); //H[7:0] 80 80
OSDCfgWr(CHAR_DLY_2,Y2RightTop); //v[7:0] 64 30
}
if(cPos==CENTER){
OSDCfgWr(CHAR_DLY_0,Y0Center); //V[10:8] bit 6-4; H[10:8] bit2-0
OSDCfgWr(CHAR_DLY_1,Y1Center); //H[7:0]
OSDCfgWr(CHAR_DLY_2,Y2Center); //v[7:0]
}
else if(cPos==LEFT_BOTTOM){//not define yet!
OSDCfgWr(CHAR_DLY_0,Y0LeftBottom); //V[10:8] bit 6-4; H[10:8] bit2-0
OSDCfgWr(CHAR_DLY_1,Y1LeftBottom); //H[7:0]
OSDCfgWr(CHAR_DLY_2,Y2LeftBottom); //v[7:0] //00
}
}
#ifdef TV
void OSDTVShowChannel(uCHAR cChannel){
OSDClearPage();
OSDPosition(RIGHT_TOP);
OSDDrawNum(cChannel, 0, 19, 2, COL_TITLE, LBLUE_RED|0x03);
OSDEnable();
}
#endif
#ifdef VBI_CC
// kenny 20060403
void OSDShowCCData(uCHAR wVal, uCHAR x, uCHAR y, uCHAR tAttr)
{
//Init Part
uCHAR iptCC[2];
uCHAR cColor;
uCHAR i;
if ( (x == 0 && y ==1 ) )
{
//=========================
for(i=0;i<OSD_LINE_NUM;i++)
{
OSDCleanLine(0,i,0,30);
OSDSetLineAttribute(i,0x80);
}
OSDCfgWr(CHAR_DLY_2,216); //v[7:0] //00
}
iptCC[0] = wVal;
iptCC[1] = EOL;
OSDCfgWr(CHAR_DLY_0,0x01); //V[10:8] bit 6-4; H[10:8] bit2-0
OSDCfgWr(CHAR_DLY_1,0x00); //H[7:0]
// OSDCfgWr(CHAR_DLY_2,0x00); //v[7:0] //00
if ( tAttr == 1 || tAttr == 2 )
cColor = 0x2f;
else if ( tAttr == 3 || tAttr == 4 )
cColor = 0x25;
else if ( tAttr == 5 || tAttr == 6 )
cColor = 0x24;
else if ( tAttr == 7 || tAttr == 8 )
cColor = 0x23;
else if ( tAttr == 9 || tAttr == 10 )
cColor = 0x26;
else if ( tAttr == 11 || tAttr == 12 )
cColor = 0x2c;
else if ( tAttr == 13 || tAttr == 14 )
cColor = 0x2a;
else
cColor = 0x2f;
if ( iptCC[0] == 0x19 )
cColor &= 0x0f;
OSDShowLine(iptCC,x,y,cColor,OSD_LENGTH);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -