📄 osdfunc.c
字号:
/******************************************************************************
Copyright (c) 2005 MStar Semiconductor, Inc.
All rights reserved.
[Module Name]: OSDFunc.c
[Date]: 04-Feb-2005
[Comment]:
OSD functions for Maria(MST7XXX) Chip.
[Reversion History]:
*******************************************************************************/
#define _OSDFUNC_C_
/********************
* INCLUDE FILES *
*********************/
#include "Project.h"
#include "Global.h"
#include "TypeDef.h"
#include "debug.h"
#include "Ms_rwreg.h"
#include "Misc.h"
#include "Ms7x_reg.h"
#include "Mst7x.h"
#include "Ms_Func.h"
#include "OSDMenu.h"
#include "OSDFunc.h"
#include "Font.h"
#include "PANEL.h"
/********************
* VARIABLEV DEFINE *
*********************/
//BYTE g_ucOsdFontColor;
/**********************
* FUNCTION PROTOTYPES *
***********************/
void osdOSDWriteByte(BYTE address, BYTE value)
{
mstWriteByte(BK0_A1_OSDRA, address);
mstWriteByte(BK0_A2_OSDRD, value);
}
/*BYTE OSD_mStar_ReadOSDByte(BYTE address)
{
mstWriteByte(BK0_A1_OSDRA, address);
return mstReadByte(BK0_A2_OSDRD);
}*/
void osdOSDLoadPalette(BYTE *colorPtr, BYTE num)
{
mstWriteByte(BK0_A1_OSDRA, OSD_28_CLR0R);
mstWriteData(BK0_A2_OSDRD, colorPtr, num, 0);
}
void osdOSDLoadFont(BYTE addr, BYTE *fontPtr, WORD num)
{
mstWriteByte(BK0_A3_RAMFA, addr);
mstWriteData(BK0_A4_RAMFD, fontPtr, num, 0);
/*mStar_WriteDDRByte(BK0_A3_RAMFA, addr);
while (num--)
mStar_WriteDDRByte(BK0_A4_RAMFD, *(fontPtr++));*/
}
void osdOSDClearAll(void)
{
BYTE ucRetry = 10;
mstWriteByte(BK0_A0_OSDIOA, CLR_B);
while (ucRetry--)
{
miscDelay1ms(3);
if ((mstReadByte(BK0_A0_OSDIOA)&CLR_B)==0)
break;
}
}
void osdOSDEnable(void)
{
osdOSDWriteByte(OSD_0C_IOSDC1, (((OSD_WIN_VZOOM&0x03)<<6)+((OSD_WIN_HZOOM&0x03)<<4)+MWIN_B));
}
void osdOSDDisable(void)
{
osdOSDWriteByte(OSD_0C_IOSDC1, 0x00);
miscDelay1ms(20);
mstPowerManagement(PM_OSD_TURN_OFF);
g_ucSystemFlag |= SAVE_SETTING_FLAG;
}
void osdOSDSetFrame(BYTE PositionX, BYTE PositionY, BYTE Width, BYTE Height)
{
DWORD ulTemp;
// Set X position
ulTemp=((DWORD)PositionX*(PANEL_WIDTH-(WORD)Width*12*(OSD_WIN_HZOOM+1)))/100+PANEL_HSTART-48;
//ulTemp=ulTemp/4;
osdOSDWriteByte(OSD_02_OHSTA_L, ulTemp&0xFF);
osdOSDWriteByte(OSD_03_OHSTA_H, ulTemp>>8);
// Set Y position
ulTemp=((DWORD)PositionY*(PANEL_HEIGHT-(WORD)Height*18*(OSD_WIN_VZOOM+1)))/100;
//ulTemp=ulTemp/4;;
osdOSDWriteByte(OSD_04_OVSTA_L, ulTemp&0xFF);
osdOSDWriteByte(OSD_05_OVSTA_H, ulTemp>>8);
// Set OSD frame width size
osdOSDWriteByte(OSD_06_OSDW, Width-1);
// Set OSD frame height size
osdOSDWriteByte(OSD_07_OSDH, Height-1);
// Frame Offset
//mStar_WriteOSDByte(OSD_12_OCBUFO, Width-1);
osdOSDWriteByte(OSD_12_OCBUFO, 0x00);
}
void osdOSDSetStringColor(BYTE FGC, BYTE BGC)
{
g_ucOsdFontColor = ((FGC&0x0F)<<4)+(BGC&0x0F);
}
void osdOSDPrintString(BYTE xPos, BYTE yPos, BYTE ucLanguage, BYTE *str, BYTE FGC, BYTE BGC)
{
WORD uwAddress;
BYTE ucLoop,x;
BYTE ucDrawCode=TRUE;
if (yPos&_BIT7)
ucDrawCode=FALSE;
yPos&=0x3F;//~(BIT7|BIT6);
ucLoop = 0;
uwAddress=(WORD)yPos*OSD_MAINMENU_WIDTH+xPos; // get real address
osdOSDSetStringColor(FGC, BGC);
x=0;
ucLoop=0;
for (x=0;x<255;x++)
{
if(ucLoop==ucLanguage)
break;
if(str[x]==0xff)
ucLoop+=1;
}
mstWriteWord(BK0_A9_DISPAA_H, uwAddress); // BK0_A8_DISPAA_L, BK0_A9_DISPAA_H
for (ucLoop = x; ucLoop<0xff; ucLoop++)
{
if (str[ucLoop]!=0xff)
mstWriteByte(BK0_AA_DISPAD, g_ucOsdFontColor);
else
break;
}
if (ucDrawCode==TRUE)
{
mstWriteWord(BK0_A6_DISPCA_H, uwAddress); // BK0_A5_DISPCA_L, BK0_A6_DISPCA_H
for (ucLoop = x; ucLoop<0xff; ucLoop++)
{
if (str[ucLoop]!=0xff)
mstWriteByte(BK0_A7_DISPCD, str[ucLoop]);
else
break;
}
}
}
void osdOSDPrintIcon(BYTE xPos, BYTE yPos, BYTE icon, BYTE FGC, BYTE BGC)
{
WORD uwAddress;
uwAddress=yPos*OSD_MAINMENU_WIDTH+xPos;
osdOSDSetStringColor(FGC, BGC);
mstWriteWord(BK0_A6_DISPCA_H, uwAddress); // BK0_A5_DISPCA_L, BK0_A6_DISPCA_H
mstWriteByte(BK0_A7_DISPCD, icon);
mstWriteWord(BK0_A9_DISPAA_H, uwAddress); // BK0_A8_DISPAA_L, BK0_A9_DISPAA_H
mstWriteByte(BK0_AA_DISPAD, g_ucOsdFontColor);
}
#if 1
void osdOSDPrintValue(BYTE xPos, BYTE yPos, SINT dt, BYTE FGC, BYTE BGC)
{
BYTE ucDat;
WORD i;
bit fz;
fz=0;
for(i=100; i>0; i/=10)
{
ucDat=(unsigned char)(dt/i);
if(!fz)
{
if(ucDat!=0)
fz=1;
}
if(fz)
{
dt=dt-ucDat*i;
ucDat=ucDat+_0;
osdOSDPrintIcon(xPos++, yPos, ucDat, FGC, BGC);
}
else
{
osdOSDPrintIcon(xPos++, yPos, __, FGC, BGC);
}
}
if(!fz)
osdOSDPrintIcon((xPos-1), yPos, _0, FGC, BGC);
}
void osdOSDPrintAdjustBar(BYTE xPos, BYTE yPos, BYTE MAX, BYTE val, BYTE FGC, BYTE BGC)
{
float remainder;
WORD uwAddress;
BYTE i;
WORD kk;
BYTE ff[30];
osdOSDSetStringColor(FGC, BGC);
uwAddress=yPos*OSD_MAINMENU_WIDTH+xPos;
kk=val;
ff[18]=kk*9/MAX;
ff[19]=(kk*9)%MAX;
//remainder=(float)ff[19]/MAX*7; // For 7 scale
remainder=(float)ff[19]/MAX*5; // for 5 scale
ff[0]=_GUAGESTART;
i=1;
if(ff[18] >= 1)
{
for(; i <= ff[18]; i++)
ff[i]=_GUAGE4_4;
}
if(remainder != 0)
{
if(remainder >0 && remainder <1.0) ff[i]=_GUAGE0_4; else
if(remainder >=1.0 && remainder <2.0) ff[i]=_GUAGE1_4; else
if(remainder >=2.0 && remainder <3.0) ff[i]=_GUAGE2_4; else
if(remainder >=3.0 && remainder <4.0) ff[i]=_GUAGE3_4; else
if(remainder >=4.0 && remainder <5.0) ff[i]=_GUAGE4_4; /*else
if(remainder >=5.0 && remainder <6.0) ff[i]=0x5A; else // For 7 scale
if(remainder >=6.0 && remainder <7.0) ff[i]=0x5B;*/ // For 7 scale
i++;
}
while(i<10)
ff[i++]=_GUAGE0_4;
ff[10]=_GUAGEEND;
mstWriteWord(BK0_A9_DISPAA_H, uwAddress); // BK0_A8_DISPAA_L, BK0_A9_DISPAA_H
for(i = 0; i<11; i++)
{
mstWriteByte(BK0_AA_DISPAD, g_ucOsdFontColor);
}
mstWriteWord(BK0_A6_DISPCA_H, uwAddress); // BK0_A5_DISPCA_L, BK0_A6_DISPCA_H
for(i = 0; i<11; i++)
{
mstWriteByte(BK0_A7_DISPCD, ff[i]);
}
}
#endif
void osdOSDSetBlockColor(BYTE xPos, BYTE yPos, BYTE width, BYTE height, BYTE FGC, BYTE BGC)
{
WORD uwAddress;
osdOSDSetStringColor(FGC, BGC);
uwAddress = yPos*OSD_MAINMENU_WIDTH+xPos;
for (yPos = 0; yPos < height; yPos++)
{
mstWriteWord(BK0_A9_DISPAA_H, uwAddress); // BK0_A8_DISPAA_L, BK0_A9_DISPAA_H
for (xPos = 0; xPos < width; xPos++)
{
mstWriteByte(BK0_AA_DISPAD, g_ucOsdFontColor);
}
uwAddress += OSD_MAINMENU_WIDTH;
}
}
void osdOSDClearBlock(BYTE xPos, BYTE yPos, BYTE width, BYTE height)
{
WORD uwAddress;
uwAddress = yPos*OSD_MAINMENU_WIDTH+xPos;
for (yPos = 0; yPos < height; yPos++)
{
mstWriteWord(BK0_A6_DISPCA_H, uwAddress); // BK0_A5_DISPCA_L, BK0_A6_DISPCA_H
for(xPos = 0; xPos < width; xPos++)
{
mstWriteByte(BK0_A7_DISPCD, __);
}
uwAddress += OSD_MAINMENU_WIDTH;
}
}
void osdSetTransparency(BYTE TransValue)
{
mstWriteByte(BK0_62_DITHCTL1, 0x41);
TransValue &= 0x07;
mstWriteByte(BK0_63_OSD_CTL, ((mstReadByte(BK0_63_OSD_CTL)&0xF8)|TransValue));
}
/*
void OSD_Test(void)
{
BYTE index;
mstWriteByte(BK0_A6_DISPCA_H, 0x00);
mstWriteByte(BK0_A5_DISPCA_L, 0x00);
for(index=0; index < 100; index++)
mstWriteByte(BK0_A7_DISPCD, index);
mstWriteByte(BK0_A9_DISPAA_H, 0x00);
mstWriteByte(BK0_A8_DISPAA_L, 0x00);
for(index=0; index < 100; index++)
mstWriteByte(BK0_AA_DISPAD, 0x25);
}*/
void osdOsdInitial(void)
{
mstWriteByte(GEN_00_REGBK, REGBANKSCALER);
osdOSDClearAll();
// disable OSD
osdOSDWriteByte(OSD_0C_IOSDC1, 0x00);
// enable double
osdOSDWriteByte(OSD_01_OSDDBC, 0x5);
// disable OSD code buffer Base/Offset address
osdOSDWriteByte(OSD_12_OCBUFO, 0x00);
// shadow function control
osdOSDWriteByte(OSD_0E_IOSDC3, ((OSD_WIN_SHADOW_TYPE<<5)+(OSD_WIN_SHADOW_EN<<4)+(OSD_WIN_SHADOW_COLOR&0x0F)));
// shadow height and width control
osdOSDWriteByte(OSD_0F_OSHC, (((OSD_WIN_SHADOW_HEIGHT<<4)&0xF0)+(OSD_WIN_SHADOW_WIDTH&0x0F)));
// Set OSD window size and position
osdOSDSetFrame(OSD_WIN_POS_HStart, OSD_WIN_POS_VStart, OSD_MAINMENU_WIDTH, OSD_MAINMENU_HEIGHT);
// Set OSD space function
osdOSDWriteByte(OSD_08_OHSPA, ((OSD_WIN_SPACE_HStart-1)&0x3F));
osdOSDWriteByte(OSD_09_OVSPA, ((OSD_WIN_SPACE_VStart-1)&0x1F));
osdOSDWriteByte(OSD_0A_OSPW, OSD_WIN_SPACE_WIDTH);
osdOSDWriteByte(OSD_0B_OSPH, OSD_WIN_SPACE_HEIGHT);
// Set OSD character border
osdOSDWriteByte(OSD_0D_IOSDC2, ((OSD_CHAR_BODER_TYPE<<5)+(OSD_CHAR_BODER_WIDTH<<4)+(OSD_CHAR_BODER_COLOR&0x0F)));
// Set OSD palette 16 color
osdOSDWriteByte(OSD_10_IOSDC4, 0x01);
mstWriteByte(BK0_A0_OSDIOA, 0x9E);
// load osd fonts
osdOSDLoadFont(0, &tOSDFont0, sizeof(tOSDFont0));
// load osd palette
osdOSDLoadPalette(&tOSDColorPalette0, sizeof(tOSDColorPalette0));
//osdOSDDisable();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -